(If (DBracket {B1 UNARY_STRING_z {[DQ [VarSub VBM]]}}) (List (If (Pipeline! (Com {[LIT_CHARS command]} {[LIT_CHARS -v]} {[LIT_CHARS VBoxManage]} < (DescriptorRedirectNode target={[LIT_CHARS /dev/null]} &"> 1), > ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "VBoxManage not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " Please ensure VirtualBox is installed and VBoxManage is on your system PATH."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (FunctionDef check_version [] (List (= scope= flags=0 words=[] bindings=[('MIN_MAJOR', {[LIT_CHARS 4]})]) (= scope= flags=0 words=[] bindings=[('MIN_MINOR', {[LIT_CHARS 3]})]) (= scope= flags=0 words=[] bindings=[('IFS', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('version', {[DQ [ComSub (Com {[LIT_CHARS VBoxManage]} {[LIT_CHARS --version]})]]})]) (= scope= flags=0 words=[{[LIT_CHARS version_array]}] bindings=[]) (Com {[LIT_CHARS read]} {[LIT_CHARS -a]} {[LIT_CHARS version_array]} < (HereWordRedirectNode here_word={[DQ [VarSub version]]} 0), > ) (If (Pipeline! (DBracket {B? LOGICAL_BINARY_AND {B2 BINARY_INT_GE {[DQ [VarSub version_array bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 0]}})]]} {[DQ [VarSub MIN_MAJOR]]}} {B2 BINARY_INT_GE {[DQ [VarSub version_array bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}})]]} {[DQ [VarSub MIN_MINOR]]}}}) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "ERROR: VirtualBox "][VarSub version][LIT_CHARS " is less than "][VarSub MIN_MAJOR][LIT_CHARS .][VarSub MIN_MINOR][LIT_CHARS ".x!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " Only VirtualBox >= "][VarSub MIN_MAJOR][LIT_CHARS .][VarSub MIN_MINOR][LIT_CHARS ".x is officially supported."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) ) (Com {[LIT_CHARS check_version]} ) (Com {[LIT_CHARS unset]} {[LIT_CHARS -f]} {[LIT_CHARS check_version]} ) (= scope= flags=1 words=[] bindings=[('VBM', {[LIT_CHARS VBoxManage]})]) ) )