(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} 
                      {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.Simple
              words: [{<echo>} {(DQ <'USAGE:  '> ($ Id.VSub_Number '$0') <' DISTFILE'>)}]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [47 64]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} {($ Id.VSub_Number '$1')} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.Simple
              words: [{<echo>} {($ Id.VSub_Number '$1') (DQ <': File not found.'>)}]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [86 99]
        )
      ]
    )
    (C {<set>} {<-ex>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LANGUAGES)
          op: assign_op.Equal
          rhs: {(DQ <'cpp csharp java javanano js objectivec python ruby php'>)}
          spids: [125]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BASENAME)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<basename>} {($ Id.VSub_Number '$1')} {<.tar.gz>})
              )
            }
          spids: [130]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name BASENAME>
                suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 9>})
              )
            }
          spids: [141]
        )
      ]
    )
    (C {<mkdir>} {<dist>})
    (C {<cp>} {($ Id.VSub_Number '$1')} {<dist>})
    (C {<cd>} {<dist>})
    (C {<tar>} {<zxvf>} {($ Id.VSub_DollarName '$BASENAME') <.tar.gz>})
    (C {<rm>} {($ Id.VSub_DollarName '$BASENAME') <.tar.gz>})
    (C {<chmod>} {<-R>} {<u> <Id.Lit_Other '+'> <w>} {($ Id.VSub_DollarName '$BASENAME')})
    (C {<cd>} {($ Id.VSub_DollarName '$BASENAME')})
    (command.ForEach
      iter_name: LANG
      iter_words: [{($ Id.VSub_DollarName '$LANGUAGES')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {<'./configure'>} {<Id.Lit_VarLike 'DIST_LANG='> ($ Id.VSub_DollarName '$LANG')})
            (C {<make>} {<dist-gzip>})
            (C {<mv>} {($ Id.VSub_DollarName '$BASENAME') <.tar.gz>} 
              {<'../protobuf-'> ($ Id.VSub_DollarName '$LANG') <-> ($ Id.VSub_DollarName '$VERSION') 
                <.tar.gz>
              }
            )
          ]
        )
    )
    (C {<todos>} {<Id.Lit_Star '*'> <.txt>} {<Id.Lit_Star '*'> <'/'> <Id.Lit_Star '*'> <.txt>})
    (command.ForEach
      iter_name: LANG
      iter_words: [{($ Id.VSub_DollarName '$LANGUAGES')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {<'./configure'>} {<Id.Lit_VarLike 'DIST_LANG='> ($ Id.VSub_DollarName '$LANG')})
            (C {<make>} {<dist-zip>})
            (C {<mv>} {($ Id.VSub_DollarName '$BASENAME') <.zip>} 
              {<'../protobuf-'> ($ Id.VSub_DollarName '$LANG') <-> ($ Id.VSub_DollarName '$VERSION') 
                <.zip>
              }
            )
          ]
        )
    )
    (C {<cd>} {<..>})
    (C {<rm>} {<-rf>} {($ Id.VSub_DollarName '$BASENAME')})
  ]
)