Merge pull request #6499 from dgquintas/compression_accept_encoding

grpc-accept-encoding checks
diff --git a/BUILD b/BUILD
index 1da1650..793c1c7 100644
--- a/BUILD
+++ b/BUILD
@@ -179,6 +179,7 @@
     "src/core/lib/iomgr/endpoint.h",
     "src/core/lib/iomgr/endpoint_pair.h",
     "src/core/lib/iomgr/ev_poll_and_epoll_posix.h",
+    "src/core/lib/iomgr/ev_poll_posix.h",
     "src/core/lib/iomgr/ev_posix.h",
     "src/core/lib/iomgr/exec_ctx.h",
     "src/core/lib/iomgr/executor.h",
@@ -285,8 +286,9 @@
     "src/core/ext/client_config/subchannel_call_holder.h",
     "src/core/ext/client_config/subchannel_index.h",
     "src/core/ext/client_config/uri_parser.h",
+    "third_party/objective_c/Cronet/cronet_c_for_grpc.h",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.h",
-    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h",
+    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
     "src/core/ext/census/aggregation.h",
     "src/core/ext/census/census_interface.h",
     "src/core/ext/census/census_rpc_stats.h",
@@ -312,6 +314,7 @@
     "src/core/lib/iomgr/endpoint_pair_posix.c",
     "src/core/lib/iomgr/endpoint_pair_windows.c",
     "src/core/lib/iomgr/ev_poll_and_epoll_posix.c",
+    "src/core/lib/iomgr/ev_poll_posix.c",
     "src/core/lib/iomgr/ev_posix.c",
     "src/core/lib/iomgr/exec_ctx.c",
     "src/core/lib/iomgr/executor.c",
@@ -439,8 +442,11 @@
     "src/core/ext/client_config/uri_parser.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
+    "src/core/ext/transport/cronet/client/secure/cronet_channel_create.c",
+    "src/core/ext/transport/cronet/transport/cronet_api_dummy.c",
+    "src/core/ext/transport/cronet/transport/cronet_transport.c",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.c",
-    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c",
+    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c",
     "src/core/ext/lb_policy/pick_first/pick_first.c",
     "src/core/ext/lb_policy/round_robin/round_robin.c",
     "src/core/ext/resolver/dns/native/dns_resolver.c",
@@ -483,6 +489,7 @@
     "include/grpc/impl/codegen/sync_posix.h",
     "include/grpc/impl/codegen/sync_win32.h",
     "include/grpc/impl/codegen/time.h",
+    "include/grpc/grpc_cronet.h",
     "include/grpc/grpc_security.h",
     "include/grpc/grpc_security_constants.h",
     "include/grpc/census.h",
@@ -525,6 +532,7 @@
     "src/core/lib/iomgr/endpoint.h",
     "src/core/lib/iomgr/endpoint_pair.h",
     "src/core/lib/iomgr/ev_poll_and_epoll_posix.h",
+    "src/core/lib/iomgr/ev_poll_posix.h",
     "src/core/lib/iomgr/ev_posix.h",
     "src/core/lib/iomgr/exec_ctx.h",
     "src/core/lib/iomgr/executor.h",
@@ -618,7 +626,7 @@
     "src/core/ext/client_config/subchannel_index.h",
     "src/core/ext/client_config/uri_parser.h",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.h",
-    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h",
+    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
     "src/core/ext/census/aggregation.h",
     "src/core/ext/census/census_interface.h",
     "src/core/ext/census/census_rpc_stats.h",
@@ -645,6 +653,7 @@
     "src/core/lib/iomgr/endpoint_pair_posix.c",
     "src/core/lib/iomgr/endpoint_pair_windows.c",
     "src/core/lib/iomgr/ev_poll_and_epoll_posix.c",
+    "src/core/lib/iomgr/ev_poll_posix.c",
     "src/core/lib/iomgr/ev_posix.c",
     "src/core/lib/iomgr/exec_ctx.c",
     "src/core/lib/iomgr/executor.c",
@@ -754,7 +763,7 @@
     "src/core/ext/resolver/dns/native/dns_resolver.c",
     "src/core/ext/resolver/sockaddr/sockaddr_resolver.c",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.c",
-    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c",
+    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c",
     "src/core/ext/lb_policy/pick_first/pick_first.c",
     "src/core/ext/lb_policy/round_robin/round_robin.c",
     "src/core/ext/census/context.c",
@@ -892,6 +901,8 @@
     "include/grpc++/impl/rpc_service_method.h",
     "include/grpc++/impl/serialization_traits.h",
     "include/grpc++/impl/server_builder_option.h",
+    "include/grpc++/impl/server_builder_plugin.h",
+    "include/grpc++/impl/server_initializer.h",
     "include/grpc++/impl/service_type.h",
     "include/grpc++/impl/sync.h",
     "include/grpc++/impl/sync_cxx11.h",
@@ -1038,6 +1049,8 @@
     "include/grpc++/impl/rpc_service_method.h",
     "include/grpc++/impl/serialization_traits.h",
     "include/grpc++/impl/server_builder_option.h",
+    "include/grpc++/impl/server_builder_plugin.h",
+    "include/grpc++/impl/server_initializer.h",
     "include/grpc++/impl/service_type.h",
     "include/grpc++/impl/sync.h",
     "include/grpc++/impl/sync_cxx11.h",
@@ -1333,6 +1346,7 @@
     "src/core/lib/iomgr/endpoint_pair_posix.c",
     "src/core/lib/iomgr/endpoint_pair_windows.c",
     "src/core/lib/iomgr/ev_poll_and_epoll_posix.c",
+    "src/core/lib/iomgr/ev_poll_posix.c",
     "src/core/lib/iomgr/ev_posix.c",
     "src/core/lib/iomgr/exec_ctx.c",
     "src/core/lib/iomgr/executor.c",
@@ -1460,8 +1474,11 @@
     "src/core/ext/client_config/uri_parser.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
+    "src/core/ext/transport/cronet/client/secure/cronet_channel_create.c",
+    "src/core/ext/transport/cronet/transport/cronet_api_dummy.c",
+    "src/core/ext/transport/cronet/transport/cronet_transport.c",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.c",
-    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c",
+    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c",
     "src/core/ext/lb_policy/pick_first/pick_first.c",
     "src/core/ext/lb_policy/round_robin/round_robin.c",
     "src/core/ext/resolver/dns/native/dns_resolver.c",
@@ -1504,6 +1521,7 @@
     "include/grpc/impl/codegen/sync_posix.h",
     "include/grpc/impl/codegen/sync_win32.h",
     "include/grpc/impl/codegen/time.h",
+    "include/grpc/grpc_cronet.h",
     "include/grpc/grpc_security.h",
     "include/grpc/grpc_security_constants.h",
     "include/grpc/census.h",
@@ -1525,6 +1543,7 @@
     "src/core/lib/iomgr/endpoint.h",
     "src/core/lib/iomgr/endpoint_pair.h",
     "src/core/lib/iomgr/ev_poll_and_epoll_posix.h",
+    "src/core/lib/iomgr/ev_poll_posix.h",
     "src/core/lib/iomgr/ev_posix.h",
     "src/core/lib/iomgr/exec_ctx.h",
     "src/core/lib/iomgr/executor.h",
@@ -1631,8 +1650,9 @@
     "src/core/ext/client_config/subchannel_call_holder.h",
     "src/core/ext/client_config/subchannel_index.h",
     "src/core/ext/client_config/uri_parser.h",
+    "third_party/objective_c/Cronet/cronet_c_for_grpc.h",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.h",
-    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h",
+    "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
     "src/core/ext/census/aggregation.h",
     "src/core/ext/census/census_interface.h",
     "src/core/ext/census/census_rpc_stats.h",
diff --git a/Makefile b/Makefile
index ffaf770..42cedf5 100644
--- a/Makefile
+++ b/Makefile
@@ -187,8 +187,8 @@
 CXX_ubsan = clang++
 LD_ubsan = clang
 LDXX_ubsan = clang++
-CPPFLAGS_ubsan = -O1 -fsanitize-coverage=edge -fsanitize=undefined -fno-omit-frame-pointer -Wno-unused-command-line-argument
-LDFLAGS_ubsan = -fsanitize=undefined
+CPPFLAGS_ubsan = -O0 -fsanitize-coverage=edge -fsanitize=undefined,unsigned-integer-overflow -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs
+LDFLAGS_ubsan = -fsanitize=undefined,unsigned-integer-overflow
 DEFINES_ubsan = NDEBUG
 DEFINES_ubsan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=1.5
 
@@ -319,12 +319,19 @@
 HAS_WORKING_SHADOW = $(shell $(CHECK_SHADOW_WORKS_CMD) 2> /dev/null && echo true || echo false)
 ifeq ($(HAS_WORKING_SHADOW),true)
 W_SHADOW=-Wshadow
+NO_W_SHADOW=-Wno-shadow
 endif
-
-CHECK_NO_SHIFT_NEGATIVE_VALUE_CMD = $(CC) -std=c99 -Werror -Wno-shift-negative-value -o $(TMPOUT) -c test/build/empty.c
-HAS_NO_SHIFT_NEGATIVE_VALUE = $(shell $(CHECK_NO_SHIFT_NEGATIVE_VALUE_CMD) 2> /dev/null && echo true || echo false)
-ifeq ($(HAS_NO_SHIFT_NEGATIVE_VALUE),true)
+CHECK_EXTRA_SEMI_WORKS_CMD = $(CC) -std=c99 -Werror -Wextra-semi -o $(TMPOUT) -c test/build/extra-semi.c
+HAS_WORKING_EXTRA_SEMI = $(shell $(CHECK_EXTRA_SEMI_WORKS_CMD) 2> /dev/null && echo true || echo false)
+ifeq ($(HAS_WORKING_EXTRA_SEMI),true)
+W_EXTRA_SEMI=-Wextra-semi
+NO_W_EXTRA_SEMI=-Wno-extra-semi
+endif
+CHECK_NO_SHIFT_NEGATIVE_VALUE_WORKS_CMD = $(CC) -std=c99 -Werror -Wno-shift-negative-value -o $(TMPOUT) -c test/build/no-shift-negative-value.c
+HAS_WORKING_NO_SHIFT_NEGATIVE_VALUE = $(shell $(CHECK_NO_SHIFT_NEGATIVE_VALUE_WORKS_CMD) 2> /dev/null && echo true || echo false)
+ifeq ($(HAS_WORKING_NO_SHIFT_NEGATIVE_VALUE),true)
 W_NO_SHIFT_NEGATIVE_VALUE=-Wno-shift-negative-value
+NO_W_NO_SHIFT_NEGATIVE_VALUE=-Wshift-negative-value
 endif
 
 # The HOST compiler settings are used to compile the protoc plugins.
@@ -341,7 +348,7 @@
 DEFINES += $(EXTRA_DEFINES)
 endif
 
-CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW)
+CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW) $(W_EXTRA_SEMI)
 ifeq ($(HAS_CXX11),true)
 CXXFLAGS += -std=c++11
 else
@@ -472,7 +479,7 @@
 
 OPENSSL_ALPN_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/openssl-alpn.c $(addprefix -l, $(OPENSSL_LIBS)) $(LDFLAGS)
 OPENSSL_NPN_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/openssl-npn.c $(addprefix -l, $(OPENSSL_LIBS)) $(LDFLAGS)
-BORINGSSL_COMPILE_CHECK_CMD = $(CC) $(CPPFLAGS) -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -o $(TMPOUT) test/build/boringssl.c $(LDFLAGS)
+BORINGSSL_COMPILE_CHECK_CMD = $(CC) $(CPPFLAGS) -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) -o $(TMPOUT) test/build/boringssl.c $(LDFLAGS)
 ZLIB_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/zlib.c -lz $(LDFLAGS)
 PROTOBUF_CHECK_CMD = $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $(TMPOUT) test/build/protobuf.cc -lprotobuf $(LDFLAGS)
 
@@ -1035,6 +1042,7 @@
 reconnect_interop_server: $(BINDIR)/$(CONFIG)/reconnect_interop_server
 secure_auth_context_test: $(BINDIR)/$(CONFIG)/secure_auth_context_test
 secure_sync_unary_ping_pong_test: $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test
+server_builder_plugin_test: $(BINDIR)/$(CONFIG)/server_builder_plugin_test
 server_crash_test: $(BINDIR)/$(CONFIG)/server_crash_test
 server_crash_test_client: $(BINDIR)/$(CONFIG)/server_crash_test_client
 shutdown_test: $(BINDIR)/$(CONFIG)/shutdown_test
@@ -1089,6 +1097,7 @@
 head_of_line_blocking_bad_client_test: $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test
 headers_bad_client_test: $(BINDIR)/$(CONFIG)/headers_bad_client_test
 initial_settings_frame_bad_client_test: $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test
+large_metadata_bad_client_test: $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test
 server_registered_method_bad_client_test: $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test
 simple_request_bad_client_test: $(BINDIR)/$(CONFIG)/simple_request_bad_client_test
 unknown_frame_bad_client_test: $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test
@@ -1318,6 +1327,7 @@
   $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test \
   $(BINDIR)/$(CONFIG)/headers_bad_client_test \
   $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test \
+  $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test \
   $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test \
   $(BINDIR)/$(CONFIG)/simple_request_bad_client_test \
   $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test \
@@ -1401,6 +1411,7 @@
   $(BINDIR)/$(CONFIG)/reconnect_interop_server \
   $(BINDIR)/$(CONFIG)/secure_auth_context_test \
   $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test \
+  $(BINDIR)/$(CONFIG)/server_builder_plugin_test \
   $(BINDIR)/$(CONFIG)/server_crash_test \
   $(BINDIR)/$(CONFIG)/server_crash_test_client \
   $(BINDIR)/$(CONFIG)/shutdown_test \
@@ -1656,6 +1667,8 @@
 	$(Q) $(BINDIR)/$(CONFIG)/headers_bad_client_test || ( echo test headers_bad_client_test failed ; exit 1 )
 	$(E) "[RUN]     Testing initial_settings_frame_bad_client_test"
 	$(Q) $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test || ( echo test initial_settings_frame_bad_client_test failed ; exit 1 )
+	$(E) "[RUN]     Testing large_metadata_bad_client_test"
+	$(Q) $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test || ( echo test large_metadata_bad_client_test failed ; exit 1 )
 	$(E) "[RUN]     Testing server_registered_method_bad_client_test"
 	$(Q) $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test || ( echo test server_registered_method_bad_client_test failed ; exit 1 )
 	$(E) "[RUN]     Testing simple_request_bad_client_test"
@@ -1732,6 +1745,8 @@
 	$(Q) $(BINDIR)/$(CONFIG)/secure_auth_context_test || ( echo test secure_auth_context_test failed ; exit 1 )
 	$(E) "[RUN]     Testing secure_sync_unary_ping_pong_test"
 	$(Q) $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test || ( echo test secure_sync_unary_ping_pong_test failed ; exit 1 )
+	$(E) "[RUN]     Testing server_builder_plugin_test"
+	$(Q) $(BINDIR)/$(CONFIG)/server_builder_plugin_test || ( echo test server_builder_plugin_test failed ; exit 1 )
 	$(E) "[RUN]     Testing server_crash_test"
 	$(Q) $(BINDIR)/$(CONFIG)/server_crash_test || ( echo test server_crash_test failed ; exit 1 )
 	$(E) "[RUN]     Testing shutdown_test"
@@ -1870,15 +1885,15 @@
 	$(Q) echo "$(GRPCXX_UNSECURE_PC_FILE)" | tr , '\n' >$@
 
 ifeq ($(NO_PROTOC),true)
-$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc: protoc_dep_error
-$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc: protoc_dep_error
+$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc: protoc_dep_error
+$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc: protoc_dep_error
 else
-$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc: src/proto/grpc/lb/v0/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) 
+$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc: src/proto/grpc/lb/v1/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) 
 	$(E) "[PROTOC]  Generating protobuf CC file from $<"
 	$(Q) mkdir -p `dirname $@`
 	$(Q) $(PROTOC) --cpp_out=$(GENDIR) $<
 
-$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc: src/proto/grpc/lb/v0/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) 
+$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc: src/proto/grpc/lb/v1/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) 
 	$(E) "[GRPC]    Generating gRPC's protobuf service CC file from $<"
 	$(Q) mkdir -p `dirname $@`
 	$(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
@@ -2496,6 +2511,7 @@
     src/core/lib/iomgr/endpoint_pair_posix.c \
     src/core/lib/iomgr/endpoint_pair_windows.c \
     src/core/lib/iomgr/ev_poll_and_epoll_posix.c \
+    src/core/lib/iomgr/ev_poll_posix.c \
     src/core/lib/iomgr/ev_posix.c \
     src/core/lib/iomgr/exec_ctx.c \
     src/core/lib/iomgr/executor.c \
@@ -2623,8 +2639,11 @@
     src/core/ext/client_config/uri_parser.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
+    src/core/ext/transport/cronet/client/secure/cronet_channel_create.c \
+    src/core/ext/transport/cronet/transport/cronet_api_dummy.c \
+    src/core/ext/transport/cronet/transport/cronet_transport.c \
     src/core/ext/lb_policy/grpclb/load_balancer_api.c \
-    src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \
+    src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \
     third_party/nanopb/pb_common.c \
     third_party/nanopb/pb_decode.c \
     third_party/nanopb/pb_encode.c \
@@ -2670,6 +2689,7 @@
     include/grpc/impl/codegen/sync_posix.h \
     include/grpc/impl/codegen/sync_win32.h \
     include/grpc/impl/codegen/time.h \
+    include/grpc/grpc_cronet.h \
     include/grpc/grpc_security.h \
     include/grpc/grpc_security_constants.h \
     include/grpc/census.h \
@@ -2838,6 +2858,7 @@
     src/core/lib/iomgr/endpoint_pair_posix.c \
     src/core/lib/iomgr/endpoint_pair_windows.c \
     src/core/lib/iomgr/ev_poll_and_epoll_posix.c \
+    src/core/lib/iomgr/ev_poll_posix.c \
     src/core/lib/iomgr/ev_posix.c \
     src/core/lib/iomgr/exec_ctx.c \
     src/core/lib/iomgr/executor.c \
@@ -2947,7 +2968,7 @@
     src/core/ext/resolver/dns/native/dns_resolver.c \
     src/core/ext/resolver/sockaddr/sockaddr_resolver.c \
     src/core/ext/lb_policy/grpclb/load_balancer_api.c \
-    src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \
+    src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \
     third_party/nanopb/pb_common.c \
     third_party/nanopb/pb_decode.c \
     third_party/nanopb/pb_encode.c \
@@ -3202,6 +3223,8 @@
     include/grpc++/impl/rpc_service_method.h \
     include/grpc++/impl/serialization_traits.h \
     include/grpc++/impl/server_builder_option.h \
+    include/grpc++/impl/server_builder_plugin.h \
+    include/grpc++/impl/server_initializer.h \
     include/grpc++/impl/service_type.h \
     include/grpc++/impl/sync.h \
     include/grpc++/impl/sync_cxx11.h \
@@ -3506,6 +3529,8 @@
     include/grpc++/impl/rpc_service_method.h \
     include/grpc++/impl/serialization_traits.h \
     include/grpc++/impl/server_builder_option.h \
+    include/grpc++/impl/server_builder_plugin.h \
+    include/grpc++/impl/server_initializer.h \
     include/grpc++/impl/service_type.h \
     include/grpc++/impl/sync.h \
     include/grpc++/impl/sync_cxx11.h \
@@ -4326,7 +4351,7 @@
 LIBBORINGSSL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_SRC))))
 
 $(LIBBORINGSSL_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP)  $(LIBBORINGSSL_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -4355,7 +4380,7 @@
 LIBBORINGSSL_TEST_UTIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_TEST_UTIL_SRC))))
 
 $(LIBBORINGSSL_TEST_UTIL_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_TEST_UTIL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_TEST_UTIL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4393,7 +4418,7 @@
 LIBBORINGSSL_AES_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_AES_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_AES_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_AES_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_AES_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4431,7 +4456,7 @@
 LIBBORINGSSL_ASN1_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_ASN1_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_ASN1_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_ASN1_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_ASN1_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4469,7 +4494,7 @@
 LIBBORINGSSL_BASE64_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_BASE64_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_BASE64_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_BASE64_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4507,7 +4532,7 @@
 LIBBORINGSSL_BIO_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_BIO_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_BIO_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_BIO_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_BIO_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4545,7 +4570,7 @@
 LIBBORINGSSL_BN_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_BN_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_BN_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_BN_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_BN_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4583,7 +4608,7 @@
 LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_BYTESTRING_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4621,7 +4646,7 @@
 LIBBORINGSSL_AEAD_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_AEAD_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_AEAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_AEAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4659,7 +4684,7 @@
 LIBBORINGSSL_CIPHER_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_CIPHER_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4697,7 +4722,7 @@
 LIBBORINGSSL_CMAC_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_CMAC_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_CMAC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_CMAC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4735,7 +4760,7 @@
 LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -4762,7 +4787,7 @@
 LIBBORINGSSL_ED25519_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_ED25519_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_ED25519_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_ED25519_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4800,7 +4825,7 @@
 LIBBORINGSSL_X25519_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_X25519_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_X25519_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_X25519_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_X25519_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4838,7 +4863,7 @@
 LIBBORINGSSL_DH_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_DH_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_DH_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_DH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_DH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4876,7 +4901,7 @@
 LIBBORINGSSL_DIGEST_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_DIGEST_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4914,7 +4939,7 @@
 LIBBORINGSSL_DSA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_DSA_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_DSA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_DSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_DSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_DSA_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -4941,7 +4966,7 @@
 LIBBORINGSSL_EC_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_EC_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_EC_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_EC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_EC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -4979,7 +5004,7 @@
 LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_EXAMPLE_MUL_LIB_SRC))))
 
 $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5006,7 +5031,7 @@
 LIBBORINGSSL_ECDSA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_ECDSA_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5044,7 +5069,7 @@
 LIBBORINGSSL_ERR_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_ERR_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_ERR_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_ERR_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_ERR_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5082,7 +5107,7 @@
 LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5120,7 +5145,7 @@
 LIBBORINGSSL_EVP_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_EVP_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_EVP_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_EVP_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_EVP_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5158,7 +5183,7 @@
 LIBBORINGSSL_PBKDF_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PBKDF_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5196,7 +5221,7 @@
 LIBBORINGSSL_HKDF_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_HKDF_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_HKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_HKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5223,7 +5248,7 @@
 LIBBORINGSSL_HMAC_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_HMAC_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_HMAC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_HMAC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5261,7 +5286,7 @@
 LIBBORINGSSL_LHASH_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_LHASH_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_LHASH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_LHASH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5288,7 +5313,7 @@
 LIBBORINGSSL_GCM_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_GCM_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_GCM_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_GCM_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_GCM_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_GCM_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5315,7 +5340,7 @@
 LIBBORINGSSL_PKCS12_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PKCS12_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5353,7 +5378,7 @@
 LIBBORINGSSL_PKCS8_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PKCS8_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5391,7 +5416,7 @@
 LIBBORINGSSL_POLY1305_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_POLY1305_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5429,7 +5454,7 @@
 LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_REFCOUNT_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5456,7 +5481,7 @@
 LIBBORINGSSL_RSA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_RSA_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_RSA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_RSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_RSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5494,7 +5519,7 @@
 LIBBORINGSSL_THREAD_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_THREAD_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_THREAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_THREAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5521,7 +5546,7 @@
 LIBBORINGSSL_PKCS7_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PKCS7_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5548,7 +5573,7 @@
 LIBBORINGSSL_X509_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_X509_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_X509_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_X509_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_X509_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -5586,7 +5611,7 @@
 LIBBORINGSSL_TAB_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_TAB_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_TAB_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_TAB_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_TAB_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_TAB_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5613,7 +5638,7 @@
 LIBBORINGSSL_V3NAME_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_V3NAME_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5640,7 +5665,7 @@
 LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PQUEUE_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a: $(ZLIB_DEP)  $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS) 
 	$(E) "[AR]      Creating $@"
@@ -5667,7 +5692,7 @@
 LIBBORINGSSL_SSL_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_SSL_TEST_LIB_SRC))))
 
 $(LIBBORINGSSL_SSL_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
-$(LIBBORINGSSL_SSL_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+$(LIBBORINGSSL_SSL_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
 
 ifeq ($(NO_PROTOBUF),true)
 
@@ -10746,7 +10771,7 @@
 
 
 GRPCLB_API_TEST_SRC = \
-    $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc \
+    $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc \
     test/cpp/grpclb/grpclb_api_test.cc \
 
 GRPCLB_API_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPCLB_API_TEST_SRC))))
@@ -10778,7 +10803,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v0/load_balancer.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a
+$(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v1/load_balancer.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a
 
 $(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a
 
@@ -10789,7 +10814,7 @@
 -include $(GRPCLB_API_TEST_OBJS:.o=.dep)
 endif
 endif
-$(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc
+$(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc
 
 
 HYBRID_END2END_TEST_SRC = \
@@ -11483,6 +11508,49 @@
 endif
 
 
+SERVER_BUILDER_PLUGIN_TEST_SRC = \
+    test/cpp/end2end/server_builder_plugin_test.cc \
+
+SERVER_BUILDER_PLUGIN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_BUILDER_PLUGIN_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/server_builder_plugin_test: openssl_dep_error
+
+else
+
+
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/server_builder_plugin_test: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/server_builder_plugin_test: $(PROTOBUF_DEP) $(SERVER_BUILDER_PLUGIN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LDXX) $(LDFLAGS) $(SERVER_BUILDER_PLUGIN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_builder_plugin_test
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/end2end/server_builder_plugin_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_server_builder_plugin_test: $(SERVER_BUILDER_PLUGIN_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(SERVER_BUILDER_PLUGIN_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
 SERVER_CRASH_TEST_SRC = \
     test/cpp/end2end/server_crash_test.cc \
 
@@ -11982,7 +12050,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_AES_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_AES_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_AES_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_AES_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12009,7 +12077,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_ASN1_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_ASN1_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_ASN1_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_ASN1_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12036,7 +12104,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_BASE64_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_BASE64_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_BASE64_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_BASE64_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12063,7 +12131,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_BIO_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_BIO_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_BIO_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_BIO_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12090,7 +12158,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_BN_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_BN_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_BN_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_BN_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12117,7 +12185,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_BYTESTRING_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_BYTESTRING_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_BYTESTRING_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_BYTESTRING_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12144,7 +12212,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_AEAD_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_AEAD_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_AEAD_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_AEAD_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12171,7 +12239,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_CIPHER_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_CIPHER_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_CIPHER_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_CIPHER_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12198,7 +12266,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_CMAC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_CMAC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_CMAC_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_CMAC_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12225,7 +12293,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_CONSTANT_TIME_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_CONSTANT_TIME_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_CONSTANT_TIME_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_CONSTANT_TIME_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12252,7 +12320,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_ED25519_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_ED25519_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_ED25519_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_ED25519_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12279,7 +12347,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_X25519_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_X25519_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_X25519_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_X25519_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12306,7 +12374,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_DH_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_DH_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_DH_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_DH_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12333,7 +12401,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_DIGEST_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_DIGEST_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_DIGEST_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_DIGEST_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12360,7 +12428,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_DSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_DSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_DSA_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_DSA_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12387,7 +12455,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_EC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_EC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_EC_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_EC_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12414,7 +12482,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_EXAMPLE_MUL_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_EXAMPLE_MUL_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_EXAMPLE_MUL_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_EXAMPLE_MUL_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12441,7 +12509,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_ECDSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_ECDSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_ECDSA_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_ECDSA_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12468,7 +12536,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_ERR_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_ERR_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_ERR_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_ERR_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12495,7 +12563,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_EVP_EXTRA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_EVP_EXTRA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_EVP_EXTRA_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_EVP_EXTRA_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12522,7 +12590,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_EVP_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_EVP_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_EVP_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_EVP_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12549,7 +12617,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_PBKDF_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_PBKDF_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_PBKDF_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_PBKDF_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12576,7 +12644,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_HKDF_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_HKDF_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_HKDF_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_HKDF_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12603,7 +12671,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_HMAC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_HMAC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_HMAC_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_HMAC_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12630,7 +12698,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_LHASH_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_LHASH_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_LHASH_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_LHASH_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12657,7 +12725,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_GCM_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_GCM_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_GCM_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_GCM_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12684,7 +12752,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_PKCS12_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_PKCS12_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_PKCS12_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_PKCS12_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12711,7 +12779,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_PKCS8_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_PKCS8_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_PKCS8_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_PKCS8_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12738,7 +12806,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_POLY1305_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_POLY1305_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_POLY1305_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_POLY1305_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12765,7 +12833,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_REFCOUNT_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_REFCOUNT_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_REFCOUNT_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_REFCOUNT_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12792,7 +12860,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_RSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_RSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_RSA_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_RSA_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12819,7 +12887,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_THREAD_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_THREAD_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_THREAD_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_THREAD_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12846,7 +12914,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_PKCS7_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_PKCS7_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_PKCS7_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_PKCS7_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12873,7 +12941,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_X509_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_X509_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_X509_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_X509_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12900,7 +12968,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_TAB_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_TAB_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_TAB_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_TAB_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12927,7 +12995,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_V3NAME_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_V3NAME_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_V3NAME_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_V3NAME_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12954,7 +13022,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_PQUEUE_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_PQUEUE_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_PQUEUE_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_PQUEUE_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -12981,7 +13049,7 @@
 # boringssl needs an override to ensure that it does not include
 # system openssl headers regardless of other configuration
 # we do so here with a target specific variable assignment
-$(BORINGSSL_SSL_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+$(BORINGSSL_SSL_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
 $(BORINGSSL_SSL_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
 $(BORINGSSL_SSL_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
 
@@ -13104,6 +13172,26 @@
 endif
 
 
+LARGE_METADATA_BAD_CLIENT_TEST_SRC = \
+    test/core/bad_client/tests/large_metadata.c \
+
+LARGE_METADATA_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LARGE_METADATA_BAD_CLIENT_TEST_SRC))))
+
+
+$(BINDIR)/$(CONFIG)/large_metadata_bad_client_test: $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LD) $(LDFLAGS) $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) -o $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test
+
+$(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/large_metadata.o:  $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_large_metadata_bad_client_test: $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_DEPS),true)
+-include $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS:.o=.dep)
+endif
+
+
 SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_SRC = \
     test/core/bad_client/tests/server_registered_method.c \
 
@@ -14317,6 +14405,9 @@
 # otherwise parallel compilation will fail if a source is compiled first.
 src/core/ext/transport/chttp2/client/secure/secure_channel_create.c: $(OPENSSL_DEP)
 src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c: $(OPENSSL_DEP)
+src/core/ext/transport/cronet/client/secure/cronet_channel_create.c: $(OPENSSL_DEP)
+src/core/ext/transport/cronet/transport/cronet_api_dummy.c: $(OPENSSL_DEP)
+src/core/ext/transport/cronet/transport/cronet_transport.c: $(OPENSSL_DEP)
 src/core/lib/http/httpcli_security_connector.c: $(OPENSSL_DEP)
 src/core/lib/security/b64.c: $(OPENSSL_DEP)
 src/core/lib/security/client_auth_filter.c: $(OPENSSL_DEP)
diff --git a/binding.gyp b/binding.gyp
index 4314ab7..760bb24 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -582,6 +582,7 @@
         'src/core/lib/iomgr/endpoint_pair_posix.c',
         'src/core/lib/iomgr/endpoint_pair_windows.c',
         'src/core/lib/iomgr/ev_poll_and_epoll_posix.c',
+        'src/core/lib/iomgr/ev_poll_posix.c',
         'src/core/lib/iomgr/ev_posix.c',
         'src/core/lib/iomgr/exec_ctx.c',
         'src/core/lib/iomgr/executor.c',
@@ -709,8 +710,11 @@
         'src/core/ext/client_config/uri_parser.c',
         'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
         'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
+        'src/core/ext/transport/cronet/client/secure/cronet_channel_create.c',
+        'src/core/ext/transport/cronet/transport/cronet_api_dummy.c',
+        'src/core/ext/transport/cronet/transport/cronet_transport.c',
         'src/core/ext/lb_policy/grpclb/load_balancer_api.c',
-        'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c',
+        'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c',
         'third_party/nanopb/pb_common.c',
         'third_party/nanopb/pb_decode.c',
         'third_party/nanopb/pb_encode.c',
diff --git a/build.yaml b/build.yaml
index 5e47c08..ac61612 100644
--- a/build.yaml
+++ b/build.yaml
@@ -166,6 +166,7 @@
   - src/core/lib/iomgr/endpoint.h
   - src/core/lib/iomgr/endpoint_pair.h
   - src/core/lib/iomgr/ev_poll_and_epoll_posix.h
+  - src/core/lib/iomgr/ev_poll_posix.h
   - src/core/lib/iomgr/ev_posix.h
   - src/core/lib/iomgr/exec_ctx.h
   - src/core/lib/iomgr/executor.h
@@ -240,6 +241,7 @@
   - src/core/lib/iomgr/endpoint_pair_posix.c
   - src/core/lib/iomgr/endpoint_pair_windows.c
   - src/core/lib/iomgr/ev_poll_and_epoll_posix.c
+  - src/core/lib/iomgr/ev_poll_posix.c
   - src/core/lib/iomgr/ev_posix.c
   - src/core/lib/iomgr/exec_ctx.c
   - src/core/lib/iomgr/executor.c
@@ -362,10 +364,10 @@
 - name: grpc_lb_policy_grpclb
   headers:
   - src/core/ext/lb_policy/grpclb/load_balancer_api.h
-  - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h
+  - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h
   src:
   - src/core/ext/lb_policy/grpclb/load_balancer_api.c
-  - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c
+  - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c
   uses:
   - grpc_base
   - grpc_client_config
@@ -400,6 +402,7 @@
   - grpc_client_config
 - name: grpc_secure
   public_headers:
+  - include/grpc/grpc_cronet.h
   - include/grpc/grpc_security.h
   - include/grpc/grpc_security_constants.h
   headers:
@@ -547,6 +550,16 @@
   - grpc_transport_chttp2
   - grpc_base
   - grpc_secure
+- name: grpc_transport_cronet_client_secure
+  headers:
+  - third_party/objective_c/Cronet/cronet_c_for_grpc.h
+  src:
+  - src/core/ext/transport/cronet/client/secure/cronet_channel_create.c
+  - src/core/ext/transport/cronet/transport/cronet_api_dummy.c
+  - src/core/ext/transport/cronet/transport/cronet_transport.c
+  filegroups:
+  - grpc_base
+  - grpc_transport_chttp2
 - name: nanopb
   headers:
   - third_party/nanopb/pb.h
@@ -591,6 +604,8 @@
   - include/grpc++/impl/rpc_service_method.h
   - include/grpc++/impl/serialization_traits.h
   - include/grpc++/impl/server_builder_option.h
+  - include/grpc++/impl/server_builder_plugin.h
+  - include/grpc++/impl/server_initializer.h
   - include/grpc++/impl/service_type.h
   - include/grpc++/impl/sync.h
   - include/grpc++/impl/sync_cxx11.h
@@ -734,6 +749,7 @@
   - grpc_transport_chttp2_client_secure
   - grpc_transport_chttp2_server_insecure
   - grpc_transport_chttp2_client_insecure
+  - grpc_transport_cronet_client_secure
   - grpc_lb_policy_grpclb
   - grpc_lb_policy_pick_first
   - grpc_lb_policy_round_robin
@@ -2643,7 +2659,7 @@
   build: test
   language: c++
   src:
-  - src/proto/grpc/lb/v0/load_balancer.proto
+  - src/proto/grpc/lb/v1/load_balancer.proto
   - test/cpp/grpclb/grpclb_api_test.cc
   deps:
   - grpc++_test_util
@@ -2915,6 +2931,19 @@
   - mac
   - linux
   - posix
+- name: server_builder_plugin_test
+  gtest: true
+  build: test
+  language: c++
+  src:
+  - test/cpp/end2end/server_builder_plugin_test.cc
+  deps:
+  - grpc++_test_util
+  - grpc_test_util
+  - grpc++
+  - grpc
+  - gpr_test_util
+  - gpr
 - name: server_crash_test
   gtest: true
   cpu_cost: 0.1
@@ -3240,19 +3269,21 @@
     timeout_multiplier: 5
   ubsan:
     CC: clang
-    CPPFLAGS: -O1 -fsanitize-coverage=edge -fsanitize=undefined -fno-omit-frame-pointer
-      -Wno-unused-command-line-argument
+    CPPFLAGS: -O0 -fsanitize-coverage=edge -fsanitize=undefined,unsigned-integer-overflow
+      -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs
     CXX: clang++
     DEFINES: NDEBUG
     LD: clang
-    LDFLAGS: -fsanitize=undefined
+    LDFLAGS: -fsanitize=undefined,unsigned-integer-overflow
     LDXX: clang++
     compile_the_world: true
+    test_environ:
+      UBSAN_OPTIONS: print_stacktrace=1
     timeout_multiplier: 1.5
 defaults:
   boringssl:
     CFLAGS: -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas
-      -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare
+      -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI)
     CPPFLAGS: -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM
       -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
   global:
diff --git a/config.m4 b/config.m4
index 74f9ad2..6ed1887 100644
--- a/config.m4
+++ b/config.m4
@@ -101,6 +101,7 @@
     src/core/lib/iomgr/endpoint_pair_posix.c \
     src/core/lib/iomgr/endpoint_pair_windows.c \
     src/core/lib/iomgr/ev_poll_and_epoll_posix.c \
+    src/core/lib/iomgr/ev_poll_posix.c \
     src/core/lib/iomgr/ev_posix.c \
     src/core/lib/iomgr/exec_ctx.c \
     src/core/lib/iomgr/executor.c \
@@ -228,8 +229,11 @@
     src/core/ext/client_config/uri_parser.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
+    src/core/ext/transport/cronet/client/secure/cronet_channel_create.c \
+    src/core/ext/transport/cronet/transport/cronet_api_dummy.c \
+    src/core/ext/transport/cronet/transport/cronet_transport.c \
     src/core/ext/lb_policy/grpclb/load_balancer_api.c \
-    src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \
+    src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \
     third_party/nanopb/pb_common.c \
     third_party/nanopb/pb_decode.c \
     third_party/nanopb/pb_encode.c \
@@ -555,7 +559,7 @@
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/census)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/client_config)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/pick_first)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/round_robin)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/resolver/dns/native)
@@ -566,6 +570,8 @@
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/insecure)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/secure)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/transport)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/cronet/client/secure)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/cronet/transport)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/channel)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/compression)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/debug)
diff --git a/examples/csharp/helloworld/generate_protos.bat b/examples/csharp/helloworld/generate_protos.bat
index 99f81a7..3be1ceb 100644
--- a/examples/csharp/helloworld/generate_protos.bat
+++ b/examples/csharp/helloworld/generate_protos.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Generate the C# code for .proto files
 
 setlocal
diff --git a/examples/csharp/route_guide/generate_protos.bat b/examples/csharp/route_guide/generate_protos.bat
index 12be52c..b3c5136 100644
--- a/examples/csharp/route_guide/generate_protos.bat
+++ b/examples/csharp/route_guide/generate_protos.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Generate the C# code for .proto files
 
 setlocal
diff --git a/examples/node/README.md b/examples/node/README.md
index 2887883..59fb4a1 100644
--- a/examples/node/README.md
+++ b/examples/node/README.md
@@ -22,18 +22,24 @@
 TRY IT!
 -------
 
+There are two ways to generate the code needed to work with protocol buffers in Node.js - one approach uses [Protobuf.js](https://github.com/dcodeIO/ProtoBuf.js/) to dynamically generate the code at runtime, the other uses code statically generated using the protocol buffer compiler `protoc`. The examples behave identically, and either server can be used with either client.
+
  - Run the server
 
    ```sh
    $ # from this directory
-   $ node ./greeter_server.js &
+   $ node ./dynamic_codegen/greeter_server.js &
+   $ # OR
+   $ node ./static_codegen/greeter_server.js &
    ```
 
  - Run the client
 
    ```sh
    $ # from this directory
-   $ node ./greeter_client.js
+   $ node ./dynamic_codegen/greeter_client.js
+   $ # OR
+   $ node ./dynamic_codegen/greeter_client.js
    ```
 
 TUTORIAL
diff --git a/examples/node/dynamic_codegen/README.md b/examples/node/dynamic_codegen/README.md
new file mode 100644
index 0000000..1a6ec17
--- /dev/null
+++ b/examples/node/dynamic_codegen/README.md
@@ -0,0 +1 @@
+This is the dynamic code generation variant of the Node examples. Code in these examples is generated at runtime using Protobuf.js.
diff --git a/examples/node/greeter_client.js b/examples/node/dynamic_codegen/greeter_client.js
similarity index 96%
rename from examples/node/greeter_client.js
rename to examples/node/dynamic_codegen/greeter_client.js
index 2820acb..e24fb07 100644
--- a/examples/node/greeter_client.js
+++ b/examples/node/dynamic_codegen/greeter_client.js
@@ -31,7 +31,7 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+var PROTO_PATH = __dirname + '/../../protos/helloworld.proto';
 
 var grpc = require('grpc');
 var hello_proto = grpc.load(PROTO_PATH).helloworld;
diff --git a/examples/node/greeter_server.js b/examples/node/dynamic_codegen/greeter_server.js
similarity index 96%
rename from examples/node/greeter_server.js
rename to examples/node/dynamic_codegen/greeter_server.js
index e7ad51f..aa43e4c 100644
--- a/examples/node/greeter_server.js
+++ b/examples/node/dynamic_codegen/greeter_server.js
@@ -31,7 +31,7 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+var PROTO_PATH = __dirname + '/../../protos/helloworld.proto';
 
 var grpc = require('grpc');
 var hello_proto = grpc.load(PROTO_PATH).helloworld;
diff --git a/examples/node/route_guide/README.md b/examples/node/dynamic_codegen/route_guide/README.md
similarity index 100%
copy from examples/node/route_guide/README.md
copy to examples/node/dynamic_codegen/route_guide/README.md
diff --git a/examples/node/route_guide/route_guide_client.js b/examples/node/dynamic_codegen/route_guide/route_guide_client.js
similarity index 98%
rename from examples/node/route_guide/route_guide_client.js
rename to examples/node/dynamic_codegen/route_guide/route_guide_client.js
index fd05a59..775b9ad 100644
--- a/examples/node/route_guide/route_guide_client.js
+++ b/examples/node/dynamic_codegen/route_guide/route_guide_client.js
@@ -31,7 +31,7 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../../protos/route_guide.proto';
+var PROTO_PATH = __dirname + '/../../../protos/route_guide.proto';
 
 var async = require('async');
 var fs = require('fs');
diff --git a/examples/node/route_guide/route_guide_db.json b/examples/node/dynamic_codegen/route_guide/route_guide_db.json
similarity index 100%
copy from examples/node/route_guide/route_guide_db.json
copy to examples/node/dynamic_codegen/route_guide/route_guide_db.json
diff --git a/examples/node/route_guide/route_guide_server.js b/examples/node/dynamic_codegen/route_guide/route_guide_server.js
similarity index 98%
rename from examples/node/route_guide/route_guide_server.js
rename to examples/node/dynamic_codegen/route_guide/route_guide_server.js
index 6c01fac..6d59348 100644
--- a/examples/node/route_guide/route_guide_server.js
+++ b/examples/node/dynamic_codegen/route_guide/route_guide_server.js
@@ -31,7 +31,7 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../../protos/route_guide.proto';
+var PROTO_PATH = __dirname + '/../../../protos/route_guide.proto';
 
 var fs = require('fs');
 var parseArgs = require('minimist');
diff --git a/examples/node/package.json b/examples/node/package.json
index d135df2..2cae031 100644
--- a/examples/node/package.json
+++ b/examples/node/package.json
@@ -3,7 +3,8 @@
   "version": "0.1.0",
   "dependencies": {
     "async": "^1.5.2",
-    "grpc": "0.13.0",
+    "google-protobuf": "^3.0.0-alpha.5",
+    "grpc": "^0.14.0",
     "lodash": "^4.6.1",
     "minimist": "^1.2.0"
   }
diff --git a/examples/node/static_codegen/README.md b/examples/node/static_codegen/README.md
new file mode 100644
index 0000000..fc97d34
--- /dev/null
+++ b/examples/node/static_codegen/README.md
@@ -0,0 +1,7 @@
+This is the static code generation variant of the Node examples. Code in these examples is pre-generated using protoc and the Node gRPC protoc plugin, and the generated code can be found in various `*_pb.js` files. The command line sequence for generating those files is as follows (assuming that `protoc` and `grpc_node_plugin` are present, and starting in the base directory of this package):
+
+```sh
+cd ../protos
+protoc --js_out=import_style=commonjs,binary:../node/static_codegen/ --grpc_out=../node/static_codegen --plugin=protoc-gen-grpc=grpc_node_plugin helloworld.proto
+protoc --js_out=import_style=commonjs,binary:../node/static_codegen/route_guide/ --grpc_out=../node/static_codegen/route_guide/ --plugin=protoc-gen-grpc=grpc_node_plugin route_guide.proto
+```
diff --git a/examples/node/greeter_client.js b/examples/node/static_codegen/greeter_client.js
similarity index 80%
copy from examples/node/greeter_client.js
copy to examples/node/static_codegen/greeter_client.js
index 2820acb..da80cf3 100644
--- a/examples/node/greeter_client.js
+++ b/examples/node/static_codegen/greeter_client.js
@@ -31,22 +31,24 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+var messages = require('./helloworld_pb');
+var services = require('./helloworld_grpc_pb');
 
 var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
 
 function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
+  var client = new services.GreeterClient('localhost:50051',
+                                          grpc.credentials.createInsecure());
   var user;
   if (process.argv.length >= 3) {
     user = process.argv[2];
   } else {
     user = 'world';
   }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
+  var request = new messages.HelloRequest();
+  request.setName(user);
+  client.sayHello(request, function(err, response) {
+    console.log('Greeting:', response.getMessage());
   });
 }
 
diff --git a/examples/node/greeter_server.js b/examples/node/static_codegen/greeter_server.js
similarity index 87%
copy from examples/node/greeter_server.js
copy to examples/node/static_codegen/greeter_server.js
index e7ad51f..a1591b8 100644
--- a/examples/node/greeter_server.js
+++ b/examples/node/static_codegen/greeter_server.js
@@ -31,16 +31,18 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+var messages = require('./helloworld_pb');
+var services = require('./helloworld_grpc_pb');
 
 var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
 
 /**
  * Implements the SayHello RPC method.
  */
 function sayHello(call, callback) {
-  callback(null, {message: 'Hello ' + call.request.name});
+  var reply = new messages.HelloReply();
+  reply.setMessage('Hello ' + call.request.getName());
+  callback(null, reply);
 }
 
 /**
@@ -49,7 +51,7 @@
  */
 function main() {
   var server = new grpc.Server();
-  server.addProtoService(hello_proto.Greeter.service, {sayHello: sayHello});
+  server.addService(services.GreeterService, {sayHello: sayHello});
   server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
   server.start();
 }
diff --git a/examples/node/static_codegen/helloworld_grpc_pb.js b/examples/node/static_codegen/helloworld_grpc_pb.js
new file mode 100644
index 0000000..846f8b6
--- /dev/null
+++ b/examples/node/static_codegen/helloworld_grpc_pb.js
@@ -0,0 +1,44 @@
+// GENERATED CODE -- DO NOT EDIT!
+
+'use strict';
+var grpc = require('grpc');
+var helloworld_pb = require('./helloworld_pb.js');
+
+function serialize_HelloReply(arg) {
+  if (!(arg instanceof helloworld_pb.HelloReply)) {
+    throw new Error('Expected argument of type HelloReply');
+  }
+  return new Buffer(arg.serializeBinary());
+}
+
+function deserialize_HelloReply(buffer_arg) {
+  return helloworld_pb.HelloReply.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
+function serialize_HelloRequest(arg) {
+  if (!(arg instanceof helloworld_pb.HelloRequest)) {
+    throw new Error('Expected argument of type HelloRequest');
+  }
+  return new Buffer(arg.serializeBinary());
+}
+
+function deserialize_HelloRequest(buffer_arg) {
+  return helloworld_pb.HelloRequest.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
+
+var GreeterService = exports.GreeterService = {
+  sayHello: {
+    path: '/helloworld.Greeter/SayHello',
+    requestStream: false,
+    responseStream: false,
+    requestType: helloworld_pb.HelloRequest,
+    responseType: helloworld_pb.HelloReply,
+    requestSerialize: serialize_HelloRequest,
+    requestDeserialize: deserialize_HelloRequest,
+    responseSerialize: serialize_HelloReply,
+    responseDeserialize: deserialize_HelloReply,
+  },
+};
+
+exports.GreeterClient = grpc.makeGenericClientConstructor(GreeterService);
diff --git a/examples/node/static_codegen/helloworld_pb.js b/examples/node/static_codegen/helloworld_pb.js
new file mode 100644
index 0000000..6405bd9
--- /dev/null
+++ b/examples/node/static_codegen/helloworld_pb.js
@@ -0,0 +1,332 @@
+/**
+ * @fileoverview
+ * @enhanceable
+ * @public
+ */
+// GENERATED CODE -- DO NOT EDIT!
+
+var jspb = require('google-protobuf');
+var goog = jspb;
+var global = Function('return this')();
+
+goog.exportSymbol('proto.helloworld.HelloReply', null, global);
+goog.exportSymbol('proto.helloworld.HelloRequest', null, global);
+
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.helloworld.HelloRequest = function(opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.helloworld.HelloRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  proto.helloworld.HelloRequest.displayName = 'proto.helloworld.HelloRequest';
+}
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+/**
+ * Creates an object representation of this proto suitable for use in Soy templates.
+ * Field names that are reserved in JavaScript and will be renamed to pb_name.
+ * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+ * For the list of reserved names please see:
+ *     com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
+ * @param {boolean=} opt_includeInstance Whether to include the JSPB instance
+ *     for transitional soy proto support: http://goto/soy-param-migration
+ * @return {!Object}
+ */
+proto.helloworld.HelloRequest.prototype.toObject = function(opt_includeInstance) {
+  return proto.helloworld.HelloRequest.toObject(opt_includeInstance, this);
+};
+
+
+/**
+ * Static version of the {@see toObject} method.
+ * @param {boolean|undefined} includeInstance Whether to include the JSPB
+ *     instance for transitional soy proto support:
+ *     http://goto/soy-param-migration
+ * @param {!proto.helloworld.HelloRequest} msg The msg instance to transform.
+ * @return {!Object}
+ */
+proto.helloworld.HelloRequest.toObject = function(includeInstance, msg) {
+  var f, obj = {
+    name: msg.getName()
+  };
+
+  if (includeInstance) {
+    obj.$jspbMessageInstance = msg
+  }
+  return obj;
+};
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.helloworld.HelloRequest}
+ */
+proto.helloworld.HelloRequest.deserializeBinary = function(bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.helloworld.HelloRequest;
+  return proto.helloworld.HelloRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.helloworld.HelloRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.helloworld.HelloRequest}
+ */
+proto.helloworld.HelloRequest.deserializeBinaryFromReader = function(msg, reader) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+    case 1:
+      var value = /** @type {string} */ (reader.readString());
+      msg.setName(value);
+      break;
+    default:
+      reader.skipField();
+      break;
+    }
+  }
+  return msg;
+};
+
+
+/**
+ * Class method variant: serializes the given message to binary data
+ * (in protobuf wire format), writing to the given BinaryWriter.
+ * @param {!proto.helloworld.HelloRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.helloworld.HelloRequest.serializeBinaryToWriter = function(message, writer) {
+  message.serializeBinaryToWriter(writer);
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.helloworld.HelloRequest.prototype.serializeBinary = function() {
+  var writer = new jspb.BinaryWriter();
+  this.serializeBinaryToWriter(writer);
+  return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format),
+ * writing to the given BinaryWriter.
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.helloworld.HelloRequest.prototype.serializeBinaryToWriter = function (writer) {
+  var f = undefined;
+  f = this.getName();
+  if (f.length > 0) {
+    writer.writeString(
+      1,
+      f
+    );
+  }
+};
+
+
+/**
+ * Creates a deep clone of this proto. No data is shared with the original.
+ * @return {!proto.helloworld.HelloRequest} The clone.
+ */
+proto.helloworld.HelloRequest.prototype.cloneMessage = function() {
+  return /** @type {!proto.helloworld.HelloRequest} */ (jspb.Message.cloneMessage(this));
+};
+
+
+/**
+ * optional string name = 1;
+ * @return {string}
+ */
+proto.helloworld.HelloRequest.prototype.getName = function() {
+  return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, ""));
+};
+
+
+/** @param {string} value  */
+proto.helloworld.HelloRequest.prototype.setName = function(value) {
+  jspb.Message.setField(this, 1, value);
+};
+
+
+
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.helloworld.HelloReply = function(opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.helloworld.HelloReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  proto.helloworld.HelloReply.displayName = 'proto.helloworld.HelloReply';
+}
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+/**
+ * Creates an object representation of this proto suitable for use in Soy templates.
+ * Field names that are reserved in JavaScript and will be renamed to pb_name.
+ * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+ * For the list of reserved names please see:
+ *     com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
+ * @param {boolean=} opt_includeInstance Whether to include the JSPB instance
+ *     for transitional soy proto support: http://goto/soy-param-migration
+ * @return {!Object}
+ */
+proto.helloworld.HelloReply.prototype.toObject = function(opt_includeInstance) {
+  return proto.helloworld.HelloReply.toObject(opt_includeInstance, this);
+};
+
+
+/**
+ * Static version of the {@see toObject} method.
+ * @param {boolean|undefined} includeInstance Whether to include the JSPB
+ *     instance for transitional soy proto support:
+ *     http://goto/soy-param-migration
+ * @param {!proto.helloworld.HelloReply} msg The msg instance to transform.
+ * @return {!Object}
+ */
+proto.helloworld.HelloReply.toObject = function(includeInstance, msg) {
+  var f, obj = {
+    message: msg.getMessage()
+  };
+
+  if (includeInstance) {
+    obj.$jspbMessageInstance = msg
+  }
+  return obj;
+};
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.helloworld.HelloReply}
+ */
+proto.helloworld.HelloReply.deserializeBinary = function(bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.helloworld.HelloReply;
+  return proto.helloworld.HelloReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.helloworld.HelloReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.helloworld.HelloReply}
+ */
+proto.helloworld.HelloReply.deserializeBinaryFromReader = function(msg, reader) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+    case 1:
+      var value = /** @type {string} */ (reader.readString());
+      msg.setMessage(value);
+      break;
+    default:
+      reader.skipField();
+      break;
+    }
+  }
+  return msg;
+};
+
+
+/**
+ * Class method variant: serializes the given message to binary data
+ * (in protobuf wire format), writing to the given BinaryWriter.
+ * @param {!proto.helloworld.HelloReply} message
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.helloworld.HelloReply.serializeBinaryToWriter = function(message, writer) {
+  message.serializeBinaryToWriter(writer);
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.helloworld.HelloReply.prototype.serializeBinary = function() {
+  var writer = new jspb.BinaryWriter();
+  this.serializeBinaryToWriter(writer);
+  return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format),
+ * writing to the given BinaryWriter.
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.helloworld.HelloReply.prototype.serializeBinaryToWriter = function (writer) {
+  var f = undefined;
+  f = this.getMessage();
+  if (f.length > 0) {
+    writer.writeString(
+      1,
+      f
+    );
+  }
+};
+
+
+/**
+ * Creates a deep clone of this proto. No data is shared with the original.
+ * @return {!proto.helloworld.HelloReply} The clone.
+ */
+proto.helloworld.HelloReply.prototype.cloneMessage = function() {
+  return /** @type {!proto.helloworld.HelloReply} */ (jspb.Message.cloneMessage(this));
+};
+
+
+/**
+ * optional string message = 1;
+ * @return {string}
+ */
+proto.helloworld.HelloReply.prototype.getMessage = function() {
+  return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, ""));
+};
+
+
+/** @param {string} value  */
+proto.helloworld.HelloReply.prototype.setMessage = function(value) {
+  jspb.Message.setField(this, 1, value);
+};
+
+
+goog.object.extend(exports, proto.helloworld);
diff --git a/examples/node/route_guide/README.md b/examples/node/static_codegen/route_guide/README.md
similarity index 100%
rename from examples/node/route_guide/README.md
rename to examples/node/static_codegen/route_guide/README.md
diff --git a/examples/node/route_guide/route_guide_client.js b/examples/node/static_codegen/route_guide/route_guide_client.js
similarity index 66%
copy from examples/node/route_guide/route_guide_client.js
copy to examples/node/static_codegen/route_guide/route_guide_client.js
index fd05a59..ecde786 100644
--- a/examples/node/route_guide/route_guide_client.js
+++ b/examples/node/static_codegen/route_guide/route_guide_client.js
@@ -31,7 +31,8 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../../protos/route_guide.proto';
+var messages = require('./route_guide_pb');
+var services = require('./route_guide_grpc_pb');
 
 var async = require('async');
 var fs = require('fs');
@@ -39,9 +40,9 @@
 var path = require('path');
 var _ = require('lodash');
 var grpc = require('grpc');
-var routeguide = grpc.load(PROTO_PATH).routeguide;
-var client = new routeguide.RouteGuide('localhost:50051',
-                                       grpc.credentials.createInsecure());
+
+var client = new services.RouteGuideClient('localhost:50051',
+                                           grpc.credentials.createInsecure());
 
 var COORD_FACTOR = 1e7;
 
@@ -56,25 +57,23 @@
     if (error) {
       callback(error);
     }
-    if (feature.name === '') {
+    var latitude = feature.getLocation().getLatitude();
+    var longitude = feature.getLocation().getLongitude();
+    if (feature.getName() === '') {
       console.log('Found no feature at ' +
-          feature.location.latitude/COORD_FACTOR + ', ' +
-          feature.location.longitude/COORD_FACTOR);
+          latitude/COORD_FACTOR + ', ' + longitude/COORD_FACTOR);
     } else {
-      console.log('Found feature called "' + feature.name + '" at ' +
-          feature.location.latitude/COORD_FACTOR + ', ' +
-          feature.location.longitude/COORD_FACTOR);
+      console.log('Found feature called "' + feature.getName() + '" at ' +
+          latitude/COORD_FACTOR + ', ' + longitude/COORD_FACTOR);
     }
     next();
   }
-  var point1 = {
-    latitude: 409146138,
-    longitude: -746188906
-  };
-  var point2 = {
-    latitude: 0,
-    longitude: 0
-  };
+  var point1 = new messages.Point();
+  point1.setLatitude(409146138);
+  point1.setLongitude(-746188906);
+  var point2 = new messages.Point();
+  point2.setLatitude(0);
+  point2.setLongitude(0);
   client.getFeature(point1, featureCallback);
   client.getFeature(point2, featureCallback);
 }
@@ -86,22 +85,21 @@
  * @param {function} callback Called when this demo is complete
  */
 function runListFeatures(callback) {
-  var rectangle = {
-    lo: {
-      latitude: 400000000,
-      longitude: -750000000
-    },
-    hi: {
-      latitude: 420000000,
-      longitude: -730000000
-    }
-  };
+  var rect = new messages.Rectangle();
+  var lo = new messages.Point();
+  lo.setLatitude(400000000);
+  lo.setLongitude(-750000000);
+  rect.setLo(lo);
+  var hi = new messages.Point();
+  hi.setLatitude(420000000);
+  hi.setLongitude(-730000000);
+  rect.setHi(hi);
   console.log('Looking for features between 40, -75 and 42, -73');
-  var call = client.listFeatures(rectangle);
+  var call = client.listFeatures(rect);
   call.on('data', function(feature) {
-      console.log('Found feature called "' + feature.name + '" at ' +
-          feature.location.latitude/COORD_FACTOR + ', ' +
-          feature.location.longitude/COORD_FACTOR);
+      console.log('Found feature called "' + feature.getName() + '" at ' +
+          feature.getLocation().getLatitude()/COORD_FACTOR + ', ' +
+          feature.getLocation().getLongitude()/COORD_FACTOR);
   });
   call.on('end', callback);
 }
@@ -118,46 +116,50 @@
   });
   fs.readFile(path.resolve(argv.db_path), function(err, data) {
     if (err) callback(err);
-    var feature_list = JSON.parse(data);
+    // Transform the loaded features to Feature objects
+    var feature_list = _.map(JSON.parse(data), function(value) {
+      var feature = new messages.Feature();
+      feature.setName(value.name);
+      var location = new messages.Point();
+      location.setLatitude(value.location.latitude);
+      location.setLongitude(value.location.longitude);
+      feature.setLocation(location);
+      return feature;
+    });
 
     var num_points = 10;
     var call = client.recordRoute(function(error, stats) {
       if (error) {
         callback(error);
       }
-      console.log('Finished trip with', stats.point_count, 'points');
-      console.log('Passed', stats.feature_count, 'features');
-      console.log('Travelled', stats.distance, 'meters');
-      console.log('It took', stats.elapsed_time, 'seconds');
+      console.log('Finished trip with', stats.getPointCount(), 'points');
+      console.log('Passed', stats.getFeatureCount(), 'features');
+      console.log('Travelled', stats.getDistance(), 'meters');
+      console.log('It took', stats.getElapsedTime(), 'seconds');
       callback();
     });
     /**
      * Constructs a function that asynchronously sends the given point and then
      * delays sending its callback
-     * @param {number} lat The latitude to send
-     * @param {number} lng The longitude to send
+     * @param {messages.Point} location The point to send
      * @return {function(function)} The function that sends the point
      */
-    function pointSender(lat, lng) {
+    function pointSender(location) {
       /**
        * Sends the point, then calls the callback after a delay
        * @param {function} callback Called when complete
        */
       return function(callback) {
-        console.log('Visiting point ' + lat/COORD_FACTOR + ', ' +
-            lng/COORD_FACTOR);
-        call.write({
-          latitude: lat,
-          longitude: lng
-        });
+        console.log('Visiting point ' + location.getLatitude()/COORD_FACTOR +
+            ', ' + location.getLongitude()/COORD_FACTOR);
+        call.write(location);
         _.delay(callback, _.random(500, 1500));
       };
     }
     var point_senders = [];
     for (var i = 0; i < num_points; i++) {
       var rand_point = feature_list[_.random(0, feature_list.length - 1)];
-      point_senders[i] = pointSender(rand_point.location.latitude,
-                                     rand_point.location.longitude);
+      point_senders[i] = pointSender(rand_point.getLocation());
     }
     async.series(point_senders, function() {
       call.end();
@@ -173,8 +175,9 @@
 function runRouteChat(callback) {
   var call = client.routeChat();
   call.on('data', function(note) {
-    console.log('Got message "' + note.message + '" at ' +
-        note.location.latitude + ', ' + note.location.longitude);
+    console.log('Got message "' + note.getMessage() + '" at ' +
+        note.getLocation().getLatitude() + ', ' +
+        note.getLocation().getLongitude());
   });
 
   call.on('end', callback);
@@ -208,7 +211,13 @@
     var note = notes[i];
     console.log('Sending message "' + note.message + '" at ' +
         note.location.latitude + ', ' + note.location.longitude);
-    call.write(note);
+    var noteMsg = new messages.RouteNote();
+    noteMsg.setMessage(note.message);
+    var location = new messages.Point();
+    location.setLatitude(note.location.latitude);
+    location.setLongitude(note.location.longitude);
+    noteMsg.setLocation(location);
+    call.write(noteMsg);
   }
   call.end();
 }
diff --git a/examples/node/route_guide/route_guide_db.json b/examples/node/static_codegen/route_guide/route_guide_db.json
similarity index 100%
rename from examples/node/route_guide/route_guide_db.json
rename to examples/node/static_codegen/route_guide/route_guide_db.json
diff --git a/examples/node/static_codegen/route_guide/route_guide_grpc_pb.js b/examples/node/static_codegen/route_guide/route_guide_grpc_pb.js
new file mode 100644
index 0000000..1dd7133
--- /dev/null
+++ b/examples/node/static_codegen/route_guide/route_guide_grpc_pb.js
@@ -0,0 +1,110 @@
+// GENERATED CODE -- DO NOT EDIT!
+
+'use strict';
+var grpc = require('grpc');
+var route_guide_pb = require('./route_guide_pb.js');
+
+function serialize_Feature(arg) {
+  if (!(arg instanceof route_guide_pb.Feature)) {
+    throw new Error('Expected argument of type Feature');
+  }
+  return new Buffer(arg.serializeBinary());
+}
+
+function deserialize_Feature(buffer_arg) {
+  return route_guide_pb.Feature.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
+function serialize_Point(arg) {
+  if (!(arg instanceof route_guide_pb.Point)) {
+    throw new Error('Expected argument of type Point');
+  }
+  return new Buffer(arg.serializeBinary());
+}
+
+function deserialize_Point(buffer_arg) {
+  return route_guide_pb.Point.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
+function serialize_Rectangle(arg) {
+  if (!(arg instanceof route_guide_pb.Rectangle)) {
+    throw new Error('Expected argument of type Rectangle');
+  }
+  return new Buffer(arg.serializeBinary());
+}
+
+function deserialize_Rectangle(buffer_arg) {
+  return route_guide_pb.Rectangle.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
+function serialize_RouteNote(arg) {
+  if (!(arg instanceof route_guide_pb.RouteNote)) {
+    throw new Error('Expected argument of type RouteNote');
+  }
+  return new Buffer(arg.serializeBinary());
+}
+
+function deserialize_RouteNote(buffer_arg) {
+  return route_guide_pb.RouteNote.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
+function serialize_RouteSummary(arg) {
+  if (!(arg instanceof route_guide_pb.RouteSummary)) {
+    throw new Error('Expected argument of type RouteSummary');
+  }
+  return new Buffer(arg.serializeBinary());
+}
+
+function deserialize_RouteSummary(buffer_arg) {
+  return route_guide_pb.RouteSummary.deserializeBinary(new Uint8Array(buffer_arg));
+}
+
+
+var RouteGuideService = exports.RouteGuideService = {
+  getFeature: {
+    path: '/routeguide.RouteGuide/GetFeature',
+    requestStream: false,
+    responseStream: false,
+    requestType: route_guide_pb.Point,
+    responseType: route_guide_pb.Feature,
+    requestSerialize: serialize_Point,
+    requestDeserialize: deserialize_Point,
+    responseSerialize: serialize_Feature,
+    responseDeserialize: deserialize_Feature,
+  },
+  listFeatures: {
+    path: '/routeguide.RouteGuide/ListFeatures',
+    requestStream: false,
+    responseStream: true,
+    requestType: route_guide_pb.Rectangle,
+    responseType: route_guide_pb.Feature,
+    requestSerialize: serialize_Rectangle,
+    requestDeserialize: deserialize_Rectangle,
+    responseSerialize: serialize_Feature,
+    responseDeserialize: deserialize_Feature,
+  },
+  recordRoute: {
+    path: '/routeguide.RouteGuide/RecordRoute',
+    requestStream: true,
+    responseStream: false,
+    requestType: route_guide_pb.Point,
+    responseType: route_guide_pb.RouteSummary,
+    requestSerialize: serialize_Point,
+    requestDeserialize: deserialize_Point,
+    responseSerialize: serialize_RouteSummary,
+    responseDeserialize: deserialize_RouteSummary,
+  },
+  routeChat: {
+    path: '/routeguide.RouteGuide/RouteChat',
+    requestStream: true,
+    responseStream: true,
+    requestType: route_guide_pb.RouteNote,
+    responseType: route_guide_pb.RouteNote,
+    requestSerialize: serialize_RouteNote,
+    requestDeserialize: deserialize_RouteNote,
+    responseSerialize: serialize_RouteNote,
+    responseDeserialize: deserialize_RouteNote,
+  },
+};
+
+exports.RouteGuideClient = grpc.makeGenericClientConstructor(RouteGuideService);
diff --git a/examples/node/static_codegen/route_guide/route_guide_pb.js b/examples/node/static_codegen/route_guide/route_guide_pb.js
new file mode 100644
index 0000000..f604cd6
--- /dev/null
+++ b/examples/node/static_codegen/route_guide/route_guide_pb.js
@@ -0,0 +1,1033 @@
+/**
+ * @fileoverview
+ * @enhanceable
+ * @public
+ */
+// GENERATED CODE -- DO NOT EDIT!
+
+var jspb = require('google-protobuf');
+var goog = jspb;
+var global = Function('return this')();
+
+goog.exportSymbol('proto.routeguide.Feature', null, global);
+goog.exportSymbol('proto.routeguide.Point', null, global);
+goog.exportSymbol('proto.routeguide.Rectangle', null, global);
+goog.exportSymbol('proto.routeguide.RouteNote', null, global);
+goog.exportSymbol('proto.routeguide.RouteSummary', null, global);
+
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.routeguide.Point = function(opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.routeguide.Point, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  proto.routeguide.Point.displayName = 'proto.routeguide.Point';
+}
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+/**
+ * Creates an object representation of this proto suitable for use in Soy templates.
+ * Field names that are reserved in JavaScript and will be renamed to pb_name.
+ * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+ * For the list of reserved names please see:
+ *     com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
+ * @param {boolean=} opt_includeInstance Whether to include the JSPB instance
+ *     for transitional soy proto support: http://goto/soy-param-migration
+ * @return {!Object}
+ */
+proto.routeguide.Point.prototype.toObject = function(opt_includeInstance) {
+  return proto.routeguide.Point.toObject(opt_includeInstance, this);
+};
+
+
+/**
+ * Static version of the {@see toObject} method.
+ * @param {boolean|undefined} includeInstance Whether to include the JSPB
+ *     instance for transitional soy proto support:
+ *     http://goto/soy-param-migration
+ * @param {!proto.routeguide.Point} msg The msg instance to transform.
+ * @return {!Object}
+ */
+proto.routeguide.Point.toObject = function(includeInstance, msg) {
+  var f, obj = {
+    latitude: msg.getLatitude(),
+    longitude: msg.getLongitude()
+  };
+
+  if (includeInstance) {
+    obj.$jspbMessageInstance = msg
+  }
+  return obj;
+};
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.routeguide.Point}
+ */
+proto.routeguide.Point.deserializeBinary = function(bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.routeguide.Point;
+  return proto.routeguide.Point.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.routeguide.Point} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.routeguide.Point}
+ */
+proto.routeguide.Point.deserializeBinaryFromReader = function(msg, reader) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+    case 1:
+      var value = /** @type {number} */ (reader.readInt32());
+      msg.setLatitude(value);
+      break;
+    case 2:
+      var value = /** @type {number} */ (reader.readInt32());
+      msg.setLongitude(value);
+      break;
+    default:
+      reader.skipField();
+      break;
+    }
+  }
+  return msg;
+};
+
+
+/**
+ * Class method variant: serializes the given message to binary data
+ * (in protobuf wire format), writing to the given BinaryWriter.
+ * @param {!proto.routeguide.Point} message
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.Point.serializeBinaryToWriter = function(message, writer) {
+  message.serializeBinaryToWriter(writer);
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.routeguide.Point.prototype.serializeBinary = function() {
+  var writer = new jspb.BinaryWriter();
+  this.serializeBinaryToWriter(writer);
+  return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format),
+ * writing to the given BinaryWriter.
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.Point.prototype.serializeBinaryToWriter = function (writer) {
+  var f = undefined;
+  f = this.getLatitude();
+  if (f !== 0) {
+    writer.writeInt32(
+      1,
+      f
+    );
+  }
+  f = this.getLongitude();
+  if (f !== 0) {
+    writer.writeInt32(
+      2,
+      f
+    );
+  }
+};
+
+
+/**
+ * Creates a deep clone of this proto. No data is shared with the original.
+ * @return {!proto.routeguide.Point} The clone.
+ */
+proto.routeguide.Point.prototype.cloneMessage = function() {
+  return /** @type {!proto.routeguide.Point} */ (jspb.Message.cloneMessage(this));
+};
+
+
+/**
+ * optional int32 latitude = 1;
+ * @return {number}
+ */
+proto.routeguide.Point.prototype.getLatitude = function() {
+  return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0));
+};
+
+
+/** @param {number} value  */
+proto.routeguide.Point.prototype.setLatitude = function(value) {
+  jspb.Message.setField(this, 1, value);
+};
+
+
+/**
+ * optional int32 longitude = 2;
+ * @return {number}
+ */
+proto.routeguide.Point.prototype.getLongitude = function() {
+  return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0));
+};
+
+
+/** @param {number} value  */
+proto.routeguide.Point.prototype.setLongitude = function(value) {
+  jspb.Message.setField(this, 2, value);
+};
+
+
+
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.routeguide.Rectangle = function(opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.routeguide.Rectangle, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  proto.routeguide.Rectangle.displayName = 'proto.routeguide.Rectangle';
+}
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+/**
+ * Creates an object representation of this proto suitable for use in Soy templates.
+ * Field names that are reserved in JavaScript and will be renamed to pb_name.
+ * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+ * For the list of reserved names please see:
+ *     com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
+ * @param {boolean=} opt_includeInstance Whether to include the JSPB instance
+ *     for transitional soy proto support: http://goto/soy-param-migration
+ * @return {!Object}
+ */
+proto.routeguide.Rectangle.prototype.toObject = function(opt_includeInstance) {
+  return proto.routeguide.Rectangle.toObject(opt_includeInstance, this);
+};
+
+
+/**
+ * Static version of the {@see toObject} method.
+ * @param {boolean|undefined} includeInstance Whether to include the JSPB
+ *     instance for transitional soy proto support:
+ *     http://goto/soy-param-migration
+ * @param {!proto.routeguide.Rectangle} msg The msg instance to transform.
+ * @return {!Object}
+ */
+proto.routeguide.Rectangle.toObject = function(includeInstance, msg) {
+  var f, obj = {
+    lo: (f = msg.getLo()) && proto.routeguide.Point.toObject(includeInstance, f),
+    hi: (f = msg.getHi()) && proto.routeguide.Point.toObject(includeInstance, f)
+  };
+
+  if (includeInstance) {
+    obj.$jspbMessageInstance = msg
+  }
+  return obj;
+};
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.routeguide.Rectangle}
+ */
+proto.routeguide.Rectangle.deserializeBinary = function(bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.routeguide.Rectangle;
+  return proto.routeguide.Rectangle.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.routeguide.Rectangle} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.routeguide.Rectangle}
+ */
+proto.routeguide.Rectangle.deserializeBinaryFromReader = function(msg, reader) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+    case 1:
+      var value = new proto.routeguide.Point;
+      reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader);
+      msg.setLo(value);
+      break;
+    case 2:
+      var value = new proto.routeguide.Point;
+      reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader);
+      msg.setHi(value);
+      break;
+    default:
+      reader.skipField();
+      break;
+    }
+  }
+  return msg;
+};
+
+
+/**
+ * Class method variant: serializes the given message to binary data
+ * (in protobuf wire format), writing to the given BinaryWriter.
+ * @param {!proto.routeguide.Rectangle} message
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.Rectangle.serializeBinaryToWriter = function(message, writer) {
+  message.serializeBinaryToWriter(writer);
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.routeguide.Rectangle.prototype.serializeBinary = function() {
+  var writer = new jspb.BinaryWriter();
+  this.serializeBinaryToWriter(writer);
+  return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format),
+ * writing to the given BinaryWriter.
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.Rectangle.prototype.serializeBinaryToWriter = function (writer) {
+  var f = undefined;
+  f = this.getLo();
+  if (f != null) {
+    writer.writeMessage(
+      1,
+      f,
+      proto.routeguide.Point.serializeBinaryToWriter
+    );
+  }
+  f = this.getHi();
+  if (f != null) {
+    writer.writeMessage(
+      2,
+      f,
+      proto.routeguide.Point.serializeBinaryToWriter
+    );
+  }
+};
+
+
+/**
+ * Creates a deep clone of this proto. No data is shared with the original.
+ * @return {!proto.routeguide.Rectangle} The clone.
+ */
+proto.routeguide.Rectangle.prototype.cloneMessage = function() {
+  return /** @type {!proto.routeguide.Rectangle} */ (jspb.Message.cloneMessage(this));
+};
+
+
+/**
+ * optional Point lo = 1;
+ * @return {proto.routeguide.Point}
+ */
+proto.routeguide.Rectangle.prototype.getLo = function() {
+  return /** @type{proto.routeguide.Point} */ (
+    jspb.Message.getWrapperField(this, proto.routeguide.Point, 1));
+};
+
+
+/** @param {proto.routeguide.Point|undefined} value  */
+proto.routeguide.Rectangle.prototype.setLo = function(value) {
+  jspb.Message.setWrapperField(this, 1, value);
+};
+
+
+proto.routeguide.Rectangle.prototype.clearLo = function() {
+  this.setLo(undefined);
+};
+
+
+/**
+ * optional Point hi = 2;
+ * @return {proto.routeguide.Point}
+ */
+proto.routeguide.Rectangle.prototype.getHi = function() {
+  return /** @type{proto.routeguide.Point} */ (
+    jspb.Message.getWrapperField(this, proto.routeguide.Point, 2));
+};
+
+
+/** @param {proto.routeguide.Point|undefined} value  */
+proto.routeguide.Rectangle.prototype.setHi = function(value) {
+  jspb.Message.setWrapperField(this, 2, value);
+};
+
+
+proto.routeguide.Rectangle.prototype.clearHi = function() {
+  this.setHi(undefined);
+};
+
+
+
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.routeguide.Feature = function(opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.routeguide.Feature, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  proto.routeguide.Feature.displayName = 'proto.routeguide.Feature';
+}
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+/**
+ * Creates an object representation of this proto suitable for use in Soy templates.
+ * Field names that are reserved in JavaScript and will be renamed to pb_name.
+ * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+ * For the list of reserved names please see:
+ *     com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
+ * @param {boolean=} opt_includeInstance Whether to include the JSPB instance
+ *     for transitional soy proto support: http://goto/soy-param-migration
+ * @return {!Object}
+ */
+proto.routeguide.Feature.prototype.toObject = function(opt_includeInstance) {
+  return proto.routeguide.Feature.toObject(opt_includeInstance, this);
+};
+
+
+/**
+ * Static version of the {@see toObject} method.
+ * @param {boolean|undefined} includeInstance Whether to include the JSPB
+ *     instance for transitional soy proto support:
+ *     http://goto/soy-param-migration
+ * @param {!proto.routeguide.Feature} msg The msg instance to transform.
+ * @return {!Object}
+ */
+proto.routeguide.Feature.toObject = function(includeInstance, msg) {
+  var f, obj = {
+    name: msg.getName(),
+    location: (f = msg.getLocation()) && proto.routeguide.Point.toObject(includeInstance, f)
+  };
+
+  if (includeInstance) {
+    obj.$jspbMessageInstance = msg
+  }
+  return obj;
+};
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.routeguide.Feature}
+ */
+proto.routeguide.Feature.deserializeBinary = function(bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.routeguide.Feature;
+  return proto.routeguide.Feature.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.routeguide.Feature} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.routeguide.Feature}
+ */
+proto.routeguide.Feature.deserializeBinaryFromReader = function(msg, reader) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+    case 1:
+      var value = /** @type {string} */ (reader.readString());
+      msg.setName(value);
+      break;
+    case 2:
+      var value = new proto.routeguide.Point;
+      reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader);
+      msg.setLocation(value);
+      break;
+    default:
+      reader.skipField();
+      break;
+    }
+  }
+  return msg;
+};
+
+
+/**
+ * Class method variant: serializes the given message to binary data
+ * (in protobuf wire format), writing to the given BinaryWriter.
+ * @param {!proto.routeguide.Feature} message
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.Feature.serializeBinaryToWriter = function(message, writer) {
+  message.serializeBinaryToWriter(writer);
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.routeguide.Feature.prototype.serializeBinary = function() {
+  var writer = new jspb.BinaryWriter();
+  this.serializeBinaryToWriter(writer);
+  return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format),
+ * writing to the given BinaryWriter.
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.Feature.prototype.serializeBinaryToWriter = function (writer) {
+  var f = undefined;
+  f = this.getName();
+  if (f.length > 0) {
+    writer.writeString(
+      1,
+      f
+    );
+  }
+  f = this.getLocation();
+  if (f != null) {
+    writer.writeMessage(
+      2,
+      f,
+      proto.routeguide.Point.serializeBinaryToWriter
+    );
+  }
+};
+
+
+/**
+ * Creates a deep clone of this proto. No data is shared with the original.
+ * @return {!proto.routeguide.Feature} The clone.
+ */
+proto.routeguide.Feature.prototype.cloneMessage = function() {
+  return /** @type {!proto.routeguide.Feature} */ (jspb.Message.cloneMessage(this));
+};
+
+
+/**
+ * optional string name = 1;
+ * @return {string}
+ */
+proto.routeguide.Feature.prototype.getName = function() {
+  return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, ""));
+};
+
+
+/** @param {string} value  */
+proto.routeguide.Feature.prototype.setName = function(value) {
+  jspb.Message.setField(this, 1, value);
+};
+
+
+/**
+ * optional Point location = 2;
+ * @return {proto.routeguide.Point}
+ */
+proto.routeguide.Feature.prototype.getLocation = function() {
+  return /** @type{proto.routeguide.Point} */ (
+    jspb.Message.getWrapperField(this, proto.routeguide.Point, 2));
+};
+
+
+/** @param {proto.routeguide.Point|undefined} value  */
+proto.routeguide.Feature.prototype.setLocation = function(value) {
+  jspb.Message.setWrapperField(this, 2, value);
+};
+
+
+proto.routeguide.Feature.prototype.clearLocation = function() {
+  this.setLocation(undefined);
+};
+
+
+
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.routeguide.RouteNote = function(opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.routeguide.RouteNote, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  proto.routeguide.RouteNote.displayName = 'proto.routeguide.RouteNote';
+}
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+/**
+ * Creates an object representation of this proto suitable for use in Soy templates.
+ * Field names that are reserved in JavaScript and will be renamed to pb_name.
+ * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+ * For the list of reserved names please see:
+ *     com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
+ * @param {boolean=} opt_includeInstance Whether to include the JSPB instance
+ *     for transitional soy proto support: http://goto/soy-param-migration
+ * @return {!Object}
+ */
+proto.routeguide.RouteNote.prototype.toObject = function(opt_includeInstance) {
+  return proto.routeguide.RouteNote.toObject(opt_includeInstance, this);
+};
+
+
+/**
+ * Static version of the {@see toObject} method.
+ * @param {boolean|undefined} includeInstance Whether to include the JSPB
+ *     instance for transitional soy proto support:
+ *     http://goto/soy-param-migration
+ * @param {!proto.routeguide.RouteNote} msg The msg instance to transform.
+ * @return {!Object}
+ */
+proto.routeguide.RouteNote.toObject = function(includeInstance, msg) {
+  var f, obj = {
+    location: (f = msg.getLocation()) && proto.routeguide.Point.toObject(includeInstance, f),
+    message: msg.getMessage()
+  };
+
+  if (includeInstance) {
+    obj.$jspbMessageInstance = msg
+  }
+  return obj;
+};
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.routeguide.RouteNote}
+ */
+proto.routeguide.RouteNote.deserializeBinary = function(bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.routeguide.RouteNote;
+  return proto.routeguide.RouteNote.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.routeguide.RouteNote} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.routeguide.RouteNote}
+ */
+proto.routeguide.RouteNote.deserializeBinaryFromReader = function(msg, reader) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+    case 1:
+      var value = new proto.routeguide.Point;
+      reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader);
+      msg.setLocation(value);
+      break;
+    case 2:
+      var value = /** @type {string} */ (reader.readString());
+      msg.setMessage(value);
+      break;
+    default:
+      reader.skipField();
+      break;
+    }
+  }
+  return msg;
+};
+
+
+/**
+ * Class method variant: serializes the given message to binary data
+ * (in protobuf wire format), writing to the given BinaryWriter.
+ * @param {!proto.routeguide.RouteNote} message
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.RouteNote.serializeBinaryToWriter = function(message, writer) {
+  message.serializeBinaryToWriter(writer);
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.routeguide.RouteNote.prototype.serializeBinary = function() {
+  var writer = new jspb.BinaryWriter();
+  this.serializeBinaryToWriter(writer);
+  return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format),
+ * writing to the given BinaryWriter.
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.RouteNote.prototype.serializeBinaryToWriter = function (writer) {
+  var f = undefined;
+  f = this.getLocation();
+  if (f != null) {
+    writer.writeMessage(
+      1,
+      f,
+      proto.routeguide.Point.serializeBinaryToWriter
+    );
+  }
+  f = this.getMessage();
+  if (f.length > 0) {
+    writer.writeString(
+      2,
+      f
+    );
+  }
+};
+
+
+/**
+ * Creates a deep clone of this proto. No data is shared with the original.
+ * @return {!proto.routeguide.RouteNote} The clone.
+ */
+proto.routeguide.RouteNote.prototype.cloneMessage = function() {
+  return /** @type {!proto.routeguide.RouteNote} */ (jspb.Message.cloneMessage(this));
+};
+
+
+/**
+ * optional Point location = 1;
+ * @return {proto.routeguide.Point}
+ */
+proto.routeguide.RouteNote.prototype.getLocation = function() {
+  return /** @type{proto.routeguide.Point} */ (
+    jspb.Message.getWrapperField(this, proto.routeguide.Point, 1));
+};
+
+
+/** @param {proto.routeguide.Point|undefined} value  */
+proto.routeguide.RouteNote.prototype.setLocation = function(value) {
+  jspb.Message.setWrapperField(this, 1, value);
+};
+
+
+proto.routeguide.RouteNote.prototype.clearLocation = function() {
+  this.setLocation(undefined);
+};
+
+
+/**
+ * optional string message = 2;
+ * @return {string}
+ */
+proto.routeguide.RouteNote.prototype.getMessage = function() {
+  return /** @type {string} */ (jspb.Message.getFieldProto3(this, 2, ""));
+};
+
+
+/** @param {string} value  */
+proto.routeguide.RouteNote.prototype.setMessage = function(value) {
+  jspb.Message.setField(this, 2, value);
+};
+
+
+
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.routeguide.RouteSummary = function(opt_data) {
+  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.routeguide.RouteSummary, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+  proto.routeguide.RouteSummary.displayName = 'proto.routeguide.RouteSummary';
+}
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+/**
+ * Creates an object representation of this proto suitable for use in Soy templates.
+ * Field names that are reserved in JavaScript and will be renamed to pb_name.
+ * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+ * For the list of reserved names please see:
+ *     com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
+ * @param {boolean=} opt_includeInstance Whether to include the JSPB instance
+ *     for transitional soy proto support: http://goto/soy-param-migration
+ * @return {!Object}
+ */
+proto.routeguide.RouteSummary.prototype.toObject = function(opt_includeInstance) {
+  return proto.routeguide.RouteSummary.toObject(opt_includeInstance, this);
+};
+
+
+/**
+ * Static version of the {@see toObject} method.
+ * @param {boolean|undefined} includeInstance Whether to include the JSPB
+ *     instance for transitional soy proto support:
+ *     http://goto/soy-param-migration
+ * @param {!proto.routeguide.RouteSummary} msg The msg instance to transform.
+ * @return {!Object}
+ */
+proto.routeguide.RouteSummary.toObject = function(includeInstance, msg) {
+  var f, obj = {
+    pointCount: msg.getPointCount(),
+    featureCount: msg.getFeatureCount(),
+    distance: msg.getDistance(),
+    elapsedTime: msg.getElapsedTime()
+  };
+
+  if (includeInstance) {
+    obj.$jspbMessageInstance = msg
+  }
+  return obj;
+};
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.routeguide.RouteSummary}
+ */
+proto.routeguide.RouteSummary.deserializeBinary = function(bytes) {
+  var reader = new jspb.BinaryReader(bytes);
+  var msg = new proto.routeguide.RouteSummary;
+  return proto.routeguide.RouteSummary.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.routeguide.RouteSummary} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.routeguide.RouteSummary}
+ */
+proto.routeguide.RouteSummary.deserializeBinaryFromReader = function(msg, reader) {
+  while (reader.nextField()) {
+    if (reader.isEndGroup()) {
+      break;
+    }
+    var field = reader.getFieldNumber();
+    switch (field) {
+    case 1:
+      var value = /** @type {number} */ (reader.readInt32());
+      msg.setPointCount(value);
+      break;
+    case 2:
+      var value = /** @type {number} */ (reader.readInt32());
+      msg.setFeatureCount(value);
+      break;
+    case 3:
+      var value = /** @type {number} */ (reader.readInt32());
+      msg.setDistance(value);
+      break;
+    case 4:
+      var value = /** @type {number} */ (reader.readInt32());
+      msg.setElapsedTime(value);
+      break;
+    default:
+      reader.skipField();
+      break;
+    }
+  }
+  return msg;
+};
+
+
+/**
+ * Class method variant: serializes the given message to binary data
+ * (in protobuf wire format), writing to the given BinaryWriter.
+ * @param {!proto.routeguide.RouteSummary} message
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.RouteSummary.serializeBinaryToWriter = function(message, writer) {
+  message.serializeBinaryToWriter(writer);
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.routeguide.RouteSummary.prototype.serializeBinary = function() {
+  var writer = new jspb.BinaryWriter();
+  this.serializeBinaryToWriter(writer);
+  return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format),
+ * writing to the given BinaryWriter.
+ * @param {!jspb.BinaryWriter} writer
+ */
+proto.routeguide.RouteSummary.prototype.serializeBinaryToWriter = function (writer) {
+  var f = undefined;
+  f = this.getPointCount();
+  if (f !== 0) {
+    writer.writeInt32(
+      1,
+      f
+    );
+  }
+  f = this.getFeatureCount();
+  if (f !== 0) {
+    writer.writeInt32(
+      2,
+      f
+    );
+  }
+  f = this.getDistance();
+  if (f !== 0) {
+    writer.writeInt32(
+      3,
+      f
+    );
+  }
+  f = this.getElapsedTime();
+  if (f !== 0) {
+    writer.writeInt32(
+      4,
+      f
+    );
+  }
+};
+
+
+/**
+ * Creates a deep clone of this proto. No data is shared with the original.
+ * @return {!proto.routeguide.RouteSummary} The clone.
+ */
+proto.routeguide.RouteSummary.prototype.cloneMessage = function() {
+  return /** @type {!proto.routeguide.RouteSummary} */ (jspb.Message.cloneMessage(this));
+};
+
+
+/**
+ * optional int32 point_count = 1;
+ * @return {number}
+ */
+proto.routeguide.RouteSummary.prototype.getPointCount = function() {
+  return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0));
+};
+
+
+/** @param {number} value  */
+proto.routeguide.RouteSummary.prototype.setPointCount = function(value) {
+  jspb.Message.setField(this, 1, value);
+};
+
+
+/**
+ * optional int32 feature_count = 2;
+ * @return {number}
+ */
+proto.routeguide.RouteSummary.prototype.getFeatureCount = function() {
+  return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0));
+};
+
+
+/** @param {number} value  */
+proto.routeguide.RouteSummary.prototype.setFeatureCount = function(value) {
+  jspb.Message.setField(this, 2, value);
+};
+
+
+/**
+ * optional int32 distance = 3;
+ * @return {number}
+ */
+proto.routeguide.RouteSummary.prototype.getDistance = function() {
+  return /** @type {number} */ (jspb.Message.getFieldProto3(this, 3, 0));
+};
+
+
+/** @param {number} value  */
+proto.routeguide.RouteSummary.prototype.setDistance = function(value) {
+  jspb.Message.setField(this, 3, value);
+};
+
+
+/**
+ * optional int32 elapsed_time = 4;
+ * @return {number}
+ */
+proto.routeguide.RouteSummary.prototype.getElapsedTime = function() {
+  return /** @type {number} */ (jspb.Message.getFieldProto3(this, 4, 0));
+};
+
+
+/** @param {number} value  */
+proto.routeguide.RouteSummary.prototype.setElapsedTime = function(value) {
+  jspb.Message.setField(this, 4, value);
+};
+
+
+goog.object.extend(exports, proto.routeguide);
diff --git a/examples/node/route_guide/route_guide_server.js b/examples/node/static_codegen/route_guide/route_guide_server.js
similarity index 77%
copy from examples/node/route_guide/route_guide_server.js
copy to examples/node/static_codegen/route_guide/route_guide_server.js
index 6c01fac..53628fb 100644
--- a/examples/node/route_guide/route_guide_server.js
+++ b/examples/node/static_codegen/route_guide/route_guide_server.js
@@ -31,14 +31,14 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../../protos/route_guide.proto';
+var messages = require('./route_guide_pb');
+var services = require('./route_guide_grpc_pb');
 
 var fs = require('fs');
 var parseArgs = require('minimist');
 var path = require('path');
 var _ = require('lodash');
 var grpc = require('grpc');
-var routeguide = grpc.load(PROTO_PATH).routeguide;
 
 var COORD_FACTOR = 1e7;
 
@@ -65,16 +65,15 @@
   // Check if there is already a feature object for the given point
   for (var i = 0; i < feature_list.length; i++) {
     feature = feature_list[i];
-    if (feature.location.latitude === point.latitude &&
-        feature.location.longitude === point.longitude) {
+    if (feature.getLocation().getLatitude() === point.getLatitude() &&
+        feature.getLocation().getLongitude() === point.getLongitude()) {
       return feature;
     }
   }
   var name = '';
-  feature = {
-    name: name,
-    location: point
-  };
+  feature = new messages.Feature();
+  feature.setName(name);
+  feature.setLocation(point);
   return feature;
 }
 
@@ -95,21 +94,21 @@
  *     request property for the request value.
  */
 function listFeatures(call) {
-  var lo = call.request.lo;
-  var hi = call.request.hi;
-  var left = _.min([lo.longitude, hi.longitude]);
-  var right = _.max([lo.longitude, hi.longitude]);
-  var top = _.max([lo.latitude, hi.latitude]);
-  var bottom = _.min([lo.latitude, hi.latitude]);
+  var lo = call.request.getLo();
+  var hi = call.request.getHi();
+  var left = _.min([lo.getLongitude(), hi.getLongitude()]);
+  var right = _.max([lo.getLongitude(), hi.getLongitude()]);
+  var top = _.max([lo.getLatitude(), hi.getLatitude()]);
+  var bottom = _.min([lo.getLatitude(), hi.getLatitude()]);
   // For each feature, check if it is in the given bounding box
   _.each(feature_list, function(feature) {
-    if (feature.name === '') {
+    if (feature.getName() === '') {
       return;
     }
-    if (feature.location.longitude >= left &&
-        feature.location.longitude <= right &&
-        feature.location.latitude >= bottom &&
-        feature.location.latitude <= top) {
+    if (feature.getLocation().getLongitude() >= left &&
+        feature.getLocation().getLongitude() <= right &&
+        feature.getLocation().getLatitude() >= bottom &&
+        feature.getLocation().getLatitude() <= top) {
       call.write(feature);
     }
   });
@@ -127,10 +126,10 @@
   function toRadians(num) {
     return num * Math.PI / 180;
   }
-  var lat1 = start.latitude / COORD_FACTOR;
-  var lat2 = end.latitude / COORD_FACTOR;
-  var lon1 = start.longitude / COORD_FACTOR;
-  var lon2 = end.longitude / COORD_FACTOR;
+  var lat1 = start.getLatitude() / COORD_FACTOR;
+  var lat2 = end.getLatitude() / COORD_FACTOR;
+  var lon1 = start.getLongitude() / COORD_FACTOR;
+  var lon2 = end.getLongitude() / COORD_FACTOR;
   var R = 6371000; // metres
   var φ1 = toRadians(lat1);
   var φ2 = toRadians(lat2);
@@ -173,14 +172,14 @@
     previous = point;
   });
   call.on('end', function() {
-    callback(null, {
-      point_count: point_count,
-      feature_count: feature_count,
-      // Cast the distance to an integer
-      distance: distance|0,
-      // End the timer
-      elapsed_time: process.hrtime(start_time)[0]
-    });
+    var summary = new messages.RouteSummary();
+    summary.setPointCount(point_count);
+    summary.setFeatureCount(feature_count);
+    // Cast the distance to an integer
+    summary.setDistance(distance|0);
+    // End the timer
+    summary.setElapsedTime(process.hrtime(start_time)[0]);
+    callback(null, summary);
   });
 }
 
@@ -192,7 +191,7 @@
  * @return {string} The key for an object
  */
 function pointKey(point) {
-  return point.latitude + ' ' + point.longitude;
+  return point.getLatitude() + ' ' + point.getLongitude();
 }
 
 /**
@@ -202,7 +201,7 @@
  */
 function routeChat(call) {
   call.on('data', function(note) {
-    var key = pointKey(note.location);
+    var key = pointKey(note.getLocation());
     /* For each note sent, respond with all previous notes that correspond to
      * the same point */
     if (route_notes.hasOwnProperty(key)) {
@@ -213,7 +212,7 @@
       route_notes[key] = [];
     }
     // Then add the new note to the list
-    route_notes[key].push(JSON.parse(JSON.stringify(note)));
+    route_notes[key].push(note);
   });
   call.on('end', function() {
     call.end();
@@ -227,7 +226,7 @@
  */
 function getServer() {
   var server = new grpc.Server();
-  server.addProtoService(routeguide.RouteGuide.service, {
+  server.addService(services.RouteGuideService, {
     getFeature: getFeature,
     listFeatures: listFeatures,
     recordRoute: recordRoute,
@@ -245,7 +244,16 @@
   });
   fs.readFile(path.resolve(argv.db_path), function(err, data) {
     if (err) throw err;
-    feature_list = JSON.parse(data);
+    // Transform the loaded features to Feature objects
+    feature_list = _.map(JSON.parse(data), function(value) {
+      var feature = new messages.Feature();
+      feature.setName(value.name);
+      var location = new messages.Point();
+      location.setLatitude(value.location.latitude);
+      location.setLongitude(value.location.longitude);
+      feature.setLocation(location);
+      return feature;
+    });
     routeServer.start();
   });
 }
diff --git a/gRPC.podspec b/gRPC.podspec
index 569f89b..67e7a81 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -36,7 +36,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC'
-  version = '0.12.0'
+  version = '0.14.0'
   s.version  = version
   s.summary  = 'gRPC client library for iOS/OSX'
   s.homepage = 'http://www.grpc.io'
@@ -44,7 +44,8 @@
   s.authors  = { 'The gRPC contributors' => 'grpc-packages@google.com' }
 
   s.source = { :git => 'https://github.com/grpc/grpc.git',
-               :tag => "release-#{version.gsub(/\./, '_')}-objectivec-#{version}" }
+               :tag => "release-#{version.gsub(/\./, '_')}-objectivec-#{version}",
+               :submodules => true }
 
 
   s.ios.deployment_target = '7.1'
@@ -181,6 +182,7 @@
                       'src/core/lib/iomgr/endpoint.h',
                       'src/core/lib/iomgr/endpoint_pair.h',
                       'src/core/lib/iomgr/ev_poll_and_epoll_posix.h',
+                      'src/core/lib/iomgr/ev_poll_posix.h',
                       'src/core/lib/iomgr/ev_posix.h',
                       'src/core/lib/iomgr/exec_ctx.h',
                       'src/core/lib/iomgr/executor.h',
@@ -287,8 +289,9 @@
                       'src/core/ext/client_config/subchannel_call_holder.h',
                       'src/core/ext/client_config/subchannel_index.h',
                       'src/core/ext/client_config/uri_parser.h',
+                      'third_party/objective_c/Cronet/cronet_c_for_grpc.h',
                       'src/core/ext/lb_policy/grpclb/load_balancer_api.h',
-                      'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h',
+                      'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
                       'third_party/nanopb/pb.h',
                       'third_party/nanopb/pb_common.h',
                       'third_party/nanopb/pb_decode.h',
@@ -325,6 +328,7 @@
                       'include/grpc/impl/codegen/sync_posix.h',
                       'include/grpc/impl/codegen/sync_win32.h',
                       'include/grpc/impl/codegen/time.h',
+                      'include/grpc/grpc_cronet.h',
                       'include/grpc/grpc_security.h',
                       'include/grpc/grpc_security_constants.h',
                       'include/grpc/census.h',
@@ -347,6 +351,7 @@
                       'src/core/lib/iomgr/endpoint_pair_posix.c',
                       'src/core/lib/iomgr/endpoint_pair_windows.c',
                       'src/core/lib/iomgr/ev_poll_and_epoll_posix.c',
+                      'src/core/lib/iomgr/ev_poll_posix.c',
                       'src/core/lib/iomgr/ev_posix.c',
                       'src/core/lib/iomgr/exec_ctx.c',
                       'src/core/lib/iomgr/executor.c',
@@ -474,8 +479,11 @@
                       'src/core/ext/client_config/uri_parser.c',
                       'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
                       'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
+                      'src/core/ext/transport/cronet/client/secure/cronet_channel_create.c',
+                      'src/core/ext/transport/cronet/transport/cronet_api_dummy.c',
+                      'src/core/ext/transport/cronet/transport/cronet_transport.c',
                       'src/core/ext/lb_policy/grpclb/load_balancer_api.c',
-                      'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c',
+                      'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c',
                       'third_party/nanopb/pb_common.c',
                       'third_party/nanopb/pb_decode.c',
                       'third_party/nanopb/pb_encode.c',
@@ -524,6 +532,7 @@
                               'src/core/lib/iomgr/endpoint.h',
                               'src/core/lib/iomgr/endpoint_pair.h',
                               'src/core/lib/iomgr/ev_poll_and_epoll_posix.h',
+                              'src/core/lib/iomgr/ev_poll_posix.h',
                               'src/core/lib/iomgr/ev_posix.h',
                               'src/core/lib/iomgr/exec_ctx.h',
                               'src/core/lib/iomgr/executor.h',
@@ -630,8 +639,9 @@
                               'src/core/ext/client_config/subchannel_call_holder.h',
                               'src/core/ext/client_config/subchannel_index.h',
                               'src/core/ext/client_config/uri_parser.h',
+                              'third_party/objective_c/Cronet/cronet_c_for_grpc.h',
                               'src/core/ext/lb_policy/grpclb/load_balancer_api.h',
-                              'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h',
+                              'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
                               'third_party/nanopb/pb.h',
                               'third_party/nanopb/pb_common.h',
                               'third_party/nanopb/pb_decode.h',
@@ -655,7 +665,7 @@
 
     ss.requires_arc = false
     ss.libraries = 'z'
-    ss.dependency 'BoringSSL', '~> 2.0'
+    ss.dependency 'BoringSSL', '~> 3.0'
 
     # ss.compiler_flags = '-GCC_WARN_INHIBIT_ALL_WARNINGS', '-w'
   end
diff --git a/grpc.def b/grpc.def
index 61948ed..09a94a6 100644
--- a/grpc.def
+++ b/grpc.def
@@ -87,6 +87,7 @@
     grpc_header_nonbin_value_is_legal
     grpc_is_binary_header
     grpc_call_error_to_string
+    grpc_cronet_secure_channel_create
     grpc_auth_property_iterator_next
     grpc_auth_context_property_iterator
     grpc_auth_context_peer_identity
diff --git a/grpc.gemspec b/grpc.gemspec
index 475fc99..13aed6b 100755
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -169,6 +169,7 @@
   s.files += %w( include/grpc/impl/codegen/sync_posix.h )
   s.files += %w( include/grpc/impl/codegen/sync_win32.h )
   s.files += %w( include/grpc/impl/codegen/time.h )
+  s.files += %w( include/grpc/grpc_cronet.h )
   s.files += %w( include/grpc/grpc_security.h )
   s.files += %w( include/grpc/grpc_security_constants.h )
   s.files += %w( include/grpc/census.h )
@@ -190,6 +191,7 @@
   s.files += %w( src/core/lib/iomgr/endpoint.h )
   s.files += %w( src/core/lib/iomgr/endpoint_pair.h )
   s.files += %w( src/core/lib/iomgr/ev_poll_and_epoll_posix.h )
+  s.files += %w( src/core/lib/iomgr/ev_poll_posix.h )
   s.files += %w( src/core/lib/iomgr/ev_posix.h )
   s.files += %w( src/core/lib/iomgr/exec_ctx.h )
   s.files += %w( src/core/lib/iomgr/executor.h )
@@ -296,8 +298,9 @@
   s.files += %w( src/core/ext/client_config/subchannel_call_holder.h )
   s.files += %w( src/core/ext/client_config/subchannel_index.h )
   s.files += %w( src/core/ext/client_config/uri_parser.h )
+  s.files += %w( third_party/objective_c/Cronet/cronet_c_for_grpc.h )
   s.files += %w( src/core/ext/lb_policy/grpclb/load_balancer_api.h )
-  s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h )
+  s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h )
   s.files += %w( third_party/nanopb/pb.h )
   s.files += %w( third_party/nanopb/pb_common.h )
   s.files += %w( third_party/nanopb/pb_decode.h )
@@ -327,6 +330,7 @@
   s.files += %w( src/core/lib/iomgr/endpoint_pair_posix.c )
   s.files += %w( src/core/lib/iomgr/endpoint_pair_windows.c )
   s.files += %w( src/core/lib/iomgr/ev_poll_and_epoll_posix.c )
+  s.files += %w( src/core/lib/iomgr/ev_poll_posix.c )
   s.files += %w( src/core/lib/iomgr/ev_posix.c )
   s.files += %w( src/core/lib/iomgr/exec_ctx.c )
   s.files += %w( src/core/lib/iomgr/executor.c )
@@ -454,8 +458,11 @@
   s.files += %w( src/core/ext/client_config/uri_parser.c )
   s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2.c )
   s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.c )
+  s.files += %w( src/core/ext/transport/cronet/client/secure/cronet_channel_create.c )
+  s.files += %w( src/core/ext/transport/cronet/transport/cronet_api_dummy.c )
+  s.files += %w( src/core/ext/transport/cronet/transport/cronet_transport.c )
   s.files += %w( src/core/ext/lb_policy/grpclb/load_balancer_api.c )
-  s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c )
+  s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c )
   s.files += %w( third_party/nanopb/pb_common.c )
   s.files += %w( third_party/nanopb/pb_decode.c )
   s.files += %w( third_party/nanopb/pb_encode.c )
diff --git a/include/grpc++/impl/codegen/method_handler_impl.h b/include/grpc++/impl/codegen/method_handler_impl.h
index ad74efa..21ac6c4 100644
--- a/include/grpc++/impl/codegen/method_handler_impl.h
+++ b/include/grpc++/impl/codegen/method_handler_impl.h
@@ -44,10 +44,10 @@
 template <class ServiceType, class RequestType, class ResponseType>
 class RpcMethodHandler : public MethodHandler {
  public:
-  RpcMethodHandler(
-      std::function<Status(ServiceType*, ServerContext*, const RequestType*,
-                           ResponseType*)> func,
-      ServiceType* service)
+  RpcMethodHandler(std::function<Status(ServiceType*, ServerContext*,
+                                        const RequestType*, ResponseType*)>
+                       func,
+                   ServiceType* service)
       : func_(func), service_(service) {}
 
   void RunHandler(const HandlerParameter& param) GRPC_FINAL {
@@ -88,7 +88,8 @@
  public:
   ClientStreamingHandler(
       std::function<Status(ServiceType*, ServerContext*,
-                           ServerReader<RequestType>*, ResponseType*)> func,
+                           ServerReader<RequestType>*, ResponseType*)>
+          func,
       ServiceType* service)
       : func_(func), service_(service) {}
 
@@ -124,7 +125,8 @@
  public:
   ServerStreamingHandler(
       std::function<Status(ServiceType*, ServerContext*, const RequestType*,
-                           ServerWriter<ResponseType>*)> func,
+                           ServerWriter<ResponseType>*)>
+          func,
       ServiceType* service)
       : func_(func), service_(service) {}
 
diff --git a/include/grpc++/impl/codegen/proto_utils.h b/include/grpc++/impl/codegen/proto_utils.h
index d044ddc..3bad468 100644
--- a/include/grpc++/impl/codegen/proto_utils.h
+++ b/include/grpc++/impl/codegen/proto_utils.h
@@ -49,7 +49,7 @@
 
 extern CoreCodegenInterface* g_core_codegen_interface;
 
-namespace {
+namespace internal {
 
 const int kGrpcBufferWriterMaxBufferLength = 8192;
 
@@ -166,7 +166,7 @@
   grpc_byte_buffer_reader reader_;
   gpr_slice slice_;
 };
-}  // namespace
+}  // namespace internal
 
 template <class T>
 class SerializationTraits<T, typename std::enable_if<std::is_base_of<
@@ -176,7 +176,7 @@
                           grpc_byte_buffer** bp, bool* own_buffer) {
     *own_buffer = true;
     int byte_size = msg.ByteSize();
-    if (byte_size <= kGrpcBufferWriterMaxBufferLength) {
+    if (byte_size <= internal::kGrpcBufferWriterMaxBufferLength) {
       gpr_slice slice = g_core_codegen_interface->gpr_slice_malloc(byte_size);
       GPR_CODEGEN_ASSERT(
           GPR_SLICE_END_PTR(slice) ==
@@ -185,7 +185,8 @@
       g_core_codegen_interface->gpr_slice_unref(slice);
       return g_core_codegen_interface->ok();
     } else {
-      GrpcBufferWriter writer(bp, kGrpcBufferWriterMaxBufferLength);
+      internal::GrpcBufferWriter writer(
+          bp, internal::kGrpcBufferWriterMaxBufferLength);
       return msg.SerializeToZeroCopyStream(&writer)
                  ? g_core_codegen_interface->ok()
                  : Status(StatusCode::INTERNAL, "Failed to serialize message");
@@ -200,7 +201,7 @@
     }
     Status result = g_core_codegen_interface->ok();
     {
-      GrpcBufferReader reader(buffer);
+      internal::GrpcBufferReader reader(buffer);
       ::grpc::protobuf::io::CodedInputStream decoder(&reader);
       if (max_message_size > 0) {
         decoder.SetTotalBytesLimit(max_message_size, max_message_size);
diff --git a/include/grpc++/impl/server_builder_option.h b/include/grpc++/impl/server_builder_option.h
index bcb1982..2b7e89f 100644
--- a/include/grpc++/impl/server_builder_option.h
+++ b/include/grpc++/impl/server_builder_option.h
@@ -34,6 +34,10 @@
 #ifndef GRPCXX_IMPL_SERVER_BUILDER_OPTION_H
 #define GRPCXX_IMPL_SERVER_BUILDER_OPTION_H
 
+#include <map>
+#include <memory>
+
+#include <grpc++/impl/server_builder_plugin.h>
 #include <grpc++/support/channel_arguments.h>
 
 namespace grpc {
@@ -44,6 +48,10 @@
   virtual ~ServerBuilderOption() {}
   /// Alter the \a ChannelArguments used to create the gRPC server.
   virtual void UpdateArguments(ChannelArguments* args) = 0;
+  /// Alter the ServerBuilderPlugin map that will be added into ServerBuilder.
+  virtual void UpdatePlugins(
+      std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin> >*
+          plugins) = 0;
 };
 
 }  // namespace grpc
diff --git a/examples/node/greeter_client.js b/include/grpc++/impl/server_builder_plugin.h
similarity index 60%
copy from examples/node/greeter_client.js
copy to include/grpc++/impl/server_builder_plugin.h
index 2820acb..1e157ef 100644
--- a/examples/node/greeter_client.js
+++ b/include/grpc++/impl/server_builder_plugin.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,23 +31,37 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+#ifndef GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H
+#define GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H
 
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
+#include <memory>
 
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
-  }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
-}
+#include <grpc++/support/config.h>
 
-main();
+namespace grpc {
+
+class ServerInitializer;
+
+class ServerBuilderPlugin {
+ public:
+  virtual ~ServerBuilderPlugin() {}
+  virtual grpc::string name() = 0;
+
+  // InitServer will be called in ServerBuilder::BuildAndStart(), after the
+  // Server instance is created.
+  virtual void InitServer(ServerInitializer* si) = 0;
+
+  // Finish will be called at the end of ServerBuilder::BuildAndStart().
+  virtual void Finish(ServerInitializer* si) = 0;
+
+  // ChangeArguments is an interface that can be used in
+  // ServerBuilderOption::UpdatePlugins
+  virtual void ChangeArguments(const grpc::string& name, void* value) = 0;
+
+  virtual bool has_sync_methods() const { return false; }
+  virtual bool has_async_methods() const { return false; }
+};
+
+}  // namespace grpc
+
+#endif  // GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H
diff --git a/examples/node/greeter_client.js b/include/grpc++/impl/server_initializer.h
similarity index 66%
copy from examples/node/greeter_client.js
copy to include/grpc++/impl/server_initializer.h
index 2820acb..dbcecc7 100644
--- a/examples/node/greeter_client.js
+++ b/include/grpc++/impl/server_initializer.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,23 +31,40 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+#ifndef GRPCXX_IMPL_SERVER_INITIALIZER_H
+#define GRPCXX_IMPL_SERVER_INITIALIZER_H
 
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
+#include <memory>
+#include <vector>
 
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
+#include <grpc++/server.h>
+
+namespace grpc {
+
+class Server;
+class Service;
+
+class ServerInitializer {
+ public:
+  ServerInitializer(Server* server) : server_(server) {}
+
+  bool RegisterService(std::shared_ptr<Service> service) {
+    if (!server_->RegisterService(nullptr, service.get())) {
+      return false;
+    }
+    default_services_.push_back(service);
+    return true;
   }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
-}
 
-main();
+  const std::vector<grpc::string>* GetServiceList() {
+    return &server_->services_;
+  }
+
+ private:
+  Server* server_;
+  std::vector<std::shared_ptr<Service> > default_services_;
+};
+
+}  // namespace grpc
+
+#endif  // GRPCXX_IMPL_SERVER_INITIALIZER_H
diff --git a/include/grpc++/server.h b/include/grpc++/server.h
index 729a514..a0ee0e9 100644
--- a/include/grpc++/server.h
+++ b/include/grpc++/server.h
@@ -36,6 +36,7 @@
 
 #include <list>
 #include <memory>
+#include <vector>
 
 #include <grpc++/completion_queue.h>
 #include <grpc++/impl/call.h>
@@ -57,6 +58,7 @@
 class AsyncGenericService;
 class ServerAsyncStreamingInterface;
 class ServerContext;
+class ServerInitializer;
 class ThreadPoolInterface;
 
 /// Models a gRPC server.
@@ -94,6 +96,7 @@
  private:
   friend class AsyncGenericService;
   friend class ServerBuilder;
+  friend class ServerInitializer;
 
   class SyncRequest;
   class AsyncRequest;
@@ -159,6 +162,8 @@
 
   grpc_server* server() GRPC_OVERRIDE { return server_; };
 
+  ServerInitializer* initializer();
+
   const int max_message_size_;
 
   // Completion queue.
@@ -175,6 +180,7 @@
   std::shared_ptr<GlobalCallbacks> global_callbacks_;
 
   std::list<SyncRequest>* sync_methods_;
+  std::vector<grpc::string> services_;
   std::unique_ptr<RpcServiceMethod> unknown_method_;
   bool has_generic_service_;
 
@@ -184,6 +190,8 @@
   ThreadPoolInterface* thread_pool_;
   // Whether the thread pool is created and owned by the server.
   bool thread_pool_owned_;
+
+  std::unique_ptr<ServerInitializer> server_initializer_;
 };
 
 }  // namespace grpc
diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h
index 86c7fec..ad62952 100644
--- a/include/grpc++/server_builder.h
+++ b/include/grpc++/server_builder.h
@@ -34,10 +34,12 @@
 #ifndef GRPCXX_SERVER_BUILDER_H
 #define GRPCXX_SERVER_BUILDER_H
 
+#include <map>
 #include <memory>
 #include <vector>
 
 #include <grpc++/impl/server_builder_option.h>
+#include <grpc++/impl/server_builder_plugin.h>
 #include <grpc++/support/config.h>
 #include <grpc/compression.h>
 
@@ -51,6 +53,10 @@
 class ServerCredentials;
 class Service;
 
+namespace testing {
+class ServerBuilderPluginTest;
+}  // namespace testing
+
 /// A builder class for the creation and startup of \a grpc::Server instances.
 class ServerBuilder {
  public:
@@ -107,7 +113,13 @@
   /// Return a running server which is ready for processing calls.
   std::unique_ptr<Server> BuildAndStart();
 
+  /// For internal use only: Register a ServerBuilderPlugin factory function.
+  static void InternalAddPluginFactory(
+      std::unique_ptr<ServerBuilderPlugin> (*CreatePlugin)());
+
  private:
+  friend class ::grpc::testing::ServerBuilderPluginTest;
+
   struct Port {
     grpc::string addr;
     std::shared_ptr<ServerCredentials> creds;
@@ -130,6 +142,7 @@
   std::vector<Port> ports_;
   std::vector<ServerCompletionQueue*> cqs_;
   std::shared_ptr<ServerCredentials> creds_;
+  std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>> plugins_;
   AsyncGenericService* generic_service_;
 };
 
diff --git a/examples/node/greeter_client.js b/include/grpc/grpc_cronet.h
similarity index 72%
copy from examples/node/greeter_client.js
copy to include/grpc/grpc_cronet.h
index 2820acb..295e0f5 100644
--- a/examples/node/greeter_client.js
+++ b/include/grpc/grpc_cronet.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,23 +31,21 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+#ifndef GRPC_GRPC_CRONET_H
+#define GRPC_GRPC_CRONET_H
 
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
+#include <grpc/grpc.h>
 
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
-  }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+GRPCAPI grpc_channel *grpc_cronet_secure_channel_create(
+    void *engine, const char *target, const grpc_channel_args *args,
+    void *reserved);
+
+#ifdef __cplusplus
 }
+#endif
 
-main();
+#endif /* GRPC_GRPC_CRONET_H */
diff --git a/include/grpc/impl/codegen/compression_types.h b/include/grpc/impl/codegen/compression_types.h
index 0daccd9..8d2ec3b 100644
--- a/include/grpc/impl/codegen/compression_types.h
+++ b/include/grpc/impl/codegen/compression_types.h
@@ -41,10 +41,13 @@
 #endif
 
 /** To be used in channel arguments */
-#define GRPC_COMPRESSION_ALGORITHM_ARG "grpc.compression_algorithm"
-#define GRPC_COMPRESSION_ALGORITHM_STATE_ARG "grpc.compression_algorithm_state"
+#define GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM \
+  "grpc.default_compression_algorithm"
+#define GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL "grpc.default_compression_level"
+#define GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET \
+  "grpc.compression_enabled_algorithms_bitset"
 
-/* The various compression algorithms supported by GRPC */
+/* The various compression algorithms supported by gRPC */
 typedef enum {
   GRPC_COMPRESS_NONE = 0,
   GRPC_COMPRESS_DEFLATE,
@@ -53,6 +56,10 @@
   GRPC_COMPRESS_ALGORITHMS_COUNT
 } grpc_compression_algorithm;
 
+/** Compression levels allow a party with knowledge of its peer's accepted
+ * encodings to request compression in an abstract way. The level-algorithm
+ * mapping is performed internally and depends on the peer's supported
+ * compression algorithms. */
 typedef enum {
   GRPC_COMPRESS_LEVEL_NONE = 0,
   GRPC_COMPRESS_LEVEL_LOW,
@@ -62,8 +69,20 @@
 } grpc_compression_level;
 
 typedef struct grpc_compression_options {
-  uint32_t enabled_algorithms_bitset; /**< All algs are enabled by default */
-  grpc_compression_algorithm default_compression_algorithm; /**< for channel */
+  /** All algs are enabled by default. This option corresponds to the channel
+   * argument key behind \a GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET
+   */
+  uint32_t enabled_algorithms_bitset;
+
+  /** The default channel compression algorithm. It'll be used in the absence of
+   * call specific settings. This option corresponds to the channel argument key
+   * behind \a GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM */
+  grpc_compression_algorithm default_compression_algorithm;
+
+  /** The default channel compression level. It'll be used in the absence of
+   * call specific settings. This option corresponds to the channel argument key
+   * behind \a GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL */
+  grpc_compression_algorithm default_compression_level;
 } grpc_compression_options;
 
 #ifdef __cplusplus
diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h
index 7b20cc1..af3d0c2 100644
--- a/include/grpc/impl/codegen/grpc_types.h
+++ b/include/grpc/impl/codegen/grpc_types.h
@@ -152,6 +152,8 @@
    channel). If this parameter is specified and the underlying is not an SSL
    channel, it will just be ignored. */
 #define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override"
+/* Maximum metadata size */
+#define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size"
 
 /** Result of a grpc call. If the caller satisfies the prerequisites of a
     particular operation, the grpc_call_error returned will be GRPC_CALL_OK.
diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h
index 1229d48..d2d9ac7 100644
--- a/include/grpc/impl/codegen/port_platform.h
+++ b/include/grpc/impl/codegen/port_platform.h
@@ -114,6 +114,38 @@
 #define GPR_WIN32_ATOMIC 1
 #define GPR_MSVC_TLS 1
 #endif
+#elif defined(GPR_MANYLINUX1)
+// TODO(atash): manylinux1 is just another __linux__ but with ancient
+// libraries; it should be integrated with the `__linux__` definitions below.
+#define GPR_PLATFORM_STRING "manylinux"
+#define GPR_POSIX_CRASH_HANDLER 1
+#define GPR_CPU_LINUX 1
+#define GPR_GCC_ATOMIC 1
+#define GPR_GCC_TLS 1
+#define GPR_LINUX 1
+#define GPR_LINUX_LOG 1
+#define GPR_POSIX_SOCKET 1
+#define GPR_POSIX_WAKEUP_FD 1
+#define GPR_POSIX_SOCKETADDR 1
+#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
+#define GPR_POSIX_SOCKETUTILS 1
+#define GPR_HAVE_UNIX_SOCKET 1
+#define GPR_HAVE_IP_PKTINFO 1
+#define GPR_HAVE_IPV6_RECVPKTINFO 1
+#define GPR_LINUX_ENV 1
+#define GPR_POSIX_FILE 1
+#define GPR_POSIX_TMPFILE 1
+#define GPR_POSIX_STRING 1
+#define GPR_POSIX_SUBPROCESS 1
+#define GPR_POSIX_SYNC 1
+#define GPR_POSIX_TIME 1
+#define GPR_GETPID_IN_UNISTD_H 1
+#define GPR_HAVE_MSG_NOSIGNAL 1
+#ifdef _LP64
+#define GPR_ARCH_64 1
+#else /* _LP64 */
+#define GPR_ARCH_32 1
+#endif /* _LP64 */
 #elif defined(ANDROID) || defined(__ANDROID__)
 #define GPR_PLATFORM_STRING "android"
 #define GPR_ANDROID 1
diff --git a/include/grpc/impl/codegen/slice_buffer.h b/include/grpc/impl/codegen/slice_buffer.h
index 8ca51ba..7858021 100644
--- a/include/grpc/impl/codegen/slice_buffer.h
+++ b/include/grpc/impl/codegen/slice_buffer.h
@@ -42,9 +42,8 @@
 
 #define GRPC_SLICE_BUFFER_INLINE_ELEMENTS 8
 
-/* Represents an expandable array of slices, to be interpreted as a single item
-   TODO(ctiller): inline some small number of elements into the struct, to
-                  avoid per-call allocations */
+/* Represents an expandable array of slices, to be interpreted as a
+   single item. */
 typedef struct {
   /* slices in the array */
   gpr_slice *slices;
diff --git a/package.json b/package.json
index 54a44ca..5bdaa76 100644
--- a/package.json
+++ b/package.json
@@ -67,6 +67,8 @@
     "src/node/ext",
     "include/grpc",
     "src/core",
+    "src/boringssl",
+    "src/zlib",
     "third_party/nanopb",
     "third_party/zlib",
     "third_party/boringssl",
diff --git a/package.xml b/package.xml
index feb2717..33a769a 100644
--- a/package.xml
+++ b/package.xml
@@ -176,6 +176,7 @@
     <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_posix.h" role="src" />
     <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_win32.h" role="src" />
     <file baseinstalldir="/" name="include/grpc/impl/codegen/time.h" role="src" />
+    <file baseinstalldir="/" name="include/grpc/grpc_cronet.h" role="src" />
     <file baseinstalldir="/" name="include/grpc/grpc_security.h" role="src" />
     <file baseinstalldir="/" name="include/grpc/grpc_security_constants.h" role="src" />
     <file baseinstalldir="/" name="include/grpc/census.h" role="src" />
@@ -197,6 +198,7 @@
     <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_and_epoll_posix.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_posix.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/ev_posix.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/executor.h" role="src" />
@@ -303,8 +305,9 @@
     <file baseinstalldir="/" name="src/core/ext/client_config/subchannel_call_holder.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/client_config/subchannel_index.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/client_config/uri_parser.h" role="src" />
+    <file baseinstalldir="/" name="third_party/objective_c/Cronet/cronet_c_for_grpc.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/load_balancer_api.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" role="src" />
     <file baseinstalldir="/" name="third_party/nanopb/pb.h" role="src" />
     <file baseinstalldir="/" name="third_party/nanopb/pb_common.h" role="src" />
     <file baseinstalldir="/" name="third_party/nanopb/pb_decode.h" role="src" />
@@ -334,6 +337,7 @@
     <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_posix.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_and_epoll_posix.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_posix.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/ev_posix.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/executor.c" role="src" />
@@ -461,8 +465,11 @@
     <file baseinstalldir="/" name="src/core/ext/client_config/uri_parser.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/insecure/server_chttp2.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/transport/cronet/client/secure/cronet_channel_create.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/transport/cronet/transport/cronet_api_dummy.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/transport/cronet/transport/cronet_transport.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/load_balancer_api.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c" role="src" />
     <file baseinstalldir="/" name="third_party/nanopb/pb_common.c" role="src" />
     <file baseinstalldir="/" name="third_party/nanopb/pb_decode.c" role="src" />
     <file baseinstalldir="/" name="third_party/nanopb/pb_encode.c" role="src" />
diff --git a/setup.py b/setup.py
index 5cd2612..f96824f 100644
--- a/setup.py
+++ b/setup.py
@@ -54,7 +54,6 @@
 
 # Break import-style to ensure we can actually find our in-repo dependencies.
 import commands
-import precompiled
 import grpc_core_dependencies
 import grpc_version
 
@@ -173,7 +172,6 @@
     'build_project_metadata': commands.BuildProjectMetadata,
     'build_py': commands.BuildPy,
     'build_ext': commands.BuildExt,
-    'build_tagged_ext': precompiled.BuildTaggedExt,
     'gather': commands.Gather,
     'run_interop': commands.RunInterop,
     'test_lite': commands.TestLite
@@ -229,25 +227,21 @@
   PACKAGES = setuptools.find_packages(
       PYTHON_STEM, exclude=['tests', 'tests.*'])
 
-setup_arguments = {
-    'name': 'grpcio',
-    'version': grpc_version.VERSION,
-    'license': LICENSE,
-    'ext_modules': CYTHON_EXTENSION_MODULES,
-    'packages': list(PACKAGES),
-    'package_dir': PACKAGE_DIRECTORIES,
-    # TODO(atash): Figure out why auditwheel doesn't like namespace packages.
-    #'namespace_packages': ['grpc'],
-    'package_data': PACKAGE_DATA,
-    'install_requires': INSTALL_REQUIRES,
-    'setup_requires': SETUP_REQUIRES,
-    'cmdclass': COMMAND_CLASS,
-    'tests_require': TESTS_REQUIRE,
-    'test_suite': TEST_SUITE,
-    'test_loader': TEST_LOADER,
-    'test_runner': TEST_RUNNER,
-}
-
-precompiled.update_setup_arguments(setup_arguments)
-
-setuptools.setup(**setup_arguments)
+setuptools.setup(
+  name='grpcio',
+  version=grpc_version.VERSION,
+  license=LICENSE,
+  ext_modules=CYTHON_EXTENSION_MODULES,
+  packages=list(PACKAGES),
+  package_dir=PACKAGE_DIRECTORIES,
+  # TODO(atash): Figure out why auditwheel doesn't like namespace packages.
+  #namespace_packages=['grpc'],
+  package_data=PACKAGE_DATA,
+  install_requires=INSTALL_REQUIRES,
+  setup_requires=SETUP_REQUIRES,
+  cmdclass=COMMAND_CLASS,
+  tests_require=TESTS_REQUIRE,
+  test_suite=TEST_SUITE,
+  test_loader=TEST_LOADER,
+  test_runner=TEST_RUNNER,
+)
diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc
index ac0fee1..29c359c 100644
--- a/src/compiler/csharp_generator.cc
+++ b/src/compiler/csharp_generator.cc
@@ -214,10 +214,10 @@
   switch (GetMethodType(method)) {
     case METHODTYPE_NO_STREAMING:
     case METHODTYPE_CLIENT_STREAMING:
-      return "Task<" + GetClassName(method->output_type()) + ">";
+      return "global::System.Threading.Tasks.Task<" + GetClassName(method->output_type()) + ">";
     case METHODTYPE_SERVER_STREAMING:
     case METHODTYPE_BIDI_STREAMING:
-      return "Task";
+      return "global::System.Threading.Tasks.Task";
   }
   GOOGLE_LOG(FATAL)<< "Can't get here.";
   return "";
diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc
index 8e76e6d..cd5ddd8 100644
--- a/src/compiler/python_generator.cc
+++ b/src/compiler/python_generator.cc
@@ -147,7 +147,8 @@
 // END FORMATTING BOILERPLATE //
 ////////////////////////////////
 
-// TODO(protobuf team): Export `ModuleName` from protobuf's
+// TODO(https://github.com/google/protobuf/issues/888):
+// Export `ModuleName` from protobuf's
 // `src/google/protobuf/compiler/python/python_generator.cc` file.
 grpc::string ModuleName(const grpc::string& filename) {
   grpc::string basename = StripProto(filename);
@@ -156,8 +157,23 @@
   return basename + "_pb2";
 }
 
+// TODO(https://github.com/google/protobuf/issues/888):
+// Export `ModuleAlias` from protobuf's
+// `src/google/protobuf/compiler/python/python_generator.cc` file.
+grpc::string ModuleAlias(const grpc::string& filename) {
+  grpc::string module_name = ModuleName(filename);
+  // We can't have dots in the module name, so we replace each with _dot_.
+  // But that could lead to a collision between a.b and a_dot_b, so we also
+  // duplicate each underscore.
+  module_name = StringReplace(module_name, "_", "__");
+  module_name = StringReplace(module_name, ".", "_dot_");
+  return module_name;
+}
+
+
 bool GetModuleAndMessagePath(const Descriptor* type,
-                             pair<grpc::string, grpc::string>* out) {
+                             const ServiceDescriptor* service,
+                             grpc::string* out) {
   const Descriptor* path_elem_type = type;
   vector<const Descriptor*> message_path;
   do {
@@ -170,7 +186,9 @@
         file_name.find_last_of(".proto") == file_name.size() - 1)) {
     return false;
   }
-  grpc::string module = ModuleName(file_name);
+  grpc::string service_file_name = service->file()->name();
+  grpc::string module = service_file_name == file_name ?
+          "" : ModuleAlias(file_name) + ".";
   grpc::string message_type;
   for (auto path_iter = message_path.rbegin();
        path_iter != message_path.rend(); ++path_iter) {
@@ -178,7 +196,7 @@
   }
   // no pop_back prior to C++11
   message_type.resize(message_type.size() - 1);
-  *out = make_pair(module, message_type);
+  *out = module + message_type;
   return true;
 }
 
@@ -210,7 +228,7 @@
 
 bool PrintBetaServicer(const ServiceDescriptor* service,
                        Printer* out) {
-  out->Print("\n");
+  out->Print("\n\n");
   out->Print("class Beta$Service$Servicer(object):\n", "Service",
              service->name());
   {
@@ -234,7 +252,7 @@
 
 bool PrintBetaStub(const ServiceDescriptor* service,
                    Printer* out) {
-  out->Print("\n");
+  out->Print("\n\n");
   out->Print("class Beta$Service$Stub(object):\n", "Service", service->name());
   {
     IndentScope raii_class_indent(out);
@@ -244,7 +262,7 @@
       grpc::string arg_name = meth->client_streaming() ?
           "request_iterator" : "request";
       auto methdict = ListToDict({"Method", meth->name(), "ArgName", arg_name});
-      out->Print(methdict, "def $Method$(self, $ArgName$, timeout):\n");
+      out->Print(methdict, "def $Method$(self, $ArgName$, timeout, metadata=None, with_call=False, protocol_options=None):\n");
       {
         IndentScope raii_method_indent(out);
         PrintAllComments(meth, out);
@@ -260,38 +278,31 @@
 
 bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name,
                             const ServiceDescriptor* service, Printer* out) {
-  out->Print("\n");
+  out->Print("\n\n");
   out->Print("def beta_create_$Service$_server(servicer, pool=None, "
              "pool_size=None, default_timeout=None, maximum_timeout=None):\n",
              "Service", service->name());
   {
     IndentScope raii_create_server_indent(out);
     map<grpc::string, grpc::string> method_implementation_constructors;
-    map<grpc::string, pair<grpc::string, grpc::string>>
-        input_message_modules_and_classes;
-    map<grpc::string, pair<grpc::string, grpc::string>>
-        output_message_modules_and_classes;
+    map<grpc::string, grpc::string> input_message_modules_and_classes;
+    map<grpc::string, grpc::string> output_message_modules_and_classes;
     for (int i = 0; i < service->method_count(); ++i) {
       const MethodDescriptor* method = service->method(i);
       const grpc::string method_implementation_constructor =
           grpc::string(method->client_streaming() ? "stream_" : "unary_") +
           grpc::string(method->server_streaming() ? "stream_" : "unary_") +
           "inline";
-      pair<grpc::string, grpc::string> input_message_module_and_class;
-      if (!GetModuleAndMessagePath(method->input_type(),
+      grpc::string input_message_module_and_class;
+      if (!GetModuleAndMessagePath(method->input_type(), service,
                                    &input_message_module_and_class)) {
         return false;
       }
-      pair<grpc::string, grpc::string> output_message_module_and_class;
-      if (!GetModuleAndMessagePath(method->output_type(),
+      grpc::string output_message_module_and_class;
+      if (!GetModuleAndMessagePath(method->output_type(), service,
                                    &output_message_module_and_class)) {
         return false;
       }
-      // Import the modules that define the messages used in RPCs.
-      out->Print("import $Module$\n", "Module",
-                 input_message_module_and_class.first);
-      out->Print("import $Module$\n", "Module",
-                 output_message_module_and_class.first);
       method_implementation_constructors.insert(
           make_pair(method->name(), method_implementation_constructor));
       input_message_modules_and_classes.insert(
@@ -307,13 +318,11 @@
          name_and_input_module_class_pair++) {
       IndentScope raii_indent(out);
       out->Print("(\'$PackageQualifiedServiceName$\', \'$MethodName$\'): "
-                 "$InputTypeModule$.$InputTypeClass$.FromString,\n",
+                 "$InputTypeModuleAndClass$.FromString,\n",
                  "PackageQualifiedServiceName", package_qualified_service_name,
                  "MethodName", name_and_input_module_class_pair->first,
-                 "InputTypeModule",
-                 name_and_input_module_class_pair->second.first,
-                 "InputTypeClass",
-                 name_and_input_module_class_pair->second.second);
+                 "InputTypeModuleAndClass",
+                 name_and_input_module_class_pair->second);
     }
     out->Print("}\n");
     out->Print("response_serializers = {\n");
@@ -324,13 +333,11 @@
          name_and_output_module_class_pair++) {
       IndentScope raii_indent(out);
       out->Print("(\'$PackageQualifiedServiceName$\', \'$MethodName$\'): "
-                 "$OutputTypeModule$.$OutputTypeClass$.SerializeToString,\n",
+                 "$OutputTypeModuleAndClass$.SerializeToString,\n",
                  "PackageQualifiedServiceName", package_qualified_service_name,
                  "MethodName", name_and_output_module_class_pair->first,
-                 "OutputTypeModule",
-                 name_and_output_module_class_pair->second.first,
-                 "OutputTypeClass",
-                 name_and_output_module_class_pair->second.second);
+                 "OutputTypeModuleAndClass",
+                 name_and_output_module_class_pair->second);
     }
     out->Print("}\n");
     out->Print("method_implementations = {\n");
@@ -366,37 +373,30 @@
   map<grpc::string, grpc::string> dict = ListToDict({
         "Service", service->name(),
       });
-  out->Print("\n");
+  out->Print("\n\n");
   out->Print(dict, "def beta_create_$Service$_stub(channel, host=None,"
              " metadata_transformer=None, pool=None, pool_size=None):\n");
   {
     IndentScope raii_create_server_indent(out);
     map<grpc::string, grpc::string> method_cardinalities;
-    map<grpc::string, pair<grpc::string, grpc::string>>
-        input_message_modules_and_classes;
-    map<grpc::string, pair<grpc::string, grpc::string>>
-        output_message_modules_and_classes;
+    map<grpc::string, grpc::string> input_message_modules_and_classes;
+    map<grpc::string, grpc::string> output_message_modules_and_classes;
     for (int i = 0; i < service->method_count(); ++i) {
       const MethodDescriptor* method = service->method(i);
       const grpc::string method_cardinality =
           grpc::string(method->client_streaming() ? "STREAM" : "UNARY") +
           "_" +
-	  grpc::string(method->server_streaming() ? "STREAM" : "UNARY");
-      pair<grpc::string, grpc::string> input_message_module_and_class;
-      if (!GetModuleAndMessagePath(method->input_type(),
+          grpc::string(method->server_streaming() ? "STREAM" : "UNARY");
+      grpc::string input_message_module_and_class;
+      if (!GetModuleAndMessagePath(method->input_type(), service,
                                    &input_message_module_and_class)) {
         return false;
       }
-      pair<grpc::string, grpc::string> output_message_module_and_class;
-      if (!GetModuleAndMessagePath(method->output_type(),
+      grpc::string output_message_module_and_class;
+      if (!GetModuleAndMessagePath(method->output_type(), service,
                                    &output_message_module_and_class)) {
         return false;
       }
-      // Import the modules that define the messages used in RPCs.
-      out->Print("import $Module$\n", "Module",
-                 input_message_module_and_class.first);
-      out->Print("import $Module$\n", "Module",
-                 output_message_module_and_class.first);
       method_cardinalities.insert(
           make_pair(method->name(), method_cardinality));
       input_message_modules_and_classes.insert(
@@ -412,13 +412,11 @@
          name_and_input_module_class_pair++) {
       IndentScope raii_indent(out);
       out->Print("(\'$PackageQualifiedServiceName$\', \'$MethodName$\'): "
-                 "$InputTypeModule$.$InputTypeClass$.SerializeToString,\n",
+                 "$InputTypeModuleAndClass$.SerializeToString,\n",
                  "PackageQualifiedServiceName", package_qualified_service_name,
                  "MethodName", name_and_input_module_class_pair->first,
-                 "InputTypeModule",
-                 name_and_input_module_class_pair->second.first,
-                 "InputTypeClass",
-                 name_and_input_module_class_pair->second.second);
+                 "InputTypeModuleAndClass",
+                 name_and_input_module_class_pair->second);
     }
     out->Print("}\n");
     out->Print("response_deserializers = {\n");
@@ -429,13 +427,11 @@
          name_and_output_module_class_pair++) {
       IndentScope raii_indent(out);
       out->Print("(\'$PackageQualifiedServiceName$\', \'$MethodName$\'): "
-                 "$OutputTypeModule$.$OutputTypeClass$.FromString,\n",
+                 "$OutputTypeModuleAndClass$.FromString,\n",
                  "PackageQualifiedServiceName", package_qualified_service_name,
                  "MethodName", name_and_output_module_class_pair->first,
-                 "OutputTypeModule",
-                 name_and_output_module_class_pair->second.first,
-                 "OutputTypeClass",
-                 name_and_output_module_class_pair->second.second);
+                 "OutputTypeModuleAndClass",
+                 name_and_output_module_class_pair->second);
     }
     out->Print("}\n");
     out->Print("cardinalities = {\n");
@@ -463,8 +459,6 @@
 
 bool PrintPreamble(const FileDescriptor* file,
                    const GeneratorConfiguration& config, Printer* out) {
-  out->Print("import abc\n");
-  out->Print("import six\n");
   out->Print("from $Package$ import implementations as beta_implementations\n",
              "Package", config.beta_package_root);
   out->Print("from $Package$ import interfaces as beta_interfaces\n",
diff --git a/src/core/ext/client_config/subchannel_call_holder.c b/src/core/ext/client_config/subchannel_call_holder.c
index 9918fbd..91fa917 100644
--- a/src/core/ext/client_config/subchannel_call_holder.c
+++ b/src/core/ext/client_config/subchannel_call_holder.c
@@ -174,6 +174,7 @@
              GRPC_SUBCHANNEL_CALL_HOLDER_PICKING_SUBCHANNEL);
   holder->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING;
   if (holder->connected_subchannel == NULL) {
+    gpr_atm_no_barrier_store(&holder->subchannel_call, 1);
     fail_locked(exec_ctx, holder);
   } else if (1 == gpr_atm_acq_load(&holder->subchannel_call)) {
     /* already cancelled before subchannel became ready */
diff --git a/src/core/ext/lb_policy/grpclb/load_balancer_api.c b/src/core/ext/lb_policy/grpclb/load_balancer_api.c
index 459d6d9..59b8999 100644
--- a/src/core/ext/lb_policy/grpclb/load_balancer_api.c
+++ b/src/core/ext/lb_policy/grpclb/load_balancer_api.c
@@ -50,7 +50,7 @@
   decode_serverlist_arg *dec_arg = *arg;
   if (dec_arg->first_pass != 0) { /* first pass */
     grpc_grpclb_server server;
-    if (!pb_decode(stream, grpc_lb_v0_Server_fields, &server)) {
+    if (!pb_decode(stream, grpc_lb_v1_Server_fields, &server)) {
       return false;
     }
     dec_arg->num_servers++;
@@ -61,7 +61,7 @@
       dec_arg->servers =
           gpr_malloc(sizeof(grpc_grpclb_server *) * dec_arg->num_servers);
     }
-    if (!pb_decode(stream, grpc_lb_v0_Server_fields, server)) {
+    if (!pb_decode(stream, grpc_lb_v1_Server_fields, server)) {
       return false;
     }
     dec_arg->servers[dec_arg->i++] = server;
@@ -87,13 +87,13 @@
   pb_ostream_t outputstream;
   gpr_slice slice;
   memset(&sizestream, 0, sizeof(pb_ostream_t));
-  pb_encode(&sizestream, grpc_lb_v0_LoadBalanceRequest_fields, request);
+  pb_encode(&sizestream, grpc_lb_v1_LoadBalanceRequest_fields, request);
   encoded_length = sizestream.bytes_written;
 
   slice = gpr_slice_malloc(encoded_length);
   outputstream =
       pb_ostream_from_buffer(GPR_SLICE_START_PTR(slice), encoded_length);
-  GPR_ASSERT(pb_encode(&outputstream, grpc_lb_v0_LoadBalanceRequest_fields,
+  GPR_ASSERT(pb_encode(&outputstream, grpc_lb_v1_LoadBalanceRequest_fields,
                        request) != 0);
   return slice;
 }
@@ -109,7 +109,7 @@
                              GPR_SLICE_LENGTH(encoded_response));
   grpc_grpclb_response *res = gpr_malloc(sizeof(grpc_grpclb_response));
   memset(res, 0, sizeof(*res));
-  status = pb_decode(&stream, grpc_lb_v0_LoadBalanceResponse_fields, res);
+  status = pb_decode(&stream, grpc_lb_v1_LoadBalanceResponse_fields, res);
   if (!status) {
     grpc_grpclb_response_destroy(res);
     return NULL;
@@ -132,7 +132,7 @@
   res->server_list.servers.funcs.decode = decode_serverlist;
   res->server_list.servers.arg = &arg;
   arg.first_pass = 1;
-  status = pb_decode(&stream, grpc_lb_v0_LoadBalanceResponse_fields, res);
+  status = pb_decode(&stream, grpc_lb_v1_LoadBalanceResponse_fields, res);
   if (!status) {
     grpc_grpclb_response_destroy(res);
     return NULL;
@@ -140,7 +140,7 @@
 
   arg.first_pass = 0;
   status =
-      pb_decode(&stream_at_start, grpc_lb_v0_LoadBalanceResponse_fields, res);
+      pb_decode(&stream_at_start, grpc_lb_v1_LoadBalanceResponse_fields, res);
   if (!status) {
     grpc_grpclb_response_destroy(res);
     return NULL;
diff --git a/src/core/ext/lb_policy/grpclb/load_balancer_api.h b/src/core/ext/lb_policy/grpclb/load_balancer_api.h
index 968f7d2..71b5616 100644
--- a/src/core/ext/lb_policy/grpclb/load_balancer_api.h
+++ b/src/core/ext/lb_policy/grpclb/load_balancer_api.h
@@ -37,7 +37,7 @@
 #include <grpc/support/slice_buffer.h>
 
 #include "src/core/ext/client_config/lb_policy_factory.h"
-#include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h"
+#include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -45,10 +45,10 @@
 
 #define GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH 128
 
-typedef grpc_lb_v0_LoadBalanceRequest grpc_grpclb_request;
-typedef grpc_lb_v0_LoadBalanceResponse grpc_grpclb_response;
-typedef grpc_lb_v0_Server grpc_grpclb_server;
-typedef grpc_lb_v0_Duration grpc_grpclb_duration;
+typedef grpc_lb_v1_LoadBalanceRequest grpc_grpclb_request;
+typedef grpc_lb_v1_LoadBalanceResponse grpc_grpclb_response;
+typedef grpc_lb_v1_Server grpc_grpclb_server;
+typedef grpc_lb_v1_Duration grpc_grpclb_duration;
 typedef struct grpc_grpclb_serverlist {
   grpc_grpclb_server **servers;
   size_t num_servers;
diff --git a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c
deleted file mode 100644
index 9719673..0000000
--- a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *
- * Copyright 2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-/* Automatically generated nanopb constant definitions */
-/* Generated by nanopb-0.3.5-dev */
-
-#include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h"
-
-#if PB_PROTO_HEADER_VERSION != 30
-#error Regenerate this file with the current version of nanopb generator.
-#endif
-
-
-
-const pb_field_t grpc_lb_v0_Duration_fields[3] = {
-    PB_FIELD(  1, INT64   , OPTIONAL, STATIC  , FIRST, grpc_lb_v0_Duration, seconds, seconds, 0),
-    PB_FIELD(  2, INT32   , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_Duration, nanos, seconds, 0),
-    PB_LAST_FIELD
-};
-
-const pb_field_t grpc_lb_v0_LoadBalanceRequest_fields[3] = {
-    PB_FIELD(  1, MESSAGE , OPTIONAL, STATIC  , FIRST, grpc_lb_v0_LoadBalanceRequest, initial_request, initial_request, &grpc_lb_v0_InitialLoadBalanceRequest_fields),
-    PB_FIELD(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_LoadBalanceRequest, client_stats, initial_request, &grpc_lb_v0_ClientStats_fields),
-    PB_LAST_FIELD
-};
-
-const pb_field_t grpc_lb_v0_InitialLoadBalanceRequest_fields[2] = {
-    PB_FIELD(  1, STRING  , OPTIONAL, STATIC  , FIRST, grpc_lb_v0_InitialLoadBalanceRequest, name, name, 0),
-    PB_LAST_FIELD
-};
-
-const pb_field_t grpc_lb_v0_ClientStats_fields[4] = {
-    PB_FIELD(  1, INT64   , OPTIONAL, STATIC  , FIRST, grpc_lb_v0_ClientStats, total_requests, total_requests, 0),
-    PB_FIELD(  2, INT64   , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_ClientStats, client_rpc_errors, total_requests, 0),
-    PB_FIELD(  3, INT64   , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_ClientStats, dropped_requests, client_rpc_errors, 0),
-    PB_LAST_FIELD
-};
-
-const pb_field_t grpc_lb_v0_LoadBalanceResponse_fields[3] = {
-    PB_FIELD(  1, MESSAGE , OPTIONAL, STATIC  , FIRST, grpc_lb_v0_LoadBalanceResponse, initial_response, initial_response, &grpc_lb_v0_InitialLoadBalanceResponse_fields),
-    PB_FIELD(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_LoadBalanceResponse, server_list, initial_response, &grpc_lb_v0_ServerList_fields),
-    PB_LAST_FIELD
-};
-
-const pb_field_t grpc_lb_v0_InitialLoadBalanceResponse_fields[4] = {
-    PB_FIELD(  1, STRING  , OPTIONAL, STATIC  , FIRST, grpc_lb_v0_InitialLoadBalanceResponse, client_config, client_config, 0),
-    PB_FIELD(  2, STRING  , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_InitialLoadBalanceResponse, load_balancer_delegate, client_config, 0),
-    PB_FIELD(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval, load_balancer_delegate, &grpc_lb_v0_Duration_fields),
-    PB_LAST_FIELD
-};
-
-const pb_field_t grpc_lb_v0_ServerList_fields[3] = {
-    PB_FIELD(  1, MESSAGE , REPEATED, CALLBACK, FIRST, grpc_lb_v0_ServerList, servers, servers, &grpc_lb_v0_Server_fields),
-    PB_FIELD(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_ServerList, expiration_interval, servers, &grpc_lb_v0_Duration_fields),
-    PB_LAST_FIELD
-};
-
-const pb_field_t grpc_lb_v0_Server_fields[5] = {
-    PB_FIELD(  1, STRING  , OPTIONAL, STATIC  , FIRST, grpc_lb_v0_Server, ip_address, ip_address, 0),
-    PB_FIELD(  2, INT32   , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_Server, port, ip_address, 0),
-    PB_FIELD(  3, BYTES   , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_Server, load_balance_token, port, 0),
-    PB_FIELD(  4, BOOL    , OPTIONAL, STATIC  , OTHER, grpc_lb_v0_Server, drop_request, load_balance_token, 0),
-    PB_LAST_FIELD
-};
-
-
-/* Check that field information fits in pb_field_t */
-#if !defined(PB_FIELD_32BIT)
-/* If you get an error here, it means that you need to define PB_FIELD_32BIT
- * compile-time option. You can do that in pb.h or on compiler command line.
- * 
- * The reason you need to do this is that some of your messages contain tag
- * numbers or field sizes that are larger than what can fit in 8 or 16 bit
- * field descriptors.
- */
-PB_STATIC_ASSERT((pb_membersize(grpc_lb_v0_LoadBalanceRequest, initial_request) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceRequest, client_stats) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, initial_response) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, server_list) < 65536 && pb_membersize(grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval) < 65536 && pb_membersize(grpc_lb_v0_ServerList, servers) < 65536 && pb_membersize(grpc_lb_v0_ServerList, expiration_interval) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_lb_v0_Duration_grpc_lb_v0_LoadBalanceRequest_grpc_lb_v0_InitialLoadBalanceRequest_grpc_lb_v0_ClientStats_grpc_lb_v0_LoadBalanceResponse_grpc_lb_v0_InitialLoadBalanceResponse_grpc_lb_v0_ServerList_grpc_lb_v0_Server)
-#endif
-
-#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
-/* If you get an error here, it means that you need to define PB_FIELD_16BIT
- * compile-time option. You can do that in pb.h or on compiler command line.
- * 
- * The reason you need to do this is that some of your messages contain tag
- * numbers or field sizes that are larger than what can fit in the default
- * 8 bit descriptors.
- */
-PB_STATIC_ASSERT((pb_membersize(grpc_lb_v0_LoadBalanceRequest, initial_request) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceRequest, client_stats) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, initial_response) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, server_list) < 256 && pb_membersize(grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval) < 256 && pb_membersize(grpc_lb_v0_ServerList, servers) < 256 && pb_membersize(grpc_lb_v0_ServerList, expiration_interval) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_lb_v0_Duration_grpc_lb_v0_LoadBalanceRequest_grpc_lb_v0_InitialLoadBalanceRequest_grpc_lb_v0_ClientStats_grpc_lb_v0_LoadBalanceResponse_grpc_lb_v0_InitialLoadBalanceResponse_grpc_lb_v0_ServerList_grpc_lb_v0_Server)
-#endif
-
-
diff --git a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h
deleted file mode 100644
index 3599f88..0000000
--- a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- *
- * Copyright 2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-/* Automatically generated nanopb header */
-/* Generated by nanopb-0.3.5-dev */
-
-#ifndef PB_LOAD_BALANCER_PB_H_INCLUDED
-#define PB_LOAD_BALANCER_PB_H_INCLUDED
-#include "third_party/nanopb/pb.h"
-#if PB_PROTO_HEADER_VERSION != 30
-#error Regenerate this file with the current version of nanopb generator.
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Struct definitions */
-typedef struct _grpc_lb_v0_ClientStats {
-    bool has_total_requests;
-    int64_t total_requests;
-    bool has_client_rpc_errors;
-    int64_t client_rpc_errors;
-    bool has_dropped_requests;
-    int64_t dropped_requests;
-} grpc_lb_v0_ClientStats;
-
-typedef struct _grpc_lb_v0_Duration {
-    bool has_seconds;
-    int64_t seconds;
-    bool has_nanos;
-    int32_t nanos;
-} grpc_lb_v0_Duration;
-
-typedef struct _grpc_lb_v0_InitialLoadBalanceRequest {
-    bool has_name;
-    char name[128];
-} grpc_lb_v0_InitialLoadBalanceRequest;
-
-typedef PB_BYTES_ARRAY_T(64) grpc_lb_v0_Server_load_balance_token_t;
-typedef struct _grpc_lb_v0_Server {
-    bool has_ip_address;
-    char ip_address[46];
-    bool has_port;
-    int32_t port;
-    bool has_load_balance_token;
-    grpc_lb_v0_Server_load_balance_token_t load_balance_token;
-    bool has_drop_request;
-    bool drop_request;
-} grpc_lb_v0_Server;
-
-typedef struct _grpc_lb_v0_InitialLoadBalanceResponse {
-    bool has_client_config;
-    char client_config[64];
-    bool has_load_balancer_delegate;
-    char load_balancer_delegate[64];
-    bool has_client_stats_report_interval;
-    grpc_lb_v0_Duration client_stats_report_interval;
-} grpc_lb_v0_InitialLoadBalanceResponse;
-
-typedef struct _grpc_lb_v0_LoadBalanceRequest {
-    bool has_initial_request;
-    grpc_lb_v0_InitialLoadBalanceRequest initial_request;
-    bool has_client_stats;
-    grpc_lb_v0_ClientStats client_stats;
-} grpc_lb_v0_LoadBalanceRequest;
-
-typedef struct _grpc_lb_v0_ServerList {
-    pb_callback_t servers;
-    bool has_expiration_interval;
-    grpc_lb_v0_Duration expiration_interval;
-} grpc_lb_v0_ServerList;
-
-typedef struct _grpc_lb_v0_LoadBalanceResponse {
-    bool has_initial_response;
-    grpc_lb_v0_InitialLoadBalanceResponse initial_response;
-    bool has_server_list;
-    grpc_lb_v0_ServerList server_list;
-} grpc_lb_v0_LoadBalanceResponse;
-
-/* Default values for struct fields */
-
-/* Initializer values for message structs */
-#define grpc_lb_v0_Duration_init_default         {false, 0, false, 0}
-#define grpc_lb_v0_LoadBalanceRequest_init_default {false, grpc_lb_v0_InitialLoadBalanceRequest_init_default, false, grpc_lb_v0_ClientStats_init_default}
-#define grpc_lb_v0_InitialLoadBalanceRequest_init_default {false, ""}
-#define grpc_lb_v0_ClientStats_init_default      {false, 0, false, 0, false, 0}
-#define grpc_lb_v0_LoadBalanceResponse_init_default {false, grpc_lb_v0_InitialLoadBalanceResponse_init_default, false, grpc_lb_v0_ServerList_init_default}
-#define grpc_lb_v0_InitialLoadBalanceResponse_init_default {false, "", false, "", false, grpc_lb_v0_Duration_init_default}
-#define grpc_lb_v0_ServerList_init_default       {{{NULL}, NULL}, false, grpc_lb_v0_Duration_init_default}
-#define grpc_lb_v0_Server_init_default           {false, "", false, 0, false, {0, {0}}, false, 0}
-#define grpc_lb_v0_Duration_init_zero            {false, 0, false, 0}
-#define grpc_lb_v0_LoadBalanceRequest_init_zero  {false, grpc_lb_v0_InitialLoadBalanceRequest_init_zero, false, grpc_lb_v0_ClientStats_init_zero}
-#define grpc_lb_v0_InitialLoadBalanceRequest_init_zero {false, ""}
-#define grpc_lb_v0_ClientStats_init_zero         {false, 0, false, 0, false, 0}
-#define grpc_lb_v0_LoadBalanceResponse_init_zero {false, grpc_lb_v0_InitialLoadBalanceResponse_init_zero, false, grpc_lb_v0_ServerList_init_zero}
-#define grpc_lb_v0_InitialLoadBalanceResponse_init_zero {false, "", false, "", false, grpc_lb_v0_Duration_init_zero}
-#define grpc_lb_v0_ServerList_init_zero          {{{NULL}, NULL}, false, grpc_lb_v0_Duration_init_zero}
-#define grpc_lb_v0_Server_init_zero              {false, "", false, 0, false, {0, {0}}, false, 0}
-
-/* Field tags (for use in manual encoding/decoding) */
-#define grpc_lb_v0_ClientStats_total_requests_tag 1
-#define grpc_lb_v0_ClientStats_client_rpc_errors_tag 2
-#define grpc_lb_v0_ClientStats_dropped_requests_tag 3
-#define grpc_lb_v0_Duration_seconds_tag          1
-#define grpc_lb_v0_Duration_nanos_tag            2
-#define grpc_lb_v0_InitialLoadBalanceRequest_name_tag 1
-#define grpc_lb_v0_Server_ip_address_tag         1
-#define grpc_lb_v0_Server_port_tag               2
-#define grpc_lb_v0_Server_load_balance_token_tag 3
-#define grpc_lb_v0_Server_drop_request_tag       4
-#define grpc_lb_v0_InitialLoadBalanceResponse_client_config_tag 1
-#define grpc_lb_v0_InitialLoadBalanceResponse_load_balancer_delegate_tag 2
-#define grpc_lb_v0_InitialLoadBalanceResponse_client_stats_report_interval_tag 3
-#define grpc_lb_v0_LoadBalanceRequest_initial_request_tag 1
-#define grpc_lb_v0_LoadBalanceRequest_client_stats_tag 2
-#define grpc_lb_v0_ServerList_servers_tag        1
-#define grpc_lb_v0_ServerList_expiration_interval_tag 3
-#define grpc_lb_v0_LoadBalanceResponse_initial_response_tag 1
-#define grpc_lb_v0_LoadBalanceResponse_server_list_tag 2
-
-/* Struct field encoding specification for nanopb */
-extern const pb_field_t grpc_lb_v0_Duration_fields[3];
-extern const pb_field_t grpc_lb_v0_LoadBalanceRequest_fields[3];
-extern const pb_field_t grpc_lb_v0_InitialLoadBalanceRequest_fields[2];
-extern const pb_field_t grpc_lb_v0_ClientStats_fields[4];
-extern const pb_field_t grpc_lb_v0_LoadBalanceResponse_fields[3];
-extern const pb_field_t grpc_lb_v0_InitialLoadBalanceResponse_fields[4];
-extern const pb_field_t grpc_lb_v0_ServerList_fields[3];
-extern const pb_field_t grpc_lb_v0_Server_fields[5];
-
-/* Maximum encoded size of messages (where known) */
-#define grpc_lb_v0_Duration_size                 22
-#define grpc_lb_v0_LoadBalanceRequest_size       169
-#define grpc_lb_v0_InitialLoadBalanceRequest_size 131
-#define grpc_lb_v0_ClientStats_size              33
-#define grpc_lb_v0_LoadBalanceResponse_size      (165 + grpc_lb_v0_ServerList_size)
-#define grpc_lb_v0_InitialLoadBalanceResponse_size 156
-#define grpc_lb_v0_Server_size                   127
-
-/* Message IDs (where set with "msgid" option) */
-#ifdef PB_MSGID
-
-#define LOAD_BALANCER_MESSAGES \
-
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c
new file mode 100644
index 0000000..52e11c4
--- /dev/null
+++ b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c
@@ -0,0 +1,118 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/* Automatically generated nanopb constant definitions */
+/* Generated by nanopb-0.3.5-dev */
+
+#include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
+
+#if PB_PROTO_HEADER_VERSION != 30
+#error Regenerate this file with the current version of nanopb generator.
+#endif
+
+
+
+const pb_field_t grpc_lb_v1_Duration_fields[3] = {
+    PB_FIELD(  1, INT64   , OPTIONAL, STATIC  , FIRST, grpc_lb_v1_Duration, seconds, seconds, 0),
+    PB_FIELD(  2, INT32   , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_Duration, nanos, seconds, 0),
+    PB_LAST_FIELD
+};
+
+const pb_field_t grpc_lb_v1_LoadBalanceRequest_fields[3] = {
+    PB_FIELD(  1, MESSAGE , OPTIONAL, STATIC  , FIRST, grpc_lb_v1_LoadBalanceRequest, initial_request, initial_request, &grpc_lb_v1_InitialLoadBalanceRequest_fields),
+    PB_FIELD(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_LoadBalanceRequest, client_stats, initial_request, &grpc_lb_v1_ClientStats_fields),
+    PB_LAST_FIELD
+};
+
+const pb_field_t grpc_lb_v1_InitialLoadBalanceRequest_fields[2] = {
+    PB_FIELD(  1, STRING  , OPTIONAL, STATIC  , FIRST, grpc_lb_v1_InitialLoadBalanceRequest, name, name, 0),
+    PB_LAST_FIELD
+};
+
+const pb_field_t grpc_lb_v1_ClientStats_fields[4] = {
+    PB_FIELD(  1, INT64   , OPTIONAL, STATIC  , FIRST, grpc_lb_v1_ClientStats, total_requests, total_requests, 0),
+    PB_FIELD(  2, INT64   , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_ClientStats, client_rpc_errors, total_requests, 0),
+    PB_FIELD(  3, INT64   , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_ClientStats, dropped_requests, client_rpc_errors, 0),
+    PB_LAST_FIELD
+};
+
+const pb_field_t grpc_lb_v1_LoadBalanceResponse_fields[3] = {
+    PB_FIELD(  1, MESSAGE , OPTIONAL, STATIC  , FIRST, grpc_lb_v1_LoadBalanceResponse, initial_response, initial_response, &grpc_lb_v1_InitialLoadBalanceResponse_fields),
+    PB_FIELD(  2, MESSAGE , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_LoadBalanceResponse, server_list, initial_response, &grpc_lb_v1_ServerList_fields),
+    PB_LAST_FIELD
+};
+
+const pb_field_t grpc_lb_v1_InitialLoadBalanceResponse_fields[3] = {
+    PB_FIELD(  2, STRING  , OPTIONAL, STATIC  , FIRST, grpc_lb_v1_InitialLoadBalanceResponse, load_balancer_delegate, load_balancer_delegate, 0),
+    PB_FIELD(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval, load_balancer_delegate, &grpc_lb_v1_Duration_fields),
+    PB_LAST_FIELD
+};
+
+const pb_field_t grpc_lb_v1_ServerList_fields[3] = {
+    PB_FIELD(  1, MESSAGE , REPEATED, CALLBACK, FIRST, grpc_lb_v1_ServerList, servers, servers, &grpc_lb_v1_Server_fields),
+    PB_FIELD(  3, MESSAGE , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_ServerList, expiration_interval, servers, &grpc_lb_v1_Duration_fields),
+    PB_LAST_FIELD
+};
+
+const pb_field_t grpc_lb_v1_Server_fields[5] = {
+    PB_FIELD(  1, STRING  , OPTIONAL, STATIC  , FIRST, grpc_lb_v1_Server, ip_address, ip_address, 0),
+    PB_FIELD(  2, INT32   , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_Server, port, ip_address, 0),
+    PB_FIELD(  3, STRING  , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_Server, load_balance_token, port, 0),
+    PB_FIELD(  4, BOOL    , OPTIONAL, STATIC  , OTHER, grpc_lb_v1_Server, drop_request, load_balance_token, 0),
+    PB_LAST_FIELD
+};
+
+
+/* Check that field information fits in pb_field_t */
+#if !defined(PB_FIELD_32BIT)
+/* If you get an error here, it means that you need to define PB_FIELD_32BIT
+ * compile-time option. You can do that in pb.h or on compiler command line.
+ * 
+ * The reason you need to do this is that some of your messages contain tag
+ * numbers or field sizes that are larger than what can fit in 8 or 16 bit
+ * field descriptors.
+ */
+PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 65536 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 65536 && pb_membersize(grpc_lb_v1_ServerList, servers) < 65536 && pb_membersize(grpc_lb_v1_ServerList, expiration_interval) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_lb_v1_Duration_grpc_lb_v1_LoadBalanceRequest_grpc_lb_v1_InitialLoadBalanceRequest_grpc_lb_v1_ClientStats_grpc_lb_v1_LoadBalanceResponse_grpc_lb_v1_InitialLoadBalanceResponse_grpc_lb_v1_ServerList_grpc_lb_v1_Server)
+#endif
+
+#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
+/* If you get an error here, it means that you need to define PB_FIELD_16BIT
+ * compile-time option. You can do that in pb.h or on compiler command line.
+ * 
+ * The reason you need to do this is that some of your messages contain tag
+ * numbers or field sizes that are larger than what can fit in the default
+ * 8 bit descriptors.
+ */
+PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 256 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 256 && pb_membersize(grpc_lb_v1_ServerList, servers) < 256 && pb_membersize(grpc_lb_v1_ServerList, expiration_interval) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_lb_v1_Duration_grpc_lb_v1_LoadBalanceRequest_grpc_lb_v1_InitialLoadBalanceRequest_grpc_lb_v1_ClientStats_grpc_lb_v1_LoadBalanceResponse_grpc_lb_v1_InitialLoadBalanceResponse_grpc_lb_v1_ServerList_grpc_lb_v1_Server)
+#endif
+
+
diff --git a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h
new file mode 100644
index 0000000..d5dc39a
--- /dev/null
+++ b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h
@@ -0,0 +1,178 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/* Automatically generated nanopb header */
+/* Generated by nanopb-0.3.5-dev */
+
+#ifndef PB_LOAD_BALANCER_PB_H_INCLUDED
+#define PB_LOAD_BALANCER_PB_H_INCLUDED
+#include "third_party/nanopb/pb.h"
+#if PB_PROTO_HEADER_VERSION != 30
+#error Regenerate this file with the current version of nanopb generator.
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Struct definitions */
+typedef struct _grpc_lb_v1_ClientStats {
+    bool has_total_requests;
+    int64_t total_requests;
+    bool has_client_rpc_errors;
+    int64_t client_rpc_errors;
+    bool has_dropped_requests;
+    int64_t dropped_requests;
+} grpc_lb_v1_ClientStats;
+
+typedef struct _grpc_lb_v1_Duration {
+    bool has_seconds;
+    int64_t seconds;
+    bool has_nanos;
+    int32_t nanos;
+} grpc_lb_v1_Duration;
+
+typedef struct _grpc_lb_v1_InitialLoadBalanceRequest {
+    bool has_name;
+    char name[128];
+} grpc_lb_v1_InitialLoadBalanceRequest;
+
+typedef struct _grpc_lb_v1_Server {
+    bool has_ip_address;
+    char ip_address[46];
+    bool has_port;
+    int32_t port;
+    bool has_load_balance_token;
+    char load_balance_token[64];
+    bool has_drop_request;
+    bool drop_request;
+} grpc_lb_v1_Server;
+
+typedef struct _grpc_lb_v1_InitialLoadBalanceResponse {
+    bool has_load_balancer_delegate;
+    char load_balancer_delegate[64];
+    bool has_client_stats_report_interval;
+    grpc_lb_v1_Duration client_stats_report_interval;
+} grpc_lb_v1_InitialLoadBalanceResponse;
+
+typedef struct _grpc_lb_v1_LoadBalanceRequest {
+    bool has_initial_request;
+    grpc_lb_v1_InitialLoadBalanceRequest initial_request;
+    bool has_client_stats;
+    grpc_lb_v1_ClientStats client_stats;
+} grpc_lb_v1_LoadBalanceRequest;
+
+typedef struct _grpc_lb_v1_ServerList {
+    pb_callback_t servers;
+    bool has_expiration_interval;
+    grpc_lb_v1_Duration expiration_interval;
+} grpc_lb_v1_ServerList;
+
+typedef struct _grpc_lb_v1_LoadBalanceResponse {
+    bool has_initial_response;
+    grpc_lb_v1_InitialLoadBalanceResponse initial_response;
+    bool has_server_list;
+    grpc_lb_v1_ServerList server_list;
+} grpc_lb_v1_LoadBalanceResponse;
+
+/* Default values for struct fields */
+
+/* Initializer values for message structs */
+#define grpc_lb_v1_Duration_init_default         {false, 0, false, 0}
+#define grpc_lb_v1_LoadBalanceRequest_init_default {false, grpc_lb_v1_InitialLoadBalanceRequest_init_default, false, grpc_lb_v1_ClientStats_init_default}
+#define grpc_lb_v1_InitialLoadBalanceRequest_init_default {false, ""}
+#define grpc_lb_v1_ClientStats_init_default      {false, 0, false, 0, false, 0}
+#define grpc_lb_v1_LoadBalanceResponse_init_default {false, grpc_lb_v1_InitialLoadBalanceResponse_init_default, false, grpc_lb_v1_ServerList_init_default}
+#define grpc_lb_v1_InitialLoadBalanceResponse_init_default {false, "", false, grpc_lb_v1_Duration_init_default}
+#define grpc_lb_v1_ServerList_init_default       {{{NULL}, NULL}, false, grpc_lb_v1_Duration_init_default}
+#define grpc_lb_v1_Server_init_default           {false, "", false, 0, false, "", false, 0}
+#define grpc_lb_v1_Duration_init_zero            {false, 0, false, 0}
+#define grpc_lb_v1_LoadBalanceRequest_init_zero  {false, grpc_lb_v1_InitialLoadBalanceRequest_init_zero, false, grpc_lb_v1_ClientStats_init_zero}
+#define grpc_lb_v1_InitialLoadBalanceRequest_init_zero {false, ""}
+#define grpc_lb_v1_ClientStats_init_zero         {false, 0, false, 0, false, 0}
+#define grpc_lb_v1_LoadBalanceResponse_init_zero {false, grpc_lb_v1_InitialLoadBalanceResponse_init_zero, false, grpc_lb_v1_ServerList_init_zero}
+#define grpc_lb_v1_InitialLoadBalanceResponse_init_zero {false, "", false, grpc_lb_v1_Duration_init_zero}
+#define grpc_lb_v1_ServerList_init_zero          {{{NULL}, NULL}, false, grpc_lb_v1_Duration_init_zero}
+#define grpc_lb_v1_Server_init_zero              {false, "", false, 0, false, "", false, 0}
+
+/* Field tags (for use in manual encoding/decoding) */
+#define grpc_lb_v1_ClientStats_total_requests_tag 1
+#define grpc_lb_v1_ClientStats_client_rpc_errors_tag 2
+#define grpc_lb_v1_ClientStats_dropped_requests_tag 3
+#define grpc_lb_v1_Duration_seconds_tag          1
+#define grpc_lb_v1_Duration_nanos_tag            2
+#define grpc_lb_v1_InitialLoadBalanceRequest_name_tag 1
+#define grpc_lb_v1_Server_ip_address_tag         1
+#define grpc_lb_v1_Server_port_tag               2
+#define grpc_lb_v1_Server_load_balance_token_tag 3
+#define grpc_lb_v1_Server_drop_request_tag       4
+#define grpc_lb_v1_InitialLoadBalanceResponse_load_balancer_delegate_tag 2
+#define grpc_lb_v1_InitialLoadBalanceResponse_client_stats_report_interval_tag 3
+#define grpc_lb_v1_LoadBalanceRequest_initial_request_tag 1
+#define grpc_lb_v1_LoadBalanceRequest_client_stats_tag 2
+#define grpc_lb_v1_ServerList_servers_tag        1
+#define grpc_lb_v1_ServerList_expiration_interval_tag 3
+#define grpc_lb_v1_LoadBalanceResponse_initial_response_tag 1
+#define grpc_lb_v1_LoadBalanceResponse_server_list_tag 2
+
+/* Struct field encoding specification for nanopb */
+extern const pb_field_t grpc_lb_v1_Duration_fields[3];
+extern const pb_field_t grpc_lb_v1_LoadBalanceRequest_fields[3];
+extern const pb_field_t grpc_lb_v1_InitialLoadBalanceRequest_fields[2];
+extern const pb_field_t grpc_lb_v1_ClientStats_fields[4];
+extern const pb_field_t grpc_lb_v1_LoadBalanceResponse_fields[3];
+extern const pb_field_t grpc_lb_v1_InitialLoadBalanceResponse_fields[3];
+extern const pb_field_t grpc_lb_v1_ServerList_fields[3];
+extern const pb_field_t grpc_lb_v1_Server_fields[5];
+
+/* Maximum encoded size of messages (where known) */
+#define grpc_lb_v1_Duration_size                 22
+#define grpc_lb_v1_LoadBalanceRequest_size       169
+#define grpc_lb_v1_InitialLoadBalanceRequest_size 131
+#define grpc_lb_v1_ClientStats_size              33
+#define grpc_lb_v1_LoadBalanceResponse_size      (98 + grpc_lb_v1_ServerList_size)
+#define grpc_lb_v1_InitialLoadBalanceResponse_size 90
+#define grpc_lb_v1_Server_size                   127
+
+/* Message IDs (where set with "msgid" option) */
+#ifdef PB_MSGID
+
+#define LOAD_BALANCER_MESSAGES \
+
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index 5363322..b6886a2 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -56,6 +56,8 @@
 #define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
 #define MAX_WINDOW 0x7fffffffu
 
+#define DEFAULT_MAX_HEADER_LIST_SIZE (16 * 1024)
+
 #define MAX_CLIENT_STREAM_ID 0x7fffffffu
 
 int grpc_http_trace = 0;
@@ -65,8 +67,8 @@
   ((grpc_chttp2_transport *)((char *)(tw)-offsetof(grpc_chttp2_transport, \
                                                    writing)))
 
-#define TRANSPORT_FROM_PARSING(tw)                                        \
-  ((grpc_chttp2_transport *)((char *)(tw)-offsetof(grpc_chttp2_transport, \
+#define TRANSPORT_FROM_PARSING(tp)                                        \
+  ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \
                                                    parsing)))
 
 #define TRANSPORT_FROM_GLOBAL(tg)                                         \
@@ -311,6 +313,8 @@
     push_setting(t, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 0);
   }
   push_setting(t, GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, DEFAULT_WINDOW);
+  push_setting(t, GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
+               DEFAULT_MAX_HEADER_LIST_SIZE);
 
   if (channel_args) {
     for (i = 0; i < channel_args->num_args; i++) {
@@ -378,6 +382,18 @@
               &t->writing.hpack_compressor,
               (uint32_t)channel_args->args[i].value.integer);
         }
+      } else if (0 == strcmp(channel_args->args[i].key,
+                             GRPC_ARG_MAX_METADATA_SIZE)) {
+        if (channel_args->args[i].type != GRPC_ARG_INTEGER) {
+          gpr_log(GPR_ERROR, "%s: must be an integer",
+                  GRPC_ARG_MAX_METADATA_SIZE);
+        } else if (channel_args->args[i].value.integer < 0) {
+          gpr_log(GPR_ERROR, "%s: must be non-negative",
+                  GRPC_ARG_MAX_METADATA_SIZE);
+        } else {
+          push_setting(t, GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
+                       (uint32_t)channel_args->args[i].value.integer);
+        }
       }
     }
   }
@@ -510,7 +526,7 @@
                           [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
     *t->accepting_stream = s;
     grpc_chttp2_stream_map_add(&t->parsing_stream_map, s->global.id, s);
-    s->global.in_stream_map = 1;
+    s->global.in_stream_map = true;
   }
 
   grpc_chttp2_run_with_global_lock(exec_ctx, t, s, finish_init_stream_locked,
@@ -834,7 +850,7 @@
     grpc_chttp2_stream_map_add(
         &TRANSPORT_FROM_GLOBAL(transport_global)->new_stream_map,
         stream_global->id, STREAM_FROM_GLOBAL(stream_global));
-    stream_global->in_stream_map = 1;
+    stream_global->in_stream_map = true;
     transport_global->concurrent_stream_count++;
     grpc_chttp2_become_writable(transport_global, stream_global);
   }
@@ -933,24 +949,38 @@
     stream_global->send_initial_metadata_finished =
         add_closure_barrier(on_complete);
     stream_global->send_initial_metadata = op->send_initial_metadata;
-    if (contains_non_ok_status(transport_global, op->send_initial_metadata)) {
-      stream_global->seen_error = 1;
-      grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
-    }
-    if (!stream_global->write_closed) {
-      if (transport_global->is_client) {
-        GPR_ASSERT(stream_global->id == 0);
-        grpc_chttp2_list_add_waiting_for_concurrency(transport_global,
-                                                     stream_global);
-        maybe_start_some_streams(exec_ctx, transport_global);
-      } else {
-        GPR_ASSERT(stream_global->id != 0);
-        grpc_chttp2_become_writable(transport_global, stream_global);
-      }
+    const size_t metadata_size =
+        grpc_metadata_batch_size(op->send_initial_metadata);
+    const size_t metadata_peer_limit =
+        transport_global->settings[GRPC_PEER_SETTINGS]
+                                  [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
+    if (metadata_size > metadata_peer_limit) {
+      gpr_log(GPR_DEBUG,
+              "to-be-sent initial metadata size exceeds peer limit "
+              "(%lu vs. %lu)",
+              metadata_size, metadata_peer_limit);
+      cancel_from_api(exec_ctx, transport_global, stream_global,
+                      GRPC_STATUS_RESOURCE_EXHAUSTED);
     } else {
-      grpc_chttp2_complete_closure_step(
-          exec_ctx, stream_global,
-          &stream_global->send_initial_metadata_finished, 0);
+      if (contains_non_ok_status(transport_global, op->send_initial_metadata)) {
+        stream_global->seen_error = true;
+        grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
+      }
+      if (!stream_global->write_closed) {
+        if (transport_global->is_client) {
+          GPR_ASSERT(stream_global->id == 0);
+          grpc_chttp2_list_add_waiting_for_concurrency(transport_global,
+                                                       stream_global);
+          maybe_start_some_streams(exec_ctx, transport_global);
+        } else {
+          GPR_ASSERT(stream_global->id != 0);
+          grpc_chttp2_become_writable(transport_global, stream_global);
+        }
+      } else {
+        grpc_chttp2_complete_closure_step(
+            exec_ctx, stream_global,
+            &stream_global->send_initial_metadata_finished, 0);
+      }
     }
   }
 
@@ -974,19 +1004,34 @@
     stream_global->send_trailing_metadata_finished =
         add_closure_barrier(on_complete);
     stream_global->send_trailing_metadata = op->send_trailing_metadata;
-    if (contains_non_ok_status(transport_global, op->send_trailing_metadata)) {
-      stream_global->seen_error = 1;
-      grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
-    }
-    if (stream_global->write_closed) {
-      grpc_chttp2_complete_closure_step(
-          exec_ctx, stream_global,
-          &stream_global->send_trailing_metadata_finished,
-          grpc_metadata_batch_is_empty(op->send_trailing_metadata));
-    } else if (stream_global->id != 0) {
-      /* TODO(ctiller): check if there's flow control for any outstanding
-         bytes before going writable */
-      grpc_chttp2_become_writable(transport_global, stream_global);
+    const size_t metadata_size =
+        grpc_metadata_batch_size(op->send_trailing_metadata);
+    const size_t metadata_peer_limit =
+        transport_global->settings[GRPC_PEER_SETTINGS]
+                                  [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
+    if (metadata_size > metadata_peer_limit) {
+      gpr_log(GPR_DEBUG,
+              "to-be-sent trailing metadata size exceeds peer limit "
+              "(%lu vs. %lu)",
+              metadata_size, metadata_peer_limit);
+      cancel_from_api(exec_ctx, transport_global, stream_global,
+                      GRPC_STATUS_RESOURCE_EXHAUSTED);
+    } else {
+      if (contains_non_ok_status(transport_global,
+                                 op->send_trailing_metadata)) {
+        stream_global->seen_error = true;
+        grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
+      }
+      if (stream_global->write_closed) {
+        grpc_chttp2_complete_closure_step(
+            exec_ctx, stream_global,
+            &stream_global->send_trailing_metadata_finished,
+            grpc_metadata_batch_is_empty(op->send_trailing_metadata));
+      } else if (stream_global->id != 0) {
+        /* TODO(ctiller): check if there's flow control for any outstanding
+           bytes before going writable */
+        grpc_chttp2_become_writable(transport_global, stream_global);
+      }
     }
   }
 
@@ -1149,6 +1194,16 @@
       grpc_chttp2_list_pop_check_read_ops(transport_global, &stream_global)) {
     if (stream_global->recv_initial_metadata_ready != NULL &&
         stream_global->published_initial_metadata) {
+      if (stream_global->seen_error) {
+        while ((bs = grpc_chttp2_incoming_frame_queue_pop(
+                    &stream_global->incoming_frames)) != NULL) {
+          incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs);
+        }
+        if (stream_global->exceeded_metadata_size) {
+          cancel_from_api(exec_ctx, transport_global, stream_global,
+                          GRPC_STATUS_RESOURCE_EXHAUSTED);
+        }
+      }
       grpc_chttp2_incoming_metadata_buffer_publish(
           &stream_global->received_initial_metadata,
           stream_global->recv_initial_metadata);
@@ -1178,10 +1233,15 @@
     }
     if (stream_global->recv_trailing_metadata_finished != NULL &&
         stream_global->read_closed && stream_global->write_closed) {
-      while (stream_global->seen_error &&
-             (bs = grpc_chttp2_incoming_frame_queue_pop(
-                  &stream_global->incoming_frames)) != NULL) {
-        incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs);
+      if (stream_global->seen_error) {
+        while ((bs = grpc_chttp2_incoming_frame_queue_pop(
+                    &stream_global->incoming_frames)) != NULL) {
+          incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs);
+        }
+        if (stream_global->exceeded_metadata_size) {
+          cancel_from_api(exec_ctx, transport_global, stream_global,
+                          GRPC_STATUS_RESOURCE_EXHAUSTED);
+        }
       }
       if (stream_global->all_incoming_byte_streams_finished) {
         grpc_chttp2_incoming_metadata_buffer_publish(
@@ -1213,7 +1273,7 @@
     s = grpc_chttp2_stream_map_delete(&t->new_stream_map, id);
   }
   GPR_ASSERT(s);
-  s->global.in_stream_map = 0;
+  s->global.in_stream_map = false;
   if (t->parsing.incoming_stream == &s->parsing) {
     t->parsing.incoming_stream = NULL;
     grpc_chttp2_parsing_become_skip_parser(exec_ctx, &t->parsing);
@@ -1257,7 +1317,7 @@
                             NULL);
   }
   if (status != GRPC_STATUS_OK && !stream_global->seen_error) {
-    stream_global->seen_error = 1;
+    stream_global->seen_error = true;
     grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
   }
   grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, 1,
@@ -1269,7 +1329,7 @@
                              grpc_chttp2_stream_global *stream_global,
                              grpc_status_code status, gpr_slice *slice) {
   if (status != GRPC_STATUS_OK) {
-    stream_global->seen_error = 1;
+    stream_global->seen_error = true;
     grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
   }
   /* stream_global->recv_trailing_metadata_finished gives us a
@@ -1293,7 +1353,7 @@
               GRPC_MDSTR_GRPC_MESSAGE,
               grpc_mdstr_from_slice(gpr_slice_ref(*slice))));
     }
-    stream_global->published_trailing_metadata = 1;
+    stream_global->published_trailing_metadata = true;
     grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
   }
   if (slice) {
@@ -1323,13 +1383,13 @@
   }
   grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
   if (close_reads && !stream_global->read_closed) {
-    stream_global->read_closed = 1;
-    stream_global->published_initial_metadata = 1;
-    stream_global->published_trailing_metadata = 1;
+    stream_global->read_closed = true;
+    stream_global->published_initial_metadata = true;
+    stream_global->published_trailing_metadata = true;
     decrement_active_streams_locked(exec_ctx, transport_global, stream_global);
   }
   if (close_writes && !stream_global->write_closed) {
-    stream_global->write_closed = 1;
+    stream_global->write_closed = true;
     if (TRANSPORT_FROM_GLOBAL(transport_global)->executor.writing_active) {
       GRPC_CHTTP2_STREAM_REF(stream_global, "finish_writes");
       grpc_chttp2_list_add_closed_waiting_for_writing(transport_global,
diff --git a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c
index 22467e9..7f01105 100644
--- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c
+++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c
@@ -45,15 +45,20 @@
   stats->framing_bytes += frame_size;
   uint8_t *p = GPR_SLICE_START_PTR(slice);
 
+  // Frame size.
   *p++ = 0;
   *p++ = 0;
   *p++ = 4;
+  // Frame type.
   *p++ = GRPC_CHTTP2_FRAME_RST_STREAM;
+  // Flags.
   *p++ = 0;
+  // Stream ID.
   *p++ = (uint8_t)(id >> 24);
   *p++ = (uint8_t)(id >> 16);
   *p++ = (uint8_t)(id >> 8);
   *p++ = (uint8_t)(id);
+  // Error code.
   *p++ = (uint8_t)(code >> 24);
   *p++ = (uint8_t)(code >> 16);
   *p++ = (uint8_t)(code >> 8);
diff --git a/src/core/ext/transport/chttp2/transport/incoming_metadata.c b/src/core/ext/transport/chttp2/transport/incoming_metadata.c
index db21744..3e463a7 100644
--- a/src/core/ext/transport/chttp2/transport/incoming_metadata.c
+++ b/src/core/ext/transport/chttp2/transport/incoming_metadata.c
@@ -65,6 +65,7 @@
         gpr_realloc(buffer->elems, sizeof(*buffer->elems) * buffer->capacity);
   }
   buffer->elems[buffer->count++].md = elem;
+  buffer->size += GRPC_MDELEM_LENGTH(elem);
 }
 
 void grpc_chttp2_incoming_metadata_buffer_set_deadline(
diff --git a/src/core/ext/transport/chttp2/transport/incoming_metadata.h b/src/core/ext/transport/chttp2/transport/incoming_metadata.h
index 17ecf8e..df4343b 100644
--- a/src/core/ext/transport/chttp2/transport/incoming_metadata.h
+++ b/src/core/ext/transport/chttp2/transport/incoming_metadata.h
@@ -42,6 +42,7 @@
   size_t capacity;
   gpr_timespec deadline;
   int published;
+  size_t size;  // total size of metadata
 } grpc_chttp2_incoming_metadata_buffer;
 
 /** assumes everything initially zeroed */
diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h
index 8c4fa2d..5872fd8 100644
--- a/src/core/ext/transport/chttp2/transport/internal.h
+++ b/src/core/ext/transport/chttp2/transport/internal.h
@@ -422,23 +422,21 @@
   /** number of streams that are currently being read */
   gpr_refcount active_streams;
 
-  /** when the application requests writes be closed, the write_closed is
-      'queued'; when the close is flow controlled into the send path, we are
-      'sending' it; when the write has been performed it is 'sent' */
+  /** Is this stream closed for writing. */
   bool write_closed;
-  /** is this stream reading half-closed (boolean) */
+  /** Is this stream reading half-closed. */
   bool read_closed;
-  /** are all published incoming byte streams closed */
+  /** Are all published incoming byte streams closed. */
   bool all_incoming_byte_streams_finished;
-  /** is this stream in the stream map? (boolean) */
+  /** Is this stream in the stream map. */
   bool in_stream_map;
-  /** has this stream seen an error? if 1, then pending incoming frames
-      can be thrown away */
+  /** Has this stream seen an error.
+      If true, then pending incoming frames can be thrown away. */
   bool seen_error;
+  bool exceeded_metadata_size;
 
   bool published_initial_metadata;
   bool published_trailing_metadata;
-  bool faked_trailing_metadata;
 
   grpc_chttp2_incoming_metadata_buffer received_initial_metadata;
   grpc_chttp2_incoming_metadata_buffer received_trailing_metadata;
@@ -481,7 +479,8 @@
   /** which metadata did we get (on this parse) */
   uint8_t got_metadata_on_parse[2];
   /** should we raise the seen_error flag in transport_global */
-  uint8_t seen_error;
+  bool seen_error;
+  bool exceeded_metadata_size;
   /** window available for peer to send to us */
   int64_t incoming_window;
   /** parsing state for data frames */
diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c
index 2995066..4bd374b 100644
--- a/src/core/ext/transport/chttp2/transport/parsing.c
+++ b/src/core/ext/transport/chttp2/transport/parsing.c
@@ -45,6 +45,10 @@
 #include "src/core/lib/profiling/timers.h"
 #include "src/core/lib/transport/static_metadata.h"
 
+#define TRANSPORT_FROM_PARSING(tp)                                        \
+  ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \
+                                                   parsing)))
+
 static int init_frame_parser(grpc_exec_ctx *exec_ctx,
                              grpc_chttp2_transport_parsing *transport_parsing);
 static int init_header_frame_parser(
@@ -170,7 +174,9 @@
   while (grpc_chttp2_list_pop_parsing_seen_stream(
       transport_global, transport_parsing, &stream_global, &stream_parsing)) {
     if (stream_parsing->seen_error) {
-      stream_global->seen_error = 1;
+      stream_global->seen_error = true;
+      stream_global->exceeded_metadata_size =
+          stream_parsing->exceeded_metadata_size;
       grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
     }
 
@@ -612,7 +618,7 @@
 
   if (md->key == GRPC_MDSTR_GRPC_STATUS && md != GRPC_MDELEM_GRPC_STATUS_0) {
     /* TODO(ctiller): check for a status like " 0" */
-    stream_parsing->seen_error = 1;
+    stream_parsing->seen_error = true;
   }
 
   if (md->key == GRPC_MDSTR_GRPC_TIMEOUT) {
@@ -633,8 +639,26 @@
         gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), *cached_timeout));
     GRPC_MDELEM_UNREF(md);
   } else {
-    grpc_chttp2_incoming_metadata_buffer_add(
-        &stream_parsing->metadata_buffer[0], md);
+    const size_t new_size =
+        stream_parsing->metadata_buffer[0].size + GRPC_MDELEM_LENGTH(md);
+    grpc_chttp2_transport_global *transport_global =
+        &TRANSPORT_FROM_PARSING(transport_parsing)->global;
+    const size_t metadata_size_limit =
+        transport_global->settings[GRPC_LOCAL_SETTINGS]
+                                  [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
+    if (new_size > metadata_size_limit) {
+      if (!stream_parsing->exceeded_metadata_size) {
+        gpr_log(GPR_DEBUG,
+                "received initial metadata size exceeds limit (%lu vs. %lu)",
+                new_size, metadata_size_limit);
+        stream_parsing->seen_error = true;
+        stream_parsing->exceeded_metadata_size = true;
+      }
+      GRPC_MDELEM_UNREF(md);
+    } else {
+      grpc_chttp2_incoming_metadata_buffer_add(
+          &stream_parsing->metadata_buffer[0], md);
+    }
   }
 
   grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing);
@@ -658,11 +682,29 @@
 
   if (md->key == GRPC_MDSTR_GRPC_STATUS && md != GRPC_MDELEM_GRPC_STATUS_0) {
     /* TODO(ctiller): check for a status like " 0" */
-    stream_parsing->seen_error = 1;
+    stream_parsing->seen_error = true;
   }
 
-  grpc_chttp2_incoming_metadata_buffer_add(&stream_parsing->metadata_buffer[1],
-                                           md);
+  const size_t new_size =
+      stream_parsing->metadata_buffer[1].size + GRPC_MDELEM_LENGTH(md);
+  grpc_chttp2_transport_global *transport_global =
+      &TRANSPORT_FROM_PARSING(transport_parsing)->global;
+  const size_t metadata_size_limit =
+      transport_global->settings[GRPC_LOCAL_SETTINGS]
+                                [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
+  if (new_size > metadata_size_limit) {
+    if (!stream_parsing->exceeded_metadata_size) {
+      gpr_log(GPR_DEBUG,
+              "received trailing metadata size exceeds limit (%lu vs. %lu)",
+              new_size, metadata_size_limit);
+      stream_parsing->seen_error = true;
+      stream_parsing->exceeded_metadata_size = true;
+    }
+    GRPC_MDELEM_UNREF(md);
+  } else {
+    grpc_chttp2_incoming_metadata_buffer_add(
+        &stream_parsing->metadata_buffer[1], md);
+  }
 
   grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing);
 
diff --git a/src/core/ext/transport/cronet/client/secure/cronet_channel_create.c b/src/core/ext/transport/cronet/client/secure/cronet_channel_create.c
new file mode 100644
index 0000000..df1acdd
--- /dev/null
+++ b/src/core/ext/transport/cronet/client/secure/cronet_channel_create.c
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc/impl/codegen/port_platform.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "src/core/lib/surface/channel.h"
+#include "src/core/lib/transport/transport_impl.h"
+
+// Cronet transport object
+typedef struct cronet_transport {
+  grpc_transport base;  // must be first element in this structure
+  void *engine;
+  char *host;
+} cronet_transport;
+
+extern grpc_transport_vtable grpc_cronet_vtable;
+
+GRPCAPI grpc_channel *grpc_cronet_secure_channel_create(
+    void *engine, const char *target, const grpc_channel_args *args,
+    void *reserved) {
+  cronet_transport *ct = gpr_malloc(sizeof(cronet_transport));
+  ct->base.vtable = &grpc_cronet_vtable;
+  ct->engine = engine;
+  ct->host = gpr_malloc(strlen(target) + 1);
+  strcpy(ct->host, target);
+  gpr_log(GPR_DEBUG,
+          "grpc_create_cronet_transport: cronet_engine = %p, target=%s", engine,
+          ct->host);
+
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  return grpc_channel_create(&exec_ctx, target, args,
+                             GRPC_CLIENT_DIRECT_CHANNEL, (grpc_transport *)ct);
+}
diff --git a/src/core/ext/transport/cronet/transport/cronet_api_dummy.c b/src/core/ext/transport/cronet/transport/cronet_api_dummy.c
new file mode 100644
index 0000000..687026c
--- /dev/null
+++ b/src/core/ext/transport/cronet/transport/cronet_api_dummy.c
@@ -0,0 +1,85 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* This file has empty implementation of all the functions exposed by the cronet
+library, so we can build it in all environments */
+
+#include <stdbool.h>
+
+#include <grpc/support/log.h>
+
+#include "third_party/objective_c/Cronet/cronet_c_for_grpc.h"
+
+#ifdef GRPC_COMPILE_WITH_CRONET
+/* link with the real CRONET library in the build system */
+#else
+/* Dummy implementation of cronet API just to test for build-ability */
+cronet_bidirectional_stream* cronet_bidirectional_stream_create(
+    cronet_engine* engine, void* annotation,
+    cronet_bidirectional_stream_callback* callback) {
+  GPR_ASSERT(0);
+  return NULL;
+}
+
+int cronet_bidirectional_stream_destroy(cronet_bidirectional_stream* stream) {
+  GPR_ASSERT(0);
+  return 0;
+}
+
+int cronet_bidirectional_stream_start(
+    cronet_bidirectional_stream* stream, const char* url, int priority,
+    const char* method, const cronet_bidirectional_stream_header_array* headers,
+    bool end_of_stream) {
+  GPR_ASSERT(0);
+  return 0;
+}
+
+int cronet_bidirectional_stream_read(cronet_bidirectional_stream* stream,
+                                     char* buffer, int capacity) {
+  GPR_ASSERT(0);
+  return 0;
+}
+
+int cronet_bidirectional_stream_write(cronet_bidirectional_stream* stream,
+                                      const char* buffer, int count,
+                                      bool end_of_stream) {
+  GPR_ASSERT(0);
+  return 0;
+}
+
+int cronet_bidirectional_stream_cancel(cronet_bidirectional_stream* stream) {
+  GPR_ASSERT(0);
+  return 0;
+}
+
+#endif /* GRPC_COMPILE_WITH_CRONET */
diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.c b/src/core/ext/transport/cronet/transport/cronet_transport.c
new file mode 100644
index 0000000..5bb0851
--- /dev/null
+++ b/src/core/ext/transport/cronet/transport/cronet_transport.c
@@ -0,0 +1,640 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <string.h>
+
+#include <grpc/impl/codegen/port_platform.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/host_port.h>
+#include <grpc/support/log.h>
+#include <grpc/support/slice_buffer.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/useful.h>
+
+#include "src/core/ext/transport/chttp2/transport/incoming_metadata.h"
+#include "src/core/lib/iomgr/exec_ctx.h"
+#include "src/core/lib/support/string.h"
+#include "src/core/lib/surface/channel.h"
+#include "src/core/lib/transport/metadata_batch.h"
+#include "src/core/lib/transport/transport_impl.h"
+#include "third_party/objective_c/Cronet/cronet_c_for_grpc.h"
+
+#define GRPC_HEADER_SIZE_IN_BYTES 5
+
+// Global flag that gets set with GRPC_TRACE env variable
+int grpc_cronet_trace = 1;
+
+// Cronet transport object
+struct grpc_cronet_transport {
+  grpc_transport base; /* must be first element in this structure */
+  cronet_engine *engine;
+  char *host;
+};
+
+typedef struct grpc_cronet_transport grpc_cronet_transport;
+
+enum send_state {
+  CRONET_SEND_IDLE = 0,
+  CRONET_REQ_STARTED,
+  CRONET_SEND_HEADER,
+  CRONET_WRITE,
+  CRONET_WRITE_COMPLETED,
+};
+
+enum recv_state {
+  CRONET_RECV_IDLE = 0,
+  CRONET_RECV_READ_LENGTH,
+  CRONET_RECV_READ_DATA,
+  CRONET_RECV_CLOSED,
+};
+
+static const char *recv_state_name[] = {
+    "CRONET_RECV_IDLE", "CRONET_RECV_READ_LENGTH", "CRONET_RECV_READ_DATA,",
+    "CRONET_RECV_CLOSED"};
+
+// Enum that identifies calling function.
+enum e_caller {
+  PERFORM_STREAM_OP,
+  ON_READ_COMPLETE,
+  ON_RESPONSE_HEADERS_RECEIVED,
+  ON_RESPONSE_TRAILERS_RECEIVED
+};
+
+enum callback_id {
+  CB_SEND_INITIAL_METADATA = 0,
+  CB_SEND_MESSAGE,
+  CB_SEND_TRAILING_METADATA,
+  CB_RECV_MESSAGE,
+  CB_RECV_INITIAL_METADATA,
+  CB_RECV_TRAILING_METADATA,
+  CB_NUM_CALLBACKS
+};
+
+struct stream_obj {
+  // we store received bytes here as they trickle in.
+  gpr_slice_buffer write_slice_buffer;
+  cronet_bidirectional_stream *cbs;
+  gpr_slice slice;
+  gpr_slice_buffer read_slice_buffer;
+  struct grpc_slice_buffer_stream sbs;
+  char *read_buffer;
+  int remaining_read_bytes;
+  int total_read_bytes;
+
+  char *write_buffer;
+  size_t write_buffer_size;
+
+  // Hold the URL
+  char *url;
+
+  bool response_headers_received;
+  bool read_requested;
+  bool response_trailers_received;
+  bool read_closed;
+
+  // Recv message stuff
+  grpc_byte_buffer **recv_message;
+  // Initial metadata stuff
+  grpc_metadata_batch *recv_initial_metadata;
+  // Trailing metadata stuff
+  grpc_metadata_batch *recv_trailing_metadata;
+  grpc_chttp2_incoming_metadata_buffer imb;
+
+  // This mutex protects receive state machine execution
+  gpr_mu recv_mu;
+  // we can queue up up to 2 callbacks for each OP
+  grpc_closure *callback_list[CB_NUM_CALLBACKS][2];
+
+  // storage for header
+  cronet_bidirectional_stream_header *headers;
+  uint32_t num_headers;
+  cronet_bidirectional_stream_header_array header_array;
+  // state tracking
+  enum recv_state cronet_recv_state;
+  enum send_state cronet_send_state;
+};
+
+typedef struct stream_obj stream_obj;
+
+static void next_send_step(stream_obj *s);
+static void next_recv_step(stream_obj *s, enum e_caller caller);
+
+static void set_pollset_do_nothing(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
+                                   grpc_stream *gs, grpc_pollset *pollset) {}
+
+static void enqueue_callbacks(grpc_closure *callback_list[]) {
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  if (callback_list[0]) {
+    grpc_exec_ctx_enqueue(&exec_ctx, callback_list[0], true, NULL);
+    callback_list[0] = NULL;
+  }
+  if (callback_list[1]) {
+    grpc_exec_ctx_enqueue(&exec_ctx, callback_list[1], true, NULL);
+    callback_list[1] = NULL;
+  }
+  grpc_exec_ctx_finish(&exec_ctx);
+}
+
+static void on_canceled(cronet_bidirectional_stream *stream) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "on_canceled %p", stream);
+  }
+}
+
+static void on_failed(cronet_bidirectional_stream *stream, int net_error) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "on_failed %p, error = %d", stream, net_error);
+  }
+}
+
+static void on_succeeded(cronet_bidirectional_stream *stream) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "on_succeeded %p", stream);
+  }
+}
+
+static void on_response_trailers_received(
+    cronet_bidirectional_stream *stream,
+    const cronet_bidirectional_stream_header_array *trailers) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "R: on_response_trailers_received");
+  }
+  stream_obj *s = (stream_obj *)stream->annotation;
+
+  memset(&s->imb, 0, sizeof(s->imb));
+  grpc_chttp2_incoming_metadata_buffer_init(&s->imb);
+  unsigned int i = 0;
+  for (i = 0; i < trailers->count; i++) {
+    grpc_chttp2_incoming_metadata_buffer_add(
+        &s->imb, grpc_mdelem_from_metadata_strings(
+                     grpc_mdstr_from_string(trailers->headers[i].key),
+                     grpc_mdstr_from_string(trailers->headers[i].value)));
+  }
+  s->response_trailers_received = true;
+  next_recv_step(s, ON_RESPONSE_TRAILERS_RECEIVED);
+}
+
+static void on_write_completed(cronet_bidirectional_stream *stream,
+                               const char *data) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "W: on_write_completed");
+  }
+  stream_obj *s = (stream_obj *)stream->annotation;
+  enqueue_callbacks(s->callback_list[CB_SEND_MESSAGE]);
+  s->cronet_send_state = CRONET_WRITE_COMPLETED;
+  next_send_step(s);
+}
+
+static void process_recv_message(stream_obj *s, const uint8_t *recv_data) {
+  gpr_slice read_data_slice = gpr_slice_malloc((uint32_t)s->total_read_bytes);
+  uint8_t *dst_p = GPR_SLICE_START_PTR(read_data_slice);
+  memcpy(dst_p, recv_data, (size_t)s->total_read_bytes);
+  gpr_slice_buffer_add(&s->read_slice_buffer, read_data_slice);
+  grpc_slice_buffer_stream_init(&s->sbs, &s->read_slice_buffer, 0);
+  *s->recv_message = (grpc_byte_buffer *)&s->sbs;
+}
+
+static int parse_grpc_header(const uint8_t *data) {
+  const uint8_t *p = data + 1;
+  int length = 0;
+  length |= ((uint8_t)*p++) << 24;
+  length |= ((uint8_t)*p++) << 16;
+  length |= ((uint8_t)*p++) << 8;
+  length |= ((uint8_t)*p++);
+  return length;
+}
+
+static void on_read_completed(cronet_bidirectional_stream *stream, char *data,
+                              int count) {
+  stream_obj *s = (stream_obj *)stream->annotation;
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "R: on_read_completed count=%d, total=%d, remaining=%d",
+            count, s->total_read_bytes, s->remaining_read_bytes);
+  }
+  if (count > 0) {
+    GPR_ASSERT(s->recv_message);
+    s->remaining_read_bytes -= count;
+    next_recv_step(s, ON_READ_COMPLETE);
+  } else {
+    s->read_closed = true;
+    next_recv_step(s, ON_READ_COMPLETE);
+  }
+}
+
+static void on_response_headers_received(
+    cronet_bidirectional_stream *stream,
+    const cronet_bidirectional_stream_header_array *headers,
+    const char *negotiated_protocol) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "R: on_response_headers_received");
+  }
+  stream_obj *s = (stream_obj *)stream->annotation;
+  enqueue_callbacks(s->callback_list[CB_RECV_INITIAL_METADATA]);
+  s->response_headers_received = true;
+  next_recv_step(s, ON_RESPONSE_HEADERS_RECEIVED);
+}
+
+static void on_request_headers_sent(cronet_bidirectional_stream *stream) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "W: on_request_headers_sent");
+  }
+  stream_obj *s = (stream_obj *)stream->annotation;
+  enqueue_callbacks(s->callback_list[CB_SEND_INITIAL_METADATA]);
+  s->cronet_send_state = CRONET_SEND_HEADER;
+  next_send_step(s);
+}
+
+// Callback function pointers (invoked by cronet in response to events)
+static cronet_bidirectional_stream_callback callbacks = {
+    on_request_headers_sent,
+    on_response_headers_received,
+    on_read_completed,
+    on_write_completed,
+    on_response_trailers_received,
+    on_succeeded,
+    on_failed,
+    on_canceled};
+
+static void invoke_closing_callback(stream_obj *s) {
+  grpc_chttp2_incoming_metadata_buffer_publish(&s->imb,
+                                               s->recv_trailing_metadata);
+  if (s->callback_list[CB_RECV_TRAILING_METADATA]) {
+    enqueue_callbacks(s->callback_list[CB_RECV_TRAILING_METADATA]);
+  }
+}
+
+static void set_recv_state(stream_obj *s, enum recv_state state) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "next_state = %s", recv_state_name[state]);
+  }
+  s->cronet_recv_state = state;
+}
+
+// This is invoked from perform_stream_op, and all on_xxxx callbacks.
+static void next_recv_step(stream_obj *s, enum e_caller caller) {
+  gpr_mu_lock(&s->recv_mu);
+  switch (s->cronet_recv_state) {
+    case CRONET_RECV_IDLE:
+      if (grpc_cronet_trace) {
+        gpr_log(GPR_DEBUG, "cronet_recv_state = CRONET_RECV_IDLE");
+      }
+      if (caller == PERFORM_STREAM_OP ||
+          caller == ON_RESPONSE_HEADERS_RECEIVED) {
+        if (s->read_closed && s->response_trailers_received) {
+          invoke_closing_callback(s);
+          set_recv_state(s, CRONET_RECV_CLOSED);
+        } else if (s->response_headers_received == true &&
+                   s->read_requested == true) {
+          set_recv_state(s, CRONET_RECV_READ_LENGTH);
+          s->total_read_bytes = s->remaining_read_bytes =
+              GRPC_HEADER_SIZE_IN_BYTES;
+          GPR_ASSERT(s->read_buffer);
+          if (grpc_cronet_trace) {
+            gpr_log(GPR_DEBUG, "R: cronet_bidirectional_stream_read()");
+          }
+          cronet_bidirectional_stream_read(s->cbs, s->read_buffer,
+                                           s->remaining_read_bytes);
+        }
+      }
+      break;
+    case CRONET_RECV_READ_LENGTH:
+      if (grpc_cronet_trace) {
+        gpr_log(GPR_DEBUG, "cronet_recv_state = CRONET_RECV_READ_LENGTH");
+      }
+      if (caller == ON_READ_COMPLETE) {
+        if (s->read_closed) {
+          invoke_closing_callback(s);
+          enqueue_callbacks(s->callback_list[CB_RECV_MESSAGE]);
+          set_recv_state(s, CRONET_RECV_CLOSED);
+        } else {
+          GPR_ASSERT(s->remaining_read_bytes == 0);
+          set_recv_state(s, CRONET_RECV_READ_DATA);
+          s->total_read_bytes = s->remaining_read_bytes =
+              parse_grpc_header((const uint8_t *)s->read_buffer);
+          s->read_buffer =
+              gpr_realloc(s->read_buffer, (uint32_t)s->remaining_read_bytes);
+          GPR_ASSERT(s->read_buffer);
+          if (grpc_cronet_trace) {
+            gpr_log(GPR_DEBUG, "R: cronet_bidirectional_stream_read()");
+          }
+          cronet_bidirectional_stream_read(s->cbs, (char *)s->read_buffer,
+                                           s->remaining_read_bytes);
+        }
+      }
+      break;
+    case CRONET_RECV_READ_DATA:
+      if (grpc_cronet_trace) {
+        gpr_log(GPR_DEBUG, "cronet_recv_state = CRONET_RECV_READ_DATA");
+      }
+      if (caller == ON_READ_COMPLETE) {
+        if (s->remaining_read_bytes > 0) {
+          int offset = s->total_read_bytes - s->remaining_read_bytes;
+          GPR_ASSERT(s->read_buffer);
+          if (grpc_cronet_trace) {
+            gpr_log(GPR_DEBUG, "R: cronet_bidirectional_stream_read()");
+          }
+          cronet_bidirectional_stream_read(
+              s->cbs, (char *)s->read_buffer + offset, s->remaining_read_bytes);
+        } else {
+          gpr_slice_buffer_init(&s->read_slice_buffer);
+          uint8_t *p = (uint8_t *)s->read_buffer;
+          process_recv_message(s, p);
+          set_recv_state(s, CRONET_RECV_IDLE);
+          enqueue_callbacks(s->callback_list[CB_RECV_MESSAGE]);
+        }
+      }
+      break;
+    case CRONET_RECV_CLOSED:
+      break;
+    default:
+      GPR_ASSERT(0);  // Should not reach here
+      break;
+  }
+  gpr_mu_unlock(&s->recv_mu);
+}
+
+// This function takes the data from s->write_slice_buffer and assembles into
+// a contiguous byte stream with 5 byte gRPC header prepended.
+static void create_grpc_frame(stream_obj *s) {
+  gpr_slice slice = gpr_slice_buffer_take_first(&s->write_slice_buffer);
+  uint8_t *raw_data = GPR_SLICE_START_PTR(slice);
+  size_t length = GPR_SLICE_LENGTH(slice);
+  s->write_buffer_size = length + GRPC_HEADER_SIZE_IN_BYTES;
+  s->write_buffer = gpr_realloc(s->write_buffer, s->write_buffer_size);
+  uint8_t *p = (uint8_t *)s->write_buffer;
+  // Append 5 byte header
+  *p++ = 0;
+  *p++ = (uint8_t)(length >> 24);
+  *p++ = (uint8_t)(length >> 16);
+  *p++ = (uint8_t)(length >> 8);
+  *p++ = (uint8_t)(length);
+  // append actual data
+  memcpy(p, raw_data, length);
+}
+
+static void do_write(stream_obj *s) {
+  gpr_slice_buffer *sb = &s->write_slice_buffer;
+  GPR_ASSERT(sb->count <= 1);
+  if (sb->count > 0) {
+    create_grpc_frame(s);
+    if (grpc_cronet_trace) {
+      gpr_log(GPR_DEBUG, "W: cronet_bidirectional_stream_write");
+    }
+    cronet_bidirectional_stream_write(s->cbs, s->write_buffer,
+                                      (int)s->write_buffer_size, false);
+  }
+}
+
+//
+static void next_send_step(stream_obj *s) {
+  switch (s->cronet_send_state) {
+    case CRONET_SEND_IDLE:
+      GPR_ASSERT(
+          s->cbs);  // cronet_bidirectional_stream is not initialized yet.
+      s->cronet_send_state = CRONET_REQ_STARTED;
+      if (grpc_cronet_trace) {
+        gpr_log(GPR_DEBUG, "cronet_bidirectional_stream_start to %s", s->url);
+      }
+      cronet_bidirectional_stream_start(s->cbs, s->url, 0, "POST",
+                                        &s->header_array, false);
+      // we no longer need the memory that was allocated earlier.
+      gpr_free(s->header_array.headers);
+      break;
+    case CRONET_SEND_HEADER:
+      do_write(s);
+      s->cronet_send_state = CRONET_WRITE;
+      break;
+    case CRONET_WRITE_COMPLETED:
+      do_write(s);
+      break;
+    default:
+      GPR_ASSERT(0);
+      break;
+  }
+}
+
+static void convert_metadata_to_cronet_headers(grpc_linked_mdelem *head,
+                                               const char *host,
+                                               stream_obj *s) {
+  grpc_linked_mdelem *curr = head;
+  // Walk the linked list and get number of header fields
+  uint32_t num_headers_available = 0;
+  while (curr != NULL) {
+    curr = curr->next;
+    num_headers_available++;
+  }
+  // Allocate enough memory
+  s->headers = (cronet_bidirectional_stream_header *)gpr_malloc(
+      sizeof(cronet_bidirectional_stream_header) * num_headers_available);
+
+  // Walk the linked list again, this time copying the header fields.
+  // s->num_headers
+  // can be less than num_headers_available, as some headers are not used for
+  // cronet
+  curr = head;
+  s->num_headers = 0;
+  while (s->num_headers < num_headers_available) {
+    grpc_mdelem *mdelem = curr->md;
+    curr = curr->next;
+    const char *key = grpc_mdstr_as_c_string(mdelem->key);
+    const char *value = grpc_mdstr_as_c_string(mdelem->value);
+    if (strcmp(key, ":scheme") == 0 || strcmp(key, ":method") == 0 ||
+        strcmp(key, ":authority") == 0) {
+      // Cronet populates these fields on its own.
+      continue;
+    }
+    if (strcmp(key, ":path") == 0) {
+      // Create URL by appending :path value to the hostname
+      gpr_asprintf(&s->url, "https://%s%s", host, value);
+      if (grpc_cronet_trace) {
+        gpr_log(GPR_DEBUG, "extracted URL = %s", s->url);
+      }
+      continue;
+    }
+    s->headers[s->num_headers].key = key;
+    s->headers[s->num_headers].value = value;
+    s->num_headers++;
+    if (curr == NULL) {
+      break;
+    }
+  }
+}
+
+static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
+                              grpc_stream *gs, grpc_transport_stream_op *op) {
+  grpc_cronet_transport *ct = (grpc_cronet_transport *)gt;
+  GPR_ASSERT(ct->engine);
+  stream_obj *s = (stream_obj *)gs;
+  if (op->recv_trailing_metadata) {
+    if (grpc_cronet_trace) {
+      gpr_log(GPR_DEBUG,
+              "perform_stream_op - recv_trailing_metadata: on_complete=%p",
+              op->on_complete);
+    }
+    s->recv_trailing_metadata = op->recv_trailing_metadata;
+    GPR_ASSERT(!s->callback_list[CB_RECV_TRAILING_METADATA][0]);
+    s->callback_list[CB_RECV_TRAILING_METADATA][0] = op->on_complete;
+  }
+  if (op->recv_message) {
+    if (grpc_cronet_trace) {
+      gpr_log(GPR_DEBUG, "perform_stream_op - recv_message: on_complete=%p",
+              op->on_complete);
+    }
+    s->recv_message = (grpc_byte_buffer **)op->recv_message;
+    GPR_ASSERT(!s->callback_list[CB_RECV_MESSAGE][0]);
+    GPR_ASSERT(!s->callback_list[CB_RECV_MESSAGE][1]);
+    s->callback_list[CB_RECV_MESSAGE][0] = op->recv_message_ready;
+    s->callback_list[CB_RECV_MESSAGE][1] = op->on_complete;
+    s->read_requested = true;
+    next_recv_step(s, PERFORM_STREAM_OP);
+  }
+  if (op->recv_initial_metadata) {
+    if (grpc_cronet_trace) {
+      gpr_log(GPR_DEBUG, "perform_stream_op - recv_initial_metadata:=%p",
+              op->on_complete);
+    }
+    s->recv_initial_metadata = op->recv_initial_metadata;
+    GPR_ASSERT(!s->callback_list[CB_RECV_INITIAL_METADATA][0]);
+    GPR_ASSERT(!s->callback_list[CB_RECV_INITIAL_METADATA][1]);
+    s->callback_list[CB_RECV_INITIAL_METADATA][0] =
+        op->recv_initial_metadata_ready;
+    s->callback_list[CB_RECV_INITIAL_METADATA][1] = op->on_complete;
+  }
+  if (op->send_initial_metadata) {
+    if (grpc_cronet_trace) {
+      gpr_log(GPR_DEBUG,
+              "perform_stream_op - send_initial_metadata: on_complete=%p",
+              op->on_complete);
+    }
+    s->num_headers = 0;
+    convert_metadata_to_cronet_headers(op->send_initial_metadata->list.head,
+                                       ct->host, s);
+    s->header_array.count = s->num_headers;
+    s->header_array.capacity = s->num_headers;
+    s->header_array.headers = s->headers;
+    GPR_ASSERT(!s->callback_list[CB_SEND_INITIAL_METADATA][0]);
+    s->callback_list[CB_SEND_INITIAL_METADATA][0] = op->on_complete;
+  }
+  if (op->send_message) {
+    if (grpc_cronet_trace) {
+      gpr_log(GPR_DEBUG, "perform_stream_op - send_message: on_complete=%p",
+              op->on_complete);
+    }
+    grpc_byte_stream_next(exec_ctx, op->send_message, &s->slice,
+                          op->send_message->length, NULL);
+    // Check that compression flag is not ON. We don't support compression yet.
+    // TODO (makdharma): add compression support
+    GPR_ASSERT(op->send_message->flags == 0);
+    gpr_slice_buffer_add(&s->write_slice_buffer, s->slice);
+    if (s->cbs == NULL) {
+      if (grpc_cronet_trace) {
+        gpr_log(GPR_DEBUG, "cronet_bidirectional_stream_create");
+      }
+      s->cbs = cronet_bidirectional_stream_create(ct->engine, s, &callbacks);
+      GPR_ASSERT(s->cbs);
+      s->read_closed = false;
+      s->response_trailers_received = false;
+      s->response_headers_received = false;
+      s->cronet_send_state = CRONET_SEND_IDLE;
+      s->cronet_recv_state = CRONET_RECV_IDLE;
+    }
+    GPR_ASSERT(!s->callback_list[CB_SEND_MESSAGE][0]);
+    s->callback_list[CB_SEND_MESSAGE][0] = op->on_complete;
+    next_send_step(s);
+  }
+  if (op->send_trailing_metadata) {
+    if (grpc_cronet_trace) {
+      gpr_log(GPR_DEBUG,
+              "perform_stream_op - send_trailing_metadata: on_complete=%p",
+              op->on_complete);
+    }
+    GPR_ASSERT(!s->callback_list[CB_SEND_TRAILING_METADATA][0]);
+    s->callback_list[CB_SEND_TRAILING_METADATA][0] = op->on_complete;
+    if (s->cbs) {
+      // Send an "empty" write to the far end to signal that we're done.
+      // This will induce the server to send down trailers.
+      if (grpc_cronet_trace) {
+        gpr_log(GPR_DEBUG, "W: cronet_bidirectional_stream_write");
+      }
+      cronet_bidirectional_stream_write(s->cbs, "abc", 0, true);
+    } else {
+      // We never created a stream. This was probably an empty request.
+      invoke_closing_callback(s);
+    }
+  }
+}
+
+static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
+                       grpc_stream *gs, grpc_stream_refcount *refcount,
+                       const void *server_data) {
+  stream_obj *s = (stream_obj *)gs;
+  memset(s->callback_list, 0, sizeof(s->callback_list));
+  s->cbs = NULL;
+  gpr_mu_init(&s->recv_mu);
+  s->read_buffer = gpr_malloc(GRPC_HEADER_SIZE_IN_BYTES);
+  s->write_buffer = gpr_malloc(GRPC_HEADER_SIZE_IN_BYTES);
+  gpr_slice_buffer_init(&s->write_slice_buffer);
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "cronet_transport - init_stream");
+  }
+  return 0;
+}
+
+static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
+                           grpc_stream *gs, void *and_free_memory) {
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "Destroy stream");
+  }
+  stream_obj *s = (stream_obj *)gs;
+  s->cbs = NULL;
+  gpr_free(s->read_buffer);
+  gpr_free(s->write_buffer);
+  gpr_free(s->url);
+  gpr_mu_destroy(&s->recv_mu);
+  if (and_free_memory) {
+    gpr_free(and_free_memory);
+  }
+}
+
+static void destroy_transport(grpc_exec_ctx *exec_ctx, grpc_transport *gt) {
+  grpc_cronet_transport *ct = (grpc_cronet_transport *)gt;
+  gpr_free(ct->host);
+  if (grpc_cronet_trace) {
+    gpr_log(GPR_DEBUG, "Destroy transport");
+  }
+}
+
+const grpc_transport_vtable grpc_cronet_vtable = {
+    sizeof(stream_obj),     "cronet_http",     init_stream,
+    set_pollset_do_nothing, perform_stream_op, NULL,
+    destroy_stream,         destroy_transport, NULL};
diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c
index 28d2d78..893cf07 100644
--- a/src/core/lib/channel/channel_args.c
+++ b/src/core/lib/channel/channel_args.c
@@ -170,7 +170,7 @@
   if (a == NULL) return 0;
   for (i = 0; i < a->num_args; ++i) {
     if (a->args[i].type == GRPC_ARG_INTEGER &&
-        !strcmp(GRPC_COMPRESSION_ALGORITHM_ARG, a->args[i].key)) {
+        !strcmp(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, a->args[i].key)) {
       return (grpc_compression_algorithm)a->args[i].value.integer;
       break;
     }
@@ -182,7 +182,7 @@
     grpc_channel_args *a, grpc_compression_algorithm algorithm) {
   grpc_arg tmp;
   tmp.type = GRPC_ARG_INTEGER;
-  tmp.key = GRPC_COMPRESSION_ALGORITHM_ARG;
+  tmp.key = GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM;
   tmp.value.integer = algorithm;
   return grpc_channel_args_copy_and_add(a, &tmp, 1);
 }
@@ -196,7 +196,8 @@
     size_t i;
     for (i = 0; i < a->num_args; ++i) {
       if (a->args[i].type == GRPC_ARG_INTEGER &&
-          !strcmp(GRPC_COMPRESSION_ALGORITHM_STATE_ARG, a->args[i].key)) {
+          !strcmp(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET,
+                  a->args[i].key)) {
         *states_arg = &a->args[i].value.integer;
         return 1; /* GPR_TRUE */
       }
@@ -222,7 +223,7 @@
     /* create a new arg */
     grpc_arg tmp;
     tmp.type = GRPC_ARG_INTEGER;
-    tmp.key = GRPC_COMPRESSION_ALGORITHM_STATE_ARG;
+    tmp.key = GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET;
     /* all enabled by default */
     tmp.value.integer = (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1;
     if (state != 0) {
diff --git a/src/core/lib/http/parser.c b/src/core/lib/http/parser.c
index a7efb5e..09b2ed4 100644
--- a/src/core/lib/http/parser.c
+++ b/src/core/lib/http/parser.c
@@ -161,8 +161,9 @@
     cur++;
   }
   if (cur == end) {
-    if (grpc_http1_trace)
+    if (grpc_http1_trace) {
       gpr_log(GPR_ERROR, "Didn't find ':' in header string");
+    }
     goto error;
   }
   GPR_ASSERT(cur >= beg);
diff --git a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c
index 3c8127e..aeb6e28 100644
--- a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c
+++ b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c
@@ -790,7 +790,6 @@
 static void pollset_global_init(void) {
   gpr_tls_init(&g_current_thread_poller);
   gpr_tls_init(&g_current_thread_worker);
-  grpc_wakeup_fd_global_init();
   grpc_wakeup_fd_init(&grpc_global_wakeup_fd);
 }
 
@@ -798,7 +797,6 @@
   grpc_wakeup_fd_destroy(&grpc_global_wakeup_fd);
   gpr_tls_destroy(&g_current_thread_poller);
   gpr_tls_destroy(&g_current_thread_worker);
-  grpc_wakeup_fd_global_destroy();
 }
 
 static void kick_poller(void) { grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); }
diff --git a/src/core/lib/iomgr/ev_poll_posix.c b/src/core/lib/iomgr/ev_poll_posix.c
new file mode 100644
index 0000000..e91ae40
--- /dev/null
+++ b/src/core/lib/iomgr/ev_poll_posix.c
@@ -0,0 +1,1212 @@
+/*
+ *
+ * Copyright 2015-2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc/support/port_platform.h>
+
+#ifdef GPR_POSIX_SOCKET
+
+#include "src/core/lib/iomgr/ev_poll_posix.h"
+
+#include <assert.h>
+#include <errno.h>
+#include <poll.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/tls.h>
+#include <grpc/support/useful.h>
+
+#include "src/core/lib/iomgr/iomgr_internal.h"
+#include "src/core/lib/iomgr/wakeup_fd_posix.h"
+#include "src/core/lib/profiling/timers.h"
+#include "src/core/lib/support/block_annotate.h"
+
+/*******************************************************************************
+ * FD declarations
+ */
+
+typedef struct grpc_fd_watcher {
+  struct grpc_fd_watcher *next;
+  struct grpc_fd_watcher *prev;
+  grpc_pollset *pollset;
+  grpc_pollset_worker *worker;
+  grpc_fd *fd;
+} grpc_fd_watcher;
+
+struct grpc_fd {
+  int fd;
+  /* refst format:
+     bit0:   1=active/0=orphaned
+     bit1-n: refcount
+     meaning that mostly we ref by two to avoid altering the orphaned bit,
+     and just unref by 1 when we're ready to flag the object as orphaned */
+  gpr_atm refst;
+
+  gpr_mu mu;
+  int shutdown;
+  int closed;
+  int released;
+
+  /* The watcher list.
+
+     The following watcher related fields are protected by watcher_mu.
+
+     An fd_watcher is an ephemeral object created when an fd wants to
+     begin polling, and destroyed after the poll.
+
+     It denotes the fd's interest in whether to read poll or write poll
+     or both or neither on this fd.
+
+     If a watcher is asked to poll for reads or writes, the read_watcher
+     or write_watcher fields are set respectively. A watcher may be asked
+     to poll for both, in which case both fields will be set.
+
+     read_watcher and write_watcher may be NULL if no watcher has been
+     asked to poll for reads or writes.
+
+     If an fd_watcher is not asked to poll for reads or writes, it's added
+     to a linked list of inactive watchers, rooted at inactive_watcher_root.
+     If at a later time there becomes need of a poller to poll, one of
+     the inactive pollers may be kicked out of their poll loops to take
+     that responsibility. */
+  grpc_fd_watcher inactive_watcher_root;
+  grpc_fd_watcher *read_watcher;
+  grpc_fd_watcher *write_watcher;
+
+  grpc_closure *read_closure;
+  grpc_closure *write_closure;
+
+  grpc_closure *on_done_closure;
+
+  grpc_iomgr_object iomgr_object;
+};
+
+/* Begin polling on an fd.
+   Registers that the given pollset is interested in this fd - so that if read
+   or writability interest changes, the pollset can be kicked to pick up that
+   new interest.
+   Return value is:
+     (fd_needs_read? read_mask : 0) | (fd_needs_write? write_mask : 0)
+   i.e. a combination of read_mask and write_mask determined by the fd's current
+   interest in said events.
+   Polling strategies that do not need to alter their behavior depending on the
+   fd's current interest (such as epoll) do not need to call this function.
+   MUST NOT be called with a pollset lock taken */
+static uint32_t fd_begin_poll(grpc_fd *fd, grpc_pollset *pollset,
+                              grpc_pollset_worker *worker, uint32_t read_mask,
+                              uint32_t write_mask, grpc_fd_watcher *rec);
+/* Complete polling previously started with fd_begin_poll
+   MUST NOT be called with a pollset lock taken
+   if got_read or got_write are 1, also does the become_{readable,writable} as
+   appropriate. */
+static void fd_end_poll(grpc_exec_ctx *exec_ctx, grpc_fd_watcher *rec,
+                        int got_read, int got_write);
+
+/* Return 1 if this fd is orphaned, 0 otherwise */
+static bool fd_is_orphaned(grpc_fd *fd);
+
+/* Reference counting for fds */
+/*#define GRPC_FD_REF_COUNT_DEBUG*/
+#ifdef GRPC_FD_REF_COUNT_DEBUG
+static void fd_ref(grpc_fd *fd, const char *reason, const char *file, int line);
+static void fd_unref(grpc_fd *fd, const char *reason, const char *file,
+                     int line);
+#define GRPC_FD_REF(fd, reason) fd_ref(fd, reason, __FILE__, __LINE__)
+#define GRPC_FD_UNREF(fd, reason) fd_unref(fd, reason, __FILE__, __LINE__)
+#else
+static void fd_ref(grpc_fd *fd);
+static void fd_unref(grpc_fd *fd);
+#define GRPC_FD_REF(fd, reason) fd_ref(fd)
+#define GRPC_FD_UNREF(fd, reason) fd_unref(fd)
+#endif
+
+#define CLOSURE_NOT_READY ((grpc_closure *)0)
+#define CLOSURE_READY ((grpc_closure *)1)
+
+/*******************************************************************************
+ * pollset declarations
+ */
+
+typedef struct grpc_cached_wakeup_fd {
+  grpc_wakeup_fd fd;
+  struct grpc_cached_wakeup_fd *next;
+} grpc_cached_wakeup_fd;
+
+struct grpc_pollset_worker {
+  grpc_cached_wakeup_fd *wakeup_fd;
+  int reevaluate_polling_on_wakeup;
+  int kicked_specifically;
+  struct grpc_pollset_worker *next;
+  struct grpc_pollset_worker *prev;
+};
+
+struct grpc_pollset {
+  gpr_mu mu;
+  grpc_pollset_worker root_worker;
+  int in_flight_cbs;
+  int shutting_down;
+  int called_shutdown;
+  int kicked_without_pollers;
+  grpc_closure *shutdown_done;
+  grpc_closure_list idle_jobs;
+  /* all polled fds */
+  size_t fd_count;
+  size_t fd_capacity;
+  grpc_fd **fds;
+  /* fds that have been removed from the pollset explicitly */
+  size_t del_count;
+  size_t del_capacity;
+  grpc_fd **dels;
+  /* Local cache of eventfds for workers */
+  grpc_cached_wakeup_fd *local_wakeup_cache;
+};
+
+/* Add an fd to a pollset */
+static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
+                           struct grpc_fd *fd);
+
+static void pollset_set_add_fd(grpc_exec_ctx *exec_ctx,
+                               grpc_pollset_set *pollset_set, grpc_fd *fd);
+
+/* Convert a timespec to milliseconds:
+   - very small or negative poll times are clamped to zero to do a
+     non-blocking poll (which becomes spin polling)
+   - other small values are rounded up to one millisecond
+   - longer than a millisecond polls are rounded up to the next nearest
+     millisecond to avoid spinning
+   - infinite timeouts are converted to -1 */
+static int poll_deadline_to_millis_timeout(gpr_timespec deadline,
+                                           gpr_timespec now);
+
+/* Allow kick to wakeup the currently polling worker */
+#define GRPC_POLLSET_CAN_KICK_SELF 1
+/* Force the wakee to repoll when awoken */
+#define GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP 2
+/* As per pollset_kick, with an extended set of flags (defined above)
+   -- mostly for fd_posix's use. */
+static void pollset_kick_ext(grpc_pollset *p,
+                             grpc_pollset_worker *specific_worker,
+                             uint32_t flags);
+
+/* Return 1 if the pollset has active threads in pollset_work (pollset must
+ * be locked) */
+static int pollset_has_workers(grpc_pollset *pollset);
+
+/*******************************************************************************
+ * pollset_set definitions
+ */
+
+struct grpc_pollset_set {
+  gpr_mu mu;
+
+  size_t pollset_count;
+  size_t pollset_capacity;
+  grpc_pollset **pollsets;
+
+  size_t pollset_set_count;
+  size_t pollset_set_capacity;
+  struct grpc_pollset_set **pollset_sets;
+
+  size_t fd_count;
+  size_t fd_capacity;
+  grpc_fd **fds;
+};
+
+/*******************************************************************************
+ * fd_posix.c
+ */
+
+#ifdef GRPC_FD_REF_COUNT_DEBUG
+#define REF_BY(fd, n, reason) ref_by(fd, n, reason, __FILE__, __LINE__)
+#define UNREF_BY(fd, n, reason) unref_by(fd, n, reason, __FILE__, __LINE__)
+static void ref_by(grpc_fd *fd, int n, const char *reason, const char *file,
+                   int line) {
+  gpr_log(GPR_DEBUG, "FD %d %p   ref %d %d -> %d [%s; %s:%d]", fd->fd, fd, n,
+          gpr_atm_no_barrier_load(&fd->refst),
+          gpr_atm_no_barrier_load(&fd->refst) + n, reason, file, line);
+#else
+#define REF_BY(fd, n, reason) ref_by(fd, n)
+#define UNREF_BY(fd, n, reason) unref_by(fd, n)
+static void ref_by(grpc_fd *fd, int n) {
+#endif
+  GPR_ASSERT(gpr_atm_no_barrier_fetch_add(&fd->refst, n) > 0);
+}
+
+#ifdef GRPC_FD_REF_COUNT_DEBUG
+static void unref_by(grpc_fd *fd, int n, const char *reason, const char *file,
+                     int line) {
+  gpr_atm old;
+  gpr_log(GPR_DEBUG, "FD %d %p unref %d %d -> %d [%s; %s:%d]", fd->fd, fd, n,
+          gpr_atm_no_barrier_load(&fd->refst),
+          gpr_atm_no_barrier_load(&fd->refst) - n, reason, file, line);
+#else
+static void unref_by(grpc_fd *fd, int n) {
+  gpr_atm old;
+#endif
+  old = gpr_atm_full_fetch_add(&fd->refst, -n);
+  if (old == n) {
+    gpr_mu_destroy(&fd->mu);
+    grpc_iomgr_unregister_object(&fd->iomgr_object);
+    gpr_free(fd);
+  } else {
+    GPR_ASSERT(old > n);
+  }
+}
+
+static grpc_fd *fd_create(int fd, const char *name) {
+  grpc_fd *r = gpr_malloc(sizeof(*r));
+  gpr_mu_init(&r->mu);
+  gpr_atm_rel_store(&r->refst, 1);
+  r->shutdown = 0;
+  r->read_closure = CLOSURE_NOT_READY;
+  r->write_closure = CLOSURE_NOT_READY;
+  r->fd = fd;
+  r->inactive_watcher_root.next = r->inactive_watcher_root.prev =
+      &r->inactive_watcher_root;
+  r->read_watcher = r->write_watcher = NULL;
+  r->on_done_closure = NULL;
+  r->closed = 0;
+  r->released = 0;
+
+  char *name2;
+  gpr_asprintf(&name2, "%s fd=%d", name, fd);
+  grpc_iomgr_register_object(&r->iomgr_object, name2);
+  gpr_free(name2);
+#ifdef GRPC_FD_REF_COUNT_DEBUG
+  gpr_log(GPR_DEBUG, "FD %d %p create %s", fd, r, name);
+#endif
+  return r;
+}
+
+static bool fd_is_orphaned(grpc_fd *fd) {
+  return (gpr_atm_acq_load(&fd->refst) & 1) == 0;
+}
+
+static void pollset_kick_locked(grpc_fd_watcher *watcher) {
+  gpr_mu_lock(&watcher->pollset->mu);
+  GPR_ASSERT(watcher->worker);
+  pollset_kick_ext(watcher->pollset, watcher->worker,
+                   GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP);
+  gpr_mu_unlock(&watcher->pollset->mu);
+}
+
+static void maybe_wake_one_watcher_locked(grpc_fd *fd) {
+  if (fd->inactive_watcher_root.next != &fd->inactive_watcher_root) {
+    pollset_kick_locked(fd->inactive_watcher_root.next);
+  } else if (fd->read_watcher) {
+    pollset_kick_locked(fd->read_watcher);
+  } else if (fd->write_watcher) {
+    pollset_kick_locked(fd->write_watcher);
+  }
+}
+
+static void wake_all_watchers_locked(grpc_fd *fd) {
+  grpc_fd_watcher *watcher;
+  for (watcher = fd->inactive_watcher_root.next;
+       watcher != &fd->inactive_watcher_root; watcher = watcher->next) {
+    pollset_kick_locked(watcher);
+  }
+  if (fd->read_watcher) {
+    pollset_kick_locked(fd->read_watcher);
+  }
+  if (fd->write_watcher && fd->write_watcher != fd->read_watcher) {
+    pollset_kick_locked(fd->write_watcher);
+  }
+}
+
+static int has_watchers(grpc_fd *fd) {
+  return fd->read_watcher != NULL || fd->write_watcher != NULL ||
+         fd->inactive_watcher_root.next != &fd->inactive_watcher_root;
+}
+
+static void close_fd_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd) {
+  fd->closed = 1;
+  if (!fd->released) {
+    close(fd->fd);
+  }
+  grpc_exec_ctx_enqueue(exec_ctx, fd->on_done_closure, true, NULL);
+}
+
+static int fd_wrapped_fd(grpc_fd *fd) {
+  if (fd->released || fd->closed) {
+    return -1;
+  } else {
+    return fd->fd;
+  }
+}
+
+static void fd_orphan(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
+                      grpc_closure *on_done, int *release_fd,
+                      const char *reason) {
+  fd->on_done_closure = on_done;
+  fd->released = release_fd != NULL;
+  if (!fd->released) {
+    shutdown(fd->fd, SHUT_RDWR);
+  } else {
+    *release_fd = fd->fd;
+  }
+  gpr_mu_lock(&fd->mu);
+  REF_BY(fd, 1, reason); /* remove active status, but keep referenced */
+  if (!has_watchers(fd)) {
+    close_fd_locked(exec_ctx, fd);
+  } else {
+    wake_all_watchers_locked(fd);
+  }
+  gpr_mu_unlock(&fd->mu);
+  UNREF_BY(fd, 2, reason); /* drop the reference */
+}
+
+/* increment refcount by two to avoid changing the orphan bit */
+#ifdef GRPC_FD_REF_COUNT_DEBUG
+static void fd_ref(grpc_fd *fd, const char *reason, const char *file,
+                   int line) {
+  ref_by(fd, 2, reason, file, line);
+}
+
+static void fd_unref(grpc_fd *fd, const char *reason, const char *file,
+                     int line) {
+  unref_by(fd, 2, reason, file, line);
+}
+#else
+static void fd_ref(grpc_fd *fd) { ref_by(fd, 2); }
+
+static void fd_unref(grpc_fd *fd) { unref_by(fd, 2); }
+#endif
+
+static void notify_on_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
+                             grpc_closure **st, grpc_closure *closure) {
+  if (*st == CLOSURE_NOT_READY) {
+    /* not ready ==> switch to a waiting state by setting the closure */
+    *st = closure;
+  } else if (*st == CLOSURE_READY) {
+    /* already ready ==> queue the closure to run immediately */
+    *st = CLOSURE_NOT_READY;
+    grpc_exec_ctx_enqueue(exec_ctx, closure, !fd->shutdown, NULL);
+    maybe_wake_one_watcher_locked(fd);
+  } else {
+    /* upcallptr was set to a different closure.  This is an error! */
+    gpr_log(GPR_ERROR,
+            "User called a notify_on function with a previous callback still "
+            "pending");
+    abort();
+  }
+}
+
+/* returns 1 if state becomes not ready */
+static int set_ready_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
+                            grpc_closure **st) {
+  if (*st == CLOSURE_READY) {
+    /* duplicate ready ==> ignore */
+    return 0;
+  } else if (*st == CLOSURE_NOT_READY) {
+    /* not ready, and not waiting ==> flag ready */
+    *st = CLOSURE_READY;
+    return 0;
+  } else {
+    /* waiting ==> queue closure */
+    grpc_exec_ctx_enqueue(exec_ctx, *st, !fd->shutdown, NULL);
+    *st = CLOSURE_NOT_READY;
+    return 1;
+  }
+}
+
+static void fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd) {
+  gpr_mu_lock(&fd->mu);
+  GPR_ASSERT(!fd->shutdown);
+  fd->shutdown = 1;
+  set_ready_locked(exec_ctx, fd, &fd->read_closure);
+  set_ready_locked(exec_ctx, fd, &fd->write_closure);
+  gpr_mu_unlock(&fd->mu);
+}
+
+static void fd_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
+                              grpc_closure *closure) {
+  gpr_mu_lock(&fd->mu);
+  notify_on_locked(exec_ctx, fd, &fd->read_closure, closure);
+  gpr_mu_unlock(&fd->mu);
+}
+
+static void fd_notify_on_write(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
+                               grpc_closure *closure) {
+  gpr_mu_lock(&fd->mu);
+  notify_on_locked(exec_ctx, fd, &fd->write_closure, closure);
+  gpr_mu_unlock(&fd->mu);
+}
+
+static uint32_t fd_begin_poll(grpc_fd *fd, grpc_pollset *pollset,
+                              grpc_pollset_worker *worker, uint32_t read_mask,
+                              uint32_t write_mask, grpc_fd_watcher *watcher) {
+  uint32_t mask = 0;
+  grpc_closure *cur;
+  int requested;
+  /* keep track of pollers that have requested our events, in case they change
+   */
+  GRPC_FD_REF(fd, "poll");
+
+  gpr_mu_lock(&fd->mu);
+
+  /* if we are shutdown, then don't add to the watcher set */
+  if (fd->shutdown) {
+    watcher->fd = NULL;
+    watcher->pollset = NULL;
+    watcher->worker = NULL;
+    gpr_mu_unlock(&fd->mu);
+    GRPC_FD_UNREF(fd, "poll");
+    return 0;
+  }
+
+  /* if there is nobody polling for read, but we need to, then start doing so */
+  cur = fd->read_closure;
+  requested = cur != CLOSURE_READY;
+  if (read_mask && fd->read_watcher == NULL && requested) {
+    fd->read_watcher = watcher;
+    mask |= read_mask;
+  }
+  /* if there is nobody polling for write, but we need to, then start doing so
+   */
+  cur = fd->write_closure;
+  requested = cur != CLOSURE_READY;
+  if (write_mask && fd->write_watcher == NULL && requested) {
+    fd->write_watcher = watcher;
+    mask |= write_mask;
+  }
+  /* if not polling, remember this watcher in case we need someone to later */
+  if (mask == 0 && worker != NULL) {
+    watcher->next = &fd->inactive_watcher_root;
+    watcher->prev = watcher->next->prev;
+    watcher->next->prev = watcher->prev->next = watcher;
+  }
+  watcher->pollset = pollset;
+  watcher->worker = worker;
+  watcher->fd = fd;
+  gpr_mu_unlock(&fd->mu);
+
+  return mask;
+}
+
+static void fd_end_poll(grpc_exec_ctx *exec_ctx, grpc_fd_watcher *watcher,
+                        int got_read, int got_write) {
+  int was_polling = 0;
+  int kick = 0;
+  grpc_fd *fd = watcher->fd;
+
+  if (fd == NULL) {
+    return;
+  }
+
+  gpr_mu_lock(&fd->mu);
+
+  if (watcher == fd->read_watcher) {
+    /* remove read watcher, kick if we still need a read */
+    was_polling = 1;
+    if (!got_read) {
+      kick = 1;
+    }
+    fd->read_watcher = NULL;
+  }
+  if (watcher == fd->write_watcher) {
+    /* remove write watcher, kick if we still need a write */
+    was_polling = 1;
+    if (!got_write) {
+      kick = 1;
+    }
+    fd->write_watcher = NULL;
+  }
+  if (!was_polling && watcher->worker != NULL) {
+    /* remove from inactive list */
+    watcher->next->prev = watcher->prev;
+    watcher->prev->next = watcher->next;
+  }
+  if (got_read) {
+    if (set_ready_locked(exec_ctx, fd, &fd->read_closure)) {
+      kick = 1;
+    }
+  }
+  if (got_write) {
+    if (set_ready_locked(exec_ctx, fd, &fd->write_closure)) {
+      kick = 1;
+    }
+  }
+  if (kick) {
+    maybe_wake_one_watcher_locked(fd);
+  }
+  if (fd_is_orphaned(fd) && !has_watchers(fd) && !fd->closed) {
+    close_fd_locked(exec_ctx, fd);
+  }
+  gpr_mu_unlock(&fd->mu);
+
+  GRPC_FD_UNREF(fd, "poll");
+}
+
+/*******************************************************************************
+ * pollset_posix.c
+ */
+
+GPR_TLS_DECL(g_current_thread_poller);
+GPR_TLS_DECL(g_current_thread_worker);
+
+static void remove_worker(grpc_pollset *p, grpc_pollset_worker *worker) {
+  worker->prev->next = worker->next;
+  worker->next->prev = worker->prev;
+}
+
+static int pollset_has_workers(grpc_pollset *p) {
+  return p->root_worker.next != &p->root_worker;
+}
+
+static grpc_pollset_worker *pop_front_worker(grpc_pollset *p) {
+  if (pollset_has_workers(p)) {
+    grpc_pollset_worker *w = p->root_worker.next;
+    remove_worker(p, w);
+    return w;
+  } else {
+    return NULL;
+  }
+}
+
+static void push_back_worker(grpc_pollset *p, grpc_pollset_worker *worker) {
+  worker->next = &p->root_worker;
+  worker->prev = worker->next->prev;
+  worker->prev->next = worker->next->prev = worker;
+}
+
+static void push_front_worker(grpc_pollset *p, grpc_pollset_worker *worker) {
+  worker->prev = &p->root_worker;
+  worker->next = worker->prev->next;
+  worker->prev->next = worker->next->prev = worker;
+}
+
+static void pollset_kick_ext(grpc_pollset *p,
+                             grpc_pollset_worker *specific_worker,
+                             uint32_t flags) {
+  GPR_TIMER_BEGIN("pollset_kick_ext", 0);
+
+  /* pollset->mu already held */
+  if (specific_worker != NULL) {
+    if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) {
+      GPR_TIMER_BEGIN("pollset_kick_ext.broadcast", 0);
+      GPR_ASSERT((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) == 0);
+      for (specific_worker = p->root_worker.next;
+           specific_worker != &p->root_worker;
+           specific_worker = specific_worker->next) {
+        grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd);
+      }
+      p->kicked_without_pollers = 1;
+      GPR_TIMER_END("pollset_kick_ext.broadcast", 0);
+    } else if (gpr_tls_get(&g_current_thread_worker) !=
+               (intptr_t)specific_worker) {
+      GPR_TIMER_MARK("different_thread_worker", 0);
+      if ((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) != 0) {
+        specific_worker->reevaluate_polling_on_wakeup = 1;
+      }
+      specific_worker->kicked_specifically = 1;
+      grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd);
+    } else if ((flags & GRPC_POLLSET_CAN_KICK_SELF) != 0) {
+      GPR_TIMER_MARK("kick_yoself", 0);
+      if ((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) != 0) {
+        specific_worker->reevaluate_polling_on_wakeup = 1;
+      }
+      specific_worker->kicked_specifically = 1;
+      grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd);
+    }
+  } else if (gpr_tls_get(&g_current_thread_poller) != (intptr_t)p) {
+    GPR_ASSERT((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) == 0);
+    GPR_TIMER_MARK("kick_anonymous", 0);
+    specific_worker = pop_front_worker(p);
+    if (specific_worker != NULL) {
+      if (gpr_tls_get(&g_current_thread_worker) == (intptr_t)specific_worker) {
+        GPR_TIMER_MARK("kick_anonymous_not_self", 0);
+        push_back_worker(p, specific_worker);
+        specific_worker = pop_front_worker(p);
+        if ((flags & GRPC_POLLSET_CAN_KICK_SELF) == 0 &&
+            gpr_tls_get(&g_current_thread_worker) ==
+                (intptr_t)specific_worker) {
+          push_back_worker(p, specific_worker);
+          specific_worker = NULL;
+        }
+      }
+      if (specific_worker != NULL) {
+        GPR_TIMER_MARK("finally_kick", 0);
+        push_back_worker(p, specific_worker);
+        grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd);
+      }
+    } else {
+      GPR_TIMER_MARK("kicked_no_pollers", 0);
+      p->kicked_without_pollers = 1;
+    }
+  }
+
+  GPR_TIMER_END("pollset_kick_ext", 0);
+}
+
+static void pollset_kick(grpc_pollset *p,
+                         grpc_pollset_worker *specific_worker) {
+  pollset_kick_ext(p, specific_worker, 0);
+}
+
+/* global state management */
+
+static void pollset_global_init(void) {
+  gpr_tls_init(&g_current_thread_poller);
+  gpr_tls_init(&g_current_thread_worker);
+  grpc_wakeup_fd_init(&grpc_global_wakeup_fd);
+}
+
+static void pollset_global_shutdown(void) {
+  grpc_wakeup_fd_destroy(&grpc_global_wakeup_fd);
+  gpr_tls_destroy(&g_current_thread_poller);
+  gpr_tls_destroy(&g_current_thread_worker);
+}
+
+static void kick_poller(void) { grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); }
+
+/* main interface */
+
+static void pollset_init(grpc_pollset *pollset, gpr_mu **mu) {
+  gpr_mu_init(&pollset->mu);
+  *mu = &pollset->mu;
+  pollset->root_worker.next = pollset->root_worker.prev = &pollset->root_worker;
+  pollset->in_flight_cbs = 0;
+  pollset->shutting_down = 0;
+  pollset->called_shutdown = 0;
+  pollset->kicked_without_pollers = 0;
+  pollset->idle_jobs.head = pollset->idle_jobs.tail = NULL;
+  pollset->local_wakeup_cache = NULL;
+  pollset->kicked_without_pollers = 0;
+  pollset->fd_count = 0;
+  pollset->fd_capacity = 0;
+  pollset->del_count = 0;
+  pollset->del_capacity = 0;
+  pollset->fds = NULL;
+  pollset->dels = NULL;
+}
+
+static void pollset_destroy(grpc_pollset *pollset) {
+  GPR_ASSERT(pollset->in_flight_cbs == 0);
+  GPR_ASSERT(!pollset_has_workers(pollset));
+  GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail);
+  while (pollset->local_wakeup_cache) {
+    grpc_cached_wakeup_fd *next = pollset->local_wakeup_cache->next;
+    grpc_wakeup_fd_destroy(&pollset->local_wakeup_cache->fd);
+    gpr_free(pollset->local_wakeup_cache);
+    pollset->local_wakeup_cache = next;
+  }
+  gpr_free(pollset->fds);
+  gpr_free(pollset->dels);
+  gpr_mu_destroy(&pollset->mu);
+}
+
+static void pollset_reset(grpc_pollset *pollset) {
+  GPR_ASSERT(pollset->shutting_down);
+  GPR_ASSERT(pollset->in_flight_cbs == 0);
+  GPR_ASSERT(!pollset_has_workers(pollset));
+  GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail);
+  GPR_ASSERT(pollset->fd_count == 0);
+  GPR_ASSERT(pollset->del_count == 0);
+  pollset->shutting_down = 0;
+  pollset->called_shutdown = 0;
+  pollset->kicked_without_pollers = 0;
+}
+
+static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
+                           grpc_fd *fd) {
+  gpr_mu_lock(&pollset->mu);
+  size_t i;
+  /* TODO(ctiller): this is O(num_fds^2); maybe switch to a hash set here */
+  for (i = 0; i < pollset->fd_count; i++) {
+    if (pollset->fds[i] == fd) goto exit;
+  }
+  if (pollset->fd_count == pollset->fd_capacity) {
+    pollset->fd_capacity =
+        GPR_MAX(pollset->fd_capacity + 8, pollset->fd_count * 3 / 2);
+    pollset->fds =
+        gpr_realloc(pollset->fds, sizeof(grpc_fd *) * pollset->fd_capacity);
+  }
+  pollset->fds[pollset->fd_count++] = fd;
+  GRPC_FD_REF(fd, "multipoller");
+  pollset_kick(pollset, NULL);
+exit:
+  gpr_mu_unlock(&pollset->mu);
+}
+
+static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset) {
+  GPR_ASSERT(grpc_closure_list_empty(pollset->idle_jobs));
+  size_t i;
+  for (i = 0; i < pollset->fd_count; i++) {
+    GRPC_FD_UNREF(pollset->fds[i], "multipoller");
+  }
+  for (i = 0; i < pollset->del_count; i++) {
+    GRPC_FD_UNREF(pollset->dels[i], "multipoller_del");
+  }
+  pollset->fd_count = 0;
+  pollset->del_count = 0;
+  grpc_exec_ctx_enqueue(exec_ctx, pollset->shutdown_done, true, NULL);
+}
+
+static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
+                         grpc_pollset_worker **worker_hdl, gpr_timespec now,
+                         gpr_timespec deadline) {
+  grpc_pollset_worker worker;
+  *worker_hdl = &worker;
+
+  /* pollset->mu already held */
+  int added_worker = 0;
+  int locked = 1;
+  int queued_work = 0;
+  int keep_polling = 0;
+  GPR_TIMER_BEGIN("pollset_work", 0);
+  /* this must happen before we (potentially) drop pollset->mu */
+  worker.next = worker.prev = NULL;
+  worker.reevaluate_polling_on_wakeup = 0;
+  if (pollset->local_wakeup_cache != NULL) {
+    worker.wakeup_fd = pollset->local_wakeup_cache;
+    pollset->local_wakeup_cache = worker.wakeup_fd->next;
+  } else {
+    worker.wakeup_fd = gpr_malloc(sizeof(*worker.wakeup_fd));
+    grpc_wakeup_fd_init(&worker.wakeup_fd->fd);
+  }
+  worker.kicked_specifically = 0;
+  /* If there's work waiting for the pollset to be idle, and the
+     pollset is idle, then do that work */
+  if (!pollset_has_workers(pollset) &&
+      !grpc_closure_list_empty(pollset->idle_jobs)) {
+    GPR_TIMER_MARK("pollset_work.idle_jobs", 0);
+    grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL);
+    goto done;
+  }
+  /* If we're shutting down then we don't execute any extended work */
+  if (pollset->shutting_down) {
+    GPR_TIMER_MARK("pollset_work.shutting_down", 0);
+    goto done;
+  }
+  /* Give do_promote priority so we don't starve it out */
+  if (pollset->in_flight_cbs) {
+    GPR_TIMER_MARK("pollset_work.in_flight_cbs", 0);
+    gpr_mu_unlock(&pollset->mu);
+    locked = 0;
+    goto done;
+  }
+  /* Start polling, and keep doing so while we're being asked to
+     re-evaluate our pollers (this allows poll() based pollers to
+     ensure they don't miss wakeups) */
+  keep_polling = 1;
+  gpr_tls_set(&g_current_thread_poller, (intptr_t)pollset);
+  while (keep_polling) {
+    keep_polling = 0;
+    if (!pollset->kicked_without_pollers) {
+      if (!added_worker) {
+        push_front_worker(pollset, &worker);
+        added_worker = 1;
+        gpr_tls_set(&g_current_thread_worker, (intptr_t)&worker);
+      }
+      GPR_TIMER_BEGIN("maybe_work_and_unlock", 0);
+#define POLLOUT_CHECK (POLLOUT | POLLHUP | POLLERR)
+#define POLLIN_CHECK (POLLIN | POLLHUP | POLLERR)
+
+      int timeout;
+      int r;
+      size_t i, j, fd_count;
+      nfds_t pfd_count;
+      /* TODO(ctiller): inline some elements to avoid an allocation */
+      grpc_fd_watcher *watchers;
+      struct pollfd *pfds;
+
+      timeout = poll_deadline_to_millis_timeout(deadline, now);
+      /* TODO(ctiller): perform just one malloc here if we exceed the inline
+       * case */
+      pfds = gpr_malloc(sizeof(*pfds) * (pollset->fd_count + 2));
+      watchers = gpr_malloc(sizeof(*watchers) * (pollset->fd_count + 2));
+      fd_count = 0;
+      pfd_count = 2;
+      pfds[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd);
+      pfds[0].events = POLLIN;
+      pfds[0].revents = 0;
+      pfds[1].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker.wakeup_fd->fd);
+      pfds[1].events = POLLIN;
+      pfds[1].revents = 0;
+      for (i = 0; i < pollset->fd_count; i++) {
+        int remove = fd_is_orphaned(pollset->fds[i]);
+        for (j = 0; !remove && j < pollset->del_count; j++) {
+          if (pollset->fds[i] == pollset->dels[j]) remove = 1;
+        }
+        if (remove) {
+          GRPC_FD_UNREF(pollset->fds[i], "multipoller");
+        } else {
+          pollset->fds[fd_count++] = pollset->fds[i];
+          watchers[pfd_count].fd = pollset->fds[i];
+          GRPC_FD_REF(watchers[pfd_count].fd, "multipoller_start");
+          pfds[pfd_count].fd = pollset->fds[i]->fd;
+          pfds[pfd_count].revents = 0;
+          pfd_count++;
+        }
+      }
+      for (j = 0; j < pollset->del_count; j++) {
+        GRPC_FD_UNREF(pollset->dels[j], "multipoller_del");
+      }
+      pollset->del_count = 0;
+      pollset->fd_count = fd_count;
+      gpr_mu_unlock(&pollset->mu);
+
+      for (i = 2; i < pfd_count; i++) {
+        grpc_fd *fd = watchers[i].fd;
+        pfds[i].events = (short)fd_begin_poll(fd, pollset, &worker, POLLIN,
+                                              POLLOUT, &watchers[i]);
+        GRPC_FD_UNREF(fd, "multipoller_start");
+      }
+
+      /* TODO(vpai): Consider first doing a 0 timeout poll here to avoid
+         even going into the blocking annotation if possible */
+      GRPC_SCHEDULING_START_BLOCKING_REGION;
+      r = grpc_poll_function(pfds, pfd_count, timeout);
+      GRPC_SCHEDULING_END_BLOCKING_REGION;
+
+      if (r < 0) {
+        if (errno != EINTR) {
+          gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno));
+        }
+        for (i = 2; i < pfd_count; i++) {
+          fd_end_poll(exec_ctx, &watchers[i], 0, 0);
+        }
+      } else if (r == 0) {
+        for (i = 2; i < pfd_count; i++) {
+          fd_end_poll(exec_ctx, &watchers[i], 0, 0);
+        }
+      } else {
+        if (pfds[0].revents & POLLIN_CHECK) {
+          grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd);
+        }
+        if (pfds[1].revents & POLLIN_CHECK) {
+          grpc_wakeup_fd_consume_wakeup(&worker.wakeup_fd->fd);
+        }
+        for (i = 2; i < pfd_count; i++) {
+          if (watchers[i].fd == NULL) {
+            fd_end_poll(exec_ctx, &watchers[i], 0, 0);
+          } else {
+            fd_end_poll(exec_ctx, &watchers[i], pfds[i].revents & POLLIN_CHECK,
+                        pfds[i].revents & POLLOUT_CHECK);
+          }
+        }
+      }
+
+      gpr_free(pfds);
+      gpr_free(watchers);
+      GPR_TIMER_END("maybe_work_and_unlock", 0);
+      locked = 0;
+    } else {
+      GPR_TIMER_MARK("pollset_work.kicked_without_pollers", 0);
+      pollset->kicked_without_pollers = 0;
+    }
+  /* Finished execution - start cleaning up.
+     Note that we may arrive here from outside the enclosing while() loop.
+     In that case we won't loop though as we haven't added worker to the
+     worker list, which means nobody could ask us to re-evaluate polling). */
+  done:
+    if (!locked) {
+      queued_work |= grpc_exec_ctx_flush(exec_ctx);
+      gpr_mu_lock(&pollset->mu);
+      locked = 1;
+    }
+    /* If we're forced to re-evaluate polling (via pollset_kick with
+       GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) then we land here and force
+       a loop */
+    if (worker.reevaluate_polling_on_wakeup) {
+      worker.reevaluate_polling_on_wakeup = 0;
+      pollset->kicked_without_pollers = 0;
+      if (queued_work || worker.kicked_specifically) {
+        /* If there's queued work on the list, then set the deadline to be
+           immediate so we get back out of the polling loop quickly */
+        deadline = gpr_inf_past(GPR_CLOCK_MONOTONIC);
+      }
+      keep_polling = 1;
+    }
+    if (keep_polling) {
+      now = gpr_now(now.clock_type);
+    }
+  }
+  gpr_tls_set(&g_current_thread_poller, 0);
+  if (added_worker) {
+    remove_worker(pollset, &worker);
+    gpr_tls_set(&g_current_thread_worker, 0);
+  }
+  /* release wakeup fd to the local pool */
+  worker.wakeup_fd->next = pollset->local_wakeup_cache;
+  pollset->local_wakeup_cache = worker.wakeup_fd;
+  /* check shutdown conditions */
+  if (pollset->shutting_down) {
+    if (pollset_has_workers(pollset)) {
+      pollset_kick(pollset, NULL);
+    } else if (!pollset->called_shutdown && pollset->in_flight_cbs == 0) {
+      pollset->called_shutdown = 1;
+      gpr_mu_unlock(&pollset->mu);
+      finish_shutdown(exec_ctx, pollset);
+      grpc_exec_ctx_flush(exec_ctx);
+      /* Continuing to access pollset here is safe -- it is the caller's
+       * responsibility to not destroy when it has outstanding calls to
+       * pollset_work.
+       * TODO(dklempner): Can we refactor the shutdown logic to avoid this? */
+      gpr_mu_lock(&pollset->mu);
+    } else if (!grpc_closure_list_empty(pollset->idle_jobs)) {
+      grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL);
+      gpr_mu_unlock(&pollset->mu);
+      grpc_exec_ctx_flush(exec_ctx);
+      gpr_mu_lock(&pollset->mu);
+    }
+  }
+  *worker_hdl = NULL;
+  GPR_TIMER_END("pollset_work", 0);
+}
+
+static void pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
+                             grpc_closure *closure) {
+  GPR_ASSERT(!pollset->shutting_down);
+  pollset->shutting_down = 1;
+  pollset->shutdown_done = closure;
+  pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
+  if (!pollset_has_workers(pollset)) {
+    grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL);
+  }
+  if (!pollset->called_shutdown && pollset->in_flight_cbs == 0 &&
+      !pollset_has_workers(pollset)) {
+    pollset->called_shutdown = 1;
+    finish_shutdown(exec_ctx, pollset);
+  }
+}
+
+static int poll_deadline_to_millis_timeout(gpr_timespec deadline,
+                                           gpr_timespec now) {
+  gpr_timespec timeout;
+  static const int64_t max_spin_polling_us = 10;
+  if (gpr_time_cmp(deadline, gpr_inf_future(deadline.clock_type)) == 0) {
+    return -1;
+  }
+  if (gpr_time_cmp(deadline, gpr_time_add(now, gpr_time_from_micros(
+                                                   max_spin_polling_us,
+                                                   GPR_TIMESPAN))) <= 0) {
+    return 0;
+  }
+  timeout = gpr_time_sub(deadline, now);
+  return gpr_time_to_millis(gpr_time_add(
+      timeout, gpr_time_from_nanos(GPR_NS_PER_MS - 1, GPR_TIMESPAN)));
+}
+
+/*******************************************************************************
+ * pollset_set_posix.c
+ */
+
+static grpc_pollset_set *pollset_set_create(void) {
+  grpc_pollset_set *pollset_set = gpr_malloc(sizeof(*pollset_set));
+  memset(pollset_set, 0, sizeof(*pollset_set));
+  gpr_mu_init(&pollset_set->mu);
+  return pollset_set;
+}
+
+static void pollset_set_destroy(grpc_pollset_set *pollset_set) {
+  size_t i;
+  gpr_mu_destroy(&pollset_set->mu);
+  for (i = 0; i < pollset_set->fd_count; i++) {
+    GRPC_FD_UNREF(pollset_set->fds[i], "pollset_set");
+  }
+  gpr_free(pollset_set->pollsets);
+  gpr_free(pollset_set->pollset_sets);
+  gpr_free(pollset_set->fds);
+  gpr_free(pollset_set);
+}
+
+static void pollset_set_add_pollset(grpc_exec_ctx *exec_ctx,
+                                    grpc_pollset_set *pollset_set,
+                                    grpc_pollset *pollset) {
+  size_t i, j;
+  gpr_mu_lock(&pollset_set->mu);
+  if (pollset_set->pollset_count == pollset_set->pollset_capacity) {
+    pollset_set->pollset_capacity =
+        GPR_MAX(8, 2 * pollset_set->pollset_capacity);
+    pollset_set->pollsets =
+        gpr_realloc(pollset_set->pollsets, pollset_set->pollset_capacity *
+                                               sizeof(*pollset_set->pollsets));
+  }
+  pollset_set->pollsets[pollset_set->pollset_count++] = pollset;
+  for (i = 0, j = 0; i < pollset_set->fd_count; i++) {
+    if (fd_is_orphaned(pollset_set->fds[i])) {
+      GRPC_FD_UNREF(pollset_set->fds[i], "pollset_set");
+    } else {
+      pollset_add_fd(exec_ctx, pollset, pollset_set->fds[i]);
+      pollset_set->fds[j++] = pollset_set->fds[i];
+    }
+  }
+  pollset_set->fd_count = j;
+  gpr_mu_unlock(&pollset_set->mu);
+}
+
+static void pollset_set_del_pollset(grpc_exec_ctx *exec_ctx,
+                                    grpc_pollset_set *pollset_set,
+                                    grpc_pollset *pollset) {
+  size_t i;
+  gpr_mu_lock(&pollset_set->mu);
+  for (i = 0; i < pollset_set->pollset_count; i++) {
+    if (pollset_set->pollsets[i] == pollset) {
+      pollset_set->pollset_count--;
+      GPR_SWAP(grpc_pollset *, pollset_set->pollsets[i],
+               pollset_set->pollsets[pollset_set->pollset_count]);
+      break;
+    }
+  }
+  gpr_mu_unlock(&pollset_set->mu);
+}
+
+static void pollset_set_add_pollset_set(grpc_exec_ctx *exec_ctx,
+                                        grpc_pollset_set *bag,
+                                        grpc_pollset_set *item) {
+  size_t i, j;
+  gpr_mu_lock(&bag->mu);
+  if (bag->pollset_set_count == bag->pollset_set_capacity) {
+    bag->pollset_set_capacity = GPR_MAX(8, 2 * bag->pollset_set_capacity);
+    bag->pollset_sets =
+        gpr_realloc(bag->pollset_sets,
+                    bag->pollset_set_capacity * sizeof(*bag->pollset_sets));
+  }
+  bag->pollset_sets[bag->pollset_set_count++] = item;
+  for (i = 0, j = 0; i < bag->fd_count; i++) {
+    if (fd_is_orphaned(bag->fds[i])) {
+      GRPC_FD_UNREF(bag->fds[i], "pollset_set");
+    } else {
+      pollset_set_add_fd(exec_ctx, item, bag->fds[i]);
+      bag->fds[j++] = bag->fds[i];
+    }
+  }
+  bag->fd_count = j;
+  gpr_mu_unlock(&bag->mu);
+}
+
+static void pollset_set_del_pollset_set(grpc_exec_ctx *exec_ctx,
+                                        grpc_pollset_set *bag,
+                                        grpc_pollset_set *item) {
+  size_t i;
+  gpr_mu_lock(&bag->mu);
+  for (i = 0; i < bag->pollset_set_count; i++) {
+    if (bag->pollset_sets[i] == item) {
+      bag->pollset_set_count--;
+      GPR_SWAP(grpc_pollset_set *, bag->pollset_sets[i],
+               bag->pollset_sets[bag->pollset_set_count]);
+      break;
+    }
+  }
+  gpr_mu_unlock(&bag->mu);
+}
+
+static void pollset_set_add_fd(grpc_exec_ctx *exec_ctx,
+                               grpc_pollset_set *pollset_set, grpc_fd *fd) {
+  size_t i;
+  gpr_mu_lock(&pollset_set->mu);
+  if (pollset_set->fd_count == pollset_set->fd_capacity) {
+    pollset_set->fd_capacity = GPR_MAX(8, 2 * pollset_set->fd_capacity);
+    pollset_set->fds = gpr_realloc(
+        pollset_set->fds, pollset_set->fd_capacity * sizeof(*pollset_set->fds));
+  }
+  GRPC_FD_REF(fd, "pollset_set");
+  pollset_set->fds[pollset_set->fd_count++] = fd;
+  for (i = 0; i < pollset_set->pollset_count; i++) {
+    pollset_add_fd(exec_ctx, pollset_set->pollsets[i], fd);
+  }
+  for (i = 0; i < pollset_set->pollset_set_count; i++) {
+    pollset_set_add_fd(exec_ctx, pollset_set->pollset_sets[i], fd);
+  }
+  gpr_mu_unlock(&pollset_set->mu);
+}
+
+static void pollset_set_del_fd(grpc_exec_ctx *exec_ctx,
+                               grpc_pollset_set *pollset_set, grpc_fd *fd) {
+  size_t i;
+  gpr_mu_lock(&pollset_set->mu);
+  for (i = 0; i < pollset_set->fd_count; i++) {
+    if (pollset_set->fds[i] == fd) {
+      pollset_set->fd_count--;
+      GPR_SWAP(grpc_fd *, pollset_set->fds[i],
+               pollset_set->fds[pollset_set->fd_count]);
+      GRPC_FD_UNREF(fd, "pollset_set");
+      break;
+    }
+  }
+  for (i = 0; i < pollset_set->pollset_set_count; i++) {
+    pollset_set_del_fd(exec_ctx, pollset_set->pollset_sets[i], fd);
+  }
+  gpr_mu_unlock(&pollset_set->mu);
+}
+
+/*******************************************************************************
+ * event engine binding
+ */
+
+static void shutdown_engine(void) { pollset_global_shutdown(); }
+
+static const grpc_event_engine_vtable vtable = {
+    .pollset_size = sizeof(grpc_pollset),
+
+    .fd_create = fd_create,
+    .fd_wrapped_fd = fd_wrapped_fd,
+    .fd_orphan = fd_orphan,
+    .fd_shutdown = fd_shutdown,
+    .fd_notify_on_read = fd_notify_on_read,
+    .fd_notify_on_write = fd_notify_on_write,
+
+    .pollset_init = pollset_init,
+    .pollset_shutdown = pollset_shutdown,
+    .pollset_reset = pollset_reset,
+    .pollset_destroy = pollset_destroy,
+    .pollset_work = pollset_work,
+    .pollset_kick = pollset_kick,
+    .pollset_add_fd = pollset_add_fd,
+
+    .pollset_set_create = pollset_set_create,
+    .pollset_set_destroy = pollset_set_destroy,
+    .pollset_set_add_pollset = pollset_set_add_pollset,
+    .pollset_set_del_pollset = pollset_set_del_pollset,
+    .pollset_set_add_pollset_set = pollset_set_add_pollset_set,
+    .pollset_set_del_pollset_set = pollset_set_del_pollset_set,
+    .pollset_set_add_fd = pollset_set_add_fd,
+    .pollset_set_del_fd = pollset_set_del_fd,
+
+    .kick_poller = kick_poller,
+
+    .shutdown_engine = shutdown_engine,
+};
+
+const grpc_event_engine_vtable *grpc_init_poll_posix(void) {
+  pollset_global_init();
+  return &vtable;
+}
+
+#endif
diff --git a/examples/node/greeter_client.js b/src/core/lib/iomgr/ev_poll_posix.h
similarity index 72%
copy from examples/node/greeter_client.js
copy to src/core/lib/iomgr/ev_poll_posix.h
index 2820acb..291736a 100644
--- a/examples/node/greeter_client.js
+++ b/src/core/lib/iomgr/ev_poll_posix.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,23 +31,11 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+#ifndef GRPC_CORE_LIB_IOMGR_EV_POLL_POSIX_H
+#define GRPC_CORE_LIB_IOMGR_EV_POLL_POSIX_H
 
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
+#include "src/core/lib/iomgr/ev_posix.h"
 
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
-  }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
-}
+const grpc_event_engine_vtable *grpc_init_poll_posix(void);
 
-main();
+#endif /* GRPC_CORE_LIB_IOMGR_EV_POLL_POSIX_H */
diff --git a/src/core/lib/iomgr/ev_posix.c b/src/core/lib/iomgr/ev_posix.c
index 7df1751..a7dfc95 100644
--- a/src/core/lib/iomgr/ev_posix.c
+++ b/src/core/lib/iomgr/ev_posix.c
@@ -37,23 +37,104 @@
 
 #include "src/core/lib/iomgr/ev_posix.h"
 
+#include <string.h>
+
+#include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/useful.h>
 
 #include "src/core/lib/iomgr/ev_poll_and_epoll_posix.h"
+#include "src/core/lib/iomgr/ev_poll_posix.h"
+#include "src/core/lib/support/env.h"
+
+/** Default poll() function - a pointer so that it can be overridden by some
+ *  tests */
+grpc_poll_function_type grpc_poll_function = poll;
 
 static const grpc_event_engine_vtable *g_event_engine;
 
-grpc_poll_function_type grpc_poll_function = poll;
+typedef const grpc_event_engine_vtable *(*event_engine_factory_fn)(void);
 
-void grpc_event_engine_init(void) {
-  if ((g_event_engine = grpc_init_poll_and_epoll_posix())) {
-    return;
-  }
-  gpr_log(GPR_ERROR, "No event engine could be initialized");
-  abort();
+typedef struct {
+  const char *name;
+  event_engine_factory_fn factory;
+} event_engine_factory;
+
+static const event_engine_factory g_factories[] = {
+    {"poll", grpc_init_poll_posix}, {"legacy", grpc_init_poll_and_epoll_posix},
+};
+
+static void add(const char *beg, const char *end, char ***ss, size_t *ns) {
+  size_t n = *ns;
+  size_t np = n + 1;
+  char *s;
+  size_t len;
+  GPR_ASSERT(end >= beg);
+  len = (size_t)(end - beg);
+  s = gpr_malloc(len + 1);
+  memcpy(s, beg, len);
+  s[len] = 0;
+  *ss = gpr_realloc(*ss, sizeof(char **) * np);
+  (*ss)[n] = s;
+  *ns = np;
 }
 
-void grpc_event_engine_shutdown(void) { g_event_engine->shutdown_engine(); }
+static void split(const char *s, char ***ss, size_t *ns) {
+  const char *c = strchr(s, ',');
+  if (c == NULL) {
+    add(s, s + strlen(s), ss, ns);
+  } else {
+    add(s, c, ss, ns);
+    split(c + 1, ss, ns);
+  }
+}
+
+static bool is(const char *want, const char *have) {
+  return 0 == strcmp(want, "all") || 0 == strcmp(want, have);
+}
+
+static void try_engine(const char *engine) {
+  for (size_t i = 0; i < GPR_ARRAY_SIZE(g_factories); i++) {
+    if (is(engine, g_factories[i].name)) {
+      if ((g_event_engine = g_factories[i].factory())) {
+        gpr_log(GPR_DEBUG, "Using polling engine: %s", g_factories[i].name);
+        return;
+      }
+    }
+  }
+}
+
+void grpc_event_engine_init(void) {
+  char *s = gpr_getenv("GRPC_POLL_STRATEGY");
+  if (s == NULL) {
+    s = gpr_strdup("all");
+  }
+
+  char **strings = NULL;
+  size_t nstrings = 0;
+  split(s, &strings, &nstrings);
+
+  for (size_t i = 0; g_event_engine == NULL && i < nstrings; i++) {
+    try_engine(strings[i]);
+  }
+
+  for (size_t i = 0; i < nstrings; i++) {
+    gpr_free(strings[i]);
+  }
+  gpr_free(strings);
+  gpr_free(s);
+
+  if (g_event_engine == NULL) {
+    gpr_log(GPR_ERROR, "No event engine could be initialized");
+    abort();
+  }
+}
+
+void grpc_event_engine_shutdown(void) {
+  g_event_engine->shutdown_engine();
+  g_event_engine = NULL;
+}
 
 grpc_fd *grpc_fd_create(int fd, const char *name) {
   return g_event_engine->fd_create(fd, name);
diff --git a/src/core/lib/iomgr/exec_ctx.c b/src/core/lib/iomgr/exec_ctx.c
index 2146c7d..e451479 100644
--- a/src/core/lib/iomgr/exec_ctx.c
+++ b/src/core/lib/iomgr/exec_ctx.c
@@ -39,6 +39,22 @@
 
 #include "src/core/lib/profiling/timers.h"
 
+bool grpc_exec_ctx_ready_to_finish(grpc_exec_ctx *exec_ctx) {
+  if (!exec_ctx->cached_ready_to_finish) {
+    exec_ctx->cached_ready_to_finish = exec_ctx->check_ready_to_finish(
+        exec_ctx, exec_ctx->check_ready_to_finish_arg);
+  }
+  return exec_ctx->cached_ready_to_finish;
+}
+
+bool grpc_never_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored) {
+  return false;
+}
+
+bool grpc_always_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored) {
+  return true;
+}
+
 #ifndef GRPC_EXECUTION_CONTEXT_SANITIZER
 bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) {
   bool did_something = 0;
@@ -61,6 +77,7 @@
 }
 
 void grpc_exec_ctx_finish(grpc_exec_ctx *exec_ctx) {
+  exec_ctx->cached_ready_to_finish = true;
   grpc_exec_ctx_flush(exec_ctx);
 }
 
diff --git a/src/core/lib/iomgr/exec_ctx.h b/src/core/lib/iomgr/exec_ctx.h
index 976cc40..9d47a26 100644
--- a/src/core/lib/iomgr/exec_ctx.h
+++ b/src/core/lib/iomgr/exec_ctx.h
@@ -53,6 +53,9 @@
  *  - track a list of work that needs to be delayed until the top of the
  *    call stack (this provides a convenient mechanism to run callbacks
  *    without worrying about locking issues)
+ *  - provide a decision maker (via grpc_exec_ctx_ready_to_finish) that provides
+ *    signal as to whether a borrowed thread should continue to do work or
+ *    should actively try to finish up and get this thread back to its owner
  *
  *  CONVENTIONS:
  *  Instance of this must ALWAYS be constructed on the stack, never
@@ -63,18 +66,26 @@
  */
 struct grpc_exec_ctx {
   grpc_closure_list closure_list;
+  bool cached_ready_to_finish;
+  void *check_ready_to_finish_arg;
+  bool (*check_ready_to_finish)(grpc_exec_ctx *exec_ctx, void *arg);
 };
 
-#define GRPC_EXEC_CTX_INIT \
-  { GRPC_CLOSURE_LIST_INIT }
+#define GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(finish_check, finish_check_arg) \
+  { GRPC_CLOSURE_LIST_INIT, false, finish_check_arg, finish_check }
 #else
 struct grpc_exec_ctx {
-  int unused;
+  bool cached_ready_to_finish;
+  void *check_ready_to_finish_arg;
+  bool (*check_ready_to_finish)(grpc_exec_ctx *exec_ctx, void *arg);
 };
-#define GRPC_EXEC_CTX_INIT \
-  { 0 }
+#define GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(finish_check, finish_check_arg) \
+  { false, finish_check_arg, finish_check }
 #endif
 
+#define GRPC_EXEC_CTX_INIT \
+  GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(grpc_never_ready_to_finish, NULL)
+
 /** Flush any work that has been enqueued onto this grpc_exec_ctx.
  *  Caller must guarantee that no interfering locks are held.
  *  Returns true if work was performed, false otherwise. */
@@ -86,6 +97,14 @@
 void grpc_exec_ctx_enqueue(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
                            bool success,
                            grpc_workqueue *offload_target_or_null);
+/** Returns true if we'd like to leave this execution context as soon as
+    possible: useful for deciding whether to do something more or not depending
+    on outside context */
+bool grpc_exec_ctx_ready_to_finish(grpc_exec_ctx *exec_ctx);
+/** A finish check that is never ready to finish */
+bool grpc_never_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored);
+/** A finish check that is always ready to finish */
+bool grpc_always_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored);
 /** Add a list of closures to be executed at the next flush/finish point.
  *  Leaves \a list empty. */
 void grpc_exec_ctx_enqueue_list(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/lib/iomgr/iomgr_posix.c b/src/core/lib/iomgr/iomgr_posix.c
index 016c501..cede97f 100644
--- a/src/core/lib/iomgr/iomgr_posix.c
+++ b/src/core/lib/iomgr/iomgr_posix.c
@@ -41,12 +41,16 @@
 #include "src/core/lib/iomgr/tcp_posix.h"
 
 void grpc_iomgr_platform_init(void) {
+  grpc_wakeup_fd_global_init();
   grpc_event_engine_init();
   grpc_register_tracer("tcp", &grpc_tcp_trace);
 }
 
 void grpc_iomgr_platform_flush(void) {}
 
-void grpc_iomgr_platform_shutdown(void) { grpc_event_engine_shutdown(); }
+void grpc_iomgr_platform_shutdown(void) {
+  grpc_event_engine_shutdown();
+  grpc_wakeup_fd_global_destroy();
+}
 
 #endif /* GRPC_POSIX_SOCKET */
diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c
index 7210aef..e286922 100644
--- a/src/core/lib/iomgr/tcp_posix.c
+++ b/src/core/lib/iomgr/tcp_posix.c
@@ -164,7 +164,7 @@
     for (i = 0; i < tcp->incoming_buffer->count; i++) {
       char *dump = gpr_dump_slice(tcp->incoming_buffer->slices[i],
                                   GPR_DUMP_HEX | GPR_DUMP_ASCII);
-      gpr_log(GPR_DEBUG, "READ %p: %s", tcp, dump);
+      gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump);
       gpr_free(dump);
     }
   }
@@ -398,7 +398,7 @@
     for (i = 0; i < buf->count; i++) {
       char *data =
           gpr_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
-      gpr_log(GPR_DEBUG, "WRITE %p: %s", tcp, data);
+      gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data);
       gpr_free(data);
     }
   }
diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c
index df6cf95..98ffccd 100644
--- a/src/core/lib/iomgr/udp_server.c
+++ b/src/core/lib/iomgr/udp_server.c
@@ -81,6 +81,7 @@
   grpc_closure read_closure;
   grpc_closure destroyed_closure;
   grpc_udp_server_read_cb read_cb;
+  grpc_udp_server_orphan_cb orphan_cb;
 } server_port;
 
 /* the overall server */
@@ -168,6 +169,10 @@
       server_port *sp = &s->ports[i];
       sp->destroyed_closure.cb = destroyed_port;
       sp->destroyed_closure.cb_arg = s;
+
+      GPR_ASSERT(sp->orphan_cb);
+      sp->orphan_cb(sp->emfd);
+
       grpc_fd_orphan(exec_ctx, sp->emfd, &sp->destroyed_closure, NULL,
                      "udp_listener_shutdown");
     }
@@ -268,7 +273,8 @@
 
 static int add_socket_to_server(grpc_udp_server *s, int fd,
                                 const struct sockaddr *addr, size_t addr_len,
-                                grpc_udp_server_read_cb read_cb) {
+                                grpc_udp_server_read_cb read_cb,
+                                grpc_udp_server_orphan_cb orphan_cb) {
   server_port *sp;
   int port;
   char *addr_str;
@@ -292,6 +298,7 @@
     memcpy(sp->addr.untyped, addr, addr_len);
     sp->addr_len = addr_len;
     sp->read_cb = read_cb;
+    sp->orphan_cb = orphan_cb;
     GPR_ASSERT(sp->emfd);
     gpr_mu_unlock(&s->mu);
     gpr_free(name);
@@ -301,7 +308,8 @@
 }
 
 int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
-                             size_t addr_len, grpc_udp_server_read_cb read_cb) {
+                             size_t addr_len, grpc_udp_server_read_cb read_cb,
+                             grpc_udp_server_orphan_cb orphan_cb) {
   int allocated_port1 = -1;
   int allocated_port2 = -1;
   unsigned i;
@@ -348,7 +356,8 @@
     addr = (struct sockaddr *)&wild6;
     addr_len = sizeof(wild6);
     fd = grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode);
-    allocated_port1 = add_socket_to_server(s, fd, addr, addr_len, read_cb);
+    allocated_port1 =
+        add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb);
     if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) {
       goto done;
     }
@@ -370,7 +379,8 @@
     addr = (struct sockaddr *)&addr4_copy;
     addr_len = sizeof(addr4_copy);
   }
-  allocated_port2 = add_socket_to_server(s, fd, addr, addr_len, read_cb);
+  allocated_port2 =
+      add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb);
 
 done:
   gpr_free(allocated_addr);
diff --git a/src/core/lib/iomgr/udp_server.h b/src/core/lib/iomgr/udp_server.h
index d8cf957..33c5ce1 100644
--- a/src/core/lib/iomgr/udp_server.h
+++ b/src/core/lib/iomgr/udp_server.h
@@ -48,6 +48,9 @@
 typedef void (*grpc_udp_server_read_cb)(grpc_exec_ctx *exec_ctx, grpc_fd *emfd,
                                         struct grpc_server *server);
 
+/* Called when the grpc_fd is about to be orphaned (and the FD closed). */
+typedef void (*grpc_udp_server_orphan_cb)(grpc_fd *emfd);
+
 /* Create a server, initially not bound to any ports */
 grpc_udp_server *grpc_udp_server_create(void);
 
@@ -69,7 +72,8 @@
 /* TODO(ctiller): deprecate this, and make grpc_udp_server_add_ports to handle
                   all of the multiple socket port matching logic in one place */
 int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
-                             size_t addr_len, grpc_udp_server_read_cb read_cb);
+                             size_t addr_len, grpc_udp_server_read_cb read_cb,
+                             grpc_udp_server_orphan_cb orphan_cb);
 
 void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *server,
                              grpc_closure *on_done);
diff --git a/src/core/lib/support/string_util_win32.c b/src/core/lib/support/string_util_win32.c
index f3cb0c0..0d7bcdb 100644
--- a/src/core/lib/support/string_util_win32.c
+++ b/src/core/lib/support/string_util_win32.c
@@ -83,7 +83,7 @@
   DWORD status = FormatMessage(
       FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
           FORMAT_MESSAGE_IGNORE_INSERTS,
-      NULL, (DWORD)messageid, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+      NULL, (DWORD)messageid, MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),
       (LPTSTR)(&tmessage), 0, NULL);
   if (status == 0) return gpr_strdup("Unable to retrieve error string");
   message = gpr_tchar_to_char(tmessage);
diff --git a/src/core/lib/transport/metadata.h b/src/core/lib/transport/metadata.h
index 713d9e6..6d82f4d 100644
--- a/src/core/lib/transport/metadata.h
+++ b/src/core/lib/transport/metadata.h
@@ -147,6 +147,10 @@
 
 #define GRPC_MDSTR_LENGTH(s) (GPR_SLICE_LENGTH(s->slice))
 
+/* We add 32 bytes of padding as per RFC-7540 section 6.5.2. */
+#define GRPC_MDELEM_LENGTH(e) \
+  (GRPC_MDSTR_LENGTH((e)->key) + GRPC_MDSTR_LENGTH((e)->value) + 32)
+
 int grpc_mdstr_is_legal_header(grpc_mdstr *s);
 int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s);
 int grpc_mdstr_is_bin_suffixed(grpc_mdstr *s);
diff --git a/src/core/lib/transport/metadata_batch.c b/src/core/lib/transport/metadata_batch.c
index 4567221..e4398ab 100644
--- a/src/core/lib/transport/metadata_batch.c
+++ b/src/core/lib/transport/metadata_batch.c
@@ -192,3 +192,12 @@
          gpr_time_cmp(gpr_inf_future(batch->deadline.clock_type),
                       batch->deadline) == 0;
 }
+
+size_t grpc_metadata_batch_size(grpc_metadata_batch *batch) {
+  size_t size = 0;
+  for (grpc_linked_mdelem *elem = batch->list.head; elem != NULL;
+       elem = elem->next) {
+    size += GRPC_MDELEM_LENGTH(elem->md);
+  }
+  return size;
+}
diff --git a/src/core/lib/transport/metadata_batch.h b/src/core/lib/transport/metadata_batch.h
index b626688..7af823f 100644
--- a/src/core/lib/transport/metadata_batch.h
+++ b/src/core/lib/transport/metadata_batch.h
@@ -66,6 +66,9 @@
 void grpc_metadata_batch_clear(grpc_metadata_batch *batch);
 int grpc_metadata_batch_is_empty(grpc_metadata_batch *batch);
 
+/* Returns the transport size of the batch. */
+size_t grpc_metadata_batch_size(grpc_metadata_batch *batch);
+
 /** Moves the metadata information from \a src to \a dst. Upon return, \a src is
  * zeroed. */
 void grpc_metadata_batch_move(grpc_metadata_batch *dst,
diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc
index db3558f..f297ae8 100644
--- a/src/cpp/common/channel_arguments.cc
+++ b/src/cpp/common/channel_arguments.cc
@@ -85,7 +85,7 @@
 
 void ChannelArguments::SetCompressionAlgorithm(
     grpc_compression_algorithm algorithm) {
-  SetInt(GRPC_COMPRESSION_ALGORITHM_ARG, algorithm);
+  SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, algorithm);
 }
 
 // Note: a second call to this will add in front the result of the first call.
diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index fafe31e..f955a31 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -33,6 +33,7 @@
 
 #include <grpc++/server.h>
 
+#include <sstream>
 #include <utility>
 
 #include <grpc++/completion_queue.h>
@@ -41,6 +42,7 @@
 #include <grpc++/impl/grpc_library.h>
 #include <grpc++/impl/method_handler_impl.h>
 #include <grpc++/impl/rpc_service_method.h>
+#include <grpc++/impl/server_initializer.h>
 #include <grpc++/impl/service_type.h>
 #include <grpc++/security/server_credentials.h>
 #include <grpc++/server_context.h>
@@ -284,7 +286,8 @@
       has_generic_service_(false),
       server_(nullptr),
       thread_pool_(thread_pool),
-      thread_pool_owned_(thread_pool_owned) {
+      thread_pool_owned_(thread_pool_owned),
+      server_initializer_(new ServerInitializer(this)) {
   g_gli_initializer.summon();
   gpr_once_init(&g_once_init_callbacks, InitGlobalCallbacks);
   global_callbacks_ = g_callbacks;
@@ -341,6 +344,7 @@
                "Can only register an asynchronous service against one server.");
     service->server_ = this;
   }
+  const char* method_name = nullptr;
   for (auto it = service->methods_.begin(); it != service->methods_.end();
        ++it) {
     if (it->get() == nullptr) {  // Handled by generic service if any.
@@ -360,6 +364,17 @@
     } else {
       sync_methods_->emplace_back(method, tag);
     }
+    method_name = method->name();
+  }
+
+  // Parse service name.
+  if (method_name != nullptr) {
+    std::stringstream ss(method_name);
+    grpc::string service_name;
+    if (std::getline(ss, service_name, '/') &&
+        std::getline(ss, service_name, '/')) {
+      services_.push_back(service_name);
+    }
   }
   return true;
 }
@@ -598,4 +613,6 @@
   }
 }
 
+ServerInitializer* Server::initializer() { return server_initializer_.get(); }
+
 }  // namespace grpc
diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc
index 68cc382..61f0f6a 100644
--- a/src/cpp/server/server_builder.cc
+++ b/src/cpp/server/server_builder.cc
@@ -41,9 +41,23 @@
 
 namespace grpc {
 
+static std::vector<std::unique_ptr<ServerBuilderPlugin> (*)()>*
+    g_plugin_factory_list;
+static gpr_once once_init_plugin_list = GPR_ONCE_INIT;
+
+static void do_plugin_list_init(void) {
+  g_plugin_factory_list =
+      new std::vector<std::unique_ptr<ServerBuilderPlugin> (*)()>();
+}
+
 ServerBuilder::ServerBuilder()
     : max_message_size_(-1), generic_service_(nullptr) {
   grpc_compression_options_init(&compression_options_);
+  gpr_once_init(&once_init_plugin_list, do_plugin_list_init);
+  for (auto factory : (*g_plugin_factory_list)) {
+    std::unique_ptr<ServerBuilderPlugin> plugin = factory();
+    plugins_[plugin->name()] = std::move(plugin);
+  }
 }
 
 std::unique_ptr<ServerCompletionQueue> ServerBuilder::AddCompletionQueue() {
@@ -96,14 +110,24 @@
   ChannelArguments args;
   for (auto option = options_.begin(); option != options_.end(); ++option) {
     (*option)->UpdateArguments(&args);
+    (*option)->UpdatePlugins(&plugins_);
+  }
+  if (thread_pool == nullptr) {
+    for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) {
+      if ((*plugin).second->has_sync_methods()) {
+        thread_pool.reset(CreateDefaultThreadPool());
+        break;
+      }
+    }
   }
   if (max_message_size_ > 0) {
     args.SetInt(GRPC_ARG_MAX_MESSAGE_LENGTH, max_message_size_);
   }
-  args.SetInt(GRPC_COMPRESSION_ALGORITHM_STATE_ARG,
+  args.SetInt(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET,
               compression_options_.enabled_algorithms_bitset);
   std::unique_ptr<Server> server(
       new Server(thread_pool.release(), true, max_message_size_, &args));
+  ServerInitializer* initializer = server->initializer();
   for (auto cq = cqs_.begin(); cq != cqs_.end(); ++cq) {
     grpc_server_register_completion_queue(server->server_, (*cq)->cq(),
                                           nullptr);
@@ -114,6 +138,9 @@
       return nullptr;
     }
   }
+  for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) {
+    (*plugin).second->InitServer(initializer);
+  }
   if (generic_service_) {
     server->RegisterAsyncGenericService(generic_service_);
   } else {
@@ -137,7 +164,16 @@
   if (!server->Start(cqs_data, cqs_.size())) {
     return nullptr;
   }
+  for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) {
+    (*plugin).second->Finish(initializer);
+  }
   return server;
 }
 
+void ServerBuilder::InternalAddPluginFactory(
+    std::unique_ptr<ServerBuilderPlugin> (*CreatePlugin)()) {
+  gpr_once_init(&once_init_plugin_list, do_plugin_list_init);
+  (*g_plugin_factory_list).push_back(CreatePlugin);
+}
+
 }  // namespace grpc
diff --git a/src/csharp/Grpc.Core.Tests/ChannelTest.cs b/src/csharp/Grpc.Core.Tests/ChannelTest.cs
index 6330f50..850d70c 100644
--- a/src/csharp/Grpc.Core.Tests/ChannelTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ChannelTest.cs
@@ -32,6 +32,7 @@
 #endregion
 
 using System;
+using System.Threading.Tasks;
 using Grpc.Core;
 using Grpc.Core.Internal;
 using Grpc.Core.Utils;
@@ -89,5 +90,43 @@
             channel.ShutdownAsync().Wait();
             Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await channel.ShutdownAsync());
         }
+
+        [Test]
+        public async Task ShutdownTokenCancelledAfterShutdown()
+        {
+            var channel = new Channel("localhost", ChannelCredentials.Insecure);
+            Assert.IsFalse(channel.ShutdownToken.IsCancellationRequested);
+            var shutdownTask = channel.ShutdownAsync();
+            Assert.IsTrue(channel.ShutdownToken.IsCancellationRequested);
+            await shutdownTask;
+        }
+
+        [Test]
+        public async Task StateIsFatalFailureAfterShutdown()
+        {
+            var channel = new Channel("localhost", ChannelCredentials.Insecure);
+            await channel.ShutdownAsync();
+            Assert.AreEqual(ChannelState.FatalFailure, channel.State);
+        }
+
+        [Test]
+        public async Task ShutdownFinishesWaitForStateChangedAsync()
+        {
+            var channel = new Channel("localhost", ChannelCredentials.Insecure);
+            var stateChangedTask = channel.WaitForStateChangedAsync(ChannelState.Idle);
+            var shutdownTask = channel.ShutdownAsync();
+            await stateChangedTask;
+            await shutdownTask;
+        }
+
+        [Test]
+        public async Task OperationsThrowAfterShutdown()
+        {
+            var channel = new Channel("localhost", ChannelCredentials.Insecure);
+            await channel.ShutdownAsync();
+            Assert.ThrowsAsync(typeof(ObjectDisposedException), async () => await channel.WaitForStateChangedAsync(ChannelState.Idle));
+            Assert.Throws(typeof(ObjectDisposedException), () => { var x = channel.ResolvedTarget; });
+            Assert.ThrowsAsync(typeof(TaskCanceledException), async () => await channel.ConnectAsync());
+        }
     }
 }
diff --git a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs
index abe9d4a..777a1c8 100644
--- a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs
+++ b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs
@@ -181,13 +181,14 @@
         }
 
         [Test]
-        public void ClientStreaming_WriteFailure()
+        public void ClientStreaming_WriteCompletionFailure()
         {
             var resultTask = asyncCall.ClientStreamingCallAsync();
             var requestStream = new ClientRequestStream<string, string>(asyncCall);
 
             var writeTask = requestStream.WriteAsync("request1");
             fakeCall.SendCompletionHandler(false);
+            // TODO: maybe IOException or waiting for RPCException is more appropriate here.
             Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await writeTask);
 
             fakeCall.UnaryResponseClientHandler(true,
@@ -199,7 +200,7 @@
         }
 
         [Test]
-        public void ClientStreaming_WriteAfterReceivingStatusFails()
+        public void ClientStreaming_WriteAfterReceivingStatusThrowsRpcException()
         {
             var resultTask = asyncCall.ClientStreamingCallAsync();
             var requestStream = new ClientRequestStream<string, string>(asyncCall);
@@ -210,7 +211,44 @@
                 new Metadata());
 
             AssertUnaryResponseSuccess(asyncCall, fakeCall, resultTask);
+            var ex = Assert.Throws<RpcException>(() => requestStream.WriteAsync("request1"));
+            Assert.AreEqual(Status.DefaultSuccess, ex.Status);
+        }
+
+        [Test]
+        public void ClientStreaming_WriteAfterReceivingStatusThrowsRpcException2()
+        {
+            var resultTask = asyncCall.ClientStreamingCallAsync();
+            var requestStream = new ClientRequestStream<string, string>(asyncCall);
+
+            fakeCall.UnaryResponseClientHandler(true,
+                new ClientSideStatus(new Status(StatusCode.OutOfRange, ""), new Metadata()),
+                CreateResponsePayload(),
+                new Metadata());
+
+            AssertUnaryResponseError(asyncCall, fakeCall, resultTask, StatusCode.OutOfRange);
+            var ex = Assert.Throws<RpcException>(() => requestStream.WriteAsync("request1"));
+            Assert.AreEqual(StatusCode.OutOfRange, ex.Status.StatusCode);
+        }
+
+        [Test]
+        public void ClientStreaming_WriteAfterCompleteThrowsInvalidOperationException()
+        {
+            var resultTask = asyncCall.ClientStreamingCallAsync();
+            var requestStream = new ClientRequestStream<string, string>(asyncCall);
+
+            requestStream.CompleteAsync();
+
             Assert.Throws(typeof(InvalidOperationException), () => requestStream.WriteAsync("request1"));
+
+            fakeCall.SendCompletionHandler(true);
+
+            fakeCall.UnaryResponseClientHandler(true,
+                new ClientSideStatus(Status.DefaultSuccess, new Metadata()),
+                CreateResponsePayload(),
+                new Metadata());
+
+            AssertUnaryResponseSuccess(asyncCall, fakeCall, resultTask);
         }
 
         [Test]
@@ -229,7 +267,7 @@
         }
 
         [Test]
-        public void ClientStreaming_WriteAfterCancellationRequestFails()
+        public void ClientStreaming_WriteAfterCancellationRequestThrowsOperationCancelledException()
         {
             var resultTask = asyncCall.ClientStreamingCallAsync();
             var requestStream = new ClientRequestStream<string, string>(asyncCall);
@@ -340,7 +378,7 @@
         }
 
         [Test]
-        public void DuplexStreaming_WriteAfterReceivingStatusFails()
+        public void DuplexStreaming_WriteAfterReceivingStatusThrowsRpcException()
         {
             asyncCall.StartDuplexStreamingCall();
             var requestStream = new ClientRequestStream<string, string>(asyncCall);
@@ -352,7 +390,8 @@
 
             AssertStreamingResponseSuccess(asyncCall, fakeCall, readTask);
 
-            Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await requestStream.WriteAsync("request1"));
+            var ex = Assert.ThrowsAsync<RpcException>(async () => await requestStream.WriteAsync("request1"));
+            Assert.AreEqual(Status.DefaultSuccess, ex.Status);
         }
 
         [Test]
@@ -372,7 +411,7 @@
         }
 
         [Test]
-        public void DuplexStreaming_WriteAfterCancellationRequestFails()
+        public void DuplexStreaming_WriteAfterCancellationRequestThrowsOperationCancelledException()
         {
             asyncCall.StartDuplexStreamingCall();
             var requestStream = new ClientRequestStream<string, string>(asyncCall);
diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs
index 89981b1..93a6e6a 100644
--- a/src/csharp/Grpc.Core/Channel.cs
+++ b/src/csharp/Grpc.Core/Channel.cs
@@ -32,6 +32,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading;
 using System.Threading.Tasks;
 
 using Grpc.Core.Internal;
@@ -51,6 +52,7 @@
 
         readonly object myLock = new object();
         readonly AtomicCounter activeCallCounter = new AtomicCounter();
+        readonly CancellationTokenSource shutdownTokenSource = new CancellationTokenSource();
 
         readonly string target;
         readonly GrpcEnvironment environment;
@@ -101,12 +103,13 @@
 
         /// <summary>
         /// Gets current connectivity state of this channel.
+        /// After channel is has been shutdown, <c>ChannelState.FatalFailure</c> will be returned.
         /// </summary>
         public ChannelState State
         {
             get
             {
-                return handle.CheckConnectivityState(false);        
+                return GetConnectivityState(false);
             }
         }
 
@@ -155,6 +158,17 @@
         }
 
         /// <summary>
+        /// Returns a token that gets cancelled once <c>ShutdownAsync</c> is invoked.
+        /// </summary>
+        public CancellationToken ShutdownToken
+        {
+            get
+            {
+                return this.shutdownTokenSource.Token;
+            }
+        }
+
+        /// <summary>
         /// Allows explicitly requesting channel to connect without starting an RPC.
         /// Returned task completes once state Ready was seen. If the deadline is reached,
         /// or channel enters the FatalFailure state, the task is cancelled.
@@ -164,7 +178,7 @@
         /// <param name="deadline">The deadline. <c>null</c> indicates no deadline.</param>
         public async Task ConnectAsync(DateTime? deadline = null)
         {
-            var currentState = handle.CheckConnectivityState(true);
+            var currentState = GetConnectivityState(true);
             while (currentState != ChannelState.Ready)
             {
                 if (currentState == ChannelState.FatalFailure)
@@ -172,7 +186,7 @@
                     throw new OperationCanceledException("Channel has reached FatalFailure state.");
                 }
                 await WaitForStateChangedAsync(currentState, deadline).ConfigureAwait(false);
-                currentState = handle.CheckConnectivityState(false);
+                currentState = GetConnectivityState(false);
             }
         }
 
@@ -188,6 +202,8 @@
                 shutdownRequested = true;
             }
 
+            shutdownTokenSource.Cancel();
+
             var activeCallCount = activeCallCounter.Count;
             if (activeCallCount > 0)
             {
@@ -231,6 +247,18 @@
             activeCallCounter.Decrement();
         }
 
+        private ChannelState GetConnectivityState(bool tryToConnect)
+        {
+            try
+            {
+                return handle.CheckConnectivityState(tryToConnect);
+            }
+            catch (ObjectDisposedException)
+            {
+                return ChannelState.FatalFailure;
+            }
+        }
+
         private static void EnsureUserAgentChannelOption(Dictionary<string, ChannelOption> options)
         {
             var key = ChannelOptions.PrimaryUserAgentString;
diff --git a/src/csharp/Grpc.Core/GrpcEnvironment.cs b/src/csharp/Grpc.Core/GrpcEnvironment.cs
index a5c78cc..bee0ef1 100644
--- a/src/csharp/Grpc.Core/GrpcEnvironment.cs
+++ b/src/csharp/Grpc.Core/GrpcEnvironment.cs
@@ -45,11 +45,12 @@
     /// </summary>
     public class GrpcEnvironment
     {
-        const int THREAD_POOL_SIZE = 4;
+        const int MinDefaultThreadPoolSize = 4;
 
         static object staticLock = new object();
         static GrpcEnvironment instance;
         static int refCount;
+        static int? customThreadPoolSize;
 
         static ILogger logger = new ConsoleLogger();
 
@@ -123,13 +124,30 @@
         }
 
         /// <summary>
+        /// Sets the number of threads in the gRPC thread pool that polls for internal RPC events.
+        /// Can be only invoke before the <c>GrpcEnviroment</c> is started and cannot be changed afterwards.
+        /// Setting thread pool size is an advanced setting and you should only use it if you know what you are doing.
+        /// Most users should rely on the default value provided by gRPC library.
+        /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
+        /// </summary>
+        public static void SetThreadPoolSize(int threadCount)
+        {
+            lock (staticLock)
+            {
+                GrpcPreconditions.CheckState(instance == null, "Can only be set before GrpcEnvironment is initialized");
+                GrpcPreconditions.CheckArgument(threadCount > 0, "threadCount needs to be a positive number");
+                customThreadPoolSize = threadCount;
+            }
+        }
+
+        /// <summary>
         /// Creates gRPC environment.
         /// </summary>
         private GrpcEnvironment()
         {
             GrpcNativeInit();
             completionRegistry = new CompletionRegistry(this);
-            threadPool = new GrpcThreadPool(this, THREAD_POOL_SIZE);
+            threadPool = new GrpcThreadPool(this, GetThreadPoolSizeOrDefault());
             threadPool.Start();
         }
 
@@ -200,5 +218,17 @@
 
             debugStats.CheckOK();
         }
+
+        private int GetThreadPoolSizeOrDefault()
+        {
+            if (customThreadPoolSize.HasValue)
+            {
+                return customThreadPoolSize.Value;
+            }
+            // In systems with many cores, use half of the cores for GrpcThreadPool
+            // and the other half for .NET thread pool. This heuristic definitely needs
+            // more work, but seems to work reasonably well for a start.
+            return Math.Max(MinDefaultThreadPoolSize, Environment.ProcessorCount / 2);
+        }
     }
 }
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs
index f522174..5535186 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs
@@ -57,7 +57,7 @@
         // Completion of a pending unary response if not null.
         TaskCompletionSource<TResponse> unaryResponseTcs;
 
-        // Indicates that steaming call has finished.
+        // Indicates that response streaming call has finished.
         TaskCompletionSource<object> streamingCallFinishedTcs = new TaskCompletionSource<object>();
 
         // Response headers set here once received.
@@ -443,6 +443,19 @@
             }
         }
 
+        protected override void CheckSendingAllowed(bool allowFinished)
+        {
+            base.CheckSendingAllowed(true);
+
+            // throwing RpcException if we already received status on client
+            // side makes the most sense.
+            // Note that this throws even for StatusCode.OK.
+            if (!allowFinished && finishedStatus.HasValue)
+            {
+                throw new RpcException(finishedStatus.Value.Status);
+            }
+        }
+
         /// <summary>
         /// Handles receive status completion for calls with streaming response.
         /// </summary>
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
index 42234dc..4de2370 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
@@ -213,7 +213,7 @@
         {
         }
 
-        protected void CheckSendingAllowed(bool allowFinished)
+        protected virtual void CheckSendingAllowed(bool allowFinished)
         {
             GrpcPreconditions.CheckState(started);
             CheckNotCancelled();
diff --git a/src/csharp/Grpc.Core/Server.cs b/src/csharp/Grpc.Core/Server.cs
index 5b61b7f..d538a46 100644
--- a/src/csharp/Grpc.Core/Server.cs
+++ b/src/csharp/Grpc.Core/Server.cs
@@ -48,6 +48,7 @@
     /// </summary>
     public class Server
     {
+        const int InitialAllowRpcTokenCount = 10;
         static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<Server>();
 
         readonly AtomicCounter activeCallCounter = new AtomicCounter();
@@ -65,7 +66,7 @@
         readonly TaskCompletionSource<object> shutdownTcs = new TaskCompletionSource<object>();
 
         bool startRequested;
-        bool shutdownRequested;
+        volatile bool shutdownRequested;
 
         /// <summary>
         /// Create a new server.
@@ -129,7 +130,13 @@
                 startRequested = true;
                 
                 handle.Start();
-                AllowOneRpc();
+
+                // Starting with more than one AllowOneRpc tokens can significantly increase
+                // unary RPC throughput.
+                for (int i = 0; i < InitialAllowRpcTokenCount; i++)
+                {
+                    AllowOneRpc();
+                }
             }
         }
 
@@ -239,12 +246,9 @@
         /// </summary>
         private void AllowOneRpc()
         {
-            lock (myLock)
+            if (!shutdownRequested)
             {
-                if (!shutdownRequested)
-                {
-                    handle.RequestCall(HandleNewServerRpc, environment);
-                }
+                handle.RequestCall(HandleNewServerRpc, environment);
             }
         }
 
@@ -283,6 +287,8 @@
         /// </summary>
         private void HandleNewServerRpc(bool success, BatchContextSafeHandle ctx)
         {
+			Task.Run(() => AllowOneRpc());
+
             if (success)
             {
                 ServerRpcNew newRpc = ctx.GetServerRpcNew(this);
@@ -290,11 +296,9 @@
                 // after server shutdown, the callback returns with null call
                 if (!newRpc.Call.IsInvalid)
                 {
-                    Task.Run(async () => await HandleCallAsync(newRpc)).ConfigureAwait(false);
+                    HandleCallAsync(newRpc);  // we don't need to await.
                 }
             }
-
-            AllowOneRpc();
         }
 
         /// <summary>
diff --git a/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs b/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
index 875202b..ee11105 100644
--- a/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
+++ b/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
@@ -92,7 +92,7 @@
         public void DivByZero()
         {
             var ex = Assert.Throws<RpcException>(() => client.Div(new DivArgs { Dividend = 0, Divisor = 0 }));
-            Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode);
+            Assert.AreEqual(StatusCode.InvalidArgument, ex.Status.StatusCode);
         }
 
         [Test]
diff --git a/src/csharp/Grpc.Examples/MathExamples.cs b/src/csharp/Grpc.Examples/MathExamples.cs
index 6075420..d260830 100644
--- a/src/csharp/Grpc.Examples/MathExamples.cs
+++ b/src/csharp/Grpc.Examples/MathExamples.cs
@@ -32,6 +32,7 @@
 using System;
 using System.Collections.Generic;
 using System.Threading.Tasks;
+using Grpc.Core;
 using Grpc.Core.Utils;
 
 namespace Math
@@ -109,5 +110,42 @@
             DivReply result = await client.DivAsync(new DivArgs { Dividend = sum.Num_, Divisor = numbers.Count });
             Console.WriteLine("Avg Result: " + result);
         }
+
+        /// <summary>
+        /// Shows how to handle a call ending with non-OK status.
+        /// </summary>
+        public static async Task HandleErrorExample(Math.MathClient client)
+        {
+            try
+            {
+                 DivReply result = await client.DivAsync(new DivArgs { Dividend = 5, Divisor = 0 });
+            }
+            catch (RpcException ex)
+            {
+                Console.WriteLine(string.Format("RPC ended with status {0}", ex.Status));
+            }
+        }
+
+        /// <summary>
+        /// Shows how to send request headers and how to access response headers
+        /// and response trailers.
+        /// </summary>
+        public static async Task MetadataExample(Math.MathClient client)
+        {
+            var requestHeaders = new Metadata
+            {
+                { "custom-header", "custom-value" }
+            };
+
+            var call = client.DivAsync(new DivArgs { Dividend = 5, Divisor = 0 }, requestHeaders);
+
+            // Get response headers
+            Metadata responseHeaders = await call.ResponseHeadersAsync;
+
+            var result = await call;
+
+            // Get response trailers after the call has finished.
+            Metadata responseTrailers = call.GetTrailers();
+        }
     }
 }
diff --git a/src/csharp/Grpc.Examples/MathGrpc.cs b/src/csharp/Grpc.Examples/MathGrpc.cs
index 2d3034d..d700a18 100644
--- a/src/csharp/Grpc.Examples/MathGrpc.cs
+++ b/src/csharp/Grpc.Examples/MathGrpc.cs
@@ -151,25 +151,25 @@
       ///  Div divides args.dividend by args.divisor and returns the quotient and
       ///  remainder.
       /// </summary>
-      Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context);
       /// <summary>
       ///  DivMany accepts an arbitrary number of division args from the client stream
       ///  and sends back the results in the reply stream.  The stream continues until
       ///  the client closes its end; the server does the same after sending all the
       ///  replies.  The stream ends immediately if either end aborts.
       /// </summary>
-      Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context);
       /// <summary>
       ///  Fib generates numbers in the Fibonacci sequence.  If args.limit > 0, Fib
       ///  generates up to limit numbers; otherwise it continues until the call is
       ///  canceled.  Unlike Fib above, Fib has no final FibReply.
       /// </summary>
-      Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context);
       /// <summary>
       ///  Sum sums a stream of numbers, returning the final result once the stream
       ///  is closed.
       /// </summary>
-      Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context);
     }
 
     /// <summary>Base class for server-side implementations of Math</summary>
@@ -179,7 +179,7 @@
       ///  Div divides args.dividend by args.divisor and returns the quotient and
       ///  remainder.
       /// </summary>
-      public virtual Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -190,7 +190,7 @@
       ///  the client closes its end; the server does the same after sending all the
       ///  replies.  The stream ends immediately if either end aborts.
       /// </summary>
-      public virtual Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -200,7 +200,7 @@
       ///  generates up to limit numbers; otherwise it continues until the call is
       ///  canceled.  Unlike Fib above, Fib has no final FibReply.
       /// </summary>
-      public virtual Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -209,7 +209,7 @@
       ///  Sum sums a stream of numbers, returning the final result once the stream
       ///  is closed.
       /// </summary>
-      public virtual Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
diff --git a/src/csharp/Grpc.Examples/MathServiceImpl.cs b/src/csharp/Grpc.Examples/MathServiceImpl.cs
index 79c56e5..a28020f 100644
--- a/src/csharp/Grpc.Examples/MathServiceImpl.cs
+++ b/src/csharp/Grpc.Examples/MathServiceImpl.cs
@@ -52,23 +52,15 @@
 
         public override async Task Fib(FibArgs request, IServerStreamWriter<Num> responseStream, ServerCallContext context)
         {
-            if (request.Limit <= 0)
-            {
-                // keep streaming the sequence until cancelled.
-                IEnumerator<Num> fibEnumerator = FibInternal(long.MaxValue).GetEnumerator();
-                while (!context.CancellationToken.IsCancellationRequested && fibEnumerator.MoveNext())
-                {
-                    await responseStream.WriteAsync(fibEnumerator.Current);
-                    await Task.Delay(100);
-                }
-            }
+            var limit = request.Limit > 0 ? request.Limit : long.MaxValue;
+            var fibEnumerator = FibInternal(limit).GetEnumerator();
 
-            if (request.Limit > 0)
+            // Keep streaming the sequence until the call is cancelled.
+            // Use CancellationToken from ServerCallContext to detect the cancellation.
+            while (!context.CancellationToken.IsCancellationRequested && fibEnumerator.MoveNext())
             {
-                foreach (var num in FibInternal(request.Limit))
-                {
-                    await responseStream.WriteAsync(num);
-                }
+                await responseStream.WriteAsync(fibEnumerator.Current);
+                await Task.Delay(100);
             }
         }
 
@@ -89,6 +81,13 @@
 
         static DivReply DivInternal(DivArgs args)
         {
+            if (args.Divisor == 0)
+            {
+                // One can finish the RPC with non-ok status by throwing RpcException instance.
+                // Alternatively, resulting status can be set using ServerCallContext.Status
+                throw new RpcException(new Status(StatusCode.InvalidArgument, "Division by zero"));
+            }
+
             long quotient = args.Dividend / args.Divisor;
             long remainder = args.Dividend % args.Divisor;
             return new DivReply { Quotient = quotient, Remainder = remainder };
diff --git a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
index 967d117..51c6a39 100644
--- a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
+++ b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
@@ -72,13 +72,13 @@
     [System.Obsolete("Service implementations should inherit from the generated abstract base class instead.")]
     public interface IHealth
     {
-      Task<global::Grpc.Health.V1.HealthCheckResponse> Check(global::Grpc.Health.V1.HealthCheckRequest request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Health.V1.HealthCheckResponse> Check(global::Grpc.Health.V1.HealthCheckRequest request, ServerCallContext context);
     }
 
     /// <summary>Base class for server-side implementations of Health</summary>
     public abstract class HealthBase
     {
-      public virtual Task<global::Grpc.Health.V1.HealthCheckResponse> Check(global::Grpc.Health.V1.HealthCheckRequest request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Health.V1.HealthCheckResponse> Check(global::Grpc.Health.V1.HealthCheckRequest request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
diff --git a/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs b/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs
index b457275..9eaf6bf 100644
--- a/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs
+++ b/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs
@@ -142,8 +142,7 @@
                 for (int i = 0; i < outstandingRpcsPerChannel; i++)
                 {
                     var timer = CreateTimer(loadParams, 1.0 / this.channels.Count / outstandingRpcsPerChannel);
-                    var threadBody = GetThreadBody(channel, timer);
-                    this.runnerTasks.Add(Task.Factory.StartNew(threadBody, TaskCreationOptions.LongRunning));
+                    this.runnerTasks.Add(RunClientAsync(channel, timer));
                 }
             }
         }
@@ -269,38 +268,30 @@
             }
         }
 
-        private Action GetThreadBody(Channel channel, IInterarrivalTimer timer)
+        private Task RunClientAsync(Channel channel, IInterarrivalTimer timer)
         {
             if (payloadConfig.PayloadCase == PayloadConfig.PayloadOneofCase.BytebufParams)
             {
                 GrpcPreconditions.CheckArgument(clientType == ClientType.ASYNC_CLIENT, "Generic client only supports async API");
                 GrpcPreconditions.CheckArgument(rpcType == RpcType.STREAMING, "Generic client only supports streaming calls");
-                return () =>
-                {
-                    RunGenericStreamingAsync(channel, timer).Wait();
-                };
+                return RunGenericStreamingAsync(channel, timer);
             }
 
             GrpcPreconditions.CheckNotNull(payloadConfig.SimpleParams);
             if (clientType == ClientType.SYNC_CLIENT)
             {
                 GrpcPreconditions.CheckArgument(rpcType == RpcType.UNARY, "Sync client can only be used for Unary calls in C#");
-                return () => RunUnary(channel, timer);
+                // create a dedicated thread for the synchronous client
+                return Task.Factory.StartNew(() => RunUnary(channel, timer), TaskCreationOptions.LongRunning);
             }
             else if (clientType == ClientType.ASYNC_CLIENT)
             {
                 switch (rpcType)
                 {
                     case RpcType.UNARY:
-                        return () =>
-                        {
-                            RunUnaryAsync(channel, timer).Wait();
-                        };
+                        return RunUnaryAsync(channel, timer);
                     case RpcType.STREAMING:
-                        return () =>
-                        {
-                            RunStreamingPingPongAsync(channel, timer).Wait();
-                        };
+                        return RunStreamingPingPongAsync(channel, timer);
                 }
             }
             throw new ArgumentException("Unsupported configuration.");
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
index b3b1abf..cff8508 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
@@ -492,6 +492,10 @@
                 {
                     // Deadline was reached before write has started. Eat the exception and continue.
                 }
+                catch (RpcException)
+                {
+                    // Deadline was reached before write has started. Eat the exception and continue.
+                }
 
                 var ex = Assert.ThrowsAsync<RpcException>(async () => await call.ResponseStream.MoveNext());
                 // We can't guarantee the status code always DeadlineExceeded. See issue #2685.
diff --git a/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs b/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
index aa4f1c5..9d31d1c 100644
--- a/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
@@ -112,11 +112,11 @@
       ///  Returns the values of all the gauges that are currently being maintained by
       ///  the service
       /// </summary>
-      Task GetAllGauges(global::Grpc.Testing.EmptyMessage request, IServerStreamWriter<global::Grpc.Testing.GaugeResponse> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task GetAllGauges(global::Grpc.Testing.EmptyMessage request, IServerStreamWriter<global::Grpc.Testing.GaugeResponse> responseStream, ServerCallContext context);
       /// <summary>
       ///  Returns the value of one gauge
       /// </summary>
-      Task<global::Grpc.Testing.GaugeResponse> GetGauge(global::Grpc.Testing.GaugeRequest request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.GaugeResponse> GetGauge(global::Grpc.Testing.GaugeRequest request, ServerCallContext context);
     }
 
     /// <summary>Base class for server-side implementations of MetricsService</summary>
@@ -126,7 +126,7 @@
       ///  Returns the values of all the gauges that are currently being maintained by
       ///  the service
       /// </summary>
-      public virtual Task GetAllGauges(global::Grpc.Testing.EmptyMessage request, IServerStreamWriter<global::Grpc.Testing.GaugeResponse> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task GetAllGauges(global::Grpc.Testing.EmptyMessage request, IServerStreamWriter<global::Grpc.Testing.GaugeResponse> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -134,7 +134,7 @@
       /// <summary>
       ///  Returns the value of one gauge
       /// </summary>
-      public virtual Task<global::Grpc.Testing.GaugeResponse> GetGauge(global::Grpc.Testing.GaugeRequest request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.GaugeResponse> GetGauge(global::Grpc.Testing.GaugeRequest request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
diff --git a/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs b/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs
index 42bf5e0..f7071eb 100644
--- a/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs
@@ -111,12 +111,12 @@
       ///  One request followed by one response.
       ///  The server returns the client payload as-is.
       /// </summary>
-      Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context);
       /// <summary>
       ///  One request followed by one response.
       ///  The server returns the client payload as-is.
       /// </summary>
-      Task StreamingCall(IAsyncStreamReader<global::Grpc.Testing.SimpleRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.SimpleResponse> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task StreamingCall(IAsyncStreamReader<global::Grpc.Testing.SimpleRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.SimpleResponse> responseStream, ServerCallContext context);
     }
 
     /// <summary>Base class for server-side implementations of BenchmarkService</summary>
@@ -126,7 +126,7 @@
       ///  One request followed by one response.
       ///  The server returns the client payload as-is.
       /// </summary>
-      public virtual Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -135,7 +135,7 @@
       ///  One request followed by one response.
       ///  The server returns the client payload as-is.
       /// </summary>
-      public virtual Task StreamingCall(IAsyncStreamReader<global::Grpc.Testing.SimpleRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.SimpleResponse> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task StreamingCall(IAsyncStreamReader<global::Grpc.Testing.SimpleRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.SimpleResponse> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -375,7 +375,7 @@
       ///  and once the shutdown has finished, the OK status is sent to terminate
       ///  this RPC.
       /// </summary>
-      Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context);
       /// <summary>
       ///  Start client with specified workload.
       ///  First request sent specifies the ClientConfig followed by ClientStatus
@@ -384,15 +384,15 @@
       ///  and once the shutdown has finished, the OK status is sent to terminate
       ///  this RPC.
       /// </summary>
-      Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context);
       /// <summary>
       ///  Just return the core count - unary call
       /// </summary>
-      Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context);
       /// <summary>
       ///  Quit this worker
       /// </summary>
-      Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context);
     }
 
     /// <summary>Base class for server-side implementations of WorkerService</summary>
@@ -406,7 +406,7 @@
       ///  and once the shutdown has finished, the OK status is sent to terminate
       ///  this RPC.
       /// </summary>
-      public virtual Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -419,7 +419,7 @@
       ///  and once the shutdown has finished, the OK status is sent to terminate
       ///  this RPC.
       /// </summary>
-      public virtual Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -427,7 +427,7 @@
       /// <summary>
       ///  Just return the core count - unary call
       /// </summary>
-      public virtual Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -435,7 +435,7 @@
       /// <summary>
       ///  Quit this worker
       /// </summary>
-      public virtual Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
diff --git a/src/csharp/Grpc.IntegrationTesting/StressTestClient.cs b/src/csharp/Grpc.IntegrationTesting/StressTestClient.cs
index 8db691c..4d6ca7e 100644
--- a/src/csharp/Grpc.IntegrationTesting/StressTestClient.cs
+++ b/src/csharp/Grpc.IntegrationTesting/StressTestClient.cs
@@ -311,7 +311,7 @@
                 var snapshot = histogram.GetSnapshot(true);
                 var elapsedSnapshot = wallClockStopwatch.GetElapsedSnapshot(true);
 
-                return (long) (snapshot.Count / elapsedSnapshot.Seconds);
+                return (long) (snapshot.Count / elapsedSnapshot.TotalSeconds);
             }
         }
     }
diff --git a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
index f1878cb..cf43a77 100644
--- a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
@@ -196,34 +196,34 @@
       /// <summary>
       ///  One empty request followed by one empty response.
       /// </summary>
-      Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context);
       /// <summary>
       ///  One request followed by one response.
       /// </summary>
-      Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context);
       /// <summary>
       ///  One request followed by a sequence of responses (streamed download).
       ///  The server returns the payload with client desired type and sizes.
       /// </summary>
-      Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
       /// <summary>
       ///  A sequence of requests followed by one response (streamed upload).
       ///  The server returns the aggregated size of client payload as the result.
       /// </summary>
-      Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context);
       /// <summary>
       ///  A sequence of requests with each request served by the server immediately.
       ///  As one request could lead to multiple responses, this interface
       ///  demonstrates the idea of full duplexing.
       /// </summary>
-      Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
       /// <summary>
       ///  A sequence of requests followed by a sequence of responses.
       ///  The server buffers all the client requests and then serves them in order. A
       ///  stream of responses are returned to the client when the server starts with
       ///  first request.
       /// </summary>
-      Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
+      global::System.Threading.Tasks.Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
     }
 
     /// <summary>Base class for server-side implementations of TestService</summary>
@@ -232,7 +232,7 @@
       /// <summary>
       ///  One empty request followed by one empty response.
       /// </summary>
-      public virtual Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -240,7 +240,7 @@
       /// <summary>
       ///  One request followed by one response.
       /// </summary>
-      public virtual Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -249,7 +249,7 @@
       ///  One request followed by a sequence of responses (streamed download).
       ///  The server returns the payload with client desired type and sizes.
       /// </summary>
-      public virtual Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -258,7 +258,7 @@
       ///  A sequence of requests followed by one response (streamed upload).
       ///  The server returns the aggregated size of client payload as the result.
       /// </summary>
-      public virtual Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -268,7 +268,7 @@
       ///  As one request could lead to multiple responses, this interface
       ///  demonstrates the idea of full duplexing.
       /// </summary>
-      public virtual Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -279,7 +279,7 @@
       ///  stream of responses are returned to the client when the server starts with
       ///  first request.
       /// </summary>
-      public virtual Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -525,7 +525,7 @@
       /// <summary>
       ///  A call that no server should implement
       /// </summary>
-      Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context);
     }
 
     /// <summary>Base class for server-side implementations of UnimplementedService</summary>
@@ -534,7 +534,7 @@
       /// <summary>
       ///  A call that no server should implement
       /// </summary>
-      public virtual Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
@@ -669,19 +669,19 @@
     [System.Obsolete("Service implementations should inherit from the generated abstract base class instead.")]
     public interface IReconnectService
     {
-      Task<global::Grpc.Testing.Empty> Start(global::Grpc.Testing.ReconnectParams request, ServerCallContext context);
-      Task<global::Grpc.Testing.ReconnectInfo> Stop(global::Grpc.Testing.Empty request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> Start(global::Grpc.Testing.ReconnectParams request, ServerCallContext context);
+      global::System.Threading.Tasks.Task<global::Grpc.Testing.ReconnectInfo> Stop(global::Grpc.Testing.Empty request, ServerCallContext context);
     }
 
     /// <summary>Base class for server-side implementations of ReconnectService</summary>
     public abstract class ReconnectServiceBase
     {
-      public virtual Task<global::Grpc.Testing.Empty> Start(global::Grpc.Testing.ReconnectParams request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> Start(global::Grpc.Testing.ReconnectParams request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
 
-      public virtual Task<global::Grpc.Testing.ReconnectInfo> Stop(global::Grpc.Testing.Empty request, ServerCallContext context)
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.ReconnectInfo> Stop(global::Grpc.Testing.Empty request, ServerCallContext context)
       {
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
diff --git a/src/csharp/build_packages.bat b/src/csharp/build_packages.bat
index 7520b0f..28e4262 100644
--- a/src/csharp/build_packages.bat
+++ b/src/csharp/build_packages.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Builds gRPC NuGet packages
 
 @rem Current package versions
diff --git a/src/csharp/buildall.bat b/src/csharp/buildall.bat
index f800756..0beb30c 100644
--- a/src/csharp/buildall.bat
+++ b/src/csharp/buildall.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Convenience script to build gRPC C# from command line
 
 setlocal
diff --git a/src/node/test/math/math_server.js b/src/node/test/math/math_server.js
index fa05ed0..5e3d1dd 100644
--- a/src/node/test/math/math_server.js
+++ b/src/node/test/math/math_server.js
@@ -68,7 +68,7 @@
 function mathFib(stream) {
   // Here, call is a standard writable Node object Stream
   var previous = 0, current = 1;
-  for (var i = 0; i < stream.request.limit; i++) {
+  for (var i = 0; i < stream.request.getLimit(); i++) {
     var response = new math.Num();
     response.setNum(current);
     stream.write(response);
diff --git a/src/node/tools/bin/protoc.js b/src/node/tools/bin/protoc.js
index 4d50c94..53fc5dc 100755
--- a/src/node/tools/bin/protoc.js
+++ b/src/node/tools/bin/protoc.js
@@ -47,10 +47,11 @@
 
 var protoc = path.resolve(__dirname, 'protoc' + exe_ext);
 
-execFile(protoc, process.argv.slice(2), function(error, stdout, stderr) {
+var child_process = execFile(protoc, process.argv.slice(2), function(error, stdout, stderr) {
   if (error) {
     throw error;
   }
-  console.log(stdout);
-  console.log(stderr);
 });
+
+child_process.stdout.pipe(process.stdout);
+child_process.stderr.pipe(process.stderr);
diff --git a/src/node/tools/bin/protoc_plugin.js b/src/node/tools/bin/protoc_plugin.js
index 281ec0d..857882e 100755
--- a/src/node/tools/bin/protoc_plugin.js
+++ b/src/node/tools/bin/protoc_plugin.js
@@ -47,10 +47,12 @@
 
 var plugin = path.resolve(__dirname, 'grpc_node_plugin' + exe_ext);
 
-execFile(plugin, process.argv.slice(2), function(error, stdout, stderr) {
+var child_process = execFile(plugin, process.argv.slice(2), {encoding: 'buffer'}, function(error, stdout, stderr) {
   if (error) {
     throw error;
   }
-  console.log(stdout);
-  console.log(stderr);
 });
+
+process.stdin.pipe(child_process.stdin);
+child_process.stdout.pipe(process.stdout);
+child_process.stderr.pipe(process.stderr);
diff --git a/src/node/tools/package.json b/src/node/tools/package.json
index efdfa81..d4849c2 100644
--- a/src/node/tools/package.json
+++ b/src/node/tools/package.json
@@ -16,8 +16,8 @@
     }
   ],
   "bin": {
-    "grpc-tools-protoc": "./bin/protoc.js",
-    "grpc-tools-plugin": "./bin/protoc_plugin.js"
+    "grpc_tools_node_protoc": "./bin/protoc.js",
+    "grpc_tools_node_protoc_plugin": "./bin/protoc_plugin.js"
   },
   "scripts": {
     "install": "./node_modules/.bin/node-pre-gyp install"
diff --git a/src/objective-c/BoringSSL.podspec b/src/objective-c/BoringSSL.podspec
index 4a6df91..7d1de80 100644
--- a/src/objective-c/BoringSSL.podspec
+++ b/src/objective-c/BoringSSL.podspec
@@ -31,7 +31,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'BoringSSL'
-  s.version  = '2.0'
+  s.version  = '3.0'
   s.summary  = 'BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.'
   # Adapted from the homepage:
   s.description = <<-DESC
@@ -67,7 +67,7 @@
   s.authors  = 'Adam Langley', 'David Benjamin', 'Matt Braithwaite'
 
   s.source = { :git => 'https://boringssl.googlesource.com/boringssl',
-               :tag => 'version_for_cocoapods_2.0' }
+               :tag => 'version_for_cocoapods_3.0' }
 
   s.source_files = 'ssl/*.{h,c}',
                    'ssl/**/*.{h,c}',
diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c
index a0f3d16..884130e 100644
--- a/src/php/ext/grpc/call.c
+++ b/src/php/ext/grpc/call.c
@@ -89,19 +89,20 @@
 
 /* Wraps a grpc_call struct in a PHP object. Owned indicates whether the struct
    should be destroyed at the end of the object's lifecycle */
-zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned) {
+zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned TSRMLS_DC) {
   zval *call_object;
   MAKE_STD_ZVAL(call_object);
   object_init_ex(call_object, grpc_ce_call);
   wrapped_grpc_call *call =
       (wrapped_grpc_call *)zend_object_store_get_object(call_object TSRMLS_CC);
   call->wrapped = wrapped;
+  call->owned = owned;
   return call_object;
 }
 
 /* Creates and returns a PHP array object with the data in a
  * grpc_metadata_array. Returns NULL on failure */
-zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array) {
+zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array TSRMLS_DC) {
   int count = metadata_array->count;
   grpc_metadata *elements = metadata_array->metadata;
   int i;
@@ -126,7 +127,7 @@
     if (zend_hash_find(array_hash, str_key, key_len, (void **)data) ==
         SUCCESS) {
       if (Z_TYPE_P(*data) != IS_ARRAY) {
-        zend_throw_exception(zend_exception_get_default(),
+        zend_throw_exception(zend_exception_get_default(TSRMLS_C),
                              "Metadata hash somehow contains wrong types.",
                              1 TSRMLS_CC);
         efree(str_key);
@@ -453,7 +454,7 @@
         add_property_bool(result, "send_status", true);
         break;
       case GRPC_OP_RECV_INITIAL_METADATA:
-        array = grpc_parse_metadata_array(&recv_metadata);
+        array = grpc_parse_metadata_array(&recv_metadata TSRMLS_CC);
         add_property_zval(result, "metadata", array);
         Z_DELREF_P(array);
         break;
@@ -469,7 +470,7 @@
       case GRPC_OP_RECV_STATUS_ON_CLIENT:
         MAKE_STD_ZVAL(recv_status);
         object_init(recv_status);
-        array = grpc_parse_metadata_array(&recv_trailing_metadata);
+        array = grpc_parse_metadata_array(&recv_trailing_metadata TSRMLS_CC);
         add_property_zval(recv_status, "metadata", array);
         Z_DELREF_P(array);
         add_property_long(recv_status, "code", status);
diff --git a/src/php/ext/grpc/call.h b/src/php/ext/grpc/call.h
index 73efada..36c5f2d 100644
--- a/src/php/ext/grpc/call.h
+++ b/src/php/ext/grpc/call.h
@@ -60,11 +60,11 @@
 void grpc_init_call(TSRMLS_D);
 
 /* Creates a Call object that wraps the given grpc_call struct */
-zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned);
+zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned TSRMLS_DC);
 
 /* Creates and returns a PHP associative array of metadata from a C array of
  * call metadata */
-zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array);
+zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array TSRMLS_DC);
 
 /* Populates a grpc_metadata_array with the data in a PHP array object.
    Returns true on success and false on failure */
diff --git a/src/php/ext/grpc/call_credentials.c b/src/php/ext/grpc/call_credentials.c
index 285c4e7..ec0e6b9 100644
--- a/src/php/ext/grpc/call_credentials.c
+++ b/src/php/ext/grpc/call_credentials.c
@@ -83,7 +83,7 @@
   return retval;
 }
 
-zval *grpc_php_wrap_call_credentials(grpc_call_credentials *wrapped) {
+zval *grpc_php_wrap_call_credentials(grpc_call_credentials *wrapped TSRMLS_DC) {
   zval *credentials_object;
   MAKE_STD_ZVAL(credentials_object);
   object_init_ex(credentials_object, grpc_ce_call_credentials);
@@ -122,7 +122,7 @@
   grpc_call_credentials *creds =
       grpc_composite_call_credentials_create(cred1->wrapped, cred2->wrapped,
                                              NULL);
-  zval *creds_object = grpc_php_wrap_call_credentials(creds);
+  zval *creds_object = grpc_php_wrap_call_credentials(creds TSRMLS_CC);
   RETURN_DESTROY_ZVAL(creds_object);
 }
 
@@ -141,7 +141,7 @@
   memset(fci_cache, 0, sizeof(zend_fcall_info_cache));
 
   /* "f" == 1 function */
-  if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", fci,
+  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", fci,
                             fci_cache,
                             fci->params,
                             fci->param_count) == FAILURE) {
@@ -167,7 +167,7 @@
 
   grpc_call_credentials *creds = grpc_metadata_credentials_create_from_plugin(
       plugin, NULL);
-  zval *creds_object = grpc_php_wrap_call_credentials(creds);
+  zval *creds_object = grpc_php_wrap_call_credentials(creds TSRMLS_CC);
   RETURN_DESTROY_ZVAL(creds_object);
 }
 
@@ -175,6 +175,8 @@
 void plugin_get_metadata(void *ptr, grpc_auth_metadata_context context,
                          grpc_credentials_plugin_metadata_cb cb,
                          void *user_data) {
+  TSRMLS_FETCH();
+
   plugin_state *state = (plugin_state *)ptr;
 
   /* prepare to call the user callback function with info from the
@@ -192,7 +194,7 @@
   state->fci->retval_ptr_ptr = &retval;
 
   /* call the user callback function */
-  zend_call_function(state->fci, state->fci_cache);
+  zend_call_function(state->fci, state->fci_cache TSRMLS_CC);
 
   if (Z_TYPE_P(retval) != IS_ARRAY) {
     zend_throw_exception(spl_ce_InvalidArgumentException,
diff --git a/src/php/ext/grpc/channel.c b/src/php/ext/grpc/channel.c
index eba2c81..9f04319 100644
--- a/src/php/ext/grpc/channel.c
+++ b/src/php/ext/grpc/channel.c
@@ -84,7 +84,7 @@
   return retval;
 }
 
-void php_grpc_read_args_array(zval *args_array, grpc_channel_args *args) {
+void php_grpc_read_args_array(zval *args_array, grpc_channel_args *args TSRMLS_DC) {
   HashTable *array_hash;
   HashPosition array_pointer;
   int args_index;
@@ -168,7 +168,7 @@
       zend_hash_del(array_hash, "credentials", 12);
     }
   }
-  php_grpc_read_args_array(args_array, &args);
+  php_grpc_read_args_array(args_array, &args TSRMLS_CC);
   if (creds == NULL) {
     channel->wrapped = grpc_insecure_channel_create(target, &args, NULL);
   } else {
diff --git a/src/php/ext/grpc/channel.h b/src/php/ext/grpc/channel.h
index 78a16ed..cc5823e 100755
--- a/src/php/ext/grpc/channel.h
+++ b/src/php/ext/grpc/channel.h
@@ -59,6 +59,6 @@
 void grpc_init_channel(TSRMLS_D);
 
 /* Iterates through a PHP array and populates args with the contents */
-void php_grpc_read_args_array(zval *args_array, grpc_channel_args *args);
+void php_grpc_read_args_array(zval *args_array, grpc_channel_args *args TSRMLS_DC);
 
 #endif /* NET_GRPC_PHP_GRPC_CHANNEL_H_ */
diff --git a/src/php/ext/grpc/channel_credentials.c b/src/php/ext/grpc/channel_credentials.c
index ae9a989..5c53737 100644
--- a/src/php/ext/grpc/channel_credentials.c
+++ b/src/php/ext/grpc/channel_credentials.c
@@ -82,7 +82,7 @@
   return retval;
 }
 
-zval *grpc_php_wrap_channel_credentials(grpc_channel_credentials *wrapped) {
+zval *grpc_php_wrap_channel_credentials(grpc_channel_credentials *wrapped TSRMLS_DC) {
   zval *credentials_object;
   MAKE_STD_ZVAL(credentials_object);
   object_init_ex(credentials_object, grpc_ce_channel_credentials);
@@ -99,7 +99,7 @@
  */
 PHP_METHOD(ChannelCredentials, createDefault) {
   grpc_channel_credentials *creds = grpc_google_default_credentials_create();
-  zval *creds_object = grpc_php_wrap_channel_credentials(creds);
+  zval *creds_object = grpc_php_wrap_channel_credentials(creds TSRMLS_CC);
   RETURN_DESTROY_ZVAL(creds_object);
 }
 
@@ -134,7 +134,7 @@
   grpc_channel_credentials *creds = grpc_ssl_credentials_create(
       pem_root_certs,
       pem_key_cert_pair.private_key == NULL ? NULL : &pem_key_cert_pair, NULL);
-  zval *creds_object = grpc_php_wrap_channel_credentials(creds);
+  zval *creds_object = grpc_php_wrap_channel_credentials(creds TSRMLS_CC);
   RETURN_DESTROY_ZVAL(creds_object);
 }
 
@@ -165,7 +165,7 @@
   grpc_channel_credentials *creds =
       grpc_composite_channel_credentials_create(cred1->wrapped, cred2->wrapped,
                                                 NULL);
-  zval *creds_object = grpc_php_wrap_channel_credentials(creds);
+  zval *creds_object = grpc_php_wrap_channel_credentials(creds TSRMLS_CC);
   RETURN_DESTROY_ZVAL(creds_object);
 }
 
diff --git a/src/php/ext/grpc/server.c b/src/php/ext/grpc/server.c
index ca129e7..6df2e4f 100644
--- a/src/php/ext/grpc/server.c
+++ b/src/php/ext/grpc/server.c
@@ -111,7 +111,7 @@
   if (args_array == NULL) {
     server->wrapped = grpc_server_create(NULL, NULL);
   } else {
-    php_grpc_read_args_array(args_array, &args);
+    php_grpc_read_args_array(args_array, &args TSRMLS_CC);
     server->wrapped = grpc_server_create(&args, NULL);
     efree(args.args);
   }
@@ -154,12 +154,12 @@
                          1 TSRMLS_CC);
     goto cleanup;
   }
-  add_property_zval(result, "call", grpc_php_wrap_call(call, true));
+  add_property_zval(result, "call", grpc_php_wrap_call(call, true TSRMLS_CC));
   add_property_string(result, "method", details.method, true);
   add_property_string(result, "host", details.host, true);
   add_property_zval(result, "absolute_deadline",
-                    grpc_php_wrap_timeval(details.deadline));
-  add_property_zval(result, "metadata", grpc_parse_metadata_array(&metadata));
+                    grpc_php_wrap_timeval(details.deadline TSRMLS_CC));
+  add_property_zval(result, "metadata", grpc_parse_metadata_array(&metadata TSRMLS_CC));
 cleanup:
   grpc_call_details_destroy(&details);
   grpc_metadata_array_destroy(&metadata);
diff --git a/src/php/ext/grpc/server_credentials.c b/src/php/ext/grpc/server_credentials.c
index f3951b3..505da10 100644
--- a/src/php/ext/grpc/server_credentials.c
+++ b/src/php/ext/grpc/server_credentials.c
@@ -81,7 +81,7 @@
   return retval;
 }
 
-zval *grpc_php_wrap_server_credentials(grpc_server_credentials *wrapped) {
+zval *grpc_php_wrap_server_credentials(grpc_server_credentials *wrapped TSRMLS_DC) {
   zval *server_credentials_object;
   MAKE_STD_ZVAL(server_credentials_object);
   object_init_ex(server_credentials_object, grpc_ce_server_credentials);
@@ -120,7 +120,7 @@
   grpc_server_credentials *creds = grpc_ssl_server_credentials_create_ex(
       pem_root_certs, &pem_key_cert_pair, 1,
       GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE, NULL);
-  zval *creds_object = grpc_php_wrap_server_credentials(creds);
+  zval *creds_object = grpc_php_wrap_server_credentials(creds TSRMLS_CC);
   RETURN_DESTROY_ZVAL(creds_object);
 }
 
diff --git a/src/php/ext/grpc/timeval.c b/src/php/ext/grpc/timeval.c
index 4fd069e..5e24216 100644
--- a/src/php/ext/grpc/timeval.c
+++ b/src/php/ext/grpc/timeval.c
@@ -72,7 +72,7 @@
   return retval;
 }
 
-zval *grpc_php_wrap_timeval(gpr_timespec wrapped) {
+zval *grpc_php_wrap_timeval(gpr_timespec wrapped TSRMLS_DC) {
   zval *timeval_object;
   MAKE_STD_ZVAL(timeval_object);
   object_init_ex(timeval_object, grpc_ce_timeval);
@@ -122,7 +122,7 @@
   wrapped_grpc_timeval *other =
       (wrapped_grpc_timeval *)zend_object_store_get_object(other_obj TSRMLS_CC);
   zval *sum =
-      grpc_php_wrap_timeval(gpr_time_add(self->wrapped, other->wrapped));
+      grpc_php_wrap_timeval(gpr_time_add(self->wrapped, other->wrapped) TSRMLS_CC);
   RETURN_DESTROY_ZVAL(sum);
 }
 
@@ -146,7 +146,7 @@
   wrapped_grpc_timeval *other =
       (wrapped_grpc_timeval *)zend_object_store_get_object(other_obj TSRMLS_CC);
   zval *diff =
-      grpc_php_wrap_timeval(gpr_time_sub(self->wrapped, other->wrapped));
+      grpc_php_wrap_timeval(gpr_time_sub(self->wrapped, other->wrapped) TSRMLS_CC);
   RETURN_DESTROY_ZVAL(diff);
 }
 
@@ -208,7 +208,7 @@
  * @return Timeval The current time
  */
 PHP_METHOD(Timeval, now) {
-  zval *now = grpc_php_wrap_timeval(gpr_now(GPR_CLOCK_REALTIME));
+  zval *now = grpc_php_wrap_timeval(gpr_now(GPR_CLOCK_REALTIME) TSRMLS_CC);
   RETURN_DESTROY_ZVAL(now);
 }
 
@@ -218,7 +218,7 @@
  */
 PHP_METHOD(Timeval, zero) {
   zval *grpc_php_timeval_zero =
-      grpc_php_wrap_timeval(gpr_time_0(GPR_CLOCK_REALTIME));
+      grpc_php_wrap_timeval(gpr_time_0(GPR_CLOCK_REALTIME) TSRMLS_CC);
   RETURN_ZVAL(grpc_php_timeval_zero,
               false, /* Copy original before returning? */
               true /* Destroy original before returning */);
@@ -230,7 +230,7 @@
  */
 PHP_METHOD(Timeval, infFuture) {
   zval *grpc_php_timeval_inf_future =
-      grpc_php_wrap_timeval(gpr_inf_future(GPR_CLOCK_REALTIME));
+      grpc_php_wrap_timeval(gpr_inf_future(GPR_CLOCK_REALTIME) TSRMLS_CC);
   RETURN_DESTROY_ZVAL(grpc_php_timeval_inf_future);
 }
 
@@ -240,7 +240,7 @@
  */
 PHP_METHOD(Timeval, infPast) {
   zval *grpc_php_timeval_inf_past =
-      grpc_php_wrap_timeval(gpr_inf_past(GPR_CLOCK_REALTIME));
+      grpc_php_wrap_timeval(gpr_inf_past(GPR_CLOCK_REALTIME) TSRMLS_CC);
   RETURN_DESTROY_ZVAL(grpc_php_timeval_inf_past);
 }
 
diff --git a/src/php/ext/grpc/timeval.h b/src/php/ext/grpc/timeval.h
index 07cef03..7456eb6 100755
--- a/src/php/ext/grpc/timeval.h
+++ b/src/php/ext/grpc/timeval.h
@@ -63,6 +63,6 @@
 void grpc_shutdown_timeval(TSRMLS_D);
 
 /* Creates a Timeval object that wraps the given timeval struct */
-zval *grpc_php_wrap_timeval(gpr_timespec wrapped);
+zval *grpc_php_wrap_timeval(gpr_timespec wrapped TSRMLS_DC);
 
 #endif /* NET_GRPC_PHP_GRPC_TIMEVAL_H_ */
diff --git a/src/php/tests/interop/interop_client.php b/src/php/tests/interop/interop_client.php
index aebf80f..565bfce 100755
--- a/src/php/tests/interop/interop_client.php
+++ b/src/php/tests/interop/interop_client.php
@@ -1,7 +1,7 @@
 <?php
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -388,141 +388,158 @@
              'Call status was not DEADLINE_EXCEEDED');
 }
 
-$args = getopt('', ['server_host:', 'server_port:', 'test_case:',
-                    'use_tls::', 'use_test_ca::',
-                    'server_host_override:', 'oauth_scope:',
-                    'default_service_account:', ]);
-if (!array_key_exists('server_host', $args)) {
-    throw new Exception('Missing argument: --server_host is required');
-}
-if (!array_key_exists('server_port', $args)) {
-    throw new Exception('Missing argument: --server_port is required');
-}
-if (!array_key_exists('test_case', $args)) {
-    throw new Exception('Missing argument: --test_case is required');
-}
-
-if ($args['server_port'] == 443) {
-    $server_address = $args['server_host'];
-} else {
-    $server_address = $args['server_host'].':'.$args['server_port'];
-}
-
-$test_case = $args['test_case'];
-
-$host_override = 'foo.test.google.fr';
-if (array_key_exists('server_host_override', $args)) {
-    $host_override = $args['server_host_override'];
-}
-
-$use_tls = false;
-if (array_key_exists('use_tls', $args) &&
-    $args['use_tls'] != 'false') {
-    $use_tls = true;
-}
-
-$use_test_ca = false;
-if (array_key_exists('use_test_ca', $args) &&
-    $args['use_test_ca'] != 'false') {
-    $use_test_ca = true;
-}
-
-$opts = [];
-
-if ($use_tls) {
-    if ($use_test_ca) {
-        $ssl_credentials = Grpc\ChannelCredentials::createSsl(
-            file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
-    } else {
-        $ssl_credentials = Grpc\ChannelCredentials::createSsl();
+function _makeStub($args)
+{
+    if (!array_key_exists('server_host', $args)) {
+        throw new Exception('Missing argument: --server_host is required');
     }
-    $opts['credentials'] = $ssl_credentials;
-    $opts['grpc.ssl_target_name_override'] = $host_override;
-} else {
-    $opts['credentials'] = Grpc\ChannelCredentials::createInsecure();
-}
+    if (!array_key_exists('server_port', $args)) {
+        throw new Exception('Missing argument: --server_port is required');
+    }
+    if (!array_key_exists('test_case', $args)) {
+        throw new Exception('Missing argument: --test_case is required');
+    }
 
-if (in_array($test_case, ['service_account_creds',
-    'compute_engine_creds', 'jwt_token_creds', ])) {
-    if ($test_case == 'jwt_token_creds') {
-        $auth_credentials = ApplicationDefaultCredentials::getCredentials();
+    if ($args['server_port'] == 443) {
+        $server_address = $args['server_host'];
     } else {
+        $server_address = $args['server_host'].':'.$args['server_port'];
+    }
+
+    $test_case = $args['test_case'];
+
+    $host_override = 'foo.test.google.fr';
+    if (array_key_exists('server_host_override', $args)) {
+        $host_override = $args['server_host_override'];
+    }
+
+    $use_tls = false;
+    if (array_key_exists('use_tls', $args) &&
+        $args['use_tls'] != 'false') {
+        $use_tls = true;
+    }
+
+    $use_test_ca = false;
+    if (array_key_exists('use_test_ca', $args) &&
+        $args['use_test_ca'] != 'false') {
+        $use_test_ca = true;
+    }
+
+    $opts = [];
+
+    if ($use_tls) {
+        if ($use_test_ca) {
+            $ssl_credentials = Grpc\ChannelCredentials::createSsl(
+                file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
+        } else {
+            $ssl_credentials = Grpc\ChannelCredentials::createSsl();
+        }
+        $opts['credentials'] = $ssl_credentials;
+        $opts['grpc.ssl_target_name_override'] = $host_override;
+    } else {
+        $opts['credentials'] = Grpc\ChannelCredentials::createInsecure();
+    }
+
+    if (in_array($test_case, ['service_account_creds',
+                              'compute_engine_creds', 'jwt_token_creds', ])) {
+        if ($test_case == 'jwt_token_creds') {
+            $auth_credentials = ApplicationDefaultCredentials::getCredentials();
+        } else {
+            $auth_credentials = ApplicationDefaultCredentials::getCredentials(
+                $args['oauth_scope']
+            );
+        }
+        $opts['update_metadata'] = $auth_credentials->getUpdateMetadataFunc();
+    }
+
+    if ($test_case == 'oauth2_auth_token') {
         $auth_credentials = ApplicationDefaultCredentials::getCredentials(
             $args['oauth_scope']
         );
+        $token = $auth_credentials->fetchAuthToken();
+        $update_metadata =
+            function ($metadata,
+                      $authUri = null,
+                      ClientInterface $client = null) use ($token) {
+                $metadata_copy = $metadata;
+                $metadata_copy[CredentialsLoader::AUTH_METADATA_KEY] =
+                    [sprintf('%s %s',
+                             $token['token_type'],
+                             $token['access_token'])];
+
+                return $metadata_copy;
+            };
+        $opts['update_metadata'] = $update_metadata;
     }
-    $opts['update_metadata'] = $auth_credentials->getUpdateMetadataFunc();
+
+    $stub = new grpc\testing\TestServiceClient($server_address, $opts);
+
+    return $stub;
 }
 
-if ($test_case == 'oauth2_auth_token') {
-    $auth_credentials = ApplicationDefaultCredentials::getCredentials(
-        $args['oauth_scope']
-    );
-    $token = $auth_credentials->fetchAuthToken();
-    $update_metadata =
-        function ($metadata,
-                  $authUri = null,
-                  ClientInterface $client = null) use ($token) {
-            $metadata_copy = $metadata;
-            $metadata_copy[CredentialsLoader::AUTH_METADATA_KEY] =
-                [sprintf('%s %s',
-                         $token['token_type'],
-                         $token['access_token'])];
+function interop_main($args, $stub = false) {
+    if (!$stub) {
+        $stub = _makeStub($args);
+    }
 
-            return $metadata_copy;
-        };
-    $opts['update_metadata'] = $update_metadata;
+    $test_case = $args['test_case'];
+    echo "Running test case $test_case\n";
+
+    switch ($test_case) {
+        case 'empty_unary':
+            emptyUnary($stub);
+            break;
+        case 'large_unary':
+            largeUnary($stub);
+            break;
+        case 'client_streaming':
+            clientStreaming($stub);
+            break;
+        case 'server_streaming':
+            serverStreaming($stub);
+            break;
+        case 'ping_pong':
+            pingPong($stub);
+            break;
+        case 'empty_stream':
+            emptyStream($stub);
+            break;
+        case 'cancel_after_begin':
+            cancelAfterBegin($stub);
+            break;
+        case 'cancel_after_first_response':
+            cancelAfterFirstResponse($stub);
+            break;
+        case 'timeout_on_sleeping_server':
+            timeoutOnSleepingServer($stub);
+            break;
+        case 'service_account_creds':
+            serviceAccountCreds($stub, $args);
+            break;
+        case 'compute_engine_creds':
+            computeEngineCreds($stub, $args);
+            break;
+        case 'jwt_token_creds':
+            jwtTokenCreds($stub, $args);
+            break;
+        case 'oauth2_auth_token':
+            oauth2AuthToken($stub, $args);
+            break;
+        case 'per_rpc_creds':
+            perRpcCreds($stub, $args);
+            break;
+        default:
+            echo "Unsupported test case $test_case\n";
+            exit(1);
+    }
+
+    return $stub;
 }
 
-$stub = new grpc\testing\TestServiceClient($server_address, $opts);
-
-echo "Connecting to $server_address\n";
-echo "Running test case $test_case\n";
-
-switch ($test_case) {
-    case 'empty_unary':
-        emptyUnary($stub);
-        break;
-    case 'large_unary':
-        largeUnary($stub);
-        break;
-    case 'client_streaming':
-        clientStreaming($stub);
-        break;
-    case 'server_streaming':
-        serverStreaming($stub);
-        break;
-    case 'ping_pong':
-        pingPong($stub);
-        break;
-    case 'empty_stream':
-        emptyStream($stub);
-        break;
-    case 'cancel_after_begin':
-        cancelAfterBegin($stub);
-        break;
-    case 'cancel_after_first_response':
-        cancelAfterFirstResponse($stub);
-        break;
-    case 'timeout_on_sleeping_server':
-        timeoutOnSleepingServer($stub);
-        break;
-    case 'service_account_creds':
-        serviceAccountCreds($stub, $args);
-        break;
-    case 'compute_engine_creds':
-        computeEngineCreds($stub, $args);
-        break;
-    case 'jwt_token_creds':
-        jwtTokenCreds($stub, $args);
-        break;
-    case 'oauth2_auth_token':
-        oauth2AuthToken($stub, $args);
-        break;
-    case 'per_rpc_creds':
-        perRpcCreds($stub, $args);
-        break;
-    default:
-        echo "Unsupported test case $test_case\n";
-        exit(1);
+if (isset($_SERVER['PHP_SELF']) && preg_match('/interop_client/', $_SERVER['PHP_SELF'])) {
+    $args = getopt('', ['server_host:', 'server_port:', 'test_case:',
+                        'use_tls::', 'use_test_ca::',
+                        'server_host_override:', 'oauth_scope:',
+                        'default_service_account:', ]);
+    interop_main($args);
 }
diff --git a/examples/node/greeter_client.js b/src/php/tests/interop/metrics_client.php
similarity index 72%
copy from examples/node/greeter_client.js
copy to src/php/tests/interop/metrics_client.php
index 2820acb..46f4212 100644
--- a/examples/node/greeter_client.js
+++ b/src/php/tests/interop/metrics_client.php
@@ -1,6 +1,7 @@
+<?php
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,23 +32,18 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+$args = getopt('', ['metrics_server_address:', 'total_only::']);
+$parts = explode(':', $args['metrics_server_address']);
+$server_host = $parts[0];
+$server_port = (count($parts) == 2) ? $parts[1] : '';
 
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
-
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
-  }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
+$socket = socket_create(AF_INET, SOCK_STREAM, 0);
+if (@!socket_connect($socket, $server_host, $server_port)) {
+  echo "Cannot connect to merics server...\n";
+  exit(1);
 }
-
-main();
+socket_write($socket, 'qps');
+while ($out = socket_read($socket, 1024)) {
+  echo "$out\n";
+}
+socket_close($socket);
diff --git a/src/php/tests/interop/stress_client.php b/src/php/tests/interop/stress_client.php
new file mode 100644
index 0000000..2339f0d
--- /dev/null
+++ b/src/php/tests/interop/stress_client.php
@@ -0,0 +1,116 @@
+<?php
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+include_once('interop_client.php');
+
+function stress_main($args) {
+  mt_srand();
+  set_time_limit(0);
+
+  // open socket to listen as metrics server
+  $socket = socket_create(AF_INET, SOCK_STREAM, 0);
+  socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
+  if (@!socket_bind($socket, 'localhost', $args['metrics_port'])) {
+    echo "Cannot create socket for metrics server...\n";
+    exit(1);
+  }
+  socket_listen($socket);
+  socket_set_nonblock($socket);
+
+  $start_time = microtime(true);
+  $count = 0;
+  $deadline = $args['test_duration_secs'] ?
+              ($start_time + $args['test_duration_secs']) : false;
+  $num_test_cases = count($args['test_cases']);
+  $stub = false;
+
+  while (true) {
+    $current_time = microtime(true);
+    if ($deadline && $current_time > $deadline) {
+      break;
+    }
+    if ($client_connection = socket_accept($socket)) {
+      // there is an incoming request, respond with qps metrics
+      $input = socket_read($client_connection, 1024);
+      $qps = round($count / ($current_time - $start_time));
+      socket_write($client_connection, "qps: $qps");
+      socket_close($client_connection);
+    } else {
+      // do actual work, run one interop test case
+      $args['test_case'] =
+          $args['test_cases'][mt_rand(0, $num_test_cases - 1)];
+      $stub = @interop_main($args, $stub);
+      $count++;
+    }
+  }
+  socket_close($socket);
+  echo "Number of interop tests run in $args[test_duration_secs] seconds: $count.\n";
+}
+
+// process command line arguments
+$raw_args = getopt('',
+  ['server_addresses::',
+   'test_cases:',
+   'metrics_port::',
+   'test_duration_secs::',
+   'num_channels_per_server::',
+   'num_stubs_per_channel::']);
+
+$args = [];
+
+if (empty($raw_args['server_addresses'])) {
+  $args['server_host'] = 'localhost';
+  $args['server_port'] = '8080';
+} else {
+  $parts = explode(':', $raw_args['server_addresses']);
+  $args['server_host'] = $parts[0];
+  $args['server_port'] = (count($parts) == 2) ? $parts[1] : '';
+}
+
+$args['metrics_port'] = empty($raw_args['metrics_port']) ?
+  '8081' : $args['metrics_port'];
+
+$args['test_duration_secs'] = empty($raw_args['test_duration_secs']) ||
+  $raw_args['test_duration_secs'] == -1 ?
+  false : $raw_args['test_duration_secs'];
+
+$test_cases = [];
+$test_case_strs = explode(',', $raw_args['test_cases']);
+foreach ($test_case_strs as $test_case_str) {
+  $parts = explode(':', $test_case_str);
+  $test_cases = array_merge($test_cases, array_fill(0, $parts[1], $parts[0]));
+}
+$args['test_cases'] = $test_cases;
+
+stress_main($args);
diff --git a/src/proto/grpc/lb/v0/load_balancer.options b/src/proto/grpc/lb/v0/load_balancer.options
deleted file mode 100644
index 6d4528f..0000000
--- a/src/proto/grpc/lb/v0/load_balancer.options
+++ /dev/null
@@ -1,6 +0,0 @@
-grpc.lb.v0.InitialLoadBalanceRequest.name max_size:128
-grpc.lb.v0.InitialLoadBalanceResponse.client_config max_size:64
-grpc.lb.v0.InitialLoadBalanceResponse.load_balancer_delegate max_size:64
-grpc.lb.v0.Server.ip_address max_size:46
-grpc.lb.v0.Server.load_balance_token max_size:64
-load_balancer.proto no_unions:true
diff --git a/src/proto/grpc/lb/v1/load_balancer.options b/src/proto/grpc/lb/v1/load_balancer.options
new file mode 100644
index 0000000..d903669
--- /dev/null
+++ b/src/proto/grpc/lb/v1/load_balancer.options
@@ -0,0 +1,6 @@
+grpc.lb.v1.InitialLoadBalanceRequest.name max_size:128
+grpc.lb.v1.InitialLoadBalanceResponse.client_config max_size:64
+grpc.lb.v1.InitialLoadBalanceResponse.load_balancer_delegate max_size:64
+grpc.lb.v1.Server.ip_address max_size:46
+grpc.lb.v1.Server.load_balance_token max_size:64
+load_balancer.proto no_unions:true
diff --git a/src/proto/grpc/lb/v0/load_balancer.proto b/src/proto/grpc/lb/v1/load_balancer.proto
similarity index 94%
rename from src/proto/grpc/lb/v0/load_balancer.proto
rename to src/proto/grpc/lb/v1/load_balancer.proto
index e88a4f8..1bcad0b 100644
--- a/src/proto/grpc/lb/v0/load_balancer.proto
+++ b/src/proto/grpc/lb/v1/load_balancer.proto
@@ -29,7 +29,7 @@
 
 syntax = "proto3";
 
-package grpc.lb.v0;
+package grpc.lb.v1;
 
 message Duration {
 
@@ -94,9 +94,8 @@
 
 message InitialLoadBalanceResponse {
   oneof initial_response_type {
-    // Contains gRPC config options like RPC deadline or flow control.
-    // TODO(yetianx): Change to ClientConfig after it is defined.
-    string client_config = 1;
+    // TODO(zhangkun83): ClientConfig not yet defined
+    //ClientConfig client_config = 1;
 
     // This is an application layer redirect that indicates the client should
     // use the specified server for load balancing. When this field is set in
@@ -134,9 +133,7 @@
   // An opaque token that is passed from the client to the server in metadata.
   // The server may expect this token to indicate that the request from the
   // client was load balanced.
-  // TODO(yetianx): Not used right now, and will be used after implementing
-  // load report.
-  bytes load_balance_token = 3;
+  string load_balance_token = 3;
 
   // Indicates whether this particular request should be dropped by the client
   // when this server is chosen from the list.
diff --git a/src/proto/grpc/reflection/v1alpha/reflection.proto b/src/proto/grpc/reflection/v1alpha/reflection.proto
new file mode 100644
index 0000000..276ff0e
--- /dev/null
+++ b/src/proto/grpc/reflection/v1alpha/reflection.proto
@@ -0,0 +1,151 @@
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Service exported by server reflection
+
+syntax = "proto3";
+
+package grpc.reflection.v1alpha;
+
+service ServerReflection {
+  // The reflection service is structured as a bidirectional stream, ensuring
+  // all related requests go to a single server.
+  rpc ServerReflectionInfo(stream ServerReflectionRequest)
+      returns (stream ServerReflectionResponse);
+}
+
+// The message sent by the client when calling ServerReflectionInfo method.
+message ServerReflectionRequest {
+  string host = 1;
+  // To use reflection service, the client should set one of the following
+  // fields in message_request. The server distinguishes requests by their
+  // defined field and then handles them using corresponding methods.
+  oneof message_request {
+    // Find a proto file by the file name.
+    string file_by_filename = 3;
+
+    // Find the proto file that declares the given fully-qualified symbol name.
+    // This field should be a fully-qualified symbol name
+    // (e.g. <package>.<service>[.<method>] or <package>.<type>).
+    string file_containing_symbol = 4;
+
+    // Find the proto file which defines an extension extending the given
+    // message type with the given field number.
+    ExtensionRequest file_containing_extension = 5;
+
+    // Finds the tag numbers used by all known extensions of extendee_type, and
+    // appends them to ExtensionNumberResponse in an undefined order.
+    // Its corresponding method is best-effort: it's not guaranteed that the
+    // reflection service will implement this method, and it's not guaranteed
+    // that this method will provide all extensions. Returns
+    // StatusCode::UNIMPLEMENTED if it's not implemented.
+    // This field should be a fully-qualified type name. The format is
+    // <package>.<type>
+    string all_extension_numbers_of_type = 6;
+
+    // List the full names of registered services. The content will not be
+    // checked.
+    string list_services = 7;
+  }
+}
+
+// The type name and extension number sent by the client when requesting
+// file_containing_extension.
+message ExtensionRequest {
+  // Fully-qualified type name. The format should be <package>.<type>
+  string containing_type = 1;
+  int32 extension_number = 2;
+}
+
+// The message sent by the server to answer ServerReflectionInfo method.
+message ServerReflectionResponse {
+  string valid_host = 1;
+  ServerReflectionRequest original_request = 2;
+  // The server set one of the following fields accroding to the message_request
+  // in the request.
+  oneof message_response {
+    // This message is used to answer file_by_filename, file_containing_symbol,
+    // file_containing_extension requests with transitive dependencies. As
+    // the repeated label is not allowed in oneof fields, we use a
+    // FileDescriptorResponse message to encapsulate the repeated fields.
+    // The reflection service is allowed to avoid sending FileDescriptorProtos
+    // that were previously sent in response to earlier requests in the stream.
+    FileDescriptorResponse file_descriptor_response = 4;
+
+    // This message is used to answer all_extension_numbers_of_type requst.
+    ExtensionNumberResponse all_extension_numbers_response = 5;
+
+    // This message is used to answer list_services request.
+    ListServiceResponse list_services_response = 6;
+
+    // This message is used when an error occurs.
+    ErrorResponse error_response = 7;
+  }
+}
+
+// Serialized FileDescriptorProto messages sent by the server answering
+// a file_by_filename, file_containing_symbol, or file_containing_extension
+// request.
+message FileDescriptorResponse {
+  // Serialized FileDescriptorProto messages. We avoid taking a dependency on
+  // descriptor.proto, which uses proto2 only features, by making them opaque
+  // bytes instead.
+  repeated bytes file_descriptor_proto = 1;
+}
+
+// A list of extension numbers sent by the server answering
+// all_extension_numbers_of_type request.
+message ExtensionNumberResponse {
+  // Full name of the base type, including the package name. The format
+  // is <package>.<type>
+  string base_type_name = 1;
+  repeated int32 extension_number = 2;
+}
+
+// A list of ServiceResponse sent by the server answering list_services request.
+message ListServiceResponse {
+  // The information of each service may be expanded in the future, so we use
+  // ServiceResponse message to encapsulate it.
+  repeated ServiceResponse service = 1;
+}
+
+// The information of a single service used by ListServiceResponse to answer
+// list_services request.
+message ServiceResponse {
+  // Full name of a registered service, including its package name. The format
+  // is <package>.<service>
+  string name = 1;
+}
+
+// The error code and error message sent by the server when an error occurs.
+message ErrorResponse {
+  // This field uses the error codes defined in grpc::StatusCode.
+  int32 error_code = 1;
+  string error_message = 2;
+}
diff --git a/src/proto/grpc/testing/echo_messages.proto b/src/proto/grpc/testing/echo_messages.proto
index 1be1966..b405acf 100644
--- a/src/proto/grpc/testing/echo_messages.proto
+++ b/src/proto/grpc/testing/echo_messages.proto
@@ -32,6 +32,12 @@
 
 package grpc.testing;
 
+// Message to be echoed back serialized in trailer.
+message DebugInfo {
+  repeated string stack_entries = 1;
+  string detail = 2;
+}
+
 message RequestParams {
   bool echo_deadline = 1;
   int32 client_cancel_after_us = 2;
@@ -43,6 +49,7 @@
   string expected_client_identity = 8; // will force check_auth_context.
   bool skip_cancelled_check = 9;
   string expected_transport_security_type = 10;
+  DebugInfo debug_info = 11;
 }
 
 message EchoRequest {
diff --git a/src/python/grpcio/grpc/_cython/imports.generated.c b/src/python/grpcio/grpc/_cython/imports.generated.c
index f0a40db..0955147 100644
--- a/src/python/grpcio/grpc/_cython/imports.generated.c
+++ b/src/python/grpcio/grpc/_cython/imports.generated.c
@@ -125,6 +125,7 @@
 grpc_header_nonbin_value_is_legal_type grpc_header_nonbin_value_is_legal_import;
 grpc_is_binary_header_type grpc_is_binary_header_import;
 grpc_call_error_to_string_type grpc_call_error_to_string_import;
+grpc_cronet_secure_channel_create_type grpc_cronet_secure_channel_create_import;
 grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import;
 grpc_auth_context_property_iterator_type grpc_auth_context_property_iterator_import;
 grpc_auth_context_peer_identity_type grpc_auth_context_peer_identity_import;
@@ -395,6 +396,7 @@
   grpc_header_nonbin_value_is_legal_import = (grpc_header_nonbin_value_is_legal_type) GetProcAddress(library, "grpc_header_nonbin_value_is_legal");
   grpc_is_binary_header_import = (grpc_is_binary_header_type) GetProcAddress(library, "grpc_is_binary_header");
   grpc_call_error_to_string_import = (grpc_call_error_to_string_type) GetProcAddress(library, "grpc_call_error_to_string");
+  grpc_cronet_secure_channel_create_import = (grpc_cronet_secure_channel_create_type) GetProcAddress(library, "grpc_cronet_secure_channel_create");
   grpc_auth_property_iterator_next_import = (grpc_auth_property_iterator_next_type) GetProcAddress(library, "grpc_auth_property_iterator_next");
   grpc_auth_context_property_iterator_import = (grpc_auth_context_property_iterator_type) GetProcAddress(library, "grpc_auth_context_property_iterator");
   grpc_auth_context_peer_identity_import = (grpc_auth_context_peer_identity_type) GetProcAddress(library, "grpc_auth_context_peer_identity");
diff --git a/src/python/grpcio/grpc/_cython/imports.generated.h b/src/python/grpcio/grpc/_cython/imports.generated.h
index d5e810b..54c8aaa 100644
--- a/src/python/grpcio/grpc/_cython/imports.generated.h
+++ b/src/python/grpcio/grpc/_cython/imports.generated.h
@@ -43,6 +43,7 @@
 #include <grpc/census.h>
 #include <grpc/compression.h>
 #include <grpc/grpc.h>
+#include <grpc/grpc_cronet.h>
 #include <grpc/grpc_security.h>
 #include <grpc/impl/codegen/alloc.h>
 #include <grpc/impl/codegen/byte_buffer.h>
@@ -325,6 +326,9 @@
 typedef const char *(*grpc_call_error_to_string_type)(grpc_call_error error);
 extern grpc_call_error_to_string_type grpc_call_error_to_string_import;
 #define grpc_call_error_to_string grpc_call_error_to_string_import
+typedef grpc_channel *(*grpc_cronet_secure_channel_create_type)(void *engine, const char *target, const grpc_channel_args *args, void *reserved);
+extern grpc_cronet_secure_channel_create_type grpc_cronet_secure_channel_create_import;
+#define grpc_cronet_secure_channel_create grpc_cronet_secure_channel_create_import
 typedef const grpc_auth_property *(*grpc_auth_property_iterator_next_type)(grpc_auth_property_iterator *it);
 extern grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import;
 #define grpc_auth_property_iterator_next grpc_auth_property_iterator_next_import
diff --git a/src/python/grpcio/grpc/beta/interfaces.py b/src/python/grpcio/grpc/beta/interfaces.py
index 33ca45a..24de9ad 100644
--- a/src/python/grpcio/grpc/beta/interfaces.py
+++ b/src/python/grpcio/grpc/beta/interfaces.py
@@ -235,7 +235,7 @@
     This method may be called at any time and is idempotent. Passing a smaller
     grace value than has been passed in a previous call will have the effect of
     stopping the Server sooner. Passing a larger grace value than has been
-    passed in a previous call will not have the effect of stopping the sooner
+    passed in a previous call will not have the effect of stopping the server
     later.
 
     Args:
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index dab6253..162191b 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -95,6 +95,7 @@
   'src/core/lib/iomgr/endpoint_pair_posix.c',
   'src/core/lib/iomgr/endpoint_pair_windows.c',
   'src/core/lib/iomgr/ev_poll_and_epoll_posix.c',
+  'src/core/lib/iomgr/ev_poll_posix.c',
   'src/core/lib/iomgr/ev_posix.c',
   'src/core/lib/iomgr/exec_ctx.c',
   'src/core/lib/iomgr/executor.c',
@@ -222,8 +223,11 @@
   'src/core/ext/client_config/uri_parser.c',
   'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
   'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
+  'src/core/ext/transport/cronet/client/secure/cronet_channel_create.c',
+  'src/core/ext/transport/cronet/transport/cronet_api_dummy.c',
+  'src/core/ext/transport/cronet/transport/cronet_transport.c',
   'src/core/ext/lb_policy/grpclb/load_balancer_api.c',
-  'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c',
+  'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c',
   'third_party/nanopb/pb_common.c',
   'third_party/nanopb/pb_decode.c',
   'third_party/nanopb/pb_encode.c',
diff --git a/src/python/grpcio/precompiled.py b/src/python/grpcio/precompiled.py
deleted file mode 100644
index b6aa7fc..0000000
--- a/src/python/grpcio/precompiled.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# Copyright 2015, Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import os
-import platform
-import shutil
-import sys
-import sysconfig
-
-import setuptools
-
-import commands
-import grpc_version
-
-try:
-  from urllib2 import urlopen
-except ImportError:
-  from urllib.request import urlopen
-
-PYTHON_STEM = os.path.dirname(os.path.abspath(__file__))
-BINARIES_REPOSITORY = os.environ.get(
-    'GRPC_PYTHON_BINARIES_REPOSITORY',
-    'https://storage.googleapis.com/grpc-precompiled-binaries/python')
-USE_PRECOMPILED_BINARIES = bool(int(os.environ.get(
-    'GRPC_PYTHON_USE_PRECOMPILED_BINARIES', '1')))
-
-def _tagged_ext_name(base):
-  uname = platform.uname()
-  tags = (
-      grpc_version.VERSION,
-      'py{}'.format(sysconfig.get_python_version()),
-      uname[0],
-      uname[4],
-  )
-  ucs = 'ucs{}'.format(sysconfig.get_config_var('Py_UNICODE_SIZE'))
-  return '{base}-{tags}-{ucs}'.format(
-      base=base, tags='-'.join(tags), ucs=ucs)
-
-
-class BuildTaggedExt(setuptools.Command):
-
-  description = 'build the gRPC tagged extensions'
-  user_options = []
-
-  def initialize_options(self):
-    # distutils requires this override.
-    pass
-
-  def finalize_options(self):
-    # distutils requires this override.
-    pass
-
-  def run(self):
-    if 'linux' in sys.platform:
-      self.run_command('build_ext')
-      try:
-        os.makedirs('dist/')
-      except OSError:
-        pass
-      shutil.copyfile(
-          os.path.join(PYTHON_STEM, 'grpc/_cython/cygrpc.so'),
-          'dist/{}.so'.format(_tagged_ext_name('cygrpc')))
-    else:
-      sys.stderr.write('nothing to do for build_tagged_ext\n')
-
-
-def update_setup_arguments(setup_arguments):
-  if not USE_PRECOMPILED_BINARIES:
-    sys.stderr.write('not using precompiled extension')
-    return
-  url = '{}/{}.so'.format(BINARIES_REPOSITORY, _tagged_ext_name('cygrpc'))
-  target_path = os.path.join(PYTHON_STEM, 'grpc/_cython/cygrpc.so')
-  try:
-    extension = urlopen(url).read()
-  except:
-    sys.stderr.write(
-        'could not download precompiled extension: {}\n'.format(url))
-    return
-  try:
-    with open(target_path, 'w') as target:
-      target.write(extension)
-    setup_arguments['ext_modules'] = []
-  except:
-    sys.stderr.write(
-        'could not write precompiled extension to directory: {} -> {}\n'
-            .format(url, target_path))
-    return
-  setup_arguments['package_data']['grpc._cython'].append('cygrpc.so')
diff --git a/src/python/grpcio_health_checking/grpc/__init__.py b/src/python/grpcio/tests/health_check/__init__.py
similarity index 97%
rename from src/python/grpcio_health_checking/grpc/__init__.py
rename to src/python/grpcio/tests/health_check/__init__.py
index 7086519..100a624 100644
--- a/src/python/grpcio_health_checking/grpc/__init__.py
+++ b/src/python/grpcio/tests/health_check/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2015, Google Inc.
+# Copyright 2016, Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -26,5 +26,3 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
diff --git a/src/python/grpcio/tests/health_check/_health_servicer_test.py b/src/python/grpcio/tests/health_check/_health_servicer_test.py
new file mode 100644
index 0000000..1b63388
--- /dev/null
+++ b/src/python/grpcio/tests/health_check/_health_servicer_test.py
@@ -0,0 +1,75 @@
+# Copyright 2016, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Tests of grpc_health.health.v1.health."""
+
+import unittest
+
+from grpc_health.health.v1 import health
+from grpc_health.health.v1 import health_pb2
+
+
+class HealthServicerTest(unittest.TestCase):
+
+  def setUp(self):
+    self.servicer = health.HealthServicer()
+    self.servicer.set('', health_pb2.HealthCheckResponse.SERVING)
+    self.servicer.set('grpc.test.TestServiceServing',
+                      health_pb2.HealthCheckResponse.SERVING)
+    self.servicer.set('grpc.test.TestServiceUnknown',
+                      health_pb2.HealthCheckResponse.UNKNOWN)
+    self.servicer.set('grpc.test.TestServiceNotServing',
+                      health_pb2.HealthCheckResponse.NOT_SERVING)
+
+  def test_empty_service(self):
+    request = health_pb2.HealthCheckRequest()
+    resp = self.servicer.Check(request, None)
+    self.assertEqual(resp.status, health_pb2.HealthCheckResponse.SERVING)
+
+  def test_serving_service(self):
+    request = health_pb2.HealthCheckRequest(
+        service='grpc.test.TestServiceServing')
+    resp = self.servicer.Check(request, None)
+    self.assertEqual(resp.status, health_pb2.HealthCheckResponse.SERVING)
+
+  def test_unknown_serivce(self):
+    request = health_pb2.HealthCheckRequest(
+        service='grpc.test.TestServiceUnknown')
+    resp = self.servicer.Check(request, None)
+    self.assertEqual(resp.status, health_pb2.HealthCheckResponse.UNKNOWN)
+
+  def test_not_serving_service(self):
+    request = health_pb2.HealthCheckRequest(
+        service='grpc.test.TestServiceNotServing')
+    resp = self.servicer.Check(request, None)
+    self.assertEqual(resp.status, health_pb2.HealthCheckResponse.NOT_SERVING)
+
+
+if __name__ == '__main__':
+  unittest.main(verbosity=2)
diff --git a/src/python/grpcio/tests/protoc_plugin/beta_python_plugin_test.py b/src/python/grpcio/tests/protoc_plugin/beta_python_plugin_test.py
index 3dc3042..7466f88 100644
--- a/src/python/grpcio/tests/protoc_plugin/beta_python_plugin_test.py
+++ b/src/python/grpcio/tests/protoc_plugin/beta_python_plugin_test.py
@@ -59,11 +59,12 @@
 
 class _ServicerMethods(object):
 
-  def __init__(self, test_pb2):
+  def __init__(self, response_pb2, payload_pb2):
     self._condition = threading.Condition()
     self._paused = False
     self._fail = False
-    self._test_pb2 = test_pb2
+    self._response_pb2 = response_pb2
+    self._payload_pb2 = payload_pb2
 
   @contextlib.contextmanager
   def pause(self):  # pylint: disable=invalid-name
@@ -90,22 +91,22 @@
         self._condition.wait()
 
   def UnaryCall(self, request, unused_rpc_context):
-    response = self._test_pb2.SimpleResponse()
-    response.payload.payload_type = self._test_pb2.COMPRESSABLE
+    response = self._response_pb2.SimpleResponse()
+    response.payload.payload_type = self._payload_pb2.COMPRESSABLE
     response.payload.payload_compressable = 'a' * request.response_size
     self._control()
     return response
 
   def StreamingOutputCall(self, request, unused_rpc_context):
     for parameter in request.response_parameters:
-      response = self._test_pb2.StreamingOutputCallResponse()
-      response.payload.payload_type = self._test_pb2.COMPRESSABLE
+      response = self._response_pb2.StreamingOutputCallResponse()
+      response.payload.payload_type = self._payload_pb2.COMPRESSABLE
       response.payload.payload_compressable = 'a' * parameter.size
       self._control()
       yield response
 
   def StreamingInputCall(self, request_iter, unused_rpc_context):
-    response = self._test_pb2.StreamingInputCallResponse()
+    response = self._response_pb2.StreamingInputCallResponse()
     aggregated_payload_size = 0
     for request in request_iter:
       aggregated_payload_size += len(request.payload.payload_compressable)
@@ -116,8 +117,8 @@
   def FullDuplexCall(self, request_iter, unused_rpc_context):
     for request in request_iter:
       for parameter in request.response_parameters:
-        response = self._test_pb2.StreamingOutputCallResponse()
-        response.payload.payload_type = self._test_pb2.COMPRESSABLE
+        response = self._response_pb2.StreamingOutputCallResponse()
+        response.payload.payload_type = self._payload_pb2.COMPRESSABLE
         response.payload.payload_compressable = 'a' * parameter.size
         self._control()
         yield response
@@ -126,8 +127,8 @@
     responses = []
     for request in request_iter:
       for parameter in request.response_parameters:
-        response = self._test_pb2.StreamingOutputCallResponse()
-        response.payload.payload_type = self._test_pb2.COMPRESSABLE
+        response = self._response_pb2.StreamingOutputCallResponse()
+        response.payload.payload_type = self._payload_pb2.COMPRESSABLE
         response.payload.payload_compressable = 'a' * parameter.size
         self._control()
         responses.append(response)
@@ -136,23 +137,25 @@
 
 
 @contextlib.contextmanager
-def _CreateService(test_pb2):
+def _CreateService(service_pb2, response_pb2, payload_pb2):
   """Provides a servicer backend and a stub.
 
   The servicer is just the implementation of the actual servicer passed to the
   face player of the python RPC implementation; the two are detached.
 
   Args:
-    test_pb2: The test_pb2 module generated by this test.
+    service_pb2: The service_pb2 module generated by this test.
+    response_pb2: The response_pb2 module generated by this test
+    payload_pb2: The payload_pb2 module generated by this test
 
   Yields:
     A (servicer_methods, stub) pair where servicer_methods is the back-end of
       the service bound to the stub and and stub is the stub on which to invoke
       RPCs.
   """
-  servicer_methods = _ServicerMethods(test_pb2)
+  servicer_methods = _ServicerMethods(response_pb2, payload_pb2)
 
-  class Servicer(getattr(test_pb2, SERVICER_IDENTIFIER)):
+  class Servicer(getattr(service_pb2, SERVICER_IDENTIFIER)):
 
     def UnaryCall(self, request, context):
       return servicer_methods.UnaryCall(request, context)
@@ -170,55 +173,52 @@
       return servicer_methods.HalfDuplexCall(request_iter, context)
 
   servicer = Servicer()
-  server = getattr(test_pb2, SERVER_FACTORY_IDENTIFIER)(servicer)
+  server = getattr(service_pb2, SERVER_FACTORY_IDENTIFIER)(servicer)
   port = server.add_insecure_port('[::]:0')
   server.start()
   channel = implementations.insecure_channel('localhost', port)
-  stub = getattr(test_pb2, STUB_FACTORY_IDENTIFIER)(channel)
-  yield servicer_methods, stub
+  stub = getattr(service_pb2, STUB_FACTORY_IDENTIFIER)(channel)
+  yield (servicer_methods, stub)
   server.stop(0)
 
 
 @contextlib.contextmanager
-def _CreateIncompleteService(test_pb2):
+def _CreateIncompleteService(service_pb2):
   """Provides a servicer backend that fails to implement methods and its stub.
 
   The servicer is just the implementation of the actual servicer passed to the
   face player of the python RPC implementation; the two are detached.
-
   Args:
-    test_pb2: The test_pb2 module generated by this test.
-
+    service_pb2: The service_pb2 module generated by this test.
   Yields:
     A (servicer_methods, stub) pair where servicer_methods is the back-end of
       the service bound to the stub and and stub is the stub on which to invoke
       RPCs.
   """
-  servicer_methods = _ServicerMethods(test_pb2)
 
-  class Servicer(getattr(test_pb2, SERVICER_IDENTIFIER)):
+  class Servicer(getattr(service_pb2, SERVICER_IDENTIFIER)):
     pass
 
   servicer = Servicer()
-  server = getattr(test_pb2, SERVER_FACTORY_IDENTIFIER)(servicer)
+  server = getattr(service_pb2, SERVER_FACTORY_IDENTIFIER)(servicer)
   port = server.add_insecure_port('[::]:0')
   server.start()
   channel = implementations.insecure_channel('localhost', port)
-  stub = getattr(test_pb2, STUB_FACTORY_IDENTIFIER)(channel)
-  yield servicer_methods, stub
+  stub = getattr(service_pb2, STUB_FACTORY_IDENTIFIER)(channel)
+  yield None, stub
   server.stop(0)
 
 
-def _streaming_input_request_iterator(test_pb2):
+def _streaming_input_request_iterator(request_pb2, payload_pb2):
   for _ in range(3):
-    request = test_pb2.StreamingInputCallRequest()
-    request.payload.payload_type = test_pb2.COMPRESSABLE
+    request = request_pb2.StreamingInputCallRequest()
+    request.payload.payload_type = payload_pb2.COMPRESSABLE
     request.payload.payload_compressable = 'a'
     yield request
 
 
-def _streaming_output_request(test_pb2):
-  request = test_pb2.StreamingOutputCallRequest()
+def _streaming_output_request(request_pb2):
+  request = request_pb2.StreamingOutputCallRequest()
   sizes = [1, 2, 3]
   request.response_parameters.add(size=sizes[0], interval_us=0)
   request.response_parameters.add(size=sizes[1], interval_us=0)
@@ -226,11 +226,11 @@
   return request
 
 
-def _full_duplex_request_iterator(test_pb2):
-  request = test_pb2.StreamingOutputCallRequest()
+def _full_duplex_request_iterator(request_pb2):
+  request = request_pb2.StreamingOutputCallRequest()
   request.response_parameters.add(size=1, interval_us=0)
   yield request
-  request = test_pb2.StreamingOutputCallRequest()
+  request = request_pb2.StreamingOutputCallRequest()
   request.response_parameters.add(size=2, interval_us=0)
   request.response_parameters.add(size=3, interval_us=0)
   yield request
@@ -250,8 +250,6 @@
     protoc_command = 'protoc'
     protoc_plugin_filename = distutils.spawn.find_executable(
         'grpc_python_plugin')
-    test_proto_filename = pkg_resources.resource_filename(
-        'tests.protoc_plugin', 'protoc_plugin_test.proto')
     if not os.path.isfile(protoc_command):
       # Assume that if we haven't built protoc that it's on the system.
       protoc_command = 'protoc'
@@ -259,19 +257,44 @@
     # Ensure that the output directory exists.
     self.outdir = tempfile.mkdtemp()
 
+    # Find all proto files
+    paths = []
+    root_dir = os.path.dirname(os.path.realpath(__file__))
+    proto_dir = os.path.join(root_dir, 'protos')
+    for walk_root, _, filenames in os.walk(proto_dir):
+      for filename in filenames:
+        if filename.endswith('.proto'):
+          path = os.path.join(walk_root, filename)
+          paths.append(path)
+
     # Invoke protoc with the plugin.
     cmd = [
         protoc_command,
         '--plugin=protoc-gen-python-grpc=%s' % protoc_plugin_filename,
-        '-I .',
+        '-I %s' % root_dir,
         '--python_out=%s' % self.outdir,
-        '--python-grpc_out=%s' % self.outdir,
-        os.path.basename(test_proto_filename),
-    ]
+        '--python-grpc_out=%s' % self.outdir
+    ] + paths
     subprocess.check_call(' '.join(cmd), shell=True, env=os.environ,
-                          cwd=os.path.dirname(test_proto_filename))
+                          cwd=os.path.dirname(os.path.realpath(__file__)))
+
+    # Generated proto directories dont include __init__.py, but
+    # these are needed for python package resolution
+    for walk_root, _, _ in os.walk(os.path.join(self.outdir, 'protos')):
+      path = os.path.join(walk_root, '__init__.py')
+      open(path, 'a').close()
+
     sys.path.insert(0, self.outdir)
 
+    import protos.payload.test_payload_pb2 as payload_pb2  # pylint: disable=g-import-not-at-top
+    import protos.requests.r.test_requests_pb2 as request_pb2  # pylint: disable=g-import-not-at-top
+    import protos.responses.test_responses_pb2 as response_pb2  # pylint: disable=g-import-not-at-top
+    import protos.service.test_service_pb2 as service_pb2  # pylint: disable=g-import-not-at-top
+    self._payload_pb2 = payload_pb2
+    self._request_pb2 = request_pb2
+    self._response_pb2 = response_pb2
+    self._service_pb2 = service_pb2
+
   def tearDown(self):
     try:
       shutil.rmtree(self.outdir)
@@ -282,43 +305,40 @@
 
   def testImportAttributes(self):
     # check that we can access the generated module and its members.
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    self.assertIsNotNone(getattr(test_pb2, SERVICER_IDENTIFIER, None))
-    self.assertIsNotNone(getattr(test_pb2, STUB_IDENTIFIER, None))
-    self.assertIsNotNone(getattr(test_pb2, SERVER_FACTORY_IDENTIFIER, None))
-    self.assertIsNotNone(getattr(test_pb2, STUB_FACTORY_IDENTIFIER, None))
+    self.assertIsNotNone(
+        getattr(self._service_pb2, SERVICER_IDENTIFIER, None))
+    self.assertIsNotNone(
+        getattr(self._service_pb2, STUB_IDENTIFIER, None))
+    self.assertIsNotNone(
+        getattr(self._service_pb2, SERVER_FACTORY_IDENTIFIER, None))
+    self.assertIsNotNone(
+        getattr(self._service_pb2, STUB_FACTORY_IDENTIFIER, None))
 
   def testUpDown(self):
-    import protoc_plugin_test_pb2 as test_pb2
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (servicer, stub):
-      request = test_pb2.SimpleRequest(response_size=13)
+    with _CreateService(
+        self._service_pb2, self._response_pb2, self._payload_pb2):
+      self._request_pb2.SimpleRequest(response_size=13)
 
   def testIncompleteServicer(self):
-    import protoc_plugin_test_pb2 as test_pb2
-    moves.reload_module(test_pb2)
-    with _CreateIncompleteService(test_pb2) as (servicer, stub):
-      request = test_pb2.SimpleRequest(response_size=13)
+    with _CreateIncompleteService(self._service_pb2) as (_, stub):
+      request = self._request_pb2.SimpleRequest(response_size=13)
       try:
-        response = stub.UnaryCall(request, test_constants.LONG_TIMEOUT)
+        stub.UnaryCall(request, test_constants.LONG_TIMEOUT)
       except face.AbortionError as error:
         self.assertEqual(interfaces.StatusCode.UNIMPLEMENTED, error.code)
 
   def testUnaryCall(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
-      request = test_pb2.SimpleRequest(response_size=13)
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = self._request_pb2.SimpleRequest(response_size=13)
       response = stub.UnaryCall(request, test_constants.LONG_TIMEOUT)
     expected_response = methods.UnaryCall(request, 'not a real context!')
     self.assertEqual(expected_response, response)
 
   def testUnaryCallFuture(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request = test_pb2.SimpleRequest(response_size=13)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = self._request_pb2.SimpleRequest(response_size=13)
       # Check that the call does not block waiting for the server to respond.
       with methods.pause():
         response_future = stub.UnaryCall.future(
@@ -328,10 +348,9 @@
     self.assertEqual(expected_response, response)
 
   def testUnaryCallFutureExpired(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
-      request = test_pb2.SimpleRequest(response_size=13)
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = self._request_pb2.SimpleRequest(response_size=13)
       with methods.pause():
         response_future = stub.UnaryCall.future(
             request, test_constants.SHORT_TIMEOUT)
@@ -339,30 +358,27 @@
           response_future.result()
 
   def testUnaryCallFutureCancelled(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request = test_pb2.SimpleRequest(response_size=13)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = self._request_pb2.SimpleRequest(response_size=13)
       with methods.pause():
         response_future = stub.UnaryCall.future(request, 1)
         response_future.cancel()
         self.assertTrue(response_future.cancelled())
 
   def testUnaryCallFutureFailed(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request = test_pb2.SimpleRequest(response_size=13)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = self._request_pb2.SimpleRequest(response_size=13)
       with methods.fail():
         response_future = stub.UnaryCall.future(
             request, test_constants.LONG_TIMEOUT)
         self.assertIsNotNone(response_future.exception())
 
   def testStreamingOutputCall(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request = _streaming_output_request(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = _streaming_output_request(self._request_pb2)
       responses = stub.StreamingOutputCall(
           request, test_constants.LONG_TIMEOUT)
       expected_responses = methods.StreamingOutputCall(
@@ -372,10 +388,9 @@
         self.assertEqual(expected_response, response)
 
   def testStreamingOutputCallExpired(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request = _streaming_output_request(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = _streaming_output_request(self._request_pb2)
       with methods.pause():
         responses = stub.StreamingOutputCall(
             request, test_constants.SHORT_TIMEOUT)
@@ -383,10 +398,9 @@
           list(responses)
 
   def testStreamingOutputCallCancelled(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request = _streaming_output_request(test_pb2)
-    with _CreateService(test_pb2) as (unused_methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = _streaming_output_request(self._request_pb2)
       responses = stub.StreamingOutputCall(
           request, test_constants.LONG_TIMEOUT)
       next(responses)
@@ -395,10 +409,9 @@
         next(responses)
 
   def testStreamingOutputCallFailed(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request = _streaming_output_request(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request = _streaming_output_request(self._request_pb2)
       with methods.fail():
         responses = stub.StreamingOutputCall(request, 1)
         self.assertIsNotNone(responses)
@@ -406,36 +419,38 @@
           next(responses)
 
   def testStreamingInputCall(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       response = stub.StreamingInputCall(
-          _streaming_input_request_iterator(test_pb2),
+          _streaming_input_request_iterator(
+              self._request_pb2, self._payload_pb2),
           test_constants.LONG_TIMEOUT)
     expected_response = methods.StreamingInputCall(
-        _streaming_input_request_iterator(test_pb2), 'not a real RpcContext!')
+        _streaming_input_request_iterator(self._request_pb2, self._payload_pb2),
+        'not a real RpcContext!')
     self.assertEqual(expected_response, response)
 
   def testStreamingInputCallFuture(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       with methods.pause():
         response_future = stub.StreamingInputCall.future(
-            _streaming_input_request_iterator(test_pb2),
+            _streaming_input_request_iterator(
+                self._request_pb2, self._payload_pb2),
             test_constants.LONG_TIMEOUT)
       response = response_future.result()
     expected_response = methods.StreamingInputCall(
-        _streaming_input_request_iterator(test_pb2), 'not a real RpcContext!')
+        _streaming_input_request_iterator(self._request_pb2, self._payload_pb2),
+        'not a real RpcContext!')
     self.assertEqual(expected_response, response)
 
   def testStreamingInputCallFutureExpired(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       with methods.pause():
         response_future = stub.StreamingInputCall.future(
-            _streaming_input_request_iterator(test_pb2),
+            _streaming_input_request_iterator(
+                self._request_pb2, self._payload_pb2),
             test_constants.SHORT_TIMEOUT)
         with self.assertRaises(face.ExpirationError):
           response_future.result()
@@ -443,12 +458,12 @@
             response_future.exception(), face.ExpirationError)
 
   def testStreamingInputCallFutureCancelled(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       with methods.pause():
         response_future = stub.StreamingInputCall.future(
-            _streaming_input_request_iterator(test_pb2),
+            _streaming_input_request_iterator(
+                self._request_pb2, self._payload_pb2),
             test_constants.LONG_TIMEOUT)
         response_future.cancel()
         self.assertTrue(response_future.cancelled())
@@ -456,32 +471,32 @@
         response_future.result()
 
   def testStreamingInputCallFutureFailed(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       with methods.fail():
         response_future = stub.StreamingInputCall.future(
-            _streaming_input_request_iterator(test_pb2),
+            _streaming_input_request_iterator(
+                self._request_pb2, self._payload_pb2),
             test_constants.LONG_TIMEOUT)
         self.assertIsNotNone(response_future.exception())
 
   def testFullDuplexCall(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       responses = stub.FullDuplexCall(
-          _full_duplex_request_iterator(test_pb2), test_constants.LONG_TIMEOUT)
+          _full_duplex_request_iterator(self._request_pb2),
+          test_constants.LONG_TIMEOUT)
       expected_responses = methods.FullDuplexCall(
-          _full_duplex_request_iterator(test_pb2), 'not a real RpcContext!')
+          _full_duplex_request_iterator(self._request_pb2),
+          'not a real RpcContext!')
       for expected_response, response in moves.zip_longest(
           expected_responses, responses):
         self.assertEqual(expected_response, response)
 
   def testFullDuplexCallExpired(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request_iterator = _full_duplex_request_iterator(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    request_iterator = _full_duplex_request_iterator(self._request_pb2)
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       with methods.pause():
         responses = stub.FullDuplexCall(
             request_iterator, test_constants.SHORT_TIMEOUT)
@@ -489,10 +504,9 @@
           list(responses)
 
   def testFullDuplexCallCancelled(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
-      request_iterator = _full_duplex_request_iterator(test_pb2)
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
+      request_iterator = _full_duplex_request_iterator(self._request_pb2)
       responses = stub.FullDuplexCall(
           request_iterator, test_constants.LONG_TIMEOUT)
       next(responses)
@@ -501,10 +515,9 @@
         next(responses)
 
   def testFullDuplexCallFailed(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    request_iterator = _full_duplex_request_iterator(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    request_iterator = _full_duplex_request_iterator(self._request_pb2)
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       with methods.fail():
         responses = stub.FullDuplexCall(
             request_iterator, test_constants.LONG_TIMEOUT)
@@ -513,14 +526,13 @@
           next(responses)
 
   def testHalfDuplexCall(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       def half_duplex_request_iterator():
-        request = test_pb2.StreamingOutputCallRequest()
+        request = self._request_pb2.StreamingOutputCallRequest()
         request.response_parameters.add(size=1, interval_us=0)
         yield request
-        request = test_pb2.StreamingOutputCallRequest()
+        request = self._request_pb2.StreamingOutputCallRequest()
         request.response_parameters.add(size=2, interval_us=0)
         request.response_parameters.add(size=3, interval_us=0)
         yield request
@@ -533,8 +545,6 @@
         self.assertEqual(expected_response, response)
 
   def testHalfDuplexCallWedged(self):
-    import protoc_plugin_test_pb2 as test_pb2  # pylint: disable=g-import-not-at-top
-    moves.reload_module(test_pb2)
     condition = threading.Condition()
     wait_cell = [False]
     @contextlib.contextmanager
@@ -547,13 +557,14 @@
         wait_cell[0] = False
         condition.notify_all()
     def half_duplex_request_iterator():
-      request = test_pb2.StreamingOutputCallRequest()
+      request = self._request_pb2.StreamingOutputCallRequest()
       request.response_parameters.add(size=1, interval_us=0)
       yield request
       with condition:
         while wait_cell[0]:
           condition.wait()
-    with _CreateService(test_pb2) as (methods, stub):
+    with _CreateService(self._service_pb2, self._response_pb2,
+                        self._payload_pb2) as (methods, stub):
       with wait():
         responses = stub.HalfDuplexCall(
             half_duplex_request_iterator(), test_constants.SHORT_TIMEOUT)
@@ -563,5 +574,5 @@
 
 
 if __name__ == '__main__':
-  os.chdir(os.path.dirname(sys.argv[0]))
+  #os.chdir(os.path.dirname(sys.argv[0]))
   unittest.main(verbosity=2)
diff --git a/src/python/grpcio/tests/protoc_plugin/protoc_plugin_test.proto b/src/python/grpcio/tests/protoc_plugin/protoc_plugin_test.proto
deleted file mode 100644
index 6762a8e..0000000
--- a/src/python/grpcio/tests/protoc_plugin/protoc_plugin_test.proto
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2015, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// An integration test service that covers all the method signature permutations
-// of unary/streaming requests/responses.
-// This file is duplicated around the code base. See GitHub issue #526.
-syntax = "proto2";
-
-package grpc_protoc_plugin;
-
-enum PayloadType {
-  // Compressable text format.
-  COMPRESSABLE= 1;
-
-  // Uncompressable binary format.
-  UNCOMPRESSABLE = 2;
-
-  // Randomly chosen from all other formats defined in this enum.
-  RANDOM = 3;
-}
-
-message Payload {
-  required PayloadType payload_type = 1;
-  oneof payload_body {
-    string payload_compressable = 2;
-    bytes payload_uncompressable = 3;
-  }
-}
-
-message SimpleRequest {
-  // Desired payload type in the response from the server.
-  // If response_type is RANDOM, server randomly chooses one from other formats.
-  optional PayloadType response_type = 1 [default=COMPRESSABLE];
-
-  // Desired payload size in the response from the server.
-  // If response_type is COMPRESSABLE, this denotes the size before compression.
-  optional int32 response_size = 2;
-
-  // Optional input payload sent along with the request.
-  optional Payload payload = 3;
-}
-
-message SimpleResponse {
-  optional Payload payload = 1;
-}
-
-message StreamingInputCallRequest {
-  // Optional input payload sent along with the request.
-  optional Payload payload = 1;
-
-  // Not expecting any payload from the response.
-}
-
-message StreamingInputCallResponse {
-  // Aggregated size of payloads received from the client.
-  optional int32 aggregated_payload_size = 1;
-}
-
-message ResponseParameters {
-  // Desired payload sizes in responses from the server.
-  // If response_type is COMPRESSABLE, this denotes the size before compression.
-  required int32 size = 1;
-
-  // Desired interval between consecutive responses in the response stream in
-  // microseconds.
-  required int32 interval_us = 2;
-}
-
-message StreamingOutputCallRequest {
-  // Desired payload type in the response from the server.
-  // If response_type is RANDOM, the payload from each response in the stream
-  // might be of different types. This is to simulate a mixed type of payload
-  // stream.
-  optional PayloadType response_type = 1 [default=COMPRESSABLE];
-
-  repeated ResponseParameters response_parameters = 2;
-
-  // Optional input payload sent along with the request.
-  optional Payload payload = 3;
-}
-
-message StreamingOutputCallResponse {
-  optional Payload payload = 1;
-}
-
-service TestService {
-  // One request followed by one response.
-  // The server returns the client payload as-is.
-  rpc UnaryCall(SimpleRequest) returns (SimpleResponse);
-
-  // One request followed by a sequence of responses (streamed download).
-  // The server returns the payload with client desired type and sizes.
-  rpc StreamingOutputCall(StreamingOutputCallRequest)
-      returns (stream StreamingOutputCallResponse);
-
-  // A sequence of requests followed by one response (streamed upload).
-  // The server returns the aggregated size of client payload as the result.
-  rpc StreamingInputCall(stream StreamingInputCallRequest)
-      returns (StreamingInputCallResponse);
-
-  // A sequence of requests with each request served by the server immediately.
-  // As one request could lead to multiple responses, this interface
-  // demonstrates the idea of full duplexing.
-  rpc FullDuplexCall(stream StreamingOutputCallRequest)
-      returns (stream StreamingOutputCallResponse);
-
-  // A sequence of requests followed by a sequence of responses.
-  // The server buffers all the client requests and then serves them in order. A
-  // stream of responses are returned to the client when the server starts with
-  // first request.
-  rpc HalfDuplexCall(stream StreamingOutputCallRequest)
-      returns (stream StreamingOutputCallResponse);
-}
diff --git a/src/python/grpcio_health_checking/grpc/health/v1/health.proto b/src/python/grpcio/tests/protoc_plugin/protos/payload/test_payload.proto
similarity index 78%
copy from src/python/grpcio_health_checking/grpc/health/v1/health.proto
copy to src/python/grpcio/tests/protoc_plugin/protos/payload/test_payload.proto
index b0bac54..457543a 100644
--- a/src/python/grpcio_health_checking/grpc/health/v1/health.proto
+++ b/src/python/grpcio/tests/protoc_plugin/protos/payload/test_payload.proto
@@ -1,4 +1,4 @@
-// Copyright 2015, Google Inc.
+// Copyright 2016, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -29,21 +29,23 @@
 
 syntax = "proto3";
 
-package grpc.health.v1;
+package grpc_protoc_plugin;
 
-message HealthCheckRequest {
-  string service = 1;
+enum PayloadType {
+  // Compressable text format.
+  COMPRESSABLE= 0;
+
+  // Uncompressable binary format.
+  UNCOMPRESSABLE = 1;
+
+  // Randomly chosen from all other formats defined in this enum.
+  RANDOM = 2;
 }
 
-message HealthCheckResponse {
-  enum ServingStatus {
-    UNKNOWN = 0;
-    SERVING = 1;
-    NOT_SERVING = 2;
+message Payload {
+  PayloadType payload_type = 1;
+  oneof payload_body {
+    string payload_compressable = 2;
+    bytes payload_uncompressable = 3;
   }
-  ServingStatus status = 1;
-}
-
-service Health {
-  rpc Check(HealthCheckRequest) returns (HealthCheckResponse);
 }
diff --git a/src/python/grpcio/tests/protoc_plugin/protos/requests/r/test_requests.proto b/src/python/grpcio/tests/protoc_plugin/protos/requests/r/test_requests.proto
new file mode 100644
index 0000000..54105df
--- /dev/null
+++ b/src/python/grpcio/tests/protoc_plugin/protos/requests/r/test_requests.proto
@@ -0,0 +1,77 @@
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+import "protos/payload/test_payload.proto";
+
+package grpc_protoc_plugin;
+
+message SimpleRequest {
+  // Desired payload type in the response from the server.
+  // If response_type is RANDOM, server randomly chooses one from other formats.
+  PayloadType response_type = 1;
+
+  // Desired payload size in the response from the server.
+  // If response_type is COMPRESSABLE, this denotes the size before compression.
+  int32 response_size = 2;
+
+  // input payload sent along with the request.
+  Payload payload = 3;
+}
+
+message StreamingInputCallRequest {
+  // input payload sent along with the request.
+  Payload payload = 1;
+
+  // Not expecting any payload from the response.
+}
+
+message ResponseParameters {
+  // Desired payload sizes in responses from the server.
+  // If response_type is COMPRESSABLE, this denotes the size before compression.
+  int32 size = 1;
+
+  // Desired interval between consecutive responses in the response stream in
+  // microseconds.
+  int32 interval_us = 2;
+}
+
+message StreamingOutputCallRequest {
+  // Desired payload type in the response from the server.
+  // If response_type is RANDOM, the payload from each response in the stream
+  // might be of different types. This is to simulate a mixed type of payload
+  // stream.
+  PayloadType response_type = 1;
+
+  repeated ResponseParameters response_parameters = 2;
+
+  // input payload sent along with the request.
+  Payload payload = 3;
+}
diff --git a/src/python/grpcio_health_checking/grpc/health/v1/health.proto b/src/python/grpcio/tests/protoc_plugin/protos/responses/test_responses.proto
similarity index 82%
rename from src/python/grpcio_health_checking/grpc/health/v1/health.proto
rename to src/python/grpcio/tests/protoc_plugin/protos/responses/test_responses.proto
index b0bac54..734fbda 100644
--- a/src/python/grpcio_health_checking/grpc/health/v1/health.proto
+++ b/src/python/grpcio/tests/protoc_plugin/protos/responses/test_responses.proto
@@ -29,21 +29,19 @@
 
 syntax = "proto3";
 
-package grpc.health.v1;
+import "protos/payload/test_payload.proto";
 
-message HealthCheckRequest {
-  string service = 1;
+package grpc_protoc_plugin;
+
+message SimpleResponse {
+  Payload payload = 1;
 }
 
-message HealthCheckResponse {
-  enum ServingStatus {
-    UNKNOWN = 0;
-    SERVING = 1;
-    NOT_SERVING = 2;
-  }
-  ServingStatus status = 1;
+message StreamingInputCallResponse {
+  // Aggregated size of payloads received from the client.
+  int32 aggregated_payload_size = 1;
 }
 
-service Health {
-  rpc Check(HealthCheckRequest) returns (HealthCheckResponse);
+message StreamingOutputCallResponse {
+  Payload payload = 1;
 }
diff --git a/src/python/grpcio/tests/protoc_plugin/protos/service/test_service.proto b/src/python/grpcio/tests/protoc_plugin/protos/service/test_service.proto
new file mode 100644
index 0000000..fe715ee
--- /dev/null
+++ b/src/python/grpcio/tests/protoc_plugin/protos/service/test_service.proto
@@ -0,0 +1,64 @@
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+import "protos/requests/r/test_requests.proto";
+import "protos/responses/test_responses.proto";
+
+package grpc_protoc_plugin;
+
+service TestService {
+  // One request followed by one response.
+  // The server returns the client payload as-is.
+  rpc UnaryCall(SimpleRequest) returns (SimpleResponse);
+
+  // One request followed by a sequence of responses (streamed download).
+  // The server returns the payload with client desired type and sizes.
+  rpc StreamingOutputCall(StreamingOutputCallRequest)
+      returns (stream StreamingOutputCallResponse);
+
+  // A sequence of requests followed by one response (streamed upload).
+  // The server returns the aggregated size of client payload as the result.
+  rpc StreamingInputCall(stream StreamingInputCallRequest)
+      returns (StreamingInputCallResponse);
+
+  // A sequence of requests with each request served by the server immediately.
+  // As one request could lead to multiple responses, this interface
+  // demonstrates the idea of full duplexing.
+  rpc FullDuplexCall(stream StreamingOutputCallRequest)
+      returns (stream StreamingOutputCallResponse);
+
+  // A sequence of requests followed by a sequence of responses.
+  // The server buffers all the client requests and then serves them in order. A
+  // stream of responses are returned to the client when the server starts with
+  // first request.
+  rpc HalfDuplexCall(stream StreamingOutputCallRequest)
+      returns (stream StreamingOutputCallResponse);
+}
diff --git a/src/python/grpcio/tests/qps/benchmark_client.py b/src/python/grpcio/tests/qps/benchmark_client.py
index eed0b0c..b372ea0 100644
--- a/src/python/grpcio/tests/qps/benchmark_client.py
+++ b/src/python/grpcio/tests/qps/benchmark_client.py
@@ -39,6 +39,7 @@
 from concurrent import futures
 
 from grpc.beta import implementations
+from grpc.framework.interfaces.face import face
 from src.proto.grpc.testing import messages_pb2
 from src.proto.grpc.testing import services_pb2
 from tests.unit import resources
@@ -141,10 +142,10 @@
     self._stub = None
 
 
-class StreamingAsyncBenchmarkClient(BenchmarkClient):
+class StreamingSyncBenchmarkClient(BenchmarkClient):
 
   def __init__(self, server, config, hist):
-    super(StreamingAsyncBenchmarkClient, self).__init__(server, config, hist)
+    super(StreamingSyncBenchmarkClient, self).__init__(server, config, hist)
     self._is_streaming = False
     self._pool = futures.ThreadPoolExecutor(max_workers=1)
     # Use a thread-safe queue to put requests on the stream
@@ -167,12 +168,12 @@
   def _request_stream(self):
     self._is_streaming = True
     if self._generic:
-      response_stream = self._stub.inline_stream_stream(
-          'grpc.testing.BenchmarkService', 'StreamingCall',
-          self._request_generator(), _TIMEOUT)
+      stream_callable = self._stub.stream_stream(
+          'grpc.testing.BenchmarkService', 'StreamingCall')
     else:
-      response_stream = self._stub.StreamingCall(self._request_generator(),
-                                                 _TIMEOUT)
+      stream_callable = self._stub.StreamingCall
+
+    response_stream = stream_callable(self._request_generator(), _TIMEOUT)
     for _ in response_stream:
       end_time = time.time()
       self._handle_response(end_time - self._send_time_queue.get_nowait())
@@ -184,3 +185,48 @@
         yield request
       except queue.Empty:
         pass
+
+
+class AsyncReceiver(face.ResponseReceiver):
+  """Receiver for async stream responses."""
+
+  def __init__(self, send_time_queue, response_handler):
+    self._send_time_queue = send_time_queue
+    self._response_handler = response_handler
+
+  def initial_metadata(self, initial_mdetadata):
+    pass
+
+  def response(self, response):
+    end_time = time.time()
+    self._response_handler(end_time - self._send_time_queue.get_nowait())
+
+  def complete(self, terminal_metadata, code, details):
+    pass
+
+
+class StreamingAsyncBenchmarkClient(BenchmarkClient):
+
+  def __init__(self, server, config, hist):
+    super(StreamingAsyncBenchmarkClient, self).__init__(server, config, hist)
+    self._send_time_queue = queue.Queue()
+    self._receiver = AsyncReceiver(self._send_time_queue, self._handle_response)
+    self._rendezvous = None
+
+  def send_request(self):
+    if self._rendezvous is not None:
+      self._send_time_queue.put(time.time())
+      self._rendezvous.consume(self._request)
+
+  def start(self):
+    if self._generic:
+      stream_callable = self._stub.stream_stream(
+          'grpc.testing.BenchmarkService', 'StreamingCall')
+    else:
+      stream_callable = self._stub.StreamingCall
+    self._rendezvous = stream_callable.event(
+        self._receiver, lambda *args: None, _TIMEOUT)
+
+  def stop(self):
+    self._rendezvous.terminate()
+    self._rendezvous = None
diff --git a/src/python/grpcio/tests/qps/client_runner.py b/src/python/grpcio/tests/qps/client_runner.py
index a36c30c..1ede7d2 100644
--- a/src/python/grpcio/tests/qps/client_runner.py
+++ b/src/python/grpcio/tests/qps/client_runner.py
@@ -89,9 +89,9 @@
 
   def start(self):
     self._is_running = True
+    self._client.start()
     for _ in xrange(self._request_count):
       self._client.send_request()
-    self._client.start()
 
   def stop(self):
     self._is_running = False
diff --git a/src/python/grpcio/tests/qps/worker_server.py b/src/python/grpcio/tests/qps/worker_server.py
index 0b3acc1..1f9af54 100644
--- a/src/python/grpcio/tests/qps/worker_server.py
+++ b/src/python/grpcio/tests/qps/worker_server.py
@@ -146,8 +146,9 @@
       if config.rpc_type == control_pb2.UNARY:
         client = benchmark_client.UnarySyncBenchmarkClient(
             server, config, qps_data)
-      else:
-        raise Exception('STREAMING SYNC client not supported')
+      elif config.rpc_type == control_pb2.STREAMING:
+        client = benchmark_client.StreamingSyncBenchmarkClient(
+            server, config, qps_data)
     elif config.client_type == control_pb2.ASYNC_CLIENT:
       if config.rpc_type == control_pb2.UNARY:
         client = benchmark_client.UnaryAsyncBenchmarkClient(
diff --git a/src/python/grpcio/tests/tests.json b/src/python/grpcio/tests/tests.json
index 84870aa..691062f 100644
--- a/src/python/grpcio/tests/tests.json
+++ b/src/python/grpcio/tests/tests.json
@@ -28,7 +28,8 @@
   "_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", 
   "_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", 
   "_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", 
-  "_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", 
+  "_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest",
+  "_health_servicer_test.HealthServicerTest",
   "_implementations_test.ChannelCredentialsTest", 
   "_insecure_interop_test.InsecureInteropTest", 
   "_intermediary_low_test.CancellationTest", 
@@ -50,4 +51,4 @@
   "cygrpc_test.InsecureServerInsecureClient", 
   "cygrpc_test.SecureServerSecureClient", 
   "cygrpc_test.TypeSmokeTest"
-]
\ No newline at end of file
+]
diff --git a/src/python/grpcio/tests/unit/_cython/_channel_test.py b/src/python/grpcio/tests/unit/_cython/_channel_test.py
index b414f8e..3dc7a24 100644
--- a/src/python/grpcio/tests/unit/_cython/_channel_test.py
+++ b/src/python/grpcio/tests/unit/_cython/_channel_test.py
@@ -33,8 +33,7 @@
 
 from grpc._cython import cygrpc
 
-# TODO(nathaniel): This should be at least one hundred. Why not one thousand?
-_PARALLELISM = 4
+from tests.unit.framework.common import test_constants
 
 
 def _channel_and_completion_queue():
@@ -61,7 +60,7 @@
 def _in_parallel(behavior, arguments):
   threads = tuple(
       threading.Thread(target=behavior, args=arguments)
-      for _ in range(_PARALLELISM))
+      for _ in range(test_constants.THREAD_CONCURRENCY))
   for thread in threads:
     thread.start()
   for thread in threads:
diff --git a/src/python/grpcio/tests/unit/framework/common/test_constants.py b/src/python/grpcio/tests/unit/framework/common/test_constants.py
index 8d89101..b6682d3 100644
--- a/src/python/grpcio/tests/unit/framework/common/test_constants.py
+++ b/src/python/grpcio/tests/unit/framework/common/test_constants.py
@@ -49,8 +49,13 @@
 # The size of payloads to transmit in tests.
 PAYLOAD_SIZE = 256 * 1024 + 17
 
-# The parallelism to use in tests of parallel RPCs.
-PARALLELISM = 200
+# The concurrency to use in tests of concurrent RPCs that will not create as
+# many threads as RPCs.
+RPC_CONCURRENCY = 200
+
+# The concurrency to use in tests of concurrent RPCs that will create as many
+# threads as RPCs.
+THREAD_CONCURRENCY = 25
 
 # The size of thread pools to use in tests.
 POOL_SIZE = 10
diff --git a/src/python/grpcio/tests/unit/framework/interfaces/face/_blocking_invocation_inline_service.py b/src/python/grpcio/tests/unit/framework/interfaces/face/_blocking_invocation_inline_service.py
index 6498924..e338aaa 100644
--- a/src/python/grpcio/tests/unit/framework/interfaces/face/_blocking_invocation_inline_service.py
+++ b/src/python/grpcio/tests/unit/framework/interfaces/face/_blocking_invocation_inline_service.py
@@ -146,13 +146,13 @@
         test_messages.verify(second_request, second_response, self)
 
   def testParallelInvocations(self):
-    pool = logging_pool.pool(test_constants.PARALLELISM)
+    pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY)
     for (group, method), test_messages_sequence in (
         six.iteritems(self._digest.unary_unary_messages_sequences)):
       for test_messages in test_messages_sequence:
         requests = []
         response_futures = []
-        for _ in range(test_constants.PARALLELISM):
+        for _ in range(test_constants.THREAD_CONCURRENCY):
           request = test_messages.request()
           response_future = pool.submit(
               self._invoker.blocking(group, method), request,
@@ -168,13 +168,13 @@
     pool.shutdown(wait=True)
 
   def testWaitingForSomeButNotAllParallelInvocations(self):
-    pool = logging_pool.pool(test_constants.PARALLELISM)
+    pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY)
     for (group, method), test_messages_sequence in (
         six.iteritems(self._digest.unary_unary_messages_sequences)):
       for test_messages in test_messages_sequence:
         requests = []
         response_futures_to_indices = {}
-        for index in range(test_constants.PARALLELISM):
+        for index in range(test_constants.THREAD_CONCURRENCY):
           request = test_messages.request()
           response_future = pool.submit(
               self._invoker.blocking(group, method), request,
@@ -184,7 +184,7 @@
 
         some_completed_response_futures_iterator = itertools.islice(
             futures.as_completed(response_futures_to_indices),
-            test_constants.PARALLELISM // 2)
+            test_constants.THREAD_CONCURRENCY // 2)
         for response_future in some_completed_response_futures_iterator:
           index = response_futures_to_indices[response_future]
           test_messages.verify(requests[index], response_future.result(), self)
diff --git a/src/python/grpcio/tests/unit/framework/interfaces/face/_future_invocation_asynchronous_event_service.py b/src/python/grpcio/tests/unit/framework/interfaces/face/_future_invocation_asynchronous_event_service.py
index c3813d5..7916203 100644
--- a/src/python/grpcio/tests/unit/framework/interfaces/face/_future_invocation_asynchronous_event_service.py
+++ b/src/python/grpcio/tests/unit/framework/interfaces/face/_future_invocation_asynchronous_event_service.py
@@ -249,7 +249,7 @@
       for test_messages in test_messages_sequence:
         requests = []
         response_futures = []
-        for _ in range(test_constants.PARALLELISM):
+        for _ in range(test_constants.THREAD_CONCURRENCY):
           request = test_messages.request()
           response_future = self._invoker.future(group, method)(
               request, test_constants.LONG_TIMEOUT)
@@ -263,13 +263,13 @@
           test_messages.verify(request, response, self)
 
   def testWaitingForSomeButNotAllParallelInvocations(self):
-    pool = logging_pool.pool(test_constants.PARALLELISM)
+    pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY)
     for (group, method), test_messages_sequence in (
         six.iteritems(self._digest.unary_unary_messages_sequences)):
       for test_messages in test_messages_sequence:
         requests = []
         response_futures_to_indices = {}
-        for index in range(test_constants.PARALLELISM):
+        for index in range(test_constants.THREAD_CONCURRENCY):
           request = test_messages.request()
           inner_response_future = self._invoker.future(group, method)(
               request, test_constants.LONG_TIMEOUT)
@@ -279,7 +279,7 @@
 
         some_completed_response_futures_iterator = itertools.islice(
             futures.as_completed(response_futures_to_indices),
-            test_constants.PARALLELISM // 2)
+            test_constants.THREAD_CONCURRENCY // 2)
         for response_future in some_completed_response_futures_iterator:
           index = response_futures_to_indices[response_future]
           test_messages.verify(requests[index], response_future.result(), self)
diff --git a/src/python/grpcio_health_checking/.gitignore b/src/python/grpcio_health_checking/.gitignore
new file mode 100644
index 0000000..85af466
--- /dev/null
+++ b/src/python/grpcio_health_checking/.gitignore
@@ -0,0 +1,5 @@
+*.proto
+*_pb2.py
+build/
+grpcio_health_checking.egg-info/
+dist/
diff --git a/src/python/grpcio_health_checking/MANIFEST.in b/src/python/grpcio_health_checking/MANIFEST.in
index 498b55f..7d26647 100644
--- a/src/python/grpcio_health_checking/MANIFEST.in
+++ b/src/python/grpcio_health_checking/MANIFEST.in
@@ -1,2 +1,3 @@
-graft grpc
-include commands.py
+include health_commands.py
+graft grpc_health
+global-exclude *.pyc
diff --git a/src/python/grpcio_health_checking/grpc/health/v1/health.py b/src/python/grpcio_health_checking/grpc/health/v1/health.py
deleted file mode 100644
index 4b5af15..0000000
--- a/src/python/grpcio_health_checking/grpc/health/v1/health.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# Copyright 2015, Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""Reference implementation for health checking in gRPC Python."""
-
-import abc
-import enum
-import threading
-
-from grpc.health.v1 import health_pb2
-
-
-@enum.unique
-class HealthStatus(enum.Enum):
-  """Statuses for a service mirroring the reference health.proto's values."""
-  UNKNOWN = health_pb2.HealthCheckResponse.UNKNOWN
-  SERVING = health_pb2.HealthCheckResponse.SERVING
-  NOT_SERVING = health_pb2.HealthCheckResponse.NOT_SERVING
-
-
-class _HealthServicer(health_pb2.EarlyAdopterHealthServicer):
-  """Servicer handling RPCs for service statuses."""
-
-  def __init__(self):
-    self._server_status_lock = threading.Lock()
-    self._server_status = {}
-
-  def Check(self, request, context):
-    with self._server_status_lock:
-      if request.service not in self._server_status:
-        # TODO(atash): once the Python API has a way of setting the server
-        # status, bring us into conformance with the health check spec by
-        # returning the NOT_FOUND status here.
-        raise NotImplementedError()
-      else:
-        return health_pb2.HealthCheckResponse(
-            status=self._server_status[request.service].value)
-
-  def set(service, status):
-    if not isinstance(status, HealthStatus):
-      raise TypeError('expected grpc.health.v1.health.HealthStatus '
-                      'for argument `status` but got {}'.format(status))
-    with self._server_status_lock:
-      self._server_status[service] = status
-
-
-class HealthServer(health_pb2.EarlyAdopterHealthServer):
-  """Interface for the reference gRPC Python health server."""
-  __metaclass__ = abc.ABCMeta
-
-  @abc.abstractmethod
-  def start(self):
-    raise NotImplementedError()
-
-  @abc.abstractmethod
-  def stop(self):
-    raise NotImplementedError()
-
-  @abc.abstractmethod
-  def set(self, service, status):
-    """Set the status of the given service.
-
-    Args:
-      service (str): service name of the service to set the reported status of
-      status (HealthStatus): status to set for the specified service
-    """
-    raise NotImplementedError()
-
-
-class _HealthServerImplementation(HealthServer):
-  """Implementation for the reference gRPC Python health server."""
-
-  def __init__(self, server, servicer):
-    self._server = server
-    self._servicer = servicer
-
-  def start(self):
-    self._server.start()
-
-  def stop(self):
-    self._server.stop()
-
-  def set(self, service, status):
-    self._servicer.set(service, status)
-
-
-def create_Health_server(port, private_key=None, certificate_chain=None):
-  """Get a HealthServer instance.
-
-  Args:
-    port (int): port number passed through to health_pb2 server creation
-      routine.
-    private_key (str): to-be-created server's desired private key
-    certificate_chain (str): to-be-created server's desired certificate chain
-
-  Returns:
-    An instance of HealthServer (conforming thus to
-    EarlyAdopterHealthServer and providing a method to set server status)."""
-  servicer = _HealthServicer()
-  server = health_pb2.early_adopter_create_Health_server(
-      servicer, port=port, private_key=private_key,
-      certificate_chain=certificate_chain)
-  return _HealthServerImplementation(server, servicer)
diff --git a/src/python/grpcio_health_checking/grpc/health/__init__.py b/src/python/grpcio_health_checking/grpc_health/__init__.py
similarity index 100%
rename from src/python/grpcio_health_checking/grpc/health/__init__.py
rename to src/python/grpcio_health_checking/grpc_health/__init__.py
diff --git a/src/python/grpcio_health_checking/grpc/health/__init__.py b/src/python/grpcio_health_checking/grpc_health/health/__init__.py
similarity index 100%
copy from src/python/grpcio_health_checking/grpc/health/__init__.py
copy to src/python/grpcio_health_checking/grpc_health/health/__init__.py
diff --git a/src/python/grpcio_health_checking/grpc/health/v1/__init__.py b/src/python/grpcio_health_checking/grpc_health/health/v1/__init__.py
similarity index 100%
rename from src/python/grpcio_health_checking/grpc/health/v1/__init__.py
rename to src/python/grpcio_health_checking/grpc_health/health/v1/__init__.py
diff --git a/src/python/grpcio_health_checking/grpc_health/health/v1/health.py b/src/python/grpcio_health_checking/grpc_health/health/v1/health.py
new file mode 100644
index 0000000..8da60c7
--- /dev/null
+++ b/src/python/grpcio_health_checking/grpc_health/health/v1/health.py
@@ -0,0 +1,66 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Reference implementation for health checking in gRPC Python."""
+
+import threading
+
+from grpc_health.health.v1 import health_pb2
+
+
+class HealthServicer(health_pb2.BetaHealthServicer):
+  """Servicer handling RPCs for service statuses."""
+
+  def __init__(self):
+    self._server_status_lock = threading.Lock()
+    self._server_status = {}
+
+  def Check(self, request, context):
+    with self._server_status_lock:
+      if request.service not in self._server_status:
+        # TODO(atash): once the Python API has a way of setting the server
+        # status, bring us into conformance with the health check spec by
+        # returning the NOT_FOUND status here.
+        raise NotImplementedError()
+      else:
+        return health_pb2.HealthCheckResponse(
+            status=self._server_status[request.service])
+
+  def set(self, service, status):
+    """Sets the status of a service.
+
+    Args:
+        service: string, the name of the service.
+            NOTE, '' must be set.
+        status: HealthCheckResponse.status enum value indicating
+            the status of the service
+    """
+    with self._server_status_lock:
+      self._server_status[service] = status
+
diff --git a/src/python/grpcio_health_checking/commands.py b/src/python/grpcio_health_checking/health_commands.py
similarity index 80%
rename from src/python/grpcio_health_checking/commands.py
rename to src/python/grpcio_health_checking/health_commands.py
index 3f4ea6e..631066f 100644
--- a/src/python/grpcio_health_checking/commands.py
+++ b/src/python/grpcio_health_checking/health_commands.py
@@ -33,11 +33,16 @@
 import glob
 import os
 import os.path
+import shutil
 import subprocess
 import sys
 
 import setuptools
 from setuptools.command import build_py
+from setuptools.command import sdist
+
+ROOT_DIR = os.path.abspath(os.path.dirname(os.path.abspath(__file__)))
+HEALTH_PROTO = os.path.join(ROOT_DIR, '../../proto/grpc/health/v1/health.proto')
 
 
 class BuildProtoModules(setuptools.Command):
@@ -76,9 +81,34 @@
       raise Exception('{}\nOutput:\n{}'.format(e.message, e.output))
 
 
+class CopyProtoModules(setuptools.Command):
+  """Command to copy proto modules from grpc/src/proto."""
+
+  def initialize_options(self):
+    pass
+
+  def finalize_options(self):
+    pass
+
+  def run(self):
+    if os.path.isfile(HEALTH_PROTO):
+      shutil.copyfile(
+          HEALTH_PROTO,
+          os.path.join(ROOT_DIR, 'grpc_health/health/v1/health.proto'))
+
+
 class BuildPy(build_py.build_py):
   """Custom project build command."""
 
   def run(self):
+    self.run_command('copy_proto_modules')
     self.run_command('build_proto_modules')
     build_py.build_py.run(self)
+
+
+class SDist(sdist.sdist):
+  """Custom project build command."""
+
+  def run(self):
+    self.run_command('copy_proto_modules')
+    sdist.sdist.run(self)
diff --git a/src/python/grpcio_health_checking/setup.py b/src/python/grpcio_health_checking/setup.py
index 35253ba..d68a7ce 100644
--- a/src/python/grpcio_health_checking/setup.py
+++ b/src/python/grpcio_health_checking/setup.py
@@ -40,7 +40,7 @@
 os.chdir(os.path.dirname(os.path.abspath(__file__)))
 
 # Break import-style to ensure we can actually find our commands module.
-import commands
+import health_commands
 
 _PACKAGES = (
     setuptools.find_packages('.')
@@ -51,22 +51,21 @@
 }
 
 _INSTALL_REQUIRES = (
-    'grpcio>=0.11.0b0',
+    'grpcio>=0.13.1',
 )
 
-_SETUP_REQUIRES = _INSTALL_REQUIRES
-
 _COMMAND_CLASS = {
-    'build_proto_modules': commands.BuildProtoModules,
-    'build_py': commands.BuildPy,
+    'copy_proto_modules': health_commands.CopyProtoModules,
+    'build_proto_modules': health_commands.BuildProtoModules,
+    'build_py': health_commands.BuildPy,
+    'sdist': health_commands.SDist,
 }
 
 setuptools.setup(
     name='grpcio_health_checking',
-    version='0.11.0b0',
+    version='0.14.0b0',
     packages=list(_PACKAGES),
     package_dir=_PACKAGE_DIRECTORIES,
     install_requires=_INSTALL_REQUIRES,
-    setup_requires=_SETUP_REQUIRES,
     cmdclass=_COMMAND_CLASS
 )
diff --git a/src/ruby/ext/grpc/rb_grpc.c b/src/ruby/ext/grpc/rb_grpc.c
index 06a07ac..5277148 100644
--- a/src/ruby/ext/grpc/rb_grpc.c
+++ b/src/ruby/ext/grpc/rb_grpc.c
@@ -50,6 +50,7 @@
 #include "rb_loader.h"
 #include "rb_server.h"
 #include "rb_server_credentials.h"
+#include "rb_signal.h"
 
 static VALUE grpc_rb_cTimeVal = Qnil;
 
@@ -332,6 +333,7 @@
   Init_grpc_channel_credentials();
   Init_grpc_server();
   Init_grpc_server_credentials();
+  Init_grpc_signals();
   Init_grpc_status_codes();
   Init_grpc_time_consts();
 }
diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c
index bc43f9d..cebbe8c 100644
--- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c
+++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c
@@ -125,6 +125,7 @@
 grpc_header_nonbin_value_is_legal_type grpc_header_nonbin_value_is_legal_import;
 grpc_is_binary_header_type grpc_is_binary_header_import;
 grpc_call_error_to_string_type grpc_call_error_to_string_import;
+grpc_cronet_secure_channel_create_type grpc_cronet_secure_channel_create_import;
 grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import;
 grpc_auth_context_property_iterator_type grpc_auth_context_property_iterator_import;
 grpc_auth_context_peer_identity_type grpc_auth_context_peer_identity_import;
@@ -391,6 +392,7 @@
   grpc_header_nonbin_value_is_legal_import = (grpc_header_nonbin_value_is_legal_type) GetProcAddress(library, "grpc_header_nonbin_value_is_legal");
   grpc_is_binary_header_import = (grpc_is_binary_header_type) GetProcAddress(library, "grpc_is_binary_header");
   grpc_call_error_to_string_import = (grpc_call_error_to_string_type) GetProcAddress(library, "grpc_call_error_to_string");
+  grpc_cronet_secure_channel_create_import = (grpc_cronet_secure_channel_create_type) GetProcAddress(library, "grpc_cronet_secure_channel_create");
   grpc_auth_property_iterator_next_import = (grpc_auth_property_iterator_next_type) GetProcAddress(library, "grpc_auth_property_iterator_next");
   grpc_auth_context_property_iterator_import = (grpc_auth_context_property_iterator_type) GetProcAddress(library, "grpc_auth_context_property_iterator");
   grpc_auth_context_peer_identity_import = (grpc_auth_context_peer_identity_type) GetProcAddress(library, "grpc_auth_context_peer_identity");
diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h
index b67361c..d7ea6c5 100644
--- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h
+++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h
@@ -43,6 +43,7 @@
 #include <grpc/census.h>
 #include <grpc/compression.h>
 #include <grpc/grpc.h>
+#include <grpc/grpc_cronet.h>
 #include <grpc/grpc_security.h>
 #include <grpc/impl/codegen/alloc.h>
 #include <grpc/impl/codegen/byte_buffer.h>
@@ -325,6 +326,9 @@
 typedef const char *(*grpc_call_error_to_string_type)(grpc_call_error error);
 extern grpc_call_error_to_string_type grpc_call_error_to_string_import;
 #define grpc_call_error_to_string grpc_call_error_to_string_import
+typedef grpc_channel *(*grpc_cronet_secure_channel_create_type)(void *engine, const char *target, const grpc_channel_args *args, void *reserved);
+extern grpc_cronet_secure_channel_create_type grpc_cronet_secure_channel_create_import;
+#define grpc_cronet_secure_channel_create grpc_cronet_secure_channel_create_import
 typedef const grpc_auth_property *(*grpc_auth_property_iterator_next_type)(grpc_auth_property_iterator *it);
 extern grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import;
 #define grpc_auth_property_iterator_next grpc_auth_property_iterator_next_import
diff --git a/src/ruby/ext/grpc/rb_signal.c b/src/ruby/ext/grpc/rb_signal.c
new file mode 100644
index 0000000..a9e5123
--- /dev/null
+++ b/src/ruby/ext/grpc/rb_signal.c
@@ -0,0 +1,70 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <ruby/ruby.h>
+#include <signal.h>
+#include <stdbool.h>
+
+#include <grpc/support/log.h>
+
+#include "rb_grpc.h"
+
+static void (*old_sigint_handler)(int);
+static void (*old_sigterm_handler)(int);
+
+static volatile bool signal_received = false;
+
+/* This has to be handled at the C level instead of Ruby, because Ruby signal
+ * handlers are constrained to run in the main interpreter thread. If that main
+ * thread is blocked on grpc_completion_queue_pluck, the signal handlers will
+ * never run */
+static void handle_signal(int signum) {
+  signal_received = true;
+  if (signum == SIGINT) {
+    old_sigint_handler(signum);
+  } else if (signum == SIGTERM) {
+    old_sigterm_handler(signum);
+  }
+}
+
+static VALUE grpc_rb_signal_received(VALUE self) {
+  (void)self;
+  return signal_received ? Qtrue : Qfalse;
+}
+
+void Init_grpc_signals() {
+  old_sigint_handler = signal(SIGINT, handle_signal);
+  old_sigterm_handler = signal(SIGTERM, handle_signal);
+  rb_define_singleton_method(grpc_rb_mGrpcCore, "signal_received?",
+                             grpc_rb_signal_received, 0);
+}
diff --git a/examples/node/greeter_client.js b/src/ruby/ext/grpc/rb_signal.h
similarity index 72%
copy from examples/node/greeter_client.js
copy to src/ruby/ext/grpc/rb_signal.h
index 2820acb..07e49c0 100644
--- a/examples/node/greeter_client.js
+++ b/src/ruby/ext/grpc/rb_signal.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,23 +31,9 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+#ifndef GRPC_RB_SIGNAL_H_
+#define GRPC_RB_SIGNAL_H_
 
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
+void Init_grpc_signals();
 
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
-  }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
-}
-
-main();
+#endif  /* GRPC_RB_SIGNAL_H_ */
diff --git a/src/ruby/lib/grpc.rb b/src/ruby/lib/grpc.rb
index 79fa705..7c9aae3 100644
--- a/src/ruby/lib/grpc.rb
+++ b/src/ruby/lib/grpc.rb
@@ -33,6 +33,7 @@
 require_relative 'grpc/grpc'
 require_relative 'grpc/logconfig'
 require_relative 'grpc/notifier'
+require_relative 'grpc/signals'
 require_relative 'grpc/version'
 require_relative 'grpc/core/time_consts'
 require_relative 'grpc/generic/active_call'
@@ -47,3 +48,5 @@
 ensure
   file.close
 end
+
+GRPC::Signals.wait_for_signals
diff --git a/src/ruby/lib/grpc/generic/active_call.rb b/src/ruby/lib/grpc/generic/active_call.rb
index ecf3cc3..fd20a86 100644
--- a/src/ruby/lib/grpc/generic/active_call.rb
+++ b/src/ruby/lib/grpc/generic/active_call.rb
@@ -28,7 +28,9 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 require 'forwardable'
+require 'weakref'
 require_relative 'bidi_call'
+require_relative '../signals'
 
 class Struct
   # BatchResult is the struct returned by calls to call#start_batch.
@@ -121,6 +123,10 @@
       @unmarshal = unmarshal
       @metadata_tag = metadata_tag
       @op_notifier = nil
+      weak_self = WeakRef.new(self)
+      remove_handler = GRPC::Signals.register_handler(&weak_self
+                                                        .method(:cancel))
+      ObjectSpace.define_finalizer(self, remove_handler)
     end
 
     # output_metadata are provides access to hash that can be used to
diff --git a/src/ruby/lib/grpc/generic/client_stub.rb b/src/ruby/lib/grpc/generic/client_stub.rb
index 68e167a..12946fe 100644
--- a/src/ruby/lib/grpc/generic/client_stub.rb
+++ b/src/ruby/lib/grpc/generic/client_stub.rb
@@ -49,7 +49,12 @@
         fail(TypeError, '!Channel') unless alt_chan.is_a?(Core::Channel)
         return alt_chan
       end
-      kw['grpc.primary_user_agent'] = "grpc-ruby/#{VERSION}"
+      if kw['grpc.primary_user_agent'].nil?
+        kw['grpc.primary_user_agent'] = ''
+      else
+        kw['grpc.primary_user_agent'] += ' '
+      end
+      kw['grpc.primary_user_agent'] += "grpc-ruby/#{VERSION}"
       unless creds.is_a?(Core::ChannelCredentials) || creds.is_a?(Symbol)
         fail(TypeError, '!ChannelCredentials or Symbol')
       end
diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb
index a0f4071..238aaa9 100644
--- a/src/ruby/lib/grpc/generic/rpc_server.rb
+++ b/src/ruby/lib/grpc/generic/rpc_server.rb
@@ -28,46 +28,13 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 require_relative '../grpc'
+require_relative '../signals'
 require_relative 'active_call'
 require_relative 'service'
 require 'thread'
 
-# A global that contains signals the gRPC servers should respond to.
-$grpc_signals = []
-
 # GRPC contains the General RPC module.
 module GRPC
-  # Handles the signals in $grpc_signals.
-  #
-  # @return false if the server should exit, true if not.
-  def handle_signals
-    loop do
-      sig = $grpc_signals.shift
-      case sig
-      when 'INT'
-        return false
-      when 'TERM'
-        return false
-      when nil
-        return true
-      end
-    end
-    true
-  end
-  module_function :handle_signals
-
-  # Sets up a signal handler that adds signals to the signal handling global.
-  #
-  # Signal handlers should do as little as humanly possible.
-  # Here, they just add themselves to $grpc_signals
-  #
-  # RpcServer (and later other parts of gRPC) monitors the signals
-  # $grpc_signals in its own non-signal context.
-  def trap_signals
-    %w(INT TERM).each { |sig| trap(sig) { $grpc_signals << sig } }
-  end
-  module_function :trap_signals
-
   # Pool is a simple thread pool.
   class Pool
     # Default keep alive period is 1s
@@ -328,23 +295,6 @@
       end
     end
 
-    # Runs the server in its own thread, then waits for signal INT or TERM on
-    # the current thread to terminate it.
-    def run_till_terminated
-      GRPC.trap_signals
-      t = Thread.new do
-        run
-      end
-      t.abort_on_exception = true
-      wait_till_running
-      until running_state == :stopped
-        sleep SIGNAL_CHECK_PERIOD
-        break unless GRPC.handle_signals
-      end
-      stop
-      t.join
-    end
-
     # handle registration of classes
     #
     # service is either a class that includes GRPC::GenericService and whose
@@ -403,9 +353,14 @@
         transition_running_state(:running)
         @run_cond.broadcast
       end
+      remove_signal_handler = GRPC::Signals.register_handler { stop }
       loop_handle_server_calls
+      # Remove signal handler when server stops
+      remove_signal_handler.call
     end
 
+    alias_method :run_till_terminated, :run
+
     # Sends RESOURCE_EXHAUSTED if there are too many unprocessed jobs
     def available?(an_rpc)
       jobs_count, max = @pool.jobs_waiting, @max_waiting_requests
@@ -503,10 +458,8 @@
       unless cls.include?(GenericService)
         fail "#{cls} must 'include GenericService'"
       end
-      if cls.rpc_descs.size.zero?
-        fail "#{cls} should specify some rpc descriptions"
-      end
-      cls.assert_rpc_descs_have_methods
+      fail "#{cls} should specify some rpc descriptions" if
+        cls.rpc_descs.size.zero?
     end
 
     # This should be called while holding @run_mutex
diff --git a/src/ruby/lib/grpc/generic/service.rb b/src/ruby/lib/grpc/generic/service.rb
index 8e940b5..0a166e8 100644
--- a/src/ruby/lib/grpc/generic/service.rb
+++ b/src/ruby/lib/grpc/generic/service.rb
@@ -110,6 +110,9 @@
         rpc_descs[name] = RpcDesc.new(name, input, output,
                                       marshal_class_method,
                                       unmarshal_class_method)
+        define_method(name) do
+          fail GRPC::BadStatus, GRPC::Core::StatusCodes::UNIMPLEMENTED
+        end
       end
 
       def inherited(subclass)
@@ -199,19 +202,6 @@
           end
         end
       end
-
-      # Asserts that the appropriate methods are defined for each added rpc
-      # spec. Is intended to aid verifying that server classes are correctly
-      # implemented.
-      def assert_rpc_descs_have_methods
-        rpc_descs.each_pair do |m, spec|
-          mth_name = GenericService.underscore(m.to_s).to_sym
-          unless instance_methods.include?(mth_name)
-            fail "#{self} does not provide instance method '#{mth_name}'"
-          end
-          spec.assert_arity_matches(instance_method(mth_name))
-        end
-      end
     end
 
     def self.included(o)
diff --git a/src/ruby/lib/grpc/signals.rb b/src/ruby/lib/grpc/signals.rb
new file mode 100644
index 0000000..2ab85c8
--- /dev/null
+++ b/src/ruby/lib/grpc/signals.rb
@@ -0,0 +1,69 @@
+# Copyright 2016, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+require 'thread'
+require_relative 'grpc'
+
+# GRPC contains the General RPC module.
+module GRPC
+  # Signals contains gRPC functions related to signal handling
+  module Signals
+    @interpreter_exiting = false
+    @signal_handlers = []
+    @handlers_mutex = Mutex.new
+
+    def register_handler(&handler)
+      @handlers_mutex.synchronize do
+        @signal_handlers.push(handler)
+        handler.call if @exit_signal_received
+      end
+      # Returns a function to remove the handler
+      lambda do
+        @handlers_mutex.synchronize { @signal_handlers.delete(handler) }
+      end
+    end
+    module_function :register_handler
+
+    def wait_for_signals
+      t = Thread.new do
+        sleep 0.1 until GRPC::Core.signal_received? || @interpreter_exiting
+        unless @interpreter_exiting
+          @handlers_mutex.synchronize do
+            @signal_handlers.each(&:call)
+          end
+        end
+      end
+      at_exit do
+        @interpreter_exiting = true
+        t.join
+      end
+    end
+    module_function :wait_for_signals
+  end
+end
diff --git a/src/ruby/spec/generic/rpc_server_spec.rb b/src/ruby/spec/generic/rpc_server_spec.rb
index e688057..2a42736 100644
--- a/src/ruby/spec/generic/rpc_server_spec.rb
+++ b/src/ruby/spec/generic/rpc_server_spec.rb
@@ -308,10 +308,6 @@
       expect { @srv.handle(EmptyService) }.to raise_error
     end
 
-    it 'raises if the service does not define its rpc methods' do
-      expect { @srv.handle(NoRpcImplementation) }.to raise_error
-    end
-
     it 'raises if a handler method is already registered' do
       @srv.handle(EchoService)
       expect { r.handle(EchoService) }.to raise_error
@@ -349,6 +345,25 @@
         t.join
       end
 
+      it 'should return UNIMPLEMENTED on unimplemented methods', server: true do
+        @srv.handle(NoRpcImplementation)
+        t = Thread.new { @srv.run }
+        @srv.wait_till_running
+        req = EchoMsg.new
+        blk = proc do
+          cq = GRPC::Core::CompletionQueue.new
+          stub = GRPC::ClientStub.new(@host, cq, :this_channel_is_insecure,
+                                      **client_opts)
+          stub.request_response('/an_rpc', req, marshal, unmarshal)
+        end
+        expect(&blk).to raise_error do |error|
+          expect(error).to be_a(GRPC::BadStatus)
+          expect(error.code).to be(GRPC::Core::StatusCodes::UNIMPLEMENTED)
+        end
+        @srv.stop
+        t.join
+      end
+
       it 'should handle multiple sequential requests', server: true do
         @srv.handle(EchoService)
         t = Thread.new { @srv.run }
diff --git a/src/ruby/spec/generic/service_spec.rb b/src/ruby/spec/generic/service_spec.rb
index 5e7b6c7..76034e4 100644
--- a/src/ruby/spec/generic/service_spec.rb
+++ b/src/ruby/spec/generic/service_spec.rb
@@ -273,73 +273,4 @@
       end
     end
   end
-
-  describe '#assert_rpc_descs_have_methods' do
-    it 'fails if there is no instance method for an rpc descriptor' do
-      c1 = Class.new do
-        include GenericService
-        rpc :AnRpc, GoodMsg, GoodMsg
-      end
-      expect { c1.assert_rpc_descs_have_methods }.to raise_error
-
-      c2 = Class.new do
-        include GenericService
-        rpc :AnRpc, GoodMsg, GoodMsg
-        rpc :AnotherRpc, GoodMsg, GoodMsg
-
-        def an_rpc
-        end
-      end
-      expect { c2.assert_rpc_descs_have_methods }.to raise_error
-    end
-
-    it 'passes if there are corresponding methods for each descriptor' do
-      c = Class.new do
-        include GenericService
-        rpc :AnRpc, GoodMsg, GoodMsg
-        rpc :AServerStreamer, GoodMsg, stream(GoodMsg)
-        rpc :AClientStreamer, stream(GoodMsg), GoodMsg
-        rpc :ABidiStreamer, stream(GoodMsg), stream(GoodMsg)
-
-        def an_rpc(_req, _call)
-        end
-
-        def a_server_streamer(_req, _call)
-        end
-
-        def a_client_streamer(_call)
-        end
-
-        def a_bidi_streamer(_call)
-        end
-      end
-      expect { c.assert_rpc_descs_have_methods }.to_not raise_error
-    end
-
-    it 'passes for subclasses of that include GenericService' do
-      base = Class.new do
-        include GenericService
-        rpc :AnRpc, GoodMsg, GoodMsg
-
-        def an_rpc(_req, _call)
-        end
-      end
-      c = Class.new(base)
-      expect { c.assert_rpc_descs_have_methods }.to_not raise_error
-      expect(c.include?(GenericService)).to be(true)
-    end
-
-    it 'passes if subclasses define the rpc methods' do
-      base = Class.new do
-        include GenericService
-        rpc :AnRpc, GoodMsg, GoodMsg
-      end
-      c = Class.new(base) do
-        def an_rpc(_req, _call)
-        end
-      end
-      expect { c.assert_rpc_descs_have_methods }.to_not raise_error
-      expect(c.include?(GenericService)).to be(true)
-    end
-  end
 end
diff --git a/src/ruby/tools/bin/protoc.rb b/src/ruby/tools/bin/grpc_tools_ruby_protoc.rb
similarity index 100%
rename from src/ruby/tools/bin/protoc.rb
rename to src/ruby/tools/bin/grpc_tools_ruby_protoc.rb
diff --git a/src/ruby/tools/bin/protoc_grpc_ruby_plugin.rb b/src/ruby/tools/bin/grpc_tools_ruby_protoc_plugin.rb
similarity index 100%
rename from src/ruby/tools/bin/protoc_grpc_ruby_plugin.rb
rename to src/ruby/tools/bin/grpc_tools_ruby_protoc_plugin.rb
diff --git a/src/ruby/tools/grpc-tools.gemspec b/src/ruby/tools/grpc-tools.gemspec
index af904de..9fa4b66 100644
--- a/src/ruby/tools/grpc-tools.gemspec
+++ b/src/ruby/tools/grpc-tools.gemspec
@@ -18,5 +18,5 @@
 
   s.platform = Gem::Platform::RUBY
 
-  s.executables = %w( protoc.rb protoc_grpc_ruby_plugin.rb )
+  s.executables = %w( grpc_tools_ruby_protoc.rb grpc_tools_ruby_protoc_plugin.rb )
 end
diff --git a/templates/Makefile.template b/templates/Makefile.template
index e84ceeb..0d5f0ec 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -49,6 +49,19 @@
 
     sources_that_need_openssl = set()
     sources_that_don_t_need_openssl = set()
+
+    # warnings we'd like, but that dont exist in all compilers
+    PREFERRED_WARNINGS=['shadow', 'extra-semi']
+    CHECK_WARNINGS=PREFERRED_WARNINGS + ['no-shift-negative-value']
+
+    def warning_var(fmt, warning):
+      return fmt % warning.replace('-', '_').upper()
+
+    def neg_warning(warning):
+      if warning[0:3] == 'no-':
+        return warning[3:]
+      else:
+        return 'no-' + warning
   %>
 
 
@@ -187,17 +200,14 @@
   CXX11_CHECK_CMD = $(CXX) -std=c++11 -o $(TMPOUT) -c test/build/c++11.cc
   HAS_CXX11 = $(shell $(CXX11_CHECK_CMD) 2> /dev/null && echo true || echo false)
 
-  CHECK_SHADOW_WORKS_CMD = $(CC) -std=c99 -Werror -Wshadow -o $(TMPOUT) -c test/build/shadow.c
-  HAS_WORKING_SHADOW = $(shell $(CHECK_SHADOW_WORKS_CMD) 2> /dev/null && echo true || echo false)
-  ifeq ($(HAS_WORKING_SHADOW),true)
-  W_SHADOW=-Wshadow
+  %for warning in CHECK_WARNINGS:
+  ${warning_var('CHECK_%s_WORKS_CMD', warning)} = $(CC) -std=c99 -Werror -W${warning} -o $(TMPOUT) -c test/build/${warning}.c
+  ${warning_var('HAS_WORKING_%s', warning)} = $(shell $(${warning_var('CHECK_%s_WORKS_CMD', warning)}) 2> /dev/null && echo true || echo false)
+  ifeq ($(${warning_var('HAS_WORKING_%s', warning)}),true)
+  ${warning_var('W_%s', warning)}=-W${warning}
+  ${warning_var('NO_W_%s', warning)}=-W${neg_warning(warning)}
   endif
-
-  CHECK_NO_SHIFT_NEGATIVE_VALUE_CMD = $(CC) -std=c99 -Werror -Wno-shift-negative-value -o $(TMPOUT) -c test/build/empty.c
-  HAS_NO_SHIFT_NEGATIVE_VALUE = $(shell $(CHECK_NO_SHIFT_NEGATIVE_VALUE_CMD) 2> /dev/null && echo true || echo false)
-  ifeq ($(HAS_NO_SHIFT_NEGATIVE_VALUE),true)
-  W_NO_SHIFT_NEGATIVE_VALUE=-Wno-shift-negative-value
-  endif
+  %endfor
 
   # The HOST compiler settings are used to compile the protoc plugins.
   # In most cases, you won't have to change anything, but if you are
@@ -213,7 +223,7 @@
   DEFINES += $(EXTRA_DEFINES)
   endif
 
-  CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW)
+  CFLAGS += -std=c99 -Wsign-conversion -Wconversion ${' '.join(warning_var('$(W_%s)', warning) for warning in PREFERRED_WARNINGS)}
   ifeq ($(HAS_CXX11),true)
   CXXFLAGS += -std=c++11
   else
@@ -1698,7 +1708,7 @@
   # boringssl needs an override to ensure that it does not include
   # system openssl headers regardless of other configuration
   # we do so here with a target specific variable assignment
-  $(${tgt.name.upper()}_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value
+  $(${tgt.name.upper()}_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
   $(${tgt.name.upper()}_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
   $(${tgt.name.upper()}_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
   % else:
diff --git a/templates/gRPC.podspec.template b/templates/gRPC.podspec.template
index a9948a4..979cb1e 100644
--- a/templates/gRPC.podspec.template
+++ b/templates/gRPC.podspec.template
@@ -54,7 +54,7 @@
   %>
   Pod::Spec.new do |s|
     s.name     = 'gRPC'
-    version = '0.12.0'
+    version = '0.14.0'
     s.version  = version
     s.summary  = 'gRPC client library for iOS/OSX'
     s.homepage = 'http://www.grpc.io'
@@ -62,7 +62,8 @@
     s.authors  = { 'The gRPC contributors' => 'grpc-packages@google.com' }
 
     s.source = { :git => 'https://github.com/grpc/grpc.git',
-                 :tag => "release-#{version.gsub(/\./, '_')}-objectivec-#{version}" }
+                 :tag => "release-#{version.gsub(/\./, '_')}-objectivec-#{version}",
+                 :submodules => true }
 
   
     s.ios.deployment_target = '7.1'
@@ -97,7 +98,7 @@
 
       ss.requires_arc = false
       ss.libraries = 'z'
-      ss.dependency 'BoringSSL', '~> 2.0'
+      ss.dependency 'BoringSSL', '~> 3.0'
 
       # ss.compiler_flags = '-GCC_WARN_INHIBIT_ALL_WARNINGS', '-w'
     end
diff --git a/templates/package.json.template b/templates/package.json.template
index 11718b1..9d19ca0 100644
--- a/templates/package.json.template
+++ b/templates/package.json.template
@@ -69,6 +69,8 @@
       "src/node/ext",
       "include/grpc",
       "src/core",
+      "src/boringssl",
+      "src/zlib",
       "third_party/nanopb",
       "third_party/zlib",
       "third_party/boringssl",
diff --git a/templates/src/csharp/build_packages.bat.template b/templates/src/csharp/build_packages.bat.template
index 3b445a8..93a3531 100644
--- a/templates/src/csharp/build_packages.bat.template
+++ b/templates/src/csharp/build_packages.bat.template
@@ -1,5 +1,34 @@
 %YAML 1.2
 --- |
+  @rem Copyright 2016, Google Inc.
+  @rem All rights reserved.
+  @rem
+  @rem Redistribution and use in source and binary forms, with or without
+  @rem modification, are permitted provided that the following conditions are
+  @rem met:
+  @rem
+  @rem     * Redistributions of source code must retain the above copyright
+  @rem notice, this list of conditions and the following disclaimer.
+  @rem     * Redistributions in binary form must reproduce the above
+  @rem copyright notice, this list of conditions and the following disclaimer
+  @rem in the documentation and/or other materials provided with the
+  @rem distribution.
+  @rem     * Neither the name of Google Inc. nor the names of its
+  @rem contributors may be used to endorse or promote products derived from
+  @rem this software without specific prior written permission.
+  @rem
+  @rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  @rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  @rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  @rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  @rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  @rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  @rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  @rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  @rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  @rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  
   @rem Builds gRPC NuGet packages
   
   @rem Current package versions
diff --git a/templates/src/node/tools/package.json.template b/templates/src/node/tools/package.json.template
index 4f673c4..69ad71a 100644
--- a/templates/src/node/tools/package.json.template
+++ b/templates/src/node/tools/package.json.template
@@ -18,8 +18,8 @@
       }
     ],
     "bin": {
-      "grpc-tools-protoc": "./bin/protoc.js",
-      "grpc-tools-plugin": "./bin/protoc_plugin.js"
+      "grpc_tools_node_protoc": "./bin/protoc.js",
+      "grpc_tools_node_protoc_plugin": "./bin/protoc_plugin.js"
     },
     "scripts": {
       "install": "./node_modules/.bin/node-pre-gyp install"
diff --git a/examples/node/greeter_client.js b/test/build/extra-semi.c
similarity index 72%
copy from examples/node/greeter_client.js
copy to test/build/extra-semi.c
index 2820acb..60466dd 100644
--- a/examples/node/greeter_client.js
+++ b/test/build/extra-semi.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,23 +31,4 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
-
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
-
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
-  }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
-}
-
-main();
+int main(void) {}
diff --git a/examples/node/greeter_client.js b/test/build/no-shift-negative-value.c
similarity index 74%
copy from examples/node/greeter_client.js
copy to test/build/no-shift-negative-value.c
index 2820acb..58e4698 100644
--- a/examples/node/greeter_client.js
+++ b/test/build/no-shift-negative-value.c
@@ -31,23 +31,4 @@
  *
  */
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
-
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
-
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
-  }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
-}
-
-main();
+int main(void) {}
diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c
index cd5b541..e582068 100644
--- a/test/core/bad_client/bad_client.c
+++ b/test/core/bad_client/bad_client.c
@@ -75,9 +75,22 @@
   grpc_exec_ctx_finish(&exec_ctx);
 }
 
-void grpc_run_bad_client_test(grpc_bad_client_server_side_validator validator,
-                              const char *client_payload,
-                              size_t client_payload_length, uint32_t flags) {
+typedef struct {
+  grpc_bad_client_client_stream_validator validator;
+  gpr_slice_buffer incoming;
+  gpr_event read_done;
+} read_args;
+
+static void read_done(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+  read_args *a = arg;
+  a->validator(&a->incoming);
+  gpr_event_set(&a->read_done, (void *)1);
+}
+
+void grpc_run_bad_client_test(
+    grpc_bad_client_server_side_validator server_validator,
+    grpc_bad_client_client_stream_validator client_validator,
+    const char *client_payload, size_t client_payload_length, uint32_t flags) {
   grpc_endpoint_pair sfd;
   thd_args a;
   gpr_thd_id id;
@@ -108,7 +121,7 @@
   a.cq = grpc_completion_queue_create(NULL);
   gpr_event_init(&a.done_thd);
   gpr_event_init(&a.done_write);
-  a.validator = validator;
+  a.validator = server_validator;
   grpc_server_register_completion_queue(a.server, a.cq, NULL);
   a.registered_method =
       grpc_server_register_method(a.server, GRPC_BAD_CLIENT_REGISTERED_METHOD,
@@ -151,8 +164,23 @@
 
   GPR_ASSERT(gpr_event_wait(&a.done_thd, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)));
 
-  /* Shutdown */
-  if (sfd.client) {
+  if (sfd.client != NULL) {
+    // Validate client stream, if requested.
+    if (client_validator != NULL) {
+      read_args args;
+      args.validator = client_validator;
+      gpr_slice_buffer_init(&args.incoming);
+      gpr_event_init(&args.read_done);
+      grpc_closure read_done_closure;
+      grpc_closure_init(&read_done_closure, read_done, &args);
+      grpc_endpoint_read(&exec_ctx, sfd.client, &args.incoming,
+                         &read_done_closure);
+      grpc_exec_ctx_finish(&exec_ctx);
+      GPR_ASSERT(
+          gpr_event_wait(&args.read_done, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)));
+      gpr_slice_buffer_destroy(&args.incoming);
+    }
+    // Shutdown.
     grpc_endpoint_shutdown(&exec_ctx, sfd.client);
     grpc_endpoint_destroy(&exec_ctx, sfd.client);
     grpc_exec_ctx_finish(&exec_ctx);
diff --git a/test/core/bad_client/bad_client.h b/test/core/bad_client/bad_client.h
index 19ddba8..c8b2a41 100644
--- a/test/core/bad_client/bad_client.h
+++ b/test/core/bad_client/bad_client.h
@@ -44,18 +44,24 @@
                                                       grpc_completion_queue *cq,
                                                       void *registered_method);
 
+typedef void (*grpc_bad_client_client_stream_validator)(
+    gpr_slice_buffer *incoming);
+
 #define GRPC_BAD_CLIENT_DISCONNECT 1
 
 /* Test runner.
 
    Create a server, and send client_payload to it as bytes from a client.
-   Execute validator in a separate thread to assert that the bytes are
+   Execute server_validator in a separate thread to assert that the bytes are
    handled as expected. */
-void grpc_run_bad_client_test(grpc_bad_client_server_side_validator validator,
-                              const char *client_payload,
-                              size_t client_payload_length, uint32_t flags);
+void grpc_run_bad_client_test(
+    grpc_bad_client_server_side_validator server_validator,
+    grpc_bad_client_client_stream_validator client_validator,
+    const char *client_payload, size_t client_payload_length, uint32_t flags);
 
-#define GRPC_RUN_BAD_CLIENT_TEST(validator, payload, flags) \
-  grpc_run_bad_client_test(validator, payload, sizeof(payload) - 1, flags)
+#define GRPC_RUN_BAD_CLIENT_TEST(server_validator, client_validator, payload, \
+                                 flags)                                       \
+  grpc_run_bad_client_test(server_validator, client_validator, payload,       \
+                           sizeof(payload) - 1, flags)
 
 #endif /* GRPC_TEST_CORE_BAD_CLIENT_BAD_CLIENT_H */
diff --git a/test/core/bad_client/gen_build_yaml.py b/test/core/bad_client/gen_build_yaml.py
index d49858e..fb86525 100755
--- a/test/core/bad_client/gen_build_yaml.py
+++ b/test/core/bad_client/gen_build_yaml.py
@@ -29,7 +29,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-"""Generates the appropriate build.json data for all the end2end tests."""
+"""Generates the appropriate build.json data for all the bad_client tests."""
 
 
 import collections
@@ -45,6 +45,7 @@
     'headers': default_test_options._replace(cpu_cost=0.2),
     'initial_settings_frame': default_test_options._replace(cpu_cost=0.2),
     'head_of_line_blocking': default_test_options,
+    'large_metadata': default_test_options,
     'server_registered_method': default_test_options,
     'simple_request': default_test_options,
     'window_overflow': default_test_options,
diff --git a/test/core/bad_client/tests/badreq.c b/test/core/bad_client/tests/badreq.c
index b17e3b3..5d9ffef 100644
--- a/test/core/bad_client/tests/badreq.c
+++ b/test/core/bad_client/tests/badreq.c
@@ -56,7 +56,7 @@
 
   /* invalid content type */
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier, PFX_STR
+      verifier, NULL, PFX_STR
       "\x00\x00\xc2\x01\x04\x00\x00\x00\x01"
       "\x10\x05:path\x08/foo/bar"
       "\x10\x07:scheme\x04http"
@@ -71,7 +71,7 @@
 
   /* invalid te */
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier, PFX_STR
+      verifier, NULL, PFX_STR
       "\x00\x00\xcb\x01\x04\x00\x00\x00\x01"
       "\x10\x05:path\x08/foo/bar"
       "\x10\x07:scheme\x04http"
@@ -88,7 +88,7 @@
 
   /* two path headers */
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier, PFX_STR
+      verifier, NULL, PFX_STR
       "\x00\x00\xd9\x01\x04\x00\x00\x00\x01"
       "\x10\x05:path\x08/foo/bar"
       "\x10\x05:path\x08/foo/bah"
@@ -105,7 +105,7 @@
 
   /* bad accept-encoding algorithm */
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier, PFX_STR
+      verifier, NULL, PFX_STR
       "\x00\x00\xd2\x01\x04\x00\x00\x00\x01"
       "\x10\x05:path\x08/foo/bar"
       "\x10\x07:scheme\x04http"
@@ -121,7 +121,7 @@
 
   /* bad grpc-encoding algorithm */
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier, PFX_STR
+      verifier, NULL, PFX_STR
       "\x00\x00\xf5\x01\x04\x00\x00\x00\x01"
       "\x10\x05:path\x08/foo/bar"
       "\x10\x07:scheme\x04http"
diff --git a/test/core/bad_client/tests/connection_prefix.c b/test/core/bad_client/tests/connection_prefix.c
index 9a30aad..bc5ed2e 100644
--- a/test/core/bad_client/tests/connection_prefix.c
+++ b/test/core/bad_client/tests/connection_prefix.c
@@ -46,29 +46,30 @@
 int main(int argc, char **argv) {
   grpc_test_init(argc, argv);
 
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "X", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRIX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI X", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI *X", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * X", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTPX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/X", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2X", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.X", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0X", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\rX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\nX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\rX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSMX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSM\rX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSM\r\nX", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSM\r\n\rX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "X", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRIX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI X", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI *X", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * X", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTPX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/X", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2X", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.X", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0X", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\rX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\nX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\rX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSMX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSM\rX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSM\r\nX", 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSM\r\n\rX",
+                           0);
   return 0;
 }
diff --git a/test/core/bad_client/tests/head_of_line_blocking.c b/test/core/bad_client/tests/head_of_line_blocking.c
index 53cd453..e4051bb 100644
--- a/test/core/bad_client/tests/head_of_line_blocking.c
+++ b/test/core/bad_client/tests/head_of_line_blocking.c
@@ -144,7 +144,7 @@
     addbuf(hdr, sizeof(hdr));
     addbuf(msg, FRAME_SIZE);
   }
-  grpc_run_bad_client_test(verifier, g_buffer, g_count, 0);
+  grpc_run_bad_client_test(verifier, NULL, g_buffer, g_count, 0);
   gpr_free(g_buffer);
 
   return 0;
diff --git a/test/core/bad_client/tests/headers.c b/test/core/bad_client/tests/headers.c
index 4c1a767..f872e50 100644
--- a/test/core/bad_client/tests/headers.c
+++ b/test/core/bad_client/tests/headers.c
@@ -51,249 +51,251 @@
   grpc_test_init(argc, argv);
 
   /* partial http2 header prefixes */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x04",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x04",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x05",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x05",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x04\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x04\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x04\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
+                           PFX_STR "\x00\x00\x00\x01\x04\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
+                           PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00\x01",
                            GRPC_BAD_CLIENT_DISCONNECT);
 
   /* test adding prioritization data */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x01\x01\x24\x00\x00\x00\x01"
                            "\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x02\x01\x24\x00\x00\x00\x01"
                            "\x00\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x03\x01\x24\x00\x00\x00\x01"
                            "\x00\x00\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x04\x01\x24\x00\x00\x00\x01"
                            "\x00\x00\x00\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x05\x01\x24\x00\x00\x00\x01"
                            "",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x05\x01\x24\x00\x00\x00\x01"
                            "\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x05\x01\x24\x00\x00\x00\x01"
                            "\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x05\x01\x24\x00\x00\x00\x01"
                            "\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x05\x01\x24\x00\x00\x00\x01"
                            "\x00\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x05\x01\x24\x00\x00\x00\x01"
                            "\x00\x00\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
 
   /* test looking up an invalid index */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x01\x01\x04\x00\x00\x00\x01"
                            "\xfe",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x04\x01\x04\x00\x00\x00\x01"
                            "\x7f\x7f\x01"
                            "a",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x04\x01\x04\x00\x00\x00\x01"
                            "\x0f\x7f\x01"
                            "a",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x04\x01\x04\x00\x00\x00\x01"
                            "\x1f\x7f\x01"
                            "a",
                            0);
   /* test nvr, not indexed in static table */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x03\x01\x04\x00\x00\x00\x01"
                            "\x01\x01"
                            "a",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x03\x01\x04\x00\x00\x00\x01"
                            "\x11\x01"
                            "a",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* illegal op code */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x01\x01\x04\x00\x00\x00\x01"
                            "\x80",
                            0);
   /* parse some long indices */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x02\x01\x04\x00\x00\x00\x01"
                            "\xff\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x03\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x04\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x05\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x06\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x80\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x07\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x80\x80\x00",
                            0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff\x80",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x80",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x80\x80",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x80\x80\x80",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x80\x80\x80\x00",
                            0);
   /* overflow on byte 4 */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x06\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x80\x7f",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x06\x01\x04\x00\x00\x00\x01"
                            "\xff\xff\xff\xff\xff\x0f",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* overflow after byte 4 */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x08\x01\x04\x00\x00\x00\x01"
                            "\xff\x80\x80\x80\x80\x80\x80\x02",
                            0);
   /* end of headers mid-opcode */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x01\x01\x04\x00\x00\x00\x01"
                            "\x01",
                            GRPC_BAD_CLIENT_DISCONNECT);
 
   /* dynamic table size update: set to default */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x03\x01\x04\x00\x00\x00\x01"
                            "\x3f\xe1\x1f",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* dynamic table size update: set too large */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x03\x01\x04\x00\x00\x00\x01"
                            "\x3f\xf1\x1f",
                            0);
   /* dynamic table size update: set twice */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x04\x01\x04\x00\x00\x00\x01"
                            "\x20\x3f\xe1\x1f",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* dynamic table size update: set thrice */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x03\x01\x04\x00\x00\x00\x01"
                            "\x20\x20\x20",
                            0);
 
   /* non-ending header followed by continuation frame */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x00\x01\x00\x00\x00\x00\x01"
                            "\x00\x00\x00\x09\x04\x00\x00\x00\x01",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* non-ending header followed by non-continuation frame */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x00\x01\x00\x00\x00\x00\x01"
                            "\x00\x00\x00\x00\x04\x00\x00\x00\x01",
                            0);
   /* non-ending header followed by a continuation frame for a different stream
    */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x00\x01\x04\x00\x00\x00\x01"
                            "\x00\x00\x00\x01\x00\x00\x00\x00\x03"
                            "\x00\x00\x00\x09\x04\x00\x00\x00\x01",
                            0);
   /* opening with a continuation frame */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x09\x04\x00\x00\x00\x01", 0);
   /* three header frames */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x00\x01\x04\x00\x00\x00\x01"
                            "\x00\x00\x00\x01\x04\x00\x00\x00\x01"
                            "\x00\x00\x00\x01\x04\x00\x00\x00\x01",
                            GRPC_BAD_CLIENT_DISCONNECT);
 
   /* an invalid header found with fuzzing */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x01\x39\x67\xed\x1d\x64",
                            GRPC_BAD_CLIENT_DISCONNECT);
 
   /* a badly encoded timeout value */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x19\x01\x04\x00\x00\x00\x01"
                            "\x10\x0cgrpc-timeout\x0a"
                            "15 seconds",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* a badly encoded timeout value: twice (catches caching) */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x19\x01\x04\x00\x00\x00\x01"
                            "\x10\x0cgrpc-timeout\x0a"
                            "15 seconds"
diff --git a/test/core/bad_client/tests/initial_settings_frame.c b/test/core/bad_client/tests/initial_settings_frame.c
index 63a770d..b84b67a 100644
--- a/test/core/bad_client/tests/initial_settings_frame.c
+++ b/test/core/bad_client/tests/initial_settings_frame.c
@@ -50,70 +50,72 @@
   grpc_test_init(argc, argv);
 
   /* various partial prefixes */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x06",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x06",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x06",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x06",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x06",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x06",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x01",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x01",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\xff",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\xff",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x00\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
+                           PFX_STR "\x00\x00\x00\x04\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x00\x00\x00\x00",
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
+                           PFX_STR "\x00\x00\x00\x04\x00\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* must not send frames with stream id != 0 */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x04\x00\x00\x00\x00\x01", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x04\x00\x40\x00\x00\x00", 0);
   /* settings frame must be a multiple of six bytes long */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x01\x04\x00\x00\x00\x00\x00", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x02\x04\x00\x00\x00\x00\x00", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x03\x04\x00\x00\x00\x00\x00", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x04\x04\x00\x00\x00\x00\x00", 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x05\x04\x00\x00\x00\x00\x00", 0);
   /* some settings values are illegal */
   /* max frame size = 0 */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR ONE_SETTING_HDR "\x00\x05\x00\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR ONE_SETTING_HDR "\x00\x06\xff\xff\xff\xff",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* update intiial window size */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR ONE_SETTING_HDR "\x00\x04\x00\x01\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* ack with data */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x00\x04\x00\x00\x00\x00\x00"
                            "\x00\x00\x01\x04\x01\x00\x00\x00\x00",
                            0);
   /* settings frame with invalid flags */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x04\x10\x00\x00\x00\x00", 0);
   /* unknown settings should be ignored */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR ONE_SETTING_HDR "\x00\x99\x00\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
 
diff --git a/test/core/bad_client/tests/large_metadata.c b/test/core/bad_client/tests/large_metadata.c
new file mode 100644
index 0000000..b7d329c
--- /dev/null
+++ b/test/core/bad_client/tests/large_metadata.c
@@ -0,0 +1,247 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "test/core/bad_client/bad_client.h"
+
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/string_util.h>
+#include "src/core/lib/support/string.h"
+#include "src/core/lib/surface/server.h"
+#include "test/core/end2end/cq_verifier.h"
+
+// The large-metadata headers that we're adding for this test are not
+// actually appended to this in a single string, since the string would
+// be longer than the C99 string literal limit.  Instead, we dynamically
+// construct it by adding the large headers one at a time.
+#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR                       \
+  "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"     /* settings frame */              \
+  "\x00\x00\x00\x04\x00\x00\x00\x00\x00" /* headers: generated from        \
+                                            large_metadata.headers in this \
+                                            directory */                   \
+  "\x00"                                                                   \
+  "5{\x01\x05\x00\x00\x00\x01"                                             \
+  "\x10\x05:path\x08/foo/bar"                                              \
+  "\x10\x07:scheme\x04http"                                                \
+  "\x10\x07:method\x04POST"                                                \
+  "\x10\x0a:authority\x09localhost"                                        \
+  "\x10\x0c"                                                               \
+  "content-type\x10"                                                       \
+  "application/grpc"                                                       \
+  "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip"                  \
+  "\x10\x02te\x08trailers"                                                 \
+  "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)"
+
+// Each large-metadata header is constructed from these start and end
+// strings, with a two-digit number in between.
+#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR "\x10\x0duser-header"
+#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR                   \
+  "~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
+  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+
+// The size of each large-metadata header string.
+#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE                     \
+  ((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR) - 1) + 2 + \
+   (sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR) - 1))
+
+// The number of headers we're adding and the total size of the client
+// payload.
+#define NUM_HEADERS 95
+#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_PAYLOAD_SIZE          \
+  ((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR) - 1) + \
+   (NUM_HEADERS * PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE) + 1)
+
+#define PFX_TOO_MUCH_METADATA_FROM_SERVER_STR                                              \
+  "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" /* settings frame: sets                               \
+                                        MAX_HEADER_LIST_SIZE to 16K */                     \
+  "\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x06\x00\x00\x40\x00" /* headers:               \
+                                                                    generated              \
+                                                                    from                   \
+                                                                    simple_request.headers \
+                                                                    in this                \
+                                                                    directory              \
+                                                                    */                     \
+  "\x00\x00\xc9\x01\x04\x00\x00\x00\x01"                                                   \
+  "\x10\x05:path\x08/foo/bar"                                                              \
+  "\x10\x07:scheme\x04http"                                                                \
+  "\x10\x07:method\x04POST"                                                                \
+  "\x10\x0a:authority\x09localhost"                                                        \
+  "\x10\x0c"                                                                               \
+  "content-type\x10"                                                                       \
+  "application/grpc"                                                                       \
+  "\x10\x14grpc-accept-encoding\x15"                                                       \
+  "deflate,identity,gzip"                                                                  \
+  "\x10\x02te\x08trailers"                                                                 \
+  "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)"
+
+static void *tag(intptr_t t) { return (void *)t; }
+
+static void server_verifier(grpc_server *server, grpc_completion_queue *cq,
+                            void *registered_method) {
+  grpc_call_error error;
+  grpc_call *s;
+  grpc_call_details call_details;
+  cq_verifier *cqv = cq_verifier_create(cq);
+  grpc_metadata_array request_metadata_recv;
+
+  grpc_call_details_init(&call_details);
+  grpc_metadata_array_init(&request_metadata_recv);
+
+  error = grpc_server_request_call(server, &s, &call_details,
+                                   &request_metadata_recv, cq, cq, tag(101));
+  GPR_ASSERT(GRPC_CALL_OK == error);
+  cq_expect_completion(cqv, tag(101), 1);
+  cq_verify(cqv);
+
+  GPR_ASSERT(0 == strcmp(call_details.host, "localhost"));
+  GPR_ASSERT(0 == strcmp(call_details.method, "/foo/bar"));
+
+  grpc_metadata_array_destroy(&request_metadata_recv);
+  grpc_call_details_destroy(&call_details);
+  grpc_call_destroy(s);
+  cq_verifier_destroy(cqv);
+}
+
+static void server_verifier_sends_too_much_metadata(grpc_server *server,
+                                                    grpc_completion_queue *cq,
+                                                    void *registered_method) {
+  grpc_call_error error;
+  grpc_call *s;
+  grpc_call_details call_details;
+  cq_verifier *cqv = cq_verifier_create(cq);
+  grpc_metadata_array request_metadata_recv;
+
+  grpc_call_details_init(&call_details);
+  grpc_metadata_array_init(&request_metadata_recv);
+
+  error = grpc_server_request_call(server, &s, &call_details,
+                                   &request_metadata_recv, cq, cq, tag(101));
+  GPR_ASSERT(GRPC_CALL_OK == error);
+  cq_expect_completion(cqv, tag(101), 1);
+  cq_verify(cqv);
+
+  GPR_ASSERT(0 == strcmp(call_details.host, "localhost"));
+  GPR_ASSERT(0 == strcmp(call_details.method, "/foo/bar"));
+
+  const size_t metadata_value_size = 16 * 1024;
+  grpc_metadata meta;
+  meta.key = "key";
+  meta.value = gpr_malloc(metadata_value_size + 1);
+  memset((char *)meta.value, 'a', metadata_value_size);
+  ((char *)meta.value)[metadata_value_size] = 0;
+  meta.value_length = metadata_value_size;
+
+  grpc_op op;
+  op.op = GRPC_OP_SEND_INITIAL_METADATA;
+  op.data.send_initial_metadata.count = 1;
+  op.data.send_initial_metadata.metadata = &meta;
+  op.flags = 0;
+  op.reserved = NULL;
+  error = grpc_call_start_batch(s, &op, 1, tag(102), NULL);
+  GPR_ASSERT(GRPC_CALL_OK == error);
+  cq_expect_completion(cqv, tag(102), 0);  // Operation fails.
+  cq_verify(cqv);
+
+  gpr_free((char *)meta.value);
+  grpc_metadata_array_destroy(&request_metadata_recv);
+  grpc_call_details_destroy(&call_details);
+  grpc_call_destroy(s);
+  cq_verifier_destroy(cqv);
+}
+
+static void client_validator(gpr_slice_buffer *incoming) {
+  // Get last frame from incoming slice buffer.
+  gpr_slice_buffer last_frame_buffer;
+  gpr_slice_buffer_init(&last_frame_buffer);
+  gpr_slice_buffer_trim_end(incoming, 13, &last_frame_buffer);
+  GPR_ASSERT(last_frame_buffer.count == 1);
+  gpr_slice last_frame = last_frame_buffer.slices[0];
+  // Construct expected frame.
+  gpr_slice expected = gpr_slice_malloc(13);
+  uint8_t *p = GPR_SLICE_START_PTR(expected);
+  // Length.
+  *p++ = 0;
+  *p++ = 0;
+  *p++ = 4;
+  // Frame type (RST_STREAM).
+  *p++ = 3;
+  // Flags.
+  *p++ = 0;
+  // Stream ID.
+  *p++ = 0;
+  *p++ = 0;
+  *p++ = 0;
+  *p++ = 1;
+  // Payload (error code).
+  *p++ = 0;
+  *p++ = 0;
+  *p++ = 0;
+  *p++ = 11;
+  // Compare actual and expected.
+  GPR_ASSERT(gpr_slice_cmp(last_frame, expected) == 0);
+  gpr_slice_buffer_destroy(&last_frame_buffer);
+}
+
+int main(int argc, char **argv) {
+  grpc_test_init(argc, argv);
+
+  // Test sending more metadata than the server will accept.
+  gpr_strvec headers;
+  gpr_strvec_init(&headers);
+  for (int i = 0; i < NUM_HEADERS; ++i) {
+    char *str;
+    gpr_asprintf(&str, "%s%02d%s",
+                 PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR, i,
+                 PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR);
+    gpr_strvec_add(&headers, str);
+  }
+  size_t headers_len;
+  const char *client_headers = gpr_strvec_flatten(&headers, &headers_len);
+  gpr_strvec_destroy(&headers);
+  char client_payload[PFX_TOO_MUCH_METADATA_FROM_CLIENT_PAYLOAD_SIZE] =
+      PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR;
+  memcpy(
+      client_payload + sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR) - 1,
+      client_headers, headers_len);
+  GRPC_RUN_BAD_CLIENT_TEST(server_verifier, client_validator, client_payload,
+                           0);
+  gpr_free((void *)client_headers);
+
+  // Test sending more metadata than the client will accept.
+  GRPC_RUN_BAD_CLIENT_TEST(server_verifier_sends_too_much_metadata,
+                           client_validator,
+                           PFX_TOO_MUCH_METADATA_FROM_SERVER_STR, 0);
+
+  return 0;
+}
diff --git a/test/core/bad_client/tests/large_metadata.headers b/test/core/bad_client/tests/large_metadata.headers
new file mode 100644
index 0000000..75de3ef
--- /dev/null
+++ b/test/core/bad_client/tests/large_metadata.headers
@@ -0,0 +1,106 @@
+# headers used in simple_request.c
+# use tools/codegen/core/gen_header_frame.py --set_end_stream to generate
+# the binary strings contained in the source code
+:path: /foo/bar
+:scheme: http
+:method: POST
+:authority: localhost
+content-type: application/grpc
+grpc-accept-encoding: identity,deflate,gzip
+te: trailers
+user-agent: bad-client grpc-c/0.12.0.0 (linux)
+user-header00: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header01: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header02: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header03: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header04: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header05: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header06: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header07: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header08: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header09: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header22: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header23: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header24: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header25: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header26: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header27: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header28: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header29: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header30: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header31: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header32: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header33: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header34: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header35: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header36: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header37: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header38: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header39: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header40: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header41: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header42: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header43: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header44: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header45: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header46: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header47: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header48: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header49: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header50: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header51: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header52: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header53: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header54: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header55: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header56: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header57: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header58: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header59: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header60: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header61: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header62: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header63: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header64: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header65: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header66: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header67: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header68: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header69: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header70: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header71: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header72: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header73: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header74: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header75: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header76: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header77: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header78: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header79: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header80: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header81: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header82: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header83: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header84: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header85: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header86: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header87: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header88: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header89: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header90: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header91: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header92: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header93: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+user-header94: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/test/core/bad_client/tests/server_registered_method.c b/test/core/bad_client/tests/server_registered_method.c
index 60d3b89..6216553 100644
--- a/test/core/bad_client/tests/server_registered_method.c
+++ b/test/core/bad_client/tests/server_registered_method.c
@@ -111,43 +111,43 @@
 
   /* body generated with
    * tools/codegen/core/gen_server_registered_method_bad_client_test_body.py */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier_fails,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, NULL,
                            PFX_STR "\x00\x00\x00\x00\x00\x00\x00\x00\x01",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier_fails,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, NULL,
                            PFX_STR "\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, NULL, PFX_STR
                            "\x00\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, NULL, PFX_STR
                            "\x00\x00\x03\x00\x00\x00\x00\x00\x01\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier_fails,
+      verifier_fails, NULL,
       PFX_STR "\x00\x00\x04\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00",
       GRPC_BAD_CLIENT_DISCONNECT);
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier_succeeds,
+      verifier_succeeds, NULL,
       PFX_STR "\x00\x00\x05\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00", 0);
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier_fails,
+      verifier_fails, NULL,
       PFX_STR "\x00\x00\x05\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x01",
       GRPC_BAD_CLIENT_DISCONNECT);
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier_succeeds,
+      verifier_succeeds, NULL,
       PFX_STR "\x00\x00\x06\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x01\x00",
       0);
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier_fails,
+      verifier_fails, NULL,
       PFX_STR "\x00\x00\x05\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x02",
       GRPC_BAD_CLIENT_DISCONNECT);
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier_fails,
+      verifier_fails, NULL,
       PFX_STR "\x00\x00\x06\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x02\x00",
       GRPC_BAD_CLIENT_DISCONNECT);
   GRPC_RUN_BAD_CLIENT_TEST(
-      verifier_succeeds, PFX_STR
+      verifier_succeeds, NULL, PFX_STR
       "\x00\x00\x07\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x02\x00\x00",
       0);
 
diff --git a/test/core/bad_client/tests/simple_request.c b/test/core/bad_client/tests/simple_request.c
index 3ae6eb3..25bbe96 100644
--- a/test/core/bad_client/tests/simple_request.c
+++ b/test/core/bad_client/tests/simple_request.c
@@ -139,42 +139,42 @@
   grpc_test_init(argc, argv);
 
   /* basic request: check that things are working */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR, 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR_UNUSUAL, 0);
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR_UNUSUAL2, 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR, 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR_UNUSUAL, 0);
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR_UNUSUAL2, 0);
 
   /* push an illegal data frame */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR
                            "\x00\x00\x05\x00\x00\x00\x00\x00\x01"
                            "\x34\x00\x00\x00\x00",
                            0);
 
   /* push a data frame with bad flags */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x00\x02\x00\x00\x00\x01", 0);
   /* push a window update with a bad length */
-  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL,
                            PFX_STR "\x00\x00\x01\x08\x00\x00\x00\x00\x01", 0);
   /* push a window update with bad flags */
-  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL,
                            PFX_STR "\x00\x00\x00\x08\x10\x00\x00\x00\x01", 0);
   /* push a window update with bad data */
-  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, PFX_STR
+  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL, PFX_STR
                            "\x00\x00\x04\x08\x00\x00\x00\x00\x01"
                            "\xff\xff\xff\xff",
                            0);
   /* push a short goaway */
-  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL,
                            PFX_STR "\x00\x00\x04\x07\x00\x00\x00\x00\x00", 0);
   /* disconnect before sending goaway */
-  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL,
                            PFX_STR "\x00\x01\x12\x07\x00\x00\x00\x00\x00",
                            GRPC_BAD_CLIENT_DISCONNECT);
   /* push a rst_stream with a bad length */
-  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL,
                            PFX_STR "\x00\x00\x01\x03\x00\x00\x00\x00\x01", 0);
   /* push a rst_stream with bad flags */
-  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL,
                            PFX_STR "\x00\x00\x00\x03\x10\x00\x00\x00\x01", 0);
 
   return 0;
diff --git a/test/core/bad_client/tests/unknown_frame.c b/test/core/bad_client/tests/unknown_frame.c
index f3870a1..4f483d2 100644
--- a/test/core/bad_client/tests/unknown_frame.c
+++ b/test/core/bad_client/tests/unknown_frame.c
@@ -51,7 +51,7 @@
   grpc_test_init(argc, argv);
 
   /* test adding prioritization data */
-  GRPC_RUN_BAD_CLIENT_TEST(verifier,
+  GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL,
                            PFX_STR "\x00\x00\x00\x88\x00\x00\x00\x00\x01",
                            GRPC_BAD_CLIENT_DISCONNECT);
 
diff --git a/test/core/bad_client/tests/window_overflow.c b/test/core/bad_client/tests/window_overflow.c
index 16f11e7..0d17dbe 100644
--- a/test/core/bad_client/tests/window_overflow.c
+++ b/test/core/bad_client/tests/window_overflow.c
@@ -105,7 +105,7 @@
       addbuf(message, sizeof(message));
     }
   }
-  grpc_run_bad_client_test(verifier, g_buffer, g_count, 0);
+  grpc_run_bad_client_test(verifier, NULL, g_buffer, g_count, 0);
   gpr_free(g_buffer);
 
   return 0;
diff --git a/test/core/channel/channel_args_test.c b/test/core/channel/channel_args_test.c
index c7fc259..c2fc050 100644
--- a/test/core/channel/channel_args_test.c
+++ b/test/core/channel/channel_args_test.c
@@ -77,7 +77,8 @@
   ch_args =
       grpc_channel_args_set_compression_algorithm(NULL, GRPC_COMPRESS_GZIP);
   GPR_ASSERT(ch_args->num_args == 1);
-  GPR_ASSERT(strcmp(ch_args->args[0].key, GRPC_COMPRESSION_ALGORITHM_ARG) == 0);
+  GPR_ASSERT(strcmp(ch_args->args[0].key,
+                    GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM) == 0);
   GPR_ASSERT(ch_args->args[0].type == GRPC_ARG_INTEGER);
 
   grpc_channel_args_destroy(ch_args);
diff --git a/test/core/client_config/lb_policies_test.c b/test/core/client_config/lb_policies_test.c
index e766672..2ec4612 100644
--- a/test/core/client_config/lb_policies_test.c
+++ b/test/core/client_config/lb_policies_test.c
@@ -438,9 +438,9 @@
   return calls;
 }
 
-static void assert_channel_connectivity(
-    grpc_channel *ch, size_t num_accepted_conn_states,
-    grpc_connectivity_state accepted_conn_state, ...) {
+static void assert_channel_connectivity(grpc_channel *ch,
+                                        size_t num_accepted_conn_states,
+                                        int accepted_conn_state, ...) {
   size_t i;
   grpc_channel_stack *client_stack;
   grpc_channel_element *client_channel_filter;
@@ -456,7 +456,7 @@
   grpc_exec_ctx_finish(&exec_ctx);
   va_start(ap, accepted_conn_state);
   for (i = 0; i < num_accepted_conn_states; i++) {
-    if (actual_conn_state == accepted_conn_state) {
+    if ((int)actual_conn_state == accepted_conn_state) {
       break;
     }
     accepted_conn_state = va_arg(ap, grpc_connectivity_state);
diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_config/set_initial_connect_string_test.c
index 83058d9..c1b8452 100644
--- a/test/core/client_config/set_initial_connect_string_test.c
+++ b/test/core/client_config/set_initial_connect_string_test.c
@@ -37,6 +37,7 @@
 #include <grpc/support/host_port.h>
 #include <grpc/support/log.h>
 #include <grpc/support/slice.h>
+#include <grpc/support/thd.h>
 
 #include "src/core/ext/client_config/initial_connect_string.h"
 #include "src/core/lib/iomgr/sockaddr.h"
@@ -56,7 +57,7 @@
   gpr_slice_buffer incoming_buffer;
   gpr_slice_buffer temp_incoming_buffer;
   grpc_endpoint *tcp;
-  int done;
+  gpr_atm done_atm;
 };
 
 static const char *magic_connect_string = "magic initial string";
@@ -69,7 +70,7 @@
   gpr_slice_buffer_move_into(&state.temp_incoming_buffer,
                              &state.incoming_buffer);
   if (state.incoming_buffer.length > strlen(magic_connect_string)) {
-    state.done = 1;
+    gpr_atm_rel_store(&state.done_atm, 1);
     grpc_endpoint_shutdown(exec_ctx, state.tcp);
     grpc_endpoint_destroy(exec_ctx, state.tcp);
   } else {
@@ -116,7 +117,7 @@
 }
 
 static void start_rpc(int use_creds, int target_port) {
-  state.done = 0;
+  gpr_atm_rel_store(&state.done_atm, 0);
   state.cq = grpc_completion_queue_create(NULL);
   if (use_creds) {
     state.creds = grpc_fake_transport_security_credentials_create();
@@ -139,7 +140,7 @@
   state.op.reserved = NULL;
   GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(state.call, &state.op,
                                                    (size_t)(1), NULL, NULL));
-  grpc_completion_queue_next(state.cq, n_sec_deadline(1), NULL);
+  grpc_completion_queue_next(state.cq, n_sec_deadline(5), NULL);
 }
 
 static void cleanup_rpc(void) {
@@ -157,12 +158,29 @@
   gpr_free(state.target);
 }
 
-static void poll_server_until_read_done(test_tcp_server *server) {
-  gpr_timespec deadline = n_sec_deadline(5);
-  while (state.done == 0 &&
+typedef struct {
+  test_tcp_server *server;
+  gpr_event *signal_when_done;
+} poll_args;
+
+static void actually_poll_server(void *arg) {
+  poll_args *pa = arg;
+  gpr_timespec deadline = n_sec_deadline(10);
+  while (gpr_atm_acq_load(&state.done_atm) == 0 &&
          gpr_time_cmp(gpr_now(GPR_CLOCK_REALTIME), deadline) < 0) {
-    test_tcp_server_poll(server, 1);
+    test_tcp_server_poll(pa->server, 1);
   }
+  gpr_event_set(pa->signal_when_done, (void *)1);
+  gpr_free(pa);
+}
+
+static void poll_server_until_read_done(test_tcp_server *server,
+                                        gpr_event *signal_when_done) {
+  gpr_thd_id id;
+  poll_args *pa = gpr_malloc(sizeof(*pa));
+  pa->server = server;
+  pa->signal_when_done = signal_when_done;
+  gpr_thd_new(&id, actually_poll_server, pa, NULL);
 }
 
 static void match_initial_magic_string(gpr_slice_buffer *buffer) {
@@ -180,20 +198,26 @@
 }
 
 static void test_initial_string(test_tcp_server *server, int secure) {
+  gpr_event ev;
+  gpr_event_init(&ev);
   grpc_test_set_initial_connect_string_function(set_magic_initial_string);
+  poll_server_until_read_done(server, &ev);
   start_rpc(secure, server_port);
-  poll_server_until_read_done(server);
+  gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME));
   match_initial_magic_string(&state.incoming_buffer);
   cleanup_rpc();
 }
 
 static void test_initial_string_with_redirect(test_tcp_server *server,
                                               int secure) {
+  gpr_event ev;
+  gpr_event_init(&ev);
   int another_port = grpc_pick_unused_port_or_die();
   grpc_test_set_initial_connect_string_function(
       reset_addr_and_set_magic_string);
+  poll_server_until_read_done(server, &ev);
   start_rpc(secure, another_port);
-  poll_server_until_read_done(server);
+  gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME));
   match_initial_magic_string(&state.incoming_buffer);
   cleanup_rpc();
 }
diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c
index 81f76ea..202fb3b 100644
--- a/test/core/end2end/dualstack_socket_test.c
+++ b/test/core/end2end/dualstack_socket_test.c
@@ -88,9 +88,11 @@
   int was_cancelled = 2;
   grpc_call_details call_details;
   char *peer;
+  int picked_port = 0;
 
   if (port == 0) {
     port = grpc_pick_unused_port_or_die();
+    picked_port = 1;
   }
 
   gpr_join_host_port(&server_hostport, server_host, port);
@@ -263,6 +265,9 @@
 
   grpc_call_details_destroy(&call_details);
   gpr_free(details);
+  if (picked_port) {
+    grpc_recycle_unused_port(port);
+  }
 }
 
 int external_dns_works(const char *host) {
diff --git a/test/core/end2end/fixtures/h2_proxy.c b/test/core/end2end/fixtures/h2_proxy.c
index 863673a..8c50eeb 100644
--- a/test/core/end2end/fixtures/h2_proxy.c
+++ b/test/core/end2end/fixtures/h2_proxy.c
@@ -55,14 +55,16 @@
   grpc_end2end_proxy *proxy;
 } fullstack_fixture_data;
 
-static grpc_server *create_proxy_server(const char *port) {
-  grpc_server *s = grpc_server_create(NULL, NULL);
+static grpc_server *create_proxy_server(const char *port,
+                                        grpc_channel_args *server_args) {
+  grpc_server *s = grpc_server_create(server_args, NULL);
   GPR_ASSERT(grpc_server_add_insecure_http2_port(s, port));
   return s;
 }
 
-static grpc_channel *create_proxy_client(const char *target) {
-  return grpc_insecure_channel_create(target, NULL, NULL);
+static grpc_channel *create_proxy_client(const char *target,
+                                         grpc_channel_args *client_args) {
+  return grpc_insecure_channel_create(target, client_args, NULL);
 }
 
 static const grpc_end2end_proxy_def proxy_def = {create_proxy_server,
@@ -74,7 +76,7 @@
   fullstack_fixture_data *ffd = gpr_malloc(sizeof(fullstack_fixture_data));
   memset(&f, 0, sizeof(f));
 
-  ffd->proxy = grpc_end2end_proxy_create(&proxy_def);
+  ffd->proxy = grpc_end2end_proxy_create(&proxy_def, client_args, server_args);
 
   f.fixture_data = ffd;
   f.cq = grpc_completion_queue_create(NULL);
diff --git a/test/core/end2end/fixtures/h2_ssl_cert.c b/test/core/end2end/fixtures/h2_ssl_cert.c
index cd031ca..f4dea2c 100644
--- a/test/core/end2end/fixtures/h2_ssl_cert.c
+++ b/test/core/end2end/fixtures/h2_ssl_cert.c
@@ -143,11 +143,11 @@
     chttp2_init_server_secure_fullstack(f, server_args, ssl_creds);         \
   }
 
-SERVER_INIT(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE);
-SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY);
-SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY);
-SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY);
-SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY);
+SERVER_INIT(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE)
+SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY)
+SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY)
+SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY)
+SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY)
 
 #define CLIENT_INIT_NAME(cert_type) \
   chttp2_init_client_simple_ssl_secure_fullstack_##cert_type
@@ -189,10 +189,10 @@
     grpc_channel_args_destroy(new_client_args);                              \
   }
 
-CLIENT_INIT(NONE);
-CLIENT_INIT(SELF_SIGNED);
-CLIENT_INIT(SIGNED);
-CLIENT_INIT(BAD_CERT_PAIR);
+CLIENT_INIT(NONE)
+CLIENT_INIT(SELF_SIGNED)
+CLIENT_INIT(SIGNED)
+CLIENT_INIT(BAD_CERT_PAIR)
 
 #define TEST_NAME(enum_name, cert_type, result) \
   "chttp2/ssl_" #enum_name "_" #cert_type "_" #result "_"
diff --git a/test/core/end2end/fixtures/h2_ssl_proxy.c b/test/core/end2end/fixtures/h2_ssl_proxy.c
index 1403b76..151a86c 100644
--- a/test/core/end2end/fixtures/h2_ssl_proxy.c
+++ b/test/core/end2end/fixtures/h2_ssl_proxy.c
@@ -54,8 +54,9 @@
   grpc_end2end_proxy *proxy;
 } fullstack_secure_fixture_data;
 
-static grpc_server *create_proxy_server(const char *port) {
-  grpc_server *s = grpc_server_create(NULL, NULL);
+static grpc_server *create_proxy_server(const char *port,
+                                        grpc_channel_args *server_args) {
+  grpc_server *s = grpc_server_create(server_args, NULL);
   grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key,
                                                   test_server1_cert};
   grpc_server_credentials *ssl_creds =
@@ -65,18 +66,20 @@
   return s;
 }
 
-static grpc_channel *create_proxy_client(const char *target) {
+static grpc_channel *create_proxy_client(const char *target,
+                                         grpc_channel_args *client_args) {
   grpc_channel *channel;
   grpc_channel_credentials *ssl_creds =
       grpc_ssl_credentials_create(NULL, NULL, NULL);
   grpc_arg ssl_name_override = {GRPC_ARG_STRING,
                                 GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
                                 {"foo.test.google.fr"}};
-  grpc_channel_args client_args;
-  client_args.num_args = 1;
-  client_args.args = &ssl_name_override;
-  channel = grpc_secure_channel_create(ssl_creds, target, &client_args, NULL);
+  grpc_channel_args *new_client_args =
+      grpc_channel_args_copy_and_add(client_args, &ssl_name_override, 1);
+  channel =
+      grpc_secure_channel_create(ssl_creds, target, new_client_args, NULL);
   grpc_channel_credentials_release(ssl_creds);
+  grpc_channel_args_destroy(new_client_args);
   return channel;
 }
 
@@ -90,7 +93,7 @@
       gpr_malloc(sizeof(fullstack_secure_fixture_data));
   memset(&f, 0, sizeof(f));
 
-  ffd->proxy = grpc_end2end_proxy_create(&proxy_def);
+  ffd->proxy = grpc_end2end_proxy_create(&proxy_def, client_args, server_args);
 
   f.fixture_data = ffd;
   f.cq = grpc_completion_queue_create(NULL);
diff --git a/test/core/end2end/fixtures/proxy.c b/test/core/end2end/fixtures/proxy.c
index a6487a1..f6e01ec 100644
--- a/test/core/end2end/fixtures/proxy.c
+++ b/test/core/end2end/fixtures/proxy.c
@@ -89,8 +89,9 @@
 static void thread_main(void *arg);
 static void request_call(grpc_end2end_proxy *proxy);
 
-grpc_end2end_proxy *grpc_end2end_proxy_create(
-    const grpc_end2end_proxy_def *def) {
+grpc_end2end_proxy *grpc_end2end_proxy_create(const grpc_end2end_proxy_def *def,
+                                              grpc_channel_args *client_args,
+                                              grpc_channel_args *server_args) {
   gpr_thd_options opt = gpr_thd_options_default();
   int proxy_port = grpc_pick_unused_port_or_die();
   int server_port = grpc_pick_unused_port_or_die();
@@ -105,8 +106,8 @@
           proxy->server_port);
 
   proxy->cq = grpc_completion_queue_create(NULL);
-  proxy->server = def->create_server(proxy->proxy_port);
-  proxy->client = def->create_client(proxy->server_port);
+  proxy->server = def->create_server(proxy->proxy_port, server_args);
+  proxy->client = def->create_client(proxy->server_port, client_args);
 
   grpc_server_register_completion_queue(proxy->server, proxy->cq, NULL);
   grpc_server_start(proxy->server);
diff --git a/test/core/end2end/fixtures/proxy.h b/test/core/end2end/fixtures/proxy.h
index c1cf01d..75b75d1 100644
--- a/test/core/end2end/fixtures/proxy.h
+++ b/test/core/end2end/fixtures/proxy.h
@@ -41,12 +41,15 @@
 typedef struct grpc_end2end_proxy grpc_end2end_proxy;
 
 typedef struct grpc_end2end_proxy_def {
-  grpc_server *(*create_server)(const char *port);
-  grpc_channel *(*create_client)(const char *target);
+  grpc_server *(*create_server)(const char *port,
+                                grpc_channel_args *server_args);
+  grpc_channel *(*create_client)(const char *target,
+                                 grpc_channel_args *client_args);
 } grpc_end2end_proxy_def;
 
-grpc_end2end_proxy *grpc_end2end_proxy_create(
-    const grpc_end2end_proxy_def *def);
+grpc_end2end_proxy *grpc_end2end_proxy_create(const grpc_end2end_proxy_def *def,
+                                              grpc_channel_args *client_args,
+                                              grpc_channel_args *server_args);
 void grpc_end2end_proxy_destroy(grpc_end2end_proxy *proxy);
 
 const char *grpc_end2end_proxy_get_client_target(grpc_end2end_proxy *proxy);
diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py
index cffe599..3e10ad5 100755
--- a/test/core/end2end/gen_build_yaml.py
+++ b/test/core/end2end/gen_build_yaml.py
@@ -39,9 +39,9 @@
 
 FixtureOptions = collections.namedtuple(
     'FixtureOptions',
-    'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing')
+    'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing exclude_configs')
 default_unsecure_fixture_options = FixtureOptions(
-    True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False)
+    True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, [])
 socketpair_unsecure_fixture_options = default_unsecure_fixture_options._replace(fullstack=False, dns_resolver=False)
 default_secure_fixture_options = default_unsecure_fixture_options._replace(secure=True)
 uds_fixture_options = default_unsecure_fixture_options._replace(dns_resolver=False, platforms=['linux', 'mac', 'posix'])
@@ -60,7 +60,7 @@
     'h2_proxy': default_unsecure_fixture_options._replace(includes_proxy=True,
                                                           ci_mac=False),
     'h2_sockpair_1byte': socketpair_unsecure_fixture_options._replace(
-        ci_mac=False),
+        ci_mac=False, exclude_configs=['msan']),
     'h2_sockpair': socketpair_unsecure_fixture_options._replace(ci_mac=False),
     'h2_sockpair+trace': socketpair_unsecure_fixture_options._replace(
         ci_mac=False, tracing=True),
@@ -246,7 +246,7 @@
           {
               'name': '%s_nosec_test' % f,
               'args': [t],
-              'exclude_configs': [],
+              'exclude_configs': END2END_FIXTURES[f].exclude_configs,
               'platforms': END2END_FIXTURES[f].platforms,
               'ci_platforms': (END2END_FIXTURES[f].platforms
                                if END2END_FIXTURES[f].ci_mac else without(
diff --git a/test/core/end2end/tests/large_metadata.c b/test/core/end2end/tests/large_metadata.c
index 0e5d6b4..ae1f68a 100644
--- a/test/core/end2end/tests/large_metadata.c
+++ b/test/core/end2end/tests/large_metadata.c
@@ -97,7 +97,7 @@
   grpc_completion_queue_destroy(f->cq);
 }
 
-/* Request with a large amount of metadata.*/
+// Request with a large amount of metadata.
 static void test_request_with_large_metadata(grpc_end2end_test_config config) {
   grpc_call *c;
   grpc_call *s;
@@ -106,8 +106,13 @@
       grpc_raw_byte_buffer_create(&request_payload_slice, 1);
   gpr_timespec deadline = five_seconds_time();
   grpc_metadata meta;
+  const size_t large_size = 64 * 1024;
+  grpc_arg arg = {GRPC_ARG_INTEGER,
+                  GRPC_ARG_MAX_METADATA_SIZE,
+                  {.integer = (int)large_size + 1024}};
+  grpc_channel_args args = {1, &arg};
   grpc_end2end_test_fixture f =
-      begin_test(config, "test_request_with_large_metadata", NULL, NULL);
+      begin_test(config, "test_request_with_large_metadata", &args, &args);
   cq_verifier *cqv = cq_verifier_create(f.cq);
   grpc_op ops[6];
   grpc_op *op;
@@ -121,7 +126,6 @@
   char *details = NULL;
   size_t details_capacity = 0;
   int was_cancelled = 2;
-  const size_t large_size = 64 * 1024;
 
   c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq,
                                "/foo", "foo.test.google.fr", deadline, NULL);
@@ -138,6 +142,7 @@
   grpc_metadata_array_init(&request_metadata_recv);
   grpc_call_details_init(&call_details);
 
+  // Client: send request.
   op = ops;
   op->op = GRPC_OP_SEND_INITIAL_METADATA;
   op->data.send_initial_metadata.count = 1;
@@ -174,9 +179,11 @@
       grpc_server_request_call(f.server, &s, &call_details,
                                &request_metadata_recv, f.cq, f.cq, tag(101));
   GPR_ASSERT(GRPC_CALL_OK == error);
+
   cq_expect_completion(cqv, tag(101), 1);
   cq_verify(cqv);
 
+  // Server: send initial metadata and receive request.
   op = ops;
   op->op = GRPC_OP_SEND_INITIAL_METADATA;
   op->data.send_initial_metadata.count = 0;
@@ -194,6 +201,8 @@
   cq_expect_completion(cqv, tag(102), 1);
   cq_verify(cqv);
 
+  // Server: receive close and send status.  This should trigger
+  // completion of request on client.
   op = ops;
   op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
   op->data.recv_close_on_server.cancelled = &was_cancelled;
diff --git a/test/core/end2end/tests/max_message_length.c b/test/core/end2end/tests/max_message_length.c
index b5dbc13..4f57278 100644
--- a/test/core/end2end/tests/max_message_length.c
+++ b/test/core/end2end/tests/max_message_length.c
@@ -53,7 +53,10 @@
                                             grpc_channel_args *server_args) {
   grpc_end2end_test_fixture f;
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
-  f = config.create_fixture(client_args, server_args);
+  // We intentionally do not pass the client and server args to
+  // create_fixture(), since we don't want the limit enforced on the
+  // proxy, only on the backend server.
+  f = config.create_fixture(NULL, NULL);
   config.init_server(&f, server_args);
   config.init_client(&f, client_args);
   return f;
diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c
index 5248b61..1e7e4fa 100644
--- a/test/core/iomgr/udp_server_test.c
+++ b/test/core/iomgr/udp_server_test.c
@@ -32,20 +32,22 @@
  */
 
 #include "src/core/lib/iomgr/udp_server.h"
-#include <grpc/grpc.h>
-#include <grpc/support/alloc.h>
-#include <grpc/support/log.h>
-#include <grpc/support/sync.h>
-#include <grpc/support/time.h>
-#include "src/core/lib/iomgr/ev_posix.h"
-#include "src/core/lib/iomgr/iomgr.h"
-#include "test/core/util/test_config.h"
 
 #include <netinet/in.h>
 #include <string.h>
 #include <sys/socket.h>
 #include <unistd.h>
 
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/sync.h>
+#include <grpc/support/time.h>
+
+#include "src/core/lib/iomgr/ev_posix.h"
+#include "src/core/lib/iomgr/iomgr.h"
+#include "test/core/util/test_config.h"
+
 #ifdef GRPC_NEED_UDP
 
 #define LOG_TEST(x) gpr_log(GPR_INFO, "%s", #x)
@@ -54,6 +56,7 @@
 static gpr_mu *g_mu;
 static int g_number_of_reads = 0;
 static int g_number_of_bytes_read = 0;
+static int g_number_of_orphan_calls = 0;
 
 static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd,
                     grpc_server *server) {
@@ -71,6 +74,12 @@
   gpr_mu_unlock(g_mu);
 }
 
+static void on_fd_orphaned(grpc_fd *emfd) {
+  gpr_log(GPR_INFO, "gRPC FD about to be orphaned: %d",
+          grpc_fd_wrapped_fd(emfd));
+  g_number_of_orphan_calls++;
+}
+
 static void test_no_op(void) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   grpc_udp_server *s = grpc_udp_server_create();
@@ -88,6 +97,7 @@
 }
 
 static void test_no_op_with_port(void) {
+  g_number_of_orphan_calls = 0;
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   struct sockaddr_in addr;
   grpc_udp_server *s = grpc_udp_server_create();
@@ -96,13 +106,17 @@
   memset(&addr, 0, sizeof(addr));
   addr.sin_family = AF_INET;
   GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr),
-                                      on_read));
+                                      on_read, on_fd_orphaned));
 
   grpc_udp_server_destroy(&exec_ctx, s, NULL);
   grpc_exec_ctx_finish(&exec_ctx);
+
+  /* The server had a single FD, which should be orphaned. */
+  GPR_ASSERT(g_number_of_orphan_calls == 1);
 }
 
 static void test_no_op_with_port_and_start(void) {
+  g_number_of_orphan_calls = 0;
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   struct sockaddr_in addr;
   grpc_udp_server *s = grpc_udp_server_create();
@@ -111,12 +125,15 @@
   memset(&addr, 0, sizeof(addr));
   addr.sin_family = AF_INET;
   GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr),
-                                      on_read));
+                                      on_read, on_fd_orphaned));
 
   grpc_udp_server_start(&exec_ctx, s, NULL, 0, NULL);
 
   grpc_udp_server_destroy(&exec_ctx, s, NULL);
   grpc_exec_ctx_finish(&exec_ctx);
+
+  /* The server had a single FD which should be orphaned. */
+  GPR_ASSERT(g_number_of_orphan_calls == 1);
 }
 
 static void test_receive(int number_of_clients) {
@@ -133,11 +150,12 @@
   gpr_log(GPR_INFO, "clients=%d", number_of_clients);
 
   g_number_of_bytes_read = 0;
+  g_number_of_orphan_calls = 0;
 
   memset(&addr, 0, sizeof(addr));
   addr.ss_family = AF_INET;
-  GPR_ASSERT(
-      grpc_udp_server_add_port(s, (struct sockaddr *)&addr, addr_len, on_read));
+  GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, addr_len,
+                                      on_read, on_fd_orphaned));
 
   svrfd = grpc_udp_server_get_fd(s, 0);
   GPR_ASSERT(svrfd >= 0);
@@ -176,6 +194,8 @@
 
   grpc_udp_server_destroy(&exec_ctx, s, NULL);
   grpc_exec_ctx_finish(&exec_ctx);
+
+  GPR_ASSERT(g_number_of_orphan_calls == 5);
 }
 
 static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
diff --git a/test/core/iomgr/workqueue_test.c b/test/core/iomgr/workqueue_test.c
index 874e696..953cc35 100644
--- a/test/core/iomgr/workqueue_test.c
+++ b/test/core/iomgr/workqueue_test.c
@@ -73,8 +73,10 @@
 
   gpr_mu_lock(g_mu);
   GPR_ASSERT(!done);
-  grpc_pollset_work(&exec_ctx, g_pollset, &worker, gpr_now(deadline.clock_type),
-                    deadline);
+  while (!done) {
+    grpc_pollset_work(&exec_ctx, g_pollset, &worker,
+                      gpr_now(deadline.clock_type), deadline);
+  }
   gpr_mu_unlock(g_mu);
   grpc_exec_ctx_finish(&exec_ctx);
   GPR_ASSERT(done);
@@ -97,9 +99,10 @@
   grpc_workqueue_add_to_pollset(&exec_ctx, wq, g_pollset);
 
   gpr_mu_lock(g_mu);
-  GPR_ASSERT(!done);
-  grpc_pollset_work(&exec_ctx, g_pollset, &worker, gpr_now(deadline.clock_type),
-                    deadline);
+  while (!done) {
+    grpc_pollset_work(&exec_ctx, g_pollset, &worker,
+                      gpr_now(deadline.clock_type), deadline);
+  }
   gpr_mu_unlock(g_mu);
   grpc_exec_ctx_finish(&exec_ctx);
   GPR_ASSERT(done);
diff --git a/test/core/surface/public_headers_must_be_c89.c b/test/core/surface/public_headers_must_be_c89.c
index 3eeb55d..fd6ff2c 100644
--- a/test/core/surface/public_headers_must_be_c89.c
+++ b/test/core/surface/public_headers_must_be_c89.c
@@ -36,6 +36,7 @@
 #include <grpc/census.h>
 #include <grpc/compression.h>
 #include <grpc/grpc.h>
+#include <grpc/grpc_cronet.h>
 #include <grpc/grpc_security.h>
 #include <grpc/grpc_security_constants.h>
 #include <grpc/impl/codegen/alloc.h>
diff --git a/test/core/util/port.h b/test/core/util/port.h
index 93788bc..faeabba 100644
--- a/test/core/util/port.h
+++ b/test/core/util/port.h
@@ -40,10 +40,16 @@
 
 /* pick a port number that is currently unused by either tcp or udp. return
    0 on failure. */
-int grpc_pick_unused_port();
+int grpc_pick_unused_port(void);
 /* pick a port number that is currently unused by either tcp or udp. abort
    on failure. */
-int grpc_pick_unused_port_or_die();
+int grpc_pick_unused_port_or_die(void);
+
+/* Return a port which was previously returned by grpc_pick_unused_port().
+ * Implementations of grpc_pick_unused_port() backed by a portserver may limit
+ * the total number of ports available; this lets a binary return its allocated
+ * ports back to the server if it is going to allocate a large number. */
+void grpc_recycle_unused_port(int port);
 
 #ifdef __cplusplus
 }
diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c
index eabd62f..265e0ac 100644
--- a/test/core/util/port_posix.c
+++ b/test/core/util/port_posix.c
@@ -68,6 +68,31 @@
   return 0;
 }
 
+static int free_chosen_port(int port) {
+  size_t i;
+  int found = 0;
+  size_t found_at = 0;
+  char *env = gpr_getenv("GRPC_TEST_PORT_SERVER");
+  /* Find the port and erase it from the list, then tell the server it can be
+     freed. */
+  for (i = 0; i < num_chosen_ports; i++) {
+    if (chosen_ports[i] == port) {
+      GPR_ASSERT(found == 0);
+      found = 1;
+      found_at = i;
+    }
+  }
+  if (found) {
+    chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1];
+    num_chosen_ports--;
+    if (env) {
+      grpc_free_port_using_server(env, port);
+    }
+  }
+  gpr_free(env);
+  return found;
+}
+
 static void free_chosen_ports(void) {
   char *env = gpr_getenv("GRPC_TEST_PORT_SERVER");
   if (env != NULL) {
@@ -210,4 +235,6 @@
   return port;
 }
 
+void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); }
+
 #endif /* GPR_POSIX_SOCKET && GRPC_TEST_PICK_PORT */
diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c
index 154d607..9023719 100644
--- a/test/core/util/port_windows.c
+++ b/test/core/util/port_windows.c
@@ -71,6 +71,30 @@
   return 0;
 }
 
+static int free_chosen_port(int port) {
+  size_t i;
+  int found = 0;
+  size_t found_at = 0;
+  char *env = gpr_getenv("GRPC_TEST_PORT_SERVER");
+  if (env != NULL) {
+    /* Find the port and erase it from the list, then tell the server it can be
+       freed. */
+    for (i = 0; i < num_chosen_ports; i++) {
+      if (chosen_ports[i] == port) {
+        GPR_ASSERT(found == 0);
+        found = 1;
+        found_at = i;
+      }
+    }
+    if (found) {
+      chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1];
+      grpc_free_port_using_server(env, port);
+      num_chosen_ports--;
+    }
+  }
+  return found;
+}
+
 static void free_chosen_ports(void) {
   char *env = gpr_getenv("GRPC_TEST_PORT_SERVER");
   if (env != NULL) {
@@ -216,4 +240,6 @@
   return port;
 }
 
+void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); }
+
 #endif /* GPR_WINSOCK_SOCKET && GRPC_TEST_PICK_PORT */
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index 0232a9f..45f5eb1 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -199,6 +199,28 @@
   bool spin_;
 };
 
+// This class disables the server builder plugins that may add sync services to
+// the server. If there are sync services, UnimplementedRpc test will triger
+// the sync unkown rpc routine on the server side, rather than the async one
+// that needs to be tested here.
+class ServerBuilderSyncPluginDisabler : public ::grpc::ServerBuilderOption {
+ public:
+  void UpdateArguments(ChannelArguments* arg) GRPC_OVERRIDE {}
+
+  void UpdatePlugins(
+      std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>>* plugins)
+      GRPC_OVERRIDE {
+    auto plugin = plugins->begin();
+    while (plugin != plugins->end()) {
+      if ((*plugin).second->has_sync_methods()) {
+        plugins->erase(plugin++);
+      } else {
+        plugin++;
+      }
+    }
+  }
+};
+
 class TestScenario {
  public:
   TestScenario(bool non_block, const grpc::string& creds_type,
@@ -223,8 +245,8 @@
   void SetUp() GRPC_OVERRIDE {
     poll_overrider_.reset(new PollingOverrider(!GetParam().disable_blocking));
 
-    int port = grpc_pick_unused_port_or_die();
-    server_address_ << "localhost:" << port;
+    port_ = grpc_pick_unused_port_or_die();
+    server_address_ << "localhost:" << port_;
 
     // Setup server
     ServerBuilder builder;
@@ -232,6 +254,12 @@
     builder.AddListeningPort(server_address_.str(), server_creds);
     builder.RegisterService(&service_);
     cq_ = builder.AddCompletionQueue();
+
+    // TODO(zyc): make a test option to choose wheather sync plugins should be
+    // deleted
+    std::unique_ptr<ServerBuilderOption> sync_plugin_disabler(
+        new ServerBuilderSyncPluginDisabler());
+    builder.SetOption(move(sync_plugin_disabler));
     server_ = builder.BuildAndStart();
 
     gpr_tls_set(&g_is_async_end2end_test, 1);
@@ -246,6 +274,7 @@
       ;
     poll_overrider_.reset();
     gpr_tls_set(&g_is_async_end2end_test, 0);
+    grpc_recycle_unused_port(port_);
   }
 
   void ResetStub() {
@@ -297,6 +326,7 @@
   std::unique_ptr<Server> server_;
   grpc::testing::EchoTestService::AsyncService service_;
   std::ostringstream server_address_;
+  int port_;
 
   std::unique_ptr<PollingOverrider> poll_overrider_;
 };
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index 0c9313f..e3408bf 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -975,6 +975,34 @@
   EXPECT_EQ("", s.error_message());
 }
 
+// Ask the server to send back a serialized proto in trailer.
+// This is an example of setting error details.
+TEST_P(End2endTest, BinaryTrailerTest) {
+  ResetStub();
+  EchoRequest request;
+  EchoResponse response;
+  ClientContext context;
+
+  request.mutable_param()->set_echo_metadata(true);
+  DebugInfo* info = request.mutable_param()->mutable_debug_info();
+  info->add_stack_entries("stack_entry_1");
+  info->add_stack_entries("stack_entry_2");
+  info->add_stack_entries("stack_entry_3");
+  info->set_detail("detailed debug info");
+  grpc::string expected_string = info->SerializeAsString();
+  request.set_message("Hello");
+
+  Status s = stub_->Echo(&context, request, &response);
+  EXPECT_FALSE(s.ok());
+  auto trailers = context.GetServerTrailingMetadata();
+  EXPECT_EQ(1u, trailers.count(kDebugInfoTrailerKey));
+  auto iter = trailers.find(kDebugInfoTrailerKey);
+  EXPECT_EQ(expected_string, iter->second);
+  // Parse the returned trailer into a DebugInfo proto.
+  DebugInfo returned_info;
+  EXPECT_TRUE(returned_info.ParseFromString(ToString(iter->second)));
+}
+
 //////////////////////////////////////////////////////////////////////////
 // Test with and without a proxy.
 class ProxyEnd2endTest : public End2endTest {
diff --git a/test/cpp/end2end/server_builder_plugin_test.cc b/test/cpp/end2end/server_builder_plugin_test.cc
new file mode 100644
index 0000000..87e3709
--- /dev/null
+++ b/test/cpp/end2end/server_builder_plugin_test.cc
@@ -0,0 +1,256 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc++/channel.h>
+#include <grpc++/client_context.h>
+#include <grpc++/create_channel.h>
+#include <grpc++/impl/server_builder_option.h>
+#include <grpc++/impl/server_builder_plugin.h>
+#include <grpc++/impl/server_initializer.h>
+#include <grpc++/security/credentials.h>
+#include <grpc++/security/server_credentials.h>
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+#include <grpc++/server_context.h>
+#include <grpc/grpc.h>
+#include <gtest/gtest.h>
+
+#include "src/proto/grpc/testing/echo.grpc.pb.h"
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/end2end/test_service_impl.h"
+
+#define PLUGIN_NAME "TestServerBuilderPlugin"
+
+namespace grpc {
+namespace testing {
+
+class TestServerBuilderPlugin : public ServerBuilderPlugin {
+ public:
+  TestServerBuilderPlugin() : service_(new TestServiceImpl()) {
+    init_server_is_called_ = false;
+    finish_is_called_ = false;
+    change_arguments_is_called_ = false;
+  }
+
+  grpc::string name() GRPC_OVERRIDE { return PLUGIN_NAME; }
+
+  void InitServer(ServerInitializer* si) GRPC_OVERRIDE {
+    init_server_is_called_ = true;
+    if (register_service_) {
+      si->RegisterService(service_);
+    }
+  }
+
+  void Finish(ServerInitializer* si) GRPC_OVERRIDE { finish_is_called_ = true; }
+
+  void ChangeArguments(const grpc::string& name, void* value) GRPC_OVERRIDE {
+    change_arguments_is_called_ = true;
+  }
+
+  bool has_async_methods() const GRPC_OVERRIDE {
+    if (register_service_) {
+      return service_->has_async_methods();
+    }
+    return false;
+  }
+
+  bool has_sync_methods() const GRPC_OVERRIDE {
+    if (register_service_) {
+      return service_->has_synchronous_methods();
+    }
+    return false;
+  }
+
+  void SetRegisterService() { register_service_ = true; }
+
+  bool init_server_is_called() { return init_server_is_called_; }
+  bool finish_is_called() { return finish_is_called_; }
+  bool change_arguments_is_called() { return change_arguments_is_called_; }
+
+ private:
+  bool init_server_is_called_;
+  bool finish_is_called_;
+  bool change_arguments_is_called_;
+  bool register_service_;
+  std::shared_ptr<TestServiceImpl> service_;
+};
+
+class InsertPluginServerBuilderOption : public ServerBuilderOption {
+ public:
+  InsertPluginServerBuilderOption() { register_service_ = false; }
+
+  void UpdateArguments(ChannelArguments* arg) GRPC_OVERRIDE {}
+
+  void UpdatePlugins(
+      std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>>* plugins)
+      GRPC_OVERRIDE {
+    plugins->clear();
+
+    std::unique_ptr<TestServerBuilderPlugin> plugin(
+        new TestServerBuilderPlugin());
+    if (register_service_) plugin->SetRegisterService();
+    (*plugins)[plugin->name()] = std::move(plugin);
+  }
+
+  void SetRegisterService() { register_service_ = true; }
+
+ private:
+  bool register_service_;
+};
+
+std::unique_ptr<ServerBuilderPlugin> CreateTestServerBuilderPlugin() {
+  return std::unique_ptr<ServerBuilderPlugin>(new TestServerBuilderPlugin());
+}
+
+void AddTestServerBuilderPlugin() {
+  static bool already_here = false;
+  if (already_here) return;
+  already_here = true;
+  ::grpc::ServerBuilder::InternalAddPluginFactory(
+      &CreateTestServerBuilderPlugin);
+}
+
+// Force AddServerBuilderPlugin() to be called at static initialization time.
+struct StaticTestPluginInitializer {
+  StaticTestPluginInitializer() { AddTestServerBuilderPlugin(); }
+} static_plugin_initializer_test_;
+
+// When the param boolean is true, the ServerBuilder plugin will be added at the
+// time of static initialization. When it's false, the ServerBuilder plugin will
+// be added using ServerBuilder::SetOption().
+class ServerBuilderPluginTest : public ::testing::TestWithParam<bool> {
+ public:
+  ServerBuilderPluginTest() {}
+
+  void SetUp() GRPC_OVERRIDE {
+    port_ = grpc_pick_unused_port_or_die();
+    builder_.reset(new ServerBuilder());
+  }
+
+  void InsertPlugin() {
+    if (GetParam()) {
+      // Add ServerBuilder plugin in static initialization
+      EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr);
+    } else {
+      // Add ServerBuilder plugin using ServerBuilder::SetOption()
+      builder_->SetOption(std::unique_ptr<ServerBuilderOption>(
+          new InsertPluginServerBuilderOption()));
+    }
+  }
+
+  void InsertPluginWithTestService() {
+    if (GetParam()) {
+      // Add ServerBuilder plugin in static initialization
+      EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr);
+      auto plugin = static_cast<TestServerBuilderPlugin*>(
+          builder_->plugins_[PLUGIN_NAME].get());
+      EXPECT_TRUE(plugin != nullptr);
+      plugin->SetRegisterService();
+    } else {
+      // Add ServerBuilder plugin using ServerBuilder::SetOption()
+      std::unique_ptr<InsertPluginServerBuilderOption> option(
+          new InsertPluginServerBuilderOption());
+      option->SetRegisterService();
+      builder_->SetOption(std::move(option));
+    }
+  }
+
+  void StartServer() {
+    grpc::string server_address = "localhost:" + to_string(port_);
+    builder_->AddListeningPort(server_address, InsecureServerCredentials());
+    server_ = builder_->BuildAndStart();
+    EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr);
+  }
+
+  void ResetStub() {
+    string target = "dns:localhost:" + to_string(port_);
+    channel_ = CreateChannel(target, InsecureChannelCredentials());
+    stub_ = grpc::testing::EchoTestService::NewStub(channel_);
+  }
+
+  void TearDown() GRPC_OVERRIDE {
+    EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr);
+    auto plugin = static_cast<TestServerBuilderPlugin*>(
+        builder_->plugins_[PLUGIN_NAME].get());
+    EXPECT_TRUE(plugin != nullptr);
+    EXPECT_TRUE(plugin->init_server_is_called());
+    EXPECT_TRUE(plugin->finish_is_called());
+  }
+
+  string to_string(const int number) {
+    std::stringstream strs;
+    strs << number;
+    return strs.str();
+  }
+
+ protected:
+  std::shared_ptr<Channel> channel_;
+  std::unique_ptr<ServerBuilder> builder_;
+  std::unique_ptr<grpc::testing::EchoTestService::Stub> stub_;
+  std::unique_ptr<Server> server_;
+  TestServiceImpl service_;
+  int port_;
+};
+
+TEST_P(ServerBuilderPluginTest, PluginWithoutServiceTest) {
+  InsertPlugin();
+  StartServer();
+}
+
+TEST_P(ServerBuilderPluginTest, PluginWithServiceTest) {
+  InsertPluginWithTestService();
+  StartServer();
+  ResetStub();
+
+  EchoRequest request;
+  EchoResponse response;
+  request.set_message("Hello hello hello hello");
+  ClientContext context;
+  context.set_compression_algorithm(GRPC_COMPRESS_GZIP);
+  Status s = stub_->Echo(&context, request, &response);
+  EXPECT_EQ(response.message(), request.message());
+  EXPECT_TRUE(s.ok());
+}
+
+INSTANTIATE_TEST_CASE_P(ServerBuilderPluginTest, ServerBuilderPluginTest,
+                        ::testing::Values(false, true));
+
+}  // namespace testing
+}  // namespace grpc
+
+int main(int argc, char** argv) {
+  grpc_test_init(argc, argv);
+  ::testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
diff --git a/test/cpp/end2end/test_service_impl.cc b/test/cpp/end2end/test_service_impl.cc
index 2f5dd6d..cbaee92 100644
--- a/test/cpp/end2end/test_service_impl.cc
+++ b/test/cpp/end2end/test_service_impl.cc
@@ -135,6 +135,14 @@
       context->AddTrailingMetadata(ToString(iter->first),
                                    ToString(iter->second));
     }
+    // Terminate rpc with error and debug info in trailer.
+    if (request->param().debug_info().stack_entries_size() ||
+        !request->param().debug_info().detail().empty()) {
+      grpc::string serialized_debug_info =
+          request->param().debug_info().SerializeAsString();
+      context->AddTrailingMetadata(kDebugInfoTrailerKey, serialized_debug_info);
+      return Status::CANCELLED;
+    }
   }
   if (request->has_param() &&
       (request->param().expected_client_identity().length() > 0 ||
diff --git a/test/cpp/end2end/test_service_impl.h b/test/cpp/end2end/test_service_impl.h
index 1ab6ced..c89f88c 100644
--- a/test/cpp/end2end/test_service_impl.h
+++ b/test/cpp/end2end/test_service_impl.h
@@ -47,6 +47,7 @@
 const int kNumResponseStreamsMsgs = 3;
 const char* const kServerCancelAfterReads = "cancel_after_reads";
 const char* const kServerTryCancelRequest = "server_try_cancel";
+const char* const kDebugInfoTrailerKey = "debug-info-bin";
 
 typedef enum {
   DO_NOT_CANCEL = 0,
diff --git a/test/cpp/grpclb/grpclb_api_test.cc b/test/cpp/grpclb/grpclb_api_test.cc
index 92f93c8..bf77878 100644
--- a/test/cpp/grpclb/grpclb_api_test.cc
+++ b/test/cpp/grpclb/grpclb_api_test.cc
@@ -35,13 +35,13 @@
 #include <string>
 
 #include "src/core/ext/lb_policy/grpclb/load_balancer_api.h"
-#include "src/proto/grpc/lb/v0/load_balancer.pb.h"  // C++ version
+#include "src/proto/grpc/lb/v1/load_balancer.pb.h"  // C++ version
 
 namespace grpc {
 namespace {
 
-using grpc::lb::v0::LoadBalanceRequest;
-using grpc::lb::v0::LoadBalanceResponse;
+using grpc::lb::v1::LoadBalanceRequest;
+using grpc::lb::v1::LoadBalanceResponse;
 
 class GrpclbTest : public ::testing::Test {};
 
@@ -60,9 +60,7 @@
 
 TEST_F(GrpclbTest, ParseResponse) {
   LoadBalanceResponse response;
-  const std::string client_config_str = "I'm a client config";
   auto* initial_response = response.mutable_initial_response();
-  initial_response->set_client_config(client_config_str);
   auto* client_stats_report_interval =
       initial_response->mutable_client_stats_report_interval();
   client_stats_report_interval->set_seconds(123);
@@ -73,10 +71,7 @@
       gpr_slice_from_copied_string(encoded_response.c_str());
   grpc_grpclb_response* c_response = grpc_grpclb_response_parse(encoded_slice);
   EXPECT_TRUE(c_response->has_initial_response);
-  EXPECT_TRUE(c_response->initial_response.has_client_config);
   EXPECT_FALSE(c_response->initial_response.has_load_balancer_delegate);
-  EXPECT_TRUE(strcmp(c_response->initial_response.client_config,
-                     client_config_str.c_str()) == 0);
   EXPECT_EQ(c_response->initial_response.client_stats_report_interval.seconds,
             123);
   EXPECT_EQ(c_response->initial_response.client_stats_report_interval.nanos,
diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc
index 9af6a88..7727824 100644
--- a/test/cpp/interop/client.cc
+++ b/test/cpp/interop/client.cc
@@ -81,6 +81,14 @@
 DEFINE_string(service_account_key_file, "",
               "Path to service account json key file.");
 DEFINE_string(oauth_scope, "", "Scope for OAuth tokens.");
+DEFINE_bool(do_not_abort_on_transient_failures, false,
+            "If set to 'true', abort() is not called in case of transient "
+            "failures (i.e failures that are temporary and will likely go away "
+            "on retrying; like a temporary connection failure) and an error "
+            "message is printed instead. Note that this flag just controls "
+            "whether abort() is called or not. It does not control whether the "
+            "test is retried in case of transient failures (and currently the "
+            "interop tests are not retried even if this flag is set to true)");
 
 using grpc::testing::CreateChannelForTestCase;
 using grpc::testing::GetServiceAccountJsonKey;
@@ -89,8 +97,9 @@
   grpc::testing::InitTest(&argc, &argv, true);
   gpr_log(GPR_INFO, "Testing these cases: %s", FLAGS_test_case.c_str());
   int ret = 0;
-  grpc::testing::InteropClient client(
-      CreateChannelForTestCase(FLAGS_test_case));
+  grpc::testing::InteropClient client(CreateChannelForTestCase(FLAGS_test_case),
+                                      true,
+                                      FLAGS_do_not_abort_on_transient_failures);
   if (FLAGS_test_case == "empty_unary") {
     client.DoEmpty();
   } else if (FLAGS_test_case == "large_unary") {
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index 22293d2..cba52b1 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -134,23 +134,43 @@
   serviceStub_.Reset(channel);
 }
 
-InteropClient::InteropClient(std::shared_ptr<Channel> channel)
-    : serviceStub_(channel, true) {}
-
 InteropClient::InteropClient(std::shared_ptr<Channel> channel,
-                             bool new_stub_every_test_case)
-    : serviceStub_(channel, new_stub_every_test_case) {}
+                             bool new_stub_every_test_case,
+                             bool do_not_abort_on_transient_failures)
+    : serviceStub_(channel, new_stub_every_test_case),
+      do_not_abort_on_transient_failures_(do_not_abort_on_transient_failures) {}
 
-void InteropClient::AssertOkOrPrintErrorStatus(const Status& s) {
+bool InteropClient::AssertStatusOk(const Status& s) {
   if (s.ok()) {
-    return;
+    return true;
   }
-  gpr_log(GPR_ERROR, "Error status code: %d, message: %s", s.error_code(),
-          s.error_message().c_str());
-  GPR_ASSERT(0);
+
+  // Note: At this point, s.error_code is definitely not StatusCode::OK (we
+  // already checked for s.ok() above). So, the following will call abort()
+  // (unless s.error_code() corresponds to a transient failure and
+  // 'do_not_abort_on_transient_failures' is true)
+  return AssertStatusCode(s, StatusCode::OK);
 }
 
-void InteropClient::DoEmpty() {
+bool InteropClient::AssertStatusCode(const Status& s,
+                                     StatusCode expected_code) {
+  if (s.error_code() == expected_code) {
+    return true;
+  }
+
+  gpr_log(GPR_ERROR, "Error status code: %d (expected: %d), message: %s",
+          s.error_code(), expected_code, s.error_message().c_str());
+
+  // In case of transient transient/retryable failures (like a broken
+  // connection) we may or may not abort (see TransientFailureOrAbort())
+  if (s.error_code() == grpc::StatusCode::UNAVAILABLE) {
+    return TransientFailureOrAbort();
+  }
+
+  abort();
+}
+
+bool InteropClient::DoEmpty() {
   gpr_log(GPR_DEBUG, "Sending an empty rpc...");
 
   Empty request = Empty::default_instance();
@@ -158,17 +178,21 @@
   ClientContext context;
 
   Status s = serviceStub_.Get()->EmptyCall(&context, request, &response);
-  AssertOkOrPrintErrorStatus(s);
+
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
 
   gpr_log(GPR_DEBUG, "Empty rpc done.");
+  return true;
 }
 
-void InteropClient::PerformLargeUnary(SimpleRequest* request,
+bool InteropClient::PerformLargeUnary(SimpleRequest* request,
                                       SimpleResponse* response) {
-  PerformLargeUnary(request, response, NoopChecks);
+  return PerformLargeUnary(request, response, NoopChecks);
 }
 
-void InteropClient::PerformLargeUnary(SimpleRequest* request,
+bool InteropClient::PerformLargeUnary(SimpleRequest* request,
                                       SimpleResponse* response,
                                       CheckerFn custom_checks_fn) {
   ClientContext context;
@@ -180,7 +204,9 @@
   request->mutable_payload()->set_body(payload.c_str(), kLargeRequestSize);
 
   Status s = serviceStub_.Get()->UnaryCall(&context, *request, response);
-  AssertOkOrPrintErrorStatus(s);
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
 
   custom_checks_fn(inspector, request, response);
 
@@ -203,9 +229,11 @@
     default:
       GPR_ASSERT(false);
   }
+
+  return true;
 }
 
-void InteropClient::DoComputeEngineCreds(
+bool InteropClient::DoComputeEngineCreds(
     const grpc::string& default_service_account,
     const grpc::string& oauth_scope) {
   gpr_log(GPR_DEBUG,
@@ -215,7 +243,11 @@
   request.set_fill_username(true);
   request.set_fill_oauth_scope(true);
   request.set_response_type(PayloadType::COMPRESSABLE);
-  PerformLargeUnary(&request, &response);
+
+  if (!PerformLargeUnary(&request, &response)) {
+    return false;
+  }
+
   gpr_log(GPR_DEBUG, "Got username %s", response.username().c_str());
   gpr_log(GPR_DEBUG, "Got oauth_scope %s", response.oauth_scope().c_str());
   GPR_ASSERT(!response.username().empty());
@@ -224,9 +256,10 @@
   const char* oauth_scope_str = response.oauth_scope().c_str();
   GPR_ASSERT(oauth_scope.find(oauth_scope_str) != grpc::string::npos);
   gpr_log(GPR_DEBUG, "Large unary with compute engine creds done.");
+  return true;
 }
 
-void InteropClient::DoOauth2AuthToken(const grpc::string& username,
+bool InteropClient::DoOauth2AuthToken(const grpc::string& username,
                                       const grpc::string& oauth_scope) {
   gpr_log(GPR_DEBUG,
           "Sending a unary rpc with raw oauth2 access token credentials ...");
@@ -239,16 +272,20 @@
 
   Status s = serviceStub_.Get()->UnaryCall(&context, request, &response);
 
-  AssertOkOrPrintErrorStatus(s);
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
+
   GPR_ASSERT(!response.username().empty());
   GPR_ASSERT(!response.oauth_scope().empty());
   GPR_ASSERT(username == response.username());
   const char* oauth_scope_str = response.oauth_scope().c_str();
   GPR_ASSERT(oauth_scope.find(oauth_scope_str) != grpc::string::npos);
   gpr_log(GPR_DEBUG, "Unary with oauth2 access token credentials done.");
+  return true;
 }
 
-void InteropClient::DoPerRpcCreds(const grpc::string& json_key) {
+bool InteropClient::DoPerRpcCreds(const grpc::string& json_key) {
   gpr_log(GPR_DEBUG, "Sending a unary rpc with per-rpc JWT access token ...");
   SimpleRequest request;
   SimpleResponse response;
@@ -263,35 +300,47 @@
 
   Status s = serviceStub_.Get()->UnaryCall(&context, request, &response);
 
-  AssertOkOrPrintErrorStatus(s);
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
+
   GPR_ASSERT(!response.username().empty());
   GPR_ASSERT(json_key.find(response.username()) != grpc::string::npos);
   gpr_log(GPR_DEBUG, "Unary with per-rpc JWT access token done.");
+  return true;
 }
 
-void InteropClient::DoJwtTokenCreds(const grpc::string& username) {
+bool InteropClient::DoJwtTokenCreds(const grpc::string& username) {
   gpr_log(GPR_DEBUG,
           "Sending a large unary rpc with JWT token credentials ...");
   SimpleRequest request;
   SimpleResponse response;
   request.set_fill_username(true);
   request.set_response_type(PayloadType::COMPRESSABLE);
-  PerformLargeUnary(&request, &response);
+
+  if (!PerformLargeUnary(&request, &response)) {
+    return false;
+  }
+
   GPR_ASSERT(!response.username().empty());
   GPR_ASSERT(username.find(response.username()) != grpc::string::npos);
   gpr_log(GPR_DEBUG, "Large unary with JWT token creds done.");
+  return true;
 }
 
-void InteropClient::DoLargeUnary() {
+bool InteropClient::DoLargeUnary() {
   gpr_log(GPR_DEBUG, "Sending a large unary rpc...");
   SimpleRequest request;
   SimpleResponse response;
   request.set_response_type(PayloadType::COMPRESSABLE);
-  PerformLargeUnary(&request, &response);
+  if (!PerformLargeUnary(&request, &response)) {
+    return false;
+  }
   gpr_log(GPR_DEBUG, "Large unary done.");
+  return true;
 }
 
-void InteropClient::DoLargeCompressedUnary() {
+bool InteropClient::DoLargeCompressedUnary() {
   const CompressionType compression_types[] = {NONE, GZIP, DEFLATE};
   const PayloadType payload_types[] = {COMPRESSABLE, UNCOMPRESSABLE, RANDOM};
   for (size_t i = 0; i < GPR_ARRAY_SIZE(payload_types); i++) {
@@ -307,14 +356,32 @@
       SimpleResponse response;
       request.set_response_type(payload_types[i]);
       request.set_response_compression(compression_types[j]);
-      PerformLargeUnary(&request, &response, CompressionChecks);
+
+      if (!PerformLargeUnary(&request, &response, CompressionChecks)) {
+        gpr_log(GPR_ERROR, "Large compressed unary failed %s", log_suffix);
+        gpr_free(log_suffix);
+        return false;
+      }
+
       gpr_log(GPR_DEBUG, "Large compressed unary done %s.", log_suffix);
       gpr_free(log_suffix);
     }
   }
+
+  return true;
 }
 
-void InteropClient::DoRequestStreaming() {
+// Either abort() (unless do_not_abort_on_transient_failures_ is true) or return
+// false
+bool InteropClient::TransientFailureOrAbort() {
+  if (do_not_abort_on_transient_failures_) {
+    return false;
+  }
+
+  abort();
+}
+
+bool InteropClient::DoRequestStreaming() {
   gpr_log(GPR_DEBUG, "Sending request steaming rpc ...");
 
   ClientContext context;
@@ -328,19 +395,25 @@
   for (unsigned int i = 0; i < request_stream_sizes.size(); ++i) {
     Payload* payload = request.mutable_payload();
     payload->set_body(grpc::string(request_stream_sizes[i], '\0'));
-    GPR_ASSERT(stream->Write(request));
+    if (!stream->Write(request)) {
+      gpr_log(GPR_ERROR, "DoRequestStreaming(): stream->Write() failed");
+      return TransientFailureOrAbort();
+    }
     aggregated_payload_size += request_stream_sizes[i];
   }
   stream->WritesDone();
+
   Status s = stream->Finish();
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
 
   GPR_ASSERT(response.aggregated_payload_size() == aggregated_payload_size);
-  AssertOkOrPrintErrorStatus(s);
-  gpr_log(GPR_DEBUG, "Request streaming done.");
+  return true;
 }
 
-void InteropClient::DoResponseStreaming() {
-  gpr_log(GPR_DEBUG, "Receiving response steaming rpc ...");
+bool InteropClient::DoResponseStreaming() {
+  gpr_log(GPR_DEBUG, "Receiving response streaming rpc ...");
 
   ClientContext context;
   StreamingOutputCallRequest request;
@@ -358,13 +431,27 @@
                grpc::string(response_stream_sizes[i], '\0'));
     ++i;
   }
-  GPR_ASSERT(response_stream_sizes.size() == i);
+
+  if (i < response_stream_sizes.size()) {
+    // stream->Read() failed before reading all the expected messages. This is
+    // most likely due to connection failure.
+    gpr_log(GPR_ERROR,
+            "DoResponseStreaming(): Read fewer streams (%d) than "
+            "response_stream_sizes.size() (%d)",
+            i, response_stream_sizes.size());
+    return TransientFailureOrAbort();
+  }
+
   Status s = stream->Finish();
-  AssertOkOrPrintErrorStatus(s);
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
+
   gpr_log(GPR_DEBUG, "Response streaming done.");
+  return true;
 }
 
-void InteropClient::DoResponseCompressedStreaming() {
+bool InteropClient::DoResponseCompressedStreaming() {
   const CompressionType compression_types[] = {NONE, GZIP, DEFLATE};
   const PayloadType payload_types[] = {COMPRESSABLE, UNCOMPRESSABLE, RANDOM};
   for (size_t i = 0; i < GPR_ARRAY_SIZE(payload_types); i++) {
@@ -378,7 +465,7 @@
                    CompressionType_Name(compression_types[j]).c_str(),
                    PayloadType_Name(payload_types[i]).c_str());
 
-      gpr_log(GPR_DEBUG, "Receiving response steaming rpc %s.", log_suffix);
+      gpr_log(GPR_DEBUG, "Receiving response streaming rpc %s.", log_suffix);
 
       request.set_response_type(payload_types[i]);
       request.set_response_compression(compression_types[j]);
@@ -432,18 +519,32 @@
         ++k;
       }
 
-      GPR_ASSERT(response_stream_sizes.size() == k);
-      Status s = stream->Finish();
-
-      AssertOkOrPrintErrorStatus(s);
       gpr_log(GPR_DEBUG, "Response streaming done %s.", log_suffix);
       gpr_free(log_suffix);
+
+      if (k < response_stream_sizes.size()) {
+        // stream->Read() failed before reading all the expected messages. This
+        // is most likely due to a connection failure.
+        gpr_log(GPR_ERROR,
+                "DoResponseCompressedStreaming(): Responses read (k=%d) is "
+                "less than the expected messages (i.e "
+                "response_stream_sizes.size() (%d)). (i=%d, j=%d)",
+                k, response_stream_sizes.size(), i, j);
+        return TransientFailureOrAbort();
+      }
+
+      Status s = stream->Finish();
+      if (!AssertStatusOk(s)) {
+        return false;
+      }
     }
   }
+
+  return true;
 }
 
-void InteropClient::DoResponseStreamingWithSlowConsumer() {
-  gpr_log(GPR_DEBUG, "Receiving response steaming rpc with slow consumer ...");
+bool InteropClient::DoResponseStreamingWithSlowConsumer() {
+  gpr_log(GPR_DEBUG, "Receiving response streaming rpc with slow consumer ...");
 
   ClientContext context;
   StreamingOutputCallRequest request;
@@ -464,14 +565,26 @@
     usleep(kReceiveDelayMilliSeconds * 1000);
     ++i;
   }
-  GPR_ASSERT(kNumResponseMessages == i);
-  Status s = stream->Finish();
 
-  AssertOkOrPrintErrorStatus(s);
+  if (i < kNumResponseMessages) {
+    gpr_log(GPR_ERROR,
+            "DoResponseStreamingWithSlowConsumer(): Responses read (i=%d) is "
+            "less than the expected messages (i.e kNumResponseMessages = %d)",
+            i, kNumResponseMessages);
+
+    return TransientFailureOrAbort();
+  }
+
+  Status s = stream->Finish();
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
+
   gpr_log(GPR_DEBUG, "Response streaming done.");
+  return true;
 }
 
-void InteropClient::DoHalfDuplex() {
+bool InteropClient::DoHalfDuplex() {
   gpr_log(GPR_DEBUG, "Sending half-duplex streaming rpc ...");
 
   ClientContext context;
@@ -483,7 +596,11 @@
   ResponseParameters* response_parameter = request.add_response_parameters();
   for (unsigned int i = 0; i < response_stream_sizes.size(); ++i) {
     response_parameter->set_size(response_stream_sizes[i]);
-    GPR_ASSERT(stream->Write(request));
+
+    if (!stream->Write(request)) {
+      gpr_log(GPR_ERROR, "DoHalfDuplex(): stream->Write() failed. i=%d", i);
+      return TransientFailureOrAbort();
+    }
   }
   stream->WritesDone();
 
@@ -494,13 +611,27 @@
                grpc::string(response_stream_sizes[i], '\0'));
     ++i;
   }
-  GPR_ASSERT(response_stream_sizes.size() == i);
+
+  if (i < response_stream_sizes.size()) {
+    // stream->Read() failed before reading all the expected messages. This is
+    // most likely due to a connection failure
+    gpr_log(GPR_ERROR,
+            "DoHalfDuplex(): Responses read (i=%d) are less than the expected "
+            "number of messages response_stream_sizes.size() (%d)",
+            i, response_stream_sizes.size());
+    return TransientFailureOrAbort();
+  }
+
   Status s = stream->Finish();
-  AssertOkOrPrintErrorStatus(s);
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
+
   gpr_log(GPR_DEBUG, "Half-duplex streaming rpc done.");
+  return true;
 }
 
-void InteropClient::DoPingPong() {
+bool InteropClient::DoPingPong() {
   gpr_log(GPR_DEBUG, "Sending Ping Pong streaming rpc ...");
 
   ClientContext context;
@@ -513,24 +644,40 @@
   ResponseParameters* response_parameter = request.add_response_parameters();
   Payload* payload = request.mutable_payload();
   StreamingOutputCallResponse response;
+
   for (unsigned int i = 0; i < request_stream_sizes.size(); ++i) {
     response_parameter->set_size(response_stream_sizes[i]);
     payload->set_body(grpc::string(request_stream_sizes[i], '\0'));
-    GPR_ASSERT(stream->Write(request));
-    GPR_ASSERT(stream->Read(&response));
+
+    if (!stream->Write(request)) {
+      gpr_log(GPR_ERROR, "DoPingPong(): stream->Write() failed. i: %d", i);
+      return TransientFailureOrAbort();
+    }
+
+    if (!stream->Read(&response)) {
+      gpr_log(GPR_ERROR, "DoPingPong(): stream->Read() failed. i:%d", i);
+      return TransientFailureOrAbort();
+    }
+
     GPR_ASSERT(response.payload().body() ==
                grpc::string(response_stream_sizes[i], '\0'));
   }
 
   stream->WritesDone();
+
   GPR_ASSERT(!stream->Read(&response));
+
   Status s = stream->Finish();
-  AssertOkOrPrintErrorStatus(s);
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
+
   gpr_log(GPR_DEBUG, "Ping pong streaming done.");
+  return true;
 }
 
-void InteropClient::DoCancelAfterBegin() {
-  gpr_log(GPR_DEBUG, "Sending request steaming rpc ...");
+bool InteropClient::DoCancelAfterBegin() {
+  gpr_log(GPR_DEBUG, "Sending request streaming rpc ...");
 
   ClientContext context;
   StreamingInputCallRequest request;
@@ -542,11 +689,16 @@
   gpr_log(GPR_DEBUG, "Trying to cancel...");
   context.TryCancel();
   Status s = stream->Finish();
-  GPR_ASSERT(s.error_code() == StatusCode::CANCELLED);
+
+  if (!AssertStatusCode(s, StatusCode::CANCELLED)) {
+    return false;
+  }
+
   gpr_log(GPR_DEBUG, "Canceling streaming done.");
+  return true;
 }
 
-void InteropClient::DoCancelAfterFirstResponse() {
+bool InteropClient::DoCancelAfterFirstResponse() {
   gpr_log(GPR_DEBUG, "Sending Ping Pong streaming rpc ...");
 
   ClientContext context;
@@ -560,17 +712,27 @@
   response_parameter->set_size(31415);
   request.mutable_payload()->set_body(grpc::string(27182, '\0'));
   StreamingOutputCallResponse response;
-  GPR_ASSERT(stream->Write(request));
-  GPR_ASSERT(stream->Read(&response));
+
+  if (!stream->Write(request)) {
+    gpr_log(GPR_ERROR, "DoCancelAfterFirstResponse(): stream->Write() failed");
+    return TransientFailureOrAbort();
+  }
+
+  if (!stream->Read(&response)) {
+    gpr_log(GPR_ERROR, "DoCancelAfterFirstResponse(): stream->Read failed");
+    return TransientFailureOrAbort();
+  }
   GPR_ASSERT(response.payload().body() == grpc::string(31415, '\0'));
+
   gpr_log(GPR_DEBUG, "Trying to cancel...");
   context.TryCancel();
 
   Status s = stream->Finish();
   gpr_log(GPR_DEBUG, "Canceling pingpong streaming done.");
+  return true;
 }
 
-void InteropClient::DoTimeoutOnSleepingServer() {
+bool InteropClient::DoTimeoutOnSleepingServer() {
   gpr_log(GPR_DEBUG,
           "Sending Ping Pong streaming rpc with a short deadline...");
 
@@ -587,11 +749,15 @@
   stream->Write(request);
 
   Status s = stream->Finish();
-  GPR_ASSERT(s.error_code() == StatusCode::DEADLINE_EXCEEDED);
+  if (!AssertStatusCode(s, StatusCode::DEADLINE_EXCEEDED)) {
+    return false;
+  }
+
   gpr_log(GPR_DEBUG, "Pingpong streaming timeout done.");
+  return true;
 }
 
-void InteropClient::DoEmptyStream() {
+bool InteropClient::DoEmptyStream() {
   gpr_log(GPR_DEBUG, "Starting empty_stream.");
 
   ClientContext context;
@@ -601,12 +767,17 @@
   stream->WritesDone();
   StreamingOutputCallResponse response;
   GPR_ASSERT(stream->Read(&response) == false);
+
   Status s = stream->Finish();
-  AssertOkOrPrintErrorStatus(s);
+  if (!AssertStatusOk(s)) {
+    return false;
+  }
+
   gpr_log(GPR_DEBUG, "empty_stream done.");
+  return true;
 }
 
-void InteropClient::DoStatusWithMessage() {
+bool InteropClient::DoStatusWithMessage() {
   gpr_log(GPR_DEBUG,
           "Sending RPC with a request for status code 2 and message");
 
@@ -620,12 +791,16 @@
 
   Status s = serviceStub_.Get()->UnaryCall(&context, request, &response);
 
-  GPR_ASSERT(s.error_code() == grpc::StatusCode::UNKNOWN);
+  if (!AssertStatusCode(s, grpc::StatusCode::UNKNOWN)) {
+    return false;
+  }
+
   GPR_ASSERT(s.error_message() == test_msg);
   gpr_log(GPR_DEBUG, "Done testing Status and Message");
+  return true;
 }
 
-void InteropClient::DoCustomMetadata() {
+bool InteropClient::DoCustomMetadata() {
   const grpc::string kEchoInitialMetadataKey("x-grpc-test-echo-initial");
   const grpc::string kInitialMetadataValue("test_initial_metadata_value");
   const grpc::string kEchoTrailingBinMetadataKey(
@@ -645,7 +820,10 @@
     request.mutable_payload()->set_body(payload.c_str(), kLargeRequestSize);
 
     Status s = serviceStub_.Get()->UnaryCall(&context, request, &response);
-    AssertOkOrPrintErrorStatus(s);
+    if (!AssertStatusOk(s)) {
+      return false;
+    }
+
     const auto& server_initial_metadata = context.GetServerInitialMetadata();
     auto iter = server_initial_metadata.find(kEchoInitialMetadataKey);
     GPR_ASSERT(iter != server_initial_metadata.end());
@@ -675,14 +853,29 @@
     grpc::string payload(kLargeRequestSize, '\0');
     request.mutable_payload()->set_body(payload.c_str(), kLargeRequestSize);
     StreamingOutputCallResponse response;
-    GPR_ASSERT(stream->Write(request));
+
+    if (!stream->Write(request)) {
+      gpr_log(GPR_ERROR, "DoCustomMetadata(): stream->Write() failed");
+      return TransientFailureOrAbort();
+    }
+
     stream->WritesDone();
-    GPR_ASSERT(stream->Read(&response));
+
+    if (!stream->Read(&response)) {
+      gpr_log(GPR_ERROR, "DoCustomMetadata(): stream->Read() failed");
+      return TransientFailureOrAbort();
+    }
+
     GPR_ASSERT(response.payload().body() ==
                grpc::string(kLargeResponseSize, '\0'));
+
     GPR_ASSERT(!stream->Read(&response));
+
     Status s = stream->Finish();
-    AssertOkOrPrintErrorStatus(s);
+    if (!AssertStatusOk(s)) {
+      return false;
+    }
+
     const auto& server_initial_metadata = context.GetServerInitialMetadata();
     auto iter = server_initial_metadata.find(kEchoInitialMetadataKey);
     GPR_ASSERT(iter != server_initial_metadata.end());
@@ -695,6 +888,8 @@
 
     gpr_log(GPR_DEBUG, "Done testing stream with custom metadata");
   }
+
+  return true;
 }
 
 }  // namespace testing
diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h
index a3794fd..ae75762 100644
--- a/test/cpp/interop/interop_client.h
+++ b/test/cpp/interop/interop_client.h
@@ -51,41 +51,42 @@
 
 class InteropClient {
  public:
-  explicit InteropClient(std::shared_ptr<Channel> channel);
-  explicit InteropClient(
-      std::shared_ptr<Channel> channel,
-      bool new_stub_every_test_case);  // If new_stub_every_test_case is true,
-                                       // a new TestService::Stub object is
-                                       // created for every test case below
+  /// If new_stub_every_test_case is true, a new TestService::Stub object is
+  /// created for every test case
+  /// If do_not_abort_on_transient_failures is true, abort() is not called in
+  /// case of transient failures (like connection failures)
+  explicit InteropClient(std::shared_ptr<Channel> channel,
+                         bool new_stub_every_test_case,
+                         bool do_not_abort_on_transient_failures);
   ~InteropClient() {}
 
   void Reset(std::shared_ptr<Channel> channel);
 
-  void DoEmpty();
-  void DoLargeUnary();
-  void DoLargeCompressedUnary();
-  void DoPingPong();
-  void DoHalfDuplex();
-  void DoRequestStreaming();
-  void DoResponseStreaming();
-  void DoResponseCompressedStreaming();
-  void DoResponseStreamingWithSlowConsumer();
-  void DoCancelAfterBegin();
-  void DoCancelAfterFirstResponse();
-  void DoTimeoutOnSleepingServer();
-  void DoEmptyStream();
-  void DoStatusWithMessage();
-  void DoCustomMetadata();
+  bool DoEmpty();
+  bool DoLargeUnary();
+  bool DoLargeCompressedUnary();
+  bool DoPingPong();
+  bool DoHalfDuplex();
+  bool DoRequestStreaming();
+  bool DoResponseStreaming();
+  bool DoResponseCompressedStreaming();
+  bool DoResponseStreamingWithSlowConsumer();
+  bool DoCancelAfterBegin();
+  bool DoCancelAfterFirstResponse();
+  bool DoTimeoutOnSleepingServer();
+  bool DoEmptyStream();
+  bool DoStatusWithMessage();
+  bool DoCustomMetadata();
   // Auth tests.
   // username is a string containing the user email
-  void DoJwtTokenCreds(const grpc::string& username);
-  void DoComputeEngineCreds(const grpc::string& default_service_account,
+  bool DoJwtTokenCreds(const grpc::string& username);
+  bool DoComputeEngineCreds(const grpc::string& default_service_account,
                             const grpc::string& oauth_scope);
   // username the GCE default service account email
-  void DoOauth2AuthToken(const grpc::string& username,
+  bool DoOauth2AuthToken(const grpc::string& username,
                          const grpc::string& oauth_scope);
   // username is a string containing the user email
-  void DoPerRpcCreds(const grpc::string& json_key);
+  bool DoPerRpcCreds(const grpc::string& json_key);
 
  private:
   class ServiceStub {
@@ -105,13 +106,18 @@
                                 // Get() call
   };
 
-  void PerformLargeUnary(SimpleRequest* request, SimpleResponse* response);
+  bool PerformLargeUnary(SimpleRequest* request, SimpleResponse* response);
 
   /// Run \a custom_check_fn as an additional check.
-  void PerformLargeUnary(SimpleRequest* request, SimpleResponse* response,
+  bool PerformLargeUnary(SimpleRequest* request, SimpleResponse* response,
                          CheckerFn custom_checks_fn);
-  void AssertOkOrPrintErrorStatus(const Status& s);
+  bool AssertStatusOk(const Status& s);
+  bool AssertStatusCode(const Status& s, StatusCode expected_code);
+  bool TransientFailureOrAbort();
   ServiceStub serviceStub_;
+
+  /// If true, abort() is not called for transient failures
+  bool do_not_abort_on_transient_failures_;
 };
 
 }  // namespace testing
diff --git a/test/cpp/interop/stress_interop_client.cc b/test/cpp/interop/stress_interop_client.cc
index f287a5a..aa95682 100644
--- a/test/cpp/interop/stress_interop_client.cc
+++ b/test/cpp/interop/stress_interop_client.cc
@@ -84,11 +84,12 @@
     int test_id, const grpc::string& server_address,
     std::shared_ptr<Channel> channel,
     const WeightedRandomTestSelector& test_selector, long test_duration_secs,
-    long sleep_duration_ms)
+    long sleep_duration_ms, bool do_not_abort_on_transient_failures)
     : test_id_(test_id),
       server_address_(server_address),
       channel_(channel),
-      interop_client_(new InteropClient(channel, false)),
+      interop_client_(new InteropClient(channel, false,
+                                        do_not_abort_on_transient_failures)),
       test_selector_(test_selector),
       test_duration_secs_(test_duration_secs),
       sleep_duration_ms_(sleep_duration_ms) {}
@@ -126,31 +127,67 @@
   }
 }
 
-// TODO(sree): Add all interop tests
-void StressTestInteropClient::RunTest(TestCaseType test_case) {
+bool StressTestInteropClient::RunTest(TestCaseType test_case) {
+  bool is_success = false;
   switch (test_case) {
     case EMPTY_UNARY: {
-      interop_client_->DoEmpty();
+      is_success = interop_client_->DoEmpty();
       break;
     }
     case LARGE_UNARY: {
-      interop_client_->DoLargeUnary();
+      is_success = interop_client_->DoLargeUnary();
       break;
     }
     case LARGE_COMPRESSED_UNARY: {
-      interop_client_->DoLargeCompressedUnary();
+      is_success = interop_client_->DoLargeCompressedUnary();
       break;
     }
     case CLIENT_STREAMING: {
-      interop_client_->DoRequestStreaming();
+      is_success = interop_client_->DoRequestStreaming();
       break;
     }
     case SERVER_STREAMING: {
-      interop_client_->DoResponseStreaming();
+      is_success = interop_client_->DoResponseStreaming();
+      break;
+    }
+    case SERVER_COMPRESSED_STREAMING: {
+      is_success = interop_client_->DoResponseCompressedStreaming();
+      break;
+    }
+    case SLOW_CONSUMER: {
+      is_success = interop_client_->DoResponseStreamingWithSlowConsumer();
+      break;
+    }
+    case HALF_DUPLEX: {
+      is_success = interop_client_->DoHalfDuplex();
+      break;
+    }
+    case PING_PONG: {
+      is_success = interop_client_->DoPingPong();
+      break;
+    }
+    case CANCEL_AFTER_BEGIN: {
+      is_success = interop_client_->DoCancelAfterBegin();
+      break;
+    }
+    case CANCEL_AFTER_FIRST_RESPONSE: {
+      is_success = interop_client_->DoCancelAfterFirstResponse();
+      break;
+    }
+    case TIMEOUT_ON_SLEEPING_SERVER: {
+      is_success = interop_client_->DoTimeoutOnSleepingServer();
       break;
     }
     case EMPTY_STREAM: {
-      interop_client_->DoEmptyStream();
+      is_success = interop_client_->DoEmptyStream();
+      break;
+    }
+    case STATUS_CODE_AND_MESSAGE: {
+      is_success = interop_client_->DoStatusWithMessage();
+      break;
+    }
+    case CUSTOM_METADATA: {
+      is_success = interop_client_->DoCustomMetadata();
       break;
     }
     default: {
@@ -159,6 +196,8 @@
       break;
     }
   }
+
+  return is_success;
 }
 
 }  // namespace testing
diff --git a/test/cpp/interop/stress_interop_client.h b/test/cpp/interop/stress_interop_client.h
index cb0cd98..aa93b58 100644
--- a/test/cpp/interop/stress_interop_client.h
+++ b/test/cpp/interop/stress_interop_client.h
@@ -49,7 +49,6 @@
 using std::pair;
 using std::vector;
 
-// TODO(sreek): Add more test cases here in future
 enum TestCaseType {
   UNKNOWN_TEST = -1,
   EMPTY_UNARY = 0,
@@ -57,7 +56,16 @@
   LARGE_COMPRESSED_UNARY = 2,
   CLIENT_STREAMING = 3,
   SERVER_STREAMING = 4,
-  EMPTY_STREAM = 5
+  SERVER_COMPRESSED_STREAMING = 5,
+  SLOW_CONSUMER = 6,
+  HALF_DUPLEX = 7,
+  PING_PONG = 8,
+  CANCEL_AFTER_BEGIN = 9,
+  CANCEL_AFTER_FIRST_RESPONSE = 10,
+  TIMEOUT_ON_SLEEPING_SERVER = 11,
+  EMPTY_STREAM = 12,
+  STATUS_CODE_AND_MESSAGE = 13,
+  CUSTOM_METADATA = 14
 };
 
 const vector<pair<TestCaseType, grpc::string>> kTestCaseList = {
@@ -66,7 +74,16 @@
     {LARGE_COMPRESSED_UNARY, "large_compressed_unary"},
     {CLIENT_STREAMING, "client_streaming"},
     {SERVER_STREAMING, "server_streaming"},
-    {EMPTY_STREAM, "empty_stream"}};
+    {SERVER_COMPRESSED_STREAMING, "server_compressed_streaming"},
+    {SLOW_CONSUMER, "slow_consumer"},
+    {HALF_DUPLEX, "half_duplex"},
+    {PING_PONG, "ping_pong"},
+    {CANCEL_AFTER_BEGIN, "cancel_after_begin"},
+    {CANCEL_AFTER_FIRST_RESPONSE, "cancel_after_first_response"},
+    {TIMEOUT_ON_SLEEPING_SERVER, "timeout_on_sleeping_server"},
+    {EMPTY_STREAM, "empty_stream"},
+    {STATUS_CODE_AND_MESSAGE, "status_code_and_message"},
+    {CUSTOM_METADATA, "custom_metadata"}};
 
 class WeightedRandomTestSelector {
  public:
@@ -87,14 +104,15 @@
   StressTestInteropClient(int test_id, const grpc::string& server_address,
                           std::shared_ptr<Channel> channel,
                           const WeightedRandomTestSelector& test_selector,
-                          long test_duration_secs, long sleep_duration_ms);
+                          long test_duration_secs, long sleep_duration_ms,
+                          bool do_not_abort_on_transient_failures);
 
   // The main function. Use this as the thread entry point.
   // qps_gauge is the QpsGauge to record the requests per second metric
   void MainLoop(std::shared_ptr<QpsGauge> qps_gauge);
 
  private:
-  void RunTest(TestCaseType test_case);
+  bool RunTest(TestCaseType test_case);
 
   int test_id_;
   const grpc::string& server_address_;
diff --git a/test/cpp/interop/stress_test.cc b/test/cpp/interop/stress_test.cc
index d9e3fd2..7787931 100644
--- a/test/cpp/interop/stress_test.cc
+++ b/test/cpp/interop/stress_test.cc
@@ -89,7 +89,16 @@
               "   large_compressed_unary\n"
               "   client_streaming\n"
               "   server_streaming\n"
+              "   server_compressed_streaming\n"
+              "   slow_consumer\n"
+              "   half_duplex\n"
+              "   ping_pong\n"
+              "   cancel_after_begin\n"
+              "   cancel_after_first_response\n"
+              "   timeout_on_sleeping_server\n"
               "   empty_stream\n"
+              "   status_code_and_message\n"
+              "   custom_metadata\n"
               " Example: \"empty_unary:20,large_unary:10,empty_stream:70\"\n"
               " The above will execute 'empty_unary', 20% of the time,"
               " 'large_unary', 10% of the time and 'empty_stream' the remaining"
@@ -101,6 +110,10 @@
              "The choices are: 0 (GPR_LOG_SEVERITY_DEBUG), 1 "
              "(GPR_LOG_SEVERITY_INFO) and 2 (GPR_LOG_SEVERITY_ERROR)");
 
+DEFINE_bool(do_not_abort_on_transient_failures, true,
+            "If set to 'true', abort() is not called in case of transient "
+            "failures like temporary connection failures.");
+
 using grpc::testing::kTestCaseList;
 using grpc::testing::MetricsService;
 using grpc::testing::MetricsServiceImpl;
@@ -189,6 +202,12 @@
   gpr_log(GPR_INFO, "test_cases : %s", FLAGS_test_cases.c_str());
   gpr_log(GPR_INFO, "sleep_duration_ms: %d", FLAGS_sleep_duration_ms);
   gpr_log(GPR_INFO, "test_duration_secs: %d", FLAGS_test_duration_secs);
+  gpr_log(GPR_INFO, "num_channels_per_server: %d",
+          FLAGS_num_channels_per_server);
+  gpr_log(GPR_INFO, "num_stubs_per_channel: %d", FLAGS_num_stubs_per_channel);
+  gpr_log(GPR_INFO, "log_level: %d", FLAGS_log_level);
+  gpr_log(GPR_INFO, "do_not_abort_on_transient_failures: %s",
+          FLAGS_do_not_abort_on_transient_failures ? "true" : "false");
 
   int num = 0;
   for (auto it = addresses.begin(); it != addresses.end(); it++) {
@@ -272,7 +291,7 @@
            stub_idx++) {
         StressTestInteropClient* client = new StressTestInteropClient(
             ++thread_idx, *it, channel, test_selector, FLAGS_test_duration_secs,
-            FLAGS_sleep_duration_ms);
+            FLAGS_sleep_duration_ms, FLAGS_do_not_abort_on_transient_failures);
 
         bool is_already_created = false;
         // QpsGauge name
diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc
index e72cef2..c32160a 100644
--- a/test/cpp/qps/client_async.cc
+++ b/test/cpp/qps/client_async.cc
@@ -84,7 +84,8 @@
       std::function<
           std::unique_ptr<grpc::ClientAsyncResponseReader<ResponseType>>(
               BenchmarkService::Stub*, grpc::ClientContext*, const RequestType&,
-              CompletionQueue*)> start_req,
+              CompletionQueue*)>
+          start_req,
       std::function<void(grpc::Status, ResponseType*)> on_done)
       : context_(),
         stub_(stub),
@@ -165,7 +166,8 @@
   AsyncClient(const ClientConfig& config,
               std::function<ClientRpcContext*(
                   StubType*, std::function<gpr_timespec()> next_issue,
-                  const RequestType&)> setup_ctx,
+                  const RequestType&)>
+                  setup_ctx,
               std::function<std::unique_ptr<StubType>(std::shared_ptr<Channel>)>
                   create_stub)
       : ClientImpl<StubType, RequestType>(config, create_stub),
@@ -278,7 +280,8 @@
       std::function<std::unique_ptr<
           grpc::ClientAsyncReaderWriter<RequestType, ResponseType>>(
           BenchmarkService::Stub*, grpc::ClientContext*, CompletionQueue*,
-          void*)> start_req,
+          void*)>
+          start_req,
       std::function<void(grpc::Status, ResponseType*)> on_done)
       : context_(),
         stub_(stub),
@@ -405,7 +408,8 @@
       std::function<gpr_timespec()> next_issue,
       std::function<std::unique_ptr<grpc::GenericClientAsyncReaderWriter>(
           grpc::GenericStub*, grpc::ClientContext*,
-          const grpc::string& method_name, CompletionQueue*, void*)> start_req,
+          const grpc::string& method_name, CompletionQueue*, void*)>
+          start_req,
       std::function<void(grpc::Status, ByteBuffer*)> on_done)
       : context_(),
         stub_(stub),
diff --git a/test/cpp/qps/gen_build_yaml.py b/test/cpp/qps/gen_build_yaml.py
index 9d6bf2a..6b3329b 100755
--- a/test/cpp/qps/gen_build_yaml.py
+++ b/test/cpp/qps/gen_build_yaml.py
@@ -43,12 +43,16 @@
 
 import performance.scenario_config as scenario_config
 
+def _scenario_json_string(scenario_json):
+  return json.dumps(scenario_config.remove_nonproto_fields(scenario_json))
+
 print yaml.dump({
   'tests': [
     {
       'name': 'json_run_localhost',
-      'shortname': 'json_run_localhost:%s' % js['name'],
-      'args': ['--scenario_json', pipes.quote(json.dumps(js))],
+      'shortname': 'json_run_localhost:%s' % scenario_json['name'],
+      'args': ['--scenario_json',
+               pipes.quote(_scenario_json_string(scenario_json))],
       'ci_platforms': ['linux', 'mac', 'posix', 'windows'],
       'platforms': ['linux', 'mac', 'posix', 'windows'],
       'flaky': False,
@@ -58,6 +62,6 @@
       'cpu_cost': 1000.0,
       'exclude_configs': []
     }
-    for js in scenario_config.CXXLanguage().scenarios()
+    for scenario_json in scenario_config.CXXLanguage().scenarios()
   ]
 })
diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc
index a68f1ae..1234542 100644
--- a/test/cpp/qps/server_async.cc
+++ b/test/cpp/qps/server_async.cc
@@ -73,7 +73,8 @@
                          CompletionQueue *, ServerCompletionQueue *, void *)>
           request_streaming_function,
       std::function<grpc::Status(const PayloadConfig &, const RequestType *,
-                                 ResponseType *)> process_rpc)
+                                 ResponseType *)>
+          process_rpc)
       : Server(config) {
     char *server_address = NULL;
 
@@ -190,7 +191,8 @@
     ServerRpcContextUnaryImpl(
         std::function<void(ServerContextType *, RequestType *,
                            grpc::ServerAsyncResponseWriter<ResponseType> *,
-                           void *)> request_method,
+                           void *)>
+            request_method,
         std::function<grpc::Status(const RequestType *, ResponseType *)>
             invoke_method)
         : srv_ctx_(new ServerContextType),
diff --git a/test/distrib/csharp/build_vs2015.bat b/test/distrib/csharp/build_vs2015.bat
index 50485a3..5779878 100644
--- a/test/distrib/csharp/build_vs2015.bat
+++ b/test/distrib/csharp/build_vs2015.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Convenience wrapper that runs specified gRPC target using msbuild
 @rem Usage: build.bat TARGET_NAME
 
diff --git a/test/distrib/python/run_distrib_test.sh b/test/distrib/python/run_distrib_test.sh
index 6196e54..8a983bc 100755
--- a/test/distrib/python/run_distrib_test.sh
+++ b/test/distrib/python/run_distrib_test.sh
@@ -48,7 +48,10 @@
 which $PIP || PIP=pip
 
 # TODO(jtattermusch): this shouldn't be required
-${PIP} install --upgrade six pip
+# TODO(jtattermusch): run the command twice to workaround docker-on-overlay
+# issue https://github.com/docker/docker/issues/12327
+# (first attempt will fail when using docker with overlayFS)
+${PIP} install --upgrade six pip || ${PIP} install --upgrade six pip
 
 # At least one of the bdist packages has to succeed (whichever one matches the
 # test machine, anyway).
@@ -58,6 +61,6 @@
 
 # TODO(jtattermusch): add a .proto file to the distribtest, generate python
 # code from it and then use the generated code from distribtest.py
-$PYTHON -m grpc.protoc.compiler
+$PYTHON -m grpc.tools.protoc
 
 $PYTHON distribtest.py
diff --git a/third_party/objective_c/Cronet/cronet_c_for_grpc.h b/third_party/objective_c/Cronet/cronet_c_for_grpc.h
new file mode 100644
index 0000000..15a511a
--- /dev/null
+++ b/third_party/objective_c/Cronet/cronet_c_for_grpc.h
@@ -0,0 +1,202 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_
+#define COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stddef.h>
+
+/* Cronet Engine API. */
+
+/* Opaque object representing Cronet Engine. Created and configured outside
+ * of this API to facilitate sharing with other components */
+typedef struct cronet_engine { void* obj; } cronet_engine;
+
+void cronet_engine_add_quic_hint(cronet_engine* engine,
+                                 const char* host,
+                                 int port,
+                                 int alternate_port);
+
+/* Cronet Bidirectional Stream API */
+
+/* Opaque object representing Cronet Bidirectional Stream. */
+typedef struct cronet_bidirectional_stream {
+  void* obj;
+  void* annotation;
+} cronet_bidirectional_stream;
+
+/* A single request or response header element. */
+typedef struct cronet_bidirectional_stream_header {
+  const char* key;
+  const char* value;
+} cronet_bidirectional_stream_header;
+
+/* Array of request or response headers or trailers. */
+typedef struct cronet_bidirectional_stream_header_array {
+  size_t count;
+  size_t capacity;
+  cronet_bidirectional_stream_header* headers;
+} cronet_bidirectional_stream_header_array;
+
+/* Set of callbacks used to receive callbacks from bidirectional stream. */
+typedef struct cronet_bidirectional_stream_callback {
+  /* Invoked when request headers are sent. Indicates that stream has initiated
+   * the request. Consumer may call cronet_bidirectional_stream_write() to start
+   * writing data.
+   */
+  void (*on_request_headers_sent)(cronet_bidirectional_stream* stream);
+
+  /* Invoked when initial response headers are received.
+   * Consumer must call cronet_bidirectional_stream_read() to start reading.
+   * Consumer may call cronet_bidirectional_stream_write() to start writing or
+   * close the stream. Contents of |headers| is valid for duration of the call.
+   */
+  void (*on_response_headers_received)(
+      cronet_bidirectional_stream* stream,
+      const cronet_bidirectional_stream_header_array* headers,
+      const char* negotiated_protocol);
+
+  /* Invoked when data is read into the buffer passed to
+   * cronet_bidirectional_stream_read(). Only part of the buffer may be
+   * populated. To continue reading, call cronet_bidirectional_stream_read().
+   * It may be invoked after on_response_trailers_received()}, if there was
+   * pending read data before trailers were received.
+   *
+   * If count is 0, it means the remote side has signaled that it will send no
+   * more data; future calls to cronet_bidirectional_stream_read() will result
+   * in the on_data_read() callback or on_succeded() callback if
+   * cronet_bidirectional_stream_write() was invoked with end_of_stream set to
+   * true.
+   */
+  void (*on_read_completed)(cronet_bidirectional_stream* stream,
+                            char* data,
+                            int count);
+
+  /**
+   * Invoked when all data passed to cronet_bidirectional_stream_write() is
+   * sent.
+   * To continue writing, call cronet_bidirectional_stream_write().
+   */
+  void (*on_write_completed)(cronet_bidirectional_stream* stream,
+                             const char* data);
+
+  /* Invoked when trailers are received before closing the stream. Only invoked
+   * when server sends trailers, which it may not. May be invoked while there is
+   * read data remaining in local buffer. Contents of |trailers| is valid for
+   * duration of the call.
+   */
+  void (*on_response_trailers_received)(
+      cronet_bidirectional_stream* stream,
+      const cronet_bidirectional_stream_header_array* trailers);
+
+  /**
+   * Invoked when there is no data to be read or written and the stream is
+   * closed successfully remotely and locally. Once invoked, no further callback
+   * methods will be invoked.
+   */
+  void (*on_succeded)(cronet_bidirectional_stream* stream);
+
+  /**
+   * Invoked if the stream failed for any reason after
+   * cronet_bidirectional_stream_start(). HTTP/2 error codes are
+   * mapped to chrome net error codes. Once invoked, no further callback methods
+   * will be invoked.
+   */
+  void (*on_failed)(cronet_bidirectional_stream* stream, int net_error);
+
+  /**
+   * Invoked if the stream was canceled via
+   * cronet_bidirectional_stream_cancel(). Once invoked, no further callback
+   * methods will be invoked.
+   */
+  void (*on_canceled)(cronet_bidirectional_stream* stream);
+} cronet_bidirectional_stream_callback;
+
+/* Create a new stream object that uses |engine| and |callback|. All stream
+ * tasks are performed asynchronously on the |engine| network thread. |callback|
+ * methods are invoked synchronously on the |engine| network thread, but must
+ * not run tasks on the current thread to prevent blocking networking operations
+ * and causing exceptions during shutdown. The |annotation| is stored in
+ * bidirectional stream for arbitrary use by application.
+ *
+ * Returned |cronet_bidirectional_stream*| is owned by the caller, and must be
+ * destroyed using |cronet_bidirectional_stream_destroy|.
+ *
+ * Both |calback| and |engine| must remain valid until stream is destroyed.
+ */
+cronet_bidirectional_stream* cronet_bidirectional_stream_create(
+    cronet_engine* engine,
+    void* annotation,
+    cronet_bidirectional_stream_callback* callback);
+
+/* TBD: The following methods return int. Should it be a custom type? */
+
+/* Destroy stream object. Destroy could be called from any thread, including
+ * network thread, but is posted, so |stream| is valid until calling task is
+ * complete.
+ */
+int cronet_bidirectional_stream_destroy(cronet_bidirectional_stream* stream);
+
+/* Start the stream by sending request to |url| using |method| and |headers|. If
+ * |end_of_stream| is true, then no data is expected to be written.
+ */
+int cronet_bidirectional_stream_start(
+    cronet_bidirectional_stream* stream,
+    const char* url,
+    int priority,
+    const char* method,
+    const cronet_bidirectional_stream_header_array* headers,
+    bool end_of_stream);
+
+/* Read response data into |buffer| of |capacity| length. Must only be called at
+ * most once in response to each invocation of the
+ * on_response_headers_received() and on_read_completed() methods of the
+ * cronet_bidirectional_stream_callback.
+ * Each call will result in an invocation of one of the callback's
+ * on_read_completed  method if data is read, its on_succeeded() method if
+ * the stream is closed, or its on_failed() method if there's an error.
+ */
+int cronet_bidirectional_stream_read(cronet_bidirectional_stream* stream,
+                                     char* buffer,
+                                     int capacity);
+
+/* Read response data into |buffer| of |capacity| length. Must only be called at
+ * most once in response to each invocation of the
+ * on_response_headers_received() and on_read_completed() methods of the
+ * cronet_bidirectional_stream_callback.
+ * Each call will result in an invocation of one of the callback's
+ * on_read_completed  method if data is read, its on_succeeded() method if
+ * the stream is closed, or its on_failed() method if there's an error.
+ */
+int cronet_bidirectional_stream_write(cronet_bidirectional_stream* stream,
+                                      const char* buffer,
+                                      int count,
+                                      bool end_of_stream);
+
+/* Cancels the stream. Can be called at any time after
+ * cronet_bidirectional_stream_start(). The on_canceled() method of
+ * cronet_bidirectional_stream_callback will be invoked when cancelation
+ * is complete and no further callback methods will be invoked. If the
+ * stream has completed or has not started, calling
+ * cronet_bidirectional_stream_cancel() has no effect and on_canceled() will not
+ * be  invoked. At most one callback method may be invoked after
+ * cronet_bidirectional_stream_cancel() has completed.
+ */
+int cronet_bidirectional_stream_cancel(cronet_bidirectional_stream* stream);
+
+/* Returns true if the |stream| was successfully started and is now done
+ * (succeeded, canceled, or failed).
+ * Returns false if the |stream| stream is not yet started or is in progress.
+ */
+bool cronet_bidirectional_stream_is_done(cronet_bidirectional_stream* stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_
diff --git a/third_party/protobuf b/third_party/protobuf
index d5fb408..a1938b2 160000
--- a/third_party/protobuf
+++ b/third_party/protobuf
@@ -1 +1 @@
-Subproject commit d5fb408ddc281ffcadeb08699e65bb694656d0bd
+Subproject commit a1938b2aa9ca86ce7ce50c27ff9737c1008d2a03
diff --git a/tools/buildgen/plugins/make_fuzzer_tests.py b/tools/buildgen/plugins/make_fuzzer_tests.py
index 9d00069..7c6fd53 100644
--- a/tools/buildgen/plugins/make_fuzzer_tests.py
+++ b/tools/buildgen/plugins/make_fuzzer_tests.py
@@ -50,6 +50,7 @@
               'name': new_target['name'],
               'args': [fn],
               'exclude_configs': [],
+              'uses_polling': False,
               'platforms': ['linux'],
               'ci_platforms': ['linux'],
               'flaky': False,
diff --git a/tools/codegen/core/gen_header_frame.py b/tools/codegen/core/gen_header_frame.py
index 96e6c67..ee47626 100755
--- a/tools/codegen/core/gen_header_frame.py
+++ b/tools/codegen/core/gen_header_frame.py
@@ -38,6 +38,8 @@
 import json
 import sys
 
+set_end_stream = len(sys.argv) > 1 and sys.argv[1] == '--set_end_stream'
+
 # parse input, fill in vals
 vals = []
 for line in sys.stdin:
@@ -65,6 +67,9 @@
   payload_bytes.append(payload_line)
 
 # fill in header
+flags = 0x04  # END_HEADERS
+if set_end_stream:
+  flags |= 0x01  # END_STREAM
 payload_bytes[0].extend([
     (payload_len >> 16) & 0xff,
     (payload_len >> 8) & 0xff,
@@ -72,7 +77,7 @@
     # header frame
     0x01,
     # flags
-    0x04,
+    flags,
     # stream id
     0x00,
     0x00,
diff --git a/tools/codegen/core/gen_nano_proto.sh b/tools/codegen/core/gen_nano_proto.sh
index e2d2f67..b216a20 100755
--- a/tools/codegen/core/gen_nano_proto.sh
+++ b/tools/codegen/core/gen_nano_proto.sh
@@ -29,11 +29,11 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#
 # Example usage:
 #   tools/codegen/core/gen_nano_proto.sh \
-#     src/proto/grpc/lb/v0/load_balancer.proto
-#     $PWD/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0
+#     src/proto/grpc/lb/v1/load_balancer.proto \
+#     $PWD/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1 \
+#     src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1
 #
 # Exit statuses:
 # 1: Incorrect number of arguments
diff --git a/tools/distrib/check_copyright.py b/tools/distrib/check_copyright.py
index 68411c6..4577ab3 100755
--- a/tools/distrib/check_copyright.py
+++ b/tools/distrib/check_copyright.py
@@ -71,6 +71,7 @@
 # that given a line of license text, returns what should
 # be in the file
 LICENSE_PREFIX = {
+  '.bat':       r'@rem\s*',
   '.c':         r'\s*(?://|\*)\s*',
   '.cc':        r'\s*(?://|\*)\s*',
   '.h':         r'\s*(?://|\*)\s*',
diff --git a/tools/distrib/check_include_guards.py b/tools/distrib/check_include_guards.py
index 6c160c6..9c23a70 100755
--- a/tools/distrib/check_include_guards.py
+++ b/tools/distrib/check_include_guards.py
@@ -56,7 +56,7 @@
   def __init__(self):
     self.ifndef_re = re.compile(r'#ifndef ([A-Z][A-Z_1-9]*)')
     self.define_re = re.compile(r'#define ([A-Z][A-Z_1-9]*)')
-    self.endif_c_re = re.compile(r'#endif /\* ([A-Z][A-Z_1-9]*) \*/')
+    self.endif_c_re = re.compile(r'#endif /\* ([A-Z][A-Z_1-9]*) (?:\\ *\n *)?\*/')
     self.endif_cpp_re = re.compile(r'#endif  // ([A-Z][A-Z_1-9]*)')
     self.failed = False
 
@@ -132,7 +132,7 @@
     # Is there a properly commented #endif?
     endif_re = self.endif_cpp_re if cpp_header else self.endif_c_re
     flines = fcontents.rstrip().splitlines()
-    match = endif_re.search(flines[-1])
+    match = endif_re.search('\n'.join(flines[-2:]))
     if not match:
       # No endif. Check if we have the last line as just '#endif' and if so
       # replace it with a properly commented one.
@@ -170,7 +170,7 @@
 args = argp.parse_args()
 
 KNOWN_BAD = set([
-    'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h',
+    'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
 ])
 
 
diff --git a/tools/distrib/check_nanopb_output.sh b/tools/distrib/check_nanopb_output.sh
index 92cb8ec..c070705 100755
--- a/tools/distrib/check_nanopb_output.sh
+++ b/tools/distrib/check_nanopb_output.sh
@@ -58,15 +58,15 @@
 #
 # Checks for load_balancer.proto
 #
-readonly LOAD_BALANCER_GRPC_OUTPUT_PATH='src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0'
+readonly LOAD_BALANCER_GRPC_OUTPUT_PATH='src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1'
 # nanopb-compile the proto to a temp location
 ./tools/codegen/core/gen_nano_proto.sh \
-  src/proto/grpc/lb/v0/load_balancer.proto \
+  src/proto/grpc/lb/v1/load_balancer.proto \
   "$NANOPB_TMP_OUTPUT" \
   "$LOAD_BALANCER_GRPC_OUTPUT_PATH"
 
 # compare outputs to checked compiled code
-if ! diff -r $NANOPB_TMP_OUTPUT src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0; then
+if ! diff -r $NANOPB_TMP_OUTPUT src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1; then
   echo "Outputs differ: $NANOPB_TMP_OUTPUT vs $LOAD_BALANCER_GRPC_OUTPUT_PATH"
   exit 2
 fi
diff --git a/tools/distrib/python/grpcio_tools/MANIFEST.in b/tools/distrib/python/grpcio_tools/MANIFEST.in
index e6ab312..7712834 100644
--- a/tools/distrib/python/grpcio_tools/MANIFEST.in
+++ b/tools/distrib/python/grpcio_tools/MANIFEST.in
@@ -1,5 +1,7 @@
+include grpc_version.py
 include protoc_deps.py
 include protoc_lib_deps.py
+include README.rst
 graft grpc
 graft grpc_root
 graft third_party
diff --git a/tools/distrib/python/grpcio_tools/README.rst b/tools/distrib/python/grpcio_tools/README.rst
new file mode 100644
index 0000000..10d2fe8
--- /dev/null
+++ b/tools/distrib/python/grpcio_tools/README.rst
@@ -0,0 +1,128 @@
+gRPC Python Tools
+=================
+
+Package for gRPC Python tools.
+
+Installation
+------------
+
+The gRPC Python tools package is available for Linux, Mac OS X, and Windows
+running Python 2.7.
+
+From PyPI
+~~~~~~~~~
+
+If you are installing locally...
+
+::
+
+  $ pip install grpcio-tools
+
+Else system wide (on Ubuntu)...
+
+::
+
+  $ sudo pip install grpcio-tools
+
+If you're on Windows make sure that you installed the :code:`pip.exe` component
+when you installed Python (if not go back and install it!) then invoke:
+
+::
+
+  $ pip.exe install grpcio-tools
+
+Windows users may need to invoke :code:`pip.exe` from a command line ran as
+administrator.
+
+n.b. On Windows and on Mac OS X one *must* have a recent release of :code:`pip`
+to retrieve the proper wheel from PyPI. Be sure to upgrade to the latest
+version!
+
+You might also need to install Cython to handle installation via the source
+distribution if gRPC Python's system coverage with wheels does not happen to
+include your system.
+
+From Source
+~~~~~~~~~~~
+
+Building from source requires that you have the Python headers (usually a
+package named :code:`python-dev`) and Cython installed. It further requires a
+GCC-like compiler to go smoothly; you can probably get it to work without
+GCC-like stuff, but you may end up having a bad time.
+
+::
+
+  $ export REPO_ROOT=grpc  # REPO_ROOT can be any directory of your choice
+  $ git clone https://github.com/grpc/grpc.git $REPO_ROOT
+  $ cd $REPO_ROOT
+  $ git submodule update --init
+
+  $ cd tools/distrib/python/grpcio_tools
+  $ python ../make_grpcio_tools.py
+
+  # For the next command do `sudo pip install` if you get permission-denied errors
+  $ pip install .
+
+You cannot currently install Python from source on Windows. Things might work
+out for you in MSYS2 (follow the Linux instructions), but it isn't officially
+supported at the moment.
+
+Troubleshooting
+~~~~~~~~~~~~~~~
+
+Help, I ...
+
+* **... see a** :code:`pkg_resources.VersionConflict` **when I try to install
+  grpc**
+
+  This is likely because :code:`pip` doesn't own the offending dependency,
+  which in turn is likely because your operating system's package manager owns
+  it. You'll need to force the installation of the dependency:
+
+  :code:`pip install --ignore-installed $OFFENDING_DEPENDENCY`
+
+  For example, if you get an error like the following:
+
+  ::
+
+    Traceback (most recent call last):
+    File "<string>", line 17, in <module>
+     ...
+    File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 509, in find
+      raise VersionConflict(dist, req)
+    pkg_resources.VersionConflict: (six 1.8.0 (/usr/lib/python2.7/dist-packages), Requirement.parse('six>=1.10'))
+
+  You can fix it by doing:
+
+  ::
+
+    sudo pip install --ignore-installed six
+
+* **... see compiler errors on some platforms when either installing from source or from the source distribution**
+
+  If you see
+
+  ::
+
+    /tmp/pip-build-U8pSsr/cython/Cython/Plex/Scanners.c:4:20: fatal error: Python.h: No such file or directory
+    #include "Python.h"
+                    ^
+    compilation terminated.
+
+  You can fix it by installing `python-dev` package. i.e
+
+  ::
+
+    sudo apt-get install python-dev
+
+  If you see something similar to:
+
+  ::
+
+    third_party/protobuf/src/google/protobuf/stubs/mathlimits.h:173:31: note: in expansion of macro 'SIGNED_INT_MAX'
+    static const Type kPosMax = SIGNED_INT_MAX(Type); \\
+                               ^
+  And your toolchain is GCC (at the time of this writing, up through at least
+  GCC 6.0), this is probably a bug where GCC chokes on constant expressions
+  when the :code:`-fwrapv` flag is specified. You should consider setting your
+  environment with :code:`CFLAGS=-fno-wrapv` or using clang (:code:`CC=clang`).
diff --git a/tools/distrib/python/grpcio_tools/grpc/protoc/__init__.py b/tools/distrib/python/grpcio_tools/grpc/tools/__init__.py
similarity index 100%
rename from tools/distrib/python/grpcio_tools/grpc/protoc/__init__.py
rename to tools/distrib/python/grpcio_tools/grpc/tools/__init__.py
diff --git a/tools/distrib/python/grpcio_tools/grpc/protoc/main.cc b/tools/distrib/python/grpcio_tools/grpc/tools/main.cc
similarity index 98%
rename from tools/distrib/python/grpcio_tools/grpc/protoc/main.cc
rename to tools/distrib/python/grpcio_tools/grpc/tools/main.cc
index c9936a3..81675b4 100644
--- a/tools/distrib/python/grpcio_tools/grpc/protoc/main.cc
+++ b/tools/distrib/python/grpcio_tools/grpc/tools/main.cc
@@ -32,7 +32,7 @@
 
 #include "src/compiler/python_generator.h"
 
-#include "grpc/protoc/main.h"
+#include "grpc/tools/main.h"
 
 int protoc_main(int argc, char* argv[]) {
   google::protobuf::compiler::CommandLineInterface cli;
diff --git a/tools/distrib/python/grpcio_tools/grpc/protoc/main.h b/tools/distrib/python/grpcio_tools/grpc/tools/main.h
similarity index 100%
rename from tools/distrib/python/grpcio_tools/grpc/protoc/main.h
rename to tools/distrib/python/grpcio_tools/grpc/tools/main.h
diff --git a/tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py b/tools/distrib/python/grpcio_tools/grpc/tools/protoc.py
similarity index 96%
rename from tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py
rename to tools/distrib/python/grpcio_tools/grpc/tools/protoc.py
index caafc54..b4dd0ec 100644
--- a/tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py
+++ b/tools/distrib/python/grpcio_tools/grpc/tools/protoc.py
@@ -31,7 +31,7 @@
 
 import sys
 
-from grpc.protoc import protoc_compiler
+from grpc.tools import protoc_compiler
 
 
 if __name__ == '__main__':
diff --git a/tools/distrib/python/grpcio_tools/grpc/protoc/protoc_compiler.pyx b/tools/distrib/python/grpcio_tools/grpc/tools/protoc_compiler.pyx
similarity index 97%
rename from tools/distrib/python/grpcio_tools/grpc/protoc/protoc_compiler.pyx
rename to tools/distrib/python/grpcio_tools/grpc/tools/protoc_compiler.pyx
index af15f3d..a653012 100644
--- a/tools/distrib/python/grpcio_tools/grpc/protoc/protoc_compiler.pyx
+++ b/tools/distrib/python/grpcio_tools/grpc/tools/protoc_compiler.pyx
@@ -29,7 +29,7 @@
 
 from libc cimport stdlib
 
-cdef extern from "grpc/protoc/main.h":
+cdef extern from "grpc/tools/main.h":
   int protoc_main(int argc, char *argv[])
 
 def run_main(list args not None):
diff --git a/tools/distrib/python/grpcio_tools/protoc_lib_deps.py b/tools/distrib/python/grpcio_tools/protoc_lib_deps.py
index 9f31172..135ac5c 100644
--- a/tools/distrib/python/grpcio_tools/protoc_lib_deps.py
+++ b/tools/distrib/python/grpcio_tools/protoc_lib_deps.py
@@ -29,4 +29,4 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 # AUTO-GENERATED BY make_grpcio_tools.py!
-CC_FILES=['google/protobuf/compiler/zip_writer.cc', 'google/protobuf/compiler/subprocess.cc', 'google/protobuf/compiler/ruby/ruby_generator.cc', 'google/protobuf/compiler/python/python_generator.cc', 'google/protobuf/compiler/plugin.pb.cc', 'google/protobuf/compiler/plugin.cc', 'google/protobuf/compiler/objectivec/objectivec_primitive_field.cc', 'google/protobuf/compiler/objectivec/objectivec_oneof.cc', 'google/protobuf/compiler/objectivec/objectivec_message_field.cc', 'google/protobuf/compiler/objectivec/objectivec_message.cc', 'google/protobuf/compiler/objectivec/objectivec_map_field.cc', 'google/protobuf/compiler/objectivec/objectivec_helpers.cc', 'google/protobuf/compiler/objectivec/objectivec_generator.cc', 'google/protobuf/compiler/objectivec/objectivec_file.cc', 'google/protobuf/compiler/objectivec/objectivec_field.cc', 'google/protobuf/compiler/objectivec/objectivec_extension.cc', 'google/protobuf/compiler/objectivec/objectivec_enum_field.cc', 'google/protobuf/compiler/objectivec/objectivec_enum.cc', 'google/protobuf/compiler/js/js_generator.cc', 'google/protobuf/compiler/javanano/javanano_primitive_field.cc', 'google/protobuf/compiler/javanano/javanano_message_field.cc', 'google/protobuf/compiler/javanano/javanano_message.cc', 'google/protobuf/compiler/javanano/javanano_map_field.cc', 'google/protobuf/compiler/javanano/javanano_helpers.cc', 'google/protobuf/compiler/javanano/javanano_generator.cc', 'google/protobuf/compiler/javanano/javanano_file.cc', 'google/protobuf/compiler/javanano/javanano_field.cc', 'google/protobuf/compiler/javanano/javanano_extension.cc', 'google/protobuf/compiler/javanano/javanano_enum_field.cc', 'google/protobuf/compiler/javanano/javanano_enum.cc', 'google/protobuf/compiler/java/java_string_field_lite.cc', 'google/protobuf/compiler/java/java_string_field.cc', 'google/protobuf/compiler/java/java_shared_code_generator.cc', 'google/protobuf/compiler/java/java_service.cc', 'google/protobuf/compiler/java/java_primitive_field_lite.cc', 'google/protobuf/compiler/java/java_primitive_field.cc', 'google/protobuf/compiler/java/java_name_resolver.cc', 'google/protobuf/compiler/java/java_message_lite.cc', 'google/protobuf/compiler/java/java_message_field_lite.cc', 'google/protobuf/compiler/java/java_message_field.cc', 'google/protobuf/compiler/java/java_message_builder_lite.cc', 'google/protobuf/compiler/java/java_message_builder.cc', 'google/protobuf/compiler/java/java_message.cc', 'google/protobuf/compiler/java/java_map_field_lite.cc', 'google/protobuf/compiler/java/java_map_field.cc', 'google/protobuf/compiler/java/java_lazy_message_field_lite.cc', 'google/protobuf/compiler/java/java_lazy_message_field.cc', 'google/protobuf/compiler/java/java_helpers.cc', 'google/protobuf/compiler/java/java_generator_factory.cc', 'google/protobuf/compiler/java/java_generator.cc', 'google/protobuf/compiler/java/java_file.cc', 'google/protobuf/compiler/java/java_field.cc', 'google/protobuf/compiler/java/java_extension.cc', 'google/protobuf/compiler/java/java_enum_lite.cc', 'google/protobuf/compiler/java/java_enum_field_lite.cc', 'google/protobuf/compiler/java/java_enum_field.cc', 'google/protobuf/compiler/java/java_enum.cc', 'google/protobuf/compiler/java/java_doc_comment.cc', 'google/protobuf/compiler/java/java_context.cc', 'google/protobuf/compiler/csharp/csharp_wrapper_field.cc', 'google/protobuf/compiler/csharp/csharp_source_generator_base.cc', 'google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_message_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_reflection_class.cc', 'google/protobuf/compiler/csharp/csharp_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_message_field.cc', 'google/protobuf/compiler/csharp/csharp_message.cc', 'google/protobuf/compiler/csharp/csharp_map_field.cc', 'google/protobuf/compiler/csharp/csharp_helpers.cc', 'google/protobuf/compiler/csharp/csharp_generator.cc', 'google/protobuf/compiler/csharp/csharp_field_base.cc', 'google/protobuf/compiler/csharp/csharp_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_enum.cc', 'google/protobuf/compiler/csharp/csharp_doc_comment.cc', 'google/protobuf/compiler/cpp/cpp_string_field.cc', 'google/protobuf/compiler/cpp/cpp_service.cc', 'google/protobuf/compiler/cpp/cpp_primitive_field.cc', 'google/protobuf/compiler/cpp/cpp_message_field.cc', 'google/protobuf/compiler/cpp/cpp_message.cc', 'google/protobuf/compiler/cpp/cpp_map_field.cc', 'google/protobuf/compiler/cpp/cpp_helpers.cc', 'google/protobuf/compiler/cpp/cpp_generator.cc', 'google/protobuf/compiler/cpp/cpp_file.cc', 'google/protobuf/compiler/cpp/cpp_field.cc', 'google/protobuf/compiler/cpp/cpp_extension.cc', 'google/protobuf/compiler/cpp/cpp_enum_field.cc', 'google/protobuf/compiler/cpp/cpp_enum.cc', 'google/protobuf/compiler/command_line_interface.cc', 'google/protobuf/compiler/code_generator.cc', 'google/protobuf/wrappers.pb.cc', 'google/protobuf/wire_format.cc', 'google/protobuf/util/type_resolver_util.cc', 'google/protobuf/util/time_util.cc', 'google/protobuf/util/message_differencer.cc', 'google/protobuf/util/json_util.cc', 'google/protobuf/util/internal/utility.cc', 'google/protobuf/util/internal/type_info_test_helper.cc', 'google/protobuf/util/internal/type_info.cc', 'google/protobuf/util/internal/protostream_objectwriter.cc', 'google/protobuf/util/internal/protostream_objectsource.cc', 'google/protobuf/util/internal/proto_writer.cc', 'google/protobuf/util/internal/object_writer.cc', 'google/protobuf/util/internal/json_stream_parser.cc', 'google/protobuf/util/internal/json_objectwriter.cc', 'google/protobuf/util/internal/json_escaping.cc', 'google/protobuf/util/internal/field_mask_utility.cc', 'google/protobuf/util/internal/error_listener.cc', 'google/protobuf/util/internal/default_value_objectwriter.cc', 'google/protobuf/util/internal/datapiece.cc', 'google/protobuf/util/field_mask_util.cc', 'google/protobuf/util/field_comparator.cc', 'google/protobuf/unknown_field_set.cc', 'google/protobuf/type.pb.cc', 'google/protobuf/timestamp.pb.cc', 'google/protobuf/text_format.cc', 'google/protobuf/stubs/substitute.cc', 'google/protobuf/stubs/mathlimits.cc', 'google/protobuf/struct.pb.cc', 'google/protobuf/source_context.pb.cc', 'google/protobuf/service.cc', 'google/protobuf/reflection_ops.cc', 'google/protobuf/message.cc', 'google/protobuf/map_field.cc', 'google/protobuf/io/zero_copy_stream_impl.cc', 'google/protobuf/io/tokenizer.cc', 'google/protobuf/io/strtod.cc', 'google/protobuf/io/printer.cc', 'google/protobuf/io/gzip_stream.cc', 'google/protobuf/generated_message_reflection.cc', 'google/protobuf/field_mask.pb.cc', 'google/protobuf/extension_set_heavy.cc', 'google/protobuf/empty.pb.cc', 'google/protobuf/dynamic_message.cc', 'google/protobuf/duration.pb.cc', 'google/protobuf/descriptor_database.cc', 'google/protobuf/descriptor.pb.cc', 'google/protobuf/descriptor.cc', 'google/protobuf/compiler/parser.cc', 'google/protobuf/compiler/importer.cc', 'google/protobuf/api.pb.cc', 'google/protobuf/any.pb.cc', 'google/protobuf/any.cc', 'google/protobuf/wire_format_lite.cc', 'google/protobuf/stubs/time.cc', 'google/protobuf/stubs/strutil.cc', 'google/protobuf/stubs/structurally_valid.cc', 'google/protobuf/stubs/stringprintf.cc', 'google/protobuf/stubs/stringpiece.cc', 'google/protobuf/stubs/statusor.cc', 'google/protobuf/stubs/status.cc', 'google/protobuf/stubs/once.cc', 'google/protobuf/stubs/int128.cc', 'google/protobuf/stubs/common.cc', 'google/protobuf/stubs/bytestream.cc', 'google/protobuf/stubs/atomicops_internals_x86_msvc.cc', 'google/protobuf/stubs/atomicops_internals_x86_gcc.cc', 'google/protobuf/repeated_field.cc', 'google/protobuf/message_lite.cc', 'google/protobuf/io/zero_copy_stream_impl_lite.cc', 'google/protobuf/io/zero_copy_stream.cc', 'google/protobuf/io/coded_stream.cc', 'google/protobuf/generated_message_util.cc', 'google/protobuf/extension_set.cc', 'google/protobuf/arenastring.cc', 'google/protobuf/arena.cc']
+CC_FILES=['google/protobuf/compiler/zip_writer.cc', 'google/protobuf/compiler/subprocess.cc', 'google/protobuf/compiler/ruby/ruby_generator.cc', 'google/protobuf/compiler/python/python_generator.cc', 'google/protobuf/compiler/plugin.pb.cc', 'google/protobuf/compiler/plugin.cc', 'google/protobuf/compiler/objectivec/objectivec_primitive_field.cc', 'google/protobuf/compiler/objectivec/objectivec_oneof.cc', 'google/protobuf/compiler/objectivec/objectivec_message_field.cc', 'google/protobuf/compiler/objectivec/objectivec_message.cc', 'google/protobuf/compiler/objectivec/objectivec_map_field.cc', 'google/protobuf/compiler/objectivec/objectivec_helpers.cc', 'google/protobuf/compiler/objectivec/objectivec_generator.cc', 'google/protobuf/compiler/objectivec/objectivec_file.cc', 'google/protobuf/compiler/objectivec/objectivec_field.cc', 'google/protobuf/compiler/objectivec/objectivec_extension.cc', 'google/protobuf/compiler/objectivec/objectivec_enum_field.cc', 'google/protobuf/compiler/objectivec/objectivec_enum.cc', 'google/protobuf/compiler/js/js_generator.cc', 'google/protobuf/compiler/javanano/javanano_primitive_field.cc', 'google/protobuf/compiler/javanano/javanano_message_field.cc', 'google/protobuf/compiler/javanano/javanano_message.cc', 'google/protobuf/compiler/javanano/javanano_map_field.cc', 'google/protobuf/compiler/javanano/javanano_helpers.cc', 'google/protobuf/compiler/javanano/javanano_generator.cc', 'google/protobuf/compiler/javanano/javanano_file.cc', 'google/protobuf/compiler/javanano/javanano_field.cc', 'google/protobuf/compiler/javanano/javanano_extension.cc', 'google/protobuf/compiler/javanano/javanano_enum_field.cc', 'google/protobuf/compiler/javanano/javanano_enum.cc', 'google/protobuf/compiler/java/java_string_field_lite.cc', 'google/protobuf/compiler/java/java_string_field.cc', 'google/protobuf/compiler/java/java_shared_code_generator.cc', 'google/protobuf/compiler/java/java_service.cc', 'google/protobuf/compiler/java/java_primitive_field_lite.cc', 'google/protobuf/compiler/java/java_primitive_field.cc', 'google/protobuf/compiler/java/java_name_resolver.cc', 'google/protobuf/compiler/java/java_message_lite.cc', 'google/protobuf/compiler/java/java_message_field_lite.cc', 'google/protobuf/compiler/java/java_message_field.cc', 'google/protobuf/compiler/java/java_message_builder_lite.cc', 'google/protobuf/compiler/java/java_message_builder.cc', 'google/protobuf/compiler/java/java_message.cc', 'google/protobuf/compiler/java/java_map_field_lite.cc', 'google/protobuf/compiler/java/java_map_field.cc', 'google/protobuf/compiler/java/java_lazy_message_field_lite.cc', 'google/protobuf/compiler/java/java_lazy_message_field.cc', 'google/protobuf/compiler/java/java_helpers.cc', 'google/protobuf/compiler/java/java_generator_factory.cc', 'google/protobuf/compiler/java/java_generator.cc', 'google/protobuf/compiler/java/java_file.cc', 'google/protobuf/compiler/java/java_field.cc', 'google/protobuf/compiler/java/java_extension_lite.cc', 'google/protobuf/compiler/java/java_extension.cc', 'google/protobuf/compiler/java/java_enum_lite.cc', 'google/protobuf/compiler/java/java_enum_field_lite.cc', 'google/protobuf/compiler/java/java_enum_field.cc', 'google/protobuf/compiler/java/java_enum.cc', 'google/protobuf/compiler/java/java_doc_comment.cc', 'google/protobuf/compiler/java/java_context.cc', 'google/protobuf/compiler/csharp/csharp_wrapper_field.cc', 'google/protobuf/compiler/csharp/csharp_source_generator_base.cc', 'google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_message_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_reflection_class.cc', 'google/protobuf/compiler/csharp/csharp_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_message_field.cc', 'google/protobuf/compiler/csharp/csharp_message.cc', 'google/protobuf/compiler/csharp/csharp_map_field.cc', 'google/protobuf/compiler/csharp/csharp_helpers.cc', 'google/protobuf/compiler/csharp/csharp_generator.cc', 'google/protobuf/compiler/csharp/csharp_field_base.cc', 'google/protobuf/compiler/csharp/csharp_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_enum.cc', 'google/protobuf/compiler/csharp/csharp_doc_comment.cc', 'google/protobuf/compiler/cpp/cpp_string_field.cc', 'google/protobuf/compiler/cpp/cpp_service.cc', 'google/protobuf/compiler/cpp/cpp_primitive_field.cc', 'google/protobuf/compiler/cpp/cpp_message_field.cc', 'google/protobuf/compiler/cpp/cpp_message.cc', 'google/protobuf/compiler/cpp/cpp_map_field.cc', 'google/protobuf/compiler/cpp/cpp_helpers.cc', 'google/protobuf/compiler/cpp/cpp_generator.cc', 'google/protobuf/compiler/cpp/cpp_file.cc', 'google/protobuf/compiler/cpp/cpp_field.cc', 'google/protobuf/compiler/cpp/cpp_extension.cc', 'google/protobuf/compiler/cpp/cpp_enum_field.cc', 'google/protobuf/compiler/cpp/cpp_enum.cc', 'google/protobuf/compiler/command_line_interface.cc', 'google/protobuf/compiler/code_generator.cc', 'google/protobuf/wrappers.pb.cc', 'google/protobuf/wire_format.cc', 'google/protobuf/util/type_resolver_util.cc', 'google/protobuf/util/time_util.cc', 'google/protobuf/util/message_differencer.cc', 'google/protobuf/util/json_util.cc', 'google/protobuf/util/internal/utility.cc', 'google/protobuf/util/internal/type_info_test_helper.cc', 'google/protobuf/util/internal/type_info.cc', 'google/protobuf/util/internal/protostream_objectwriter.cc', 'google/protobuf/util/internal/protostream_objectsource.cc', 'google/protobuf/util/internal/proto_writer.cc', 'google/protobuf/util/internal/object_writer.cc', 'google/protobuf/util/internal/json_stream_parser.cc', 'google/protobuf/util/internal/json_objectwriter.cc', 'google/protobuf/util/internal/json_escaping.cc', 'google/protobuf/util/internal/field_mask_utility.cc', 'google/protobuf/util/internal/error_listener.cc', 'google/protobuf/util/internal/default_value_objectwriter.cc', 'google/protobuf/util/internal/datapiece.cc', 'google/protobuf/util/field_mask_util.cc', 'google/protobuf/util/field_comparator.cc', 'google/protobuf/unknown_field_set.cc', 'google/protobuf/type.pb.cc', 'google/protobuf/timestamp.pb.cc', 'google/protobuf/text_format.cc', 'google/protobuf/stubs/substitute.cc', 'google/protobuf/stubs/mathlimits.cc', 'google/protobuf/struct.pb.cc', 'google/protobuf/source_context.pb.cc', 'google/protobuf/service.cc', 'google/protobuf/reflection_ops.cc', 'google/protobuf/message.cc', 'google/protobuf/map_field.cc', 'google/protobuf/io/zero_copy_stream_impl.cc', 'google/protobuf/io/tokenizer.cc', 'google/protobuf/io/strtod.cc', 'google/protobuf/io/printer.cc', 'google/protobuf/io/gzip_stream.cc', 'google/protobuf/generated_message_reflection.cc', 'google/protobuf/field_mask.pb.cc', 'google/protobuf/extension_set_heavy.cc', 'google/protobuf/empty.pb.cc', 'google/protobuf/dynamic_message.cc', 'google/protobuf/duration.pb.cc', 'google/protobuf/descriptor_database.cc', 'google/protobuf/descriptor.pb.cc', 'google/protobuf/descriptor.cc', 'google/protobuf/compiler/parser.cc', 'google/protobuf/compiler/importer.cc', 'google/protobuf/api.pb.cc', 'google/protobuf/any.pb.cc', 'google/protobuf/any.cc', 'google/protobuf/wire_format_lite.cc', 'google/protobuf/stubs/time.cc', 'google/protobuf/stubs/strutil.cc', 'google/protobuf/stubs/structurally_valid.cc', 'google/protobuf/stubs/stringprintf.cc', 'google/protobuf/stubs/stringpiece.cc', 'google/protobuf/stubs/statusor.cc', 'google/protobuf/stubs/status.cc', 'google/protobuf/stubs/once.cc', 'google/protobuf/stubs/int128.cc', 'google/protobuf/stubs/common.cc', 'google/protobuf/stubs/bytestream.cc', 'google/protobuf/stubs/atomicops_internals_x86_msvc.cc', 'google/protobuf/stubs/atomicops_internals_x86_gcc.cc', 'google/protobuf/repeated_field.cc', 'google/protobuf/message_lite.cc', 'google/protobuf/io/zero_copy_stream_impl_lite.cc', 'google/protobuf/io/zero_copy_stream.cc', 'google/protobuf/io/coded_stream.cc', 'google/protobuf/generated_message_util.cc', 'google/protobuf/extension_set.cc', 'google/protobuf/arenastring.cc', 'google/protobuf/arena.cc']
diff --git a/tools/distrib/python/grpcio_tools/setup.py b/tools/distrib/python/grpcio_tools/setup.py
index 0281c01..576f7ae 100644
--- a/tools/distrib/python/grpcio_tools/setup.py
+++ b/tools/distrib/python/grpcio_tools/setup.py
@@ -30,6 +30,7 @@
 from distutils import extension
 import os
 import os.path
+import shlex
 import sys
 
 import setuptools
@@ -40,18 +41,28 @@
 os.chdir(os.path.dirname(os.path.abspath(__file__)))
 sys.path.insert(0, os.path.abspath('.'))
 
+# There are some situations (like on Windows) where CC, CFLAGS, and LDFLAGS are
+# entirely ignored/dropped/forgotten by distutils and its Cygwin/MinGW support.
+# We use these environment variables to thus get around that without locking
+# ourselves in w.r.t. the multitude of operating systems this ought to build on.
+# By default we assume a GCC-like compiler.
+EXTRA_COMPILE_ARGS = shlex.split(os.environ.get('GRPC_PYTHON_CFLAGS',
+                                                '-frtti -std=c++11'))
+EXTRA_LINK_ARGS = shlex.split(os.environ.get('GRPC_PYTHON_LDFLAGS',
+                                             '-lpthread'))
+
 import protoc_lib_deps
 import grpc_version
 
 def protoc_ext_module():
   plugin_sources = [
-      'grpc/protoc/main.cc',
+      'grpc/tools/main.cc',
       'grpc_root/src/compiler/python_generator.cc'] + [
       os.path.join('third_party/protobuf/src', cc_file)
       for cc_file in protoc_lib_deps.CC_FILES]
   plugin_ext = extension.Extension(
-      name='grpc.protoc.protoc_compiler',
-      sources=['grpc/protoc/protoc_compiler.pyx'] + plugin_sources,
+      name='grpc.tools.protoc_compiler',
+      sources=['grpc/tools/protoc_compiler.pyx'] + plugin_sources,
       include_dirs=[
           '.',
           'grpc_root',
@@ -60,7 +71,8 @@
       ],
       language='c++',
       define_macros=[('HAVE_PTHREAD', 1)],
-      extra_compile_args=['-lpthread', '-frtti', '-std=c++11'],
+      extra_compile_args=EXTRA_COMPILE_ARGS,
+      extra_link_args=EXTRA_LINK_ARGS,
   )
   return plugin_ext
 
@@ -71,7 +83,7 @@
 setuptools.setup(
   name='grpcio_tools',
   version=grpc_version.VERSION,
-  license='',
+  license='3-clause BSD',
   ext_modules=maybe_cythonize([
       protoc_ext_module(),
   ]),
diff --git a/tools/dockerfile/grpc_clang_format/Dockerfile b/tools/dockerfile/grpc_clang_format/Dockerfile
index 41239e9..ab58017 100644
--- a/tools/dockerfile/grpc_clang_format/Dockerfile
+++ b/tools/dockerfile/grpc_clang_format/Dockerfile
@@ -30,8 +30,8 @@
 FROM ubuntu:wily
 RUN apt-get update
 RUN apt-get -y install wget
-RUN echo deb http://llvm.org/apt/wily/ llvm-toolchain-wily main >> /etc/apt/sources.list
-RUN echo deb-src http://llvm.org/apt/wily/ llvm-toolchain-wily main >> /etc/apt/sources.list
+RUN echo deb http://llvm.org/apt/wily/ llvm-toolchain-wily-3.8 main >> /etc/apt/sources.list
+RUN echo deb-src http://llvm.org/apt/wily/ llvm-toolchain-wily-3.8 main >> /etc/apt/sources.list
 RUN wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key| apt-key add -
 RUN apt-get update
 RUN apt-get -y install clang-format-3.8
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index 2a319db..798d68b 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -777,6 +777,8 @@
 include/grpc++/impl/rpc_service_method.h \
 include/grpc++/impl/serialization_traits.h \
 include/grpc++/impl/server_builder_option.h \
+include/grpc++/impl/server_builder_plugin.h \
+include/grpc++/impl/server_initializer.h \
 include/grpc++/impl/service_type.h \
 include/grpc++/impl/sync.h \
 include/grpc++/impl/sync_cxx11.h \
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 5fdfafb..ce1d6ac 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -777,6 +777,8 @@
 include/grpc++/impl/rpc_service_method.h \
 include/grpc++/impl/serialization_traits.h \
 include/grpc++/impl/server_builder_option.h \
+include/grpc++/impl/server_builder_plugin.h \
+include/grpc++/impl/server_initializer.h \
 include/grpc++/impl/service_type.h \
 include/grpc++/impl/sync.h \
 include/grpc++/impl/sync_cxx11.h \
diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core
index eed8425..aabca41 100644
--- a/tools/doxygen/Doxyfile.core
+++ b/tools/doxygen/Doxyfile.core
@@ -786,6 +786,7 @@
 include/grpc/impl/codegen/sync_posix.h \
 include/grpc/impl/codegen/sync_win32.h \
 include/grpc/impl/codegen/time.h \
+include/grpc/grpc_cronet.h \
 include/grpc/grpc_security.h \
 include/grpc/grpc_security_constants.h \
 include/grpc/census.h \
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index 1fcc1fa..212dfc3 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -786,6 +786,7 @@
 include/grpc/impl/codegen/sync_posix.h \
 include/grpc/impl/codegen/sync_win32.h \
 include/grpc/impl/codegen/time.h \
+include/grpc/grpc_cronet.h \
 include/grpc/grpc_security.h \
 include/grpc/grpc_security_constants.h \
 include/grpc/census.h \
@@ -807,6 +808,7 @@
 src/core/lib/iomgr/endpoint.h \
 src/core/lib/iomgr/endpoint_pair.h \
 src/core/lib/iomgr/ev_poll_and_epoll_posix.h \
+src/core/lib/iomgr/ev_poll_posix.h \
 src/core/lib/iomgr/ev_posix.h \
 src/core/lib/iomgr/exec_ctx.h \
 src/core/lib/iomgr/executor.h \
@@ -913,8 +915,9 @@
 src/core/ext/client_config/subchannel_call_holder.h \
 src/core/ext/client_config/subchannel_index.h \
 src/core/ext/client_config/uri_parser.h \
+third_party/objective_c/Cronet/cronet_c_for_grpc.h \
 src/core/ext/lb_policy/grpclb/load_balancer_api.h \
-src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h \
+src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h \
 third_party/nanopb/pb.h \
 third_party/nanopb/pb_common.h \
 third_party/nanopb/pb_decode.h \
@@ -944,6 +947,7 @@
 src/core/lib/iomgr/endpoint_pair_posix.c \
 src/core/lib/iomgr/endpoint_pair_windows.c \
 src/core/lib/iomgr/ev_poll_and_epoll_posix.c \
+src/core/lib/iomgr/ev_poll_posix.c \
 src/core/lib/iomgr/ev_posix.c \
 src/core/lib/iomgr/exec_ctx.c \
 src/core/lib/iomgr/executor.c \
@@ -1071,8 +1075,11 @@
 src/core/ext/client_config/uri_parser.c \
 src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
 src/core/ext/transport/chttp2/client/insecure/channel_create.c \
+src/core/ext/transport/cronet/client/secure/cronet_channel_create.c \
+src/core/ext/transport/cronet/transport/cronet_api_dummy.c \
+src/core/ext/transport/cronet/transport/cronet_transport.c \
 src/core/ext/lb_policy/grpclb/load_balancer_api.c \
-src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \
+src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \
 third_party/nanopb/pb_common.c \
 third_party/nanopb/pb_decode.c \
 third_party/nanopb/pb_encode.c \
diff --git a/tools/gce/create_linux_performance_worker.sh b/tools/gce/create_linux_performance_worker.sh
index 8c9cc46..c9a0ffa 100755
--- a/tools/gce/create_linux_performance_worker.sh
+++ b/tools/gce/create_linux_performance_worker.sh
@@ -42,14 +42,15 @@
 ZONE=us-central1-b  # this zone allows 32core machines
 
 INSTANCE_NAME="${1:-grpc-performance-server1}"
-MACHINE_TYPE=n1-standard-32
+MACHINE_TYPE=n1-standard-8
 
 gcloud compute instances create $INSTANCE_NAME \
     --project="$CLOUD_PROJECT" \
     --zone "$ZONE" \
     --machine-type $MACHINE_TYPE \
     --image ubuntu-15-10 \
-    --boot-disk-size 300
+    --boot-disk-size 300 \
+    --scopes https://www.googleapis.com/auth/bigquery
 
 echo 'Created GCE instance, waiting 60 seconds for it to come online.'
 sleep 60
diff --git a/tools/gce/create_linux_worker.sh b/tools/gce/create_linux_worker.sh
index dff0b1c..c41e4d2 100755
--- a/tools/gce/create_linux_worker.sh
+++ b/tools/gce/create_linux_worker.sh
@@ -43,7 +43,7 @@
     --project="$CLOUD_PROJECT" \
     --zone "$ZONE" \
     --machine-type n1-standard-8 \
-    --image ubuntu-14-04 \
+    --image ubuntu-15-10 \
     --boot-disk-size 1000
 
 echo 'Created GCE instance, waiting 60 seconds for it to come online.'
diff --git a/tools/gce/linux_performance_worker_init.sh b/tools/gce/linux_performance_worker_init.sh
index df29581..dc47842 100755
--- a/tools/gce/linux_performance_worker_init.sh
+++ b/tools/gce/linux_performance_worker_init.sh
@@ -77,6 +77,9 @@
 # perftools
 sudo apt-get install -y google-perftools libgoogle-perftools-dev
 
+# netperf
+sudo apt-get install -y netperf
+
 # C++ dependencies
 sudo apt-get install -y libgflags-dev libgtest-dev libc++-dev clang
 
@@ -94,6 +97,7 @@
 # Node dependencies (nvm has to be installed under user jenkins)
 touch .profile
 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash
+source ~/.nvm/nvm.sh
 nvm install 0.12 && npm config set cache /tmp/npm-cache
 nvm install 4 && npm config set cache /tmp/npm-cache
 nvm install 5 && npm config set cache /tmp/npm-cache
@@ -115,3 +119,6 @@
 gem install bundler
 
 # Java dependencies - nothing as we already have Java JDK 8
+
+# Go dependencies
+sudo apt-get install -y golang-go
diff --git a/tools/gce/linux_worker_init.sh b/tools/gce/linux_worker_init.sh
index ef6a5d1..afcf7a5 100755
--- a/tools/gce/linux_worker_init.sh
+++ b/tools/gce/linux_worker_init.sh
@@ -37,7 +37,7 @@
 sudo apt-get update
 
 # Install JRE
-sudo apt-get install -y openjdk-7-jre
+sudo apt-get install -y openjdk-8-jre
 sudo apt-get install -y unzip lsof
 
 # Install Docker
diff --git a/examples/node/greeter_client.js b/tools/gource/create_auth_context.h
similarity index 74%
copy from examples/node/greeter_client.js
copy to tools/gource/create_auth_context.h
index 2820acb..387407b 100644
--- a/examples/node/greeter_client.js
+++ b/tools/gource/create_auth_context.h
@@ -30,24 +30,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
+#include <memory>
 
-var PROTO_PATH = __dirname + '/../protos/helloworld.proto';
+#include <grpc++/security/auth_context.h>
+#include <grpc/grpc.h>
 
-var grpc = require('grpc');
-var hello_proto = grpc.load(PROTO_PATH).helloworld;
+namespace grpc {
 
-function main() {
-  var client = new hello_proto.Greeter('localhost:50051',
-                                       grpc.credentials.createInsecure());
-  var user;
-  if (process.argv.length >= 3) {
-    user = process.argv[2];
-  } else {
-    user = 'world';
-  }
-  client.sayHello({name: user}, function(err, response) {
-    console.log('Greeting:', response.message);
-  });
-}
+std::shared_ptr<const AuthContext> CreateAuthContext(grpc_call* call);
 
-main();
+}  // namespace grpc
diff --git a/tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py b/tools/gource/gen-all-logs.sh
old mode 100644
new mode 100755
similarity index 76%
copy from tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py
copy to tools/gource/gen-all-logs.sh
index caafc54..85352c5
--- a/tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py
+++ b/tools/gource/gen-all-logs.sh
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-
+#!/bin/bash
 # Copyright 2016, Google Inc.
 # All rights reserved.
 #
@@ -29,10 +28,20 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import sys
+set -ex
 
-from grpc.protoc import protoc_compiler
+outdir=`pwd`
 
-
-if __name__ == '__main__':
-  protoc_compiler.run_main(sys.argv)
+tmpdir=`mktemp -d`
+mkdir -p $tmpdir/logs
+repos="grpc grpc-common grpc-go grpc-java grpc.github.io grpc-tools homebrew-grpc grpc-docker-library"
+for repo in $repos
+do
+  cd $tmpdir
+  git clone https://github.com/grpc/$repo.git
+  cd $repo
+  gource --output-custom-log $tmpdir/logs/$repo
+  sed -i .backup "s,\|/,\|/$repo/,g" $tmpdir/logs/$repo
+done
+rm $tmpdir/logs/*.backup
+cat $tmpdir/logs/* | sort -n > $outdir/all-logs.txt
diff --git a/tools/gource/gource.sh b/tools/gource/gource.sh
index 0199609..b3dad5d 100755
--- a/tools/gource/gource.sh
+++ b/tools/gource/gource.sh
@@ -28,5 +28,13 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-gource --multi-sampling -c 4 -s 0.1 --max-file-lag 0.05 --max-files 0 -e 0.05 --hide filenames,dirnames $*
-
+gource                          \
+  --multi-sampling              \
+  -s 0.1                        \
+  --max-file-lag 0.05           \
+  --max-files 0                 \
+  -e 0.01                       \
+  --hide filenames,dirnames     \
+  --disable-auto-rotate         \
+  --file-filter '/grpc/doc/ref' \
+  $*
diff --git a/tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py b/tools/gource/make-video.sh
old mode 100644
new mode 100755
similarity index 80%
copy from tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py
copy to tools/gource/make-video.sh
index caafc54..02d79df
--- a/tools/distrib/python/grpcio_tools/grpc/protoc/compiler.py
+++ b/tools/gource/make-video.sh
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-
+#!/bin/bash
 # Copyright 2016, Google Inc.
 # All rights reserved.
 #
@@ -29,10 +28,20 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import sys
+set -ex
 
-from grpc.protoc import protoc_compiler
-
-
-if __name__ == '__main__':
-  protoc_compiler.run_main(sys.argv)
+dst=$1
+shift
+$(dirname $0)/gource.sh \
+  --disable-progress    \
+  --stop-at-end         \
+  --output-ppm-stream - \
+  $@ |                  \
+ffmpeg                  \
+  -y                    \
+  -r 60                 \
+  -f image2pipe         \
+  -vcodec ppm           \
+  -i -                  \
+  -vcodec libx264       \
+  $dst
diff --git a/tools/jenkins/run_performance.sh b/tools/jenkins/run_performance.sh
index 13a3327..99b920f 100755
--- a/tools/jenkins/run_performance.sh
+++ b/tools/jenkins/run_performance.sh
@@ -34,4 +34,4 @@
 # Enter the gRPC repo root
 cd $(dirname $0)/../..
 
-tools/run_tests/run_performance_tests.py -l c++ node ruby csharp python
+tools/run_tests/run_performance_tests.py -l c++ node ruby csharp python --netperf --category smoketest
diff --git a/tools/run_tests/artifact_targets.py b/tools/run_tests/artifact_targets.py
index 477bd46..bd1269c 100644
--- a/tools/run_tests/artifact_targets.py
+++ b/tools/run_tests/artifact_targets.py
@@ -113,37 +113,7 @@
       # defines ourselves.
       # TODO(atash) get better platform-detection support in core so we don't
       # need to do this manually...
-      environ['CFLAGS'] = " ".join([
-        '-DGPR_NO_AUTODETECT_PLATFORM',
-        '-DGPR_PLATFORM_STRING=\\"manylinux\\"',
-        '-DGPR_POSIX_CRASH_HANDLER=1',
-        '-DGPR_CPU_LINUX=1',
-        '-DGPR_GCC_ATOMIC=1',
-        '-DGPR_GCC_TLS=1',
-        '-DGPR_LINUX=1',
-        '-DGPR_LINUX_LOG=1',
-        #'-DGPR_LINUX_MULTIPOLL_WITH_EPOLL=1',
-        '-DGPR_POSIX_SOCKET=1',
-        '-DGPR_POSIX_WAKEUP_FD=1',
-        '-DGPR_POSIX_SOCKETADDR=1',
-        #'-DGPR_LINUX_EVENTFD=1',
-        '-DGPR_POSIX_NO_SPECIAL_WAKEUP_FD=1',
-        #'-DGPR_LINUX_SOCKETUTILS=1',
-        '-DGPR_POSIX_SOCKETUTILS=1',
-        '-DGPR_HAVE_UNIX_SOCKET=1',
-        '-DGPR_HAVE_IP_PKTINFO=1',
-        '-DGPR_HAVE_IPV6_RECVPKTINFO=1',
-        '-DGPR_LINUX_ENV=1',
-        '-DGPR_POSIX_FILE=1',
-        '-DGPR_POSIX_TMPFILE=1',
-        '-DGPR_POSIX_STRING=1',
-        '-DGPR_POSIX_SUBPROCESS=1',
-        '-DGPR_POSIX_SYNC=1',
-        '-DGPR_POSIX_TIME=1',
-        '-DGPR_GETPID_IN_UNISTD_H=1',
-        '-DGPR_HAVE_MSG_NOSIGNAL=1',
-        '-DGPR_ARCH_{arch}=1'.format(arch=('32' if self.arch == 'x86' else '64')),
-      ])
+      environ['CFLAGS'] = '-DGPR_MANYLINUX1=1'
       return create_docker_jobspec(self.name,
           'tools/dockerfile/grpc_artifact_python_manylinux_%s' % self.arch,
           'tools/run_tests/build_artifact_python.sh',
diff --git a/tools/run_tests/build_artifact_csharp.bat b/tools/run_tests/build_artifact_csharp.bat
index 33dc8c2..24c8d48 100644
--- a/tools/run_tests/build_artifact_csharp.bat
+++ b/tools/run_tests/build_artifact_csharp.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Builds C# artifacts on Windows
 
 @call vsprojects\build_vs2013.bat %* || goto :error
diff --git a/tools/run_tests/build_artifact_node.bat b/tools/run_tests/build_artifact_node.bat
index 84c63c2..c5bd726 100644
--- a/tools/run_tests/build_artifact_node.bat
+++ b/tools/run_tests/build_artifact_node.bat
@@ -27,7 +27,7 @@
 @rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-set node_versions=0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0
+set node_versions=0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0
 
 set PATH=%PATH%;C:\Program Files\nodejs\;%APPDATA%\npm
 
@@ -38,12 +38,12 @@
 mkdir artifacts
 
 for %%v in (%node_versions%) do (
-  call node-pre-gyp configure build --target=%%v --target_arch=%1
+  call .\node_modules\.bin\node-pre-gyp.cmd configure build --target=%%v --target_arch=%1
 
 @rem Try again after removing openssl headers
   rmdir "%HOMEDRIVE%%HOMEPATH%\.node-gyp\%%v\include\node\openssl" /S /Q
   rmdir "%HOMEDRIVE%%HOMEPATH%\.node-gyp\iojs-%%v\include\node\openssl" /S /Q
-  call node-pre-gyp build package testpackage --target=%%v --target_arch=%1 || goto :error
+  call .\node_modules\.bin\node-pre-gyp.cmd build package testpackage --target=%%v --target_arch=%1 || goto :error
 
   xcopy /Y /I /S build\stage\* artifacts\ || goto :error
 )
diff --git a/tools/run_tests/build_artifact_node.sh b/tools/run_tests/build_artifact_node.sh
index ef3476a..9d06472 100755
--- a/tools/run_tests/build_artifact_node.sh
+++ b/tools/run_tests/build_artifact_node.sh
@@ -42,7 +42,7 @@
 
 npm update
 
-node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 )
+node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 )
 
 for version in ${node_versions[@]}
 do
diff --git a/tools/run_tests/build_artifact_python.bat b/tools/run_tests/build_artifact_python.bat
index 636ae0d..fea0275 100644
--- a/tools/run_tests/build_artifact_python.bat
+++ b/tools/run_tests/build_artifact_python.bat
@@ -41,7 +41,7 @@
 copy /Y vsprojects\x64\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\grpc_c.64.python || goto :error
 
 
-set PATH=C:\%1;C:\%1\scripts;%PATH%
+set PATH=C:\%1;C:\%1\scripts;C:\msys64\mingw%2\bin;%PATH%
 
 pip install --upgrade six
 pip install --upgrade setuptools
@@ -50,12 +50,26 @@
 set GRPC_PYTHON_USE_CUSTOM_BDIST=0
 set GRPC_PYTHON_BUILD_WITH_CYTHON=1
 
+@rem TODO(atash): maybe we could avoid the grpc_c.(32|64).python shim above if
+@rem this used the right python build?
 python setup.py bdist_wheel
 
 @rem Build gRPC Python tools
-set PATH=C:\msys64\mingw%2\bin;%PATH%
-set CC=C:\msys64\mingw%2\bin\g++.exe
-set CFLAGS=-fno-wrapv
+@rem
+@rem Because this is windows and *everything seems to hate Windows* we have to
+@rem set all of these flags ourselves because Python won't help us (see the
+@rem setup.py of the grpcio_tools project).
+set GRPC_PYTHON_CFLAGS=-fno-wrapv -frtti -std=c++11
+@rem Further confusing things, MSYS2's mingw64 tries to dynamically link
+@rem libgcc, libstdc++, and winpthreads. We have to override this or our
+@rem extensions end up linking to MSYS2 DLLs, which the normal Python on
+@rem Windows user won't have... and ON TOP OF THIS, there's MinGW's GCC default
+@rem behavior of linking msvcrt.dll as the C runtime library, which we need to
+@rem override so that Python's distutils doesn't link us against multiple C
+@rem runtimes.
+python -c "from distutils.cygwinccompiler import get_msvcr; print(get_msvcr()[0])" > temp.txt
+set /p PYTHON_MSVCR=<temp.txt
+set GRPC_PYTHON_LDFLAGS=-static-libgcc -static-libstdc++ -mcrtdll=%PYTHON_MSVCR% -static -lpthread
 python tools\distrib\python\make_grpcio_tools.py
 if %2 == 32 (
   python tools\distrib\python\grpcio_tools\setup.py build_ext -c mingw32
diff --git a/tools/run_tests/build_artifact_python.sh b/tools/run_tests/build_artifact_python.sh
index 35c3a48..4320f97 100755
--- a/tools/run_tests/build_artifact_python.sh
+++ b/tools/run_tests/build_artifact_python.sh
@@ -59,7 +59,11 @@
 ${SETARCH_CMD} ${PYTHON} setup.py  \
     bdist_wheel
 
-# Build gRPC tools package
+# Build gRPC tools package source distribution
+${SETARCH_CMD} ${PYTHON} tools/distrib/python/grpcio_tools/setup.py  \
+    sdist
+
+# Build gRPC tools package binary distribution
 ${PYTHON} tools/distrib/python/make_grpcio_tools.py
 CFLAGS="$CFLAGS -fno-wrapv" ${SETARCH_CMD} \
   ${PYTHON} tools/distrib/python/grpcio_tools/setup.py bdist_wheel
diff --git a/tools/run_tests/build_package_node.sh b/tools/run_tests/build_package_node.sh
index 6bc9466..4646072 100755
--- a/tools/run_tests/build_package_node.sh
+++ b/tools/run_tests/build_package_node.sh
@@ -55,7 +55,7 @@
 cp grpc-tools-*.tgz $artifacts/
 tools_version=$(npm list | grep -oP '(?<=grpc-tools@)\S+')
 
-output_dir=$artifacts/grpc-precompiled-binaries/node/grpc-tools/$tools_version
+output_dir=$artifacts/grpc-precompiled-binaries/node/grpc-tools/v$tools_version
 mkdir -p $output_dir
 
 for arch in {x86,x64}; do
diff --git a/tools/run_tests/build_python.sh b/tools/run_tests/build_python.sh
index 594c20b..4cc6881 100755
--- a/tools/run_tests/build_python.sh
+++ b/tools/run_tests/build_python.sh
@@ -55,3 +55,7 @@
 $ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/setup.py build_py
 $ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/setup.py build_ext --inplace
 $ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/setup.py gather --test
+
+# Build the health checker
+$ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/src/python/grpcio_health_checking/setup.py build
+$ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/src/python/grpcio_health_checking/setup.py build_py
diff --git a/tools/run_tests/configs.json b/tools/run_tests/configs.json
index 325e9aa..bcc4118 100644
--- a/tools/run_tests/configs.json
+++ b/tools/run_tests/configs.json
@@ -56,6 +56,9 @@
   }, 
   {
     "config": "ubsan", 
+    "environ": {
+      "UBSAN_OPTIONS": "print_stacktrace=1"
+    }, 
     "timeout_multiplier": 1.5
   }, 
   {
diff --git a/tools/run_tests/dockerize/docker_run_tests.sh b/tools/run_tests/dockerize/docker_run_tests.sh
index 2fc66c2..8c6143d 100755
--- a/tools/run_tests/dockerize/docker_run_tests.sh
+++ b/tools/run_tests/dockerize/docker_run_tests.sh
@@ -35,6 +35,7 @@
 
 export CONFIG=$config
 export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer
+export PATH=$PATH:/usr/bin/llvm-symbolizer
 
 # Ensure that programs depending on current-user-ownership of cache directories
 # are satisfied (it's being mounted from outside the image).
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index e9675fb..d3259e7 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -344,6 +344,7 @@
     self._add_env = add_env
     self.resultset = {}
     self._remaining = None
+    self._start_time = time.time()
 
   def set_remaining(self, remaining):
     self._remaining = remaining
@@ -413,6 +414,11 @@
       if dead: return
       if (not self._travis):
         rstr = '' if self._remaining is None else '%d queued, ' % self._remaining
+        if self._remaining is not None and self._completed > 0:
+          now = time.time()
+          sofar = now - self._start_time
+          remaining = sofar / self._completed * (self._remaining + len(self._running))
+          rstr = 'ETA %.1f sec; %s' % (remaining, rstr)
         message('WAITING', '%s%d jobs running, %d complete, %d failed' % (
             rstr, len(self._running), self._completed, self._failures))
       if platform_string() == 'windows':
@@ -457,7 +463,7 @@
   staging = []
   for x in xs:
     staging.append(x)
-    if len(staging) > 1000:
+    if len(staging) > 5000:
       yield (staging.pop(0), None)
   n = len(staging)
   for i, x in enumerate(staging):
diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py
index ebd28f7..fbccf3b 100755
--- a/tools/run_tests/performance/bq_upload_result.py
+++ b/tools/run_tests/performance/bq_upload_result.py
@@ -48,20 +48,47 @@
 _PROJECT_ID='grpc-testing'
 
 
-def _upload_scenario_result_to_bigquery(dataset_id, table_id, result_file):
+def _upload_netperf_latency_csv_to_bigquery(dataset_id, table_id, result_file):
+  with open(result_file, 'r') as f:
+    (col1, col2, col3) = f.read().split(',')
+    latency50 = float(col1.strip()) * 1000
+    latency90 = float(col2.strip()) * 1000
+    latency99 = float(col3.strip()) * 1000
+
+    scenario_result = {
+        'scenario': {
+          'name': 'netperf_tcp_rr'
+        },
+        'summary': {
+          'latency50': latency50,
+          'latency90': latency90,
+          'latency99': latency99
+        }
+    }
+
   bq = big_query_utils.create_big_query()
   _create_results_table(bq, dataset_id, table_id)
 
+  if not _insert_result(bq, dataset_id, table_id, scenario_result, flatten=False):
+    print 'Error uploading result to bigquery.'
+    sys.exit(1)
+
+
+def _upload_scenario_result_to_bigquery(dataset_id, table_id, result_file):
   with open(result_file, 'r') as f:
     scenario_result = json.loads(f.read())
 
+  bq = big_query_utils.create_big_query()
+  _create_results_table(bq, dataset_id, table_id)
+
   if not _insert_result(bq, dataset_id, table_id, scenario_result):
     print 'Error uploading result to bigquery.'
     sys.exit(1)
 
 
-def _insert_result(bq, dataset_id, table_id, scenario_result):
-  _flatten_result_inplace(scenario_result)
+def _insert_result(bq, dataset_id, table_id, scenario_result, flatten=True):
+  if flatten:
+    _flatten_result_inplace(scenario_result)
   _populate_metadata_inplace(scenario_result)
   row = big_query_utils.make_row(str(uuid.uuid4()), scenario_result)
   return big_query_utils.insert_rows(bq,
@@ -127,9 +154,17 @@
                   help='Bigquery "dataset.table" to upload results to.')
 argp.add_argument('--file_to_upload', default='scenario_result.json', type=str,
                   help='Report file to upload.')
+argp.add_argument('--file_format',
+                  choices=['scenario_result','netperf_latency_csv'],
+                  default='scenario_result',
+                  help='Format of the file to upload.')
 
 args = argp.parse_args()
 
 dataset_id, table_id = args.bq_result_table.split('.', 2)
-_upload_scenario_result_to_bigquery(dataset_id, table_id, args.file_to_upload)
+
+if args.file_format == 'netperf_latency_csv':
+  _upload_netperf_latency_csv_to_bigquery(dataset_id, table_id, args.file_to_upload)
+else:
+  _upload_scenario_result_to_bigquery(dataset_id, table_id, args.file_to_upload)
 print 'Successfully uploaded %s to BigQuery.\n' % args.file_to_upload
diff --git a/tools/run_tests/performance/build_performance.sh b/tools/run_tests/performance/build_performance.sh
index 8cfe1c4..352c679 100755
--- a/tools/run_tests/performance/build_performance.sh
+++ b/tools/run_tests/performance/build_performance.sh
@@ -33,8 +33,6 @@
 
 cd $(dirname $0)/../../..
 
-#TODO(jtattermusch): add support for more languages
-
 CONFIG=${CONFIG:-opt}
 
 # build C++ qps worker & driver always - we need at least the driver to
@@ -53,6 +51,9 @@
     (cd ../grpc-java/ &&
       ./gradlew -PskipCodegen=true :grpc-benchmarks:installDist)
     ;;
+  "go")
+    tools/run_tests/performance/build_performance_go.sh
+    ;;
   *)
     tools/run_tests/run_tests.py -l $language -c $CONFIG --build_only -j 8
     ;;
diff --git a/src/python/grpcio_health_checking/grpc/__init__.py b/tools/run_tests/performance/build_performance_go.sh
old mode 100644
new mode 100755
similarity index 77%
copy from src/python/grpcio_health_checking/grpc/__init__.py
copy to tools/run_tests/performance/build_performance_go.sh
index 7086519..3719cc5
--- a/src/python/grpcio_health_checking/grpc/__init__.py
+++ b/tools/run_tests/performance/build_performance_go.sh
@@ -1,3 +1,4 @@
+#!/bin/bash
 # Copyright 2015, Google Inc.
 # All rights reserved.
 #
@@ -27,4 +28,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+set -ex
 
+cd $(dirname $0)/../../..
+
+export GOPATH=$(pwd)/../gopath
+
+# Get grpc-go and the dependencies but get rid of the upstream/master version
+go get google.golang.org/grpc
+rm -rf "${GOPATH}/src/google.golang.org/grpc"
+
+# Get the revision of grpc-go we want to test
+git clone --recursive ../grpc-go ${GOPATH}/src/google.golang.org/grpc
+
+(cd ${GOPATH}/src/google.golang.org/grpc/benchmark/worker && go install)
diff --git a/tools/run_tests/performance/kill_workers.sh b/tools/run_tests/performance/kill_workers.sh
index 7a87634..f306f0c 100755
--- a/tools/run_tests/performance/kill_workers.sh
+++ b/tools/run_tests/performance/kill_workers.sh
@@ -52,3 +52,6 @@
 
 # Java
 jps | grep LoadWorker | awk '{print $1}' | xargs kill -9
+
+# Go
+killall -9 worker || true
diff --git a/tools/run_tests/performance/remote_host_prepare.sh b/tools/run_tests/performance/remote_host_prepare.sh
index d7f539a..f81102b 100755
--- a/tools/run_tests/performance/remote_host_prepare.sh
+++ b/tools/run_tests/performance/remote_host_prepare.sh
@@ -39,7 +39,7 @@
 # mess with the results, be rough and reboot the slave here
 # and wait for it to come back online.
 # could also kill jenkins.
-ssh "${USER_AT_HOST}" "killall -9 qps_worker mono node ruby || true"
+ssh "${USER_AT_HOST}" "killall -9 qps_worker mono node ruby worker || true"
 
 # push the current sources to the slave and unpack it.
 scp ../grpc.tar "${USER_AT_HOST}:~/performance_workspace"
diff --git a/src/python/grpcio_health_checking/grpc/__init__.py b/tools/run_tests/performance/run_netperf.sh
old mode 100644
new mode 100755
similarity index 77%
copy from src/python/grpcio_health_checking/grpc/__init__.py
copy to tools/run_tests/performance/run_netperf.sh
index 7086519..298edbe
--- a/src/python/grpcio_health_checking/grpc/__init__.py
+++ b/tools/run_tests/performance/run_netperf.sh
@@ -1,3 +1,4 @@
+#!/bin/bash
 # Copyright 2015, Google Inc.
 # All rights reserved.
 #
@@ -27,4 +28,18 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+set -ex
 
+cd $(dirname $0)/../../..
+
+netperf >netperf_latency.txt -P 0 -t TCP_RR -H "$NETPERF_SERVER_HOST" -- -r 1,1 -o P50_LATENCY,P90_LATENCY,P99_LATENCY
+
+cat netperf_latency.txt
+
+if [ "$BQ_RESULT_TABLE" != "" ]
+then
+  tools/run_tests/performance/bq_upload_result.py \
+      --file_to_upload=netperf_latency.txt \
+      --file_format=netperf_latency_csv \
+      --bq_result_table="$BQ_RESULT_TABLE"
+fi
diff --git a/src/python/grpcio_health_checking/grpc/__init__.py b/tools/run_tests/performance/run_worker_go.sh
old mode 100644
new mode 100755
similarity index 92%
copy from src/python/grpcio_health_checking/grpc/__init__.py
copy to tools/run_tests/performance/run_worker_go.sh
index 7086519..6b1242a
--- a/src/python/grpcio_health_checking/grpc/__init__.py
+++ b/tools/run_tests/performance/run_worker_go.sh
@@ -1,3 +1,4 @@
+#!/bin/bash
 # Copyright 2015, Google Inc.
 # All rights reserved.
 #
@@ -27,4 +28,10 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+set -ex
 
+cd $(dirname $0)/../../..
+
+export GOPATH=$(pwd)/../gopath
+
+${GOPATH}/bin/worker $@
diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py
index ddbe237..77b158f 100644
--- a/tools/run_tests/performance/scenario_config.py
+++ b/tools/run_tests/performance/scenario_config.py
@@ -29,11 +29,12 @@
 
 # performance scenario configuration for various languages
 
-SINGLE_MACHINE_CORES=8
 WARMUP_SECONDS=5
 JAVA_WARMUP_SECONDS=15  # Java needs more warmup time for JIT to kick in.
 BENCHMARK_SECONDS=30
 
+SMOKETEST='smoketest'
+
 SECURE_SECARGS = {'use_test_ca': True,
                   'server_host_override': 'foo.test.google.fr'}
 
@@ -68,6 +69,102 @@
 # wide is the number of client channels in multi-channel tests (1 otherwise)
 WIDE=64
 
+# For most synchronous clients, DEEP*WIDE threads will be created.
+SYNC_DEEP=10
+SYNC_WIDE=8
+
+
+def _get_secargs(is_secure):
+  if is_secure:
+    return SECURE_SECARGS
+  else:
+    return None
+
+
+def remove_nonproto_fields(scenario):
+  """Remove special-purpose that contains some extra info about the scenario
+  but don't belong to the ScenarioConfig protobuf message"""
+  scenario.pop('CATEGORIES', None)
+  scenario.pop('CLIENT_LANGUAGE', None)
+  scenario.pop('SERVER_LANGUAGE', None)
+  return scenario
+
+
+def _ping_pong_scenario(name, rpc_type,
+                        client_type, server_type,
+                        secure=True,
+                        use_generic_payload=False,
+                        unconstrained_client=None,
+                        client_language=None,
+                        server_language=None,
+                        server_core_limit=0,
+                        async_server_threads=0,
+                        warmup_seconds=WARMUP_SECONDS,
+                        categories=[]):
+  """Creates a basic ping pong scenario."""
+  scenario = {
+    'name': name,
+    'num_servers': 1,
+    'num_clients': 1,
+    'client_config': {
+      'client_type': client_type,
+      'security_params': _get_secargs(secure),
+      'outstanding_rpcs_per_channel': 1,
+      'client_channels': 1,
+      'async_client_threads': 1,
+      'rpc_type': rpc_type,
+      'load_params': {
+        'closed_loop': {}
+      },
+      'histogram_params': HISTOGRAM_PARAMS,
+    },
+    'server_config': {
+      'server_type': server_type,
+      'security_params': _get_secargs(secure),
+      'core_limit': server_core_limit,
+      'async_server_threads': async_server_threads,
+    },
+    'warmup_seconds': warmup_seconds,
+    'benchmark_seconds': BENCHMARK_SECONDS
+  }
+  if use_generic_payload:
+    if server_type != 'ASYNC_GENERIC_SERVER':
+      raise Exception('Use ASYNC_GENERIC_SERVER for generic payload.')
+    scenario['client_config']['payload_config'] = EMPTY_GENERIC_PAYLOAD
+    scenario['server_config']['payload_config'] = EMPTY_GENERIC_PAYLOAD
+  else:
+    # For proto payload, only the client should get the config.
+    scenario['client_config']['payload_config'] = EMPTY_PROTO_PAYLOAD
+
+  if unconstrained_client:
+    if unconstrained_client == 'async':
+      deep = DEEP
+      wide = WIDE
+    elif unconstrained_client == 'sync':
+      deep = SYNC_DEEP
+      wide = SYNC_WIDE
+    else:
+      raise Exception('Illegal value of unconstrained_client option.')
+
+    scenario['num_clients'] = 0  # use as many client as available.
+    scenario['client_config']['outstanding_rpcs_per_channel'] = deep
+    scenario['client_config']['client_channels'] = wide
+    scenario['client_config']['async_client_threads'] = 0
+  else:
+    scenario['client_config']['outstanding_rpcs_per_channel'] = 1
+    scenario['client_config']['client_channels'] = 1
+    scenario['client_config']['async_client_threads'] = 1
+
+  if client_language:
+    # the CLIENT_LANGUAGE field is recognized by run_performance_tests.py
+    scenario['CLIENT_LANGUAGE'] = client_language
+  if server_language:
+    # the SERVER_LANGUAGE field is recognized by run_performance_tests.py
+    scenario['SERVER_LANGUAGE'] = server_language
+  if categories:
+    scenario['CATEGORIES'] = categories
+  return scenario
+
 
 class CXXLanguage:
 
@@ -83,205 +180,61 @@
   def scenarios(self):
     # TODO(ctiller): add 70% load latency test
     for secure in [True, False]:
-      if secure:
-        secstr = 'secure'
-        secargs = SECURE_SECARGS
-      else:
-        secstr = 'insecure'
-        secargs = None
+      secstr = 'secure' if secure else 'insecure'
+      smoketest_categories = [SMOKETEST] if secure else None
 
-      yield {
-          'name': 'cpp_generic_async_streaming_ping_pong_%s'
-                  % secstr,
-          'num_servers': 1,
-          'num_clients': 1,
-          'client_config': {
-            'client_type': 'ASYNC_CLIENT',
-            'security_params': secargs,
-            'outstanding_rpcs_per_channel': 1,
-            'client_channels': 1,
-            'async_client_threads': 1,
-            'rpc_type': 'STREAMING',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_GENERIC_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'ASYNC_GENERIC_SERVER',
-            'security_params': secargs,
-            'core_limit': 1,
-            'async_server_threads': 1,
-            'payload_config': EMPTY_GENERIC_PAYLOAD,
-          },
-          'warmup_seconds': WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS
-      }
-      yield {
-          'name': 'cpp_generic_async_streaming_qps_unconstrained_%s'
-                  % secstr,
-          'num_servers': 1,
-          'num_clients': 0,
-          'client_config': {
-            'client_type': 'ASYNC_CLIENT',
-            'security_params': secargs,
-            'outstanding_rpcs_per_channel': DEEP,
-            'client_channels': WIDE,
-            'async_client_threads': 0,
-            'rpc_type': 'STREAMING',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_GENERIC_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'ASYNC_GENERIC_SERVER',
-            'security_params': secargs,
-            'core_limit': SINGLE_MACHINE_CORES/2,
-            'async_server_threads': 0,
-            'payload_config': EMPTY_GENERIC_PAYLOAD,
-          },
-          'warmup_seconds': WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS
-      }
-      yield {
-          'name': 'cpp_generic_async_streaming_qps_one_server_core_%s'
-                  % secstr,
-          'num_servers': 1,
-          'num_clients': 0,
-          'client_config': {
-            'client_type': 'ASYNC_CLIENT',
-            'security_params': secargs,
-            'outstanding_rpcs_per_channel': DEEP,
-            'client_channels': WIDE,
-            'async_client_threads': 0,
-            'rpc_type': 'STREAMING',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_GENERIC_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'ASYNC_GENERIC_SERVER',
-            'security_params': secargs,
-            'core_limit': 1,
-            'async_server_threads': 1,
-            'payload_config': EMPTY_GENERIC_PAYLOAD,
-          },
-          'warmup_seconds': WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS
-      }
-      yield {
-          'name': 'cpp_protobuf_async_streaming_qps_unconstrained_%s'
-                  % secstr,
-          'num_servers': 1,
-          'num_clients': 0,
-          'client_config': {
-            'client_type': 'ASYNC_CLIENT',
-            'security_params': secargs,
-            'outstanding_rpcs_per_channel': DEEP,
-            'client_channels': WIDE,
-            'async_client_threads': 0,
-            'rpc_type': 'STREAMING',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_PROTO_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'ASYNC_SERVER',
-            'security_params': secargs,
-            'core_limit': SINGLE_MACHINE_CORES/2,
-            'async_server_threads': 0,
-          },
-          'warmup_seconds': WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS
-      }
-      yield {
-          'name': 'cpp_protobuf_async_streaming_ping_pong_%s'
-                  % secstr,
-          'num_servers': 1,
-          'num_clients': 1,
-          'client_config': {
-            'client_type': 'ASYNC_CLIENT',
-            'security_params': secargs,
-            'outstanding_rpcs_per_channel': 1,
-            'client_channels': 1,
-            'async_client_threads': 1,
-            'rpc_type': 'STREAMING',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_PROTO_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'ASYNC_SERVER',
-            'security_params': secargs,
-            'core_limit': 1,
-            'async_server_threads': 1,
-          },
-          'warmup_seconds': WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS
-      }
-      yield {
-          'name': 'cpp_protobuf_sync_unary_ping_pong_%s'
-                  % secstr,
-          'num_servers': 1,
-          'num_clients': 1,
-          'client_config': {
-            'client_type': 'SYNC_CLIENT',
-            'security_params': secargs,
-            'outstanding_rpcs_per_channel': 1,
-            'client_channels': 1,
-            'async_client_threads': 0,
-            'rpc_type': 'UNARY',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_PROTO_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'SYNC_SERVER',
-            'security_params': secargs,
-            'core_limit': 1,
-            'async_server_threads': 0,
-          },
-          'warmup_seconds': WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS
-      }
-      yield {
-          'name': 'cpp_protobuf_async_unary_ping_pong_%s'
-                  % secstr,
-          'num_servers': 1,
-          'num_clients': 1,
-          'client_config': {
-            'client_type': 'ASYNC_CLIENT',
-            'security_params': secargs,
-            'outstanding_rpcs_per_channel': 1,
-            'client_channels': 1,
-            'async_client_threads': 1,
-            'rpc_type': 'UNARY',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_PROTO_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'ASYNC_SERVER',
-            'security_params': secargs,
-            'core_limit': 1,
-            'async_server_threads': 1,
-          },
-          'warmup_seconds': WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS
-      }
+      yield _ping_pong_scenario(
+          'cpp_generic_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+          use_generic_payload=True, server_core_limit=1, async_server_threads=1,
+          secure=secure,
+          categories=smoketest_categories)
+
+      yield _ping_pong_scenario(
+          'cpp_protobuf_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+          server_core_limit=1, async_server_threads=1,
+          secure=secure)
+
+      yield _ping_pong_scenario(
+          'cpp_protobuf_async_unary_ping_pong_%s' % secstr, rpc_type='UNARY',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+          server_core_limit=1, async_server_threads=1,
+          secure=secure,
+          categories=smoketest_categories)
+
+      yield _ping_pong_scenario(
+          'cpp_protobuf_sync_unary_ping_pong_%s' % secstr, rpc_type='UNARY',
+          client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+          server_core_limit=1, async_server_threads=1,
+          secure=secure)
+
+      yield _ping_pong_scenario(
+          'cpp_protobuf_async_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+          unconstrained_client='async',
+          secure=secure,
+          categories=smoketest_categories)
+
+      yield _ping_pong_scenario(
+          'cpp_protobuf_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+          unconstrained_client='async',
+          secure=secure)
+
+      yield _ping_pong_scenario(
+          'cpp_generic_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+          unconstrained_client='async', use_generic_payload=True,
+          secure=secure,
+          categories=smoketest_categories)
+
+      yield _ping_pong_scenario(
+          'cpp_generic_async_streaming_qps_one_server_core_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+          unconstrained_client='async', use_generic_payload=True,
+          server_core_limit=1, async_server_threads=1,
+          secure=secure)
 
   def __str__(self):
     return 'c++'
@@ -299,113 +252,62 @@
     return 100
 
   def scenarios(self):
-    secargs = SECURE_SECARGS
-    yield {
-        'name': 'csharp_generic_async_streaming_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'ASYNC_CLIENT',
-          'security_params': secargs,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'STREAMING',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': EMPTY_GENERIC_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'ASYNC_GENERIC_SERVER',
-          'security_params': secargs,
-          'core_limit': 0,
-          'async_server_threads': 0,
-          'payload_config': EMPTY_GENERIC_PAYLOAD,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS
-    }
-    yield {
-        'name': 'csharp_protobuf_async_unary_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'ASYNC_CLIENT',
-          'security_params': secargs,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'UNARY',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': EMPTY_PROTO_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'ASYNC_SERVER',
-          'security_params': secargs,
-          'core_limit': 0,
-          'async_server_threads': 0,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS
-    }
-    yield {
-        'name': 'csharp_protobuf_sync_to_async_unary_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'SYNC_CLIENT',
-          'security_params': secargs,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'UNARY',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': EMPTY_PROTO_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'ASYNC_SERVER',
-          'security_params': secargs,
-          'core_limit': 0,
-          'async_server_threads': 0,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS
-    }
-    yield {
-        'name': 'csharp_to_cpp_protobuf_sync_unary_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'SYNC_CLIENT',
-          'security_params': secargs,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'UNARY',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': EMPTY_PROTO_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'SYNC_SERVER',
-          'security_params': secargs,
-          'core_limit': 1,
-          'async_server_threads': 1,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS,
-        'SERVER_LANGUAGE': 'c++'  # recognized by run_performance_tests.py
-    }
+    yield _ping_pong_scenario(
+        'csharp_generic_async_streaming_ping_pong', rpc_type='STREAMING',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+        use_generic_payload=True,
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'csharp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER')
+
+    yield _ping_pong_scenario(
+        'csharp_protobuf_async_unary_ping_pong', rpc_type='UNARY',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'csharp_protobuf_sync_to_async_unary_ping_pong', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='ASYNC_SERVER')
+
+    yield _ping_pong_scenario(
+        'csharp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+        unconstrained_client='async',
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'csharp_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+        unconstrained_client='async')
+
+    yield _ping_pong_scenario(
+        'csharp_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        server_language='c++', server_core_limit=1, async_server_threads=1,
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'csharp_to_cpp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+        server_language='c++', server_core_limit=1, async_server_threads=1)
+
+    yield _ping_pong_scenario(
+        'csharp_to_cpp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+        unconstrained_client='async', server_language='c++')
+
+    yield _ping_pong_scenario(
+        'csharp_to_cpp_protobuf_sync_to_async_unary_qps_unconstrained', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='ASYNC_SERVER',
+        unconstrained_client='sync', server_language='c++')
+
+    yield _ping_pong_scenario(
+        'cpp_to_csharp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+        unconstrained_client='async', client_language='c++')
+
 
   def __str__(self):
     return 'csharp'
@@ -424,34 +326,45 @@
     return 200
 
   def scenarios(self):
-    # TODO(jtattermusch): add more scenarios
-    secargs = SECURE_SECARGS
-    yield {
-        'name': 'node_protobuf_unary_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'ASYNC_CLIENT',
-          'security_params': secargs,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'UNARY',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': EMPTY_PROTO_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'ASYNC_SERVER',
-          'security_params': secargs,
-          'core_limit': 0,
-          'async_server_threads': 1,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS
-    }
+    # TODO(jtattermusch): make this scenario work
+    #yield _ping_pong_scenario(
+    #    'node_generic_async_streaming_ping_pong', rpc_type='STREAMING',
+    #    client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+    #    use_generic_payload=True)
+
+    # TODO(jtattermusch): make this scenario work
+    #yield _ping_pong_scenario(
+    #    'node_protobuf_async_streaming_ping_pong', rpc_type='STREAMING',
+    #    client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER')
+
+    yield _ping_pong_scenario(
+        'node_protobuf_unary_ping_pong', rpc_type='UNARY',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY',
+        client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+        unconstrained_client='async',
+        categories=[SMOKETEST])
+
+    # TODO(jtattermusch): make this scenario work
+    #yield _ping_pong_scenario(
+    #    'node_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING',
+    #    client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+    #    unconstrained_client='async')
+
+    # TODO(jtattermusch): make this scenario work
+    #yield _ping_pong_scenario(
+    #    'node_to_cpp_protobuf_async_unary_ping_pong', rpc_type='UNARY',
+    #    client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+    #    server_language='c++', server_core_limit=1, async_server_threads=1)
+
+    # TODO(jtattermusch): make this scenario work
+    #yield _ping_pong_scenario(
+    #    'node_to_cpp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING',
+    #    client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+    #    server_language='c++', server_core_limit=1, async_server_threads=1)
 
   def __str__(self):
     return 'node'
@@ -468,114 +381,47 @@
     return 500
 
   def scenarios(self):
-    yield {
-        'name': 'python_to_cpp_protobuf_streaming_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'ASYNC_CLIENT',
-          'security_params': SECURE_SECARGS,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'STREAMING',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': EMPTY_PROTO_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'SYNC_SERVER',
-          'security_params': SECURE_SECARGS,
-          'core_limit': 0,
-          'async_server_threads': 1,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS,
-        'SERVER_LANGUAGE': 'c++' 
-    }
-    yield {
-        'name': 'python_protobuf_sync_unary_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'SYNC_CLIENT',
-          'security_params': SECURE_SECARGS,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'UNARY',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': EMPTY_PROTO_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'SYNC_SERVER',
-          'security_params': SECURE_SECARGS,
-          'core_limit': 0,
-          'async_server_threads': 1,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS,
-    }
-    yield {
-        'name': 'python_protobuf_async_unary_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'ASYNC_CLIENT',
-          'security_params': SECURE_SECARGS,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-            'rpc_type': 'UNARY',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_PROTO_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'SYNC_SERVER',
-            'security_params': SECURE_SECARGS,
-            'core_limit': 0,
-            'async_server_threads': 1,
-          },
-          'warmup_seconds': WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS,
-    }
-    yield {
-        'name': 'python_to_cpp_single_channel_throughput',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'ASYNC_CLIENT',
-          'security_params': SECURE_SECARGS,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'STREAMING',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': BIG_GENERIC_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'ASYNC_GENERIC_SERVER',
-          'security_params': SECURE_SECARGS,
-          'core_limit': SINGLE_MACHINE_CORES/2,
-          'async_server_threads': 1,
-          'payload_config': BIG_GENERIC_PAYLOAD,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS,
-        'SERVER_LANGUAGE': 'c++'
-    }
-      
+    # TODO(issue #6522): Empty streaming requests does not work for python
+    #yield _ping_pong_scenario(
+    #    'python_generic_async_streaming_ping_pong', rpc_type='STREAMING',
+    #    client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+    #    use_generic_payload=True,
+    #    categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'python_protobuf_async_streaming_ping_pong', rpc_type='STREAMING',
+        client_type='ASYNC_CLIENT', server_type='SYNC_SERVER')
+
+    yield _ping_pong_scenario(
+        'python_protobuf_async_unary_ping_pong', rpc_type='UNARY',
+        client_type='ASYNC_CLIENT', server_type='SYNC_SERVER')
+
+    yield _ping_pong_scenario(
+        'python_protobuf_sync_unary_ping_pong', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'python_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        unconstrained_client='sync')
+
+    yield _ping_pong_scenario(
+        'python_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING',
+        client_type='ASYNC_CLIENT', server_type='SYNC_SERVER',
+        unconstrained_client='async')
+
+    yield _ping_pong_scenario(
+        'python_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        server_language='c++', server_core_limit=1, async_server_threads=1,
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'python_to_cpp_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        server_language='c++', server_core_limit=1, async_server_threads=1)
+
   def __str__(self):
     return 'python'
 
@@ -592,34 +438,35 @@
     return 300
 
   def scenarios(self):
-    # TODO(jtattermusch): add more scenarios
-    secargs = SECURE_SECARGS
-    yield {
-        'name': 'ruby_protobuf_unary_ping_pong',
-        'num_servers': 1,
-        'num_clients': 1,
-        'client_config': {
-          'client_type': 'SYNC_CLIENT',
-          'security_params': secargs,
-          'outstanding_rpcs_per_channel': 1,
-          'client_channels': 1,
-          'async_client_threads': 1,
-          'rpc_type': 'UNARY',
-          'load_params': {
-            'closed_loop': {}
-          },
-          'payload_config': EMPTY_PROTO_PAYLOAD,
-          'histogram_params': HISTOGRAM_PARAMS,
-        },
-        'server_config': {
-          'server_type': 'SYNC_SERVER',
-          'security_params': secargs,
-          'core_limit': 0,
-          'async_server_threads': 1,
-        },
-        'warmup_seconds': WARMUP_SECONDS,
-        'benchmark_seconds': BENCHMARK_SECONDS
-    }
+    yield _ping_pong_scenario(
+        'ruby_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'ruby_protobuf_unary_ping_pong', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        categories=[SMOKETEST])
+
+    yield _ping_pong_scenario(
+        'ruby_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        unconstrained_client='sync')
+
+    yield _ping_pong_scenario(
+        'ruby_protobuf_sync_streaming_qps_unconstrained', rpc_type='STREAMING',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        unconstrained_client='sync')
+
+    yield _ping_pong_scenario(
+        'ruby_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        server_language='c++', server_core_limit=1, async_server_threads=1)
+
+    yield _ping_pong_scenario(
+        'ruby_to_cpp_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING',
+        client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+        server_language='c++', server_core_limit=1, async_server_threads=1)
 
   def __str__(self):
     return 'ruby'
@@ -638,46 +485,137 @@
     return 400
 
   def scenarios(self):
-    # TODO(jtattermusch): add more scenarios
     for secure in [True, False]:
-      if secure:
-        secstr = 'secure'
-        secargs = SECURE_SECARGS
-      else:
-        secstr = 'insecure'
-        secargs = None
+      secstr = 'secure' if secure else 'insecure'
+      smoketest_categories = [SMOKETEST] if secure else None
 
-      yield {
-          'name': 'java_protobuf_unary_ping_pong_%s' % secstr,
-          'num_servers': 1,
-          'num_clients': 1,
-          'client_config': {
-            'client_type': 'SYNC_CLIENT',
-            'security_params': secargs,
-            'outstanding_rpcs_per_channel': 1,
-            'client_channels': 1,
-            'async_client_threads': 1,
-            'rpc_type': 'UNARY',
-            'load_params': {
-              'closed_loop': {}
-            },
-            'payload_config': EMPTY_PROTO_PAYLOAD,
-            'histogram_params': HISTOGRAM_PARAMS,
-          },
-          'server_config': {
-            'server_type': 'SYNC_SERVER',
-            'security_params': secargs,
-            'core_limit': 0,
-            'async_server_threads': 1,
-          },
-          'warmup_seconds': JAVA_WARMUP_SECONDS,
-          'benchmark_seconds': BENCHMARK_SECONDS
-      }
+      yield _ping_pong_scenario(
+          'java_generic_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+          use_generic_payload=True, async_server_threads=1,
+          secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS,
+          categories=smoketest_categories)
+
+      yield _ping_pong_scenario(
+          'java_protobuf_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+          async_server_threads=1,
+          secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS)
+
+      yield _ping_pong_scenario(
+          'java_protobuf_async_unary_ping_pong_%s' % secstr, rpc_type='UNARY',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+          async_server_threads=1,
+          secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS,
+          categories=smoketest_categories)
+
+      yield _ping_pong_scenario(
+          'java_protobuf_unary_ping_pong_%s' % secstr, rpc_type='UNARY',
+          client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+          async_server_threads=1,
+          secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS)
+
+      yield _ping_pong_scenario(
+          'java_protobuf_async_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+          unconstrained_client='async',
+          secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS,
+          categories=smoketest_categories)
+
+      yield _ping_pong_scenario(
+          'java_protobuf_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+          unconstrained_client='async',
+          secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS)
+
+      yield _ping_pong_scenario(
+          'java_generic_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+          unconstrained_client='async', use_generic_payload=True,
+          secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS)
+
+      yield _ping_pong_scenario(
+          'java_generic_async_streaming_qps_one_server_core_%s' % secstr, rpc_type='STREAMING',
+          client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+          unconstrained_client='async', use_generic_payload=True,
+          async_server_threads=1,
+          secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS)
+
+      # TODO(jtattermusch): add scenarios java vs C++ 
 
   def __str__(self):
     return 'java'
 
 
+class GoLanguage:
+
+  def __init__(self):
+    pass
+    self.safename = str(self)
+
+  def worker_cmdline(self):
+    return ['tools/run_tests/performance/run_worker_go.sh']
+
+  def worker_port_offset(self):
+    return 600
+
+  def scenarios(self):
+    for secure in [True, False]:
+      secstr = 'secure' if secure else 'insecure'
+      smoketest_categories = [SMOKETEST] if secure else None
+
+      # ASYNC_GENERIC_SERVER for Go actually uses a sync streaming server,
+      # but that's mostly because of lack of better name of the enum value. 
+      yield _ping_pong_scenario(
+          'go_generic_sync_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING',
+          client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+          use_generic_payload=True, async_server_threads=1,
+          secure=secure,
+          categories=smoketest_categories)
+
+      yield _ping_pong_scenario(
+          'go_protobuf_sync_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING',
+          client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+          async_server_threads=1,
+          secure=secure)
+
+      yield _ping_pong_scenario(
+          'go_protobuf_sync_unary_ping_pong_%s' % secstr, rpc_type='UNARY',
+          client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+          async_server_threads=1,
+          secure=secure,
+          categories=smoketest_categories)
+
+      # unconstrained_client='async' is intended (client uses goroutines)
+      yield _ping_pong_scenario(
+          'go_protobuf_sync_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY',
+          client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+          unconstrained_client='async',
+          secure=secure,
+          categories=smoketest_categories)
+
+      # unconstrained_client='async' is intended (client uses goroutines)
+      yield _ping_pong_scenario(
+          'go_protobuf_sync_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING',
+          client_type='SYNC_CLIENT', server_type='SYNC_SERVER',
+          unconstrained_client='async',
+          secure=secure)
+
+      # unconstrained_client='async' is intended (client uses goroutines)
+      # ASYNC_GENERIC_SERVER for Go actually uses a sync streaming server,
+      # but that's mostly because of lack of better name of the enum value.
+      yield _ping_pong_scenario(
+          'go_generic_sync_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING',
+          client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER',
+          unconstrained_client='async', use_generic_payload=True,
+          secure=secure)
+
+      # TODO(jtattermusch): add scenarios go vs C++ 
+
+  def __str__(self):
+    return 'go'
+
+
 LANGUAGES = {
     'c++' : CXXLanguage(),
     'csharp' : CSharpLanguage(),
@@ -685,4 +623,5 @@
     'ruby' : RubyLanguage(),
     'java' : JavaLanguage(),
     'python' : PythonLanguage(),
+    'go' : GoLanguage(),
 }
diff --git a/tools/run_tests/post_tests_csharp.bat b/tools/run_tests/post_tests_csharp.bat
index 7851b91..0d49a00 100644
--- a/tools/run_tests/post_tests_csharp.bat
+++ b/tools/run_tests/post_tests_csharp.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Runs C# tests for given assembly from command line. The Grpc.sln solution needs to be built before running the tests.
 
 setlocal
diff --git a/tools/run_tests/pre_build_c.bat b/tools/run_tests/pre_build_c.bat
index f0449f3..e4ab693 100644
--- a/tools/run_tests/pre_build_c.bat
+++ b/tools/run_tests/pre_build_c.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Performs nuget restore step for C/C++.
 
 setlocal
diff --git a/tools/run_tests/pre_build_csharp.bat b/tools/run_tests/pre_build_csharp.bat
index 853a8f4..e7131d5 100644
--- a/tools/run_tests/pre_build_csharp.bat
+++ b/tools/run_tests/pre_build_csharp.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Performs nuget restore step for C#.
 
 setlocal
diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py
index 5519666..181d62b 100755
--- a/tools/run_tests/run_performance_tests.py
+++ b/tools/run_tests/run_performance_tests.py
@@ -89,7 +89,7 @@
   jobspec = jobset.JobSpec(
       cmdline=cmdline,
       shortname=shortname,
-      timeout_seconds=30*60)
+      timeout_seconds=2*60*60)
   return QpsWorkerJob(jobspec, language, host_and_port)
 
 
@@ -131,6 +131,36 @@
       verbose_success=True)
 
 
+def create_netperf_jobspec(server_host='localhost', client_host=None,
+                           bq_result_table=None):
+  """Runs netperf benchmark."""
+  cmd = 'NETPERF_SERVER_HOST="%s" ' % server_host
+  if bq_result_table:
+    cmd += 'BQ_RESULT_TABLE="%s" ' % bq_result_table
+  if client_host:
+    # If netperf is running remotely, the env variables populated by Jenkins
+    # won't be available on the client, but we need them for uploading results
+    # to BigQuery.
+    jenkins_job_name = os.getenv('JOB_NAME')
+    if jenkins_job_name:
+      cmd += 'JOB_NAME="%s" ' % jenkins_job_name
+    jenkins_build_number = os.getenv('BUILD_NUMBER')
+    if jenkins_build_number:
+      cmd += 'BUILD_NUMBER="%s" ' % jenkins_build_number
+
+  cmd += 'tools/run_tests/performance/run_netperf.sh'
+  if client_host:
+    user_at_host = '%s@%s' % (_REMOTE_HOST_USERNAME, client_host)
+    cmd = 'ssh %s "cd ~/performance_workspace/grpc/ && "%s' % (user_at_host, pipes.quote(cmd))
+
+  return jobset.JobSpec(
+      cmdline=[cmd],
+      shortname='netperf',
+      timeout_seconds=60,
+      shell=True,
+      verbose_success=True)
+
+
 def archive_repo(languages):
   """Archives local version of repo including submodules."""
   cmdline=['tar', '-cf', '../grpc.tar', '../grpc/']
@@ -244,34 +274,65 @@
 
 
 def create_scenarios(languages, workers_by_lang, remote_host=None, regex='.*',
-                     bq_result_table=None):
+                     category='all', bq_result_table=None,
+                     netperf=False, netperf_hosts=[]):
   """Create jobspecs for scenarios to run."""
   all_workers = [worker
                  for workers in workers_by_lang.values()
                  for worker in workers]
   scenarios = []
+
+  if netperf:
+    if not netperf_hosts:
+      netperf_server='localhost'
+      netperf_client=None
+    elif len(netperf_hosts) == 1:
+      netperf_server=netperf_hosts[0]
+      netperf_client=netperf_hosts[0]
+    else:
+      netperf_server=netperf_hosts[0]
+      netperf_client=netperf_hosts[1]
+    scenarios.append(create_netperf_jobspec(server_host=netperf_server,
+                                            client_host=netperf_client,
+                                            bq_result_table=bq_result_table))
+
   for language in languages:
     for scenario_json in language.scenarios():
       if re.search(args.regex, scenario_json['name']):
-        workers = workers_by_lang[str(language)]
-        # 'SERVER_LANGUAGE' is an indicator for this script to pick
-        # a server in different language. It doesn't belong to the Scenario
-        # schema, so we also need to remove it.
-        custom_server_lang = scenario_json.pop('SERVER_LANGUAGE', None)
-        if custom_server_lang:
-          if not workers_by_lang.get(custom_server_lang, []):
-            print 'Warning: Skipping scenario %s as' % scenario_json['name']
-            print('SERVER_LANGUAGE is set to %s yet the language has '
-                  'not been selected with -l' % custom_server_lang)
-            continue
-          for idx in range(0, scenario_json['num_servers']):
-            # replace first X workers by workers of a different language
-            workers[idx] = workers_by_lang[custom_server_lang][idx]
-        scenario = create_scenario_jobspec(scenario_json,
-                                           workers,
-                                           remote_host=remote_host,
-                                           bq_result_table=bq_result_table)
-        scenarios.append(scenario)
+        if category in scenario_json.get('CATEGORIES', []) or category == 'all':
+          workers = workers_by_lang[str(language)]
+          # 'SERVER_LANGUAGE' is an indicator for this script to pick
+          # a server in different language.
+          custom_server_lang = scenario_json.get('SERVER_LANGUAGE', None)
+          custom_client_lang = scenario_json.get('CLIENT_LANGUAGE', None)
+          scenario_json = scenario_config.remove_nonproto_fields(scenario_json)
+          if custom_server_lang and custom_client_lang:
+            raise Exception('Cannot set both custom CLIENT_LANGUAGE and SERVER_LANGUAGE'
+                            'in the same scenario')
+          if custom_server_lang:
+            if not workers_by_lang.get(custom_server_lang, []):
+              print 'Warning: Skipping scenario %s as' % scenario_json['name']
+              print('SERVER_LANGUAGE is set to %s yet the language has '
+                    'not been selected with -l' % custom_server_lang)
+              continue
+            for idx in range(0, scenario_json['num_servers']):
+              # replace first X workers by workers of a different language
+              workers[idx] = workers_by_lang[custom_server_lang][idx]
+          if custom_client_lang:
+            if not workers_by_lang.get(custom_client_lang, []):
+              print 'Warning: Skipping scenario %s as' % scenario_json['name']
+              print('CLIENT_LANGUAGE is set to %s yet the language has '
+                    'not been selected with -l' % custom_client_lang)
+              continue
+            for idx in range(scenario_json['num_servers'], len(workers)):
+              # replace all client workers by workers of a different language,
+              # leave num_server workers as they are server workers.
+              workers[idx] = workers_by_lang[custom_client_lang][idx]
+          scenario = create_scenario_jobspec(scenario_json,
+                                             workers,
+                                             remote_host=remote_host,
+                                             bq_result_table=bq_result_table)
+          scenarios.append(scenario)
 
   # the very last scenario requests shutting down the workers.
   scenarios.append(create_quit_jobspec(all_workers, remote_host=remote_host))
@@ -298,7 +359,7 @@
 argp.add_argument('-l', '--language',
                   choices=['all'] + sorted(scenario_config.LANGUAGES.keys()),
                   nargs='+',
-                  default=['all'],
+                  required=True,
                   help='Languages to benchmark.')
 argp.add_argument('--remote_driver_host',
                   default=None,
@@ -311,6 +372,15 @@
                   help='Regex to select scenarios to run.')
 argp.add_argument('--bq_result_table', default=None, type=str,
                   help='Bigquery "dataset.table" to upload results to.')
+argp.add_argument('--category',
+                  choices=['smoketest','all'],
+                  default='all',
+                  help='Select a category of tests to run.')
+argp.add_argument('--netperf',
+                  default=False,
+                  action='store_const',
+                  const=True,
+                  help='Run netperf benchmark as one of the scenarios.')
 
 args = argp.parse_args()
 
@@ -354,7 +424,11 @@
                                workers_by_lang=worker_addresses,
                                remote_host=args.remote_driver_host,
                                regex=args.regex,
-                               bq_result_table=args.bq_result_table)
+                               category=args.category,
+                               bq_result_table=args.bq_result_table,
+                               netperf=args.netperf,
+                               netperf_hosts=args.remote_worker_host)
+
   if not scenarios:
     raise Exception('No scenarios to run')
 
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 37291f4..65596de 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -153,52 +153,64 @@
   def test_specs(self):
     out = []
     binaries = get_c_tests(self.args.travis, self.test_lang)
+    POLLING_STRATEGIES = {
+      'windows': ['all'],
+      'mac': ['all'],
+      'posix': ['all'],
+      'linux': ['poll', 'legacy']
+    }
     for target in binaries:
-      if self.config.build_config in target['exclude_configs']:
-        continue
-      if self.platform == 'windows':
-        binary = 'vsprojects/%s%s/%s.exe' % (
-            'x64/' if self.args.arch == 'x64' else '',
-            _MSBUILD_CONFIG[self.config.build_config],
-            target['name'])
-      else:
-        binary = 'bins/%s/%s' % (self.config.build_config, target['name'])
-      if os.path.isfile(binary):
-        if 'gtest' in target and target['gtest']:
-          # here we parse the output of --gtest_list_tests to build up a
-          # complete list of the tests contained in a binary
-          # for each test, we then add a job to run, filtering for just that
-          # test
-          with open(os.devnull, 'w') as fnull:
-            tests = subprocess.check_output([binary, '--gtest_list_tests'],
-                                            stderr=fnull)
-          base = None
-          for line in tests.split('\n'):
-            i = line.find('#')
-            if i >= 0: line = line[:i]
-            if not line: continue
-            if line[0] != ' ':
-              base = line.strip()
-            else:
-              assert base is not None
-              assert line[1] == ' '
-              test = base + line.strip()
-              cmdline = [binary] + ['--gtest_filter=%s' % test]
-              out.append(self.config.job_spec(cmdline, [binary],
-                                              shortname='%s:%s' % (binary, test),
-                                              cpu_cost=target['cpu_cost'],
-                                              environ={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH':
-                                                       _ROOT + '/src/core/lib/tsi/test_creds/ca.pem'}))
+      polling_strategies = (POLLING_STRATEGIES[self.platform]
+                            if target.get('uses_polling', True)
+                            else ['all'])
+      for polling_strategy in polling_strategies:
+        env={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH':
+                 _ROOT + '/src/core/lib/tsi/test_creds/ca.pem',
+             'GRPC_POLL_STRATEGY': polling_strategy}
+        shortname_ext = '' if polling_strategy=='all' else ' polling=%s' % polling_strategy
+        if self.config.build_config in target['exclude_configs']:
+          continue
+        if self.platform == 'windows':
+          binary = 'vsprojects/%s%s/%s.exe' % (
+              'x64/' if self.args.arch == 'x64' else '',
+              _MSBUILD_CONFIG[self.config.build_config],
+              target['name'])
         else:
-          cmdline = [binary] + target['args']
-          out.append(self.config.job_spec(cmdline, [binary],
-                                          shortname=target.get('shortname', ' '.join(cmdline)),
-                                          cpu_cost=target['cpu_cost'],
-                                          flaky=target.get('flaky', False),
-                                          environ={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH':
-                                                   _ROOT + '/src/core/lib/tsi/test_creds/ca.pem'}))
-      elif self.args.regex == '.*' or self.platform == 'windows':
-        print '\nWARNING: binary not found, skipping', binary
+          binary = 'bins/%s/%s' % (self.config.build_config, target['name'])
+        if os.path.isfile(binary):
+          if 'gtest' in target and target['gtest']:
+            # here we parse the output of --gtest_list_tests to build up a
+            # complete list of the tests contained in a binary
+            # for each test, we then add a job to run, filtering for just that
+            # test
+            with open(os.devnull, 'w') as fnull:
+              tests = subprocess.check_output([binary, '--gtest_list_tests'],
+                                              stderr=fnull)
+            base = None
+            for line in tests.split('\n'):
+              i = line.find('#')
+              if i >= 0: line = line[:i]
+              if not line: continue
+              if line[0] != ' ':
+                base = line.strip()
+              else:
+                assert base is not None
+                assert line[1] == ' '
+                test = base + line.strip()
+                cmdline = [binary] + ['--gtest_filter=%s' % test]
+                out.append(self.config.job_spec(cmdline, [binary],
+                                                shortname='%s:%s %s' % (binary, test, shortname_ext),
+                                                cpu_cost=target['cpu_cost'],
+                                                environ=env))
+          else:
+            cmdline = [binary] + target['args']
+            out.append(self.config.job_spec(cmdline, [binary],
+                                            shortname=' '.join(cmdline) + shortname_ext,
+                                            cpu_cost=target['cpu_cost'],
+                                            flaky=target.get('flaky', False),
+                                            environ=env))
+        elif self.args.regex == '.*' or self.platform == 'windows':
+          print '\nWARNING: binary not found, skipping', binary
     return sorted(out)
 
   def make_targets(self):
@@ -371,7 +383,9 @@
     with open('src/python/grpcio/tests/tests.json') as tests_json_file:
       tests_json = json.load(tests_json_file)
     environment = dict(_FORCE_ENVIRON_FOR_WRAPPERS)
-    environment['PYTHONPATH'] = os.path.abspath('src/python/gens')
+    environment['PYTHONPATH'] = '{}:{}'.format(
+      os.path.abspath('src/python/gens'), 
+      os.path.abspath('src/python/grpcio_health_checking'))
     if self.config.build_config != 'gcov':
       return [self.config.job_spec(
           ['tools/run_tests/run_python.sh', self._tox_env],
diff --git a/tools/run_tests/sanity/check_submodules.sh b/tools/run_tests/sanity/check_submodules.sh
index 3349d28..3b8d81b 100755
--- a/tools/run_tests/sanity/check_submodules.sh
+++ b/tools/run_tests/sanity/check_submodules.sh
@@ -45,7 +45,7 @@
  05b155ff59114735ec8cd089f669c4c3d8f59029 third_party/gflags (v2.1.0-45-g05b155f)
  c99458533a9b4c743ed51537e25989ea55944908 third_party/googletest (release-1.7.0)
  f8ac463766281625ad710900479130c7fcb4d63b third_party/nanopb (nanopb-0.3.4-29-gf8ac463)
- d5fb408ddc281ffcadeb08699e65bb694656d0bd third_party/protobuf (v3.0.0-beta-2)
+ a1938b2aa9ca86ce7ce50c27ff9737c1008d2a03 third_party/protobuf (v3.0.0-beta-3-pre1)
  50893291621658f355bc5b4d450a8d06a563053d third_party/zlib (v1.2.8)
 EOF
 
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 3b3a49a..3866ebb 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -2248,8 +2248,8 @@
       "grpc_test_util"
     ], 
     "headers": [
-      "src/proto/grpc/lb/v0/load_balancer.grpc.pb.h", 
-      "src/proto/grpc/lb/v0/load_balancer.pb.h"
+      "src/proto/grpc/lb/v1/load_balancer.grpc.pb.h", 
+      "src/proto/grpc/lb/v1/load_balancer.pb.h"
     ], 
     "language": "c++", 
     "name": "grpclb_api_test", 
@@ -2599,6 +2599,24 @@
     ], 
     "headers": [], 
     "language": "c++", 
+    "name": "server_builder_plugin_test", 
+    "src": [
+      "test/cpp/end2end/server_builder_plugin_test.cc"
+    ], 
+    "third_party": false, 
+    "type": "target"
+  }, 
+  {
+    "deps": [
+      "gpr", 
+      "gpr_test_util", 
+      "grpc", 
+      "grpc++", 
+      "grpc++_test_util", 
+      "grpc_test_util"
+    ], 
+    "headers": [], 
+    "language": "c++", 
     "name": "server_crash_test", 
     "src": [
       "test/cpp/end2end/server_crash_test.cc"
@@ -3397,6 +3415,23 @@
     ], 
     "headers": [], 
     "language": "c", 
+    "name": "large_metadata_bad_client_test", 
+    "src": [
+      "test/core/bad_client/tests/large_metadata.c"
+    ], 
+    "third_party": false, 
+    "type": "target"
+  }, 
+  {
+    "deps": [
+      "bad_client_test", 
+      "gpr", 
+      "gpr_test_util", 
+      "grpc_test_util_unsecure", 
+      "grpc_unsecure"
+    ], 
+    "headers": [], 
+    "language": "c", 
     "name": "server_registered_method_bad_client_test", 
     "src": [
       "test/core/bad_client/tests/server_registered_method.c"
@@ -4140,7 +4175,8 @@
       "grpc_transport_chttp2_client_insecure", 
       "grpc_transport_chttp2_client_secure", 
       "grpc_transport_chttp2_server_insecure", 
-      "grpc_transport_chttp2_server_secure"
+      "grpc_transport_chttp2_server_secure", 
+      "grpc_transport_cronet_client_secure"
     ], 
     "headers": [], 
     "language": "c", 
@@ -5610,6 +5646,7 @@
       "src/core/lib/iomgr/endpoint.h", 
       "src/core/lib/iomgr/endpoint_pair.h", 
       "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", 
+      "src/core/lib/iomgr/ev_poll_posix.h", 
       "src/core/lib/iomgr/ev_posix.h", 
       "src/core/lib/iomgr/exec_ctx.h", 
       "src/core/lib/iomgr/executor.h", 
@@ -5710,6 +5747,8 @@
       "src/core/lib/iomgr/endpoint_pair_windows.c", 
       "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", 
       "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", 
+      "src/core/lib/iomgr/ev_poll_posix.c", 
+      "src/core/lib/iomgr/ev_poll_posix.h", 
       "src/core/lib/iomgr/ev_posix.c", 
       "src/core/lib/iomgr/ev_posix.h", 
       "src/core/lib/iomgr/exec_ctx.c", 
@@ -5933,15 +5972,15 @@
     ], 
     "headers": [
       "src/core/ext/lb_policy/grpclb/load_balancer_api.h", 
-      "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h"
+      "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
     ], 
     "language": "c", 
     "name": "grpc_lb_policy_grpclb", 
     "src": [
       "src/core/ext/lb_policy/grpclb/load_balancer_api.c", 
       "src/core/ext/lb_policy/grpclb/load_balancer_api.h", 
-      "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c", 
-      "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h"
+      "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c", 
+      "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
     ], 
     "third_party": false, 
     "type": "filegroup"
@@ -6014,6 +6053,7 @@
       "tsi"
     ], 
     "headers": [
+      "include/grpc/grpc_cronet.h", 
       "include/grpc/grpc_security.h", 
       "include/grpc/grpc_security_constants.h", 
       "src/core/lib/security/auth_filters.h", 
@@ -6029,6 +6069,7 @@
     "language": "c", 
     "name": "grpc_secure", 
     "src": [
+      "include/grpc/grpc_cronet.h", 
       "include/grpc/grpc_security.h", 
       "include/grpc/grpc_security_constants.h", 
       "src/core/lib/http/httpcli_security_connector.c", 
@@ -6265,6 +6306,24 @@
     "type": "filegroup"
   }, 
   {
+    "deps": [
+      "grpc_base", 
+      "grpc_transport_chttp2"
+    ], 
+    "headers": [
+      "third_party/objective_c/Cronet/cronet_c_for_grpc.h"
+    ], 
+    "language": "c", 
+    "name": "grpc_transport_cronet_client_secure", 
+    "src": [
+      "src/core/ext/transport/cronet/client/secure/cronet_channel_create.c", 
+      "src/core/ext/transport/cronet/transport/cronet_api_dummy.c", 
+      "src/core/ext/transport/cronet/transport/cronet_transport.c"
+    ], 
+    "third_party": false, 
+    "type": "filegroup"
+  }, 
+  {
     "deps": [], 
     "headers": [
       "third_party/nanopb/pb.h", 
@@ -6328,6 +6387,8 @@
       "include/grpc++/impl/rpc_service_method.h", 
       "include/grpc++/impl/serialization_traits.h", 
       "include/grpc++/impl/server_builder_option.h", 
+      "include/grpc++/impl/server_builder_plugin.h", 
+      "include/grpc++/impl/server_initializer.h", 
       "include/grpc++/impl/service_type.h", 
       "include/grpc++/impl/sync.h", 
       "include/grpc++/impl/sync_cxx11.h", 
@@ -6378,6 +6439,8 @@
       "include/grpc++/impl/rpc_service_method.h", 
       "include/grpc++/impl/serialization_traits.h", 
       "include/grpc++/impl/server_builder_option.h", 
+      "include/grpc++/impl/server_builder_plugin.h", 
+      "include/grpc++/impl/server_initializer.h", 
       "include/grpc++/impl/service_type.h", 
       "include/grpc++/impl/sync.h", 
       "include/grpc++/impl/sync_cxx11.h", 
diff --git a/tools/run_tests/stress_test/configs/java.json b/tools/run_tests/stress_test/configs/java.json
index 2ce6c00..b7c6d8b 100644
--- a/tools/run_tests/stress_test/configs/java.json
+++ b/tools/run_tests/stress_test/configs/java.json
@@ -21,6 +21,9 @@
         "metricsArgs": {
           "metrics_server_address": "localhost:8081",
           "total_only": "true"
+        },
+        "env": {
+          "STRESSTEST_CLIENT_OPTS":"-Xmx3g -Xms3g -XX:NewSize=1500m -XX:MaxNewSize=1500m -XX:+UseConcMarkSweepGC"
         }
       }
     },
@@ -44,7 +47,10 @@
         "serverPort": 8080,
         "serverArgs": {
           "port": 8080,
-		  "use_tls": "false"
+          "use_tls": "false"
+        },
+        "env": {
+          "TEST_SERVER_OPTS":"-Xmx3g -Xms3g -XX:NewSize=1500m -XX:MaxNewSize=1500m  -XX:+UseConcMarkSweepGC"
         }
       }
     },
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index cf11544..4f11ceb 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -2453,6 +2453,27 @@
     "ci_platforms": [
       "linux", 
       "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "gtest": true, 
+    "language": "c++", 
+    "name": "server_builder_plugin_test", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ]
+  }, 
+  {
+    "args": [], 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
       "posix"
     ], 
     "cpu_cost": 0.1, 
@@ -2726,6 +2747,27 @@
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
+    "name": "large_metadata_bad_client_test", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ]
+  }, 
+  {
+    "args": [], 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "gtest": false, 
+    "language": "c", 
     "name": "server_registered_method_bad_client_test", 
     "platforms": [
       "linux", 
@@ -21531,7 +21573,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21552,7 +21596,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21573,7 +21619,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21594,7 +21642,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21615,7 +21665,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21636,7 +21688,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21657,7 +21711,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21678,7 +21734,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21699,7 +21757,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21720,7 +21780,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21741,7 +21803,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21762,7 +21826,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21783,7 +21849,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21804,7 +21872,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21825,7 +21895,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21846,7 +21918,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21867,7 +21941,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21888,7 +21964,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21909,7 +21987,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21930,7 +22010,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21951,7 +22033,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21972,7 +22056,9 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -21993,7 +22079,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22014,7 +22102,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22035,7 +22125,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22056,7 +22148,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22077,7 +22171,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22098,7 +22194,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22119,7 +22217,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22140,7 +22240,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22161,7 +22263,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22182,7 +22286,9 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -22942,7 +23048,137 @@
   {
     "args": [
       "--scenario_json", 
-      "'{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 4, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
+      "'{\"name\": \"cpp_protobuf_async_streaming_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_secure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_protobuf_async_unary_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_secure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_protobuf_sync_unary_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_secure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
     ], 
     "boringssl": true, 
     "ci_platforms": [
@@ -22994,110 +23230,6 @@
   {
     "args": [
       "--scenario_json", 
-      "'{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 4, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
-    ], 
-    "boringssl": true, 
-    "ci_platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "cpu_cost": 1000.0, 
-    "defaults": "boringssl", 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c++", 
-    "name": "json_run_localhost", 
-    "platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure"
-  }, 
-  {
-    "args": [
-      "--scenario_json", 
-      "'{\"name\": \"cpp_protobuf_async_streaming_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
-    ], 
-    "boringssl": true, 
-    "ci_platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "cpu_cost": 1000.0, 
-    "defaults": "boringssl", 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c++", 
-    "name": "json_run_localhost", 
-    "platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_secure"
-  }, 
-  {
-    "args": [
-      "--scenario_json", 
-      "'{\"name\": \"cpp_protobuf_sync_unary_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
-    ], 
-    "boringssl": true, 
-    "ci_platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "cpu_cost": 1000.0, 
-    "defaults": "boringssl", 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c++", 
-    "name": "json_run_localhost", 
-    "platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_secure"
-  }, 
-  {
-    "args": [
-      "--scenario_json", 
-      "'{\"name\": \"cpp_protobuf_async_unary_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
-    ], 
-    "boringssl": true, 
-    "ci_platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "cpu_cost": 1000.0, 
-    "defaults": "boringssl", 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c++", 
-    "name": "json_run_localhost", 
-    "platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_secure"
-  }, 
-  {
-    "args": [
-      "--scenario_json", 
       "'{\"name\": \"cpp_generic_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
     ], 
     "boringssl": true, 
@@ -23124,7 +23256,137 @@
   {
     "args": [
       "--scenario_json", 
-      "'{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 4, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
+      "'{\"name\": \"cpp_protobuf_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_insecure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_protobuf_async_unary_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_insecure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_protobuf_sync_unary_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_insecure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1000.0, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure"
+  }, 
+  {
+    "args": [
+      "--scenario_json", 
+      "'{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
     ], 
     "boringssl": true, 
     "ci_platforms": [
@@ -23175,110 +23437,6 @@
   }, 
   {
     "args": [
-      "--scenario_json", 
-      "'{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 4, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'"
-    ], 
-    "boringssl": true, 
-    "ci_platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "cpu_cost": 1000.0, 
-    "defaults": "boringssl", 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c++", 
-    "name": "json_run_localhost", 
-    "platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure"
-  }, 
-  {
-    "args": [
-      "--scenario_json", 
-      "'{\"name\": \"cpp_protobuf_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
-    ], 
-    "boringssl": true, 
-    "ci_platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "cpu_cost": 1000.0, 
-    "defaults": "boringssl", 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c++", 
-    "name": "json_run_localhost", 
-    "platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_insecure"
-  }, 
-  {
-    "args": [
-      "--scenario_json", 
-      "'{\"name\": \"cpp_protobuf_sync_unary_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
-    ], 
-    "boringssl": true, 
-    "ci_platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "cpu_cost": 1000.0, 
-    "defaults": "boringssl", 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c++", 
-    "name": "json_run_localhost", 
-    "platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_insecure"
-  }, 
-  {
-    "args": [
-      "--scenario_json", 
-      "'{\"name\": \"cpp_protobuf_async_unary_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'"
-    ], 
-    "boringssl": true, 
-    "ci_platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "cpu_cost": 1000.0, 
-    "defaults": "boringssl", 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c++", 
-    "name": "json_run_localhost", 
-    "platforms": [
-      "linux", 
-      "mac", 
-      "posix", 
-      "windows"
-    ], 
-    "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_insecure"
-  }, 
-  {
-    "args": [
       "test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin"
     ], 
     "ci_platforms": [
@@ -23291,7 +23449,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23307,7 +23466,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23323,7 +23483,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23339,7 +23500,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23355,7 +23517,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23371,7 +23534,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23387,7 +23551,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23403,7 +23568,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23419,7 +23585,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23435,7 +23602,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23451,7 +23619,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23467,7 +23636,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23483,7 +23653,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23499,7 +23670,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23515,7 +23687,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23531,7 +23704,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23547,7 +23721,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23563,7 +23738,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23579,7 +23755,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23595,7 +23772,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23611,7 +23789,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23627,7 +23806,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23643,7 +23823,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23659,7 +23840,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23675,7 +23857,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23691,7 +23874,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23707,7 +23891,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23723,7 +23908,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23739,7 +23925,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23755,7 +23942,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23771,7 +23959,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23787,7 +23976,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23803,7 +23993,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23819,7 +24010,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23835,7 +24027,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23851,7 +24044,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23867,7 +24061,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23883,7 +24078,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23899,7 +24095,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23915,7 +24112,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23931,7 +24129,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23947,7 +24146,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23963,7 +24163,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23979,7 +24180,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -23995,7 +24197,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24011,7 +24214,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24027,7 +24231,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24043,7 +24248,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24059,7 +24265,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24075,7 +24282,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24091,7 +24299,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24107,7 +24316,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24123,7 +24333,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24139,7 +24350,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24155,7 +24367,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24171,7 +24384,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24187,7 +24401,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24203,7 +24418,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24219,7 +24435,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24235,7 +24452,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24251,7 +24469,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24267,7 +24486,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24283,7 +24503,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24299,7 +24520,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24315,7 +24537,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24331,7 +24554,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24347,7 +24571,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24363,7 +24588,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24379,7 +24605,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24395,7 +24622,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24411,7 +24639,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24427,7 +24656,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24443,7 +24673,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24459,7 +24690,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24475,7 +24707,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24491,7 +24724,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24507,7 +24741,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24523,7 +24758,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24539,7 +24775,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24555,7 +24792,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24571,7 +24809,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24587,7 +24826,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24603,7 +24843,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24619,7 +24860,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24635,7 +24877,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24651,7 +24894,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24667,7 +24911,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24683,7 +24928,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24699,7 +24945,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24715,7 +24962,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24731,7 +24979,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24747,7 +24996,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24763,7 +25013,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24779,7 +25030,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24795,7 +25047,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24811,7 +25064,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24827,7 +25081,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24843,7 +25098,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24859,7 +25115,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24875,7 +25132,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24891,7 +25149,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24907,7 +25166,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24923,7 +25183,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24939,7 +25200,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24955,7 +25217,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24971,7 +25234,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -24987,7 +25251,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25003,7 +25268,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25019,7 +25285,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25035,7 +25302,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25051,7 +25319,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25067,7 +25336,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25083,7 +25353,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25099,7 +25370,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25115,7 +25387,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25131,7 +25404,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25147,7 +25421,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25163,7 +25438,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25179,7 +25455,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25195,7 +25472,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25211,7 +25489,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25227,7 +25506,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25243,7 +25523,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25259,7 +25540,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25275,7 +25557,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25291,7 +25574,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25307,7 +25591,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25323,7 +25608,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25339,7 +25625,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25355,7 +25642,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25371,7 +25659,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25387,7 +25676,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25403,7 +25693,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25419,7 +25710,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25435,7 +25727,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25451,7 +25744,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25467,7 +25761,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25483,7 +25778,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25499,7 +25795,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25515,7 +25812,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25531,7 +25829,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25547,7 +25846,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25563,7 +25863,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25579,7 +25880,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25595,7 +25897,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25611,7 +25914,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25627,7 +25931,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25643,7 +25948,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25659,7 +25965,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25675,7 +25982,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25691,7 +25999,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25707,7 +26016,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25723,7 +26033,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25739,7 +26050,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25755,7 +26067,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25771,7 +26084,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25787,7 +26101,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25803,7 +26118,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25819,7 +26135,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25835,7 +26152,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25851,7 +26169,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25867,7 +26186,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25883,7 +26203,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25899,7 +26220,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25915,7 +26237,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25931,7 +26254,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25947,7 +26271,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25963,7 +26288,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25979,7 +26305,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -25995,7 +26322,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26011,7 +26339,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26027,7 +26356,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26043,7 +26373,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26059,7 +26390,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26075,7 +26407,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26091,7 +26424,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26107,7 +26441,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26123,7 +26458,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26139,7 +26475,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26155,7 +26492,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26171,7 +26509,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26187,7 +26526,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26203,7 +26543,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26219,7 +26560,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26235,7 +26577,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26251,7 +26594,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26267,7 +26611,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26283,7 +26628,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26299,7 +26645,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26315,7 +26662,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26331,7 +26679,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26347,7 +26696,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26363,7 +26713,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26379,7 +26730,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26395,7 +26747,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26411,7 +26764,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26427,7 +26781,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26443,7 +26798,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26459,7 +26815,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26475,7 +26832,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26491,7 +26849,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26507,7 +26866,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26523,7 +26883,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26539,7 +26900,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26555,7 +26917,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26571,7 +26934,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26587,7 +26951,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26603,7 +26968,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26619,7 +26985,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26635,7 +27002,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26651,7 +27019,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26667,7 +27036,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26683,7 +27053,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26699,7 +27070,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26715,7 +27087,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26731,7 +27104,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26747,7 +27121,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26763,7 +27138,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26779,7 +27155,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26795,7 +27172,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26811,7 +27189,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26827,7 +27206,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26843,7 +27223,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26859,7 +27240,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26875,7 +27257,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26891,7 +27274,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26907,7 +27291,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26923,7 +27308,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26939,7 +27325,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26955,7 +27342,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26971,7 +27359,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -26987,7 +27376,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27003,7 +27393,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27019,7 +27410,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27035,7 +27427,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27051,7 +27444,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27067,7 +27461,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27083,7 +27478,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27099,7 +27495,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27115,7 +27512,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27131,7 +27529,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27147,7 +27546,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27163,7 +27563,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27179,7 +27580,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27195,7 +27597,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27211,7 +27614,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27227,7 +27631,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27243,7 +27648,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27259,7 +27665,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27275,7 +27682,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27291,7 +27699,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27307,7 +27716,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27323,7 +27733,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27339,7 +27750,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27355,7 +27767,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27371,7 +27784,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27387,7 +27801,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27403,7 +27818,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27419,7 +27835,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27435,7 +27852,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27451,7 +27869,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27467,7 +27886,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27483,7 +27903,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27499,7 +27920,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27515,7 +27937,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27531,7 +27954,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27547,7 +27971,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27563,7 +27988,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27579,7 +28005,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27595,7 +28022,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27611,7 +28039,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27627,7 +28056,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27643,7 +28073,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27659,7 +28090,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27675,7 +28107,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27691,7 +28124,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27707,7 +28141,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27723,7 +28158,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27739,7 +28175,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27755,7 +28192,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27771,7 +28209,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27787,7 +28226,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27803,7 +28243,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27819,7 +28260,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27835,7 +28277,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27851,7 +28294,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27867,7 +28311,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27883,7 +28328,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27899,7 +28345,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27915,7 +28362,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27931,7 +28379,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27947,7 +28396,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27963,7 +28413,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27979,7 +28430,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -27995,7 +28447,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28011,7 +28464,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28027,7 +28481,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28043,7 +28498,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28059,7 +28515,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28075,7 +28532,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28091,7 +28549,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28107,7 +28566,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28123,7 +28583,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28139,7 +28600,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28155,7 +28617,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28171,7 +28634,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28187,7 +28651,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28203,7 +28668,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28219,7 +28685,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28235,7 +28702,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28251,7 +28719,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28267,7 +28736,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28283,7 +28753,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28299,7 +28770,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28315,7 +28787,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28331,7 +28804,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28347,7 +28821,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28363,7 +28838,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28379,7 +28855,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28395,7 +28872,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28411,7 +28889,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28427,7 +28906,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28443,7 +28923,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28459,7 +28940,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28475,7 +28957,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28491,7 +28974,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28507,7 +28991,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28523,7 +29008,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28539,7 +29025,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28555,7 +29042,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28571,7 +29059,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28587,7 +29076,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28603,7 +29093,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28619,7 +29110,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28635,7 +29127,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28651,7 +29144,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28667,7 +29161,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28683,7 +29178,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28699,7 +29195,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28715,7 +29212,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28731,7 +29229,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28747,7 +29246,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28763,7 +29263,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28779,7 +29280,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28795,7 +29297,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28811,7 +29314,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28827,7 +29331,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28843,7 +29348,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28859,7 +29365,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28875,7 +29382,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28891,7 +29399,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28907,7 +29416,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28923,7 +29433,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28939,7 +29450,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28955,7 +29467,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28971,7 +29484,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -28987,7 +29501,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29003,7 +29518,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29019,7 +29535,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29035,7 +29552,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29051,7 +29569,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29067,7 +29586,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29083,7 +29603,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29099,7 +29620,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29115,7 +29637,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29131,7 +29654,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29147,7 +29671,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29163,7 +29688,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29179,7 +29705,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29195,7 +29722,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29211,7 +29739,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29227,7 +29756,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29243,7 +29773,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29259,7 +29790,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29275,7 +29807,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29291,7 +29824,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29307,7 +29841,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29323,7 +29858,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29339,7 +29875,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29355,7 +29892,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29371,7 +29909,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29387,7 +29926,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29403,7 +29943,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29419,7 +29960,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29435,7 +29977,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29451,7 +29994,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29467,7 +30011,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29483,7 +30028,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29499,7 +30045,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29515,7 +30062,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29531,7 +30079,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29547,7 +30096,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29563,7 +30113,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29579,7 +30130,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29595,7 +30147,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29611,7 +30164,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29627,7 +30181,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29643,7 +30198,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29659,7 +30215,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29675,7 +30232,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29691,7 +30249,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29707,7 +30266,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29723,7 +30283,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29739,7 +30300,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29755,7 +30317,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29771,7 +30334,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29787,7 +30351,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29803,7 +30368,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29819,7 +30385,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29835,7 +30402,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29851,7 +30419,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29867,7 +30436,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29883,7 +30453,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29899,7 +30470,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29915,7 +30487,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29931,7 +30504,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29947,7 +30521,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29963,7 +30538,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29979,7 +30555,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -29995,7 +30572,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30011,7 +30589,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30027,7 +30606,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30043,7 +30623,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30059,7 +30640,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30075,7 +30657,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30091,7 +30674,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30107,7 +30691,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30123,7 +30708,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30139,7 +30725,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30155,7 +30742,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30171,7 +30759,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30187,7 +30776,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30203,7 +30793,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30219,7 +30810,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30235,7 +30827,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30251,7 +30844,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30267,7 +30861,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30283,7 +30878,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30299,7 +30895,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30315,7 +30912,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30331,7 +30929,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30347,7 +30946,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30363,7 +30963,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30379,7 +30980,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30395,7 +30997,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30411,7 +31014,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30427,7 +31031,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30443,7 +31048,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30459,7 +31065,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30475,7 +31082,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30491,7 +31099,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30507,7 +31116,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30523,7 +31133,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30539,7 +31150,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30555,7 +31167,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30571,7 +31184,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30587,7 +31201,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30603,7 +31218,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30619,7 +31235,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30635,7 +31252,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30651,7 +31269,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30667,7 +31286,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30683,7 +31303,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30699,7 +31320,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30715,7 +31337,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30731,7 +31354,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30747,7 +31371,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30763,7 +31388,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30779,7 +31405,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30795,7 +31422,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30811,7 +31439,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30827,7 +31456,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30843,7 +31473,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30859,7 +31490,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30875,7 +31507,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30891,7 +31524,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30907,7 +31541,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30923,7 +31558,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30939,7 +31575,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30955,7 +31592,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30971,7 +31609,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -30987,7 +31626,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31003,7 +31643,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31019,7 +31660,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31035,7 +31677,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31051,7 +31694,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31067,7 +31711,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31083,7 +31728,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31099,7 +31745,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31115,7 +31762,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31131,7 +31779,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31147,7 +31796,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31163,7 +31813,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31179,7 +31830,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31195,7 +31847,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31211,7 +31864,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31227,7 +31881,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31243,7 +31898,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31259,7 +31915,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31275,7 +31932,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31291,7 +31949,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31307,7 +31966,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31323,7 +31983,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31339,7 +32000,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31355,7 +32017,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31371,7 +32034,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31387,7 +32051,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31403,7 +32068,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31419,7 +32085,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31435,7 +32102,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31451,7 +32119,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31467,7 +32136,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31483,7 +32153,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31499,7 +32170,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31515,7 +32187,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31531,7 +32204,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31547,7 +32221,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31563,7 +32238,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31579,7 +32255,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31595,7 +32272,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31611,7 +32289,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31627,7 +32306,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31643,7 +32323,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31659,7 +32340,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31675,7 +32357,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31691,7 +32374,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31707,7 +32391,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31723,7 +32408,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31739,7 +32425,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31755,7 +32442,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31771,7 +32459,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31787,7 +32476,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31803,7 +32493,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31819,7 +32510,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31835,7 +32527,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31851,7 +32544,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31867,7 +32561,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31883,7 +32578,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31899,7 +32595,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31915,7 +32612,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31931,7 +32629,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31947,7 +32646,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31963,7 +32663,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31979,7 +32680,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -31995,7 +32697,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32011,7 +32714,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32027,7 +32731,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32043,7 +32748,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32059,7 +32765,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32075,7 +32782,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32091,7 +32799,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32107,7 +32816,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32123,7 +32833,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32139,7 +32850,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32155,7 +32867,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32171,7 +32884,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32187,7 +32901,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32203,7 +32918,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32219,7 +32935,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32235,7 +32952,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32251,7 +32969,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32267,7 +32986,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32283,7 +33003,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32299,7 +33020,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32315,7 +33037,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32331,7 +33054,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32347,7 +33071,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32363,7 +33088,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32379,7 +33105,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32395,7 +33122,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32411,7 +33139,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32427,7 +33156,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32443,7 +33173,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32459,7 +33190,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32475,7 +33207,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32491,7 +33224,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32507,7 +33241,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32523,7 +33258,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32539,7 +33275,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32555,7 +33292,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32571,7 +33309,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32587,7 +33326,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32603,7 +33343,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32619,7 +33360,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32635,7 +33377,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32651,7 +33394,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32667,7 +33411,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32683,7 +33428,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32699,7 +33445,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32715,7 +33462,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32731,7 +33479,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32747,7 +33496,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32763,7 +33513,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32779,7 +33530,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32795,7 +33547,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32811,7 +33564,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32827,7 +33581,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32843,7 +33598,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32859,7 +33615,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32875,7 +33632,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32891,7 +33649,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32907,7 +33666,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32923,7 +33683,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32939,7 +33700,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32955,7 +33717,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32971,7 +33734,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -32987,7 +33751,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33003,7 +33768,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33019,7 +33785,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33035,7 +33802,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33051,7 +33819,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33067,7 +33836,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33083,7 +33853,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33099,7 +33870,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33115,7 +33887,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33131,7 +33904,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33147,7 +33921,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33163,7 +33938,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33179,7 +33955,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33195,7 +33972,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33211,7 +33989,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33227,7 +34006,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33243,7 +34023,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33259,7 +34040,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33275,7 +34057,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33291,7 +34074,8 @@
     "name": "api_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33307,7 +34091,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33323,7 +34108,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33339,7 +34125,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33355,7 +34142,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33371,7 +34159,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33387,7 +34176,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33403,7 +34193,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33419,7 +34210,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33435,7 +34227,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33451,7 +34244,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33467,7 +34261,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33483,7 +34278,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33499,7 +34295,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33515,7 +34312,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33531,7 +34329,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33547,7 +34346,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33563,7 +34363,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33579,7 +34380,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33595,7 +34397,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33611,7 +34414,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33627,7 +34431,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33643,7 +34448,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33659,7 +34465,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33675,7 +34482,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33691,7 +34499,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33707,7 +34516,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33723,7 +34533,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33739,7 +34550,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33755,7 +34567,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33771,7 +34584,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33787,7 +34601,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33803,7 +34618,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33819,7 +34635,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33835,7 +34652,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33851,7 +34669,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33867,7 +34686,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33883,7 +34703,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33899,7 +34720,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33915,7 +34737,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33931,7 +34754,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33947,7 +34771,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33963,7 +34788,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33979,7 +34805,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -33995,7 +34822,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34011,7 +34839,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34027,7 +34856,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34043,7 +34873,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34059,7 +34890,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34075,7 +34907,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34091,7 +34924,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34107,7 +34941,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34123,7 +34958,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34139,7 +34975,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34155,7 +34992,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34171,7 +35009,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34187,7 +35026,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34203,7 +35043,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34219,7 +35060,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34235,7 +35077,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34251,7 +35094,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34267,7 +35111,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34283,7 +35128,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34299,7 +35145,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34315,7 +35162,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34331,7 +35179,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34347,7 +35196,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34363,7 +35213,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34379,7 +35230,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34395,7 +35247,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34411,7 +35264,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34427,7 +35281,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34443,7 +35298,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34459,7 +35315,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34475,7 +35332,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34491,7 +35349,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34507,7 +35366,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34523,7 +35383,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34539,7 +35400,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34555,7 +35417,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34571,7 +35434,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34587,7 +35451,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34603,7 +35468,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34619,7 +35485,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34635,7 +35502,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34651,7 +35519,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34667,7 +35536,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34683,7 +35553,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34699,7 +35570,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34715,7 +35587,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34731,7 +35604,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34747,7 +35621,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34763,7 +35638,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34779,7 +35655,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34795,7 +35672,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34811,7 +35689,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34827,7 +35706,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34843,7 +35723,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34859,7 +35740,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34875,7 +35757,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34891,7 +35774,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34907,7 +35791,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34923,7 +35808,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34939,7 +35825,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34955,7 +35842,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34971,7 +35859,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -34987,7 +35876,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35003,7 +35893,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35019,7 +35910,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35035,7 +35927,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35051,7 +35944,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35067,7 +35961,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35083,7 +35978,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35099,7 +35995,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35115,7 +36012,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35131,7 +36029,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35147,7 +36046,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35163,7 +36063,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35179,7 +36080,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35195,7 +36097,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35211,7 +36114,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35227,7 +36131,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35243,7 +36148,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35259,7 +36165,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35275,7 +36182,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35291,7 +36199,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35307,7 +36216,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35323,7 +36233,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35339,7 +36250,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35355,7 +36267,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35371,7 +36284,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35387,7 +36301,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35403,7 +36318,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35419,7 +36335,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35435,7 +36352,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35451,7 +36369,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35467,7 +36386,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35483,7 +36403,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35499,7 +36420,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35515,7 +36437,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35531,7 +36454,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35547,7 +36471,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35563,7 +36488,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35579,7 +36505,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35595,7 +36522,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35611,7 +36539,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35627,7 +36556,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35643,7 +36573,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35659,7 +36590,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35675,7 +36607,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35691,7 +36624,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35707,7 +36641,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35723,7 +36658,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35739,7 +36675,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35755,7 +36692,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35771,7 +36709,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35787,7 +36726,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35803,7 +36743,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35819,7 +36760,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35835,7 +36777,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35851,7 +36794,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35867,7 +36811,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35883,7 +36828,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35899,7 +36845,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35915,7 +36862,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35931,7 +36879,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35947,7 +36896,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35963,7 +36913,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35979,7 +36930,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -35995,7 +36947,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36011,7 +36964,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36027,7 +36981,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36043,7 +36998,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36059,7 +37015,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36075,7 +37032,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36091,7 +37049,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36107,7 +37066,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36123,7 +37083,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36139,7 +37100,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36155,7 +37117,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36171,7 +37134,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36187,7 +37151,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36203,7 +37168,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36219,7 +37185,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36235,7 +37202,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36251,7 +37219,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36267,7 +37236,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36283,7 +37253,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36299,7 +37270,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36315,7 +37287,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36331,7 +37304,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36347,7 +37321,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36363,7 +37338,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36379,7 +37355,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36395,7 +37372,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36411,7 +37389,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36427,7 +37406,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36443,7 +37423,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36459,7 +37440,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36475,7 +37457,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36491,7 +37474,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36507,7 +37491,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36523,7 +37508,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36539,7 +37525,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36555,7 +37542,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36571,7 +37559,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36587,7 +37576,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36603,7 +37593,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36619,7 +37610,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36635,7 +37627,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36651,7 +37644,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36667,7 +37661,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36683,7 +37678,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36699,7 +37695,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36715,7 +37712,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36731,7 +37729,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36747,7 +37746,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36763,7 +37763,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36779,7 +37780,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36795,7 +37797,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36811,7 +37814,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36827,7 +37831,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36843,7 +37848,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36859,7 +37865,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36875,7 +37882,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36891,7 +37899,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36907,7 +37916,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36923,7 +37933,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36939,7 +37950,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36955,7 +37967,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36971,7 +37984,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -36987,7 +38001,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37003,7 +38018,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37019,7 +38035,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37035,7 +38052,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37051,7 +38069,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37067,7 +38086,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37083,7 +38103,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37099,7 +38120,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37115,7 +38137,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37131,7 +38154,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37147,7 +38171,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37163,7 +38188,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37179,7 +38205,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37195,7 +38222,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37211,7 +38239,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37227,7 +38256,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37243,7 +38273,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37259,7 +38290,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37275,7 +38307,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37291,7 +38324,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37307,7 +38341,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37323,7 +38358,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37339,7 +38375,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37355,7 +38392,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37371,7 +38409,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37387,7 +38426,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37403,7 +38443,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37419,7 +38460,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37435,7 +38477,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37451,7 +38494,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37467,7 +38511,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37483,7 +38528,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37499,7 +38545,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37515,7 +38562,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37531,7 +38579,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37547,7 +38596,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37563,7 +38613,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37579,7 +38630,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37595,7 +38647,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37611,7 +38664,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37627,7 +38681,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37643,7 +38698,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37659,7 +38715,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37675,7 +38732,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37691,7 +38749,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37707,7 +38766,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37723,7 +38783,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37739,7 +38800,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37755,7 +38817,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37771,7 +38834,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37787,7 +38851,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37803,7 +38868,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37819,7 +38885,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37835,7 +38902,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37851,7 +38919,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37867,7 +38936,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37883,7 +38953,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37899,7 +38970,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37915,7 +38987,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37931,7 +39004,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37947,7 +39021,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37963,7 +39038,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37979,7 +39055,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -37995,7 +39072,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38011,7 +39089,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38027,7 +39106,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38043,7 +39123,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38059,7 +39140,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38075,7 +39157,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38091,7 +39174,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38107,7 +39191,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38123,7 +39208,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38139,7 +39225,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38155,7 +39242,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38171,7 +39259,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38187,7 +39276,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38203,7 +39293,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38219,7 +39310,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38235,7 +39327,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38251,7 +39344,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38267,7 +39361,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38283,7 +39378,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38299,7 +39395,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38315,7 +39412,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38331,7 +39429,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38347,7 +39446,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38363,7 +39463,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38379,7 +39480,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38395,7 +39497,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38411,7 +39514,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38427,7 +39531,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38443,7 +39548,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38459,7 +39565,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38475,7 +39582,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38491,7 +39599,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38507,7 +39616,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38523,7 +39633,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38539,7 +39650,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38555,7 +39667,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38571,7 +39684,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38587,7 +39701,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38603,7 +39718,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38619,7 +39735,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38635,7 +39752,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38651,7 +39769,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38667,7 +39786,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38683,7 +39803,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38699,7 +39820,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38715,7 +39837,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38731,7 +39854,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38747,7 +39871,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38763,7 +39888,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38779,7 +39905,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38795,7 +39922,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38811,7 +39939,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38827,7 +39956,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38843,7 +39973,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38859,7 +39990,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38875,7 +40007,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38891,7 +40024,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38907,7 +40041,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38923,7 +40058,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38939,7 +40075,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38955,7 +40092,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38971,7 +40109,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -38987,7 +40126,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39003,7 +40143,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39019,7 +40160,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39035,7 +40177,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39051,7 +40194,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39067,7 +40211,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39083,7 +40228,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39099,7 +40245,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39115,7 +40262,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39131,7 +40279,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39147,7 +40296,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39163,7 +40313,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39179,7 +40330,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39195,7 +40347,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39211,7 +40364,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39227,7 +40381,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39243,7 +40398,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39259,7 +40415,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39275,7 +40432,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39291,7 +40449,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39307,7 +40466,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39323,7 +40483,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39339,7 +40500,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39355,7 +40517,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39371,7 +40534,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39387,7 +40551,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39403,7 +40568,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39419,7 +40585,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39435,7 +40602,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39451,7 +40619,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39467,7 +40636,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39483,7 +40653,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39499,7 +40670,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39515,7 +40687,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39531,7 +40704,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39547,7 +40721,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39563,7 +40738,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39579,7 +40755,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39595,7 +40772,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39611,7 +40789,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39627,7 +40806,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39643,7 +40823,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39659,7 +40840,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39675,7 +40857,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39691,7 +40874,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39707,7 +40891,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39723,7 +40908,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39739,7 +40925,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39755,7 +40942,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39771,7 +40959,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39787,7 +40976,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39803,7 +40993,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39819,7 +41010,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39835,7 +41027,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39851,7 +41044,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39867,7 +41061,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39883,7 +41078,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39899,7 +41095,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39915,7 +41112,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39931,7 +41129,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39947,7 +41146,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39963,7 +41163,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39979,7 +41180,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -39995,7 +41197,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40011,7 +41214,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40027,7 +41231,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40043,7 +41248,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40059,7 +41265,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40075,7 +41282,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40091,7 +41299,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40107,7 +41316,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40123,7 +41333,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40139,7 +41350,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40155,7 +41367,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40171,7 +41384,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40187,7 +41401,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40203,7 +41418,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40219,7 +41435,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40235,7 +41452,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40251,7 +41469,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40267,7 +41486,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40283,7 +41503,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40299,7 +41520,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40315,7 +41537,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40331,7 +41554,8 @@
     "name": "client_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40347,7 +41571,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40363,7 +41588,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40379,7 +41605,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40395,7 +41622,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40411,7 +41639,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40427,7 +41656,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40443,7 +41673,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40459,7 +41690,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40475,7 +41707,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40491,7 +41724,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40507,7 +41741,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40523,7 +41758,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40539,7 +41775,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40555,7 +41792,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40571,7 +41809,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40587,7 +41826,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40603,7 +41843,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40619,7 +41860,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40635,7 +41877,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40651,7 +41894,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40667,7 +41911,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40683,7 +41928,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40699,7 +41945,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40715,7 +41962,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40731,7 +41979,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40747,7 +41996,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40763,7 +42013,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40779,7 +42030,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40795,7 +42047,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40811,7 +42064,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40827,7 +42081,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40843,7 +42098,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40859,7 +42115,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40875,7 +42132,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40891,7 +42149,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40907,7 +42166,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40923,7 +42183,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40939,7 +42200,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40955,7 +42217,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40971,7 +42234,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -40987,7 +42251,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41003,7 +42268,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41019,7 +42285,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41035,7 +42302,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41051,7 +42319,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41067,7 +42336,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41083,7 +42353,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41099,7 +42370,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41115,7 +42387,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41131,7 +42404,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41147,7 +42421,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41163,7 +42438,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41179,7 +42455,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41195,7 +42472,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41211,7 +42489,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41227,7 +42506,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41243,7 +42523,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41259,7 +42540,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41275,7 +42557,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41291,7 +42574,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41307,7 +42591,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41323,7 +42608,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41339,7 +42625,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41355,7 +42642,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41371,7 +42659,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41387,7 +42676,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41403,7 +42693,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41419,7 +42710,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41435,7 +42727,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41451,7 +42744,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41467,7 +42761,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41483,7 +42778,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41499,7 +42795,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41515,7 +42812,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41531,7 +42829,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41547,7 +42846,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41563,7 +42863,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41579,7 +42880,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41595,7 +42897,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41611,7 +42914,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41627,7 +42931,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41643,7 +42948,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41659,7 +42965,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41675,7 +42982,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41691,7 +42999,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41707,7 +43016,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41723,7 +43033,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41739,7 +43050,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41755,7 +43067,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41771,7 +43084,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41787,7 +43101,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41803,7 +43118,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41819,7 +43135,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41835,7 +43152,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41851,7 +43169,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41867,7 +43186,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41883,7 +43203,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41899,7 +43220,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41915,7 +43237,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41931,7 +43254,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41947,7 +43271,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41963,7 +43288,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41979,7 +43305,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -41995,7 +43322,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42011,7 +43339,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42027,7 +43356,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42043,7 +43373,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42059,7 +43390,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42075,7 +43407,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42091,7 +43424,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42107,7 +43441,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42123,7 +43458,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42139,7 +43475,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42155,7 +43492,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42171,7 +43509,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42187,7 +43526,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42203,7 +43543,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42219,7 +43560,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42235,7 +43577,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42251,7 +43594,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42267,7 +43611,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42283,7 +43628,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42299,7 +43645,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42315,7 +43662,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42331,7 +43679,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42347,7 +43696,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42363,7 +43713,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42379,7 +43730,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42395,7 +43747,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42411,7 +43764,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42427,7 +43781,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42443,7 +43798,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42459,7 +43815,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42475,7 +43832,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42491,7 +43849,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42507,7 +43866,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42523,7 +43883,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42539,7 +43900,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42555,7 +43917,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42571,7 +43934,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42587,7 +43951,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42603,7 +43968,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42619,7 +43985,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42635,7 +44002,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42651,7 +44019,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42667,7 +44036,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42683,7 +44053,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42699,7 +44070,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42715,7 +44087,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42731,7 +44104,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42747,7 +44121,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42763,7 +44138,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42779,7 +44155,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42795,7 +44172,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42811,7 +44189,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42827,7 +44206,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42843,7 +44223,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42859,7 +44240,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42875,7 +44257,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42891,7 +44274,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42907,7 +44291,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42923,7 +44308,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42939,7 +44325,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42955,7 +44342,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42971,7 +44359,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -42987,7 +44376,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43003,7 +44393,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43019,7 +44410,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43035,7 +44427,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43051,7 +44444,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43067,7 +44461,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43083,7 +44478,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43099,7 +44495,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43115,7 +44512,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43131,7 +44529,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43147,7 +44546,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43163,7 +44563,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43179,7 +44580,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43195,7 +44597,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43211,7 +44614,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43227,7 +44631,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43243,7 +44648,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43259,7 +44665,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43275,7 +44682,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43291,7 +44699,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43307,7 +44716,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43323,7 +44733,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43339,7 +44750,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43355,7 +44767,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43371,7 +44784,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43387,7 +44801,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43403,7 +44818,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43419,7 +44835,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43435,7 +44852,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43451,7 +44869,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43467,7 +44886,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43483,7 +44903,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43499,7 +44920,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43515,7 +44937,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43531,7 +44954,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43547,7 +44971,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43563,7 +44988,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43579,7 +45005,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43595,7 +45022,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43611,7 +45039,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43627,7 +45056,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43643,7 +45073,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43659,7 +45090,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43675,7 +45107,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43691,7 +45124,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43707,7 +45141,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43723,7 +45158,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43739,7 +45175,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43755,7 +45192,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43771,7 +45209,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43787,7 +45226,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43803,7 +45243,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43819,7 +45260,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43835,7 +45277,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43851,7 +45294,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43867,7 +45311,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43883,7 +45328,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43899,7 +45345,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43915,7 +45362,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43931,7 +45379,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43947,7 +45396,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43963,7 +45413,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43979,7 +45430,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -43995,7 +45447,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44011,7 +45464,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44027,7 +45481,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44043,7 +45498,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44059,7 +45515,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44075,7 +45532,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44091,7 +45549,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44107,7 +45566,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44123,7 +45583,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44139,7 +45600,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44155,7 +45617,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44171,7 +45634,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44187,7 +45651,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44203,7 +45668,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44219,7 +45685,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44235,7 +45702,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44251,7 +45719,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44267,7 +45736,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44283,7 +45753,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44299,7 +45770,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44315,7 +45787,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44331,7 +45804,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44347,7 +45821,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44363,7 +45838,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44379,7 +45855,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44395,7 +45872,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44411,7 +45889,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44427,7 +45906,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44443,7 +45923,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44459,7 +45940,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44475,7 +45957,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44491,7 +45974,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44507,7 +45991,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44523,7 +46008,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44539,7 +46025,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44555,7 +46042,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44571,7 +46059,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44587,7 +46076,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44603,7 +46093,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44619,7 +46110,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44635,7 +46127,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44651,7 +46144,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44667,7 +46161,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44683,7 +46178,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44699,7 +46195,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44715,7 +46212,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44731,7 +46229,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44747,7 +46246,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44763,7 +46263,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44779,7 +46280,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44795,7 +46297,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44811,7 +46314,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44827,7 +46331,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44843,7 +46348,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44859,7 +46365,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44875,7 +46382,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44891,7 +46399,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44907,7 +46416,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44923,7 +46433,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44939,7 +46450,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44955,7 +46467,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44971,7 +46484,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -44987,7 +46501,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45003,7 +46518,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45019,7 +46535,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45035,7 +46552,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45051,7 +46569,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45067,7 +46586,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45083,7 +46603,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45099,7 +46620,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45115,7 +46637,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45131,7 +46654,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45147,7 +46671,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45163,7 +46688,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45179,7 +46705,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45195,7 +46722,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45211,7 +46739,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45227,7 +46756,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45243,7 +46773,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45259,7 +46790,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45275,7 +46807,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45291,7 +46824,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45307,7 +46841,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45323,7 +46858,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45339,7 +46875,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45355,7 +46892,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45371,7 +46909,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45387,7 +46926,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45403,7 +46943,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45419,7 +46960,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45435,7 +46977,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45451,7 +46994,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45467,7 +47011,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45483,7 +47028,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45499,7 +47045,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45515,7 +47062,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45531,7 +47079,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45547,7 +47096,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45563,7 +47113,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45579,7 +47130,8 @@
     "name": "hpack_parser_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45595,7 +47147,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45611,7 +47164,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45627,7 +47181,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45643,7 +47198,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45659,7 +47215,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45675,7 +47232,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45691,7 +47249,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45707,7 +47266,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45723,7 +47283,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45739,7 +47300,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45755,7 +47317,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45771,7 +47334,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45787,7 +47351,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45803,7 +47368,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45819,7 +47385,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45835,7 +47402,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45851,7 +47419,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45867,7 +47436,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45883,7 +47453,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45899,7 +47470,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45915,7 +47487,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45931,7 +47504,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45947,7 +47521,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45963,7 +47538,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45979,7 +47555,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -45995,7 +47572,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46011,7 +47589,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46027,7 +47606,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46043,7 +47623,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46059,7 +47640,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46075,7 +47657,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46091,7 +47674,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46107,7 +47691,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46123,7 +47708,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46139,7 +47725,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46155,7 +47742,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46171,7 +47759,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46187,7 +47776,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46203,7 +47793,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46219,7 +47810,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46235,7 +47827,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46251,7 +47844,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46267,7 +47861,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46283,7 +47878,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46299,7 +47895,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46315,7 +47912,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46331,7 +47929,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46347,7 +47946,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46363,7 +47963,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46379,7 +47980,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46395,7 +47997,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46411,7 +48014,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46427,7 +48031,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46443,7 +48048,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46459,7 +48065,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46475,7 +48082,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46491,7 +48099,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46507,7 +48116,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46523,7 +48133,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46539,7 +48150,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46555,7 +48167,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46571,7 +48184,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46587,7 +48201,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46603,7 +48218,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46619,7 +48235,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46635,7 +48252,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46651,7 +48269,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46667,7 +48286,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46683,7 +48303,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46699,7 +48320,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46715,7 +48337,8 @@
     "name": "http_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46731,7 +48354,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46747,7 +48371,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46763,7 +48388,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46779,7 +48405,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46795,7 +48422,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46811,7 +48439,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46827,7 +48456,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46843,7 +48473,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46859,7 +48490,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46875,7 +48507,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46891,7 +48524,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46907,7 +48541,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46923,7 +48558,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46939,7 +48575,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46955,7 +48592,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46971,7 +48609,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -46987,7 +48626,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47003,7 +48643,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47019,7 +48660,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47035,7 +48677,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47051,7 +48694,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47067,7 +48711,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47083,7 +48728,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47099,7 +48745,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47115,7 +48762,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47131,7 +48779,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47147,7 +48796,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47163,7 +48813,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47179,7 +48830,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47195,7 +48847,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47211,7 +48864,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47227,7 +48881,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47243,7 +48898,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47259,7 +48915,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47275,7 +48932,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47291,7 +48949,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47307,7 +48966,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47323,7 +48983,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47339,7 +49000,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47355,7 +49017,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47371,7 +49034,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47387,7 +49051,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47403,7 +49068,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47419,7 +49085,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47435,7 +49102,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47451,7 +49119,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47467,7 +49136,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47483,7 +49153,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47499,7 +49170,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47515,7 +49187,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47531,7 +49204,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47547,7 +49221,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47563,7 +49238,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47579,7 +49255,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47595,7 +49272,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47611,7 +49289,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47627,7 +49306,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47643,7 +49323,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47659,7 +49340,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47675,7 +49357,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47691,7 +49374,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47707,7 +49391,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47723,7 +49408,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47739,7 +49425,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47755,7 +49442,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47771,7 +49459,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47787,7 +49476,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47803,7 +49493,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47819,7 +49510,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47835,7 +49527,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47851,7 +49544,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47867,7 +49561,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47883,7 +49578,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47899,7 +49595,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47915,7 +49612,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47931,7 +49629,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47947,7 +49646,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47963,7 +49663,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47979,7 +49680,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -47995,7 +49697,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48011,7 +49714,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48027,7 +49731,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48043,7 +49748,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48059,7 +49765,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48075,7 +49782,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48091,7 +49799,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48107,7 +49816,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48123,7 +49833,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48139,7 +49850,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48155,7 +49867,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48171,7 +49884,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48187,7 +49901,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48203,7 +49918,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48219,7 +49935,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48235,7 +49952,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48251,7 +49969,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48267,7 +49986,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48283,7 +50003,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48299,7 +50020,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48315,7 +50037,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48331,7 +50054,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48347,7 +50071,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48363,7 +50088,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48379,7 +50105,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48395,7 +50122,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48411,7 +50139,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48427,7 +50156,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48443,7 +50173,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48459,7 +50190,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48475,7 +50207,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48491,7 +50224,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48507,7 +50241,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48523,7 +50258,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48539,7 +50275,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48555,7 +50292,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48571,7 +50309,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48587,7 +50326,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48603,7 +50343,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48619,7 +50360,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48635,7 +50377,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48651,7 +50394,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48667,7 +50411,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48683,7 +50428,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48699,7 +50445,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48715,7 +50462,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48731,7 +50479,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48747,7 +50496,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48763,7 +50513,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48779,7 +50530,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48795,7 +50547,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48811,7 +50564,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48827,7 +50581,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48843,7 +50598,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48859,7 +50615,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48875,7 +50632,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48891,7 +50649,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48907,7 +50666,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48923,7 +50683,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48939,7 +50700,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48955,7 +50717,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48971,7 +50734,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -48987,7 +50751,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49003,7 +50768,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49019,7 +50785,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49035,7 +50802,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49051,7 +50819,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49067,7 +50836,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49083,7 +50853,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49099,7 +50870,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49115,7 +50887,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49131,7 +50904,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49147,7 +50921,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49163,7 +50938,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49179,7 +50955,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49195,7 +50972,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49211,7 +50989,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49227,7 +51006,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49243,7 +51023,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49259,7 +51040,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49275,7 +51057,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49291,7 +51074,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49307,7 +51091,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49323,7 +51108,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49339,7 +51125,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49355,7 +51142,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49371,7 +51159,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49387,7 +51176,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49403,7 +51193,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49419,7 +51210,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49435,7 +51227,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49451,7 +51244,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49467,7 +51261,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49483,7 +51278,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49499,7 +51295,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49515,7 +51312,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49531,7 +51329,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49547,7 +51346,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49563,7 +51363,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49579,7 +51380,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49595,7 +51397,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49611,7 +51414,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49627,7 +51431,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49643,7 +51448,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49659,7 +51465,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49675,7 +51482,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49691,7 +51499,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49707,7 +51516,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49723,7 +51533,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49739,7 +51550,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49755,7 +51567,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49771,7 +51584,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49787,7 +51601,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49803,7 +51618,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49819,7 +51635,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49835,7 +51652,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49851,7 +51669,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49867,7 +51686,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49883,7 +51703,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49899,7 +51720,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49915,7 +51737,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49931,7 +51754,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49947,7 +51771,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49963,7 +51788,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49979,7 +51805,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -49995,7 +51822,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50011,7 +51839,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50027,7 +51856,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50043,7 +51873,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50059,7 +51890,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50075,7 +51907,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50091,7 +51924,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50107,7 +51941,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50123,7 +51958,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50139,7 +51975,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50155,7 +51992,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50171,7 +52009,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50187,7 +52026,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50203,7 +52043,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50219,7 +52060,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50235,7 +52077,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50251,7 +52094,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50267,7 +52111,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50283,7 +52128,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50299,7 +52145,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50315,7 +52162,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50331,7 +52179,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50347,7 +52196,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50363,7 +52213,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50379,7 +52230,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50395,7 +52247,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50411,7 +52264,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50427,7 +52281,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50443,7 +52298,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50459,7 +52315,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50475,7 +52332,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50491,7 +52349,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50507,7 +52366,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50523,7 +52383,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50539,7 +52400,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50555,7 +52417,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50571,7 +52434,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50587,7 +52451,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50603,7 +52468,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50619,7 +52485,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50635,7 +52502,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50651,7 +52519,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50667,7 +52536,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50683,7 +52553,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50699,7 +52570,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50715,7 +52587,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50731,7 +52604,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50747,7 +52621,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50763,7 +52638,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50779,7 +52655,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50795,7 +52672,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50811,7 +52689,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50827,7 +52706,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50843,7 +52723,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50859,7 +52740,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50875,7 +52757,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50891,7 +52774,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50907,7 +52791,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50923,7 +52808,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50939,7 +52825,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50955,7 +52842,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50971,7 +52859,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -50987,7 +52876,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51003,7 +52893,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51019,7 +52910,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51035,7 +52927,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51051,7 +52944,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51067,7 +52961,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51083,7 +52978,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51099,7 +52995,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51115,7 +53012,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51131,7 +53029,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51147,7 +53046,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51163,7 +53063,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51179,7 +53080,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51195,7 +53097,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51211,7 +53114,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51227,7 +53131,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51243,7 +53148,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51259,7 +53165,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51275,7 +53182,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51291,7 +53199,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51307,7 +53216,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51323,7 +53233,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51339,7 +53250,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51355,7 +53267,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51371,7 +53284,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51387,7 +53301,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51403,7 +53318,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51419,7 +53335,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51435,7 +53352,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51451,7 +53369,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51467,7 +53386,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51483,7 +53403,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51499,7 +53420,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51515,7 +53437,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51531,7 +53454,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51547,7 +53471,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51563,7 +53488,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51579,7 +53505,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51595,7 +53522,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51611,7 +53539,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51627,7 +53556,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51643,7 +53573,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51659,7 +53590,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51675,7 +53607,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51691,7 +53624,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51707,7 +53641,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51723,7 +53658,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51739,7 +53675,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51755,7 +53692,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51771,7 +53709,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51787,7 +53726,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51803,7 +53743,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51819,7 +53760,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51835,7 +53777,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51851,7 +53794,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51867,7 +53811,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51883,7 +53828,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51899,7 +53845,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51915,7 +53862,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51931,7 +53879,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51947,7 +53896,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51963,7 +53913,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51979,7 +53930,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -51995,7 +53947,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52011,7 +53964,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52027,7 +53981,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52043,7 +53998,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52059,7 +54015,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52075,7 +54032,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52091,7 +54049,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52107,7 +54066,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52123,7 +54083,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52139,7 +54100,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52155,7 +54117,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52171,7 +54134,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52187,7 +54151,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52203,7 +54168,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52219,7 +54185,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52235,7 +54202,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52251,7 +54219,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52267,7 +54236,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52283,7 +54253,8 @@
     "name": "json_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52299,7 +54270,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52315,7 +54287,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52331,7 +54304,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52347,7 +54321,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52363,7 +54338,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52379,7 +54355,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52395,7 +54372,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52411,7 +54389,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52427,7 +54406,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52443,7 +54423,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52459,7 +54440,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52475,7 +54457,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52491,7 +54474,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52507,7 +54491,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52523,7 +54508,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52539,7 +54525,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52555,7 +54542,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52571,7 +54559,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52587,7 +54576,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52603,7 +54593,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52619,7 +54610,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52635,7 +54627,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52651,7 +54644,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52667,7 +54661,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52683,7 +54678,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52699,7 +54695,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52715,7 +54712,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52731,7 +54729,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52747,7 +54746,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52763,7 +54763,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52779,7 +54780,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52795,7 +54797,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52811,7 +54814,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52827,7 +54831,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52843,7 +54848,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52859,7 +54865,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52875,7 +54882,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52891,7 +54899,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52907,7 +54916,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52923,7 +54933,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52939,7 +54950,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52955,7 +54967,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52971,7 +54984,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -52987,7 +55001,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53003,7 +55018,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53019,7 +55035,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53035,7 +55052,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53051,7 +55069,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53067,7 +55086,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53083,7 +55103,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53099,7 +55120,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53115,7 +55137,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53131,7 +55154,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53147,7 +55171,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53163,7 +55188,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53179,7 +55205,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53195,7 +55222,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53211,7 +55239,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53227,7 +55256,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53243,7 +55273,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53259,7 +55290,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53275,7 +55307,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53291,7 +55324,8 @@
     "name": "nanopb_fuzzer_response_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53307,7 +55341,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53323,7 +55358,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53339,7 +55375,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53355,7 +55392,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53371,7 +55409,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53387,7 +55426,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53403,7 +55443,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53419,7 +55460,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53435,7 +55477,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53451,7 +55494,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53467,7 +55511,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53483,7 +55528,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53499,7 +55545,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53515,7 +55562,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53531,7 +55579,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53547,7 +55596,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53563,7 +55613,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53579,7 +55630,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53595,7 +55647,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53611,7 +55664,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53627,7 +55681,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53643,7 +55698,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53659,7 +55715,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53675,7 +55732,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53691,7 +55749,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53707,7 +55766,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53723,7 +55783,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53739,7 +55800,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53755,7 +55817,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53771,7 +55834,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53787,7 +55851,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53803,7 +55868,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53819,7 +55885,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53835,7 +55902,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53851,7 +55919,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53867,7 +55936,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53883,7 +55953,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53899,7 +55970,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53915,7 +55987,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53931,7 +56004,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53947,7 +56021,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53963,7 +56038,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53979,7 +56055,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -53995,7 +56072,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54011,7 +56089,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54027,7 +56106,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54043,7 +56123,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54059,7 +56140,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54075,7 +56157,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54091,7 +56174,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54107,7 +56191,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54123,7 +56208,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54139,7 +56225,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54155,7 +56242,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54171,7 +56259,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54187,7 +56276,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54203,7 +56293,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54219,7 +56310,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54235,7 +56327,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54251,7 +56344,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54267,7 +56361,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54283,7 +56378,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54299,7 +56395,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54315,7 +56412,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54331,7 +56429,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54347,7 +56446,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54363,7 +56463,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54379,7 +56480,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54395,7 +56497,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54411,7 +56514,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54427,7 +56531,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54443,7 +56548,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54459,7 +56565,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54475,7 +56582,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54491,7 +56599,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54507,7 +56616,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54523,7 +56633,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54539,7 +56650,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54555,7 +56667,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54571,7 +56684,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54587,7 +56701,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54603,7 +56718,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54619,7 +56735,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54635,7 +56752,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54651,7 +56769,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54667,7 +56786,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54683,7 +56803,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54699,7 +56820,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54715,7 +56837,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54731,7 +56854,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54747,7 +56871,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54763,7 +56888,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54779,7 +56905,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54795,7 +56922,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54811,7 +56939,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54827,7 +56956,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54843,7 +56973,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54859,7 +56990,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54875,7 +57007,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54891,7 +57024,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54907,7 +57041,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54923,7 +57058,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54939,7 +57075,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54955,7 +57092,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54971,7 +57109,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -54987,7 +57126,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55003,7 +57143,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55019,7 +57160,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55035,7 +57177,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55051,7 +57194,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55067,7 +57211,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55083,7 +57228,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55099,7 +57245,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55115,7 +57262,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55131,7 +57279,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55147,7 +57296,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55163,7 +57313,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55179,7 +57330,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55195,7 +57347,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55211,7 +57364,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55227,7 +57381,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55243,7 +57398,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55259,7 +57415,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55275,7 +57432,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55291,7 +57449,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55307,7 +57466,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55323,7 +57483,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55339,7 +57500,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55355,7 +57517,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55371,7 +57534,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55387,7 +57551,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55403,7 +57568,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55419,7 +57585,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55435,7 +57602,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55451,7 +57619,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55467,7 +57636,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55483,7 +57653,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55499,7 +57670,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55515,7 +57687,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55531,7 +57704,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55547,7 +57721,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55563,7 +57738,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55579,7 +57755,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55595,7 +57772,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55611,7 +57789,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55627,7 +57806,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55643,7 +57823,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55659,7 +57840,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55675,7 +57857,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55691,7 +57874,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55707,7 +57891,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55723,7 +57908,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55739,7 +57925,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55755,7 +57942,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55771,7 +57959,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55787,7 +57976,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55803,7 +57993,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55819,7 +58010,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55835,7 +58027,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55851,7 +58044,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55867,7 +58061,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55883,7 +58078,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55899,7 +58095,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55915,7 +58112,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55931,7 +58129,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55947,7 +58146,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55963,7 +58163,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55979,7 +58180,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -55995,7 +58197,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56011,7 +58214,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56027,7 +58231,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56043,7 +58248,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56059,7 +58265,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56075,7 +58282,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56091,7 +58299,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56107,7 +58316,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56123,7 +58333,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56139,7 +58350,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56155,7 +58367,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56171,7 +58384,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56187,7 +58401,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56203,7 +58418,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56219,7 +58435,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56235,7 +58452,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56251,7 +58469,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56267,7 +58486,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56283,7 +58503,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56299,7 +58520,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56315,7 +58537,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56331,7 +58554,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56347,7 +58571,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56363,7 +58588,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56379,7 +58605,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56395,7 +58622,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56411,7 +58639,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56427,7 +58656,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56443,7 +58673,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56459,7 +58690,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56475,7 +58707,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56491,7 +58724,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56507,7 +58741,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56523,7 +58758,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56539,7 +58775,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56555,7 +58792,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56571,7 +58809,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56587,7 +58826,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56603,7 +58843,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56619,7 +58860,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56635,7 +58877,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56651,7 +58894,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56667,7 +58911,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56683,7 +58928,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56699,7 +58945,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56715,7 +58962,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56731,7 +58979,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56747,7 +58996,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56763,7 +59013,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56779,7 +59030,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56795,7 +59047,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56811,7 +59064,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56827,7 +59081,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56843,7 +59098,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56859,7 +59115,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56875,7 +59132,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56891,7 +59149,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56907,7 +59166,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56923,7 +59183,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56939,7 +59200,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56955,7 +59217,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56971,7 +59234,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -56987,7 +59251,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57003,7 +59268,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57019,7 +59285,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57035,7 +59302,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57051,7 +59319,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57067,7 +59336,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57083,7 +59353,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57099,7 +59370,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57115,7 +59387,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57131,7 +59404,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57147,7 +59421,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57163,7 +59438,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57179,7 +59455,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57195,7 +59472,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57211,7 +59489,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57227,7 +59506,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57243,7 +59523,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57259,7 +59540,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57275,7 +59557,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57291,7 +59574,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57307,7 +59591,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57323,7 +59608,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57339,7 +59625,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57355,7 +59642,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57371,7 +59659,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57387,7 +59676,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57403,7 +59693,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57419,7 +59710,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57435,7 +59727,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57451,7 +59744,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57467,7 +59761,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57483,7 +59778,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57499,7 +59795,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57515,7 +59812,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57531,7 +59829,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57547,7 +59846,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57563,7 +59863,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57579,7 +59880,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57595,7 +59897,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57611,7 +59914,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57627,7 +59931,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57643,7 +59948,8 @@
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57659,7 +59965,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57675,7 +59982,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57691,7 +59999,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57707,7 +60016,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57723,7 +60033,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57739,7 +60050,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57755,7 +60067,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57771,7 +60084,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57787,7 +60101,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57803,7 +60118,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57819,7 +60135,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57835,7 +60152,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57851,7 +60169,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57867,7 +60186,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57883,7 +60203,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57899,7 +60220,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57915,7 +60237,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57931,7 +60254,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57947,7 +60271,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57963,7 +60288,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57979,7 +60305,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -57995,7 +60322,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58011,7 +60339,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58027,7 +60356,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58043,7 +60373,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58059,7 +60390,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58075,7 +60407,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58091,7 +60424,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58107,7 +60441,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58123,7 +60458,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58139,7 +60475,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58155,7 +60492,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58171,7 +60509,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58187,7 +60526,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58203,7 +60543,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58219,7 +60560,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58235,7 +60577,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58251,7 +60594,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58267,7 +60611,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58283,7 +60628,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58299,7 +60645,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58315,7 +60662,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58331,7 +60679,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58347,7 +60696,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58363,7 +60713,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58379,7 +60730,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58395,7 +60747,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58411,7 +60764,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58427,7 +60781,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58443,7 +60798,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58459,7 +60815,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58475,7 +60832,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58491,7 +60849,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58507,7 +60866,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58523,7 +60883,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58539,7 +60900,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58555,7 +60917,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58571,7 +60934,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58587,7 +60951,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58603,7 +60968,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58619,7 +60985,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58635,7 +61002,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58651,7 +61019,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58667,7 +61036,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58683,7 +61053,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58699,7 +61070,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58715,7 +61087,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58731,7 +61104,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58747,7 +61121,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58763,7 +61138,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58779,7 +61155,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58795,7 +61172,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58811,7 +61189,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58827,7 +61206,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58843,7 +61223,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58859,7 +61240,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58875,7 +61257,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58891,7 +61274,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58907,7 +61291,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58923,7 +61308,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58939,7 +61325,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58955,7 +61342,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58971,7 +61359,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -58987,7 +61376,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59003,7 +61393,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59019,7 +61410,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59035,7 +61427,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59051,7 +61444,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59067,7 +61461,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59083,7 +61478,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59099,7 +61495,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59115,7 +61512,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59131,7 +61529,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59147,7 +61546,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59163,7 +61563,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59179,7 +61580,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59195,7 +61597,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59211,7 +61614,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59227,7 +61631,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59243,7 +61648,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59259,7 +61665,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59275,7 +61682,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59291,7 +61699,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59307,7 +61716,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59323,7 +61733,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59339,7 +61750,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59355,7 +61767,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59371,7 +61784,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59387,7 +61801,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59403,7 +61818,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59419,7 +61835,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59435,7 +61852,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59451,7 +61869,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59467,7 +61886,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59483,7 +61903,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59499,7 +61920,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59515,7 +61937,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59531,7 +61954,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59547,7 +61971,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59563,7 +61988,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59579,7 +62005,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59595,7 +62022,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59611,7 +62039,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59627,7 +62056,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59643,7 +62073,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59659,7 +62090,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59675,7 +62107,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59691,7 +62124,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59707,7 +62141,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59723,7 +62158,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59739,7 +62175,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59755,7 +62192,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59771,7 +62209,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59787,7 +62226,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59803,7 +62243,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59819,7 +62260,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59835,7 +62277,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59851,7 +62294,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59867,7 +62311,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59883,7 +62328,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59899,7 +62345,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59915,7 +62362,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59931,7 +62379,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59947,7 +62396,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59963,7 +62413,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59979,7 +62430,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -59995,7 +62447,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60011,7 +62464,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60027,7 +62481,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60043,7 +62498,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60059,7 +62515,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60075,7 +62532,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60091,7 +62549,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60107,7 +62566,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60123,7 +62583,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60139,7 +62600,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60155,7 +62617,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60171,7 +62634,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60187,7 +62651,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60203,7 +62668,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60219,7 +62685,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60235,7 +62702,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60251,7 +62719,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60267,7 +62736,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60283,7 +62753,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60299,7 +62770,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60315,7 +62787,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60331,7 +62804,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60347,7 +62821,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60363,7 +62838,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60379,7 +62855,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60395,7 +62872,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60411,7 +62889,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60427,7 +62906,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60443,7 +62923,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60459,7 +62940,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60475,7 +62957,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60491,7 +62974,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60507,7 +62991,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60523,7 +63008,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60539,7 +63025,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60555,7 +63042,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60571,7 +63059,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60587,7 +63076,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60603,7 +63093,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60619,7 +63110,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60635,7 +63127,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60651,7 +63144,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60667,7 +63161,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60683,7 +63178,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60699,7 +63195,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60715,7 +63212,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60731,7 +63229,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60747,7 +63246,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60763,7 +63263,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60779,7 +63280,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60795,7 +63297,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60811,7 +63314,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60827,7 +63331,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60843,7 +63348,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60859,7 +63365,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60875,7 +63382,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60891,7 +63399,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60907,7 +63416,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60923,7 +63433,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60939,7 +63450,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60955,7 +63467,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60971,7 +63484,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -60987,7 +63501,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61003,7 +63518,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61019,7 +63535,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61035,7 +63552,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61051,7 +63569,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61067,7 +63586,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61083,7 +63603,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61099,7 +63620,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61115,7 +63637,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61131,7 +63654,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61147,7 +63671,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61163,7 +63688,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61179,7 +63705,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61195,7 +63722,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61211,7 +63739,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61227,7 +63756,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61243,7 +63773,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61259,7 +63790,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61275,7 +63807,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61291,7 +63824,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61307,7 +63841,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61323,7 +63858,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61339,7 +63875,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61355,7 +63892,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61371,7 +63909,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61387,7 +63926,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61403,7 +63943,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61419,7 +63960,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61435,7 +63977,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61451,7 +63994,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61467,7 +64011,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61483,7 +64028,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61499,7 +64045,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61515,7 +64062,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61531,7 +64079,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61547,7 +64096,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61563,7 +64113,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61579,7 +64130,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61595,7 +64147,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61611,7 +64164,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61627,7 +64181,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61643,7 +64198,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61659,7 +64215,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61675,7 +64232,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61691,7 +64249,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61707,7 +64266,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61723,7 +64283,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61739,7 +64300,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61755,7 +64317,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61771,7 +64334,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61787,7 +64351,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61803,7 +64368,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61819,7 +64385,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61835,7 +64402,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61851,7 +64419,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61867,7 +64436,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61883,7 +64453,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61899,7 +64470,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61915,7 +64487,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61931,7 +64504,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61947,7 +64521,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61963,7 +64538,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61979,7 +64555,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -61995,7 +64572,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62011,7 +64589,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62027,7 +64606,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62043,7 +64623,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62059,7 +64640,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62075,7 +64657,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62091,7 +64674,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62107,7 +64691,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62123,7 +64708,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62139,7 +64725,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62155,7 +64742,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62171,7 +64759,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62187,7 +64776,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62203,7 +64793,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62219,7 +64810,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62235,7 +64827,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62251,7 +64844,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62267,7 +64861,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62283,7 +64878,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62299,7 +64895,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62315,7 +64912,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62331,7 +64929,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62347,7 +64946,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62363,7 +64963,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62379,7 +64980,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62395,7 +64997,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62411,7 +65014,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62427,7 +65031,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62443,7 +65048,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62459,7 +65065,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62475,7 +65082,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62491,7 +65099,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62507,7 +65116,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62523,7 +65133,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62539,7 +65150,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62555,7 +65167,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62571,7 +65184,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62587,7 +65201,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62603,7 +65218,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62619,7 +65235,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62635,7 +65252,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62651,7 +65269,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62667,7 +65286,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62683,7 +65303,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62699,7 +65320,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62715,7 +65337,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62731,7 +65354,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62747,7 +65371,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62763,7 +65388,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62779,7 +65405,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62795,7 +65422,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62811,7 +65439,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62827,7 +65456,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62843,7 +65473,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62859,7 +65490,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62875,7 +65507,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62891,7 +65524,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62907,7 +65541,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62923,7 +65558,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62939,7 +65575,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62955,7 +65592,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62971,7 +65609,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -62987,7 +65626,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63003,7 +65643,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63019,7 +65660,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63035,7 +65677,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63051,7 +65694,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63067,7 +65711,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63083,7 +65728,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63099,7 +65745,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63115,7 +65762,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63131,7 +65779,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63147,7 +65796,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63163,7 +65813,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63179,7 +65830,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63195,7 +65847,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63211,7 +65864,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63227,7 +65881,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63243,7 +65898,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63259,7 +65915,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63275,7 +65932,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63291,7 +65949,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63307,7 +65966,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63323,7 +65983,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63339,7 +66000,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63355,7 +66017,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63371,7 +66034,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63387,7 +66051,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63403,7 +66068,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63419,7 +66085,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63435,7 +66102,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63451,7 +66119,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63467,7 +66136,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63483,7 +66153,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63499,7 +66170,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63515,7 +66187,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63531,7 +66204,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63547,7 +66221,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63563,7 +66238,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63579,7 +66255,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63595,7 +66272,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63611,7 +66289,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63627,7 +66306,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63643,7 +66323,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63659,7 +66340,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63675,7 +66357,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63691,7 +66374,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63707,7 +66391,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63723,7 +66408,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63739,7 +66425,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63755,7 +66442,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63771,7 +66459,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63787,7 +66476,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63803,7 +66493,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63819,7 +66510,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63835,7 +66527,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63851,7 +66544,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63867,7 +66561,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63883,7 +66578,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63899,7 +66595,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63915,7 +66612,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63931,7 +66629,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63947,7 +66646,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63963,7 +66663,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63979,7 +66680,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -63995,7 +66697,8 @@
     "name": "server_fuzzer_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64011,7 +66714,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64027,7 +66731,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64043,7 +66748,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64059,7 +66765,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64075,7 +66782,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64091,7 +66799,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64107,7 +66816,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64123,7 +66833,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64139,7 +66850,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64155,7 +66867,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64171,7 +66884,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64187,7 +66901,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64203,7 +66918,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64219,7 +66935,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64235,7 +66952,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64251,7 +66969,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64267,7 +66986,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64283,7 +67003,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64299,7 +67020,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64315,7 +67037,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64331,7 +67054,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64347,7 +67071,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64363,7 +67088,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64379,7 +67105,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64395,7 +67122,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64411,7 +67139,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64427,7 +67156,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64443,7 +67173,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64459,7 +67190,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64475,7 +67207,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64491,7 +67224,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64507,7 +67241,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64523,7 +67258,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64539,7 +67275,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64555,7 +67292,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64571,7 +67309,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64587,7 +67326,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64603,7 +67343,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64619,7 +67360,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64635,7 +67377,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64651,7 +67394,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64667,7 +67411,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64683,7 +67428,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64699,7 +67445,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64715,7 +67462,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64731,7 +67479,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64747,7 +67496,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64763,7 +67513,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64779,7 +67530,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64795,7 +67547,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64811,7 +67564,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64827,7 +67581,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64843,7 +67598,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64859,7 +67615,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64875,7 +67632,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64891,7 +67649,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64907,7 +67666,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64923,7 +67683,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64939,7 +67700,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64955,7 +67717,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64971,7 +67734,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -64987,7 +67751,8 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }, 
   {
     "args": [
@@ -65003,6 +67768,7 @@
     "name": "uri_fuzzer_test_one_entry", 
     "platforms": [
       "linux"
-    ]
+    ], 
+    "uses_polling": false
   }
 ]
diff --git a/vsprojects/build_plugins.bat b/vsprojects/build_plugins.bat
index 4c33a58..7c8e056 100644
--- a/vsprojects/build_plugins.bat
+++ b/vsprojects/build_plugins.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Convenience script to build gRPC protoc plugins from command line. protoc plugins are used to generate service stub code from .proto service defintions.
 
 setlocal
diff --git a/vsprojects/build_vs2010.bat b/vsprojects/build_vs2010.bat
index 1bc3c86..d951295 100644
--- a/vsprojects/build_vs2010.bat
+++ b/vsprojects/build_vs2010.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Convenience wrapper that runs specified gRPC target using msbuild
 @rem Usage: build_vs2010.bat TARGET_NAME
 
diff --git a/vsprojects/build_vs2013.bat b/vsprojects/build_vs2013.bat
index 82c0a3a..c500bf1 100644
--- a/vsprojects/build_vs2013.bat
+++ b/vsprojects/build_vs2013.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Convenience wrapper that runs specified gRPC target using msbuild
 @rem Usage: build_vs2013.bat TARGET_NAME
 
diff --git a/vsprojects/build_vs2015.bat b/vsprojects/build_vs2015.bat
index c6e1b43..e2f4b3d 100644
--- a/vsprojects/build_vs2015.bat
+++ b/vsprojects/build_vs2015.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @rem Convenience wrapper that runs specified gRPC target using msbuild
 @rem Usage: build_vs2015.bat TARGET_NAME
 
diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln
index bdae447..be8b5d4 100644
--- a/vsprojects/buildtests_c.sln
+++ b/vsprojects/buildtests_c.sln
@@ -1095,6 +1095,18 @@
 		{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "large_metadata_bad_client_test", "vcxproj\test\large_metadata_bad_client_test\large_metadata_bad_client_test.vcxproj", "{B706A9EC-7982-0DBC-495D-07B165F6CF56}"
+	ProjectSection(myProperties) = preProject
+        	lib = "False"
+	EndProjectSection
+	ProjectSection(ProjectDependencies) = postProject
+		{BA67B418-B699-E41A-9CC4-0279C49481A5} = {BA67B418-B699-E41A-9CC4-0279C49481A5}
+		{0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF} = {0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF}
+		{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5} = {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}
+		{EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037}
+		{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+	EndProjectSection
+EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server_registered_method_bad_client_test", "vcxproj\test\server_registered_method_bad_client_test\server_registered_method_bad_client_test.vcxproj", "{B4E7CD82-988A-BD3A-29F8-8590D3A8BC28}"
 	ProjectSection(myProperties) = preProject
         	lib = "False"
@@ -3087,6 +3099,22 @@
 		{6756895E-05BF-8CC7-58F2-868DF0C0300C}.Release-DLL|Win32.Build.0 = Release|Win32
 		{6756895E-05BF-8CC7-58F2-868DF0C0300C}.Release-DLL|x64.ActiveCfg = Release|x64
 		{6756895E-05BF-8CC7-58F2-868DF0C0300C}.Release-DLL|x64.Build.0 = Release|x64
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug|x64.ActiveCfg = Debug|x64
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release|Win32.ActiveCfg = Release|Win32
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release|x64.ActiveCfg = Release|x64
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug|Win32.Build.0 = Debug|Win32
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug|x64.Build.0 = Debug|x64
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release|Win32.Build.0 = Release|Win32
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release|x64.Build.0 = Release|x64
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug-DLL|Win32.Build.0 = Debug|Win32
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug-DLL|x64.ActiveCfg = Debug|x64
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug-DLL|x64.Build.0 = Debug|x64
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release-DLL|Win32.ActiveCfg = Release|Win32
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release-DLL|Win32.Build.0 = Release|Win32
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release-DLL|x64.ActiveCfg = Release|x64
+		{B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release-DLL|x64.Build.0 = Release|x64
 		{B4E7CD82-988A-BD3A-29F8-8590D3A8BC28}.Debug|Win32.ActiveCfg = Debug|Win32
 		{B4E7CD82-988A-BD3A-29F8-8590D3A8BC28}.Debug|x64.ActiveCfg = Debug|x64
 		{B4E7CD82-988A-BD3A-29F8-8590D3A8BC28}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/vsprojects/coapp/openssl/buildall.bat b/vsprojects/coapp/openssl/buildall.bat
index 2bf1c87..f5797ab 100644
--- a/vsprojects/coapp/openssl/buildall.bat
+++ b/vsprojects/coapp/openssl/buildall.bat
@@ -1,3 +1,31 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 rem Restore using NuGet dependencies (Download NuGet from nuget.org and put it in this directory first)
 nuget restore  || goto eof:
diff --git a/vsprojects/coapp/zlib/buildall.bat b/vsprojects/coapp/zlib/buildall.bat
index 840410a..2b4b4a1 100644
--- a/vsprojects/coapp/zlib/buildall.bat
+++ b/vsprojects/coapp/zlib/buildall.bat
@@ -1,3 +1,32 @@
+@rem Copyright 2016, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem     * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem     * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem     * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 @echo off
 setlocal
 
diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj
index 0ec53ac..65de5e9 100644
--- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj
+++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj
@@ -275,6 +275,8 @@
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\rpc_service_method.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\serialization_traits.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_option.h" />
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_plugin.h" />
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_initializer.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\service_type.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\sync.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\sync_cxx11.h" />
diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
index 491aeae..ce50bd9 100644
--- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
@@ -147,6 +147,12 @@
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_option.h">
       <Filter>include\grpc++\impl</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_plugin.h">
+      <Filter>include\grpc++\impl</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_initializer.h">
+      <Filter>include\grpc++\impl</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\service_type.h">
       <Filter>include\grpc++\impl</Filter>
     </ClInclude>
diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
index 96bee41..895e223 100644
--- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
@@ -275,6 +275,8 @@
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\rpc_service_method.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\serialization_traits.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_option.h" />
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_plugin.h" />
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_initializer.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\service_type.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\sync.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\sync_cxx11.h" />
diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
index fe9eed7..ab305fa 100644
--- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
@@ -132,6 +132,12 @@
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_option.h">
       <Filter>include\grpc++\impl</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_plugin.h">
+      <Filter>include\grpc++\impl</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_initializer.h">
+      <Filter>include\grpc++\impl</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\service_type.h">
       <Filter>include\grpc++\impl</Filter>
     </ClInclude>
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj
index 03f4eaa..a20d386 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj
@@ -293,6 +293,7 @@
     <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_win32.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\time.h" />
+    <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_cronet.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_security.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_security_constants.h" />
     <ClInclude Include="$(SolutionDir)\..\include\grpc\census.h" />
@@ -316,6 +317,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\executor.h" />
@@ -422,8 +424,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_call_holder.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h" />
+    <ClInclude Include="$(SolutionDir)\..\third_party\objective_c\Cronet\cronet_c_for_grpc.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h" />
     <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h" />
     <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_common.h" />
     <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.h" />
@@ -474,6 +477,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.c">
@@ -728,9 +733,15 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\client\secure\cronet_channel_create.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\transport\cronet_api_dummy.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\transport\cronet_transport.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c">
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
index 4617e3d..d546517 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
@@ -58,6 +58,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -439,11 +442,20 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create.c">
       <Filter>src\core\ext\transport\chttp2\client\insecure</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\client\secure\cronet_channel_create.c">
+      <Filter>src\core\ext\transport\cronet\client\secure</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\transport\cronet_api_dummy.c">
+      <Filter>src\core\ext\transport\cronet\transport</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\transport\cronet_transport.c">
+      <Filter>src\core\ext\transport\cronet\transport</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.c">
       <Filter>src\core\ext\lb_policy\grpclb</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.c">
-      <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.c">
+      <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c">
       <Filter>third_party\nanopb</Filter>
@@ -576,6 +588,9 @@
     <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\time.h">
       <Filter>include\grpc\impl\codegen</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_cronet.h">
+      <Filter>include\grpc</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_security.h">
       <Filter>include\grpc</Filter>
     </ClInclude>
@@ -641,6 +656,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -959,11 +977,14 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h">
       <Filter>src\core\ext\client_config</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\third_party\objective_c\Cronet\cronet_c_for_grpc.h">
+      <Filter>third_party\objective_c\Cronet</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h">
       <Filter>src\core\ext\lb_policy\grpclb</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.h">
-      <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h">
+      <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h">
       <Filter>third_party\nanopb</Filter>
@@ -1040,8 +1061,8 @@
     <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb">
       <UniqueIdentifier>{adf7e553-94ef-14fd-e845-03104f00a06f}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0">
-      <UniqueIdentifier>{0406d191-8817-38c3-a562-e3541201f424}</UniqueIdentifier>
+    <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1">
+      <UniqueIdentifier>{bc357e2d-8ddd-a688-88a3-255228fc0818}</UniqueIdentifier>
     </Filter>
     <Filter Include="src\core\ext\lb_policy\pick_first">
       <UniqueIdentifier>{b63ded00-b24f-708e-333f-ce199e421875}</UniqueIdentifier>
@@ -1091,6 +1112,18 @@
     <Filter Include="src\core\ext\transport\chttp2\transport">
       <UniqueIdentifier>{6f34254e-e69f-c9b4-156d-5024bade5408}</UniqueIdentifier>
     </Filter>
+    <Filter Include="src\core\ext\transport\cronet">
+      <UniqueIdentifier>{1e9c85e9-5522-7ef8-0017-7e19990a6194}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\transport\cronet\client">
+      <UniqueIdentifier>{d0530883-75d9-b5f7-d594-26735a70ac7b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\transport\cronet\client\secure">
+      <UniqueIdentifier>{4fa6fe90-b7a8-5c8f-d629-db1e68d89eed}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\core\ext\transport\cronet\transport">
+      <UniqueIdentifier>{31518af8-5860-6d0d-ff78-4059fce29ec2}</UniqueIdentifier>
+    </Filter>
     <Filter Include="src\core\lib">
       <UniqueIdentifier>{5b2ded3f-84a5-f6b4-2060-286c7d1dc945}</UniqueIdentifier>
     </Filter>
@@ -1133,6 +1166,12 @@
     <Filter Include="third_party\nanopb">
       <UniqueIdentifier>{93d6596d-330c-1d27-6f84-3c840e57869e}</UniqueIdentifier>
     </Filter>
+    <Filter Include="third_party\objective_c">
+      <UniqueIdentifier>{3a56a516-857e-d2aa-95cc-11685baf4e8c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="third_party\objective_c\Cronet">
+      <UniqueIdentifier>{a165c6e3-0776-6f40-7351-d7865668e220}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
 </Project>
 
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
index 0eb6535..09748f0 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
@@ -305,6 +305,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\executor.h" />
@@ -398,7 +399,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h" />
     <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h" />
     <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_common.h" />
     <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.h" />
@@ -451,6 +452,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.c">
@@ -669,7 +672,7 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c">
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
index f544fe6..a85bfee 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -61,6 +61,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -388,8 +391,8 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.c">
       <Filter>src\core\ext\lb_policy\grpclb</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.c">
-      <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.c">
+      <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c">
       <Filter>third_party\nanopb</Filter>
@@ -575,6 +578,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -854,8 +860,8 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h">
       <Filter>src\core\ext\lb_policy\grpclb</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.h">
-      <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h">
+      <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h">
       <Filter>third_party\nanopb</Filter>
@@ -932,8 +938,8 @@
     <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb">
       <UniqueIdentifier>{21858d9d-30b5-8847-5882-6b47df0fa293}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0">
-      <UniqueIdentifier>{1795a20b-3e7c-e27d-eae1-96582fa9a958}</UniqueIdentifier>
+    <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1">
+      <UniqueIdentifier>{e9256e96-ea3d-c1fd-6426-9d53d9f08f66}</UniqueIdentifier>
     </Filter>
     <Filter Include="src\core\ext\lb_policy\pick_first">
       <UniqueIdentifier>{e27f9ecf-97bb-1a2e-3135-a41f732dcf55}</UniqueIdentifier>
diff --git a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj
index 1509ece..91b11a1 100644
--- a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj
@@ -160,13 +160,13 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.pb.cc">
+    <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.pb.cc">
     </ClCompile>
-    <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.pb.h">
+    <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.pb.h">
     </ClInclude>
-    <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.grpc.pb.cc">
+    <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.grpc.pb.cc">
     </ClCompile>
-    <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.grpc.pb.h">
+    <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.grpc.pb.h">
     </ClInclude>
     <ClCompile Include="$(SolutionDir)\..\test\cpp\grpclb\grpclb_api_test.cc">
     </ClCompile>
diff --git a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters
index 6c57b8c..50f0a3e 100644
--- a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.proto">
-      <Filter>src\proto\grpc\lb\v0</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.proto">
+      <Filter>src\proto\grpc\lb\v1</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\cpp\grpclb\grpclb_api_test.cc">
       <Filter>test\cpp\grpclb</Filter>
@@ -22,8 +22,8 @@
     <Filter Include="src\proto\grpc\lb">
       <UniqueIdentifier>{2981699e-c196-c599-bc17-c177770f89ee}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\proto\grpc\lb\v0">
-      <UniqueIdentifier>{3d04774a-1c2f-e100-435e-08af5d539250}</UniqueIdentifier>
+    <Filter Include="src\proto\grpc\lb\v1">
+      <UniqueIdentifier>{6cce8ddf-d9a9-1d71-0810-d1e6f8685d76}</UniqueIdentifier>
     </Filter>
     <Filter Include="test">
       <UniqueIdentifier>{64736e1d-eb77-664f-34ab-6cf41263d3d8}</UniqueIdentifier>
diff --git a/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj b/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj
new file mode 100644
index 0000000..0a14694
--- /dev/null
+++ b/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B706A9EC-7982-0DBC-495D-07B165F6CF56}</ProjectGuid>
+    <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+    <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+    <PlatformToolset>v100</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+    <TargetName>large_metadata_bad_client_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+    <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'">
+    <TargetName>large_metadata_bad_client_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+    <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+  </PropertyGroup>
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\core\bad_client\tests\large_metadata.c">
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\test/bad_client\bad_client_test\bad_client_test.vcxproj">
+      <Project>{BA67B418-B699-E41A-9CC4-0279C49481A5}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util_unsecure\grpc_test_util_unsecure.vcxproj">
+      <Project>{0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_unsecure\grpc_unsecure.vcxproj">
+      <Project>{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+      <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+      <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+  </ImportGroup>
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+  </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj.filters b/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj.filters
new file mode 100644
index 0000000..5eb9a5e
--- /dev/null
+++ b/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj.filters
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\core\bad_client\tests\large_metadata.c">
+      <Filter>test\core\bad_client\tests</Filter>
+    </ClCompile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Filter Include="test">
+      <UniqueIdentifier>{6c1eb0cb-9d82-f961-7220-1f6edc913666}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core">
+      <UniqueIdentifier>{79d5006f-93a1-aa0e-2568-37aa63eef567}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core\bad_client">
+      <UniqueIdentifier>{dbde5995-24a0-2332-4bee-0540ed3aa848}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core\bad_client\tests">
+      <UniqueIdentifier>{5cf4a13f-ae24-fd98-eb59-b5301f30367c}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj b/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj
new file mode 100644
index 0000000..0ebdd98
--- /dev/null
+++ b/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{86751DC8-C8D9-57B6-2C8A-BB33021C773C}</ProjectGuid>
+    <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+    <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+    <PlatformToolset>v100</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+    <TargetName>server_builder_plugin_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+    <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'">
+    <TargetName>server_builder_plugin_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+    <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+  </PropertyGroup>
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\cpp\end2end\server_builder_plugin_test.cc">
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++_test_util\grpc++_test_util.vcxproj">
+      <Project>{0BE77741-552A-929B-A497-4EF7ECE17A64}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+      <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj">
+      <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+      <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+      <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+      <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+  </ImportGroup>
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+  </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj.filters b/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj.filters
new file mode 100644
index 0000000..629b913
--- /dev/null
+++ b/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj.filters
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\cpp\end2end\server_builder_plugin_test.cc">
+      <Filter>test\cpp\end2end</Filter>
+    </ClCompile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Filter Include="test">
+      <UniqueIdentifier>{37b2ebc1-b2f2-ecb9-37b7-f6d757bb99e3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\cpp">
+      <UniqueIdentifier>{39400fed-f7b7-0f44-0ef3-ba3693d42011}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\cpp\end2end">
+      <UniqueIdentifier>{dab9dd19-3e5b-005e-4b5a-456de6111d71}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
+