// UnmarshalJSON sets the object from the provided JSON representation
341285
func (r *Resource) UnmarshalJSON(buf []byte) error {
	m := map[string]interface{}{}
	if err := json.Unmarshal(buf, &m); err != nil {
		return err
	}

	typeName := m["Type"].(string)
	r.DependsOn, _ = m["DependsOn"].([]string)
	r.Metadata, _ = m["Metadata"].(map[string]interface{})
	r.DeletionPolicy, _ = m["DeletionPolicy"].(string)
	r.Properties = NewResourceByType(typeName)
	if r.Properties == nil {
		return fmt.Errorf("unknown resource type: %s", typeName)
	}

	propertiesBuf, err := json.Marshal(m["Properties"])
	if err != nil {
		return err
	}
	return json.Unmarshal(propertiesBuf, r.Properties)
}
803494
func (l *EMRInstanceGroupConfigEbsConfigurationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRInstanceGroupConfigEbsConfiguration{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRInstanceGroupConfigEbsConfigurationList{item}
		return nil
	}
	list := []EMRInstanceGroupConfigEbsConfiguration{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRInstanceGroupConfigEbsConfigurationList(list)
		return nil
	}
	return err
}
37973
func (l *APIGatewayStageMethodSettingList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := APIGatewayStageMethodSetting{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = APIGatewayStageMethodSettingList{item}
		return nil
	}
	list := []APIGatewayStageMethodSetting{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = APIGatewayStageMethodSettingList(list)
		return nil
	}
	return err
}
662151
func (l *AutoScalingAutoScalingGroupMetricsCollectionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingAutoScalingGroupMetricsCollection{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingAutoScalingGroupMetricsCollectionList{item}
		return nil
	}
	list := []AutoScalingAutoScalingGroupMetricsCollection{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingAutoScalingGroupMetricsCollectionList(list)
		return nil
	}
	return err
}
480057
func (l *IoTThingAttributePayloadList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := IoTThingAttributePayload{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = IoTThingAttributePayloadList{item}
		return nil
	}
	list := []IoTThingAttributePayload{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = IoTThingAttributePayloadList(list)
		return nil
	}
	return err
}
1046184
func (l *EMRClusterInstanceGroupConfigList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRClusterInstanceGroupConfig{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRClusterInstanceGroupConfigList{item}
		return nil
	}
	list := []EMRClusterInstanceGroupConfig{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRClusterInstanceGroupConfigList(list)
		return nil
	}
	return err
}
1141280
func (l *EMRInstanceGroupConfigMetricDimensionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRInstanceGroupConfigMetricDimension{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRInstanceGroupConfigMetricDimensionList{item}
		return nil
	}
	list := []EMRInstanceGroupConfigMetricDimension{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRInstanceGroupConfigMetricDimensionList(list)
		return nil
	}
	return err
}
788768
func (l *AutoScalingScalingPolicyCustomizedMetricSpecificationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingScalingPolicyCustomizedMetricSpecification{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingScalingPolicyCustomizedMetricSpecificationList{item}
		return nil
	}
	list := []AutoScalingScalingPolicyCustomizedMetricSpecification{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingScalingPolicyCustomizedMetricSpecificationList(list)
		return nil
	}
	return err
}
967177
func (l *S3BucketAccelerateConfigurationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := S3BucketAccelerateConfiguration{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = S3BucketAccelerateConfigurationList{item}
		return nil
	}
	list := []S3BucketAccelerateConfiguration{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = S3BucketAccelerateConfigurationList(list)
		return nil
	}
	return err
}
1274471
func (l *AutoScalingScalingPolicyStepAdjustmentList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingScalingPolicyStepAdjustment{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingScalingPolicyStepAdjustmentList{item}
		return nil
	}
	list := []AutoScalingScalingPolicyStepAdjustment{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingScalingPolicyStepAdjustmentList(list)
		return nil
	}
	return err
}
56199
func (l *APIGatewayUsagePlanAPIStageList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := APIGatewayUsagePlanAPIStage{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = APIGatewayUsagePlanAPIStageList{item}
		return nil
	}
	list := []APIGatewayUsagePlanAPIStage{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = APIGatewayUsagePlanAPIStageList(list)
		return nil
	}
	return err
}
393027
func (l *AutoScalingPlansScalingPlanMetricDimensionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingPlansScalingPlanMetricDimension{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingPlansScalingPlanMetricDimensionList{item}
		return nil
	}
	list := []AutoScalingPlansScalingPlanMetricDimension{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingPlansScalingPlanMetricDimensionList(list)
		return nil
	}
	return err
}
1153472
func (l *ECSTaskDefinitionKernelCapabilitiesList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := ECSTaskDefinitionKernelCapabilities{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = ECSTaskDefinitionKernelCapabilitiesList{item}
		return nil
	}
	list := []ECSTaskDefinitionKernelCapabilities{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = ECSTaskDefinitionKernelCapabilitiesList(list)
		return nil
	}
	return err
}
1112570
func (l *AutoScalingPlansScalingPlanTagFilterList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingPlansScalingPlanTagFilter{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingPlansScalingPlanTagFilterList{item}
		return nil
	}
	list := []AutoScalingPlansScalingPlanTagFilter{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingPlansScalingPlanTagFilterList(list)
		return nil
	}
	return err
}
1088834
func (l *KinesisFirehoseDeliveryStreamProcessorParameterList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := KinesisFirehoseDeliveryStreamProcessorParameter{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = KinesisFirehoseDeliveryStreamProcessorParameterList{item}
		return nil
	}
	list := []KinesisFirehoseDeliveryStreamProcessorParameter{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = KinesisFirehoseDeliveryStreamProcessorParameterList(list)
		return nil
	}
	return err
}
440865
func (l *CloudFrontDistributionS3OriginConfigList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := CloudFrontDistributionS3OriginConfig{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = CloudFrontDistributionS3OriginConfigList{item}
		return nil
	}
	list := []CloudFrontDistributionS3OriginConfig{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = CloudFrontDistributionS3OriginConfigList(list)
		return nil
	}
	return err
}
120923
func (l *EMRInstanceFleetConfigEbsConfigurationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRInstanceFleetConfigEbsConfiguration{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRInstanceFleetConfigEbsConfigurationList{item}
		return nil
	}
	list := []EMRInstanceFleetConfigEbsConfiguration{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRInstanceFleetConfigEbsConfigurationList(list)
		return nil
	}
	return err
}