All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.services.bedrock.model.CreateModelCustomizationJobRequest Maven / Gradle / Ivy

Go to download

The AWS Java SDK for Amazon Bedrock module holds the client classes that are used for communicating with Amazon Bedrock Service

The newest version!
/*
 * Copyright 2019-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */
package com.amazonaws.services.bedrock.model;

import java.io.Serializable;
import javax.annotation.Generated;

import com.amazonaws.AmazonWebServiceRequest;

/**
 * 
 * @see AWS API Documentation
 */
@Generated("com.amazonaws:aws-java-sdk-code-generator")
public class CreateModelCustomizationJobRequest extends com.amazonaws.AmazonWebServiceRequest implements Serializable, Cloneable {

    /**
     * 

* A name for the fine-tuning job. *

*/ private String jobName; /** *

* A name for the resulting custom model. *

*/ private String customModelName; /** *

* The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on your * behalf. For example, during model training, Amazon Bedrock needs your permission to read input data from an S3 * bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller of this API must * have the iam:PassRole permission. *

*/ private String roleArn; /** *

* A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token * matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more * information, see Ensuring * idempotency. *

*/ private String clientRequestToken; /** *

* Name of the base model. *

*/ private String baseModelIdentifier; /** *

* The customization type. *

*/ private String customizationType; /** *

* The custom model is encrypted at rest using this key. *

*/ private String customModelKmsKeyId; /** *

* Tags to attach to the job. *

*/ private java.util.List jobTags; /** *

* Tags to attach to the resulting custom model. *

*/ private java.util.List customModelTags; /** *

* Information about the training dataset. *

*/ private TrainingDataConfig trainingDataConfig; /** *

* Information about the validation dataset. *

*/ private ValidationDataConfig validationDataConfig; /** *

* S3 location for the output data. *

*/ private OutputDataConfig outputDataConfig; /** *

* Parameters related to tuning the model. For details on the format for different models, see Custom model * hyperparameters. *

*/ private java.util.Map hyperParameters; /** *

* VPC configuration (optional). Configuration parameters for the private Virtual Private Cloud (VPC) that contains * the resources you are using for this job. *

*/ private VpcConfig vpcConfig; /** *

* A name for the fine-tuning job. *

* * @param jobName * A name for the fine-tuning job. */ public void setJobName(String jobName) { this.jobName = jobName; } /** *

* A name for the fine-tuning job. *

* * @return A name for the fine-tuning job. */ public String getJobName() { return this.jobName; } /** *

* A name for the fine-tuning job. *

* * @param jobName * A name for the fine-tuning job. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withJobName(String jobName) { setJobName(jobName); return this; } /** *

* A name for the resulting custom model. *

* * @param customModelName * A name for the resulting custom model. */ public void setCustomModelName(String customModelName) { this.customModelName = customModelName; } /** *

* A name for the resulting custom model. *

* * @return A name for the resulting custom model. */ public String getCustomModelName() { return this.customModelName; } /** *

* A name for the resulting custom model. *

* * @param customModelName * A name for the resulting custom model. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withCustomModelName(String customModelName) { setCustomModelName(customModelName); return this; } /** *

* The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on your * behalf. For example, during model training, Amazon Bedrock needs your permission to read input data from an S3 * bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller of this API must * have the iam:PassRole permission. *

* * @param roleArn * The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on * your behalf. For example, during model training, Amazon Bedrock needs your permission to read input data * from an S3 bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller * of this API must have the iam:PassRole permission. */ public void setRoleArn(String roleArn) { this.roleArn = roleArn; } /** *

* The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on your * behalf. For example, during model training, Amazon Bedrock needs your permission to read input data from an S3 * bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller of this API must * have the iam:PassRole permission. *

* * @return The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on * your behalf. For example, during model training, Amazon Bedrock needs your permission to read input data * from an S3 bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller * of this API must have the iam:PassRole permission. */ public String getRoleArn() { return this.roleArn; } /** *

* The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on your * behalf. For example, during model training, Amazon Bedrock needs your permission to read input data from an S3 * bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller of this API must * have the iam:PassRole permission. *

* * @param roleArn * The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock can assume to perform tasks on * your behalf. For example, during model training, Amazon Bedrock needs your permission to read input data * from an S3 bucket, write model artifacts to an S3 bucket. To pass this role to Amazon Bedrock, the caller * of this API must have the iam:PassRole permission. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withRoleArn(String roleArn) { setRoleArn(roleArn); return this; } /** *

* A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token * matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more * information, see Ensuring * idempotency. *

* * @param clientRequestToken * A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If * this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. * For more information, see Ensuring * idempotency. */ public void setClientRequestToken(String clientRequestToken) { this.clientRequestToken = clientRequestToken; } /** *

* A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token * matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more * information, see Ensuring * idempotency. *

* * @return A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If * this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. * For more information, see Ensuring * idempotency. */ public String getClientRequestToken() { return this.clientRequestToken; } /** *

* A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token * matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more * information, see Ensuring * idempotency. *

* * @param clientRequestToken * A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If * this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. * For more information, see Ensuring * idempotency. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withClientRequestToken(String clientRequestToken) { setClientRequestToken(clientRequestToken); return this; } /** *

* Name of the base model. *

* * @param baseModelIdentifier * Name of the base model. */ public void setBaseModelIdentifier(String baseModelIdentifier) { this.baseModelIdentifier = baseModelIdentifier; } /** *

* Name of the base model. *

* * @return Name of the base model. */ public String getBaseModelIdentifier() { return this.baseModelIdentifier; } /** *

* Name of the base model. *

* * @param baseModelIdentifier * Name of the base model. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withBaseModelIdentifier(String baseModelIdentifier) { setBaseModelIdentifier(baseModelIdentifier); return this; } /** *

* The customization type. *

* * @param customizationType * The customization type. * @see CustomizationType */ public void setCustomizationType(String customizationType) { this.customizationType = customizationType; } /** *

* The customization type. *

* * @return The customization type. * @see CustomizationType */ public String getCustomizationType() { return this.customizationType; } /** *

* The customization type. *

* * @param customizationType * The customization type. * @return Returns a reference to this object so that method calls can be chained together. * @see CustomizationType */ public CreateModelCustomizationJobRequest withCustomizationType(String customizationType) { setCustomizationType(customizationType); return this; } /** *

* The customization type. *

* * @param customizationType * The customization type. * @return Returns a reference to this object so that method calls can be chained together. * @see CustomizationType */ public CreateModelCustomizationJobRequest withCustomizationType(CustomizationType customizationType) { this.customizationType = customizationType.toString(); return this; } /** *

* The custom model is encrypted at rest using this key. *

* * @param customModelKmsKeyId * The custom model is encrypted at rest using this key. */ public void setCustomModelKmsKeyId(String customModelKmsKeyId) { this.customModelKmsKeyId = customModelKmsKeyId; } /** *

* The custom model is encrypted at rest using this key. *

* * @return The custom model is encrypted at rest using this key. */ public String getCustomModelKmsKeyId() { return this.customModelKmsKeyId; } /** *

* The custom model is encrypted at rest using this key. *

* * @param customModelKmsKeyId * The custom model is encrypted at rest using this key. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withCustomModelKmsKeyId(String customModelKmsKeyId) { setCustomModelKmsKeyId(customModelKmsKeyId); return this; } /** *

* Tags to attach to the job. *

* * @return Tags to attach to the job. */ public java.util.List getJobTags() { return jobTags; } /** *

* Tags to attach to the job. *

* * @param jobTags * Tags to attach to the job. */ public void setJobTags(java.util.Collection jobTags) { if (jobTags == null) { this.jobTags = null; return; } this.jobTags = new java.util.ArrayList(jobTags); } /** *

* Tags to attach to the job. *

*

* NOTE: This method appends the values to the existing list (if any). Use * {@link #setJobTags(java.util.Collection)} or {@link #withJobTags(java.util.Collection)} if you want to override * the existing values. *

* * @param jobTags * Tags to attach to the job. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withJobTags(Tag... jobTags) { if (this.jobTags == null) { setJobTags(new java.util.ArrayList(jobTags.length)); } for (Tag ele : jobTags) { this.jobTags.add(ele); } return this; } /** *

* Tags to attach to the job. *

* * @param jobTags * Tags to attach to the job. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withJobTags(java.util.Collection jobTags) { setJobTags(jobTags); return this; } /** *

* Tags to attach to the resulting custom model. *

* * @return Tags to attach to the resulting custom model. */ public java.util.List getCustomModelTags() { return customModelTags; } /** *

* Tags to attach to the resulting custom model. *

* * @param customModelTags * Tags to attach to the resulting custom model. */ public void setCustomModelTags(java.util.Collection customModelTags) { if (customModelTags == null) { this.customModelTags = null; return; } this.customModelTags = new java.util.ArrayList(customModelTags); } /** *

* Tags to attach to the resulting custom model. *

*

* NOTE: This method appends the values to the existing list (if any). Use * {@link #setCustomModelTags(java.util.Collection)} or {@link #withCustomModelTags(java.util.Collection)} if you * want to override the existing values. *

* * @param customModelTags * Tags to attach to the resulting custom model. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withCustomModelTags(Tag... customModelTags) { if (this.customModelTags == null) { setCustomModelTags(new java.util.ArrayList(customModelTags.length)); } for (Tag ele : customModelTags) { this.customModelTags.add(ele); } return this; } /** *

* Tags to attach to the resulting custom model. *

* * @param customModelTags * Tags to attach to the resulting custom model. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withCustomModelTags(java.util.Collection customModelTags) { setCustomModelTags(customModelTags); return this; } /** *

* Information about the training dataset. *

* * @param trainingDataConfig * Information about the training dataset. */ public void setTrainingDataConfig(TrainingDataConfig trainingDataConfig) { this.trainingDataConfig = trainingDataConfig; } /** *

* Information about the training dataset. *

* * @return Information about the training dataset. */ public TrainingDataConfig getTrainingDataConfig() { return this.trainingDataConfig; } /** *

* Information about the training dataset. *

* * @param trainingDataConfig * Information about the training dataset. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withTrainingDataConfig(TrainingDataConfig trainingDataConfig) { setTrainingDataConfig(trainingDataConfig); return this; } /** *

* Information about the validation dataset. *

* * @param validationDataConfig * Information about the validation dataset. */ public void setValidationDataConfig(ValidationDataConfig validationDataConfig) { this.validationDataConfig = validationDataConfig; } /** *

* Information about the validation dataset. *

* * @return Information about the validation dataset. */ public ValidationDataConfig getValidationDataConfig() { return this.validationDataConfig; } /** *

* Information about the validation dataset. *

* * @param validationDataConfig * Information about the validation dataset. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withValidationDataConfig(ValidationDataConfig validationDataConfig) { setValidationDataConfig(validationDataConfig); return this; } /** *

* S3 location for the output data. *

* * @param outputDataConfig * S3 location for the output data. */ public void setOutputDataConfig(OutputDataConfig outputDataConfig) { this.outputDataConfig = outputDataConfig; } /** *

* S3 location for the output data. *

* * @return S3 location for the output data. */ public OutputDataConfig getOutputDataConfig() { return this.outputDataConfig; } /** *

* S3 location for the output data. *

* * @param outputDataConfig * S3 location for the output data. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withOutputDataConfig(OutputDataConfig outputDataConfig) { setOutputDataConfig(outputDataConfig); return this; } /** *

* Parameters related to tuning the model. For details on the format for different models, see Custom model * hyperparameters. *

* * @return Parameters related to tuning the model. For details on the format for different models, see Custom model * hyperparameters. */ public java.util.Map getHyperParameters() { return hyperParameters; } /** *

* Parameters related to tuning the model. For details on the format for different models, see Custom model * hyperparameters. *

* * @param hyperParameters * Parameters related to tuning the model. For details on the format for different models, see Custom model * hyperparameters. */ public void setHyperParameters(java.util.Map hyperParameters) { this.hyperParameters = hyperParameters; } /** *

* Parameters related to tuning the model. For details on the format for different models, see Custom model * hyperparameters. *

* * @param hyperParameters * Parameters related to tuning the model. For details on the format for different models, see Custom model * hyperparameters. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withHyperParameters(java.util.Map hyperParameters) { setHyperParameters(hyperParameters); return this; } /** * Add a single HyperParameters entry * * @see CreateModelCustomizationJobRequest#withHyperParameters * @returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest addHyperParametersEntry(String key, String value) { if (null == this.hyperParameters) { this.hyperParameters = new java.util.HashMap(); } if (this.hyperParameters.containsKey(key)) throw new IllegalArgumentException("Duplicated keys (" + key.toString() + ") are provided."); this.hyperParameters.put(key, value); return this; } /** * Removes all the entries added into HyperParameters. * * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest clearHyperParametersEntries() { this.hyperParameters = null; return this; } /** *

* VPC configuration (optional). Configuration parameters for the private Virtual Private Cloud (VPC) that contains * the resources you are using for this job. *

* * @param vpcConfig * VPC configuration (optional). Configuration parameters for the private Virtual Private Cloud (VPC) that * contains the resources you are using for this job. */ public void setVpcConfig(VpcConfig vpcConfig) { this.vpcConfig = vpcConfig; } /** *

* VPC configuration (optional). Configuration parameters for the private Virtual Private Cloud (VPC) that contains * the resources you are using for this job. *

* * @return VPC configuration (optional). Configuration parameters for the private Virtual Private Cloud (VPC) that * contains the resources you are using for this job. */ public VpcConfig getVpcConfig() { return this.vpcConfig; } /** *

* VPC configuration (optional). Configuration parameters for the private Virtual Private Cloud (VPC) that contains * the resources you are using for this job. *

* * @param vpcConfig * VPC configuration (optional). Configuration parameters for the private Virtual Private Cloud (VPC) that * contains the resources you are using for this job. * @return Returns a reference to this object so that method calls can be chained together. */ public CreateModelCustomizationJobRequest withVpcConfig(VpcConfig vpcConfig) { setVpcConfig(vpcConfig); return this; } /** * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be * redacted from this string using a placeholder value. * * @return A string representation of this object. * * @see java.lang.Object#toString() */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{"); if (getJobName() != null) sb.append("JobName: ").append(getJobName()).append(","); if (getCustomModelName() != null) sb.append("CustomModelName: ").append(getCustomModelName()).append(","); if (getRoleArn() != null) sb.append("RoleArn: ").append(getRoleArn()).append(","); if (getClientRequestToken() != null) sb.append("ClientRequestToken: ").append(getClientRequestToken()).append(","); if (getBaseModelIdentifier() != null) sb.append("BaseModelIdentifier: ").append(getBaseModelIdentifier()).append(","); if (getCustomizationType() != null) sb.append("CustomizationType: ").append(getCustomizationType()).append(","); if (getCustomModelKmsKeyId() != null) sb.append("CustomModelKmsKeyId: ").append(getCustomModelKmsKeyId()).append(","); if (getJobTags() != null) sb.append("JobTags: ").append(getJobTags()).append(","); if (getCustomModelTags() != null) sb.append("CustomModelTags: ").append(getCustomModelTags()).append(","); if (getTrainingDataConfig() != null) sb.append("TrainingDataConfig: ").append(getTrainingDataConfig()).append(","); if (getValidationDataConfig() != null) sb.append("ValidationDataConfig: ").append(getValidationDataConfig()).append(","); if (getOutputDataConfig() != null) sb.append("OutputDataConfig: ").append(getOutputDataConfig()).append(","); if (getHyperParameters() != null) sb.append("HyperParameters: ").append(getHyperParameters()).append(","); if (getVpcConfig() != null) sb.append("VpcConfig: ").append(getVpcConfig()); sb.append("}"); return sb.toString(); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (obj instanceof CreateModelCustomizationJobRequest == false) return false; CreateModelCustomizationJobRequest other = (CreateModelCustomizationJobRequest) obj; if (other.getJobName() == null ^ this.getJobName() == null) return false; if (other.getJobName() != null && other.getJobName().equals(this.getJobName()) == false) return false; if (other.getCustomModelName() == null ^ this.getCustomModelName() == null) return false; if (other.getCustomModelName() != null && other.getCustomModelName().equals(this.getCustomModelName()) == false) return false; if (other.getRoleArn() == null ^ this.getRoleArn() == null) return false; if (other.getRoleArn() != null && other.getRoleArn().equals(this.getRoleArn()) == false) return false; if (other.getClientRequestToken() == null ^ this.getClientRequestToken() == null) return false; if (other.getClientRequestToken() != null && other.getClientRequestToken().equals(this.getClientRequestToken()) == false) return false; if (other.getBaseModelIdentifier() == null ^ this.getBaseModelIdentifier() == null) return false; if (other.getBaseModelIdentifier() != null && other.getBaseModelIdentifier().equals(this.getBaseModelIdentifier()) == false) return false; if (other.getCustomizationType() == null ^ this.getCustomizationType() == null) return false; if (other.getCustomizationType() != null && other.getCustomizationType().equals(this.getCustomizationType()) == false) return false; if (other.getCustomModelKmsKeyId() == null ^ this.getCustomModelKmsKeyId() == null) return false; if (other.getCustomModelKmsKeyId() != null && other.getCustomModelKmsKeyId().equals(this.getCustomModelKmsKeyId()) == false) return false; if (other.getJobTags() == null ^ this.getJobTags() == null) return false; if (other.getJobTags() != null && other.getJobTags().equals(this.getJobTags()) == false) return false; if (other.getCustomModelTags() == null ^ this.getCustomModelTags() == null) return false; if (other.getCustomModelTags() != null && other.getCustomModelTags().equals(this.getCustomModelTags()) == false) return false; if (other.getTrainingDataConfig() == null ^ this.getTrainingDataConfig() == null) return false; if (other.getTrainingDataConfig() != null && other.getTrainingDataConfig().equals(this.getTrainingDataConfig()) == false) return false; if (other.getValidationDataConfig() == null ^ this.getValidationDataConfig() == null) return false; if (other.getValidationDataConfig() != null && other.getValidationDataConfig().equals(this.getValidationDataConfig()) == false) return false; if (other.getOutputDataConfig() == null ^ this.getOutputDataConfig() == null) return false; if (other.getOutputDataConfig() != null && other.getOutputDataConfig().equals(this.getOutputDataConfig()) == false) return false; if (other.getHyperParameters() == null ^ this.getHyperParameters() == null) return false; if (other.getHyperParameters() != null && other.getHyperParameters().equals(this.getHyperParameters()) == false) return false; if (other.getVpcConfig() == null ^ this.getVpcConfig() == null) return false; if (other.getVpcConfig() != null && other.getVpcConfig().equals(this.getVpcConfig()) == false) return false; return true; } @Override public int hashCode() { final int prime = 31; int hashCode = 1; hashCode = prime * hashCode + ((getJobName() == null) ? 0 : getJobName().hashCode()); hashCode = prime * hashCode + ((getCustomModelName() == null) ? 0 : getCustomModelName().hashCode()); hashCode = prime * hashCode + ((getRoleArn() == null) ? 0 : getRoleArn().hashCode()); hashCode = prime * hashCode + ((getClientRequestToken() == null) ? 0 : getClientRequestToken().hashCode()); hashCode = prime * hashCode + ((getBaseModelIdentifier() == null) ? 0 : getBaseModelIdentifier().hashCode()); hashCode = prime * hashCode + ((getCustomizationType() == null) ? 0 : getCustomizationType().hashCode()); hashCode = prime * hashCode + ((getCustomModelKmsKeyId() == null) ? 0 : getCustomModelKmsKeyId().hashCode()); hashCode = prime * hashCode + ((getJobTags() == null) ? 0 : getJobTags().hashCode()); hashCode = prime * hashCode + ((getCustomModelTags() == null) ? 0 : getCustomModelTags().hashCode()); hashCode = prime * hashCode + ((getTrainingDataConfig() == null) ? 0 : getTrainingDataConfig().hashCode()); hashCode = prime * hashCode + ((getValidationDataConfig() == null) ? 0 : getValidationDataConfig().hashCode()); hashCode = prime * hashCode + ((getOutputDataConfig() == null) ? 0 : getOutputDataConfig().hashCode()); hashCode = prime * hashCode + ((getHyperParameters() == null) ? 0 : getHyperParameters().hashCode()); hashCode = prime * hashCode + ((getVpcConfig() == null) ? 0 : getVpcConfig().hashCode()); return hashCode; } @Override public CreateModelCustomizationJobRequest clone() { return (CreateModelCustomizationJobRequest) super.clone(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy