(CommandList
  children: [
    (FuncDef
      name: clean_up
      body: 
        (BraceGroup
          children: [(C {(rm)} {(-f)} {($ VSub_Name '$TMP_FILE')}) (C {(exit)})]
          spids: [68]
        )
      spids: [64 67]
    )
    (C {(trap)} {(clean_up)} {(HUP)} {(INT)} {(TERM)})
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ('Usage: ') ($ VSub_Number '$0') (' [OPTIONS] [CONFIG [...]]'))})
            (C {(echo)} {(DQ ('  -h    display this help text'))})
            (C {(echo)} {(DQ ('  -m    only merge the fragments, do not execute the make command'))})
            (C {(echo)} {(DQ ('  -n    use allnoconfig instead of alldefconfig'))})
            (C {(echo)} {(DQ ('  -r    list redundant entries when merging fragments'))})
            (C {(echo)} 
              {
                (DQ ('  -O    dir to put generated output files.  Consider setting ') 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('KCONFIG_CONFIG instead.')
                )
              }
            )
          ]
          spids: [97]
        )
      spids: [93 96]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:RUNMAKE) op:Equal rhs:{(true)} spids:[148])]
      spids: [148]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ALLTARGET) op:Equal rhs:{(alldefconfig)} spids:[151])]
      spids: [151]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:WARNREDUN) op:Equal rhs:{(false)} spids:[154])]
      spids: [154]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OUTPUT) op:Equal rhs:{(.)} spids:[157])]
      spids: [157]
    )
    (While
      cond: [(Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(DQ (-n))}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ALLTARGET)
                          op: Equal
                          rhs: {(allnoconfig)}
                          spids: [182]
                        )
                      ]
                      spids: [182]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [177 179 192 16777215]
                )
                (case_arm
                  pat_list: [{(DQ (-m))}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:RUNMAKE)
                          op: Equal
                          rhs: {(false)}
                          spids: [201]
                        )
                      ]
                      spids: [201]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [196 198 211 16777215]
                )
                (case_arm
                  pat_list: [{(DQ (-h))}]
                  action: [(C {(usage)}) (C {(exit)})]
                  spids: [215 217 226 16777215]
                )
                (case_arm
                  pat_list: [{(DQ (-r))}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:WARNREDUN)
                          op: Equal
                          rhs: {(true)}
                          spids: [235]
                        )
                      ]
                      spids: [235]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [230 232 245 16777215]
                )
                (case_arm
                  pat_list: [{(DQ (-O))}]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-d)} {($ VSub_Number '$2')} {(Lit_Other ']')})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:OUTPUT)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [
                                              (Pipeline
                                                children: [
                                                  (C {(echo)} {($ VSub_Number '$2')})
                                                  (C {(sed)} {(SQ <'s/\\/*$//'>)})
                                                ]
                                                negated: False
                                              )
                                            ]
                                          )
                                        left_token: <Left_CommandSub '$('>
                                        spids: [268 280]
                                      )
                                    }
                                  spids: [267]
                                )
                              ]
                              spids: [267]
                            )
                          ]
                          spids: [16777215 264]
                        )
                      ]
                      else_action: [
                        (SimpleCommand
                          words: [
                            {(echo)}
                            {(DQ ('output directory ') ($ VSub_Number '$2') (' does not exist'))}
                          ]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[294])]
                        )
                        (C {(exit)} {(1)})
                      ]
                      spids: [283 303]
                    )
                    (C {(shift)} {(2)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [249 251 314 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [(ControlFlow token:<ControlFlow_Break break>)]
                  spids: [317 318 324 16777215]
                )
              ]
              spids: [169 173 327]
            )
          ]
          spids: [166 329]
        )
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {(DQ ($ VSub_Pound '$#'))} {(-lt)} {(1)} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(usage)}) (C {(exit)})]
          spids: [16777215 348]
        )
      ]
      spids: [16777215 356]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$KCONFIG_CONFIG'))} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$OUTPUT'))} 
                          {(KW_Bang '!') (Lit_Other '=')} {(.)} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:KCONFIG_CONFIG)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(readlink)} {(-m)} {(--)} 
                                        {(DQ ($ VSub_Name '$OUTPUT') (/.config))}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [395 406]
                              )
                            }
                          spids: [394]
                        )
                      ]
                      spids: [394]
                    )
                  ]
                  spids: [16777215 391]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:KCONFIG_CONFIG)
                      op: Equal
                      rhs: {(.config)}
                      spids: [412]
                    )
                  ]
                  spids: [412]
                )
              ]
              spids: [409 416]
            )
          ]
          spids: [16777215 372]
        )
      ]
      spids: [16777215 418]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:INITFILE)
          op: Equal
          rhs: {($ VSub_Number '$1')}
          spids: [421]
        )
      ]
      spids: [421]
    )
    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(KW_Bang '!')} {(-r)} {(DQ ($ VSub_Name '$INITFILE'))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (SimpleCommand
              words: [
                {(echo)}
                {(DQ ("The base file '") ($ VSub_Name '$INITFILE') ("' does not exist.  Exit."))}
              ]
              redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[454])]
            )
            (C {(exit)} {(1)})
          ]
          spids: [16777215 443]
        )
      ]
      spids: [16777215 462]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:MERGE_LIST)
          op: Equal
          rhs: {($ VSub_Star '$*')}
          spids: [465]
        )
      ]
      spids: [465]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SED_CONFIG_EXP)
          op: Equal
          rhs: 
            {
              (DQ ('s/^') (Lit_Other '\\') ('(# ') (Lit_Other '\\') (')') (Lit_Other '\\') ('{0,1') 
                (Lit_Other '\\') ('}') (Lit_Other '\\') ('(CONFIG_[a-zA-Z0-9_]*') (Lit_Other '\\') (')[= ].*/') (Lit_Other '\\') (2/p)
              )
            }
          spids: [468]
        )
      ]
      spids: [468]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TMP_FILE)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(mktemp)} {(./.tmp.config.XXXXXXXXXX)})])
                left_token: <Left_CommandSub '$('>
                spids: [488 492]
              )
            }
          spids: [487]
        )
      ]
      spids: [487]
    )
    (C {(echo)} {(DQ ('Using ') ($ VSub_Name '$INITFILE') (' as base'))})
    (SimpleCommand
      words: [{(cat)} {($ VSub_Name '$INITFILE')}]
      redirects: [
        (Redir
          op_id: Redir_Great
          fd: 16777215
          arg_word: {($ VSub_Name '$TMP_FILE')}
          spids: [507]
        )
      ]
    )
    (ForEach
      iter_name: MERGE_FILE
      iter_words: [{($ VSub_Name '$MERGE_LIST')}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (C {(echo)} {(DQ ('Merging ') ($ VSub_Name '$MERGE_FILE'))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(-r)} {(DQ ($ VSub_Name '$MERGE_FILE'))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("The merge file '") ($ VSub_Name '$MERGE_FILE') 
                            ("' does not exist.  Exit.")
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[562])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [16777215 551]
                )
              ]
              spids: [16777215 571]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CFG_LIST)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(sed)} {(-n)} {(DQ ($ VSub_Name '$SED_CONFIG_EXP'))} 
                                {($ VSub_Name '$MERGE_FILE')}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [575 585]
                      )
                    }
                  spids: [574]
                )
              ]
              spids: [574]
            )
            (ForEach
              iter_name: CFG
              iter_words: [{($ VSub_Name '$CFG_LIST')}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {(grep)} {(-q)} {(-w)} {($ VSub_Name '$CFG')} {($ VSub_Name '$TMP_FILE')})
                        (ControlFlow token:<ControlFlow_Continue continue>)
                      ]
                      op_id: Op_DPipe
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:PREV_VAL)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(grep)} {(-w)} {($ VSub_Name '$CFG')} 
                                        {($ VSub_Name '$TMP_FILE')}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [618 626]
                              )
                            }
                          spids: [617]
                        )
                      ]
                      spids: [617]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:NEW_VAL)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(grep)} {(-w)} {($ VSub_Name '$CFG')} 
                                        {($ VSub_Name '$MERGE_FILE')}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [630 638]
                              )
                            }
                          spids: [629]
                        )
                      ]
                      spids: [629]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ (x) ($ VSub_Name '$PREV_VAL'))} 
                                  {(KW_Bang '!') (Lit_Other '=')} {(DQ (x) ($ VSub_Name '$NEW_VAL'))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} {(Value)} {(of)} {($ VSub_Name '$CFG')} {(is)} {(redefined)} {(by)} 
                              {(fragment)} {($ VSub_Name '$MERGE_FILE') (Lit_Other ':')}
                            )
                            (C {(echo)} {(Previous)} {(value) (Lit_Other ':')} 
                              {($ VSub_Name '$PREV_VAL')}
                            )
                            (C {(echo)} {(New)} {(value) (Lit_Other ':')} {($ VSub_Name '$NEW_VAL')})
                            (C {(echo)})
                          ]
                          spids: [16777215 662]
                        )
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$WARNREDUN'))} {(Lit_Other '=')} 
                                  {(DQ (true))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} {(Value)} {(of)} {($ VSub_Name '$CFG')} {(is)} {(redundant)} {(by)} 
                              {(fragment)} {($ VSub_Name '$MERGE_FILE') (Lit_Other ':')}
                            )
                          ]
                          spids: [708 725]
                        )
                      ]
                      spids: [16777215 748]
                    )
                    (C {(sed)} {(-i)} {(DQ (/) ($ VSub_Name '$CFG') ('[ =]/d'))} 
                      {($ VSub_Name '$TMP_FILE')}
                    )
                  ]
                  spids: [599 764]
                )
              spids: [594 597]
            )
            (SimpleCommand
              words: [{(cat)} {($ VSub_Name '$MERGE_FILE')}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {($ VSub_Name '$TMP_FILE')}
                  spids: [771]
                )
              ]
            )
          ]
          spids: [525 775]
        )
      spids: [520 523]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$RUNMAKE'))} {(Lit_Other '=')} {(DQ (false))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(cp)} {(-T)} {(--)} {(DQ ($ VSub_Name '$TMP_FILE'))} {(DQ ($ VSub_Name '$KCONFIG_CONFIG'))})
            (C {(echo)} {(DQ ('#'))})
            (C {(echo)} 
              {
                (DQ ('# merged configuration written to ') ($ VSub_Name '$KCONFIG_CONFIG') 
                  (' (needs make)')
                )
              }
            )
            (C {(echo)} {(DQ ('#'))})
            (C {(clean_up)})
            (C {(exit)})
          ]
          spids: [16777215 795]
        )
      ]
      spids: [16777215 841]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OUTPUT_ARG) op:Equal rhs:{(DQ )} spids:[850])]
      spids: [850]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$OUTPUT'))} {(KW_Bang '!') (Lit_Other '=')} 
                  {(DQ (.))} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:OUTPUT_ARG)
                  op: Equal
                  rhs: {(DQ ('O=') ($ VSub_Name '$OUTPUT'))}
                  spids: [876]
                )
              ]
              spids: [876]
            )
          ]
          spids: [16777215 873]
        )
      ]
      spids: [16777215 882]
    )
    (C {(make)} {(Lit_VarLike 'KCONFIG_ALLCONFIG=') ($ VSub_Name '$TMP_FILE')} 
      {($ VSub_Name '$OUTPUT_ARG')} {($ VSub_Name '$ALLTARGET')}
    )
    (ForEach
      iter_name: CFG
      iter_words: [
        {
          (CommandSubPart
            command_list: 
              (CommandList
                children: [
                  (C {(sed)} {(-n)} {(DQ ($ VSub_Name '$SED_CONFIG_EXP'))} {($ VSub_Name '$TMP_FILE')})
                ]
              )
            left_token: <Left_CommandSub '$('>
            spids: [915 925]
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:REQUESTED_VAL)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(grep)} {(-w)} {(-e)} {(DQ ($ VSub_Name '$CFG'))} 
                                {($ VSub_Name '$TMP_FILE')}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [933 945]
                      )
                    }
                  spids: [932]
                )
              ]
              spids: [932]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ACTUAL_VAL)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(grep)} {(-w)} {(-e)} {(DQ ($ VSub_Name '$CFG'))} 
                                {(DQ ($ VSub_Name '$KCONFIG_CONFIG'))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [949 963]
                      )
                    }
                  spids: [948]
                )
              ]
              spids: [948]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ (x) ($ VSub_Name '$REQUESTED_VAL'))} 
                          {(KW_Bang '!') (Lit_Other '=')} {(DQ (x) ($ VSub_Name '$ACTUAL_VAL'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ ('Value requested for ') ($ VSub_Name '$CFG') (' not in final .config'))}
                    )
                    (C {(echo)} {(DQ ('Requested value:  ') ($ VSub_Name '$REQUESTED_VAL'))})
                    (C {(echo)} {(DQ ('Actual value:     ') ($ VSub_Name '$ACTUAL_VAL'))})
                    (C {(echo)} {(DQ )})
                  ]
                  spids: [16777215 987]
                )
              ]
              spids: [16777215 1021]
            )
          ]
          spids: [928 1023]
        )
      spids: [914 926]
    )
    (C {(clean_up)})
  ]
)