Home | History | Annotate | Download | only in libjingle
      1 # This file is generated by gyp; do not edit.
      2 
      3 include $(CLEAR_VARS)
      4 
      5 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
      6 LOCAL_MODULE := third_party_libjingle_libjingle_webrtc_common_gyp
      7 LOCAL_MODULE_SUFFIX := .a
      8 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
      9 gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
     10 gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
     11 
     12 # Make sure our deps are built first.
     13 GYP_TARGET_DEPENDENCIES :=
     14 
     15 GYP_GENERATED_OUTPUTS :=
     16 
     17 # Make sure our deps and generated files are built first.
     18 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
     19 
     20 LOCAL_CPP_EXTENSION := .cc
     21 LOCAL_GENERATED_SOURCES :=
     22 
     23 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
     24 
     25 LOCAL_SRC_FILES := \
     26 	third_party/libjingle/source/talk/app/webrtc/audiotrack.cc \
     27 	third_party/libjingle/source/talk/app/webrtc/audiotrackrenderer.cc \
     28 	third_party/libjingle/source/talk/app/webrtc/datachannel.cc \
     29 	third_party/libjingle/source/talk/app/webrtc/dtmfsender.cc \
     30 	third_party/libjingle/source/talk/app/webrtc/jsepicecandidate.cc \
     31 	third_party/libjingle/source/talk/app/webrtc/jsepsessiondescription.cc \
     32 	third_party/libjingle/source/talk/app/webrtc/localaudiosource.cc \
     33 	third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface.cc \
     34 	third_party/libjingle/source/talk/app/webrtc/mediastream.cc \
     35 	third_party/libjingle/source/talk/app/webrtc/mediastreamhandler.cc \
     36 	third_party/libjingle/source/talk/app/webrtc/mediastreamsignaling.cc \
     37 	third_party/libjingle/source/talk/app/webrtc/peerconnection.cc \
     38 	third_party/libjingle/source/talk/app/webrtc/peerconnectionfactory.cc \
     39 	third_party/libjingle/source/talk/app/webrtc/portallocatorfactory.cc \
     40 	third_party/libjingle/source/talk/app/webrtc/remoteaudiosource.cc \
     41 	third_party/libjingle/source/talk/app/webrtc/remotevideocapturer.cc \
     42 	third_party/libjingle/source/talk/app/webrtc/sctputils.cc \
     43 	third_party/libjingle/source/talk/app/webrtc/statscollector.cc \
     44 	third_party/libjingle/source/talk/app/webrtc/videosource.cc \
     45 	third_party/libjingle/source/talk/app/webrtc/videotrack.cc \
     46 	third_party/libjingle/source/talk/app/webrtc/videotrackrenderers.cc \
     47 	third_party/libjingle/source/talk/app/webrtc/webrtcsdp.cc \
     48 	third_party/libjingle/source/talk/app/webrtc/webrtcsession.cc \
     49 	third_party/libjingle/source/talk/app/webrtc/webrtcsessiondescriptionfactory.cc \
     50 	third_party/libjingle/source/talk/media/base/capturemanager.cc \
     51 	third_party/libjingle/source/talk/media/base/capturerenderadapter.cc \
     52 	third_party/libjingle/source/talk/media/base/codec.cc \
     53 	third_party/libjingle/source/talk/media/base/constants.cc \
     54 	third_party/libjingle/source/talk/media/base/filemediaengine.cc \
     55 	third_party/libjingle/source/talk/media/base/mediaengine.cc \
     56 	third_party/libjingle/source/talk/media/base/rtpdataengine.cc \
     57 	third_party/libjingle/source/talk/media/base/rtpdump.cc \
     58 	third_party/libjingle/source/talk/media/base/rtputils.cc \
     59 	third_party/libjingle/source/talk/media/base/streamparams.cc \
     60 	third_party/libjingle/source/talk/media/base/videoadapter.cc \
     61 	third_party/libjingle/source/talk/media/base/videocapturer.cc \
     62 	third_party/libjingle/source/talk/media/base/videocommon.cc \
     63 	third_party/libjingle/source/talk/media/base/videoframe.cc \
     64 	third_party/libjingle/source/talk/media/devices/dummydevicemanager.cc \
     65 	third_party/libjingle/source/talk/media/devices/filevideocapturer.cc \
     66 	third_party/libjingle/source/talk/media/webrtc/webrtcpassthroughrender.cc \
     67 	third_party/libjingle/source/talk/media/webrtc/webrtctexturevideoframe.cc \
     68 	third_party/libjingle/source/talk/media/webrtc/webrtcvideocapturer.cc \
     69 	third_party/libjingle/source/talk/media/webrtc/webrtcvideoframe.cc \
     70 	third_party/libjingle/source/talk/media/webrtc/webrtcvideoframefactory.cc \
     71 	third_party/libjingle/source/talk/session/media/audiomonitor.cc \
     72 	third_party/libjingle/source/talk/session/media/bundlefilter.cc \
     73 	third_party/libjingle/source/talk/session/media/call.cc \
     74 	third_party/libjingle/source/talk/session/media/channel.cc \
     75 	third_party/libjingle/source/talk/session/media/channelmanager.cc \
     76 	third_party/libjingle/source/talk/session/media/currentspeakermonitor.cc \
     77 	third_party/libjingle/source/talk/session/media/externalhmac.cc \
     78 	third_party/libjingle/source/talk/session/media/mediamessages.cc \
     79 	third_party/libjingle/source/talk/session/media/mediamonitor.cc \
     80 	third_party/libjingle/source/talk/session/media/mediasession.cc \
     81 	third_party/libjingle/source/talk/session/media/mediasessionclient.cc \
     82 	third_party/libjingle/source/talk/session/media/rtcpmuxfilter.cc \
     83 	third_party/libjingle/source/talk/session/media/soundclip.cc \
     84 	third_party/libjingle/source/talk/session/media/srtpfilter.cc \
     85 	third_party/libjingle/source/talk/session/media/typingmonitor.cc \
     86 	third_party/libjingle/source/talk/session/tunnel/pseudotcpchannel.cc \
     87 	third_party/libjingle/source/talk/session/tunnel/tunnelsessionclient.cc \
     88 	third_party/libjingle/source/talk/media/sctp/sctpdataengine.cc
     89 
     90 
     91 # Flags passed to both C and C++ files.
     92 MY_CFLAGS_Debug := \
     93 	-fstack-protector \
     94 	--param=ssp-buffer-size=4 \
     95 	-fno-strict-aliasing \
     96 	-Wno-unused-parameter \
     97 	-Wno-missing-field-initializers \
     98 	-fvisibility=hidden \
     99 	-pipe \
    100 	-fPIC \
    101 	-Wno-unused-local-typedefs \
    102 	-Wno-format \
    103 	-m64 \
    104 	-march=x86-64 \
    105 	-ffunction-sections \
    106 	-funwind-tables \
    107 	-g \
    108 	-fstack-protector \
    109 	-fno-short-enums \
    110 	-finline-limit=64 \
    111 	-Wa,--noexecstack \
    112 	-U_FORTIFY_SOURCE \
    113 	-Wno-extra \
    114 	-Wno-ignored-qualifiers \
    115 	-Wno-type-limits \
    116 	-Wno-unused-but-set-variable \
    117 	-Wno-address \
    118 	-Wno-format-security \
    119 	-Wno-return-type \
    120 	-Wno-sequence-point \
    121 	-Os \
    122 	-g \
    123 	-gdwarf-4 \
    124 	-fdata-sections \
    125 	-ffunction-sections \
    126 	-fomit-frame-pointer \
    127 	-funwind-tables
    128 
    129 MY_DEFS_Debug := \
    130 	'-DEXPAT_RELATIVE_PATH' \
    131 	'-DFEATURE_ENABLE_SSL' \
    132 	'-DGTEST_RELATIVE_PATH' \
    133 	'-DHAVE_SRTP' \
    134 	'-DHAVE_WEBRTC_VIDEO' \
    135 	'-DHAVE_WEBRTC_VOICE' \
    136 	'-DLOGGING_INSIDE_WEBRTC' \
    137 	'-DNO_MAIN_THREAD_WRAPPING' \
    138 	'-DNO_SOUND_SYSTEM' \
    139 	'-DSRTP_RELATIVE_PATH' \
    140 	'-DUSE_WEBRTC_DEV_BRANCH' \
    141 	'-DENABLE_EXTERNAL_AUTH' \
    142 	'-DWEBRTC_CHROMIUM_BUILD' \
    143 	'-DV8_DEPRECATION_WARNINGS' \
    144 	'-D_FILE_OFFSET_BITS=64' \
    145 	'-DNO_TCMALLOC' \
    146 	'-DDISABLE_NACL' \
    147 	'-DLIBPEERCONNECTION_LIB=1' \
    148 	'-DSSL_USE_OPENSSL' \
    149 	'-DHAVE_OPENSSL_SSL_H' \
    150 	'-DPOSIX' \
    151 	'-DWEBRTC_POSIX' \
    152 	'-DCHROMIUM_BUILD' \
    153 	'-DUSE_LIBJPEG_TURBO=1' \
    154 	'-DENABLE_WEBRTC=1' \
    155 	'-DUSE_PROPRIETARY_CODECS' \
    156 	'-DENABLE_BROWSER_CDMS' \
    157 	'-DENABLE_CONFIGURATION_POLICY' \
    158 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
    159 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
    160 	'-DENABLE_EGLIMAGE=1' \
    161 	'-DCLD_VERSION=1' \
    162 	'-DENABLE_PRINTING=1' \
    163 	'-DENABLE_MANAGED_USERS=1' \
    164 	'-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
    165 	'-DDATA_REDUCTION_DEV_HOST="https://proxy-dev.googlezip.net:443/"' \
    166 	'-DDATA_REDUCTION_DEV_FALLBACK_HOST="http://proxy-dev.googlezip.net:80/"' \
    167 	'-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
    168 	'-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
    169 	'-DDATA_REDUCTION_PROXY_WARMUP_URL="http://www.gstatic.com/generate_204"' \
    170 	'-DVIDEO_HOLE=1' \
    171 	'-DENABLE_LOAD_COMPLETION_HACKS=1' \
    172 	'-DHAVE_SCTP' \
    173 	'-DPOSIX_AVOID_MMAP' \
    174 	'-DXML_STATIC' \
    175 	'-DHAVE_INT16_T' \
    176 	'-DHAVE_INT32_T' \
    177 	'-DHAVE_INT8_T' \
    178 	'-DHAVE_UINT16_T' \
    179 	'-DHAVE_UINT32_T' \
    180 	'-DHAVE_UINT64_T' \
    181 	'-DHAVE_UINT8_T' \
    182 	'-DHAVE_STDINT_H' \
    183 	'-DHAVE_INTTYPES_H' \
    184 	'-DHAVE_NETINET_IN_H' \
    185 	'-DINLINE=inline' \
    186 	'-DCPU_CISC' \
    187 	'-DWEBRTC_LINUX' \
    188 	'-DWEBRTC_ANDROID' \
    189 	'-DWEBRTC_ANDROID_OPENSLES' \
    190 	'-DFEATURE_ENABLE_VOICEMAIL' \
    191 	'-DANDROID' \
    192 	'-DUSE_OPENSSL=1' \
    193 	'-DUSE_OPENSSL_CERTS=1' \
    194 	'-D__GNU_SOURCE=1' \
    195 	'-DUSE_STLPORT=1' \
    196 	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
    197 	'-DCHROME_BUILD_ID=""' \
    198 	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
    199 	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
    200 	'-D_DEBUG'
    201 
    202 
    203 # Include paths placed before CFLAGS/CPPFLAGS
    204 LOCAL_C_INCLUDES_Debug := \
    205 	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
    206 	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
    207 	$(LOCAL_PATH)/third_party/libjingle/overrides \
    208 	$(LOCAL_PATH)/third_party/webrtc/overrides \
    209 	$(LOCAL_PATH)/third_party/libjingle/source \
    210 	$(LOCAL_PATH) \
    211 	$(LOCAL_PATH)/testing/gtest/include \
    212 	$(LOCAL_PATH)/third_party \
    213 	$(LOCAL_PATH)/third_party/libyuv/include \
    214 	$(LOCAL_PATH)/third_party/usrsctp \
    215 	$(gyp_shared_intermediate_dir) \
    216 	$(LOCAL_PATH)/third_party/expat/files/lib \
    217 	$(LOCAL_PATH)/third_party/boringssl/src/include \
    218 	$(LOCAL_PATH)/third_party/libsrtp/config \
    219 	$(LOCAL_PATH)/third_party/libsrtp/srtp/include \
    220 	$(LOCAL_PATH)/third_party/libsrtp/srtp/crypto/include \
    221 	$(LOCAL_PATH)/third_party/webrtc/overrides \
    222 	$(LOCAL_PATH)/third_party \
    223 	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
    224 	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
    225 	$(LOCAL_PATH)/third_party/usrsctp/usrsctplib \
    226 	$(LOCAL_PATH)/third_party/usrsctp/usrsctplib/netinet \
    227 	$(PWD)/frameworks/wilhelm/include \
    228 	$(PWD)/bionic \
    229 	$(PWD)/external/stlport/stlport
    230 
    231 
    232 # Flags passed to only C++ (and not C) files.
    233 LOCAL_CPPFLAGS_Debug := \
    234 	-fno-exceptions \
    235 	-fno-rtti \
    236 	-fno-threadsafe-statics \
    237 	-fvisibility-inlines-hidden \
    238 	-Wno-deprecated \
    239 	-std=gnu++11 \
    240 	-Wno-narrowing \
    241 	-Wno-literal-suffix \
    242 	-Wno-non-virtual-dtor \
    243 	-Wno-sign-promo \
    244 	-Wno-non-virtual-dtor
    245 
    246 
    247 # Flags passed to both C and C++ files.
    248 MY_CFLAGS_Release := \
    249 	-fstack-protector \
    250 	--param=ssp-buffer-size=4 \
    251 	-fno-strict-aliasing \
    252 	-Wno-unused-parameter \
    253 	-Wno-missing-field-initializers \
    254 	-fvisibility=hidden \
    255 	-pipe \
    256 	-fPIC \
    257 	-Wno-unused-local-typedefs \
    258 	-Wno-format \
    259 	-m64 \
    260 	-march=x86-64 \
    261 	-ffunction-sections \
    262 	-funwind-tables \
    263 	-g \
    264 	-fstack-protector \
    265 	-fno-short-enums \
    266 	-finline-limit=64 \
    267 	-Wa,--noexecstack \
    268 	-U_FORTIFY_SOURCE \
    269 	-Wno-extra \
    270 	-Wno-ignored-qualifiers \
    271 	-Wno-type-limits \
    272 	-Wno-unused-but-set-variable \
    273 	-Wno-address \
    274 	-Wno-format-security \
    275 	-Wno-return-type \
    276 	-Wno-sequence-point \
    277 	-Os \
    278 	-fno-ident \
    279 	-fdata-sections \
    280 	-ffunction-sections \
    281 	-fomit-frame-pointer \
    282 	-funwind-tables
    283 
    284 MY_DEFS_Release := \
    285 	'-DEXPAT_RELATIVE_PATH' \
    286 	'-DFEATURE_ENABLE_SSL' \
    287 	'-DGTEST_RELATIVE_PATH' \
    288 	'-DHAVE_SRTP' \
    289 	'-DHAVE_WEBRTC_VIDEO' \
    290 	'-DHAVE_WEBRTC_VOICE' \
    291 	'-DLOGGING_INSIDE_WEBRTC' \
    292 	'-DNO_MAIN_THREAD_WRAPPING' \
    293 	'-DNO_SOUND_SYSTEM' \
    294 	'-DSRTP_RELATIVE_PATH' \
    295 	'-DUSE_WEBRTC_DEV_BRANCH' \
    296 	'-DENABLE_EXTERNAL_AUTH' \
    297 	'-DWEBRTC_CHROMIUM_BUILD' \
    298 	'-DV8_DEPRECATION_WARNINGS' \
    299 	'-D_FILE_OFFSET_BITS=64' \
    300 	'-DNO_TCMALLOC' \
    301 	'-DDISABLE_NACL' \
    302 	'-DLIBPEERCONNECTION_LIB=1' \
    303 	'-DSSL_USE_OPENSSL' \
    304 	'-DHAVE_OPENSSL_SSL_H' \
    305 	'-DPOSIX' \
    306 	'-DWEBRTC_POSIX' \
    307 	'-DCHROMIUM_BUILD' \
    308 	'-DUSE_LIBJPEG_TURBO=1' \
    309 	'-DENABLE_WEBRTC=1' \
    310 	'-DUSE_PROPRIETARY_CODECS' \
    311 	'-DENABLE_BROWSER_CDMS' \
    312 	'-DENABLE_CONFIGURATION_POLICY' \
    313 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
    314 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
    315 	'-DENABLE_EGLIMAGE=1' \
    316 	'-DCLD_VERSION=1' \
    317 	'-DENABLE_PRINTING=1' \
    318 	'-DENABLE_MANAGED_USERS=1' \
    319 	'-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
    320 	'-DDATA_REDUCTION_DEV_HOST="https://proxy-dev.googlezip.net:443/"' \
    321 	'-DDATA_REDUCTION_DEV_FALLBACK_HOST="http://proxy-dev.googlezip.net:80/"' \
    322 	'-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
    323 	'-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
    324 	'-DDATA_REDUCTION_PROXY_WARMUP_URL="http://www.gstatic.com/generate_204"' \
    325 	'-DVIDEO_HOLE=1' \
    326 	'-DENABLE_LOAD_COMPLETION_HACKS=1' \
    327 	'-DHAVE_SCTP' \
    328 	'-DPOSIX_AVOID_MMAP' \
    329 	'-DXML_STATIC' \
    330 	'-DHAVE_INT16_T' \
    331 	'-DHAVE_INT32_T' \
    332 	'-DHAVE_INT8_T' \
    333 	'-DHAVE_UINT16_T' \
    334 	'-DHAVE_UINT32_T' \
    335 	'-DHAVE_UINT64_T' \
    336 	'-DHAVE_UINT8_T' \
    337 	'-DHAVE_STDINT_H' \
    338 	'-DHAVE_INTTYPES_H' \
    339 	'-DHAVE_NETINET_IN_H' \
    340 	'-DINLINE=inline' \
    341 	'-DCPU_CISC' \
    342 	'-DWEBRTC_LINUX' \
    343 	'-DWEBRTC_ANDROID' \
    344 	'-DWEBRTC_ANDROID_OPENSLES' \
    345 	'-DFEATURE_ENABLE_VOICEMAIL' \
    346 	'-DANDROID' \
    347 	'-DUSE_OPENSSL=1' \
    348 	'-DUSE_OPENSSL_CERTS=1' \
    349 	'-D__GNU_SOURCE=1' \
    350 	'-DUSE_STLPORT=1' \
    351 	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
    352 	'-DCHROME_BUILD_ID=""' \
    353 	'-DNDEBUG' \
    354 	'-DNVALGRIND' \
    355 	'-DDYNAMIC_ANNOTATIONS_ENABLED=0'
    356 
    357 
    358 # Include paths placed before CFLAGS/CPPFLAGS
    359 LOCAL_C_INCLUDES_Release := \
    360 	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
    361 	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
    362 	$(LOCAL_PATH)/third_party/libjingle/overrides \
    363 	$(LOCAL_PATH)/third_party/webrtc/overrides \
    364 	$(LOCAL_PATH)/third_party/libjingle/source \
    365 	$(LOCAL_PATH) \
    366 	$(LOCAL_PATH)/testing/gtest/include \
    367 	$(LOCAL_PATH)/third_party \
    368 	$(LOCAL_PATH)/third_party/libyuv/include \
    369 	$(LOCAL_PATH)/third_party/usrsctp \
    370 	$(gyp_shared_intermediate_dir) \
    371 	$(LOCAL_PATH)/third_party/expat/files/lib \
    372 	$(LOCAL_PATH)/third_party/boringssl/src/include \
    373 	$(LOCAL_PATH)/third_party/libsrtp/config \
    374 	$(LOCAL_PATH)/third_party/libsrtp/srtp/include \
    375 	$(LOCAL_PATH)/third_party/libsrtp/srtp/crypto/include \
    376 	$(LOCAL_PATH)/third_party/webrtc/overrides \
    377 	$(LOCAL_PATH)/third_party \
    378 	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
    379 	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
    380 	$(LOCAL_PATH)/third_party/usrsctp/usrsctplib \
    381 	$(LOCAL_PATH)/third_party/usrsctp/usrsctplib/netinet \
    382 	$(PWD)/frameworks/wilhelm/include \
    383 	$(PWD)/bionic \
    384 	$(PWD)/external/stlport/stlport
    385 
    386 
    387 # Flags passed to only C++ (and not C) files.
    388 LOCAL_CPPFLAGS_Release := \
    389 	-fno-exceptions \
    390 	-fno-rtti \
    391 	-fno-threadsafe-statics \
    392 	-fvisibility-inlines-hidden \
    393 	-Wno-deprecated \
    394 	-std=gnu++11 \
    395 	-Wno-narrowing \
    396 	-Wno-literal-suffix \
    397 	-Wno-non-virtual-dtor \
    398 	-Wno-sign-promo \
    399 	-Wno-non-virtual-dtor
    400 
    401 
    402 LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
    403 LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
    404 LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
    405 LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
    406 ### Rules for final target.
    407 
    408 LOCAL_SHARED_LIBRARIES := \
    409 	libstlport \
    410 	libdl
    411 
    412 # Add target alias to "gyp_all_modules" target.
    413 .PHONY: gyp_all_modules
    414 gyp_all_modules: third_party_libjingle_libjingle_webrtc_common_gyp
    415 
    416 # Alias gyp target name.
    417 .PHONY: libjingle_webrtc_common
    418 libjingle_webrtc_common: third_party_libjingle_libjingle_webrtc_common_gyp
    419 
    420 include $(BUILD_STATIC_LIBRARY)
    421