github.com/aavshr/aws-sdk-go@v1.41.3/service/cloudformation/waiters.go (about)

     1  // Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
     2  
     3  package cloudformation
     4  
     5  import (
     6  	"time"
     7  
     8  	"github.com/aavshr/aws-sdk-go/aws"
     9  	"github.com/aavshr/aws-sdk-go/aws/request"
    10  )
    11  
    12  // WaitUntilChangeSetCreateComplete uses the AWS CloudFormation API operation
    13  // DescribeChangeSet to wait for a condition to be met before returning.
    14  // If the condition is not met within the max attempt window, an error will
    15  // be returned.
    16  func (c *CloudFormation) WaitUntilChangeSetCreateComplete(input *DescribeChangeSetInput) error {
    17  	return c.WaitUntilChangeSetCreateCompleteWithContext(aws.BackgroundContext(), input)
    18  }
    19  
    20  // WaitUntilChangeSetCreateCompleteWithContext is an extended version of WaitUntilChangeSetCreateComplete.
    21  // With the support for passing in a context and options to configure the
    22  // Waiter and the underlying request options.
    23  //
    24  // The context must be non-nil and will be used for request cancellation. If
    25  // the context is nil a panic will occur. In the future the SDK may create
    26  // sub-contexts for http.Requests. See https://golang.org/pkg/context/
    27  // for more information on using Contexts.
    28  func (c *CloudFormation) WaitUntilChangeSetCreateCompleteWithContext(ctx aws.Context, input *DescribeChangeSetInput, opts ...request.WaiterOption) error {
    29  	w := request.Waiter{
    30  		Name:        "WaitUntilChangeSetCreateComplete",
    31  		MaxAttempts: 120,
    32  		Delay:       request.ConstantWaiterDelay(30 * time.Second),
    33  		Acceptors: []request.WaiterAcceptor{
    34  			{
    35  				State:   request.SuccessWaiterState,
    36  				Matcher: request.PathWaiterMatch, Argument: "Status",
    37  				Expected: "CREATE_COMPLETE",
    38  			},
    39  			{
    40  				State:   request.FailureWaiterState,
    41  				Matcher: request.PathWaiterMatch, Argument: "Status",
    42  				Expected: "FAILED",
    43  			},
    44  			{
    45  				State:    request.FailureWaiterState,
    46  				Matcher:  request.ErrorWaiterMatch,
    47  				Expected: "ValidationError",
    48  			},
    49  		},
    50  		Logger: c.Config.Logger,
    51  		NewRequest: func(opts []request.Option) (*request.Request, error) {
    52  			var inCpy *DescribeChangeSetInput
    53  			if input != nil {
    54  				tmp := *input
    55  				inCpy = &tmp
    56  			}
    57  			req, _ := c.DescribeChangeSetRequest(inCpy)
    58  			req.SetContext(ctx)
    59  			req.ApplyOptions(opts...)
    60  			return req, nil
    61  		},
    62  	}
    63  	w.ApplyOptions(opts...)
    64  
    65  	return w.WaitWithContext(ctx)
    66  }
    67  
    68  // WaitUntilStackCreateComplete uses the AWS CloudFormation API operation
    69  // DescribeStacks to wait for a condition to be met before returning.
    70  // If the condition is not met within the max attempt window, an error will
    71  // be returned.
    72  func (c *CloudFormation) WaitUntilStackCreateComplete(input *DescribeStacksInput) error {
    73  	return c.WaitUntilStackCreateCompleteWithContext(aws.BackgroundContext(), input)
    74  }
    75  
    76  // WaitUntilStackCreateCompleteWithContext is an extended version of WaitUntilStackCreateComplete.
    77  // With the support for passing in a context and options to configure the
    78  // Waiter and the underlying request options.
    79  //
    80  // The context must be non-nil and will be used for request cancellation. If
    81  // the context is nil a panic will occur. In the future the SDK may create
    82  // sub-contexts for http.Requests. See https://golang.org/pkg/context/
    83  // for more information on using Contexts.
    84  func (c *CloudFormation) WaitUntilStackCreateCompleteWithContext(ctx aws.Context, input *DescribeStacksInput, opts ...request.WaiterOption) error {
    85  	w := request.Waiter{
    86  		Name:        "WaitUntilStackCreateComplete",
    87  		MaxAttempts: 120,
    88  		Delay:       request.ConstantWaiterDelay(30 * time.Second),
    89  		Acceptors: []request.WaiterAcceptor{
    90  			{
    91  				State:   request.SuccessWaiterState,
    92  				Matcher: request.PathAllWaiterMatch, Argument: "Stacks[].StackStatus",
    93  				Expected: "CREATE_COMPLETE",
    94  			},
    95  			{
    96  				State:   request.FailureWaiterState,
    97  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
    98  				Expected: "CREATE_FAILED",
    99  			},
   100  			{
   101  				State:   request.FailureWaiterState,
   102  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   103  				Expected: "DELETE_COMPLETE",
   104  			},
   105  			{
   106  				State:   request.FailureWaiterState,
   107  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   108  				Expected: "DELETE_FAILED",
   109  			},
   110  			{
   111  				State:   request.FailureWaiterState,
   112  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   113  				Expected: "ROLLBACK_FAILED",
   114  			},
   115  			{
   116  				State:   request.FailureWaiterState,
   117  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   118  				Expected: "ROLLBACK_COMPLETE",
   119  			},
   120  			{
   121  				State:    request.FailureWaiterState,
   122  				Matcher:  request.ErrorWaiterMatch,
   123  				Expected: "ValidationError",
   124  			},
   125  		},
   126  		Logger: c.Config.Logger,
   127  		NewRequest: func(opts []request.Option) (*request.Request, error) {
   128  			var inCpy *DescribeStacksInput
   129  			if input != nil {
   130  				tmp := *input
   131  				inCpy = &tmp
   132  			}
   133  			req, _ := c.DescribeStacksRequest(inCpy)
   134  			req.SetContext(ctx)
   135  			req.ApplyOptions(opts...)
   136  			return req, nil
   137  		},
   138  	}
   139  	w.ApplyOptions(opts...)
   140  
   141  	return w.WaitWithContext(ctx)
   142  }
   143  
   144  // WaitUntilStackDeleteComplete uses the AWS CloudFormation API operation
   145  // DescribeStacks to wait for a condition to be met before returning.
   146  // If the condition is not met within the max attempt window, an error will
   147  // be returned.
   148  func (c *CloudFormation) WaitUntilStackDeleteComplete(input *DescribeStacksInput) error {
   149  	return c.WaitUntilStackDeleteCompleteWithContext(aws.BackgroundContext(), input)
   150  }
   151  
   152  // WaitUntilStackDeleteCompleteWithContext is an extended version of WaitUntilStackDeleteComplete.
   153  // With the support for passing in a context and options to configure the
   154  // Waiter and the underlying request options.
   155  //
   156  // The context must be non-nil and will be used for request cancellation. If
   157  // the context is nil a panic will occur. In the future the SDK may create
   158  // sub-contexts for http.Requests. See https://golang.org/pkg/context/
   159  // for more information on using Contexts.
   160  func (c *CloudFormation) WaitUntilStackDeleteCompleteWithContext(ctx aws.Context, input *DescribeStacksInput, opts ...request.WaiterOption) error {
   161  	w := request.Waiter{
   162  		Name:        "WaitUntilStackDeleteComplete",
   163  		MaxAttempts: 120,
   164  		Delay:       request.ConstantWaiterDelay(30 * time.Second),
   165  		Acceptors: []request.WaiterAcceptor{
   166  			{
   167  				State:   request.SuccessWaiterState,
   168  				Matcher: request.PathAllWaiterMatch, Argument: "Stacks[].StackStatus",
   169  				Expected: "DELETE_COMPLETE",
   170  			},
   171  			{
   172  				State:    request.SuccessWaiterState,
   173  				Matcher:  request.ErrorWaiterMatch,
   174  				Expected: "ValidationError",
   175  			},
   176  			{
   177  				State:   request.FailureWaiterState,
   178  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   179  				Expected: "DELETE_FAILED",
   180  			},
   181  			{
   182  				State:   request.FailureWaiterState,
   183  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   184  				Expected: "CREATE_FAILED",
   185  			},
   186  			{
   187  				State:   request.FailureWaiterState,
   188  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   189  				Expected: "ROLLBACK_FAILED",
   190  			},
   191  			{
   192  				State:   request.FailureWaiterState,
   193  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   194  				Expected: "UPDATE_ROLLBACK_IN_PROGRESS",
   195  			},
   196  			{
   197  				State:   request.FailureWaiterState,
   198  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   199  				Expected: "UPDATE_ROLLBACK_FAILED",
   200  			},
   201  			{
   202  				State:   request.FailureWaiterState,
   203  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   204  				Expected: "UPDATE_ROLLBACK_COMPLETE",
   205  			},
   206  		},
   207  		Logger: c.Config.Logger,
   208  		NewRequest: func(opts []request.Option) (*request.Request, error) {
   209  			var inCpy *DescribeStacksInput
   210  			if input != nil {
   211  				tmp := *input
   212  				inCpy = &tmp
   213  			}
   214  			req, _ := c.DescribeStacksRequest(inCpy)
   215  			req.SetContext(ctx)
   216  			req.ApplyOptions(opts...)
   217  			return req, nil
   218  		},
   219  	}
   220  	w.ApplyOptions(opts...)
   221  
   222  	return w.WaitWithContext(ctx)
   223  }
   224  
   225  // WaitUntilStackExists uses the AWS CloudFormation API operation
   226  // DescribeStacks to wait for a condition to be met before returning.
   227  // If the condition is not met within the max attempt window, an error will
   228  // be returned.
   229  func (c *CloudFormation) WaitUntilStackExists(input *DescribeStacksInput) error {
   230  	return c.WaitUntilStackExistsWithContext(aws.BackgroundContext(), input)
   231  }
   232  
   233  // WaitUntilStackExistsWithContext is an extended version of WaitUntilStackExists.
   234  // With the support for passing in a context and options to configure the
   235  // Waiter and the underlying request options.
   236  //
   237  // The context must be non-nil and will be used for request cancellation. If
   238  // the context is nil a panic will occur. In the future the SDK may create
   239  // sub-contexts for http.Requests. See https://golang.org/pkg/context/
   240  // for more information on using Contexts.
   241  func (c *CloudFormation) WaitUntilStackExistsWithContext(ctx aws.Context, input *DescribeStacksInput, opts ...request.WaiterOption) error {
   242  	w := request.Waiter{
   243  		Name:        "WaitUntilStackExists",
   244  		MaxAttempts: 20,
   245  		Delay:       request.ConstantWaiterDelay(5 * time.Second),
   246  		Acceptors: []request.WaiterAcceptor{
   247  			{
   248  				State:    request.SuccessWaiterState,
   249  				Matcher:  request.StatusWaiterMatch,
   250  				Expected: 200,
   251  			},
   252  			{
   253  				State:    request.RetryWaiterState,
   254  				Matcher:  request.ErrorWaiterMatch,
   255  				Expected: "ValidationError",
   256  			},
   257  		},
   258  		Logger: c.Config.Logger,
   259  		NewRequest: func(opts []request.Option) (*request.Request, error) {
   260  			var inCpy *DescribeStacksInput
   261  			if input != nil {
   262  				tmp := *input
   263  				inCpy = &tmp
   264  			}
   265  			req, _ := c.DescribeStacksRequest(inCpy)
   266  			req.SetContext(ctx)
   267  			req.ApplyOptions(opts...)
   268  			return req, nil
   269  		},
   270  	}
   271  	w.ApplyOptions(opts...)
   272  
   273  	return w.WaitWithContext(ctx)
   274  }
   275  
   276  // WaitUntilStackImportComplete uses the AWS CloudFormation API operation
   277  // DescribeStacks to wait for a condition to be met before returning.
   278  // If the condition is not met within the max attempt window, an error will
   279  // be returned.
   280  func (c *CloudFormation) WaitUntilStackImportComplete(input *DescribeStacksInput) error {
   281  	return c.WaitUntilStackImportCompleteWithContext(aws.BackgroundContext(), input)
   282  }
   283  
   284  // WaitUntilStackImportCompleteWithContext is an extended version of WaitUntilStackImportComplete.
   285  // With the support for passing in a context and options to configure the
   286  // Waiter and the underlying request options.
   287  //
   288  // The context must be non-nil and will be used for request cancellation. If
   289  // the context is nil a panic will occur. In the future the SDK may create
   290  // sub-contexts for http.Requests. See https://golang.org/pkg/context/
   291  // for more information on using Contexts.
   292  func (c *CloudFormation) WaitUntilStackImportCompleteWithContext(ctx aws.Context, input *DescribeStacksInput, opts ...request.WaiterOption) error {
   293  	w := request.Waiter{
   294  		Name:        "WaitUntilStackImportComplete",
   295  		MaxAttempts: 120,
   296  		Delay:       request.ConstantWaiterDelay(30 * time.Second),
   297  		Acceptors: []request.WaiterAcceptor{
   298  			{
   299  				State:   request.SuccessWaiterState,
   300  				Matcher: request.PathAllWaiterMatch, Argument: "Stacks[].StackStatus",
   301  				Expected: "IMPORT_COMPLETE",
   302  			},
   303  			{
   304  				State:   request.FailureWaiterState,
   305  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   306  				Expected: "ROLLBACK_COMPLETE",
   307  			},
   308  			{
   309  				State:   request.FailureWaiterState,
   310  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   311  				Expected: "ROLLBACK_FAILED",
   312  			},
   313  			{
   314  				State:   request.FailureWaiterState,
   315  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   316  				Expected: "IMPORT_ROLLBACK_IN_PROGRESS",
   317  			},
   318  			{
   319  				State:   request.FailureWaiterState,
   320  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   321  				Expected: "IMPORT_ROLLBACK_FAILED",
   322  			},
   323  			{
   324  				State:   request.FailureWaiterState,
   325  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   326  				Expected: "IMPORT_ROLLBACK_COMPLETE",
   327  			},
   328  			{
   329  				State:    request.FailureWaiterState,
   330  				Matcher:  request.ErrorWaiterMatch,
   331  				Expected: "ValidationError",
   332  			},
   333  		},
   334  		Logger: c.Config.Logger,
   335  		NewRequest: func(opts []request.Option) (*request.Request, error) {
   336  			var inCpy *DescribeStacksInput
   337  			if input != nil {
   338  				tmp := *input
   339  				inCpy = &tmp
   340  			}
   341  			req, _ := c.DescribeStacksRequest(inCpy)
   342  			req.SetContext(ctx)
   343  			req.ApplyOptions(opts...)
   344  			return req, nil
   345  		},
   346  	}
   347  	w.ApplyOptions(opts...)
   348  
   349  	return w.WaitWithContext(ctx)
   350  }
   351  
   352  // WaitUntilStackRollbackComplete uses the AWS CloudFormation API operation
   353  // DescribeStacks to wait for a condition to be met before returning.
   354  // If the condition is not met within the max attempt window, an error will
   355  // be returned.
   356  func (c *CloudFormation) WaitUntilStackRollbackComplete(input *DescribeStacksInput) error {
   357  	return c.WaitUntilStackRollbackCompleteWithContext(aws.BackgroundContext(), input)
   358  }
   359  
   360  // WaitUntilStackRollbackCompleteWithContext is an extended version of WaitUntilStackRollbackComplete.
   361  // With the support for passing in a context and options to configure the
   362  // Waiter and the underlying request options.
   363  //
   364  // The context must be non-nil and will be used for request cancellation. If
   365  // the context is nil a panic will occur. In the future the SDK may create
   366  // sub-contexts for http.Requests. See https://golang.org/pkg/context/
   367  // for more information on using Contexts.
   368  func (c *CloudFormation) WaitUntilStackRollbackCompleteWithContext(ctx aws.Context, input *DescribeStacksInput, opts ...request.WaiterOption) error {
   369  	w := request.Waiter{
   370  		Name:        "WaitUntilStackRollbackComplete",
   371  		MaxAttempts: 120,
   372  		Delay:       request.ConstantWaiterDelay(30 * time.Second),
   373  		Acceptors: []request.WaiterAcceptor{
   374  			{
   375  				State:   request.SuccessWaiterState,
   376  				Matcher: request.PathAllWaiterMatch, Argument: "Stacks[].StackStatus",
   377  				Expected: "UPDATE_ROLLBACK_COMPLETE",
   378  			},
   379  			{
   380  				State:   request.FailureWaiterState,
   381  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   382  				Expected: "UPDATE_FAILED",
   383  			},
   384  			{
   385  				State:   request.FailureWaiterState,
   386  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   387  				Expected: "UPDATE_ROLLBACK_FAILED",
   388  			},
   389  			{
   390  				State:   request.FailureWaiterState,
   391  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   392  				Expected: "DELETE_FAILED",
   393  			},
   394  			{
   395  				State:    request.FailureWaiterState,
   396  				Matcher:  request.ErrorWaiterMatch,
   397  				Expected: "ValidationError",
   398  			},
   399  		},
   400  		Logger: c.Config.Logger,
   401  		NewRequest: func(opts []request.Option) (*request.Request, error) {
   402  			var inCpy *DescribeStacksInput
   403  			if input != nil {
   404  				tmp := *input
   405  				inCpy = &tmp
   406  			}
   407  			req, _ := c.DescribeStacksRequest(inCpy)
   408  			req.SetContext(ctx)
   409  			req.ApplyOptions(opts...)
   410  			return req, nil
   411  		},
   412  	}
   413  	w.ApplyOptions(opts...)
   414  
   415  	return w.WaitWithContext(ctx)
   416  }
   417  
   418  // WaitUntilStackUpdateComplete uses the AWS CloudFormation API operation
   419  // DescribeStacks to wait for a condition to be met before returning.
   420  // If the condition is not met within the max attempt window, an error will
   421  // be returned.
   422  func (c *CloudFormation) WaitUntilStackUpdateComplete(input *DescribeStacksInput) error {
   423  	return c.WaitUntilStackUpdateCompleteWithContext(aws.BackgroundContext(), input)
   424  }
   425  
   426  // WaitUntilStackUpdateCompleteWithContext is an extended version of WaitUntilStackUpdateComplete.
   427  // With the support for passing in a context and options to configure the
   428  // Waiter and the underlying request options.
   429  //
   430  // The context must be non-nil and will be used for request cancellation. If
   431  // the context is nil a panic will occur. In the future the SDK may create
   432  // sub-contexts for http.Requests. See https://golang.org/pkg/context/
   433  // for more information on using Contexts.
   434  func (c *CloudFormation) WaitUntilStackUpdateCompleteWithContext(ctx aws.Context, input *DescribeStacksInput, opts ...request.WaiterOption) error {
   435  	w := request.Waiter{
   436  		Name:        "WaitUntilStackUpdateComplete",
   437  		MaxAttempts: 120,
   438  		Delay:       request.ConstantWaiterDelay(30 * time.Second),
   439  		Acceptors: []request.WaiterAcceptor{
   440  			{
   441  				State:   request.SuccessWaiterState,
   442  				Matcher: request.PathAllWaiterMatch, Argument: "Stacks[].StackStatus",
   443  				Expected: "UPDATE_COMPLETE",
   444  			},
   445  			{
   446  				State:   request.FailureWaiterState,
   447  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   448  				Expected: "UPDATE_FAILED",
   449  			},
   450  			{
   451  				State:   request.FailureWaiterState,
   452  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   453  				Expected: "UPDATE_ROLLBACK_FAILED",
   454  			},
   455  			{
   456  				State:   request.FailureWaiterState,
   457  				Matcher: request.PathAnyWaiterMatch, Argument: "Stacks[].StackStatus",
   458  				Expected: "UPDATE_ROLLBACK_COMPLETE",
   459  			},
   460  			{
   461  				State:    request.FailureWaiterState,
   462  				Matcher:  request.ErrorWaiterMatch,
   463  				Expected: "ValidationError",
   464  			},
   465  		},
   466  		Logger: c.Config.Logger,
   467  		NewRequest: func(opts []request.Option) (*request.Request, error) {
   468  			var inCpy *DescribeStacksInput
   469  			if input != nil {
   470  				tmp := *input
   471  				inCpy = &tmp
   472  			}
   473  			req, _ := c.DescribeStacksRequest(inCpy)
   474  			req.SetContext(ctx)
   475  			req.ApplyOptions(opts...)
   476  			return req, nil
   477  		},
   478  	}
   479  	w.ApplyOptions(opts...)
   480  
   481  	return w.WaitWithContext(ctx)
   482  }
   483  
   484  // WaitUntilTypeRegistrationComplete uses the AWS CloudFormation API operation
   485  // DescribeTypeRegistration to wait for a condition to be met before returning.
   486  // If the condition is not met within the max attempt window, an error will
   487  // be returned.
   488  func (c *CloudFormation) WaitUntilTypeRegistrationComplete(input *DescribeTypeRegistrationInput) error {
   489  	return c.WaitUntilTypeRegistrationCompleteWithContext(aws.BackgroundContext(), input)
   490  }
   491  
   492  // WaitUntilTypeRegistrationCompleteWithContext is an extended version of WaitUntilTypeRegistrationComplete.
   493  // With the support for passing in a context and options to configure the
   494  // Waiter and the underlying request options.
   495  //
   496  // The context must be non-nil and will be used for request cancellation. If
   497  // the context is nil a panic will occur. In the future the SDK may create
   498  // sub-contexts for http.Requests. See https://golang.org/pkg/context/
   499  // for more information on using Contexts.
   500  func (c *CloudFormation) WaitUntilTypeRegistrationCompleteWithContext(ctx aws.Context, input *DescribeTypeRegistrationInput, opts ...request.WaiterOption) error {
   501  	w := request.Waiter{
   502  		Name:        "WaitUntilTypeRegistrationComplete",
   503  		MaxAttempts: 120,
   504  		Delay:       request.ConstantWaiterDelay(30 * time.Second),
   505  		Acceptors: []request.WaiterAcceptor{
   506  			{
   507  				State:   request.SuccessWaiterState,
   508  				Matcher: request.PathWaiterMatch, Argument: "ProgressStatus",
   509  				Expected: "COMPLETE",
   510  			},
   511  			{
   512  				State:   request.FailureWaiterState,
   513  				Matcher: request.PathWaiterMatch, Argument: "ProgressStatus",
   514  				Expected: "FAILED",
   515  			},
   516  		},
   517  		Logger: c.Config.Logger,
   518  		NewRequest: func(opts []request.Option) (*request.Request, error) {
   519  			var inCpy *DescribeTypeRegistrationInput
   520  			if input != nil {
   521  				tmp := *input
   522  				inCpy = &tmp
   523  			}
   524  			req, _ := c.DescribeTypeRegistrationRequest(inCpy)
   525  			req.SetContext(ctx)
   526  			req.ApplyOptions(opts...)
   527  			return req, nil
   528  		},
   529  	}
   530  	w.ApplyOptions(opts...)
   531  
   532  	return w.WaitWithContext(ctx)
   533  }