(CommandList children: [ (FuncDef name: unmount_devpts body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(mountpoint)} {(-q)} {(/dev/pts/)}) terminator: <Op_Semi ";"> ) ] action: [(C {(umount)} {(-n)} {(-l)} {(/dev/pts/)})] spids: [-1 47] ) ] spids: [-1 59] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(mountpoint)} {(-q)} {(/dev/shm/)}) terminator: <Op_Semi ";"> ) ] action: [(C {(umount)} {(-n)} {(-l)} {(/dev/shm/)})] spids: [-1 72] ) ] spids: [-1 84] ) ] spids: [35] ) spids: [31 34] ) (FuncDef name: mount_devtmpfs body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(grep)} {(-E)} {(-q)} {(DQ ("^[^[:space:]]+ /dev devtmpfs"))} {(/proc/mounts)}) terminator: <Op_Semi ";"> ) ] action: [ (C {(mount)} {(-n)} {(-o)} {(remount) (Lit_Comma ",") (nosuid) (Lit_Comma ",") (Lit_VarLike "size=") ($ VSub_Name "$tmpfs_size") (Lit_Comma ",") (Lit_VarLike "mode=") (0755) } {(-t)} {(devtmpfs)} {(devtmpfs)} {(/dev)} ) (ControlFlow token:<ControlFlow_Return return>) ] spids: [-1 114] ) ] spids: [-1 145] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(mount)} {(-n)} {(-o)} {(nosuid) (Lit_Comma ",") (Lit_VarLike "size=") ($ VSub_Name "$tmpfs_size") (Lit_Comma ",") (Lit_VarLike "mode=") (0755) } {(-t)} {(devtmpfs)} {(devtmpfs)} {(/dev)} ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(log_failure_msg)} {(DQ ("udev requires devtmpfs support, not started"))}) (C {(log_end_msg)} {(1)}) ] spids: [-1 176] ) ] spids: [-1 191] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] spids: [96] ) spids: [92 95] ) (FuncDef name: create_dev_makedev body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-e)} {(/sbin/MAKEDEV)} {(Lit_Other "]")}) terminator: <Op_Semi ";"> ) ] action: [(C {(ln)} {(-sf)} {(/sbin/MAKEDEV)} {(/dev/MAKEDEV)})] spids: [-1 220] ) ] else_action: [(C {(ln)} {(-sf)} {(/bin/true)} {(/dev/MAKEDEV)})] spids: [232 244] ) ] spids: [206] ) spids: [202 205] ) (FuncDef name: supported_kernel body: (BraceGroup children: [ (Case to_match: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(uname)} {(-r)})]) left_token: <Left_CommandSub "$("> spids: [259 263] ) ) } arms: [ (case_arm pat_list: [ {(2.) (Lit_Other "[") (012345) (Lit_Other "]") (.) (Lit_Other "*")} {(2.6.) (Lit_Other "[") (0-9) (Lit_Other "]")} {(2.6.) (Lit_Other "[") (0-9) (Lit_Other "]") (Lit_Other "[") (KW_Bang "!") (0-9) (Lit_Other "]") (Lit_Other "*") } ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [269 290 296 -1] ) (case_arm pat_list: [ {(2.6.) (Lit_Other "[") (12) (Lit_Other "]") (Lit_Other "[") (0-9) (Lit_Other "]")} {(2.6.) (Lit_Other "[") (12) (Lit_Other "]") (Lit_Other "[") (0-9) (Lit_Other "]") (Lit_Other "[") (KW_Bang "!") (0-9) (Lit_Other "]") (Lit_Other "*") } ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [299 319 325 -1] ) (case_arm pat_list: [ {(2.6.3) (Lit_Other "[") (0-1) (Lit_Other "]")} {(2.6.3) (Lit_Other "[") (0-1) (Lit_Other "]") (Lit_Other "[") (KW_Bang "!") (0-9) (Lit_Other "]") (Lit_Other "*") } ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [328 342 348 -1] ) ] spids: [256 266 351] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] spids: [253] ) spids: [249 252] ) (FuncDef name: my_tty body: (BraceGroup children: [ (AndOr children: [ (C {(Lit_Other "[")} {(-x)} {(/bin/readlink)} {(Lit_Other "]")}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] op_id: Op_DPipe ) (AndOr children: [ (C {(Lit_Other "[")} {(-e)} {(/proc/self/fd/0)} {(Lit_Other "]")}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] op_id: Op_DPipe ) (AndOr children: [(C {(readlink)} {(--silent)} {(/proc/self/fd/0)}) (C {(true)})] op_id: Op_DPipe ) ] spids: [368] ) spids: [364 367] ) (FuncDef name: warn_if_interactive body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$RUNLEVEL"))} {(Lit_Other "=")} {(DQ (S))} {(-a)} {(DQ ($ VSub_Name "$PREVLEVEL"))} {(Lit_Other "=")} {(DQ (N))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [(ControlFlow token:<ControlFlow_Return return>)] spids: [-1 450] ) ] spids: [-1 456] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TTY) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(my_tty)})]) left_token: <Left_CommandSub "$("> spids: [461 463] ) } spids: [460] ) ] spids: [460] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$TTY"))} {(-o)} {(DQ ($ VSub_Name "$TTY"))} {(Lit_Other "=")} {(DQ (/dev/console))} {(-o)} {(DQ ($ VSub_Name "$TTY"))} {(Lit_Other "=")} {(DQ (/dev/null))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [(ControlFlow token:<ControlFlow_Return return>)] spids: [-1 503] ) ] spids: [-1 509] ) (C {(printf)} { (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ("It has been detected that the command") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (EscapedLiteralPart token:<Lit_EscapedChar "\\t">) ($ VSub_Number "$0") (" ") ($ VSub_Star "$*") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ) } ) (C {(printf)} { (DQ ("has been run from an interactive shell.") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ) } ) (C {(printf)} { (DQ ("It will probably not do what you expect, so this script will wait") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ) } ) (C {(printf)} { (DQ ("60 seconds before continuing. Press ^C to stop it.") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ) } ) (C {(printf)} { (DQ ("RUNNING THIS COMMAND IS HIGHLY DISCOURAGED!") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ) } ) (C {(sleep)} {(60)}) ] spids: [418] ) spids: [414 417] ) (FuncDef name: make_static_nodes body: (BraceGroup children: [ (AndOr children: [ (C {(Lit_Other "[")} {(-e)} {(/lib/modules/) (CommandSubPart command_list: (CommandList children:[(C {(uname)} {(-r)})]) left_token: <Left_CommandSub "$("> spids: [585 589] ) (/modules.devname) } {(Lit_Other "]")} ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] op_id: Op_DPipe ) (AndOr children: [ (C {(Lit_Other "[")} {(-x)} {(/bin/kmod)} {(Lit_Other "]")}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] op_id: Op_DPipe ) (Pipeline children: [ (C {(/bin/kmod)} {(static-nodes)} {(--format) (Lit_Other "=") (tmpfiles)} {(--output) (Lit_Other "=") (/proc/self/fd/1)} ) (While cond: [ (Sentence child: (C {(read)} {(type)} {(name)} {(mode)} {(uid)} {(gid)} {(age)} {(arg)}) terminator: <Op_Semi ";"> ) ] body: (DoGroup children: [ (AndOr children: [ (C {(Lit_Other "[")} {(-e)} {($ VSub_Name "$name")} {(Lit_Other "]")}) (ControlFlow token: <ControlFlow_Continue continue> ) ] op_id: Op_DAmp ) (Case to_match: {(DQ ($ VSub_Name "$type"))} arms: [ (case_arm pat_list: [{(c)} {(b)} {(c) (KW_Bang "!")} {(b) (KW_Bang "!")}] action: [ (C {(mknod)} {(-m)} {($ VSub_Name "$mode")} {($ VSub_Name "$name")} {($ VSub_Name "$type")} { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name "$arg")}) (C {(sed)} {(SQ <"s/:/ /">)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [698 710] ) } ) ] spids: [677 686 712 -1] ) (case_arm pat_list: [{(d)} {(d) (KW_Bang "!")}] action: [(C {(mkdir)} {($ VSub_Name "$name")})] spids: [715 719 725 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (SimpleCommand words: [ {(echo)} { (DQ ("unparseable line (") ($ VSub_Name "$type") (" ") ($ VSub_Name "$name") (" ") ($ VSub_Name "$mode") (" ") ($ VSub_Name "$uid") (" ") ($ VSub_Name "$gid") (" ") ($ VSub_Name "$age") (" ") ($ VSub_Name "$arg") (")") ) } ] redirects: [ (Redir op_id: Redir_GreatAnd fd: -1 arg_word: {(2)} spids: [751] ) ] ) ] spids: [728 729 754 -1] ) ] spids: [668 674 757] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-x)} {(/sbin/restorecon)} {(Lit_Other "]")}) terminator: <Op_Semi ";"> ) ] action: [(C {(/sbin/restorecon)} {($ VSub_Name "$name")})] spids: [-1 772] ) ] spids: [-1 780] ) ] spids: [652 783] ) ) ] negated: False ) ] spids: [577] ) spids: [573 576] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:PATH) op:Equal rhs:{(DQ ("/sbin:/bin"))} spids:[793])] spids: [793] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:NAME) op:Equal rhs:{(DQ (systemd-udevd))} spids:[798])] spids: [798] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:DAEMON) op: Equal rhs: {(DQ (/lib/systemd/systemd-udevd))} spids: [803] ) ] spids: [803] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:DESC) op: Equal rhs: {(DQ ("the hotplug events dispatcher"))} spids: [808] ) ] spids: [808] ) (AndOr children: [ (C {(Lit_Other "[")} {(-x)} {($ VSub_Name "$DAEMON")} {(Lit_Other "]")}) (C {(exit)} {(0)}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:tmpfs_size) op:Equal rhs:{(DQ (10M))} spids:[832])] spids: [832] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-e)} {(/etc/udev/udev.conf)} {(Lit_Other "]")}) terminator: <Op_Semi ";"> ) ] action: [(C {(.)} {(/etc/udev/udev.conf)})] spids: [-1 849] ) ] spids: [-1 856] ) (C {(.)} {(/lib/lsb/init-functions)}) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(supported_kernel)})] negated:True) terminator: <Op_Semi ";"> ) ] action: [ (C {(log_failure_msg)} {(DQ ("udev requires a kernel >= 2.6.32, not started"))}) (C {(log_end_msg)} {(1)}) ] spids: [-1 871] ) ] spids: [-1 885] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-e)} {(/proc/filesystems)} {(Lit_Other "]")}) terminator: <Op_Semi ";"> ) ] action: [ (C {(log_failure_msg)} {(DQ ("udev requires a mounted procfs, not started"))}) (C {(log_end_msg)} {(1)}) ] spids: [-1 901] ) ] spids: [-1 915] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(grep)} {(-q)} {(SQ <"[[:space:]]devtmpfs$">)} {(/proc/filesystems)})] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(log_failure_msg)} {(DQ ("udev requires devtmpfs support, not started"))}) (C {(log_end_msg)} {(1)}) ] spids: [-1 933] ) ] spids: [-1 947] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-d)} {(/sys/class/)} {(Lit_Other "]")}) terminator: <Op_Semi ";"> ) ] action: [ (C {(log_failure_msg)} {(DQ ("udev requires a mounted sysfs, not started"))}) (C {(log_end_msg)} {(1)}) ] spids: [-1 963] ) ] spids: [-1 977] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(ps)} {(--no-headers)} {(--format)} {(args)} {(ax)}) (C {(egrep)} {(-q)} {(SQ <"^\\[">)}) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(log_warning_msg)} {(DQ ("udev does not support containers, not started"))}) (C {(exit)} {(0)}) ] spids: [-1 1005] ) ] spids: [-1 1019] ) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr children: [ (C {(Lit_Other "[")} {(-d)} {(/sys/class/mem/null)} {(-a)} {(KW_Bang "!")} {(-L)} {(/sys/class/mem/null)} {(Lit_Other "]")} ) (C {(Lit_Other "[")} {(-e)} {(/sys/block)} {(-a)} {(KW_Bang "!")} {(-e)} {(/sys/class/block)} {(Lit_Other "]")} ) ] op_id: Op_DPipe ) terminator: <Op_Semi ";"> ) ] action: [ (C {(log_warning_msg)} {(DQ ("CONFIG_SYSFS_DEPRECATED must not be selected"))}) (C {(log_warning_msg)} {(DQ ("Booting will continue in 30 seconds but many things will be broken"))} ) (C {(sleep)} {(30)}) ] spids: [-1 1061] ) ] spids: [-1 1082] ) (Case to_match: {(DQ ($ VSub_Number "$1"))} arms: [ (case_arm pat_list: [{(start)}] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(init_is_upstart)}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [1112] ) ] ) terminator: <Op_Semi ";"> ) ] action: [(C {(exit)} {(1)})] spids: [-1 1116] ) ] spids: [-1 1124] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-e)} {(DQ (/run/udev/))} {(Lit_Other "]")}) terminator: <Op_Semi ";"> ) ] action: [(C {(warn_if_interactive)})] spids: [-1 1143] ) ] spids: [-1 1149] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(-w)} {(/sys/kernel/uevent_helper)} {(Lit_Other "]")}) terminator: <Op_Semi ";"> ) ] action: [ (SimpleCommand words: [{(echo)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(/sys/kernel/uevent_helper)} spids: [1169] ) ] ) ] spids: [-1 1164] ) ] spids: [-1 1174] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(mountpoint)} {(-q)} {(/dev/)})] negated:True) terminator: <Op_Semi ";"> ) ] action: [ (C {(unmount_devpts)}) (C {(mount_devtmpfs)}) (AndOr children: [ (C {(Lit_Other "[")} {(-d)} {(/proc/1)} {(Lit_Other "]")}) (C {(mount)} {(-n)} {(/proc)}) ] op_id: Op_DPipe ) ] spids: [-1 1189] ) ] spids: [-1 1215] ) (C {(make_static_nodes)}) (C {(udevadm)} {(info)} {(--cleanup-db)}) (AndOr children: [ (C {(Lit_Other "[")} {(-x)} {(/sbin/restorecon)} {(Lit_Other "]")}) (C {(/sbin/restorecon)} {(-R)} {(/dev)}) ] op_id: Op_DAmp ) (C {(log_daemon_msg)} {(DQ ("Starting ") ($ VSub_Name "$DESC"))} {(DQ ($ VSub_Name "$NAME"))}) (If arms: [ (if_arm cond: [ (Sentence child: (C {($ VSub_Name "$DAEMON")} {(--daemon)}) terminator: <Op_Semi ";"> ) ] action: [(C {(log_end_msg)} {($ VSub_QMark "$?")})] spids: [-1 1276] ) ] else_action: [ (C {(log_warning_msg)} {($ VSub_QMark "$?")}) (C {(log_warning_msg)} {(DQ ("Waiting 15 seconds and trying to continue anyway"))}) (C {(sleep)} {(15)}) ] spids: [1284 1304] ) (C {(log_action_begin_msg)} {(DQ ("Synthesizing the initial hotplug events"))}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(udevadm)} {(trigger)} {(--action) (Lit_Other "=") (add)}) terminator: <Op_Semi ";"> ) ] action: [(C {(log_action_end_msg)} {($ VSub_QMark "$?")})] spids: [-1 1326] ) ] else_action: [(C {(log_action_end_msg)} {($ VSub_QMark "$?")})] spids: [1334 1342] ) (C {(create_dev_makedev)}) (C {(log_action_begin_msg)} {(DQ ("Waiting for /dev to be fully populated"))}) (If arms: [ (if_arm cond: [(Sentence child:(C {(udevadm)} {(settle)}) terminator:<Op_Semi ";">)] action: [(C {(log_action_end_msg)} {(0)})] spids: [-1 1368] ) ] else_action: [(C {(log_action_end_msg)} {(0)} {(SQ <timeout>)})] spids: [1376 1388] ) ] spids: [1104 1105 1391 -1] ) (case_arm pat_list: [{(stop)}] action: [ (C {(log_daemon_msg)} {(DQ ("Stopping ") ($ VSub_Name "$DESC"))} {(DQ ($ VSub_Name "$NAME"))}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(start-stop-daemon)} {(--stop)} {(--name)} {($ VSub_Name "$NAME")} {(--user)} {(root)} {(--quiet)} {(--oknodo)} {(--retry)} {(5)} ) terminator: <Op_Semi ";"> ) ] action: [(C {(log_end_msg)} {($ VSub_QMark "$?")})] spids: [-1 1434] ) ] else_action: [(C {(log_end_msg)} {($ VSub_QMark "$?")})] spids: [1442 1450] ) ] spids: [1395 1396 1453 -1] ) (case_arm pat_list: [{(restart)}] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(init_is_upstart)}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [1465] ) ] ) terminator: <Op_Semi ";"> ) ] action: [(C {(exit)} {(1)})] spids: [-1 1469] ) ] spids: [-1 1477] ) (C {(log_daemon_msg)} {(DQ ("Stopping ") ($ VSub_Name "$DESC"))} {(DQ ($ VSub_Name "$NAME"))}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(start-stop-daemon)} {(--stop)} {(--name)} {($ VSub_Name "$NAME")} {(--user)} {(root)} {(--quiet)} {(--oknodo)} {(--retry)} {(5)} ) terminator: <Op_Semi ";"> ) ] action: [(C {(log_end_msg)} {($ VSub_QMark "$?")})] spids: [-1 1515] ) ] else_action: [ (AndOr children: [(C {(log_end_msg)} {($ VSub_QMark "$?")}) (C {(true)})] op_id: Op_DPipe ) ] spids: [1523 1535] ) (C {(log_daemon_msg)} {(DQ ("Starting ") ($ VSub_Name "$DESC"))} {(DQ ($ VSub_Name "$NAME"))}) (If arms: [ (if_arm cond: [ (Sentence child: (C {($ VSub_Name "$DAEMON")} {(--daemon)}) terminator: <Op_Semi ";"> ) ] action: [(C {(log_end_msg)} {($ VSub_QMark "$?")})] spids: [-1 1558] ) ] else_action: [(C {(log_end_msg)} {($ VSub_QMark "$?")})] spids: [1566 1574] ) ] spids: [1457 1458 1577 -1] ) (case_arm pat_list: [{(reload)} {(force-reload)}] action: [(C {(udevadm)} {(control)} {(--reload-rules)})] spids: [1581 1584 1594 -1] ) (case_arm pat_list: [{(status)}] action: [ (AndOr children: [ (C {(status_of_proc)} {($ VSub_Name "$DAEMON")} {($ VSub_Name "$NAME")}) (AndOr children: [(C {(exit)} {(0)}) (C {(exit)} {($ VSub_QMark "$?")})] op_id: Op_DPipe ) ] op_id: Op_DAmp ) ] spids: [1598 1599 1621 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (SimpleCommand words: [ {(echo)} {(DQ ("Usage: /etc/init.d/udev {start|stop|restart|reload|force-reload|status}"))} ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1635])] ) (C {(exit)} {(1)}) ] spids: [1625 1626 1644 -1] ) ] spids: [1095 1101 1646] ) (C {(exit)} {(0)}) ] )