src/Ess/V20140828/EssApiResolver.php [1351:1795]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	public function withSpotPriceLimit(array $spotPriceLimit)
	{
	    $this->data['SpotPriceLimit'] = $spotPriceLimit;
		foreach ($spotPriceLimit as $depth1 => $depth1Value) {
			if(isset($depth1Value['InstanceType'])){
				$this->options['query']['SpotPriceLimit.' . ($depth1 + 1) . '.InstanceType'] = $depth1Value['InstanceType'];
			}
			if(isset($depth1Value['PriceLimit'])){
				$this->options['query']['SpotPriceLimit.' . ($depth1 + 1) . '.PriceLimit'] = $depth1Value['PriceLimit'];
			}
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withPrivatePoolOptionsMatchCriteria($value)
    {
        $this->data['PrivatePoolOptionsMatchCriteria'] = $value;
        $this->options['query']['PrivatePoolOptions.MatchCriteria'] = $value;

        return $this;
    }

    /**
     * @param array $customPriorities
     *
     * @return $this
     */
	public function withCustomPriorities(array $customPriorities)
	{
	    $this->data['CustomPriorities'] = $customPriorities;
		foreach ($customPriorities as $depth1 => $depth1Value) {
			if(isset($depth1Value['VswitchId'])){
				$this->options['query']['CustomPriorities.' . ($depth1 + 1) . '.VswitchId'] = $depth1Value['VswitchId'];
			}
			if(isset($depth1Value['InstanceType'])){
				$this->options['query']['CustomPriorities.' . ($depth1 + 1) . '.InstanceType'] = $depth1Value['InstanceType'];
			}
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskAutoSnapshotPolicyId($value)
    {
        $this->data['SystemDiskAutoSnapshotPolicyId'] = $value;
        $this->options['query']['SystemDisk.AutoSnapshotPolicyId'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withPrivatePoolOptionsId($value)
    {
        $this->data['PrivatePoolOptionsId'] = $value;
        $this->options['query']['PrivatePoolOptions.Id'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withImageOptionsLoginAsNonRoot($value)
    {
        $this->data['ImageOptionsLoginAsNonRoot'] = $value;
        $this->options['query']['ImageOptions.LoginAsNonRoot'] = $value;

        return $this;
    }

    /**
     * @param array $systemDiskCategories
     *
     * @return $this
     */
	public function withSystemDiskCategories(array $systemDiskCategories)
	{
	    $this->data['SystemDiskCategories'] = $systemDiskCategories;
		foreach ($systemDiskCategories as $i => $iValue) {
			$this->options['query']['SystemDiskCategories.' . ($i + 1)] = $iValue;
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskBurstingEnabled($value)
    {
        $this->data['SystemDiskBurstingEnabled'] = $value;
        $this->options['query']['SystemDisk.BurstingEnabled'] = $value;

        return $this;
    }

    /**
     * @param array $instancePatternInfo
     *
     * @return $this
     */
	public function withInstancePatternInfo(array $instancePatternInfo)
	{
	    $this->data['InstancePatternInfo'] = $instancePatternInfo;
		foreach ($instancePatternInfo as $depth1 => $depth1Value) {
			foreach ($depth1Value['InstanceCategories'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.InstanceCategories.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['Memory'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.Memory'] = $depth1Value['Memory'];
			}
			if(isset($depth1Value['MaximumCpuCoreCount'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MaximumCpuCoreCount'] = $depth1Value['MaximumCpuCoreCount'];
			}
			if(isset($depth1Value['MaxPrice'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MaxPrice'] = $depth1Value['MaxPrice'];
			}
			if(isset($depth1Value['MinimumGpuAmount'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumGpuAmount'] = $depth1Value['MinimumGpuAmount'];
			}
			if(isset($depth1Value['MaximumGpuAmount'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MaximumGpuAmount'] = $depth1Value['MaximumGpuAmount'];
			}
			if(isset($depth1Value['MaximumMemorySize'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MaximumMemorySize'] = $depth1Value['MaximumMemorySize'];
			}
			if(isset($depth1Value['MinimumInitialCredit'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumInitialCredit'] = $depth1Value['MinimumInitialCredit'];
			}
			foreach ($depth1Value['ExcludedInstanceType'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.ExcludedInstanceType.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['MinimumEniIpv6AddressQuantity'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumEniIpv6AddressQuantity'] = $depth1Value['MinimumEniIpv6AddressQuantity'];
			}
			if(isset($depth1Value['MinimumEniPrivateIpAddressQuantity'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumEniPrivateIpAddressQuantity'] = $depth1Value['MinimumEniPrivateIpAddressQuantity'];
			}
			if(isset($depth1Value['BurstablePerformance'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.BurstablePerformance'] = $depth1Value['BurstablePerformance'];
			}
			foreach ($depth1Value['PhysicalProcessorModels'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.PhysicalProcessorModels.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['MinimumCpuCoreCount'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumCpuCoreCount'] = $depth1Value['MinimumCpuCoreCount'];
			}
			foreach ($depth1Value['GpuSpecs'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.GpuSpecs.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['MinimumEniQuantity'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumEniQuantity'] = $depth1Value['MinimumEniQuantity'];
			}
			if(isset($depth1Value['MinimumMemorySize'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumMemorySize'] = $depth1Value['MinimumMemorySize'];
			}
			if(isset($depth1Value['Cores'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.Cores'] = $depth1Value['Cores'];
			}
			if(isset($depth1Value['InstanceFamilyLevel'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.InstanceFamilyLevel'] = $depth1Value['InstanceFamilyLevel'];
			}
			foreach ($depth1Value['InstanceTypeFamilies'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.InstanceTypeFamilies.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['MinimumBaselineCredit'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumBaselineCredit'] = $depth1Value['MinimumBaselineCredit'];
			}
			foreach ($depth1Value['CpuArchitectures'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.CpuArchitectures.' . ($i + 1)] = $iValue;
			}
			foreach ($depth1Value['Architecture'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.Architecture.' . ($i + 1)] = $iValue;
			}
		}

		return $this;
    }

    /**
     * @param array $networkInterfaces
     *
     * @return $this
     */
	public function withNetworkInterfaces(array $networkInterfaces)
	{
	    $this->data['NetworkInterfaces'] = $networkInterfaces;
		foreach ($networkInterfaces as $depth1 => $depth1Value) {
			if(isset($depth1Value['Ipv6AddressCount'])){
				$this->options['query']['NetworkInterfaces.' . ($depth1 + 1) . '.Ipv6AddressCount'] = $depth1Value['Ipv6AddressCount'];
			}
			if(isset($depth1Value['InstanceType'])){
				$this->options['query']['NetworkInterfaces.' . ($depth1 + 1) . '.InstanceType'] = $depth1Value['InstanceType'];
			}
			foreach ($depth1Value['SecurityGroupIds'] as $i => $iValue) {
				$this->options['query']['NetworkInterfaces.' . ($depth1 + 1) . '.SecurityGroupIds.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['NetworkInterfaceTrafficMode'])){
				$this->options['query']['NetworkInterfaces.' . ($depth1 + 1) . '.NetworkInterfaceTrafficMode'] = $depth1Value['NetworkInterfaceTrafficMode'];
			}
		}

		return $this;
    }

    /**
     * @param array $instanceTypes
     *
     * @return $this
     */
	public function withInstanceTypes(array $instanceTypes)
	{
	    $this->data['InstanceTypes'] = $instanceTypes;
		foreach ($instanceTypes as $i => $iValue) {
			$this->options['query']['InstanceTypes.' . ($i + 1)] = $iValue;
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskKMSKeyId($value)
    {
        $this->data['SystemDiskKMSKeyId'] = $value;
        $this->options['query']['SystemDisk.KMSKeyId'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskCategory($value)
    {
        $this->data['SystemDiskCategory'] = $value;
        $this->options['query']['SystemDisk.Category'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskPerformanceLevel($value)
    {
        $this->data['SystemDiskPerformanceLevel'] = $value;
        $this->options['query']['SystemDisk.PerformanceLevel'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskDiskName($value)
    {
        $this->data['SystemDiskDiskName'] = $value;
        $this->options['query']['SystemDisk.DiskName'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskEncryptAlgorithm($value)
    {
        $this->data['SystemDiskEncryptAlgorithm'] = $value;
        $this->options['query']['SystemDisk.EncryptAlgorithm'] = $value;

        return $this;
    }

    /**
     * @param array $securityGroupIds
     *
     * @return $this
     */
	public function withSecurityGroupIds(array $securityGroupIds)
	{
	    $this->data['SecurityGroupIds'] = $securityGroupIds;
		foreach ($securityGroupIds as $i => $iValue) {
			$this->options['query']['SecurityGroupIds.' . ($i + 1)] = $iValue;
		}

		return $this;
    }

    /**
     * @param array $dataDisk
     *
     * @return $this
     */
	public function withDataDisk(array $dataDisk)
	{
	    $this->data['DataDisk'] = $dataDisk;
		foreach ($dataDisk as $depth1 => $depth1Value) {
			if(isset($depth1Value['SnapshotId'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.SnapshotId'] = $depth1Value['SnapshotId'];
			}
			if(isset($depth1Value['PerformanceLevel'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.PerformanceLevel'] = $depth1Value['PerformanceLevel'];
			}
			if(isset($depth1Value['AutoSnapshotPolicyId'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.AutoSnapshotPolicyId'] = $depth1Value['AutoSnapshotPolicyId'];
			}
			if(isset($depth1Value['Description'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Description'] = $depth1Value['Description'];
			}
			if(isset($depth1Value['BurstingEnabled'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.BurstingEnabled'] = $depth1Value['BurstingEnabled'];
			}
			if(isset($depth1Value['DiskName'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.DiskName'] = $depth1Value['DiskName'];
			}
			if(isset($depth1Value['ProvisionedIops'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.ProvisionedIops'] = $depth1Value['ProvisionedIops'];
			}
			if(isset($depth1Value['Encrypted'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Encrypted'] = $depth1Value['Encrypted'];
			}
			if(isset($depth1Value['Size'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Size'] = $depth1Value['Size'];
			}
			foreach ($depth1Value['Categories'] as $i => $iValue) {
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Categories.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['Category'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Category'] = $depth1Value['Category'];
			}
			if(isset($depth1Value['KMSKeyId'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.KMSKeyId'] = $depth1Value['KMSKeyId'];
			}
			if(isset($depth1Value['Device'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Device'] = $depth1Value['Device'];
			}
			if(isset($depth1Value['DeleteWithInstance'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.DeleteWithInstance'] = $depth1Value['DeleteWithInstance'];
			}
		}

		return $this;
    }

    /**
     * @param array $instanceTypeOverride
     *
     * @return $this
     */
	public function withInstanceTypeOverride(array $instanceTypeOverride)
	{
	    $this->data['InstanceTypeOverride'] = $instanceTypeOverride;
		foreach ($instanceTypeOverride as $depth1 => $depth1Value) {
			if(isset($depth1Value['WeightedCapacity'])){
				$this->options['query']['InstanceTypeOverride.' . ($depth1 + 1) . '.WeightedCapacity'] = $depth1Value['WeightedCapacity'];
			}
			if(isset($depth1Value['InstanceType'])){
				$this->options['query']['InstanceTypeOverride.' . ($depth1 + 1) . '.InstanceType'] = $depth1Value['InstanceType'];
			}
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskProvisionedIops($value)
    {
        $this->data['SystemDiskProvisionedIops'] = $value;
        $this->options['query']['SystemDisk.ProvisionedIops'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskSize($value)
    {
        $this->data['SystemDiskSize'] = $value;
        $this->options['query']['SystemDisk.Size'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskDescription($value)
    {
        $this->data['SystemDiskDescription'] = $value;
        $this->options['query']['SystemDisk.Description'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskEncrypted($value)
    {
        $this->data['SystemDiskEncrypted'] = $value;
        $this->options['query']['SystemDisk.Encrypted'] = $value;

        return $this;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



src/Ess/V20140828/EssApiResolver.php [5140:5584]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	public function withSpotPriceLimit(array $spotPriceLimit)
	{
	    $this->data['SpotPriceLimit'] = $spotPriceLimit;
		foreach ($spotPriceLimit as $depth1 => $depth1Value) {
			if(isset($depth1Value['InstanceType'])){
				$this->options['query']['SpotPriceLimit.' . ($depth1 + 1) . '.InstanceType'] = $depth1Value['InstanceType'];
			}
			if(isset($depth1Value['PriceLimit'])){
				$this->options['query']['SpotPriceLimit.' . ($depth1 + 1) . '.PriceLimit'] = $depth1Value['PriceLimit'];
			}
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withPrivatePoolOptionsMatchCriteria($value)
    {
        $this->data['PrivatePoolOptionsMatchCriteria'] = $value;
        $this->options['query']['PrivatePoolOptions.MatchCriteria'] = $value;

        return $this;
    }

    /**
     * @param array $customPriorities
     *
     * @return $this
     */
	public function withCustomPriorities(array $customPriorities)
	{
	    $this->data['CustomPriorities'] = $customPriorities;
		foreach ($customPriorities as $depth1 => $depth1Value) {
			if(isset($depth1Value['VswitchId'])){
				$this->options['query']['CustomPriorities.' . ($depth1 + 1) . '.VswitchId'] = $depth1Value['VswitchId'];
			}
			if(isset($depth1Value['InstanceType'])){
				$this->options['query']['CustomPriorities.' . ($depth1 + 1) . '.InstanceType'] = $depth1Value['InstanceType'];
			}
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskAutoSnapshotPolicyId($value)
    {
        $this->data['SystemDiskAutoSnapshotPolicyId'] = $value;
        $this->options['query']['SystemDisk.AutoSnapshotPolicyId'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withPrivatePoolOptionsId($value)
    {
        $this->data['PrivatePoolOptionsId'] = $value;
        $this->options['query']['PrivatePoolOptions.Id'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withImageOptionsLoginAsNonRoot($value)
    {
        $this->data['ImageOptionsLoginAsNonRoot'] = $value;
        $this->options['query']['ImageOptions.LoginAsNonRoot'] = $value;

        return $this;
    }

    /**
     * @param array $systemDiskCategories
     *
     * @return $this
     */
	public function withSystemDiskCategories(array $systemDiskCategories)
	{
	    $this->data['SystemDiskCategories'] = $systemDiskCategories;
		foreach ($systemDiskCategories as $i => $iValue) {
			$this->options['query']['SystemDiskCategories.' . ($i + 1)] = $iValue;
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskBurstingEnabled($value)
    {
        $this->data['SystemDiskBurstingEnabled'] = $value;
        $this->options['query']['SystemDisk.BurstingEnabled'] = $value;

        return $this;
    }

    /**
     * @param array $instancePatternInfo
     *
     * @return $this
     */
	public function withInstancePatternInfo(array $instancePatternInfo)
	{
	    $this->data['InstancePatternInfo'] = $instancePatternInfo;
		foreach ($instancePatternInfo as $depth1 => $depth1Value) {
			foreach ($depth1Value['InstanceCategories'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.InstanceCategories.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['Memory'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.Memory'] = $depth1Value['Memory'];
			}
			if(isset($depth1Value['MaximumCpuCoreCount'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MaximumCpuCoreCount'] = $depth1Value['MaximumCpuCoreCount'];
			}
			if(isset($depth1Value['MaxPrice'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MaxPrice'] = $depth1Value['MaxPrice'];
			}
			if(isset($depth1Value['MinimumGpuAmount'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumGpuAmount'] = $depth1Value['MinimumGpuAmount'];
			}
			if(isset($depth1Value['MaximumGpuAmount'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MaximumGpuAmount'] = $depth1Value['MaximumGpuAmount'];
			}
			if(isset($depth1Value['MaximumMemorySize'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MaximumMemorySize'] = $depth1Value['MaximumMemorySize'];
			}
			if(isset($depth1Value['MinimumInitialCredit'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumInitialCredit'] = $depth1Value['MinimumInitialCredit'];
			}
			foreach ($depth1Value['ExcludedInstanceType'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.ExcludedInstanceType.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['MinimumEniIpv6AddressQuantity'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumEniIpv6AddressQuantity'] = $depth1Value['MinimumEniIpv6AddressQuantity'];
			}
			if(isset($depth1Value['MinimumEniPrivateIpAddressQuantity'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumEniPrivateIpAddressQuantity'] = $depth1Value['MinimumEniPrivateIpAddressQuantity'];
			}
			if(isset($depth1Value['BurstablePerformance'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.BurstablePerformance'] = $depth1Value['BurstablePerformance'];
			}
			foreach ($depth1Value['PhysicalProcessorModels'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.PhysicalProcessorModels.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['MinimumCpuCoreCount'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumCpuCoreCount'] = $depth1Value['MinimumCpuCoreCount'];
			}
			foreach ($depth1Value['GpuSpecs'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.GpuSpecs.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['MinimumEniQuantity'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumEniQuantity'] = $depth1Value['MinimumEniQuantity'];
			}
			if(isset($depth1Value['MinimumMemorySize'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumMemorySize'] = $depth1Value['MinimumMemorySize'];
			}
			if(isset($depth1Value['Cores'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.Cores'] = $depth1Value['Cores'];
			}
			if(isset($depth1Value['InstanceFamilyLevel'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.InstanceFamilyLevel'] = $depth1Value['InstanceFamilyLevel'];
			}
			foreach ($depth1Value['InstanceTypeFamilies'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.InstanceTypeFamilies.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['MinimumBaselineCredit'])){
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.MinimumBaselineCredit'] = $depth1Value['MinimumBaselineCredit'];
			}
			foreach ($depth1Value['CpuArchitectures'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.CpuArchitectures.' . ($i + 1)] = $iValue;
			}
			foreach ($depth1Value['Architecture'] as $i => $iValue) {
				$this->options['query']['InstancePatternInfo.' . ($depth1 + 1) . '.Architecture.' . ($i + 1)] = $iValue;
			}
		}

		return $this;
    }

    /**
     * @param array $networkInterfaces
     *
     * @return $this
     */
	public function withNetworkInterfaces(array $networkInterfaces)
	{
	    $this->data['NetworkInterfaces'] = $networkInterfaces;
		foreach ($networkInterfaces as $depth1 => $depth1Value) {
			if(isset($depth1Value['Ipv6AddressCount'])){
				$this->options['query']['NetworkInterfaces.' . ($depth1 + 1) . '.Ipv6AddressCount'] = $depth1Value['Ipv6AddressCount'];
			}
			if(isset($depth1Value['InstanceType'])){
				$this->options['query']['NetworkInterfaces.' . ($depth1 + 1) . '.InstanceType'] = $depth1Value['InstanceType'];
			}
			foreach ($depth1Value['SecurityGroupIds'] as $i => $iValue) {
				$this->options['query']['NetworkInterfaces.' . ($depth1 + 1) . '.SecurityGroupIds.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['NetworkInterfaceTrafficMode'])){
				$this->options['query']['NetworkInterfaces.' . ($depth1 + 1) . '.NetworkInterfaceTrafficMode'] = $depth1Value['NetworkInterfaceTrafficMode'];
			}
		}

		return $this;
    }

    /**
     * @param array $instanceTypes
     *
     * @return $this
     */
	public function withInstanceTypes(array $instanceTypes)
	{
	    $this->data['InstanceTypes'] = $instanceTypes;
		foreach ($instanceTypes as $i => $iValue) {
			$this->options['query']['InstanceTypes.' . ($i + 1)] = $iValue;
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskKMSKeyId($value)
    {
        $this->data['SystemDiskKMSKeyId'] = $value;
        $this->options['query']['SystemDisk.KMSKeyId'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskCategory($value)
    {
        $this->data['SystemDiskCategory'] = $value;
        $this->options['query']['SystemDisk.Category'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskPerformanceLevel($value)
    {
        $this->data['SystemDiskPerformanceLevel'] = $value;
        $this->options['query']['SystemDisk.PerformanceLevel'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskDiskName($value)
    {
        $this->data['SystemDiskDiskName'] = $value;
        $this->options['query']['SystemDisk.DiskName'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskEncryptAlgorithm($value)
    {
        $this->data['SystemDiskEncryptAlgorithm'] = $value;
        $this->options['query']['SystemDisk.EncryptAlgorithm'] = $value;

        return $this;
    }

    /**
     * @param array $securityGroupIds
     *
     * @return $this
     */
	public function withSecurityGroupIds(array $securityGroupIds)
	{
	    $this->data['SecurityGroupIds'] = $securityGroupIds;
		foreach ($securityGroupIds as $i => $iValue) {
			$this->options['query']['SecurityGroupIds.' . ($i + 1)] = $iValue;
		}

		return $this;
    }

    /**
     * @param array $dataDisk
     *
     * @return $this
     */
	public function withDataDisk(array $dataDisk)
	{
	    $this->data['DataDisk'] = $dataDisk;
		foreach ($dataDisk as $depth1 => $depth1Value) {
			if(isset($depth1Value['SnapshotId'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.SnapshotId'] = $depth1Value['SnapshotId'];
			}
			if(isset($depth1Value['PerformanceLevel'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.PerformanceLevel'] = $depth1Value['PerformanceLevel'];
			}
			if(isset($depth1Value['AutoSnapshotPolicyId'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.AutoSnapshotPolicyId'] = $depth1Value['AutoSnapshotPolicyId'];
			}
			if(isset($depth1Value['Description'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Description'] = $depth1Value['Description'];
			}
			if(isset($depth1Value['BurstingEnabled'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.BurstingEnabled'] = $depth1Value['BurstingEnabled'];
			}
			if(isset($depth1Value['DiskName'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.DiskName'] = $depth1Value['DiskName'];
			}
			if(isset($depth1Value['ProvisionedIops'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.ProvisionedIops'] = $depth1Value['ProvisionedIops'];
			}
			if(isset($depth1Value['Encrypted'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Encrypted'] = $depth1Value['Encrypted'];
			}
			if(isset($depth1Value['Size'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Size'] = $depth1Value['Size'];
			}
			foreach ($depth1Value['Categories'] as $i => $iValue) {
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Categories.' . ($i + 1)] = $iValue;
			}
			if(isset($depth1Value['Category'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Category'] = $depth1Value['Category'];
			}
			if(isset($depth1Value['KMSKeyId'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.KMSKeyId'] = $depth1Value['KMSKeyId'];
			}
			if(isset($depth1Value['Device'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.Device'] = $depth1Value['Device'];
			}
			if(isset($depth1Value['DeleteWithInstance'])){
				$this->options['query']['DataDisk.' . ($depth1 + 1) . '.DeleteWithInstance'] = $depth1Value['DeleteWithInstance'];
			}
		}

		return $this;
    }

    /**
     * @param array $instanceTypeOverride
     *
     * @return $this
     */
	public function withInstanceTypeOverride(array $instanceTypeOverride)
	{
	    $this->data['InstanceTypeOverride'] = $instanceTypeOverride;
		foreach ($instanceTypeOverride as $depth1 => $depth1Value) {
			if(isset($depth1Value['WeightedCapacity'])){
				$this->options['query']['InstanceTypeOverride.' . ($depth1 + 1) . '.WeightedCapacity'] = $depth1Value['WeightedCapacity'];
			}
			if(isset($depth1Value['InstanceType'])){
				$this->options['query']['InstanceTypeOverride.' . ($depth1 + 1) . '.InstanceType'] = $depth1Value['InstanceType'];
			}
		}

		return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskProvisionedIops($value)
    {
        $this->data['SystemDiskProvisionedIops'] = $value;
        $this->options['query']['SystemDisk.ProvisionedIops'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskSize($value)
    {
        $this->data['SystemDiskSize'] = $value;
        $this->options['query']['SystemDisk.Size'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskDescription($value)
    {
        $this->data['SystemDiskDescription'] = $value;
        $this->options['query']['SystemDisk.Description'] = $value;

        return $this;
    }

    /**
     * @param string $value
     *
     * @return $this
     */
    public function withSystemDiskEncrypted($value)
    {
        $this->data['SystemDiskEncrypted'] = $value;
        $this->options['query']['SystemDisk.Encrypted'] = $value;

        return $this;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



