(CommandList
  children: [
    (C {(set)} {(-e)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SCRIPTPATH)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(dirname)} {(DQ ($ VSub_Number '$0'))})])
                left_token: <Left_CommandSub '$('>
                spids: [10 16]
              )
            }
          spids: [9]
        )
      ]
      spids: [9]
    )
    (C {(cd)} {($ VSub_Name '$SCRIPTPATH')})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SCRIPTPATH)
          op: Equal
          rhs: {($ VSub_Name '$PWD')}
          spids: [22]
        )
      ]
      spids: [22]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KEY_PAIR_NAME)
          op: Equal
          rhs: {(rkt-testing-) (${ VSub_Name USER)}
          spids: [26]
        )
      ]
      spids: [26]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SECURITY_GROUP)
          op: Equal
          rhs: {(rkt-testing-) (${ VSub_Name USER) (-security-group)}
          spids: [32]
        )
      ]
      spids: [32]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:REGION) op:Equal rhs:{(us-west-1)} spids:[39])]
      spids: [39]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=')} {(DQ (setup))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:MYIP)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(curl)} {(--silent)} 
                                {(http) (Lit_Other ':') (//checkip.amazonaws.com/)}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [68 76]
                      )
                    }
                  spids: [67]
                )
              ]
              spids: [67]
            )
            (SimpleCommand
              words: [
                {(aws)}
                {(--region)}
                {($ VSub_Name '$REGION')}
                {(ec2)}
                {(create-key-pair)}
                {(--key-name)}
                {($ VSub_Name '$KEY_PAIR_NAME')}
                {(--query)}
                {(SQ <KeyMaterial>)}
                {(--output)}
                {(text)}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(${ VSub_Name KEY_PAIR_NAME) (.pem)}
                  spids: [104]
                )
              ]
            )
            (C {(chmod)} {(0600)} {(${ VSub_Name KEY_PAIR_NAME) (.pem)})
            (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} {(create-security-group)} 
              {(--group-name)} {($ VSub_Name '$SECURITY_GROUP')} {(--description)} {(DQ ('Security group for rkt testing'))}
            )
            (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} {(authorize-security-group-ingress)} 
              {(--group-name)} {($ VSub_Name '$SECURITY_GROUP')} {(--protocol)} {(tcp)} {(--port)} {(22)} {(--cidr)} 
              {($ VSub_Name '$MYIP') (/32)}
            )
            (C {(exit)} {(0)})
          ]
          spids: [-1 64]
        )
      ]
      spids: [-1 175]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DISTRO) op:Equal rhs:{($ VSub_Number '$1')} spids:[178])]
      spids: [178]
    )
    (C {(test)} {(-f)} {(cloudinit/) (${ VSub_Name DISTRO) (.cloudinit)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CLOUDINIT)
          op: Equal
          rhs: {($ VSub_Name '$PWD') (/cloudinit/) (${ VSub_Name DISTRO) (.cloudinit)}
          spids: [192]
        )
      ]
      spids: [192]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$DISTRO'))} {(Lit_Other '=')} {(DQ (fedora-24))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AMI) op:Equal rhs:{(ami-8b4c35eb)} spids:[243])]
              spids: [243]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AWS_USER) op:Equal rhs:{(fedora)} spids:[247])]
              spids: [247]
            )
          ]
          spids: [-1 219]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$DISTRO'))} {(Lit_Other '=')} {(DQ (fedora-25))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AMI) op:Equal rhs:{(ami-c70d5ca7)} spids:[275])]
              spids: [275]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AWS_USER) op:Equal rhs:{(fedora)} spids:[279])]
              spids: [279]
            )
          ]
          spids: [250 268]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$DISTRO'))} {(Lit_Other '=')} 
                  {(DQ (fedora-rawhide))} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AMI) op:Equal rhs:{(ami-a18dfac1)} spids:[307])]
              spids: [307]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AWS_USER) op:Equal rhs:{(fedora)} spids:[311])]
              spids: [311]
            )
          ]
          spids: [282 300]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$DISTRO'))} {(Lit_Other '=')} {(DQ (ubuntu-1604))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AMI) op:Equal rhs:{(ami-b20542d2)} spids:[343])]
              spids: [343]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AWS_USER) op:Equal rhs:{(ubuntu)} spids:[347])]
              spids: [347]
            )
          ]
          spids: [314 332]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$DISTRO'))} {(Lit_Other '=')} 
                  {(DQ (debian-testing))} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AMI) op:Equal rhs:{(ami-db6c39bb)} spids:[379])]
              spids: [379]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:AWS_USER) op:Equal rhs:{(admin)} spids:[383])]
              spids: [383]
            )
          ]
          spids: [350 368]
        )
      ]
      spids: [-1 386]
    )
    (C {(test)} {(-n)} {(DQ ($ VSub_Name '$AMI'))})
    (C {(test)} {(-n)} {(DQ ($ VSub_Name '$AWS_USER'))})
    (C {(test)} {(-f)} {(DQ (${ VSub_Name KEY_PAIR_NAME) (.pem))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:INSTANCE_ID)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} {(run-instances)} 
                        {(--image-id)} {($ VSub_Name '$AMI')} {(--count)} {(1)} {(--key-name)} {($ VSub_Name '$KEY_PAIR_NAME')} 
                        {(--security-groups)} {($ VSub_Name '$SECURITY_GROUP')} {(--instance-type)} {(m4.large)} 
                        {(--instance-initiated-shutdown-behavior)} {(terminate)} {(--user-data)} {(file) (Lit_Other ':') (//) ($ VSub_Name '$CLOUDINIT')} {(--output)} 
                        {(text)} {(--query)} {(SQ <'Instances[*].InstanceId'>)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [418 490]
              )
            }
          spids: [417]
        )
      ]
      spids: [417]
    )
    (C {(echo)} {(Lit_VarLike 'INSTANCE_ID=') ($ VSub_Name '$INSTANCE_ID')})
    (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} {(create-tags)} {(--resources)} 
      {(${ VSub_Name INSTANCE_ID)} {(--tags)} 
      {(Lit_VarLike 'Key=') (Name) (Lit_Comma ',') (Lit_VarLike 'Value=') (rkt-tst-) 
        (${ VSub_Name DISTRO)
      } {(Lit_VarLike 'Key=') (BaseAmi) (Lit_Comma ',') (Lit_VarLike 'Value=') (${ VSub_Name AMI)} 
      {(Lit_VarLike 'Key=') (User) (Lit_Comma ',') (Lit_VarLike 'Value=') (${ VSub_Name AWS_USER)}
    )
    (Sentence
      child: 
        (While
          cond: [
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:state)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} 
                                    {(describe-instances)} {(--instance-ids)} {($ VSub_Name '$INSTANCE_ID')} {(--output)} {(text)} {(--query)} 
                                    {(SQ <'Reservations[*].Instances[*].State.Name'>)}
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [556 589]
                          )
                        }
                      spids: [555]
                    )
                  ]
                  spids: [555]
                )
              terminator: <Op_Semi ';'>
            )
            (Sentence
              child: (C {(test)} {(DQ ($ VSub_Name '$state'))} {(Lit_Other '=')} {(DQ (pending))})
              terminator: <Op_Semi ';'>
            )
          ]
          body: 
            (DoGroup
              children: [
                (Sentence child:(C {(sleep)} {(1)}) terminator:<Op_Semi ';'>)
                (C {(echo)} {(-n)} {(SQ <.>)})
              ]
              spids: [605 621]
            )
        )
      terminator: <Op_Semi ';'>
    )
    (C {(echo)} {(DQ (' ') ($ VSub_Name '$state'))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:AWS_IP)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} {(describe-instances)} 
                        {(--instance-ids)} {($ VSub_Name '$INSTANCE_ID')} {(--output)} {(text)} {(--query)} 
                        {(SQ <'Reservations[*].Instances[*].PublicIpAddress'>)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [633 666]
              )
            }
          spids: [632]
        )
      ]
      spids: [632]
    )
    (C {(echo)} {(Lit_VarLike 'AWS_IP=') ($ VSub_Name '$AWS_IP')})
    (C {(echo)} {(DQ ('Waiting for the instance to boot...'))})
    (C {(sleep)} {(60)})
    (C {(echo)} {(DQ ('Waiting for the instance to be initialized...'))})
    (C {(echo)} {(DQ ('To check the logs:'))})
    (C {(echo)} {(ssh)} {(-i)} {(${ VSub_Name SCRIPTPATH) (/) (${ VSub_Name KEY_PAIR_NAME) (.pem)} 
      {(${ VSub_Name AWS_USER) (Lit_Other '@') (${ VSub_Name AWS_IP)} {(tail)} {(-f)} {(/var/log/cloud-init-output.log)}
    )
    (While
      cond: [
        (Pipeline
          children: [
            (SimpleCommand
              words: [
                {(ssh)}
                {(-o)}
                {(Lit_VarLike 'StrictHostKeyChecking=') (no)}
                {(-o)}
                {(Lit_VarLike 'ServerAliveInterval=') (20)}
                {(-o)}
                {(Lit_VarLike 'ConnectTimeout=') (10)}
                {(-o)}
                {(Lit_VarLike 'ConnectionAttempts=') (60)}
                {(-i)}
                {(${ VSub_Name SCRIPTPATH) (/) (${ VSub_Name KEY_PAIR_NAME) (.pem)}
                {(${ VSub_Name AWS_USER) (Lit_Other '@') (${ VSub_Name AWS_IP)}
                {(stat)}
                {(/var/lib/cloud/instances/) ($ VSub_Name '$INSTANCE_ID') (/boot-finished)}
              ]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[776])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[779])
              ]
            )
          ]
          negated: True
        )
      ]
      body: (DoGroup children:[(C {(echo)} {(-n)} {(SQ <.>)})(C {(sleep)} {(30)})] spids:[782798])
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:NAME)
          op: Equal
          rhs: 
            {(rkt-ci-jenkins-) 
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(date)} {(Lit_Other '+') (DQ ('%Y-%m-%d'))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [804 811]
              ) (-) ($ VSub_Name '$DISTRO')
            }
          spids: [802]
        )
      ]
      spids: [802]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:AMI_ID)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} {(create-image)} 
                        {(--instance-id)} {($ VSub_Name '$INSTANCE_ID')} {(--name)} {($ VSub_Name '$NAME')} {(--output)} {(text)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [816 838]
              )
            }
          spids: [815]
        )
      ]
      spids: [815]
    )
    (C {(echo)} {(-e)} 
      {
        (DQ (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>) 
          ('Waiting for the AMI to be avaliable...')
        )
      }
    )
    (While
      cond: [
        (Pipeline
          children: [
            (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} {(describe-images)} {(--image-id)} 
              {($ VSub_Name '$AMI_ID')}
            )
            (C {(grep)} {(-q)} {(available)})
          ]
          negated: True
        )
      ]
      body: (DoGroup children:[(C {(echo)} {(-n)} {(SQ <.>)})(C {(sleep)} {(30)})] spids:[876892])
    )
    (C {(echo)} {(-e)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>) ('Removing instance...'))})
    (C {(aws)} {(--region)} {($ VSub_Name '$REGION')} {(ec2)} {(terminate-instances)} {(--instance-ids)} 
      {($ VSub_Name '$INSTANCE_ID')} {(--output)} {(text)}
    )
    (C {(echo)} 
      {
        (DQ (${ VSub_Name DISTRO) (' AMI available: ') ($ VSub_Name '$AMI_ID') (' (Region ') 
          ($ VSub_Name '$REGION') (')')
        )
      }
    )
  ]
)