(CommandList
  children: [
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Pound '$#'))} {(KW_Bang '!') (Lit_Other '=')} {(3)} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ ('Usage: add-memzip.sh input.hex output.hex file-directory'))})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [16777215 20]
        )
      ]
      spids: [16777215 34]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:input_hex)
          op: Equal
          rhs: {($ VSub_Number '$1')}
          spids: [41]
        )
      ]
      spids: [41]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:output_hex)
          op: Equal
          rhs: {($ VSub_Number '$2')}
          spids: [44]
        )
      ]
      spids: [44]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:memzip_src_dir)
          op: Equal
          rhs: {($ VSub_Number '$3')}
          spids: [47]
        )
      ]
      spids: [47]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:input_bin)
          op: Equal
          rhs: {(${ VSub_Name input_hex) (.bin)}
          spids: [51]
        )
      ]
      spids: [51]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:output_bin)
          op: Equal
          rhs: {(${ VSub_Name output_hex) (.bin)}
          spids: [57]
        )
      ]
      spids: [57]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:zip_file)
          op: Equal
          rhs: {(${ VSub_Name output_hex) (.zip)}
          spids: [63]
        )
      ]
      spids: [63]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:zip_base)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(basename)} {(${ VSub_Name zip_file)})])
                left_token: <Left_CommandSub '$('>
                spids: [70 76]
              )
            }
          spids: [69]
        )
      ]
      spids: [69]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:zip_dir)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(dirname)} {(${ VSub_Name zip_file)})])
                left_token: <Left_CommandSub '$('>
                spids: [79 85]
              )
            }
          spids: [78]
        )
      ]
      spids: [78]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:abs_zip_dir)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(realpath)} {(${ VSub_Name zip_dir)})])
                left_token: <Left_CommandSub '$('>
                spids: [88 94]
              )
            }
          spids: [87]
        )
      ]
      spids: [87]
    )
    (C {(rm)} {(-f)} {(${ VSub_Name zip_file)})
    (Subshell
      child: 
        (CommandList
          children: [
            (Sentence
              child: (C {(cd)} {(${ VSub_Name memzip_src_dir)})
              terminator: <Op_Semi ';'>
            )
            (C {(zip)} {(-0)} {(-r)} {(-D)} {(${ VSub_Name abs_zip_dir) (/) (${ VSub_Name zip_base)} {(.)})
          ]
        )
      spids: [105 130]
    )
    (C {(objcopy)} {(-I)} {(ihex)} {(-O)} {(binary)} {(${ VSub_Name input_hex)} {(${ VSub_Name input_bin)})
    (SimpleCommand
      words: [{(cat)} {(${ VSub_Name input_bin)} {(${ VSub_Name zip_file)}]
      redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(${ VSub_Name output_bin)})]
    )
    (C {(objcopy)} {(-I)} {(binary)} {(-O)} {(ihex)} {(${ VSub_Name output_bin)} {(${ VSub_Name output_hex)})
    (C {(echo)} 
      {
        (DQ ('Added ') (${ VSub_Name memzip_src_dir) (' to ') (${ VSub_Name input_hex) (' creating ') 
          (${ VSub_Name output_hex)
        )
      }
    )
  ]
)