diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.0`
+`1.4.1`
 
 
 ## Description
diff --git a/amazonka-devicefarm.cabal b/amazonka-devicefarm.cabal
--- a/amazonka-devicefarm.cabal
+++ b/amazonka-devicefarm.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-devicefarm
-version:               1.4.0
+version:               1.4.1
 synopsis:              Amazon Device Farm SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -55,6 +55,7 @@
         , Network.AWS.DeviceFarm.GetDevicePool
         , Network.AWS.DeviceFarm.GetDevicePoolCompatibility
         , Network.AWS.DeviceFarm.GetJob
+        , Network.AWS.DeviceFarm.GetOfferingStatus
         , Network.AWS.DeviceFarm.GetProject
         , Network.AWS.DeviceFarm.GetRun
         , Network.AWS.DeviceFarm.GetSuite
@@ -64,6 +65,8 @@
         , Network.AWS.DeviceFarm.ListDevicePools
         , Network.AWS.DeviceFarm.ListDevices
         , Network.AWS.DeviceFarm.ListJobs
+        , Network.AWS.DeviceFarm.ListOfferingTransactions
+        , Network.AWS.DeviceFarm.ListOfferings
         , Network.AWS.DeviceFarm.ListProjects
         , Network.AWS.DeviceFarm.ListRuns
         , Network.AWS.DeviceFarm.ListSamples
@@ -71,7 +74,10 @@
         , Network.AWS.DeviceFarm.ListTests
         , Network.AWS.DeviceFarm.ListUniqueProblems
         , Network.AWS.DeviceFarm.ListUploads
+        , Network.AWS.DeviceFarm.PurchaseOffering
+        , Network.AWS.DeviceFarm.RenewOffering
         , Network.AWS.DeviceFarm.ScheduleRun
+        , Network.AWS.DeviceFarm.StopRun
         , Network.AWS.DeviceFarm.Types
         , Network.AWS.DeviceFarm.UpdateDevicePool
         , Network.AWS.DeviceFarm.UpdateProject
@@ -82,7 +88,7 @@
         , Network.AWS.DeviceFarm.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.0.*
+          amazonka-core == 1.4.1.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-devicefarm-test
@@ -102,9 +108,9 @@
         , Test.AWS.DeviceFarm.Internal
 
     build-depends:
-          amazonka-core == 1.4.0.*
-        , amazonka-test == 1.4.0.*
-        , amazonka-devicefarm == 1.4.0.*
+          amazonka-core == 1.4.1.*
+        , amazonka-test == 1.4.1.*
+        , amazonka-devicefarm == 1.4.1.*
         , base
         , bytestring
         , tasty
diff --git a/fixture/GetOfferingStatus.yaml b/fixture/GetOfferingStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetOfferingStatus.yaml
diff --git a/fixture/GetOfferingStatusResponse.proto b/fixture/GetOfferingStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetOfferingStatusResponse.proto
diff --git a/fixture/ListOfferingTransactions.yaml b/fixture/ListOfferingTransactions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListOfferingTransactions.yaml
diff --git a/fixture/ListOfferingTransactionsResponse.proto b/fixture/ListOfferingTransactionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListOfferingTransactionsResponse.proto
diff --git a/fixture/ListOfferings.yaml b/fixture/ListOfferings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListOfferings.yaml
diff --git a/fixture/ListOfferingsResponse.proto b/fixture/ListOfferingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListOfferingsResponse.proto
diff --git a/fixture/PurchaseOffering.yaml b/fixture/PurchaseOffering.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PurchaseOffering.yaml
diff --git a/fixture/PurchaseOfferingResponse.proto b/fixture/PurchaseOfferingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PurchaseOfferingResponse.proto
diff --git a/fixture/RenewOffering.yaml b/fixture/RenewOffering.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RenewOffering.yaml
diff --git a/fixture/RenewOfferingResponse.proto b/fixture/RenewOfferingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RenewOfferingResponse.proto
diff --git a/fixture/StopRun.yaml b/fixture/StopRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopRun.yaml
diff --git a/fixture/StopRunResponse.proto b/fixture/StopRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopRunResponse.proto
diff --git a/gen/Network/AWS/DeviceFarm.hs b/gen/Network/AWS/DeviceFarm.hs
--- a/gen/Network/AWS/DeviceFarm.hs
+++ b/gen/Network/AWS/DeviceFarm.hs
@@ -22,6 +22,9 @@
     -- * Errors
     -- $errors
 
+    -- ** NotEligibleException
+    , _NotEligibleException
+
     -- ** IdempotencyException
     , _IdempotencyException
 
@@ -43,7 +46,7 @@
     -- * Operations
     -- $operations
 
-    -- ** ListProjects
+    -- ** ListProjects (Paginated)
     , module Network.AWS.DeviceFarm.ListProjects
 
     -- ** DeleteProject
@@ -55,10 +58,10 @@
     -- ** GetDevicePoolCompatibility
     , module Network.AWS.DeviceFarm.GetDevicePoolCompatibility
 
-    -- ** ListTests
+    -- ** ListTests (Paginated)
     , module Network.AWS.DeviceFarm.ListTests
 
-    -- ** ListArtifacts
+    -- ** ListArtifacts (Paginated)
     , module Network.AWS.DeviceFarm.ListArtifacts
 
     -- ** CreateUpload
@@ -70,7 +73,7 @@
     -- ** GetDevicePool
     , module Network.AWS.DeviceFarm.GetDevicePool
 
-    -- ** ListDevicePools
+    -- ** ListDevicePools (Paginated)
     , module Network.AWS.DeviceFarm.ListDevicePools
 
     -- ** UpdateDevicePool
@@ -82,22 +85,28 @@
     -- ** GetUpload
     , module Network.AWS.DeviceFarm.GetUpload
 
+    -- ** ListOfferingTransactions
+    , module Network.AWS.DeviceFarm.ListOfferingTransactions
+
     -- ** CreateDevicePool
     , module Network.AWS.DeviceFarm.CreateDevicePool
 
     -- ** DeleteRun
     , module Network.AWS.DeviceFarm.DeleteRun
 
-    -- ** ListRuns
+    -- ** ListRuns (Paginated)
     , module Network.AWS.DeviceFarm.ListRuns
 
     -- ** GetTest
     , module Network.AWS.DeviceFarm.GetTest
 
+    -- ** RenewOffering
+    , module Network.AWS.DeviceFarm.RenewOffering
+
     -- ** GetDevice
     , module Network.AWS.DeviceFarm.GetDevice
 
-    -- ** ListJobs
+    -- ** ListJobs (Paginated)
     , module Network.AWS.DeviceFarm.ListJobs
 
     -- ** GetJob
@@ -109,33 +118,45 @@
     -- ** GetRun
     , module Network.AWS.DeviceFarm.GetRun
 
-    -- ** ListSamples
+    -- ** ListSamples (Paginated)
     , module Network.AWS.DeviceFarm.ListSamples
 
-    -- ** ListSuites
+    -- ** ListSuites (Paginated)
     , module Network.AWS.DeviceFarm.ListSuites
 
     -- ** GetAccountSettings
     , module Network.AWS.DeviceFarm.GetAccountSettings
 
-    -- ** ListUploads
+    -- ** GetOfferingStatus
+    , module Network.AWS.DeviceFarm.GetOfferingStatus
+
+    -- ** ListUploads (Paginated)
     , module Network.AWS.DeviceFarm.ListUploads
 
     -- ** GetSuite
     , module Network.AWS.DeviceFarm.GetSuite
 
+    -- ** PurchaseOffering
+    , module Network.AWS.DeviceFarm.PurchaseOffering
+
     -- ** GetProject
     , module Network.AWS.DeviceFarm.GetProject
 
-    -- ** ListUniqueProblems
+    -- ** ListUniqueProblems (Paginated)
     , module Network.AWS.DeviceFarm.ListUniqueProblems
 
-    -- ** ListDevices
+    -- ** StopRun
+    , module Network.AWS.DeviceFarm.StopRun
+
+    -- ** ListDevices (Paginated)
     , module Network.AWS.DeviceFarm.ListDevices
 
     -- ** CreateProject
     , module Network.AWS.DeviceFarm.CreateProject
 
+    -- ** ListOfferings
+    , module Network.AWS.DeviceFarm.ListOfferings
+
     -- * Types
 
     -- ** ArtifactCategory
@@ -147,6 +168,9 @@
     -- ** BillingMethod
     , BillingMethod (..)
 
+    -- ** CurrencyCode
+    , CurrencyCode (..)
+
     -- ** DeviceAttribute
     , DeviceAttribute (..)
 
@@ -165,6 +189,15 @@
     -- ** ExecutionStatus
     , ExecutionStatus (..)
 
+    -- ** OfferingTransactionType
+    , OfferingTransactionType (..)
+
+    -- ** OfferingType
+    , OfferingType (..)
+
+    -- ** RecurringChargeFrequency
+    , RecurringChargeFrequency (..)
+
     -- ** RuleOperator
     , RuleOperator (..)
 
@@ -185,6 +218,7 @@
     , accountSettings
     , asAwsAccountNumber
     , asUnmeteredDevices
+    , asUnmeteredRemoteAccessDevices
 
     -- ** Artifact
     , Artifact
@@ -282,6 +316,37 @@
     , lLatitude
     , lLongitude
 
+    -- ** MonetaryAmount
+    , MonetaryAmount
+    , monetaryAmount
+    , maAmount
+    , maCurrencyCode
+
+    -- ** Offering
+    , Offering
+    , offering
+    , oPlatform
+    , oId
+    , oRecurringCharges
+    , oType
+    , oDescription
+
+    -- ** OfferingStatus
+    , OfferingStatus
+    , offeringStatus
+    , osEffectiveOn
+    , osOffering
+    , osQuantity
+    , osType
+
+    -- ** OfferingTransaction
+    , OfferingTransaction
+    , offeringTransaction
+    , otOfferingStatus
+    , otCost
+    , otTransactionId
+    , otCreatedOn
+
     -- ** Problem
     , Problem
     , problem
@@ -314,6 +379,12 @@
     , rBluetooth
     , rWifi
 
+    -- ** RecurringCharge
+    , RecurringCharge
+    , recurringCharge
+    , rcFrequency
+    , rcCost
+
     -- ** Resolution
     , Resolution
     , resolution
@@ -434,6 +505,7 @@
 import           Network.AWS.DeviceFarm.GetDevicePool
 import           Network.AWS.DeviceFarm.GetDevicePoolCompatibility
 import           Network.AWS.DeviceFarm.GetJob
+import           Network.AWS.DeviceFarm.GetOfferingStatus
 import           Network.AWS.DeviceFarm.GetProject
 import           Network.AWS.DeviceFarm.GetRun
 import           Network.AWS.DeviceFarm.GetSuite
@@ -443,6 +515,8 @@
 import           Network.AWS.DeviceFarm.ListDevicePools
 import           Network.AWS.DeviceFarm.ListDevices
 import           Network.AWS.DeviceFarm.ListJobs
+import           Network.AWS.DeviceFarm.ListOfferings
+import           Network.AWS.DeviceFarm.ListOfferingTransactions
 import           Network.AWS.DeviceFarm.ListProjects
 import           Network.AWS.DeviceFarm.ListRuns
 import           Network.AWS.DeviceFarm.ListSamples
@@ -450,7 +524,10 @@
 import           Network.AWS.DeviceFarm.ListTests
 import           Network.AWS.DeviceFarm.ListUniqueProblems
 import           Network.AWS.DeviceFarm.ListUploads
+import           Network.AWS.DeviceFarm.PurchaseOffering
+import           Network.AWS.DeviceFarm.RenewOffering
 import           Network.AWS.DeviceFarm.ScheduleRun
+import           Network.AWS.DeviceFarm.StopRun
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.UpdateDevicePool
 import           Network.AWS.DeviceFarm.UpdateProject
diff --git a/gen/Network/AWS/DeviceFarm/CreateDevicePool.hs b/gen/Network/AWS/DeviceFarm/CreateDevicePool.hs
--- a/gen/Network/AWS/DeviceFarm/CreateDevicePool.hs
+++ b/gen/Network/AWS/DeviceFarm/CreateDevicePool.hs
@@ -105,6 +105,8 @@
 
 instance Hashable CreateDevicePool
 
+instance NFData CreateDevicePool
+
 instance ToHeaders CreateDevicePool where
         toHeaders
           = const
@@ -161,3 +163,5 @@
 -- | The response status code.
 cdprsResponseStatus :: Lens' CreateDevicePoolResponse Int
 cdprsResponseStatus = lens _cdprsResponseStatus (\ s a -> s{_cdprsResponseStatus = a});
+
+instance NFData CreateDevicePoolResponse
diff --git a/gen/Network/AWS/DeviceFarm/CreateProject.hs b/gen/Network/AWS/DeviceFarm/CreateProject.hs
--- a/gen/Network/AWS/DeviceFarm/CreateProject.hs
+++ b/gen/Network/AWS/DeviceFarm/CreateProject.hs
@@ -77,6 +77,8 @@
 
 instance Hashable CreateProject
 
+instance NFData CreateProject
+
 instance ToHeaders CreateProject where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 cprsResponseStatus :: Lens' CreateProjectResponse Int
 cprsResponseStatus = lens _cprsResponseStatus (\ s a -> s{_cprsResponseStatus = a});
+
+instance NFData CreateProjectResponse
diff --git a/gen/Network/AWS/DeviceFarm/CreateUpload.hs b/gen/Network/AWS/DeviceFarm/CreateUpload.hs
--- a/gen/Network/AWS/DeviceFarm/CreateUpload.hs
+++ b/gen/Network/AWS/DeviceFarm/CreateUpload.hs
@@ -148,6 +148,8 @@
 
 instance Hashable CreateUpload
 
+instance NFData CreateUpload
+
 instance ToHeaders CreateUpload where
         toHeaders
           = const
@@ -202,3 +204,5 @@
 -- | The response status code.
 cursResponseStatus :: Lens' CreateUploadResponse Int
 cursResponseStatus = lens _cursResponseStatus (\ s a -> s{_cursResponseStatus = a});
+
+instance NFData CreateUploadResponse
diff --git a/gen/Network/AWS/DeviceFarm/DeleteDevicePool.hs b/gen/Network/AWS/DeviceFarm/DeleteDevicePool.hs
--- a/gen/Network/AWS/DeviceFarm/DeleteDevicePool.hs
+++ b/gen/Network/AWS/DeviceFarm/DeleteDevicePool.hs
@@ -77,6 +77,8 @@
 
 instance Hashable DeleteDevicePool
 
+instance NFData DeleteDevicePool
+
 instance ToHeaders DeleteDevicePool where
         toHeaders
           = const
@@ -120,3 +122,5 @@
 -- | The response status code.
 ddprsResponseStatus :: Lens' DeleteDevicePoolResponse Int
 ddprsResponseStatus = lens _ddprsResponseStatus (\ s a -> s{_ddprsResponseStatus = a});
+
+instance NFData DeleteDevicePoolResponse
diff --git a/gen/Network/AWS/DeviceFarm/DeleteProject.hs b/gen/Network/AWS/DeviceFarm/DeleteProject.hs
--- a/gen/Network/AWS/DeviceFarm/DeleteProject.hs
+++ b/gen/Network/AWS/DeviceFarm/DeleteProject.hs
@@ -78,6 +78,8 @@
 
 instance Hashable DeleteProject
 
+instance NFData DeleteProject
+
 instance ToHeaders DeleteProject where
         toHeaders
           = const
@@ -120,3 +122,5 @@
 -- | The response status code.
 dprsResponseStatus :: Lens' DeleteProjectResponse Int
 dprsResponseStatus = lens _dprsResponseStatus (\ s a -> s{_dprsResponseStatus = a});
+
+instance NFData DeleteProjectResponse
diff --git a/gen/Network/AWS/DeviceFarm/DeleteRun.hs b/gen/Network/AWS/DeviceFarm/DeleteRun.hs
--- a/gen/Network/AWS/DeviceFarm/DeleteRun.hs
+++ b/gen/Network/AWS/DeviceFarm/DeleteRun.hs
@@ -77,6 +77,8 @@
 
 instance Hashable DeleteRun
 
+instance NFData DeleteRun
+
 instance ToHeaders DeleteRun where
         toHeaders
           = const
@@ -119,3 +121,5 @@
 -- | The response status code.
 drrsResponseStatus :: Lens' DeleteRunResponse Int
 drrsResponseStatus = lens _drrsResponseStatus (\ s a -> s{_drrsResponseStatus = a});
+
+instance NFData DeleteRunResponse
diff --git a/gen/Network/AWS/DeviceFarm/DeleteUpload.hs b/gen/Network/AWS/DeviceFarm/DeleteUpload.hs
--- a/gen/Network/AWS/DeviceFarm/DeleteUpload.hs
+++ b/gen/Network/AWS/DeviceFarm/DeleteUpload.hs
@@ -76,6 +76,8 @@
 
 instance Hashable DeleteUpload
 
+instance NFData DeleteUpload
+
 instance ToHeaders DeleteUpload where
         toHeaders
           = const
@@ -118,3 +120,5 @@
 -- | The response status code.
 dursResponseStatus :: Lens' DeleteUploadResponse Int
 dursResponseStatus = lens _dursResponseStatus (\ s a -> s{_dursResponseStatus = a});
+
+instance NFData DeleteUploadResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetAccountSettings.hs b/gen/Network/AWS/DeviceFarm/GetAccountSettings.hs
--- a/gen/Network/AWS/DeviceFarm/GetAccountSettings.hs
+++ b/gen/Network/AWS/DeviceFarm/GetAccountSettings.hs
@@ -41,7 +41,9 @@
 import           Network.AWS.Request
 import           Network.AWS.Response
 
--- | /See:/ 'getAccountSettings' smart constructor.
+-- | Represents the request sent to retrieve the account settings.
+--
+-- /See:/ 'getAccountSettings' smart constructor.
 data GetAccountSettings =
     GetAccountSettings'
     deriving (Eq,Read,Show,Data,Typeable,Generic)
@@ -64,6 +66,8 @@
 
 instance Hashable GetAccountSettings
 
+instance NFData GetAccountSettings
+
 instance ToHeaders GetAccountSettings where
         toHeaders
           = const
@@ -83,7 +87,10 @@
 instance ToQuery GetAccountSettings where
         toQuery = const mempty
 
--- | /See:/ 'getAccountSettingsResponse' smart constructor.
+-- | Represents the account settings return values from the
+-- 'GetAccountSettings' request.
+--
+-- /See:/ 'getAccountSettingsResponse' smart constructor.
 data GetAccountSettingsResponse = GetAccountSettingsResponse'
     { _gasrsAccountSettings :: !(Maybe AccountSettings)
     , _gasrsResponseStatus  :: !Int
@@ -112,3 +119,5 @@
 -- | The response status code.
 gasrsResponseStatus :: Lens' GetAccountSettingsResponse Int
 gasrsResponseStatus = lens _gasrsResponseStatus (\ s a -> s{_gasrsResponseStatus = a});
+
+instance NFData GetAccountSettingsResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetDevice.hs b/gen/Network/AWS/DeviceFarm/GetDevice.hs
--- a/gen/Network/AWS/DeviceFarm/GetDevice.hs
+++ b/gen/Network/AWS/DeviceFarm/GetDevice.hs
@@ -77,6 +77,8 @@
 
 instance Hashable GetDevice
 
+instance NFData GetDevice
+
 instance ToHeaders GetDevice where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 gdrsResponseStatus :: Lens' GetDeviceResponse Int
 gdrsResponseStatus = lens _gdrsResponseStatus (\ s a -> s{_gdrsResponseStatus = a});
+
+instance NFData GetDeviceResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetDevicePool.hs b/gen/Network/AWS/DeviceFarm/GetDevicePool.hs
--- a/gen/Network/AWS/DeviceFarm/GetDevicePool.hs
+++ b/gen/Network/AWS/DeviceFarm/GetDevicePool.hs
@@ -77,6 +77,8 @@
 
 instance Hashable GetDevicePool
 
+instance NFData GetDevicePool
+
 instance ToHeaders GetDevicePool where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 gdprsResponseStatus :: Lens' GetDevicePoolResponse Int
 gdprsResponseStatus = lens _gdprsResponseStatus (\ s a -> s{_gdprsResponseStatus = a});
+
+instance NFData GetDevicePoolResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetDevicePoolCompatibility.hs b/gen/Network/AWS/DeviceFarm/GetDevicePoolCompatibility.hs
--- a/gen/Network/AWS/DeviceFarm/GetDevicePoolCompatibility.hs
+++ b/gen/Network/AWS/DeviceFarm/GetDevicePoolCompatibility.hs
@@ -132,6 +132,8 @@
 
 instance Hashable GetDevicePoolCompatibility
 
+instance NFData GetDevicePoolCompatibility
+
 instance ToHeaders GetDevicePoolCompatibility where
         toHeaders
           = const
@@ -195,3 +197,5 @@
 -- | The response status code.
 gdpcrsResponseStatus :: Lens' GetDevicePoolCompatibilityResponse Int
 gdpcrsResponseStatus = lens _gdpcrsResponseStatus (\ s a -> s{_gdpcrsResponseStatus = a});
+
+instance NFData GetDevicePoolCompatibilityResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetJob.hs b/gen/Network/AWS/DeviceFarm/GetJob.hs
--- a/gen/Network/AWS/DeviceFarm/GetJob.hs
+++ b/gen/Network/AWS/DeviceFarm/GetJob.hs
@@ -77,6 +77,8 @@
 
 instance Hashable GetJob
 
+instance NFData GetJob
+
 instance ToHeaders GetJob where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 gjrsResponseStatus :: Lens' GetJobResponse Int
 gjrsResponseStatus = lens _gjrsResponseStatus (\ s a -> s{_gjrsResponseStatus = a});
+
+instance NFData GetJobResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetOfferingStatus.hs b/gen/Network/AWS/DeviceFarm/GetOfferingStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/GetOfferingStatus.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DeviceFarm.GetOfferingStatus
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the current status and future status of all offerings purchased by
+-- an AWS account. The response indicates how many offerings are currently
+-- available and the offerings that will be available in the next period.
+-- The API returns a 'NotEligible' error if the user is not permitted to
+-- invoke the operation. Please contact
+-- <mailto:aws-devicefarm-support'amazon.com aws-devicefarm-support\'amazon.com>
+-- if you believe that you should be able to invoke this operation.
+module Network.AWS.DeviceFarm.GetOfferingStatus
+    (
+    -- * Creating a Request
+      getOfferingStatus
+    , GetOfferingStatus
+    -- * Request Lenses
+    , gosNextToken
+
+    -- * Destructuring the Response
+    , getOfferingStatusResponse
+    , GetOfferingStatusResponse
+    -- * Response Lenses
+    , gosrsNextPeriod
+    , gosrsCurrent
+    , gosrsNextToken
+    , gosrsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to retrieve the offering status for the specified
+-- customer or account.
+--
+-- /See:/ 'getOfferingStatus' smart constructor.
+newtype GetOfferingStatus = GetOfferingStatus'
+    { _gosNextToken :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetOfferingStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gosNextToken'
+getOfferingStatus
+    :: GetOfferingStatus
+getOfferingStatus =
+    GetOfferingStatus'
+    { _gosNextToken = Nothing
+    }
+
+-- | An identifier that was returned from the previous call to this
+-- operation, which can be used to return the next set of items in the
+-- list.
+gosNextToken :: Lens' GetOfferingStatus (Maybe Text)
+gosNextToken = lens _gosNextToken (\ s a -> s{_gosNextToken = a});
+
+instance AWSRequest GetOfferingStatus where
+        type Rs GetOfferingStatus = GetOfferingStatusResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetOfferingStatusResponse' <$>
+                   (x .?> "nextPeriod" .!@ mempty) <*>
+                     (x .?> "current" .!@ mempty)
+                     <*> (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetOfferingStatus
+
+instance NFData GetOfferingStatus
+
+instance ToHeaders GetOfferingStatus where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.GetOfferingStatus" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetOfferingStatus where
+        toJSON GetOfferingStatus'{..}
+          = object
+              (catMaybes [("nextToken" .=) <$> _gosNextToken])
+
+instance ToPath GetOfferingStatus where
+        toPath = const "/"
+
+instance ToQuery GetOfferingStatus where
+        toQuery = const mempty
+
+-- | Returns the status result for a device offering.
+--
+-- /See:/ 'getOfferingStatusResponse' smart constructor.
+data GetOfferingStatusResponse = GetOfferingStatusResponse'
+    { _gosrsNextPeriod     :: !(Maybe (Map Text OfferingStatus))
+    , _gosrsCurrent        :: !(Maybe (Map Text OfferingStatus))
+    , _gosrsNextToken      :: !(Maybe Text)
+    , _gosrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetOfferingStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gosrsNextPeriod'
+--
+-- * 'gosrsCurrent'
+--
+-- * 'gosrsNextToken'
+--
+-- * 'gosrsResponseStatus'
+getOfferingStatusResponse
+    :: Int -- ^ 'gosrsResponseStatus'
+    -> GetOfferingStatusResponse
+getOfferingStatusResponse pResponseStatus_ =
+    GetOfferingStatusResponse'
+    { _gosrsNextPeriod = Nothing
+    , _gosrsCurrent = Nothing
+    , _gosrsNextToken = Nothing
+    , _gosrsResponseStatus = pResponseStatus_
+    }
+
+-- | When specified, gets the offering status for the next period.
+gosrsNextPeriod :: Lens' GetOfferingStatusResponse (HashMap Text OfferingStatus)
+gosrsNextPeriod = lens _gosrsNextPeriod (\ s a -> s{_gosrsNextPeriod = a}) . _Default . _Map;
+
+-- | When specified, gets the offering status for the current period.
+gosrsCurrent :: Lens' GetOfferingStatusResponse (HashMap Text OfferingStatus)
+gosrsCurrent = lens _gosrsCurrent (\ s a -> s{_gosrsCurrent = a}) . _Default . _Map;
+
+-- | An identifier that was returned from the previous call to this
+-- operation, which can be used to return the next set of items in the
+-- list.
+gosrsNextToken :: Lens' GetOfferingStatusResponse (Maybe Text)
+gosrsNextToken = lens _gosrsNextToken (\ s a -> s{_gosrsNextToken = a});
+
+-- | The response status code.
+gosrsResponseStatus :: Lens' GetOfferingStatusResponse Int
+gosrsResponseStatus = lens _gosrsResponseStatus (\ s a -> s{_gosrsResponseStatus = a});
+
+instance NFData GetOfferingStatusResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetProject.hs b/gen/Network/AWS/DeviceFarm/GetProject.hs
--- a/gen/Network/AWS/DeviceFarm/GetProject.hs
+++ b/gen/Network/AWS/DeviceFarm/GetProject.hs
@@ -77,6 +77,8 @@
 
 instance Hashable GetProject
 
+instance NFData GetProject
+
 instance ToHeaders GetProject where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 gprsResponseStatus :: Lens' GetProjectResponse Int
 gprsResponseStatus = lens _gprsResponseStatus (\ s a -> s{_gprsResponseStatus = a});
+
+instance NFData GetProjectResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetRun.hs b/gen/Network/AWS/DeviceFarm/GetRun.hs
--- a/gen/Network/AWS/DeviceFarm/GetRun.hs
+++ b/gen/Network/AWS/DeviceFarm/GetRun.hs
@@ -77,6 +77,8 @@
 
 instance Hashable GetRun
 
+instance NFData GetRun
+
 instance ToHeaders GetRun where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 grrsResponseStatus :: Lens' GetRunResponse Int
 grrsResponseStatus = lens _grrsResponseStatus (\ s a -> s{_grrsResponseStatus = a});
+
+instance NFData GetRunResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetSuite.hs b/gen/Network/AWS/DeviceFarm/GetSuite.hs
--- a/gen/Network/AWS/DeviceFarm/GetSuite.hs
+++ b/gen/Network/AWS/DeviceFarm/GetSuite.hs
@@ -77,6 +77,8 @@
 
 instance Hashable GetSuite
 
+instance NFData GetSuite
+
 instance ToHeaders GetSuite where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 gsrsResponseStatus :: Lens' GetSuiteResponse Int
 gsrsResponseStatus = lens _gsrsResponseStatus (\ s a -> s{_gsrsResponseStatus = a});
+
+instance NFData GetSuiteResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetTest.hs b/gen/Network/AWS/DeviceFarm/GetTest.hs
--- a/gen/Network/AWS/DeviceFarm/GetTest.hs
+++ b/gen/Network/AWS/DeviceFarm/GetTest.hs
@@ -77,6 +77,8 @@
 
 instance Hashable GetTest
 
+instance NFData GetTest
+
 instance ToHeaders GetTest where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 gtrsResponseStatus :: Lens' GetTestResponse Int
 gtrsResponseStatus = lens _gtrsResponseStatus (\ s a -> s{_gtrsResponseStatus = a});
+
+instance NFData GetTestResponse
diff --git a/gen/Network/AWS/DeviceFarm/GetUpload.hs b/gen/Network/AWS/DeviceFarm/GetUpload.hs
--- a/gen/Network/AWS/DeviceFarm/GetUpload.hs
+++ b/gen/Network/AWS/DeviceFarm/GetUpload.hs
@@ -77,6 +77,8 @@
 
 instance Hashable GetUpload
 
+instance NFData GetUpload
+
 instance ToHeaders GetUpload where
         toHeaders
           = const
@@ -127,3 +129,5 @@
 -- | The response status code.
 gursResponseStatus :: Lens' GetUploadResponse Int
 gursResponseStatus = lens _gursResponseStatus (\ s a -> s{_gursResponseStatus = a});
+
+instance NFData GetUploadResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListArtifacts.hs b/gen/Network/AWS/DeviceFarm/ListArtifacts.hs
--- a/gen/Network/AWS/DeviceFarm/ListArtifacts.hs
+++ b/gen/Network/AWS/DeviceFarm/ListArtifacts.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about artifacts.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListArtifacts
     (
     -- * Creating a Request
@@ -41,6 +43,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -94,6 +97,13 @@
 laType :: Lens' ListArtifacts ArtifactCategory
 laType = lens _laType (\ s a -> s{_laType = a});
 
+instance AWSPager ListArtifacts where
+        page rq rs
+          | stop (rs ^. larsNextToken) = Nothing
+          | stop (rs ^. larsArtifacts) = Nothing
+          | otherwise =
+            Just $ rq & laNextToken .~ rs ^. larsNextToken
+
 instance AWSRequest ListArtifacts where
         type Rs ListArtifacts = ListArtifactsResponse
         request = postJSON deviceFarm
@@ -107,6 +117,8 @@
 
 instance Hashable ListArtifacts
 
+instance NFData ListArtifacts
+
 instance ToHeaders ListArtifacts where
         toHeaders
           = const
@@ -170,3 +182,5 @@
 -- | The response status code.
 larsResponseStatus :: Lens' ListArtifactsResponse Int
 larsResponseStatus = lens _larsResponseStatus (\ s a -> s{_larsResponseStatus = a});
+
+instance NFData ListArtifactsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListDevicePools.hs b/gen/Network/AWS/DeviceFarm/ListDevicePools.hs
--- a/gen/Network/AWS/DeviceFarm/ListDevicePools.hs
+++ b/gen/Network/AWS/DeviceFarm/ListDevicePools.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about device pools.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListDevicePools
     (
     -- * Creating a Request
@@ -41,6 +43,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -96,6 +99,13 @@
 ldpArn :: Lens' ListDevicePools Text
 ldpArn = lens _ldpArn (\ s a -> s{_ldpArn = a});
 
+instance AWSPager ListDevicePools where
+        page rq rs
+          | stop (rs ^. ldprsNextToken) = Nothing
+          | stop (rs ^. ldprsDevicePools) = Nothing
+          | otherwise =
+            Just $ rq & ldpNextToken .~ rs ^. ldprsNextToken
+
 instance AWSRequest ListDevicePools where
         type Rs ListDevicePools = ListDevicePoolsResponse
         request = postJSON deviceFarm
@@ -109,6 +119,8 @@
 
 instance Hashable ListDevicePools
 
+instance NFData ListDevicePools
+
 instance ToHeaders ListDevicePools where
         toHeaders
           = const
@@ -173,3 +185,5 @@
 -- | The response status code.
 ldprsResponseStatus :: Lens' ListDevicePoolsResponse Int
 ldprsResponseStatus = lens _ldprsResponseStatus (\ s a -> s{_ldprsResponseStatus = a});
+
+instance NFData ListDevicePoolsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListDevices.hs b/gen/Network/AWS/DeviceFarm/ListDevices.hs
--- a/gen/Network/AWS/DeviceFarm/ListDevices.hs
+++ b/gen/Network/AWS/DeviceFarm/ListDevices.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about unique device types.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListDevices
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -77,6 +80,13 @@
 ldNextToken :: Lens' ListDevices (Maybe Text)
 ldNextToken = lens _ldNextToken (\ s a -> s{_ldNextToken = a});
 
+instance AWSPager ListDevices where
+        page rq rs
+          | stop (rs ^. ldrsNextToken) = Nothing
+          | stop (rs ^. ldrsDevices) = Nothing
+          | otherwise =
+            Just $ rq & ldNextToken .~ rs ^. ldrsNextToken
+
 instance AWSRequest ListDevices where
         type Rs ListDevices = ListDevicesResponse
         request = postJSON deviceFarm
@@ -89,6 +99,8 @@
 
 instance Hashable ListDevices
 
+instance NFData ListDevices
+
 instance ToHeaders ListDevices where
         toHeaders
           = const
@@ -152,3 +164,5 @@
 -- | The response status code.
 ldrsResponseStatus :: Lens' ListDevicesResponse Int
 ldrsResponseStatus = lens _ldrsResponseStatus (\ s a -> s{_ldrsResponseStatus = a});
+
+instance NFData ListDevicesResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListJobs.hs b/gen/Network/AWS/DeviceFarm/ListJobs.hs
--- a/gen/Network/AWS/DeviceFarm/ListJobs.hs
+++ b/gen/Network/AWS/DeviceFarm/ListJobs.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about jobs.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListJobs
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -78,6 +81,13 @@
 ljArn :: Lens' ListJobs Text
 ljArn = lens _ljArn (\ s a -> s{_ljArn = a});
 
+instance AWSPager ListJobs where
+        page rq rs
+          | stop (rs ^. ljrsNextToken) = Nothing
+          | stop (rs ^. ljrsJobs) = Nothing
+          | otherwise =
+            Just $ rq & ljNextToken .~ rs ^. ljrsNextToken
+
 instance AWSRequest ListJobs where
         type Rs ListJobs = ListJobsResponse
         request = postJSON deviceFarm
@@ -90,6 +100,8 @@
 
 instance Hashable ListJobs
 
+instance NFData ListJobs
+
 instance ToHeaders ListJobs where
         toHeaders
           = const
@@ -153,3 +165,5 @@
 -- | The response status code.
 ljrsResponseStatus :: Lens' ListJobsResponse Int
 ljrsResponseStatus = lens _ljrsResponseStatus (\ s a -> s{_ljrsResponseStatus = a});
+
+instance NFData ListJobsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListOfferingTransactions.hs b/gen/Network/AWS/DeviceFarm/ListOfferingTransactions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/ListOfferingTransactions.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DeviceFarm.ListOfferingTransactions
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of all historical purchases, renewals, and system renewal
+-- transactions for an AWS account. The list is paginated and ordered by a
+-- descending timestamp (most recent transactions are first). The API
+-- returns a 'NotEligible' error if the user is not permitted to invoke the
+-- operation. Please contact
+-- <mailto:aws-devicefarm-support'amazon.com aws-devicefarm-support\'amazon.com>
+-- if you believe that you should be able to invoke this operation.
+module Network.AWS.DeviceFarm.ListOfferingTransactions
+    (
+    -- * Creating a Request
+      listOfferingTransactions
+    , ListOfferingTransactions
+    -- * Request Lenses
+    , lotNextToken
+
+    -- * Destructuring the Response
+    , listOfferingTransactionsResponse
+    , ListOfferingTransactionsResponse
+    -- * Response Lenses
+    , lotrsOfferingTransactions
+    , lotrsNextToken
+    , lotrsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to list the offering transaction history.
+--
+-- /See:/ 'listOfferingTransactions' smart constructor.
+newtype ListOfferingTransactions = ListOfferingTransactions'
+    { _lotNextToken :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOfferingTransactions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lotNextToken'
+listOfferingTransactions
+    :: ListOfferingTransactions
+listOfferingTransactions =
+    ListOfferingTransactions'
+    { _lotNextToken = Nothing
+    }
+
+-- | An identifier that was returned from the previous call to this
+-- operation, which can be used to return the next set of items in the
+-- list.
+lotNextToken :: Lens' ListOfferingTransactions (Maybe Text)
+lotNextToken = lens _lotNextToken (\ s a -> s{_lotNextToken = a});
+
+instance AWSRequest ListOfferingTransactions where
+        type Rs ListOfferingTransactions =
+             ListOfferingTransactionsResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListOfferingTransactionsResponse' <$>
+                   (x .?> "offeringTransactions" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListOfferingTransactions
+
+instance NFData ListOfferingTransactions
+
+instance ToHeaders ListOfferingTransactions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.ListOfferingTransactions" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListOfferingTransactions where
+        toJSON ListOfferingTransactions'{..}
+          = object
+              (catMaybes [("nextToken" .=) <$> _lotNextToken])
+
+instance ToPath ListOfferingTransactions where
+        toPath = const "/"
+
+instance ToQuery ListOfferingTransactions where
+        toQuery = const mempty
+
+-- | Returns the transaction log of the specified offerings.
+--
+-- /See:/ 'listOfferingTransactionsResponse' smart constructor.
+data ListOfferingTransactionsResponse = ListOfferingTransactionsResponse'
+    { _lotrsOfferingTransactions :: !(Maybe [OfferingTransaction])
+    , _lotrsNextToken            :: !(Maybe Text)
+    , _lotrsResponseStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOfferingTransactionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lotrsOfferingTransactions'
+--
+-- * 'lotrsNextToken'
+--
+-- * 'lotrsResponseStatus'
+listOfferingTransactionsResponse
+    :: Int -- ^ 'lotrsResponseStatus'
+    -> ListOfferingTransactionsResponse
+listOfferingTransactionsResponse pResponseStatus_ =
+    ListOfferingTransactionsResponse'
+    { _lotrsOfferingTransactions = Nothing
+    , _lotrsNextToken = Nothing
+    , _lotrsResponseStatus = pResponseStatus_
+    }
+
+-- | The audit log of subscriptions you have purchased and modified through
+-- AWS Device Farm.
+lotrsOfferingTransactions :: Lens' ListOfferingTransactionsResponse [OfferingTransaction]
+lotrsOfferingTransactions = lens _lotrsOfferingTransactions (\ s a -> s{_lotrsOfferingTransactions = a}) . _Default . _Coerce;
+
+-- | An identifier that was returned from the previous call to this
+-- operation, which can be used to return the next set of items in the
+-- list.
+lotrsNextToken :: Lens' ListOfferingTransactionsResponse (Maybe Text)
+lotrsNextToken = lens _lotrsNextToken (\ s a -> s{_lotrsNextToken = a});
+
+-- | The response status code.
+lotrsResponseStatus :: Lens' ListOfferingTransactionsResponse Int
+lotrsResponseStatus = lens _lotrsResponseStatus (\ s a -> s{_lotrsResponseStatus = a});
+
+instance NFData ListOfferingTransactionsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListOfferings.hs b/gen/Network/AWS/DeviceFarm/ListOfferings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/ListOfferings.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DeviceFarm.ListOfferings
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of products or offerings that the user can manage through
+-- the API. Each offering record indicates the recurring price per unit and
+-- the frequency for that offering. The API returns a 'NotEligible' error
+-- if the user is not permitted to invoke the operation. Please contact
+-- <mailto:aws-devicefarm-support'amazon.com aws-devicefarm-support\'amazon.com>
+-- if you believe that you should be able to invoke this operation.
+module Network.AWS.DeviceFarm.ListOfferings
+    (
+    -- * Creating a Request
+      listOfferings
+    , ListOfferings
+    -- * Request Lenses
+    , loNextToken
+
+    -- * Destructuring the Response
+    , listOfferingsResponse
+    , ListOfferingsResponse
+    -- * Response Lenses
+    , lorsNextToken
+    , lorsOfferings
+    , lorsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to list all offerings.
+--
+-- /See:/ 'listOfferings' smart constructor.
+newtype ListOfferings = ListOfferings'
+    { _loNextToken :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOfferings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'loNextToken'
+listOfferings
+    :: ListOfferings
+listOfferings =
+    ListOfferings'
+    { _loNextToken = Nothing
+    }
+
+-- | An identifier that was returned from the previous call to this
+-- operation, which can be used to return the next set of items in the
+-- list.
+loNextToken :: Lens' ListOfferings (Maybe Text)
+loNextToken = lens _loNextToken (\ s a -> s{_loNextToken = a});
+
+instance AWSRequest ListOfferings where
+        type Rs ListOfferings = ListOfferingsResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListOfferingsResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "offerings" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListOfferings
+
+instance NFData ListOfferings
+
+instance ToHeaders ListOfferings where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.ListOfferings" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListOfferings where
+        toJSON ListOfferings'{..}
+          = object
+              (catMaybes [("nextToken" .=) <$> _loNextToken])
+
+instance ToPath ListOfferings where
+        toPath = const "/"
+
+instance ToQuery ListOfferings where
+        toQuery = const mempty
+
+-- | Represents the return values of the list of offerings.
+--
+-- /See:/ 'listOfferingsResponse' smart constructor.
+data ListOfferingsResponse = ListOfferingsResponse'
+    { _lorsNextToken      :: !(Maybe Text)
+    , _lorsOfferings      :: !(Maybe [Offering])
+    , _lorsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOfferingsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lorsNextToken'
+--
+-- * 'lorsOfferings'
+--
+-- * 'lorsResponseStatus'
+listOfferingsResponse
+    :: Int -- ^ 'lorsResponseStatus'
+    -> ListOfferingsResponse
+listOfferingsResponse pResponseStatus_ =
+    ListOfferingsResponse'
+    { _lorsNextToken = Nothing
+    , _lorsOfferings = Nothing
+    , _lorsResponseStatus = pResponseStatus_
+    }
+
+-- | An identifier that was returned from the previous call to this
+-- operation, which can be used to return the next set of items in the
+-- list.
+lorsNextToken :: Lens' ListOfferingsResponse (Maybe Text)
+lorsNextToken = lens _lorsNextToken (\ s a -> s{_lorsNextToken = a});
+
+-- | A value representing the list offering results.
+lorsOfferings :: Lens' ListOfferingsResponse [Offering]
+lorsOfferings = lens _lorsOfferings (\ s a -> s{_lorsOfferings = a}) . _Default . _Coerce;
+
+-- | The response status code.
+lorsResponseStatus :: Lens' ListOfferingsResponse Int
+lorsResponseStatus = lens _lorsResponseStatus (\ s a -> s{_lorsResponseStatus = a});
+
+instance NFData ListOfferingsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListProjects.hs b/gen/Network/AWS/DeviceFarm/ListProjects.hs
--- a/gen/Network/AWS/DeviceFarm/ListProjects.hs
+++ b/gen/Network/AWS/DeviceFarm/ListProjects.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about projects.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListProjects
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -77,6 +80,13 @@
 lpNextToken :: Lens' ListProjects (Maybe Text)
 lpNextToken = lens _lpNextToken (\ s a -> s{_lpNextToken = a});
 
+instance AWSPager ListProjects where
+        page rq rs
+          | stop (rs ^. lprsNextToken) = Nothing
+          | stop (rs ^. lprsProjects) = Nothing
+          | otherwise =
+            Just $ rq & lpNextToken .~ rs ^. lprsNextToken
+
 instance AWSRequest ListProjects where
         type Rs ListProjects = ListProjectsResponse
         request = postJSON deviceFarm
@@ -89,6 +99,8 @@
 
 instance Hashable ListProjects
 
+instance NFData ListProjects
+
 instance ToHeaders ListProjects where
         toHeaders
           = const
@@ -152,3 +164,5 @@
 -- | The response status code.
 lprsResponseStatus :: Lens' ListProjectsResponse Int
 lprsResponseStatus = lens _lprsResponseStatus (\ s a -> s{_lprsResponseStatus = a});
+
+instance NFData ListProjectsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListRuns.hs b/gen/Network/AWS/DeviceFarm/ListRuns.hs
--- a/gen/Network/AWS/DeviceFarm/ListRuns.hs
+++ b/gen/Network/AWS/DeviceFarm/ListRuns.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about runs.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListRuns
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -78,6 +81,13 @@
 lrArn :: Lens' ListRuns Text
 lrArn = lens _lrArn (\ s a -> s{_lrArn = a});
 
+instance AWSPager ListRuns where
+        page rq rs
+          | stop (rs ^. lrrsNextToken) = Nothing
+          | stop (rs ^. lrrsRuns) = Nothing
+          | otherwise =
+            Just $ rq & lrNextToken .~ rs ^. lrrsNextToken
+
 instance AWSRequest ListRuns where
         type Rs ListRuns = ListRunsResponse
         request = postJSON deviceFarm
@@ -90,6 +100,8 @@
 
 instance Hashable ListRuns
 
+instance NFData ListRuns
+
 instance ToHeaders ListRuns where
         toHeaders
           = const
@@ -153,3 +165,5 @@
 -- | The response status code.
 lrrsResponseStatus :: Lens' ListRunsResponse Int
 lrrsResponseStatus = lens _lrrsResponseStatus (\ s a -> s{_lrrsResponseStatus = a});
+
+instance NFData ListRunsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListSamples.hs b/gen/Network/AWS/DeviceFarm/ListSamples.hs
--- a/gen/Network/AWS/DeviceFarm/ListSamples.hs
+++ b/gen/Network/AWS/DeviceFarm/ListSamples.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about samples.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListSamples
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -78,6 +81,13 @@
 lsArn :: Lens' ListSamples Text
 lsArn = lens _lsArn (\ s a -> s{_lsArn = a});
 
+instance AWSPager ListSamples where
+        page rq rs
+          | stop (rs ^. lrsNextToken) = Nothing
+          | stop (rs ^. lrsSamples) = Nothing
+          | otherwise =
+            Just $ rq & lsNextToken .~ rs ^. lrsNextToken
+
 instance AWSRequest ListSamples where
         type Rs ListSamples = ListSamplesResponse
         request = postJSON deviceFarm
@@ -90,6 +100,8 @@
 
 instance Hashable ListSamples
 
+instance NFData ListSamples
+
 instance ToHeaders ListSamples where
         toHeaders
           = const
@@ -153,3 +165,5 @@
 -- | The response status code.
 lrsResponseStatus :: Lens' ListSamplesResponse Int
 lrsResponseStatus = lens _lrsResponseStatus (\ s a -> s{_lrsResponseStatus = a});
+
+instance NFData ListSamplesResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListSuites.hs b/gen/Network/AWS/DeviceFarm/ListSuites.hs
--- a/gen/Network/AWS/DeviceFarm/ListSuites.hs
+++ b/gen/Network/AWS/DeviceFarm/ListSuites.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about suites.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListSuites
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -78,6 +81,13 @@
 lArn :: Lens' ListSuites Text
 lArn = lens _lArn (\ s a -> s{_lArn = a});
 
+instance AWSPager ListSuites where
+        page rq rs
+          | stop (rs ^. lsrsNextToken) = Nothing
+          | stop (rs ^. lsrsSuites) = Nothing
+          | otherwise =
+            Just $ rq & lNextToken .~ rs ^. lsrsNextToken
+
 instance AWSRequest ListSuites where
         type Rs ListSuites = ListSuitesResponse
         request = postJSON deviceFarm
@@ -90,6 +100,8 @@
 
 instance Hashable ListSuites
 
+instance NFData ListSuites
+
 instance ToHeaders ListSuites where
         toHeaders
           = const
@@ -153,3 +165,5 @@
 -- | The response status code.
 lsrsResponseStatus :: Lens' ListSuitesResponse Int
 lsrsResponseStatus = lens _lsrsResponseStatus (\ s a -> s{_lsrsResponseStatus = a});
+
+instance NFData ListSuitesResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListTests.hs b/gen/Network/AWS/DeviceFarm/ListTests.hs
--- a/gen/Network/AWS/DeviceFarm/ListTests.hs
+++ b/gen/Network/AWS/DeviceFarm/ListTests.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about tests.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListTests
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -78,6 +81,13 @@
 ltArn :: Lens' ListTests Text
 ltArn = lens _ltArn (\ s a -> s{_ltArn = a});
 
+instance AWSPager ListTests where
+        page rq rs
+          | stop (rs ^. ltrsNextToken) = Nothing
+          | stop (rs ^. ltrsTests) = Nothing
+          | otherwise =
+            Just $ rq & ltNextToken .~ rs ^. ltrsNextToken
+
 instance AWSRequest ListTests where
         type Rs ListTests = ListTestsResponse
         request = postJSON deviceFarm
@@ -90,6 +100,8 @@
 
 instance Hashable ListTests
 
+instance NFData ListTests
+
 instance ToHeaders ListTests where
         toHeaders
           = const
@@ -153,3 +165,5 @@
 -- | The response status code.
 ltrsResponseStatus :: Lens' ListTestsResponse Int
 ltrsResponseStatus = lens _ltrsResponseStatus (\ s a -> s{_ltrsResponseStatus = a});
+
+instance NFData ListTestsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListUniqueProblems.hs b/gen/Network/AWS/DeviceFarm/ListUniqueProblems.hs
--- a/gen/Network/AWS/DeviceFarm/ListUniqueProblems.hs
+++ b/gen/Network/AWS/DeviceFarm/ListUniqueProblems.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about unique problems.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListUniqueProblems
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -78,6 +81,13 @@
 lupArn :: Lens' ListUniqueProblems Text
 lupArn = lens _lupArn (\ s a -> s{_lupArn = a});
 
+instance AWSPager ListUniqueProblems where
+        page rq rs
+          | stop (rs ^. luprsNextToken) = Nothing
+          | stop (rs ^. luprsUniqueProblems) = Nothing
+          | otherwise =
+            Just $ rq & lupNextToken .~ rs ^. luprsNextToken
+
 instance AWSRequest ListUniqueProblems where
         type Rs ListUniqueProblems =
              ListUniqueProblemsResponse
@@ -92,6 +102,8 @@
 
 instance Hashable ListUniqueProblems
 
+instance NFData ListUniqueProblems
+
 instance ToHeaders ListUniqueProblems where
         toHeaders
           = const
@@ -153,19 +165,19 @@
 --
 -- Allowed values include:
 --
--- -   ERRORED: An error condition.
+-- -   PENDING: A pending condition.
 --
--- -   FAILED: A failed condition.
+-- -   PASSED: A passing condition.
 --
--- -   SKIPPED: A skipped condition.
+-- -   WARNED: A warning condition.
 --
--- -   STOPPED: A stopped condition.
+-- -   FAILED: A failed condition.
 --
--- -   PASSED: A passing condition.
+-- -   SKIPPED: A skipped condition.
 --
--- -   PENDING: A pending condition.
+-- -   ERRORED: An error condition.
 --
--- -   WARNED: A warning condition.
+-- -   STOPPED: A stopped condition.
 --
 luprsUniqueProblems :: Lens' ListUniqueProblemsResponse (HashMap ExecutionResult [UniqueProblem])
 luprsUniqueProblems = lens _luprsUniqueProblems (\ s a -> s{_luprsUniqueProblems = a}) . _Default . _Map;
@@ -173,3 +185,5 @@
 -- | The response status code.
 luprsResponseStatus :: Lens' ListUniqueProblemsResponse Int
 luprsResponseStatus = lens _luprsResponseStatus (\ s a -> s{_luprsResponseStatus = a});
+
+instance NFData ListUniqueProblemsResponse
diff --git a/gen/Network/AWS/DeviceFarm/ListUploads.hs b/gen/Network/AWS/DeviceFarm/ListUploads.hs
--- a/gen/Network/AWS/DeviceFarm/ListUploads.hs
+++ b/gen/Network/AWS/DeviceFarm/ListUploads.hs
@@ -19,6 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets information about uploads.
+--
+-- This operation returns paginated results.
 module Network.AWS.DeviceFarm.ListUploads
     (
     -- * Creating a Request
@@ -40,6 +42,7 @@
 import           Network.AWS.DeviceFarm.Types
 import           Network.AWS.DeviceFarm.Types.Product
 import           Network.AWS.Lens
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -78,6 +81,13 @@
 luArn :: Lens' ListUploads Text
 luArn = lens _luArn (\ s a -> s{_luArn = a});
 
+instance AWSPager ListUploads where
+        page rq rs
+          | stop (rs ^. lursNextToken) = Nothing
+          | stop (rs ^. lursUploads) = Nothing
+          | otherwise =
+            Just $ rq & luNextToken .~ rs ^. lursNextToken
+
 instance AWSRequest ListUploads where
         type Rs ListUploads = ListUploadsResponse
         request = postJSON deviceFarm
@@ -90,6 +100,8 @@
 
 instance Hashable ListUploads
 
+instance NFData ListUploads
+
 instance ToHeaders ListUploads where
         toHeaders
           = const
@@ -153,3 +165,5 @@
 -- | The response status code.
 lursResponseStatus :: Lens' ListUploadsResponse Int
 lursResponseStatus = lens _lursResponseStatus (\ s a -> s{_lursResponseStatus = a});
+
+instance NFData ListUploadsResponse
diff --git a/gen/Network/AWS/DeviceFarm/PurchaseOffering.hs b/gen/Network/AWS/DeviceFarm/PurchaseOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/PurchaseOffering.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DeviceFarm.PurchaseOffering
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Immediately purchases offerings for an AWS account. Offerings renew with
+-- the latest total purchased quantity for an offering, unless the renewal
+-- was overridden. The API returns a 'NotEligible' error if the user is not
+-- permitted to invoke the operation. Please contact
+-- <mailto:aws-devicefarm-support'amazon.com aws-devicefarm-support\'amazon.com>
+-- if you believe that you should be able to invoke this operation.
+module Network.AWS.DeviceFarm.PurchaseOffering
+    (
+    -- * Creating a Request
+      purchaseOffering
+    , PurchaseOffering
+    -- * Request Lenses
+    , poQuantity
+    , poOfferingId
+
+    -- * Destructuring the Response
+    , purchaseOfferingResponse
+    , PurchaseOfferingResponse
+    -- * Response Lenses
+    , porsOfferingTransaction
+    , porsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents a request for a purchase offering.
+--
+-- /See:/ 'purchaseOffering' smart constructor.
+data PurchaseOffering = PurchaseOffering'
+    { _poQuantity   :: !(Maybe Int)
+    , _poOfferingId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PurchaseOffering' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'poQuantity'
+--
+-- * 'poOfferingId'
+purchaseOffering
+    :: PurchaseOffering
+purchaseOffering =
+    PurchaseOffering'
+    { _poQuantity = Nothing
+    , _poOfferingId = Nothing
+    }
+
+-- | The number of device slots you wish to purchase in an offering request.
+poQuantity :: Lens' PurchaseOffering (Maybe Int)
+poQuantity = lens _poQuantity (\ s a -> s{_poQuantity = a});
+
+-- | The ID of the offering.
+poOfferingId :: Lens' PurchaseOffering (Maybe Text)
+poOfferingId = lens _poOfferingId (\ s a -> s{_poOfferingId = a});
+
+instance AWSRequest PurchaseOffering where
+        type Rs PurchaseOffering = PurchaseOfferingResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PurchaseOfferingResponse' <$>
+                   (x .?> "offeringTransaction") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable PurchaseOffering
+
+instance NFData PurchaseOffering
+
+instance ToHeaders PurchaseOffering where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.PurchaseOffering" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PurchaseOffering where
+        toJSON PurchaseOffering'{..}
+          = object
+              (catMaybes
+                 [("quantity" .=) <$> _poQuantity,
+                  ("offeringId" .=) <$> _poOfferingId])
+
+instance ToPath PurchaseOffering where
+        toPath = const "/"
+
+instance ToQuery PurchaseOffering where
+        toQuery = const mempty
+
+-- | The result of the purchase offering (e.g., success or failure).
+--
+-- /See:/ 'purchaseOfferingResponse' smart constructor.
+data PurchaseOfferingResponse = PurchaseOfferingResponse'
+    { _porsOfferingTransaction :: !(Maybe OfferingTransaction)
+    , _porsResponseStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PurchaseOfferingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'porsOfferingTransaction'
+--
+-- * 'porsResponseStatus'
+purchaseOfferingResponse
+    :: Int -- ^ 'porsResponseStatus'
+    -> PurchaseOfferingResponse
+purchaseOfferingResponse pResponseStatus_ =
+    PurchaseOfferingResponse'
+    { _porsOfferingTransaction = Nothing
+    , _porsResponseStatus = pResponseStatus_
+    }
+
+-- | Represents the offering transaction for the purchase result.
+porsOfferingTransaction :: Lens' PurchaseOfferingResponse (Maybe OfferingTransaction)
+porsOfferingTransaction = lens _porsOfferingTransaction (\ s a -> s{_porsOfferingTransaction = a});
+
+-- | The response status code.
+porsResponseStatus :: Lens' PurchaseOfferingResponse Int
+porsResponseStatus = lens _porsResponseStatus (\ s a -> s{_porsResponseStatus = a});
+
+instance NFData PurchaseOfferingResponse
diff --git a/gen/Network/AWS/DeviceFarm/RenewOffering.hs b/gen/Network/AWS/DeviceFarm/RenewOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/RenewOffering.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DeviceFarm.RenewOffering
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Explicitly sets the quantity of devices to renew for an offering,
+-- starting from the 'effectiveDate' of the next period. The API returns a
+-- 'NotEligible' error if the user is not permitted to invoke the
+-- operation. Please contact
+-- <mailto:aws-devicefarm-support'amazon.com aws-devicefarm-support\'amazon.com>
+-- if you believe that you should be able to invoke this operation.
+module Network.AWS.DeviceFarm.RenewOffering
+    (
+    -- * Creating a Request
+      renewOffering
+    , RenewOffering
+    -- * Request Lenses
+    , roQuantity
+    , roOfferingId
+
+    -- * Destructuring the Response
+    , renewOfferingResponse
+    , RenewOfferingResponse
+    -- * Response Lenses
+    , rorsOfferingTransaction
+    , rorsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | A request representing an offering renewal.
+--
+-- /See:/ 'renewOffering' smart constructor.
+data RenewOffering = RenewOffering'
+    { _roQuantity   :: !(Maybe Int)
+    , _roOfferingId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RenewOffering' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'roQuantity'
+--
+-- * 'roOfferingId'
+renewOffering
+    :: RenewOffering
+renewOffering =
+    RenewOffering'
+    { _roQuantity = Nothing
+    , _roOfferingId = Nothing
+    }
+
+-- | The quantity requested in an offering renewal.
+roQuantity :: Lens' RenewOffering (Maybe Int)
+roQuantity = lens _roQuantity (\ s a -> s{_roQuantity = a});
+
+-- | The ID of a request to renew an offering.
+roOfferingId :: Lens' RenewOffering (Maybe Text)
+roOfferingId = lens _roOfferingId (\ s a -> s{_roOfferingId = a});
+
+instance AWSRequest RenewOffering where
+        type Rs RenewOffering = RenewOfferingResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RenewOfferingResponse' <$>
+                   (x .?> "offeringTransaction") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable RenewOffering
+
+instance NFData RenewOffering
+
+instance ToHeaders RenewOffering where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.RenewOffering" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON RenewOffering where
+        toJSON RenewOffering'{..}
+          = object
+              (catMaybes
+                 [("quantity" .=) <$> _roQuantity,
+                  ("offeringId" .=) <$> _roOfferingId])
+
+instance ToPath RenewOffering where
+        toPath = const "/"
+
+instance ToQuery RenewOffering where
+        toQuery = const mempty
+
+-- | The result of a renewal offering.
+--
+-- /See:/ 'renewOfferingResponse' smart constructor.
+data RenewOfferingResponse = RenewOfferingResponse'
+    { _rorsOfferingTransaction :: !(Maybe OfferingTransaction)
+    , _rorsResponseStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RenewOfferingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rorsOfferingTransaction'
+--
+-- * 'rorsResponseStatus'
+renewOfferingResponse
+    :: Int -- ^ 'rorsResponseStatus'
+    -> RenewOfferingResponse
+renewOfferingResponse pResponseStatus_ =
+    RenewOfferingResponse'
+    { _rorsOfferingTransaction = Nothing
+    , _rorsResponseStatus = pResponseStatus_
+    }
+
+-- | Represents the status of the offering transaction for the renewal.
+rorsOfferingTransaction :: Lens' RenewOfferingResponse (Maybe OfferingTransaction)
+rorsOfferingTransaction = lens _rorsOfferingTransaction (\ s a -> s{_rorsOfferingTransaction = a});
+
+-- | The response status code.
+rorsResponseStatus :: Lens' RenewOfferingResponse Int
+rorsResponseStatus = lens _rorsResponseStatus (\ s a -> s{_rorsResponseStatus = a});
+
+instance NFData RenewOfferingResponse
diff --git a/gen/Network/AWS/DeviceFarm/ScheduleRun.hs b/gen/Network/AWS/DeviceFarm/ScheduleRun.hs
--- a/gen/Network/AWS/DeviceFarm/ScheduleRun.hs
+++ b/gen/Network/AWS/DeviceFarm/ScheduleRun.hs
@@ -124,6 +124,8 @@
 
 instance Hashable ScheduleRun
 
+instance NFData ScheduleRun
+
 instance ToHeaders ScheduleRun where
         toHeaders
           = const
@@ -181,3 +183,5 @@
 -- | The response status code.
 srrsResponseStatus :: Lens' ScheduleRunResponse Int
 srrsResponseStatus = lens _srrsResponseStatus (\ s a -> s{_srrsResponseStatus = a});
+
+instance NFData ScheduleRunResponse
diff --git a/gen/Network/AWS/DeviceFarm/StopRun.hs b/gen/Network/AWS/DeviceFarm/StopRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DeviceFarm/StopRun.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DeviceFarm.StopRun
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Initiates a stop request for the current test run. AWS Device Farm will
+-- immediately stop the run on devices where tests have not started
+-- executing, and you will not be billed for these devices. On devices
+-- where tests have started executing, Setup Suite and Teardown Suite tests
+-- will run to completion before stopping execution on those devices. You
+-- will be billed for Setup, Teardown, and any tests that were in progress
+-- or already completed.
+module Network.AWS.DeviceFarm.StopRun
+    (
+    -- * Creating a Request
+      stopRun
+    , StopRun
+    -- * Request Lenses
+    , srArn
+
+    -- * Destructuring the Response
+    , stopRunResponse
+    , StopRunResponse
+    -- * Response Lenses
+    , srsRun
+    , srsResponseStatus
+    ) where
+
+import           Network.AWS.DeviceFarm.Types
+import           Network.AWS.DeviceFarm.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the request to stop a specific run.
+--
+-- /See:/ 'stopRun' smart constructor.
+newtype StopRun = StopRun'
+    { _srArn :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StopRun' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srArn'
+stopRun
+    :: Text -- ^ 'srArn'
+    -> StopRun
+stopRun pArn_ =
+    StopRun'
+    { _srArn = pArn_
+    }
+
+-- | Represents the Amazon Resource Name (ARN) of the Device Farm run you
+-- wish to stop.
+srArn :: Lens' StopRun Text
+srArn = lens _srArn (\ s a -> s{_srArn = a});
+
+instance AWSRequest StopRun where
+        type Rs StopRun = StopRunResponse
+        request = postJSON deviceFarm
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StopRunResponse' <$>
+                   (x .?> "run") <*> (pure (fromEnum s)))
+
+instance Hashable StopRun
+
+instance NFData StopRun
+
+instance ToHeaders StopRun where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("DeviceFarm_20150623.StopRun" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StopRun where
+        toJSON StopRun'{..}
+          = object (catMaybes [Just ("arn" .= _srArn)])
+
+instance ToPath StopRun where
+        toPath = const "/"
+
+instance ToQuery StopRun where
+        toQuery = const mempty
+
+-- | Represents the results of your stop run attempt.
+--
+-- /See:/ 'stopRunResponse' smart constructor.
+data StopRunResponse = StopRunResponse'
+    { _srsRun            :: !(Maybe Run)
+    , _srsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StopRunResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsRun'
+--
+-- * 'srsResponseStatus'
+stopRunResponse
+    :: Int -- ^ 'srsResponseStatus'
+    -> StopRunResponse
+stopRunResponse pResponseStatus_ =
+    StopRunResponse'
+    { _srsRun = Nothing
+    , _srsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+srsRun :: Lens' StopRunResponse (Maybe Run)
+srsRun = lens _srsRun (\ s a -> s{_srsRun = a});
+
+-- | The response status code.
+srsResponseStatus :: Lens' StopRunResponse Int
+srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a});
+
+instance NFData StopRunResponse
diff --git a/gen/Network/AWS/DeviceFarm/Types.hs b/gen/Network/AWS/DeviceFarm/Types.hs
--- a/gen/Network/AWS/DeviceFarm/Types.hs
+++ b/gen/Network/AWS/DeviceFarm/Types.hs
@@ -16,6 +16,7 @@
       deviceFarm
 
     -- * Errors
+    , _NotEligibleException
     , _IdempotencyException
     , _ArgumentException
     , _NotFoundException
@@ -31,6 +32,9 @@
     -- * BillingMethod
     , BillingMethod (..)
 
+    -- * CurrencyCode
+    , CurrencyCode (..)
+
     -- * DeviceAttribute
     , DeviceAttribute (..)
 
@@ -49,6 +53,15 @@
     -- * ExecutionStatus
     , ExecutionStatus (..)
 
+    -- * OfferingTransactionType
+    , OfferingTransactionType (..)
+
+    -- * OfferingType
+    , OfferingType (..)
+
+    -- * RecurringChargeFrequency
+    , RecurringChargeFrequency (..)
+
     -- * RuleOperator
     , RuleOperator (..)
 
@@ -69,6 +82,7 @@
     , accountSettings
     , asAwsAccountNumber
     , asUnmeteredDevices
+    , asUnmeteredRemoteAccessDevices
 
     -- * Artifact
     , Artifact
@@ -166,6 +180,37 @@
     , lLatitude
     , lLongitude
 
+    -- * MonetaryAmount
+    , MonetaryAmount
+    , monetaryAmount
+    , maAmount
+    , maCurrencyCode
+
+    -- * Offering
+    , Offering
+    , offering
+    , oPlatform
+    , oId
+    , oRecurringCharges
+    , oType
+    , oDescription
+
+    -- * OfferingStatus
+    , OfferingStatus
+    , offeringStatus
+    , osEffectiveOn
+    , osOffering
+    , osQuantity
+    , osType
+
+    -- * OfferingTransaction
+    , OfferingTransaction
+    , offeringTransaction
+    , otOfferingStatus
+    , otCost
+    , otTransactionId
+    , otCreatedOn
+
     -- * Problem
     , Problem
     , problem
@@ -198,6 +243,12 @@
     , rBluetooth
     , rWifi
 
+    -- * RecurringCharge
+    , RecurringCharge
+    , recurringCharge
+    , rcFrequency
+    , rcCost
+
     -- * Resolution
     , Resolution
     , resolution
@@ -339,10 +390,17 @@
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
           Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasStatus 502) e = Just "bad_gateway"
       | has (hasStatus 503) e = Just "service_unavailable"
       | has (hasStatus 500) e = Just "general_server_error"
       | has (hasStatus 509) e = Just "limit_exceeded"
       | otherwise = Nothing
+
+-- | Exception gets thrown when a user is not eligible to perform the
+-- specified transaction.
+_NotEligibleException :: AsError a => Getting (First ServiceError) a ServiceError
+_NotEligibleException = _ServiceError . hasCode "NotEligibleException"
 
 -- | An entity with the same name already exists.
 _IdempotencyException :: AsError a => Getting (First ServiceError) a ServiceError
diff --git a/gen/Network/AWS/DeviceFarm/Types/Product.hs b/gen/Network/AWS/DeviceFarm/Types/Product.hs
--- a/gen/Network/AWS/DeviceFarm/Types/Product.hs
+++ b/gen/Network/AWS/DeviceFarm/Types/Product.hs
@@ -25,8 +25,9 @@
 --
 -- /See:/ 'accountSettings' smart constructor.
 data AccountSettings = AccountSettings'
-    { _asAwsAccountNumber :: !(Maybe Text)
-    , _asUnmeteredDevices :: !(Maybe (Map DevicePlatform Int))
+    { _asAwsAccountNumber             :: !(Maybe Text)
+    , _asUnmeteredDevices             :: !(Maybe (Map DevicePlatform Int))
+    , _asUnmeteredRemoteAccessDevices :: !(Maybe (Map DevicePlatform Int))
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'AccountSettings' with the minimum fields required to make a request.
@@ -36,32 +37,44 @@
 -- * 'asAwsAccountNumber'
 --
 -- * 'asUnmeteredDevices'
+--
+-- * 'asUnmeteredRemoteAccessDevices'
 accountSettings
     :: AccountSettings
 accountSettings =
     AccountSettings'
     { _asAwsAccountNumber = Nothing
     , _asUnmeteredDevices = Nothing
+    , _asUnmeteredRemoteAccessDevices = Nothing
     }
 
 -- | The AWS account number specified in the 'AccountSettings' container.
 asAwsAccountNumber :: Lens' AccountSettings (Maybe Text)
 asAwsAccountNumber = lens _asAwsAccountNumber (\ s a -> s{_asAwsAccountNumber = a});
 
--- | Returns the unmetered devices you have purchased.
+-- | Returns the unmetered devices you have purchased or want to purchase.
 asUnmeteredDevices :: Lens' AccountSettings (HashMap DevicePlatform Int)
 asUnmeteredDevices = lens _asUnmeteredDevices (\ s a -> s{_asUnmeteredDevices = a}) . _Default . _Map;
 
+-- | Returns the unmetered remote access devices you have purchased or want
+-- to purchase.
+asUnmeteredRemoteAccessDevices :: Lens' AccountSettings (HashMap DevicePlatform Int)
+asUnmeteredRemoteAccessDevices = lens _asUnmeteredRemoteAccessDevices (\ s a -> s{_asUnmeteredRemoteAccessDevices = a}) . _Default . _Map;
+
 instance FromJSON AccountSettings where
         parseJSON
           = withObject "AccountSettings"
               (\ x ->
                  AccountSettings' <$>
                    (x .:? "awsAccountNumber") <*>
-                     (x .:? "unmeteredDevices" .!= mempty))
+                     (x .:? "unmeteredDevices" .!= mempty)
+                     <*>
+                     (x .:? "unmeteredRemoteAccessDevices" .!= mempty))
 
 instance Hashable AccountSettings
 
+instance NFData AccountSettings
+
 -- | Represents the output of a test. Examples of artifacts include logs and
 -- screenshots.
 --
@@ -181,6 +194,8 @@
 
 instance Hashable Artifact
 
+instance NFData Artifact
+
 -- | Represents the amount of CPU that an app is using on a physical device.
 --
 -- Note that this does not represent system-wide CPU usage.
@@ -233,6 +248,8 @@
 
 instance Hashable CPU
 
+instance NFData CPU
+
 -- | Represents entity counters.
 --
 -- /See:/ 'counters' smart constructor.
@@ -318,6 +335,8 @@
 
 instance Hashable Counters
 
+instance NFData Counters
+
 -- | Represents a device type that an app is tested against.
 --
 -- /See:/ 'device' smart constructor.
@@ -480,6 +499,8 @@
 
 instance Hashable Device
 
+instance NFData Device
+
 -- | Represents the total (metered or unmetered) minutes used by the resource
 -- to run tests. Contains the sum of minutes consumed by all children.
 --
@@ -533,6 +554,8 @@
 
 instance Hashable DeviceMinutes
 
+instance NFData DeviceMinutes
+
 -- | Represents a collection of device types.
 --
 -- /See:/ 'devicePool' smart constructor.
@@ -609,6 +632,8 @@
 
 instance Hashable DevicePool
 
+instance NFData DevicePool
+
 -- | Represents a device pool compatibility result.
 --
 -- /See:/ 'devicePoolCompatibilityResult' smart constructor.
@@ -658,6 +683,8 @@
 
 instance Hashable DevicePoolCompatibilityResult
 
+instance NFData DevicePoolCompatibilityResult
+
 -- | Represents information about incompatibility.
 --
 -- /See:/ 'incompatibilityMessage' smart constructor.
@@ -709,6 +736,8 @@
 
 instance Hashable IncompatibilityMessage
 
+instance NFData IncompatibilityMessage
+
 -- | Represents a device.
 --
 -- /See:/ 'job' smart constructor.
@@ -776,16 +805,24 @@
 --
 -- Allowed values include:
 --
--- -   COMPLETED: A completed status.
---
 -- -   PENDING: A pending status.
 --
+-- -   PENDING_CONCURRENCY: A pending concurrency status.
+--
+-- -   PENDING_DEVICE: A pending device status.
+--
 -- -   PROCESSING: A processing status.
 --
+-- -   SCHEDULING: A scheduling status.
+--
+-- -   PREPARING: A preparing status.
+--
 -- -   RUNNING: A running status.
 --
--- -   SCHEDULING: A scheduling status.
+-- -   COMPLETED: A completed status.
 --
+-- -   STOPPING: A stopping status.
+--
 jobStatus :: Lens' Job (Maybe ExecutionStatus)
 jobStatus = lens _jobStatus (\ s a -> s{_jobStatus = a});
 
@@ -813,19 +850,19 @@
 --
 -- Allowed values include:
 --
--- -   ERRORED: An error condition.
+-- -   PENDING: A pending condition.
 --
--- -   FAILED: A failed condition.
+-- -   PASSED: A passing condition.
 --
--- -   SKIPPED: A skipped condition.
+-- -   WARNED: A warning condition.
 --
--- -   STOPPED: A stopped condition.
+-- -   FAILED: A failed condition.
 --
--- -   PASSED: A passing condition.
+-- -   SKIPPED: A skipped condition.
 --
--- -   PENDING: A pending condition.
+-- -   ERRORED: An error condition.
 --
--- -   WARNED: A warning condition.
+-- -   STOPPED: A stopped condition.
 --
 jobResult :: Lens' Job (Maybe ExecutionResult)
 jobResult = lens _jobResult (\ s a -> s{_jobResult = a});
@@ -902,6 +939,8 @@
 
 instance Hashable Job
 
+instance NFData Job
+
 -- | Represents a latitude and longitude pair, expressed in geographic
 -- coordinate system degrees (for example 47.6204, -122.3491).
 --
@@ -940,6 +979,8 @@
 
 instance Hashable Location
 
+instance NFData Location
+
 instance ToJSON Location where
         toJSON Location'{..}
           = object
@@ -947,6 +988,239 @@
                  [Just ("latitude" .= _lLatitude),
                   Just ("longitude" .= _lLongitude)])
 
+-- | A number representing the monetary amount for an offering or
+-- transaction.
+--
+-- /See:/ 'monetaryAmount' smart constructor.
+data MonetaryAmount = MonetaryAmount'
+    { _maAmount       :: !(Maybe Double)
+    , _maCurrencyCode :: !(Maybe CurrencyCode)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MonetaryAmount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'maAmount'
+--
+-- * 'maCurrencyCode'
+monetaryAmount
+    :: MonetaryAmount
+monetaryAmount =
+    MonetaryAmount'
+    { _maAmount = Nothing
+    , _maCurrencyCode = Nothing
+    }
+
+-- | The numerical amount of an offering or transaction.
+maAmount :: Lens' MonetaryAmount (Maybe Double)
+maAmount = lens _maAmount (\ s a -> s{_maAmount = a});
+
+-- | The currency code of a monetary amount. For example, 'USD' means \"U.S.
+-- dollars.\"
+maCurrencyCode :: Lens' MonetaryAmount (Maybe CurrencyCode)
+maCurrencyCode = lens _maCurrencyCode (\ s a -> s{_maCurrencyCode = a});
+
+instance FromJSON MonetaryAmount where
+        parseJSON
+          = withObject "MonetaryAmount"
+              (\ x ->
+                 MonetaryAmount' <$>
+                   (x .:? "amount") <*> (x .:? "currencyCode"))
+
+instance Hashable MonetaryAmount
+
+instance NFData MonetaryAmount
+
+-- | Represents the metadata of a device offering.
+--
+-- /See:/ 'offering' smart constructor.
+data Offering = Offering'
+    { _oPlatform         :: !(Maybe DevicePlatform)
+    , _oId               :: !(Maybe Text)
+    , _oRecurringCharges :: !(Maybe [RecurringCharge])
+    , _oType             :: !(Maybe OfferingType)
+    , _oDescription      :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Offering' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oPlatform'
+--
+-- * 'oId'
+--
+-- * 'oRecurringCharges'
+--
+-- * 'oType'
+--
+-- * 'oDescription'
+offering
+    :: Offering
+offering =
+    Offering'
+    { _oPlatform = Nothing
+    , _oId = Nothing
+    , _oRecurringCharges = Nothing
+    , _oType = Nothing
+    , _oDescription = Nothing
+    }
+
+-- | The platform of the device (e.g., ANDROID or IOS).
+oPlatform :: Lens' Offering (Maybe DevicePlatform)
+oPlatform = lens _oPlatform (\ s a -> s{_oPlatform = a});
+
+-- | The ID that corresponds to a device offering.
+oId :: Lens' Offering (Maybe Text)
+oId = lens _oId (\ s a -> s{_oId = a});
+
+-- | Specifies whether there are recurring charges for the offering.
+oRecurringCharges :: Lens' Offering [RecurringCharge]
+oRecurringCharges = lens _oRecurringCharges (\ s a -> s{_oRecurringCharges = a}) . _Default . _Coerce;
+
+-- | The type of offering (e.g., \"RECURRING\") for a device.
+oType :: Lens' Offering (Maybe OfferingType)
+oType = lens _oType (\ s a -> s{_oType = a});
+
+-- | A string describing the offering.
+oDescription :: Lens' Offering (Maybe Text)
+oDescription = lens _oDescription (\ s a -> s{_oDescription = a});
+
+instance FromJSON Offering where
+        parseJSON
+          = withObject "Offering"
+              (\ x ->
+                 Offering' <$>
+                   (x .:? "platform") <*> (x .:? "id") <*>
+                     (x .:? "recurringCharges" .!= mempty)
+                     <*> (x .:? "type")
+                     <*> (x .:? "description"))
+
+instance Hashable Offering
+
+instance NFData Offering
+
+-- | The status of the offering.
+--
+-- /See:/ 'offeringStatus' smart constructor.
+data OfferingStatus = OfferingStatus'
+    { _osEffectiveOn :: !(Maybe POSIX)
+    , _osOffering    :: !(Maybe Offering)
+    , _osQuantity    :: !(Maybe Int)
+    , _osType        :: !(Maybe OfferingTransactionType)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OfferingStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'osEffectiveOn'
+--
+-- * 'osOffering'
+--
+-- * 'osQuantity'
+--
+-- * 'osType'
+offeringStatus
+    :: OfferingStatus
+offeringStatus =
+    OfferingStatus'
+    { _osEffectiveOn = Nothing
+    , _osOffering = Nothing
+    , _osQuantity = Nothing
+    , _osType = Nothing
+    }
+
+-- | The date on which the offering is effective.
+osEffectiveOn :: Lens' OfferingStatus (Maybe UTCTime)
+osEffectiveOn = lens _osEffectiveOn (\ s a -> s{_osEffectiveOn = a}) . mapping _Time;
+
+-- | Represents the metadata of an offering status.
+osOffering :: Lens' OfferingStatus (Maybe Offering)
+osOffering = lens _osOffering (\ s a -> s{_osOffering = a});
+
+-- | The number of available devices in the offering.
+osQuantity :: Lens' OfferingStatus (Maybe Int)
+osQuantity = lens _osQuantity (\ s a -> s{_osQuantity = a});
+
+-- | The type specified for the offering status.
+osType :: Lens' OfferingStatus (Maybe OfferingTransactionType)
+osType = lens _osType (\ s a -> s{_osType = a});
+
+instance FromJSON OfferingStatus where
+        parseJSON
+          = withObject "OfferingStatus"
+              (\ x ->
+                 OfferingStatus' <$>
+                   (x .:? "effectiveOn") <*> (x .:? "offering") <*>
+                     (x .:? "quantity")
+                     <*> (x .:? "type"))
+
+instance Hashable OfferingStatus
+
+instance NFData OfferingStatus
+
+-- | Represents the metadata of an offering transaction.
+--
+-- /See:/ 'offeringTransaction' smart constructor.
+data OfferingTransaction = OfferingTransaction'
+    { _otOfferingStatus :: !(Maybe OfferingStatus)
+    , _otCost           :: !(Maybe MonetaryAmount)
+    , _otTransactionId  :: !(Maybe Text)
+    , _otCreatedOn      :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OfferingTransaction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'otOfferingStatus'
+--
+-- * 'otCost'
+--
+-- * 'otTransactionId'
+--
+-- * 'otCreatedOn'
+offeringTransaction
+    :: OfferingTransaction
+offeringTransaction =
+    OfferingTransaction'
+    { _otOfferingStatus = Nothing
+    , _otCost = Nothing
+    , _otTransactionId = Nothing
+    , _otCreatedOn = Nothing
+    }
+
+-- | The status of an offering transaction.
+otOfferingStatus :: Lens' OfferingTransaction (Maybe OfferingStatus)
+otOfferingStatus = lens _otOfferingStatus (\ s a -> s{_otOfferingStatus = a});
+
+-- | The cost of an offering transaction.
+otCost :: Lens' OfferingTransaction (Maybe MonetaryAmount)
+otCost = lens _otCost (\ s a -> s{_otCost = a});
+
+-- | The transaction ID of the offering transaction.
+otTransactionId :: Lens' OfferingTransaction (Maybe Text)
+otTransactionId = lens _otTransactionId (\ s a -> s{_otTransactionId = a});
+
+-- | The date on which an offering transaction was created.
+otCreatedOn :: Lens' OfferingTransaction (Maybe UTCTime)
+otCreatedOn = lens _otCreatedOn (\ s a -> s{_otCreatedOn = a}) . mapping _Time;
+
+instance FromJSON OfferingTransaction where
+        parseJSON
+          = withObject "OfferingTransaction"
+              (\ x ->
+                 OfferingTransaction' <$>
+                   (x .:? "offeringStatus") <*> (x .:? "cost") <*>
+                     (x .:? "transactionId")
+                     <*> (x .:? "createdOn"))
+
+instance Hashable OfferingTransaction
+
+instance NFData OfferingTransaction
+
 -- | Represents a specific warning or failure.
 --
 -- /See:/ 'problem' smart constructor.
@@ -1002,19 +1276,19 @@
 --
 -- Allowed values include:
 --
--- -   ERRORED: An error condition.
+-- -   PENDING: A pending condition.
 --
--- -   FAILED: A failed condition.
+-- -   PASSED: A passing condition.
 --
--- -   SKIPPED: A skipped condition.
+-- -   WARNED: A warning condition.
 --
--- -   STOPPED: A stopped condition.
+-- -   FAILED: A failed condition.
 --
--- -   PASSED: A passing condition.
+-- -   SKIPPED: A skipped condition.
 --
--- -   PENDING: A pending condition.
+-- -   ERRORED: An error condition.
 --
--- -   WARNED: A warning condition.
+-- -   STOPPED: A stopped condition.
 --
 pResult :: Lens' Problem (Maybe ExecutionResult)
 pResult = lens _pResult (\ s a -> s{_pResult = a});
@@ -1049,6 +1323,8 @@
 
 instance Hashable Problem
 
+instance NFData Problem
+
 -- | Information about a problem detail.
 --
 -- /See:/ 'problemDetail' smart constructor.
@@ -1088,6 +1364,8 @@
 
 instance Hashable ProblemDetail
 
+instance NFData ProblemDetail
+
 -- | Represents an operating-system neutral workspace for running and
 -- managing tests.
 --
@@ -1138,6 +1416,8 @@
 
 instance Hashable Project
 
+instance NFData Project
+
 -- | Represents the set of radios and their states on a device. Examples of
 -- radios include Wi-Fi, GPS, Bluetooth, and NFC.
 --
@@ -1189,6 +1469,8 @@
 
 instance Hashable Radios
 
+instance NFData Radios
+
 instance ToJSON Radios where
         toJSON Radios'{..}
           = object
@@ -1197,6 +1479,48 @@
                   ("bluetooth" .=) <$> _rBluetooth,
                   ("wifi" .=) <$> _rWifi])
 
+-- | Specifies whether charges for devices will be recurring.
+--
+-- /See:/ 'recurringCharge' smart constructor.
+data RecurringCharge = RecurringCharge'
+    { _rcFrequency :: !(Maybe RecurringChargeFrequency)
+    , _rcCost      :: !(Maybe MonetaryAmount)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RecurringCharge' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcFrequency'
+--
+-- * 'rcCost'
+recurringCharge
+    :: RecurringCharge
+recurringCharge =
+    RecurringCharge'
+    { _rcFrequency = Nothing
+    , _rcCost = Nothing
+    }
+
+-- | The frequency in which charges will recur.
+rcFrequency :: Lens' RecurringCharge (Maybe RecurringChargeFrequency)
+rcFrequency = lens _rcFrequency (\ s a -> s{_rcFrequency = a});
+
+-- | The cost of the recurring charge.
+rcCost :: Lens' RecurringCharge (Maybe MonetaryAmount)
+rcCost = lens _rcCost (\ s a -> s{_rcCost = a});
+
+instance FromJSON RecurringCharge where
+        parseJSON
+          = withObject "RecurringCharge"
+              (\ x ->
+                 RecurringCharge' <$>
+                   (x .:? "frequency") <*> (x .:? "cost"))
+
+instance Hashable RecurringCharge
+
+instance NFData RecurringCharge
+
 -- | Represents the screen resolution of a device in height and width,
 -- expressed in pixels.
 --
@@ -1237,6 +1561,8 @@
 
 instance Hashable Resolution
 
+instance NFData Resolution
+
 -- | Represents a condition for a device pool.
 --
 -- /See:/ 'rule' smart constructor.
@@ -1264,7 +1590,8 @@
     , _rValue = Nothing
     }
 
--- | The rule\'s attribute.
+-- | The rule\'s stringified attribute. For example, specify the value as
+-- '\"\\\"abc\\\"\"'.
 --
 -- Allowed values include:
 --
@@ -1308,6 +1635,8 @@
 
 instance Hashable Rule
 
+instance NFData Rule
+
 instance ToJSON Rule where
         toJSON Rule'{..}
           = object
@@ -1401,16 +1730,24 @@
 --
 -- Allowed values include:
 --
--- -   COMPLETED: A completed status.
---
 -- -   PENDING: A pending status.
 --
+-- -   PENDING_CONCURRENCY: A pending concurrency status.
+--
+-- -   PENDING_DEVICE: A pending device status.
+--
 -- -   PROCESSING: A processing status.
 --
+-- -   SCHEDULING: A scheduling status.
+--
+-- -   PREPARING: A preparing status.
+--
 -- -   RUNNING: A running status.
 --
--- -   SCHEDULING: A scheduling status.
+-- -   COMPLETED: A completed status.
 --
+-- -   STOPPING: A stopping status.
+--
 runStatus :: Lens' Run (Maybe ExecutionStatus)
 runStatus = lens _runStatus (\ s a -> s{_runStatus = a});
 
@@ -1445,19 +1782,19 @@
 --
 -- Allowed values include:
 --
--- -   ERRORED: An error condition.
+-- -   PENDING: A pending condition.
 --
--- -   FAILED: A failed condition.
+-- -   PASSED: A passing condition.
 --
--- -   SKIPPED: A skipped condition.
+-- -   WARNED: A warning condition.
 --
--- -   STOPPED: A stopped condition.
+-- -   FAILED: A failed condition.
 --
--- -   PASSED: A passing condition.
+-- -   SKIPPED: A skipped condition.
 --
--- -   PENDING: A pending condition.
+-- -   ERRORED: An error condition.
 --
--- -   WARNED: A warning condition.
+-- -   STOPPED: A stopped condition.
 --
 runResult :: Lens' Run (Maybe ExecutionResult)
 runResult = lens _runResult (\ s a -> s{_runResult = a});
@@ -1546,6 +1883,8 @@
 
 instance Hashable Run
 
+instance NFData Run
+
 -- | Represents a sample of performance data.
 --
 -- /See:/ 'sample' smart constructor.
@@ -1638,6 +1977,8 @@
 
 instance Hashable Sample
 
+instance NFData Sample
+
 -- | Represents the settings for a run. Includes things like location, radio
 -- states, auxiliary apps, and network profiles.
 --
@@ -1715,6 +2056,8 @@
 
 instance Hashable ScheduleRunConfiguration
 
+instance NFData ScheduleRunConfiguration
+
 instance ToJSON ScheduleRunConfiguration where
         toJSON ScheduleRunConfiguration'{..}
           = object
@@ -1812,6 +2155,8 @@
 
 instance Hashable ScheduleRunTest
 
+instance NFData ScheduleRunTest
+
 instance ToJSON ScheduleRunTest where
         toJSON ScheduleRunTest'{..}
           = object
@@ -1884,16 +2229,24 @@
 --
 -- Allowed values include:
 --
--- -   COMPLETED: A completed status.
---
 -- -   PENDING: A pending status.
 --
+-- -   PENDING_CONCURRENCY: A pending concurrency status.
+--
+-- -   PENDING_DEVICE: A pending device status.
+--
 -- -   PROCESSING: A processing status.
 --
+-- -   SCHEDULING: A scheduling status.
+--
+-- -   PREPARING: A preparing status.
+--
 -- -   RUNNING: A running status.
 --
--- -   SCHEDULING: A scheduling status.
+-- -   COMPLETED: A completed status.
 --
+-- -   STOPPING: A stopping status.
+--
 sStatus :: Lens' Suite (Maybe ExecutionStatus)
 sStatus = lens _sStatus (\ s a -> s{_sStatus = a});
 
@@ -1917,19 +2270,19 @@
 --
 -- Allowed values include:
 --
--- -   ERRORED: An error condition.
+-- -   PENDING: A pending condition.
 --
--- -   FAILED: A failed condition.
+-- -   PASSED: A passing condition.
 --
--- -   SKIPPED: A skipped condition.
+-- -   WARNED: A warning condition.
 --
--- -   STOPPED: A stopped condition.
+-- -   FAILED: A failed condition.
 --
--- -   PASSED: A passing condition.
+-- -   SKIPPED: A skipped condition.
 --
--- -   PENDING: A pending condition.
+-- -   ERRORED: An error condition.
 --
--- -   WARNED: A warning condition.
+-- -   STOPPED: A stopped condition.
 --
 sResult :: Lens' Suite (Maybe ExecutionResult)
 sResult = lens _sResult (\ s a -> s{_sResult = a});
@@ -2006,6 +2359,8 @@
 
 instance Hashable Suite
 
+instance NFData Suite
+
 -- | Represents a condition that is evaluated.
 --
 -- /See:/ 'test' smart constructor.
@@ -2069,16 +2424,24 @@
 --
 -- Allowed values include:
 --
--- -   COMPLETED: A completed status.
---
 -- -   PENDING: A pending status.
 --
+-- -   PENDING_CONCURRENCY: A pending concurrency status.
+--
+-- -   PENDING_DEVICE: A pending device status.
+--
 -- -   PROCESSING: A processing status.
 --
+-- -   SCHEDULING: A scheduling status.
+--
+-- -   PREPARING: A preparing status.
+--
 -- -   RUNNING: A running status.
 --
--- -   SCHEDULING: A scheduling status.
+-- -   COMPLETED: A completed status.
 --
+-- -   STOPPING: A stopping status.
+--
 tStatus :: Lens' Test (Maybe ExecutionStatus)
 tStatus = lens _tStatus (\ s a -> s{_tStatus = a});
 
@@ -2102,19 +2465,19 @@
 --
 -- Allowed values include:
 --
--- -   ERRORED: An error condition.
+-- -   PENDING: A pending condition.
 --
--- -   FAILED: A failed condition.
+-- -   PASSED: A passing condition.
 --
--- -   SKIPPED: A skipped condition.
+-- -   WARNED: A warning condition.
 --
--- -   STOPPED: A stopped condition.
+-- -   FAILED: A failed condition.
 --
--- -   PASSED: A passing condition.
+-- -   SKIPPED: A skipped condition.
 --
--- -   PENDING: A pending condition.
+-- -   ERRORED: An error condition.
 --
--- -   WARNED: A warning condition.
+-- -   STOPPED: A stopped condition.
 --
 tResult :: Lens' Test (Maybe ExecutionResult)
 tResult = lens _tResult (\ s a -> s{_tResult = a});
@@ -2190,6 +2553,8 @@
 
 instance Hashable Test
 
+instance NFData Test
+
 -- | A collection of one or more problems, grouped by their result.
 --
 -- /See:/ 'uniqueProblem' smart constructor.
@@ -2230,6 +2595,8 @@
 
 instance Hashable UniqueProblem
 
+instance NFData UniqueProblem
+
 -- | An app or a set of one or more tests to upload or that have been
 -- uploaded.
 --
@@ -2387,3 +2754,5 @@
                      <*> (x .:? "contentType"))
 
 instance Hashable Upload
+
+instance NFData Upload
diff --git a/gen/Network/AWS/DeviceFarm/Types/Sum.hs b/gen/Network/AWS/DeviceFarm/Types/Sum.hs
--- a/gen/Network/AWS/DeviceFarm/Types/Sum.hs
+++ b/gen/Network/AWS/DeviceFarm/Types/Sum.hs
@@ -40,6 +40,7 @@
         ACScreenshot -> "SCREENSHOT"
 
 instance Hashable     ArtifactCategory
+instance NFData       ArtifactCategory
 instance ToByteString ArtifactCategory
 instance ToQuery      ArtifactCategory
 instance ToHeader     ArtifactCategory
@@ -69,6 +70,7 @@
     | Screenshot
     | ServiceLog
     | Unknown
+    | Video
     | WebkitLog
     | XctestLog
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
@@ -96,10 +98,11 @@
         "screenshot" -> pure Screenshot
         "service_log" -> pure ServiceLog
         "unknown" -> pure Unknown
+        "video" -> pure Video
         "webkit_log" -> pure WebkitLog
         "xctest_log" -> pure XctestLog
         e -> fromTextError $ "Failure parsing ArtifactType from value: '" <> e
-           <> "'. Accepted values: APPIUM_JAVA_OUTPUT, APPIUM_JAVA_XML_OUTPUT, APPIUM_PYTHON_OUTPUT, APPIUM_PYTHON_XML_OUTPUT, APPIUM_SERVER_OUTPUT, APPLICATION_CRASH_REPORT, AUTOMATION_OUTPUT, CALABASH_JSON_OUTPUT, CALABASH_JAVA_XML_OUTPUT, CALABASH_PRETTY_OUTPUT, CALABASH_STANDARD_OUTPUT, DEVICE_LOG, EXERCISER_MONKEY_OUTPUT, EXPLORER_EVENT_LOG, EXPLORER_SUMMARY_LOG, INSTRUMENTATION_OUTPUT, MESSAGE_LOG, RESULT_LOG, SCREENSHOT, SERVICE_LOG, UNKNOWN, WEBKIT_LOG, XCTEST_LOG"
+           <> "'. Accepted values: APPIUM_JAVA_OUTPUT, APPIUM_JAVA_XML_OUTPUT, APPIUM_PYTHON_OUTPUT, APPIUM_PYTHON_XML_OUTPUT, APPIUM_SERVER_OUTPUT, APPLICATION_CRASH_REPORT, AUTOMATION_OUTPUT, CALABASH_JSON_OUTPUT, CALABASH_JAVA_XML_OUTPUT, CALABASH_PRETTY_OUTPUT, CALABASH_STANDARD_OUTPUT, DEVICE_LOG, EXERCISER_MONKEY_OUTPUT, EXPLORER_EVENT_LOG, EXPLORER_SUMMARY_LOG, INSTRUMENTATION_OUTPUT, MESSAGE_LOG, RESULT_LOG, SCREENSHOT, SERVICE_LOG, UNKNOWN, VIDEO, WEBKIT_LOG, XCTEST_LOG"
 
 instance ToText ArtifactType where
     toText = \case
@@ -124,10 +127,12 @@
         Screenshot -> "SCREENSHOT"
         ServiceLog -> "SERVICE_LOG"
         Unknown -> "UNKNOWN"
+        Video -> "VIDEO"
         WebkitLog -> "WEBKIT_LOG"
         XctestLog -> "XCTEST_LOG"
 
 instance Hashable     ArtifactType
+instance NFData       ArtifactType
 instance ToByteString ArtifactType
 instance ToQuery      ArtifactType
 instance ToHeader     ArtifactType
@@ -153,6 +158,7 @@
         Unmetered -> "UNMETERED"
 
 instance Hashable     BillingMethod
+instance NFData       BillingMethod
 instance ToByteString BillingMethod
 instance ToQuery      BillingMethod
 instance ToHeader     BillingMethod
@@ -163,6 +169,29 @@
 instance FromJSON BillingMethod where
     parseJSON = parseJSONText "BillingMethod"
 
+data CurrencyCode =
+    Usd
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText CurrencyCode where
+    parser = takeLowerText >>= \case
+        "usd" -> pure Usd
+        e -> fromTextError $ "Failure parsing CurrencyCode from value: '" <> e
+           <> "'. Accepted values: USD"
+
+instance ToText CurrencyCode where
+    toText = \case
+        Usd -> "USD"
+
+instance Hashable     CurrencyCode
+instance NFData       CurrencyCode
+instance ToByteString CurrencyCode
+instance ToQuery      CurrencyCode
+instance ToHeader     CurrencyCode
+
+instance FromJSON CurrencyCode where
+    parseJSON = parseJSONText "CurrencyCode"
+
 data DeviceAttribute
     = ARN
     | FormFactor
@@ -187,6 +216,7 @@
         Platform -> "PLATFORM"
 
 instance Hashable     DeviceAttribute
+instance NFData       DeviceAttribute
 instance ToByteString DeviceAttribute
 instance ToQuery      DeviceAttribute
 instance ToHeader     DeviceAttribute
@@ -215,6 +245,7 @@
         Tablet -> "TABLET"
 
 instance Hashable     DeviceFormFactor
+instance NFData       DeviceFormFactor
 instance ToByteString DeviceFormFactor
 instance ToQuery      DeviceFormFactor
 instance ToHeader     DeviceFormFactor
@@ -240,6 +271,7 @@
         Ios -> "IOS"
 
 instance Hashable     DevicePlatform
+instance NFData       DevicePlatform
 instance ToByteString DevicePlatform
 instance ToQuery      DevicePlatform
 instance ToHeader     DevicePlatform
@@ -265,6 +297,7 @@
         Private -> "PRIVATE"
 
 instance Hashable     DevicePoolType
+instance NFData       DevicePoolType
 instance ToByteString DevicePoolType
 instance ToQuery      DevicePoolType
 instance ToHeader     DevicePoolType
@@ -308,6 +341,7 @@
         ERWarned -> "WARNED"
 
 instance Hashable     ExecutionResult
+instance NFData       ExecutionResult
 instance ToByteString ExecutionResult
 instance ToQuery      ExecutionResult
 instance ToHeader     ExecutionResult
@@ -318,30 +352,43 @@
 data ExecutionStatus
     = Completed
     | Pending
+    | PendingConcurrency
+    | PendingDevice
+    | Preparing
     | Processing
     | Running
     | Scheduling
+    | Stopping
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText ExecutionStatus where
     parser = takeLowerText >>= \case
         "completed" -> pure Completed
         "pending" -> pure Pending
+        "pending_concurrency" -> pure PendingConcurrency
+        "pending_device" -> pure PendingDevice
+        "preparing" -> pure Preparing
         "processing" -> pure Processing
         "running" -> pure Running
         "scheduling" -> pure Scheduling
+        "stopping" -> pure Stopping
         e -> fromTextError $ "Failure parsing ExecutionStatus from value: '" <> e
-           <> "'. Accepted values: COMPLETED, PENDING, PROCESSING, RUNNING, SCHEDULING"
+           <> "'. Accepted values: COMPLETED, PENDING, PENDING_CONCURRENCY, PENDING_DEVICE, PREPARING, PROCESSING, RUNNING, SCHEDULING, STOPPING"
 
 instance ToText ExecutionStatus where
     toText = \case
         Completed -> "COMPLETED"
         Pending -> "PENDING"
+        PendingConcurrency -> "PENDING_CONCURRENCY"
+        PendingDevice -> "PENDING_DEVICE"
+        Preparing -> "PREPARING"
         Processing -> "PROCESSING"
         Running -> "RUNNING"
         Scheduling -> "SCHEDULING"
+        Stopping -> "STOPPING"
 
 instance Hashable     ExecutionStatus
+instance NFData       ExecutionStatus
 instance ToByteString ExecutionStatus
 instance ToQuery      ExecutionStatus
 instance ToHeader     ExecutionStatus
@@ -349,6 +396,81 @@
 instance FromJSON ExecutionStatus where
     parseJSON = parseJSONText "ExecutionStatus"
 
+data OfferingTransactionType
+    = Purchase
+    | Renew
+    | System
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText OfferingTransactionType where
+    parser = takeLowerText >>= \case
+        "purchase" -> pure Purchase
+        "renew" -> pure Renew
+        "system" -> pure System
+        e -> fromTextError $ "Failure parsing OfferingTransactionType from value: '" <> e
+           <> "'. Accepted values: PURCHASE, RENEW, SYSTEM"
+
+instance ToText OfferingTransactionType where
+    toText = \case
+        Purchase -> "PURCHASE"
+        Renew -> "RENEW"
+        System -> "SYSTEM"
+
+instance Hashable     OfferingTransactionType
+instance NFData       OfferingTransactionType
+instance ToByteString OfferingTransactionType
+instance ToQuery      OfferingTransactionType
+instance ToHeader     OfferingTransactionType
+
+instance FromJSON OfferingTransactionType where
+    parseJSON = parseJSONText "OfferingTransactionType"
+
+data OfferingType =
+    Recurring
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText OfferingType where
+    parser = takeLowerText >>= \case
+        "recurring" -> pure Recurring
+        e -> fromTextError $ "Failure parsing OfferingType from value: '" <> e
+           <> "'. Accepted values: RECURRING"
+
+instance ToText OfferingType where
+    toText = \case
+        Recurring -> "RECURRING"
+
+instance Hashable     OfferingType
+instance NFData       OfferingType
+instance ToByteString OfferingType
+instance ToQuery      OfferingType
+instance ToHeader     OfferingType
+
+instance FromJSON OfferingType where
+    parseJSON = parseJSONText "OfferingType"
+
+data RecurringChargeFrequency =
+    Monthly
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText RecurringChargeFrequency where
+    parser = takeLowerText >>= \case
+        "monthly" -> pure Monthly
+        e -> fromTextError $ "Failure parsing RecurringChargeFrequency from value: '" <> e
+           <> "'. Accepted values: MONTHLY"
+
+instance ToText RecurringChargeFrequency where
+    toText = \case
+        Monthly -> "MONTHLY"
+
+instance Hashable     RecurringChargeFrequency
+instance NFData       RecurringChargeFrequency
+instance ToByteString RecurringChargeFrequency
+instance ToQuery      RecurringChargeFrequency
+instance ToHeader     RecurringChargeFrequency
+
+instance FromJSON RecurringChargeFrequency where
+    parseJSON = parseJSONText "RecurringChargeFrequency"
+
 data RuleOperator
     = Equals
     | GreaterThan
@@ -376,6 +498,7 @@
         NotIn -> "NOT_IN"
 
 instance Hashable     RuleOperator
+instance NFData       RuleOperator
 instance ToByteString RuleOperator
 instance ToQuery      RuleOperator
 instance ToHeader     RuleOperator
@@ -449,6 +572,7 @@
         TxRate -> "TX_RATE"
 
 instance Hashable     SampleType
+instance NFData       SampleType
 instance ToByteString SampleType
 instance ToQuery      SampleType
 instance ToHeader     SampleType
@@ -510,6 +634,7 @@
         XctestUi -> "XCTEST_UI"
 
 instance Hashable     TestType
+instance NFData       TestType
 instance ToByteString TestType
 instance ToQuery      TestType
 instance ToHeader     TestType
@@ -544,6 +669,7 @@
         USSucceeded -> "SUCCEEDED"
 
 instance Hashable     UploadStatus
+instance NFData       UploadStatus
 instance ToByteString UploadStatus
 instance ToQuery      UploadStatus
 instance ToHeader     UploadStatus
@@ -611,6 +737,7 @@
         XctestUiTestPackage -> "XCTEST_UI_TEST_PACKAGE"
 
 instance Hashable     UploadType
+instance NFData       UploadType
 instance ToByteString UploadType
 instance ToQuery      UploadType
 instance ToHeader     UploadType
diff --git a/gen/Network/AWS/DeviceFarm/UpdateDevicePool.hs b/gen/Network/AWS/DeviceFarm/UpdateDevicePool.hs
--- a/gen/Network/AWS/DeviceFarm/UpdateDevicePool.hs
+++ b/gen/Network/AWS/DeviceFarm/UpdateDevicePool.hs
@@ -109,6 +109,8 @@
 
 instance Hashable UpdateDevicePool
 
+instance NFData UpdateDevicePool
+
 instance ToHeaders UpdateDevicePool where
         toHeaders
           = const
@@ -165,3 +167,5 @@
 -- | The response status code.
 udprsResponseStatus :: Lens' UpdateDevicePoolResponse Int
 udprsResponseStatus = lens _udprsResponseStatus (\ s a -> s{_udprsResponseStatus = a});
+
+instance NFData UpdateDevicePoolResponse
diff --git a/gen/Network/AWS/DeviceFarm/UpdateProject.hs b/gen/Network/AWS/DeviceFarm/UpdateProject.hs
--- a/gen/Network/AWS/DeviceFarm/UpdateProject.hs
+++ b/gen/Network/AWS/DeviceFarm/UpdateProject.hs
@@ -88,6 +88,8 @@
 
 instance Hashable UpdateProject
 
+instance NFData UpdateProject
+
 instance ToHeaders UpdateProject where
         toHeaders
           = const
@@ -140,3 +142,5 @@
 -- | The response status code.
 uprsResponseStatus :: Lens' UpdateProjectResponse Int
 uprsResponseStatus = lens _uprsResponseStatus (\ s a -> s{_uprsResponseStatus = a});
+
+instance NFData UpdateProjectResponse
diff --git a/test/Test/AWS/Gen/DeviceFarm.hs b/test/Test/AWS/Gen/DeviceFarm.hs
--- a/test/Test/AWS/Gen/DeviceFarm.hs
+++ b/test/Test/AWS/Gen/DeviceFarm.hs
@@ -67,6 +67,9 @@
 --         , testGetUpload $
 --             getUpload
 --
+--         , testListOfferingTransactions $
+--             listOfferingTransactions
+--
 --         , testCreateDevicePool $
 --             createDevicePool
 --
@@ -79,6 +82,9 @@
 --         , testGetTest $
 --             getTest
 --
+--         , testRenewOffering $
+--             renewOffering
+--
 --         , testGetDevice $
 --             getDevice
 --
@@ -103,24 +109,36 @@
 --         , testGetAccountSettings $
 --             getAccountSettings
 --
+--         , testGetOfferingStatus $
+--             getOfferingStatus
+--
 --         , testListUploads $
 --             listUploads
 --
 --         , testGetSuite $
 --             getSuite
 --
+--         , testPurchaseOffering $
+--             purchaseOffering
+--
 --         , testGetProject $
 --             getProject
 --
 --         , testListUniqueProblems $
 --             listUniqueProblems
 --
+--         , testStopRun $
+--             stopRun
+--
 --         , testListDevices $
 --             listDevices
 --
 --         , testCreateProject $
 --             createProject
 --
+--         , testListOfferings $
+--             listOfferings
+--
 --           ]
 
 --     , testGroup "response"
@@ -163,6 +181,9 @@
 --         , testGetUploadResponse $
 --             getUploadResponse
 --
+--         , testListOfferingTransactionsResponse $
+--             listOfferingTransactionsResponse
+--
 --         , testCreateDevicePoolResponse $
 --             createDevicePoolResponse
 --
@@ -175,6 +196,9 @@
 --         , testGetTestResponse $
 --             getTestResponse
 --
+--         , testRenewOfferingResponse $
+--             renewOfferingResponse
+--
 --         , testGetDeviceResponse $
 --             getDeviceResponse
 --
@@ -199,24 +223,36 @@
 --         , testGetAccountSettingsResponse $
 --             getAccountSettingsResponse
 --
+--         , testGetOfferingStatusResponse $
+--             getOfferingStatusResponse
+--
 --         , testListUploadsResponse $
 --             listUploadsResponse
 --
 --         , testGetSuiteResponse $
 --             getSuiteResponse
 --
+--         , testPurchaseOfferingResponse $
+--             purchaseOfferingResponse
+--
 --         , testGetProjectResponse $
 --             getProjectResponse
 --
 --         , testListUniqueProblemsResponse $
 --             listUniqueProblemsResponse
 --
+--         , testStopRunResponse $
+--             stopRunResponse
+--
 --         , testListDevicesResponse $
 --             listDevicesResponse
 --
 --         , testCreateProjectResponse $
 --             createProjectResponse
 --
+--         , testListOfferingsResponse $
+--             listOfferingsResponse
+--
 --           ]
 --     ]
 
@@ -287,6 +323,11 @@
     "GetUpload"
     "fixture/GetUpload.yaml"
 
+testListOfferingTransactions :: ListOfferingTransactions -> TestTree
+testListOfferingTransactions = req
+    "ListOfferingTransactions"
+    "fixture/ListOfferingTransactions.yaml"
+
 testCreateDevicePool :: CreateDevicePool -> TestTree
 testCreateDevicePool = req
     "CreateDevicePool"
@@ -307,6 +348,11 @@
     "GetTest"
     "fixture/GetTest.yaml"
 
+testRenewOffering :: RenewOffering -> TestTree
+testRenewOffering = req
+    "RenewOffering"
+    "fixture/RenewOffering.yaml"
+
 testGetDevice :: GetDevice -> TestTree
 testGetDevice = req
     "GetDevice"
@@ -347,6 +393,11 @@
     "GetAccountSettings"
     "fixture/GetAccountSettings.yaml"
 
+testGetOfferingStatus :: GetOfferingStatus -> TestTree
+testGetOfferingStatus = req
+    "GetOfferingStatus"
+    "fixture/GetOfferingStatus.yaml"
+
 testListUploads :: ListUploads -> TestTree
 testListUploads = req
     "ListUploads"
@@ -357,6 +408,11 @@
     "GetSuite"
     "fixture/GetSuite.yaml"
 
+testPurchaseOffering :: PurchaseOffering -> TestTree
+testPurchaseOffering = req
+    "PurchaseOffering"
+    "fixture/PurchaseOffering.yaml"
+
 testGetProject :: GetProject -> TestTree
 testGetProject = req
     "GetProject"
@@ -367,6 +423,11 @@
     "ListUniqueProblems"
     "fixture/ListUniqueProblems.yaml"
 
+testStopRun :: StopRun -> TestTree
+testStopRun = req
+    "StopRun"
+    "fixture/StopRun.yaml"
+
 testListDevices :: ListDevices -> TestTree
 testListDevices = req
     "ListDevices"
@@ -377,6 +438,11 @@
     "CreateProject"
     "fixture/CreateProject.yaml"
 
+testListOfferings :: ListOfferings -> TestTree
+testListOfferings = req
+    "ListOfferings"
+    "fixture/ListOfferings.yaml"
+
 -- Responses
 
 testListProjectsResponse :: ListProjectsResponse -> TestTree
@@ -470,6 +536,13 @@
     deviceFarm
     (Proxy :: Proxy GetUpload)
 
+testListOfferingTransactionsResponse :: ListOfferingTransactionsResponse -> TestTree
+testListOfferingTransactionsResponse = res
+    "ListOfferingTransactionsResponse"
+    "fixture/ListOfferingTransactionsResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy ListOfferingTransactions)
+
 testCreateDevicePoolResponse :: CreateDevicePoolResponse -> TestTree
 testCreateDevicePoolResponse = res
     "CreateDevicePoolResponse"
@@ -498,6 +571,13 @@
     deviceFarm
     (Proxy :: Proxy GetTest)
 
+testRenewOfferingResponse :: RenewOfferingResponse -> TestTree
+testRenewOfferingResponse = res
+    "RenewOfferingResponse"
+    "fixture/RenewOfferingResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy RenewOffering)
+
 testGetDeviceResponse :: GetDeviceResponse -> TestTree
 testGetDeviceResponse = res
     "GetDeviceResponse"
@@ -554,6 +634,13 @@
     deviceFarm
     (Proxy :: Proxy GetAccountSettings)
 
+testGetOfferingStatusResponse :: GetOfferingStatusResponse -> TestTree
+testGetOfferingStatusResponse = res
+    "GetOfferingStatusResponse"
+    "fixture/GetOfferingStatusResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy GetOfferingStatus)
+
 testListUploadsResponse :: ListUploadsResponse -> TestTree
 testListUploadsResponse = res
     "ListUploadsResponse"
@@ -568,6 +655,13 @@
     deviceFarm
     (Proxy :: Proxy GetSuite)
 
+testPurchaseOfferingResponse :: PurchaseOfferingResponse -> TestTree
+testPurchaseOfferingResponse = res
+    "PurchaseOfferingResponse"
+    "fixture/PurchaseOfferingResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy PurchaseOffering)
+
 testGetProjectResponse :: GetProjectResponse -> TestTree
 testGetProjectResponse = res
     "GetProjectResponse"
@@ -582,6 +676,13 @@
     deviceFarm
     (Proxy :: Proxy ListUniqueProblems)
 
+testStopRunResponse :: StopRunResponse -> TestTree
+testStopRunResponse = res
+    "StopRunResponse"
+    "fixture/StopRunResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy StopRun)
+
 testListDevicesResponse :: ListDevicesResponse -> TestTree
 testListDevicesResponse = res
     "ListDevicesResponse"
@@ -595,3 +696,10 @@
     "fixture/CreateProjectResponse.proto"
     deviceFarm
     (Proxy :: Proxy CreateProject)
+
+testListOfferingsResponse :: ListOfferingsResponse -> TestTree
+testListOfferingsResponse = res
+    "ListOfferingsResponse"
+    "fixture/ListOfferingsResponse.proto"
+    deviceFarm
+    (Proxy :: Proxy ListOfferings)
