(List (Com {[LIT_CHARS hash]} {[LIT_CHARS -r]}) (FunctionDef wait_for_ssh [] (List (= scope= flags=0 words=[] bindings=[('hostname', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('min', {[VarSub 2 test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS 1]}]}), ('max', {[VarSub 3 test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS 10]}]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub hostname]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 3), > ) (Com {[LIT_CHARS exec]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (While (Com {[LIT_CHARS true]}) (List (If (Com {[LIT_CHARS echo]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/tcp/] [VarSub hostname] [LIT_CHARS /22]} "> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (Com {[LIT_CHARS sleep]} {[ArithSub {A2 AS_OP_PLUS {A2 AS_OP_PERCENT {A Atom NODE_ARITH_WORD {[VarSub RANDOM]}} {A Atom NODE_ARITH_WORD {[VarSub max]}}} {A Atom NODE_ARITH_WORD {[VarSub min]}}}]}) ) ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 2), > ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS -]} &"> 3), > ) ) ) (FunctionDef wait_for_snapshot [] (List (= scope= flags=0 words=[] bindings=[('ip', {[DQ [VarSub 1]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub ip]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('vmname', {[DQ [ComSub (Com {[LIT_CHARS ip_to_name]} {[VarSub ip]})]]})]) (Com {[LIT_CHARS return]} {[LIT_CHARS 2]}) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Waiting to snapshot "][VarSub vmname][LIT_CHARS " at "][VarSub ip][LIT_CHARS ...]]}) (Com {[LIT_CHARS wait_for_ssh]} {[DQ [VarSub ip]]}) (Com {[LIT_CHARS VBoxManage]} {[LIT_CHARS snapshot]} {[DQ [VarSub vmname]]} {[LIT_CHARS take]} {[LIT_CHARS build_completed]} {[LIT_CHARS --description]} {[DQ [LIT_CHARS "Base OS installed"]]}) ) ) (FunctionDef ip_to_name [] (List (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub 1]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (= scope= flags=0 words=[] bindings=[('l', {[DQ [VarSub 1 transform_ops=[VS_UNARY_DPOUND {[LIT_CHARS "*."]}]]]})]) (= scope= flags=0 words=[] bindings=[('l', {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub l]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 10]}}}]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS bcpc-vm][VarSub l]]}) ) ) (For ip [{[LIT_CHARS 10.0.100.] [LIT_LBRACE "{"] [LIT_CHARS 11..13] [LIT_RBRACE "}"]}]) (Com {[LIT_CHARS eval]} {[DQ [LIT_CHARS "wait_for_snapshot "][VarSub ip][LIT_CHARS " &"]]}) ) (Com {[LIT_CHARS wait]}) )