// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Generated by generate.py.
library fidl.test.dangerous.method.response.arguments.lower;
using argtype = uint32;
protocol DangerousResponseArguments {
  Method0() -> (argtype abstract);
  Method1() -> (argtype alignas);
  Method2() -> (argtype alignof);
  Method3() -> (argtype and);
  Method4() -> (argtype and_eq);
  Method5() -> (argtype as);
  Method6() -> (argtype asm);
  Method7() -> (argtype assert);
  Method8() -> (argtype async);
  Method9() -> (argtype atomic_cancel);
  Method10() -> (argtype atomic_commit);
  Method11() -> (argtype atomic_noexcept);
  Method12() -> (argtype auto);
  Method13() -> (argtype await);
  Method14() -> (argtype become);
  Method15() -> (argtype bitand);
  Method16() -> (argtype bitor);
  Method17() -> (argtype bool);
  Method18() -> (argtype box);
  Method19() -> (argtype break);
  Method20() -> (argtype byte);
  Method21() -> (argtype case);
  Method22() -> (argtype catch);
  Method23() -> (argtype chan);
  Method24() -> (argtype char);
  Method25() -> (argtype char16_t);
  Method26() -> (argtype char32_t);
  Method27() -> (argtype class);
  Method28() -> (argtype co_await);
  Method29() -> (argtype co_return);
  Method30() -> (argtype co_yield);
  Method31() -> (argtype coding_traits);
  Method32() -> (argtype compl);
  Method33() -> (argtype concept);
  Method34() -> (argtype const);
  Method35() -> (argtype const_cast);
  Method36() -> (argtype constexpr);
  Method37() -> (argtype continue);
  Method38() -> (argtype controller);
  Method39() -> (argtype covariant);
  Method40() -> (argtype crate);
  Method41() -> (argtype decltype);
  Method42() -> (argtype decoder);
  Method43() -> (argtype default);
  Method44() -> (argtype defer);
  Method45() -> (argtype deferred);
  Method46() -> (argtype delete);
  Method47() -> (argtype do);
  Method48() -> (argtype double);
  Method49() -> (argtype dynamic);
  Method50() -> (argtype dynamic_cast);
  Method51() -> (argtype else);
  Method52() -> (argtype encoder);
  Method53() -> (argtype ensure_values_instantiated);
  Method54() -> (argtype enum);
  Method55() -> (argtype err);
  Method56() -> (argtype explicit);
  Method57() -> (argtype export);
  Method58() -> (argtype extends);
  Method59() -> (argtype extern);
  Method60() -> (argtype external);
  Method61() -> (argtype factory);
  Method62() -> (argtype fallthrough);
  Method63() -> (argtype false);
  Method64() -> (argtype fidl);
  Method65() -> (argtype fidl_type);
  Method66() -> (argtype final);
  Method67() -> (argtype finally);
  Method68() -> (argtype float);
  Method69() -> (argtype fn);
  Method70() -> (argtype for);
  Method71() -> (argtype friend);
  Method72() -> (argtype func);
  Method73() -> (argtype future);
  Method74() -> (argtype futures);
  Method75() -> (argtype get);
  Method76() -> (argtype go);
  Method77() -> (argtype goto);
  Method78() -> (argtype has_invalid_tag);
  Method79() -> (argtype hash_code);
  Method80() -> (argtype if);
  Method81() -> (argtype impl);
  Method82() -> (argtype implements);
  Method83() -> (argtype import);
  Method84() -> (argtype in);
  Method85() -> (argtype index);
  Method86() -> (argtype inline);
  Method87() -> (argtype int);
  Method88() -> (argtype int16);
  Method89() -> (argtype int32);
  Method90() -> (argtype int64);
  Method91() -> (argtype int8);
  Method92() -> (argtype interface);
  Method93() -> (argtype is);
  Method94() -> (argtype let);
  Method95() -> (argtype lhs);
  Method96() -> (argtype library);
  Method97() -> (argtype list);
  Method98() -> (argtype long);
  Method99() -> (argtype loop);
  Method100() -> (argtype macro);
  Method101() -> (argtype map);
  Method102() -> (argtype match);
  Method103() -> (argtype mixin);
  Method104() -> (argtype mod);
  Method105() -> (argtype module);
  Method106() -> (argtype move);
  Method107() -> (argtype mut);
  Method108() -> (argtype mutable);
  Method109() -> (argtype namespace);
  Method110() -> (argtype never);
  Method111() -> (argtype new);
  Method112() -> (argtype no_such_method);
  Method113() -> (argtype noexcept);
  Method114() -> (argtype none);
  Method115() -> (argtype not);
  Method116() -> (argtype not_eq);
  Method117() -> (argtype null);
  Method118() -> (argtype nullptr);
  Method119() -> (argtype num);
  Method120() -> (argtype object);
  Method121() -> (argtype offset);
  Method122() -> (argtype offsetof);
  Method123() -> (argtype ok);
  Method124() -> (argtype on_open);
  Method125() -> (argtype operator);
  Method126() -> (argtype option);
  Method127() -> (argtype or);
  Method128() -> (argtype or_eq);
  Method129() -> (argtype override);
  Method130() -> (argtype package);
  Method131() -> (argtype part);
  Method132() -> (argtype priv);
  Method133() -> (argtype private);
  Method134() -> (argtype proc);
  Method135() -> (argtype protected);
  Method136() -> (argtype proxy);
  Method137() -> (argtype pub);
  Method138() -> (argtype public);
  Method139() -> (argtype pure);
  Method140() -> (argtype range);
  Method141() -> (argtype ref);
  Method142() -> (argtype register);
  Method143() -> (argtype reinterpret_cast);
  Method144() -> (argtype requires);
  Method145() -> (argtype result);
  Method146() -> (argtype rethrow);
  Method147() -> (argtype return);
  Method148() -> (argtype rhs);
  Method149() -> (argtype rune);
  Method150() -> (argtype runtime_type);
  Method151() -> (argtype select);
  Method152() -> (argtype self);
  Method153() -> (argtype send);
  Method154() -> (argtype set);
  Method155() -> (argtype set_controller);
  Method156() -> (argtype short);
  Method157() -> (argtype signed);
  Method158() -> (argtype sizeof);
  Method159() -> (argtype some);
  Method160() -> (argtype static);
  Method161() -> (argtype static_assert);
  Method162() -> (argtype static_cast);
  Method163() -> (argtype stream);
  Method164() -> (argtype string);
  Method165() -> (argtype struct);
  Method166() -> (argtype stub);
  Method167() -> (argtype super);
  Method168() -> (argtype switch);
  Method169() -> (argtype synchronized);
  Method170() -> (argtype template);
  Method171() -> (argtype this);
  Method172() -> (argtype thread_local);
  Method173() -> (argtype throw);
  Method174() -> (argtype to_string);
  Method175() -> (argtype trait);
  Method176() -> (argtype true);
  Method177() -> (argtype try);
  Method178() -> (argtype type);
  Method179() -> (argtype typedef);
  Method180() -> (argtype typeid);
  Method181() -> (argtype typename);
  Method182() -> (argtype typeof);
  Method183() -> (argtype uint16);
  Method184() -> (argtype uint32);
  Method185() -> (argtype uint64);
  Method186() -> (argtype uint8);
  Method187() -> (argtype union);
  Method188() -> (argtype unsafe);
  Method189() -> (argtype unsigned);
  Method190() -> (argtype unsized);
  Method191() -> (argtype use);
  Method192() -> (argtype using);
  Method193() -> (argtype value);
  Method194() -> (argtype value_of);
  Method195() -> (argtype value_union);
  Method196() -> (argtype values_map);
  Method197() -> (argtype var);
  Method198() -> (argtype vec);
  Method199() -> (argtype virtual);
  Method200() -> (argtype void);
  Method201() -> (argtype volatile);
  Method202() -> (argtype wchar_t);
  Method203() -> (argtype where);
  Method204() -> (argtype which);
  Method205() -> (argtype while);
  Method206() -> (argtype with);
  Method207() -> (argtype xor);
  Method208() -> (argtype xor_eq);
  Method209() -> (argtype xunion);
  Method210() -> (argtype yield);
  Method211() -> (argtype zx);
};
