(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [
                          (C {(cd)} 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(dirname)} 
                                          {
                                            (DQ 
                                              (BracedVarSub
                                                token: <VSub_Name BASH_SOURCE>
                                                bracket_op: 
                                                  (ArrayIndex
                                                    expr: (ArithWord w:{(Lit_Digits 0)})
                                                  )
                                                spids: [57 62]
                                              )
                                            )
                                          }
                                        )
                                      ]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [53 64]
                                )
                              )
                            }
                          )
                          (C {(pwd)})
                        ]
                        op_id: Op_DAmp
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [49 70]
              )
            }
          spids: [48]
        )
      ]
      spids: [48]
    )
    (AndOr
      children: [
        (C {(source)} {(${ VSub_Name DIR) (/testenv.sh)})
        (BraceGroup
          children: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(echo)} {(DQ ("testenv.sh not found!"))}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[89])]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">)
          ]
          spids: [81]
        )
      ]
      op_id: Op_DPipe
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:PLATFORM)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [(C {(uname)} {(-s)}) (C {(tr)} {(SQ <A-Z>)} {(SQ <a-z>)})]
                          negated: False
                        )
                      ]
                    )
                  left_token: <Left_CommandSub "$(">
                  spids: [105 121]
                )
              )
            }
          spids: [103]
        )
      ]
      spids: [101]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(DQ (${ VSub_Name PLATFORM))} {(Lit_Other "=")} {(DQ (darwin))} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:MAGIC_TIMESTAMP)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(date)} {(-r)} {(0)} {(DQ ("+%b %e  %Y"))})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [150 160]
                        )
                      )
                    }
                  spids: [148]
                )
              ]
              spids: [146]
            )
          ]
          spids: [-1 143]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_Readonly
          pairs: [
            (assign_pair
              lhs: (LhsName name:MAGIC_TIMESTAMP)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (CommandSubPart
                      command_list: 
                        (CommandList
                          children: [
                            (C {(date)} {(--date) (Lit_Other "=") (Lit_Other "@") (0)} {(DQ ("+%F %R"))})
                          ]
                        )
                      left_token: <Left_CommandSub "$(">
                      spids: [170 181]
                    )
                  )
                }
              spids: [168]
            )
          ]
          spids: [166]
        )
      ]
      spids: [163 184]
    )
    (FuncDef
      name: EXPECT_CONTAINS
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:complete)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 1))}
                  spids: [198]
                )
              ]
              spids: [196]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:substring)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 2))}
                  spids: [208]
                )
              ]
              spids: [206]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:message)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Number 3>
                          suffix_op: 
                            (StringUnary
                              op_id: VTest_ColonHyphen
                              arg_word: 
                                {("Expected '") (${ VSub_Name substring) ("' not found in '") 
                                  (${ VSub_Name complete) ("'")
                                }
                            )
                          spids: [220 232]
                        )
                      )
                    }
                  spids: [218]
                )
              ]
              spids: [216]
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(echo)} {(DQ (${ VSub_Name complete))})
                    (C {(grep)} {(-Fsq)} {(--)} {(DQ (${ VSub_Name substring))})
                  ]
                  negated: False
                )
                (C {(fail)} {(DQ ($ VSub_Name "$message"))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [193]
        )
      spids: [187 192]
    )
    (FuncDef
      name: check_property
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:property)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 1))}
                  spids: [283]
                )
              ]
              spids: [281]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tarball)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 2))}
                  spids: [293]
                )
              ]
              spids: [291]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:layer)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 3))}
                  spids: [303]
                )
              ]
              spids: [301]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 4))}
                  spids: [313]
                )
              ]
              spids: [311]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_data)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name tarball) (.tar))}
                  spids: [323]
                )
              ]
              spids: [321]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:metadata)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} 
                                  {(DQ (./) (${ VSub_Name layer) (/json))}
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [341 359]
                        )
                      )
                    }
                  spids: [339]
                )
              ]
              spids: [337]
            )
            (C {(EXPECT_CONTAINS)} {(DQ (${ VSub_Name metadata))} 
              {
                (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (${ VSub_Name property) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (": ") (${ VSub_Name expected)
                )
              }
            )
          ]
          spids: [278]
        )
      spids: [272 277]
    )
    (FuncDef
      name: check_no_property
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:property)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 1))}
                  spids: [402]
                )
              ]
              spids: [400]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tarball)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 2))}
                  spids: [412]
                )
              ]
              spids: [410]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:layer)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 3))}
                  spids: [422]
                )
              ]
              spids: [420]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_data)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name tarball) (.tar))}
                  spids: [432]
                )
              ]
              spids: [430]
            )
            (SimpleCommand
              words: [
                {(tar)}
                {(xOf)}
                {(DQ (${ VSub_Name test_data))}
                {(DQ (./) (${ VSub_Name layer) (/json))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [464]
                )
              ]
            )
            (C {(expect_not_log)} 
              {
                (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (${ VSub_Name property) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (":")
                )
              }
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_data)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/notop_) (${ VSub_Name tarball) (.tar))}
                  spids: [485]
                )
              ]
              spids: [485]
            )
            (SimpleCommand
              words: [
                {(tar)}
                {(xOf)}
                {(DQ (${ VSub_Name test_data))}
                {(DQ (./) (${ VSub_Name layer) (/json))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [516]
                )
              ]
            )
            (C {(expect_not_log)} 
              {
                (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (${ VSub_Name property) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (":")
                )
              }
            )
          ]
          spids: [397]
        )
      spids: [391 396]
    )
    (FuncDef
      name: check_size
      body: 
        (BraceGroup
          children: [(C {(check_property)} {(Size)} {(DQ (${ VSub_At "@"))})]
          spids: [540]
        )
      spids: [534 539]
    )
    (FuncDef
      name: check_id
      body: (BraceGroup children:[(C {(check_property)} {(id)} {(DQ (${ VSub_At "@"))})] spids:[562])
      spids: [556 561]
    )
    (FuncDef
      name: check_parent
      body: 
        (BraceGroup
          children: [(C {(check_property)} {(parent)} {(DQ (${ VSub_At "@"))})]
          spids: [584]
        )
      spids: [578 583]
    )
    (FuncDef
      name: check_entrypoint
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [609]
                )
              ]
              spids: [609]
            )
            (C {(shift)})
            (C {(check_property)} {(Entrypoint)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
            (C {(check_property)} {(Entrypoint)} {(DQ (notop_) (${ VSub_Name input))} 
              {(DQ (${ VSub_At "@"))}
            )
          ]
          spids: [606]
        )
      spids: [600 605]
    )
    (FuncDef
      name: check_cmd
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [664]
                )
              ]
              spids: [664]
            )
            (C {(shift)})
            (C {(check_property)} {(Cmd)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
            (C {(check_property)} {(Cmd)} {(DQ (notop_) (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
          ]
          spids: [661]
        )
      spids: [655 660]
    )
    (FuncDef
      name: check_ports
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [719]
                )
              ]
              spids: [719]
            )
            (C {(shift)})
            (C {(check_property)} {(ExposedPorts)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
            (C {(check_property)} {(ExposedPorts)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
          ]
          spids: [716]
        )
      spids: [710 715]
    )
    (FuncDef
      name: check_volumes
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [773]
                )
              ]
              spids: [773]
            )
            (C {(shift)})
            (C {(check_property)} {(Volumes)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
            (C {(check_property)} {(Volumes)} {(DQ (notop_) (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
          ]
          spids: [770]
        )
      spids: [764 769]
    )
    (FuncDef
      name: check_env
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [828]
                )
              ]
              spids: [828]
            )
            (C {(shift)})
            (C {(check_property)} {(Env)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
            (C {(check_property)} {(Env)} {(DQ (notop_) (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
          ]
          spids: [825]
        )
      spids: [819 824]
    )
    (FuncDef
      name: check_label
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [883]
                )
              ]
              spids: [883]
            )
            (C {(shift)})
            (C {(check_property)} {(Label)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
            (C {(check_property)} {(Label)} {(DQ (notop_) (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
          ]
          spids: [880]
        )
      spids: [874 879]
    )
    (FuncDef
      name: check_workdir
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [938]
                )
              ]
              spids: [938]
            )
            (C {(shift)})
            (C {(check_property)} {(WorkingDir)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
            (C {(check_property)} {(WorkingDir)} {(DQ (notop_) (${ VSub_Name input))} 
              {(DQ (${ VSub_At "@"))}
            )
          ]
          spids: [935]
        )
      spids: [929 934]
    )
    (FuncDef
      name: check_user
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [993]
                )
              ]
              spids: [993]
            )
            (C {(shift)})
            (C {(check_property)} {(User)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
            (C {(check_property)} {(User)} {(DQ (notop_) (${ VSub_Name input))} {(DQ (${ VSub_At "@"))})
          ]
          spids: [990]
        )
      spids: [984 989]
    )
    (FuncDef
      name: check_layers_aux
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {(${ VSub_Number 1)}
                  spids: [1050]
                )
              ]
              spids: [1048]
            )
            (C {(shift)} {(1)})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected_layers)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(${ VSub_Star "*")}])}
                  spids: [1063]
                )
              ]
              spids: [1061]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected_layers_sorted)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (ForEach
                                          iter_name: i
                                          iter_words: [
                                            {
                                              (BracedVarSub
                                                token: <VSub_Name expected_layers>
                                                bracket_op: (WholeArray op_id:Arith_Star)
                                                spids: [1085 1090]
                                              )
                                            }
                                          ]
                                          do_arg_iter: False
                                          body: 
                                            (DoGroup
                                              children: [
                                                (Sentence
                                                  child: (C {(echo)} {($ VSub_Name "$i")})
                                                  terminator: <Op_Semi ";">
                                                )
                                              ]
                                              spids: [1093 1100]
                                            )
                                          spids: [1084 1091]
                                        )
                                        (C {(sort)})
                                      ]
                                      negated: False
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub "$(">
                              spids: [1078 1105]
                            )
                          }
                        ]
                      )
                    }
                  spids: [1074]
                )
              ]
              spids: [1072]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_data)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name input) (.tar))}
                  spids: [1113]
                )
              ]
              spids: [1111]
            )
            (C {(tar)} {(tvf)} {(DQ (${ VSub_Name test_data))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:actual_layers)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(tar)} {(tvf)} {(${ VSub_Name test_data)})
                                        (C {(tr)} {(-s)} {(SQ <" ">)})
                                        (C {(cut)} {(-d) (SQ <" ">)} {(-f)} {(4-)})
                                        (C {(sort)})
                                        (C {(cut)} {(-d) (SQ </>)} {(-f)} {(2)})
                                        (C {(grep)} {(-E)} {(SQ <"^[0-9a-f]+$">)})
                                        (C {(sort)})
                                        (C {(uniq)})
                                      ]
                                      negated: False
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub "$(">
                              spids: [1149 1217]
                            )
                          }
                        ]
                      )
                    }
                  spids: [1145]
                )
              ]
              spids: [1143]
            )
            (C {(echo)} {(Expected) (Lit_Other ":")} 
              {
                (BracedVarSub
                  token: <VSub_Name expected_layers_sorted>
                  bracket_op: (WholeArray op_id:Lit_At)
                  spids: [1231 1236]
                )
              }
            )
            (C {(echo)} {(Actual) (Lit_Other ":")} 
              {
                (BracedVarSub
                  token: <VSub_Name actual_layers>
                  bracket_op: (WholeArray op_id:Lit_At)
                  spids: [1244 1249]
                )
              }
            )
            (C {(check_eq)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name expected_layers>
                    prefix_op: VSub_Pound
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [1256 1262]
                  )
                )
              } 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name actual_layers>
                    prefix_op: VSub_Pound
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [1266 1272]
                  )
                )
              }
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[1279])]
              spids: [1277]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:parent) op:Equal rhs:{(SQ )} spids:[1285])]
              spids: [1283]
            )
            (While
              cond: [
                (C {(Lit_Other "[")} {(DQ (${ VSub_Name index))} {(-lt)} 
                  {
                    (DQ 
                      (BracedVarSub
                        token: <VSub_Name expected_layers>
                        prefix_op: VSub_Pound
                        bracket_op: (WholeArray op_id:Lit_At)
                        spids: [1301 1307]
                      )
                    )
                  } {(Lit_Other "]")}
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (C {(check_eq)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name expected_layers_sorted>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")}))
                            spids: [1323 1328]
                          )
                        )
                      } 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name actual_layers>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")}))
                            spids: [1332 1337]
                          )
                        )
                      }
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:layer)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name expected_layers>
                                  bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$index")}))
                                  spids: [1350 1355]
                                )
                              )
                            }
                          spids: [1348]
                        )
                      ]
                      spids: [1346]
                    )
                    (C {(echo)} {(Checking)} {(layer) (Lit_Other ":")} {(DQ (${ VSub_Name layer))})
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:listing)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (Pipeline
                                          children: [
                                            (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} 
                                              {(DQ (./) (${ VSub_Name layer) (/layer.tar))}
                                            )
                                            (C {(tar)} {(tv)})
                                          ]
                                          negated: False
                                        )
                                      ]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [1383 1407]
                                )
                              )
                            }
                          spids: [1381]
                        )
                      ]
                      spids: [1379]
                    )
                    (C {(check_eq)} 
                      {
                        (DQ 
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (AndOr
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(echo)} {(DQ (${ VSub_Name listing))})
                                          (C {(grep)} {(-Fv)} {(DQ (${ VSub_Name MAGIC_TIMESTAMP))})
                                        ]
                                        negated: False
                                      )
                                      (C {(true)})
                                    ]
                                    op_id: Op_DPipe
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [1419 1443]
                          )
                        )
                      } {(DQ )}
                    )
                    (C {(check_id)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_Name layer))} 
                      {
                        (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (${ VSub_Name layer) 
                          (EscapedLiteralPart
                            token: <Lit_EscapedChar "\\\"">
                          )
                        )
                      }
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: (BoolUnary op_id:BoolUnary_n child:{(DQ (${ VSub_Name parent))})
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(check_parent)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_Name layer))} 
                              {
                                (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                                  (${ VSub_Name parent) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                                )
                              }
                            )
                          ]
                          spids: [-1 1494]
                        )
                      ]
                      spids: [-1 1520]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:layer_size)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} 
                                            {(DQ (./) (${ VSub_Name layer) (/layer.tar))}
                                          )
                                          (C {(wc)} {(-c)})
                                          (C {(xargs)})
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1531 1559]
                              )
                            }
                          spids: [1530]
                        )
                      ]
                      spids: [1528]
                    )
                    (C {(check_size)} {(DQ (${ VSub_Name input))} {(DQ (${ VSub_Name layer))} 
                      {(DQ (${ VSub_Name layer_size))}
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:index)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Plus
                                    left: (ArithVarRef name:index)
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [1585 1592]
                              )
                            }
                          spids: [1584]
                        )
                      ]
                      spids: [1584]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:parent)
                          op: Equal
                          rhs: {($ VSub_Name "$layer")}
                          spids: [1595]
                        )
                      ]
                      spids: [1595]
                    )
                  ]
                  spids: [1313 1599]
                )
            )
          ]
          spids: [1045]
        )
      spids: [1039 1044]
    )
    (FuncDef
      name: check_layers
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [1615]
                )
              ]
              spids: [1613]
            )
            (C {(shift)})
            (C {(check_layers_aux)} {(DQ ($ VSub_Name "$input"))} {(DQ ($ VSub_At "$@"))})
            (C {(check_layers_aux)} {(DQ (notop_) ($ VSub_Name "$input"))} {(DQ ($ VSub_At "$@"))})
          ]
          spids: [1610]
        )
      spids: [1604 1609]
    )
    (FuncDef
      name: test_gen_image
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(grep)} {(-Fsq)} {(DQ (./gen.out))} 
                  {(DQ ($ VSub_Name "$TEST_DATA_DIR") (/gen_image.tar))}
                )
                (C {(fail)} 
                  {
                    (DQ ("'./gen.out' not found in '") ($ VSub_Name "$TEST_DATA_DIR") 
                      ("/gen_image.tar'")
                    )
                  }
                )
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [1653]
        )
      spids: [1647 1652]
    )
    (FuncDef
      name: test_dummy_repository
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:layer)
                  op: Equal
                  rhs: {(DQ (0279f3ce8b08d10506abcf452393b3e48439f5eca41b836fae59a0d509fbafea))}
                  spids: [1695]
                )
              ]
              spids: [1693]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_data)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/dummy_repository.tar))}
                  spids: [1703]
                )
              ]
              spids: [1701]
            )
            (C {(check_layers_aux)} {(DQ (dummy_repository))} {(DQ ($ VSub_Name "$layer"))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:repositories)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} {(DQ (./repositories))})
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [1729 1743]
                        )
                      )
                    }
                  spids: [1727]
                )
              ]
              spids: [1725]
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(echo)} {(DQ (${ VSub_Name repositories))})
                    (C {(grep)} {(-Esq)} {(--)} 
                      {
                        (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                          ("gcr.io/dummy/[a-zA-Z_]*_docker_testdata") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (": {")
                        )
                      }
                    )
                  ]
                  negated: False
                )
                (C {(fail)} 
                  {
                    (DQ ("Cannot find image in repository gcr.io/dummy in '") 
                      (${ VSub_Name repositories) ("'")
                    )
                  }
                )
              ]
              op_id: Op_DPipe
            )
            (C {(EXPECT_CONTAINS)} {(DQ (${ VSub_Name repositories))} 
              {
                (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (dummy_repository) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (": ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$layer") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                )
              }
            )
          ]
          spids: [1690]
        )
      spids: [1684 1689]
    )
    (FuncDef
      name: test_files_base
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (files_base))} 
              {(DQ (82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710))}
            )
          ]
          spids: [1818]
        )
      spids: [1812 1817]
    )
    (FuncDef
      name: test_files_with_files_base
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (files_with_files_base))} 
              {(DQ (82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710))} {(DQ (84c0d09919ae8b06cb6b064d8cd5eab63341a46f11ccc7ecbe270ad3e1f52744))}
            )
          ]
          spids: [1842]
        )
      spids: [1836 1841]
    )
    (FuncDef
      name: test_tar_base
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (tar_base))} 
              {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))}
            )
            (C {(check_no_property)} {(DQ (Entrypoint))} {(DQ (tar_base))} 
              {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))}
            )
          ]
          spids: [1872]
        )
      spids: [1866 1871]
    )
    (FuncDef
      name: test_tar_with_tar_base
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (tar_with_tar_base))} 
              {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} {(DQ (1cc81a2aaec2e3727d98d48bf9ba09d3ac96ef48adf5edae861d15dd0191dc40))}
            )
          ]
          spids: [1922]
        )
      spids: [1916 1921]
    )
    (FuncDef
      name: test_directory_with_tar_base
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (directory_with_tar_base))} 
              {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} {(DQ (e56ddeb8279698484f50d480f71cb5380223ad0f451766b7b9a9348129d02542))}
            )
          ]
          spids: [1952]
        )
      spids: [1946 1951]
    )
    (FuncDef
      name: test_files_with_tar_base
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (files_with_tar_base))} 
              {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} {(DQ (f099727fa58f9b688e77b511b3cc728b86ae0e84d197b9330bd51082ad5589f2))}
            )
          ]
          spids: [1982]
        )
      spids: [1976 1981]
    )
    (FuncDef
      name: test_workdir_with_tar_base
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (workdir_with_tar_base))} 
              {(DQ (8b9e4db9dd4b990ee6d8adc2843ad64702ad9063ae6c22e8ca5f94aa54e71277))} {(DQ (f24cbe53bd1b78909c6dba0bd47016354f3488b35b85aeee68ecc423062b927e))}
            )
          ]
          spids: [2012]
        )
      spids: [2006 2011]
    )
    (FuncDef
      name: test_tar_with_files_base
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (tar_with_files_base))} 
              {(DQ (82ca3945f7d07df82f274d7fafe83fd664c2154e5c64c988916ccd5b217bb710))} {(DQ (bee1a325e4b51a1dcfd7e447987b4e130590815865ab22e8744878053d525f20))}
            )
          ]
          spids: [2042]
        )
      spids: [2036 2041]
    )
    (FuncDef
      name: test_base_with_entrypoint
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (base_with_entrypoint))} 
              {(DQ (4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b))}
            )
            (C {(check_entrypoint)} {(DQ (base_with_entrypoint))} 
              {(DQ (4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b))} {(SQ <"[\"/bar\"]">)}
            )
            (C {(check_ports)} {(DQ (base_with_entrypoint))} 
              {(DQ (4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b))} {(SQ <"{\"8080/tcp\": {}}">)}
            )
          ]
          spids: [2072]
        )
      spids: [2066 2071]
    )
    (FuncDef
      name: test_derivative_with_shadowed_cmd
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (derivative_with_shadowed_cmd))} 
              {(DQ (4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b))} {(DQ (e35f57dc6c1e84ae67dcaaf3479a3a3c0f52ac4d194073bd6214e04c05beab42))}
            )
          ]
          spids: [2140]
        )
      spids: [2134 2139]
    )
    (FuncDef
      name: test_derivative_with_cmd
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (derivative_with_cmd))} 
              {(DQ (4acbeb0495918726c0107e372b421e1d2a6fd4825d58fc3f0b0b2a719fb3ce1b))} {(DQ (e35f57dc6c1e84ae67dcaaf3479a3a3c0f52ac4d194073bd6214e04c05beab42))} 
              {(DQ (186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01))}
            )
            (C {(check_entrypoint)} {(DQ (derivative_with_cmd))} 
              {(DQ (186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01))} {(SQ <"[\"/bar\"]">)}
            )
            (C {(check_cmd)} {(DQ (derivative_with_cmd))} 
              {(DQ (e35f57dc6c1e84ae67dcaaf3479a3a3c0f52ac4d194073bd6214e04c05beab42))} {(SQ <"[\"shadowed-arg\"]">)}
            )
            (C {(check_cmd)} {(DQ (derivative_with_cmd))} 
              {(DQ (186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01))} {(SQ <"[\"arg1\", \"arg2\"]">)}
            )
            (C {(check_ports)} {(DQ (derivative_with_cmd))} 
              {(DQ (186289545131e34510006ac79498078dcf41736a5eb9a36920a6b30d3f45bc01))} {(SQ <"{\"80/tcp\": {}, \"8080/tcp\": {}}">)}
            )
          ]
          spids: [2170]
        )
      spids: [2164 2169]
    )
    (FuncDef
      name: test_derivative_with_volume
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (derivative_with_volume))} 
              {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (08424283ad3a7e020e210bec22b166d7ebba57f7ba2d0713c2fd7bd1e2038f88))}
            )
            (C {(check_volumes)} {(DQ (derivative_with_volume))} 
              {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(SQ <"{\"/logs\": {}}">)}
            )
            (C {(check_volumes)} {(DQ (derivative_with_volume))} 
              {(DQ (08424283ad3a7e020e210bec22b166d7ebba57f7ba2d0713c2fd7bd1e2038f88))} {(SQ <"{\"/asdf\": {}, \"/blah\": {}, \"/logs\": {}}">)}
            )
          ]
          spids: [2302]
        )
      spids: [2296 2301]
    )
    (FuncDef
      name: test_generated_tarball
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (generated_tarball))} 
              {(DQ (54b8328604115255cc76c12a2a51939be65c40bf182ff5a898a5fb57c38f7772))}
            )
          ]
          spids: [2380]
        )
      spids: [2374 2379]
    )
    (FuncDef
      name: test_with_env
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (with_env))} 
              {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (42a1bd0f449f61a23b8a7776875ffb6707b34ee99c87d6428a7394f5e55e8624))}
            )
            (C {(check_env)} {(DQ (with_env))} 
              {(DQ (42a1bd0f449f61a23b8a7776875ffb6707b34ee99c87d6428a7394f5e55e8624))} {(SQ <"[\"bar=blah blah blah\", \"foo=/asdf\"]">)}
            )
          ]
          spids: [2404]
        )
      spids: [2398 2403]
    )
    (FuncDef
      name: test_with_double_env
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (with_double_env))} 
              {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (42a1bd0f449f61a23b8a7776875ffb6707b34ee99c87d6428a7394f5e55e8624))} 
              {(DQ (576a9fd9c690be04dc7aacbb9dbd1f14816e32dbbcc510f4d42325bbff7163dd))}
            )
            (C {(check_env)} {(DQ (with_double_env))} 
              {(DQ (576a9fd9c690be04dc7aacbb9dbd1f14816e32dbbcc510f4d42325bbff7163dd))} {(SQ <"[\"bar=blah blah blah\", \"baz=/asdf blah blah blah\", \"foo=/asdf\"]">)}
            )
          ]
          spids: [2454]
        )
      spids: [2448 2453]
    )
    (FuncDef
      name: test_with_label
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (with_label))} 
              {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (eba6abda3d259ab6ed5f4d48b76df72a5193fad894d4ae78fbf0a363d8f9e8fd))}
            )
            (C {(check_label)} {(DQ (with_label))} 
              {(DQ (eba6abda3d259ab6ed5f4d48b76df72a5193fad894d4ae78fbf0a363d8f9e8fd))} 
              {
                (SQ 
                  <
"[\"com.example.bar={\\\"name\\\": \\\"blah\\\"}\", \"com.example.baz=qux\", \"com.example.foo={\\\"name\\\": \\\"blah\\\"}\"]"
                  >
                )
              }
            )
          ]
          spids: [2514]
        )
      spids: [2508 2513]
    )
    (FuncDef
      name: test_with_double_label
      body: 
        (BraceGroup
          children: [
            (C {(check_layers)} {(DQ (with_double_label))} 
              {(DQ (125e7cfb9d4a6d803a57b88bcdb05d9a6a47ac0d6312a8b4cff52a2685c5c858))} {(DQ (eba6abda3d259ab6ed5f4d48b76df72a5193fad894d4ae78fbf0a363d8f9e8fd))} 
              {(DQ (bfe88fbb5e24fc5bff138f7a1923d53a2ee1bbc8e54b6f5d9c371d5f48b6b023))}
            )
            (C {(check_label)} {(DQ (with_double_label))} 
              {(DQ (bfe88fbb5e24fc5bff138f7a1923d53a2ee1bbc8e54b6f5d9c371d5f48b6b023))} 
              {
                (SQ 
                  <
"[\"com.example.bar={\\\"name\\\": \\\"blah\\\"}\", \"com.example.baz=qux\", \"com.example.foo={\\\"name\\\": \\\"blah\\\"}\", \"com.example.qux={\\\"name\\\": \\\"blah-blah\\\"}\"]"
                  >
                )
              }
            )
          ]
          spids: [2564]
        )
      spids: [2558 2563]
    )
    (FuncDef
      name: test_with_user
      body: 
        (BraceGroup
          children: [
            (C {(check_user)} {(DQ (with_user))} 
              {(DQ (65664d4d78ff321684e2a8bf165792ce562c5990c9ba992e6288dcb1ec7f675c))} 
              {
                (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (nobody) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                )
              }
            )
          ]
          spids: [2621]
        )
      spids: [2615 2620]
    )
    (FuncDef
      name: get_layer_listing
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:input)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [2658]
                )
              ]
              spids: [2656]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:layer)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [2664]
                )
              ]
              spids: [2662]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_data)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/) (${ VSub_Name input) (.tar))}
                  spids: [2670]
                )
              ]
              spids: [2668]
            )
            (Pipeline
              children: [
                (C {(tar)} {(xOf)} {(DQ (${ VSub_Name test_data))} 
                  {(DQ (./) (${ VSub_Name layer) (/layer.tar))}
                )
                (C {(tar)} {(tv)})
                (C {(sed)} {(-e)} {(SQ <"s/^.*:00 //">)})
              ]
              negated: False
            )
          ]
          spids: [2653]
        )
      spids: [2647 2652]
    )
    (FuncDef
      name: test_data_path
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:no_data_path_sha)
                  op: Equal
                  rhs: {(DQ (451d182e5c71840f00ba9726dc0239db73a21b7e89e79c77f677e3f7c5c23d44))}
                  spids: [2733]
                )
              ]
              spids: [2731]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:data_path_sha)
                  op: Equal
                  rhs: {(DQ (9a41c9e1709558f7ef06f28f66e9056feafa7e0f83990801e1b27c987278d8e8))}
                  spids: [2741]
                )
              ]
              spids: [2739]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:absolute_data_path_sha)
                  op: Equal
                  rhs: {(DQ (f196c42ab4f3eb850d9655b950b824db2c99c01527703ac486a7b48bb2a34f44))}
                  spids: [2749]
                )
              ]
              spids: [2747]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:root_data_path_sha)
                  op: Equal
                  rhs: {(DQ (19d7fd26d67bfaeedd6232dcd441f14ee163bc81c56ed565cc20e73311c418b6))}
                  spids: [2757]
                )
              ]
              spids: [2755]
            )
            (C {(check_layers_aux)} {(DQ (no_data_path_image))} {(DQ (${ VSub_Name no_data_path_sha))})
            (C {(check_layers_aux)} {(DQ (data_path_image))} {(DQ (${ VSub_Name data_path_sha))})
            (C {(check_layers_aux)} {(DQ (absolute_data_path_image))} 
              {(DQ (${ VSub_Name absolute_data_path_sha))}
            )
            (C {(check_layers_aux)} {(DQ (root_data_path_image))} 
              {(DQ (${ VSub_Name root_data_path_sha))}
            )
            (C {(check_eq)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(get_layer_listing)} {(DQ (no_data_path_image))} 
                            {(DQ (${ VSub_Name no_data_path_sha))}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [2836 2848]
                  )
                )
              } {(SQ <"./\n"> <./test>)}
            )
            (C {(check_eq)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(get_layer_listing)} {(DQ (data_path_image))} 
                            {(DQ (${ VSub_Name data_path_sha))}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [2862 2874]
                  )
                )
              } {(SQ <"./\n"> <"./test/\n"> <./test/test>)}
            )
            (C {(check_eq)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(get_layer_listing)} {(DQ (absolute_data_path_image))} 
                            {(DQ (${ VSub_Name absolute_data_path_sha))}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [2910 2922]
                  )
                )
              } 
              {
                (SQ <"./\n"> <"./docker/\n"> <"./docker/testdata/\n"> <"./docker/testdata/test/\n"> 
                  <./docker/testdata/test/test>
                )
              }
            )
            (C {(check_eq)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(get_layer_listing)} {(DQ (root_data_path_image))} 
                            {(DQ (${ VSub_Name root_data_path_sha))}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [2948 2960]
                  )
                )
              } 
              {
                (DQ ("./\n") ("./tools/\n") ("./tools/build_defs/\n") ("./tools/build_defs/docker/\n") 
                  ("./tools/build_defs/docker/testdata/\n") ("./tools/build_defs/docker/testdata/test/\n") (./tools/build_defs/docker/testdata/test/test)
                )
              }
            )
          ]
          spids: [2728]
        )
      spids: [2722 2727]
    )
    (FuncDef
      name: test_extras_with_deb
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_data)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name TEST_DATA_DIR) (/extras_with_deb.tar))}
                  spids: [2989]
                )
              ]
              spids: [2987]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sha)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(tar)} {(xOf)} {(${ VSub_Name test_data)} {(./top)})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [3001 3011]
                      )
                    }
                  spids: [3000]
                )
              ]
              spids: [2998]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:layer_listing)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(get_layer_listing)} {(DQ (extras_with_deb))} 
                                      {(DQ (${ VSub_Name sha))}
                                    )
                                    (C {(sort)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [3023 3039]
                        )
                      )
                    }
                  spids: [3021]
                )
              ]
              spids: [3019]
            )
            (C {(check_eq)} {(DQ (${ VSub_Name layer_listing))} 
              {
                (DQ ("./\n") ("./etc/\n") ("./etc/nsswitch.conf\n") ("./tmp/\n") ("./usr/\n") 
                  ("./usr/bin/\n") ("./usr/bin/java -> /path/to/bin/java\n") (./usr/titi)
                )
              }
            )
          ]
          spids: [2984]
        )
      spids: [2978 2983]
    )
    (C {(run_suite)} {(DQ (build_test))})
  ]
)