diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/Cognito/IdentityPool.hs b/gen/Stratosphere/Cognito/IdentityPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPool.hs
@@ -0,0 +1,154 @@
+module Stratosphere.Cognito.IdentityPool (
+        module Exports, IdentityPool(..), mkIdentityPool
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.IdentityPool.CognitoIdentityProviderProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.IdentityPool.CognitoStreamsProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.IdentityPool.PushSyncProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data IdentityPool
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html>
+    IdentityPool {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-allowclassicflow>
+                  allowClassicFlow :: (Prelude.Maybe (Value Prelude.Bool)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-allowunauthenticatedidentities>
+                  allowUnauthenticatedIdentities :: (Value Prelude.Bool),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-cognitoevents>
+                  cognitoEvents :: (Prelude.Maybe JSON.Object),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-cognitoidentityproviders>
+                  cognitoIdentityProviders :: (Prelude.Maybe [CognitoIdentityProviderProperty]),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-cognitostreams>
+                  cognitoStreams :: (Prelude.Maybe CognitoStreamsProperty),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-developerprovidername>
+                  developerProviderName :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-identitypoolname>
+                  identityPoolName :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-identitypooltags>
+                  identityPoolTags :: (Prelude.Maybe [Tag]),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-openidconnectproviderarns>
+                  openIdConnectProviderARNs :: (Prelude.Maybe (ValueList Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-pushsync>
+                  pushSync :: (Prelude.Maybe PushSyncProperty),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-samlproviderarns>
+                  samlProviderARNs :: (Prelude.Maybe (ValueList Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-supportedloginproviders>
+                  supportedLoginProviders :: (Prelude.Maybe JSON.Object)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdentityPool :: Value Prelude.Bool -> IdentityPool
+mkIdentityPool allowUnauthenticatedIdentities
+  = IdentityPool
+      {haddock_workaround_ = (),
+       allowUnauthenticatedIdentities = allowUnauthenticatedIdentities,
+       allowClassicFlow = Prelude.Nothing,
+       cognitoEvents = Prelude.Nothing,
+       cognitoIdentityProviders = Prelude.Nothing,
+       cognitoStreams = Prelude.Nothing,
+       developerProviderName = Prelude.Nothing,
+       identityPoolName = Prelude.Nothing,
+       identityPoolTags = Prelude.Nothing,
+       openIdConnectProviderARNs = Prelude.Nothing,
+       pushSync = Prelude.Nothing, samlProviderARNs = Prelude.Nothing,
+       supportedLoginProviders = Prelude.Nothing}
+instance ToResourceProperties IdentityPool where
+  toResourceProperties IdentityPool {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPool",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AllowUnauthenticatedIdentities"
+                              JSON..= allowUnauthenticatedIdentities]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllowClassicFlow" Prelude.<$> allowClassicFlow,
+                               (JSON..=) "CognitoEvents" Prelude.<$> cognitoEvents,
+                               (JSON..=) "CognitoIdentityProviders"
+                                 Prelude.<$> cognitoIdentityProviders,
+                               (JSON..=) "CognitoStreams" Prelude.<$> cognitoStreams,
+                               (JSON..=) "DeveloperProviderName"
+                                 Prelude.<$> developerProviderName,
+                               (JSON..=) "IdentityPoolName" Prelude.<$> identityPoolName,
+                               (JSON..=) "IdentityPoolTags" Prelude.<$> identityPoolTags,
+                               (JSON..=) "OpenIdConnectProviderARNs"
+                                 Prelude.<$> openIdConnectProviderARNs,
+                               (JSON..=) "PushSync" Prelude.<$> pushSync,
+                               (JSON..=) "SamlProviderARNs" Prelude.<$> samlProviderARNs,
+                               (JSON..=) "SupportedLoginProviders"
+                                 Prelude.<$> supportedLoginProviders]))}
+instance JSON.ToJSON IdentityPool where
+  toJSON IdentityPool {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AllowUnauthenticatedIdentities"
+                 JSON..= allowUnauthenticatedIdentities]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllowClassicFlow" Prelude.<$> allowClassicFlow,
+                  (JSON..=) "CognitoEvents" Prelude.<$> cognitoEvents,
+                  (JSON..=) "CognitoIdentityProviders"
+                    Prelude.<$> cognitoIdentityProviders,
+                  (JSON..=) "CognitoStreams" Prelude.<$> cognitoStreams,
+                  (JSON..=) "DeveloperProviderName"
+                    Prelude.<$> developerProviderName,
+                  (JSON..=) "IdentityPoolName" Prelude.<$> identityPoolName,
+                  (JSON..=) "IdentityPoolTags" Prelude.<$> identityPoolTags,
+                  (JSON..=) "OpenIdConnectProviderARNs"
+                    Prelude.<$> openIdConnectProviderARNs,
+                  (JSON..=) "PushSync" Prelude.<$> pushSync,
+                  (JSON..=) "SamlProviderARNs" Prelude.<$> samlProviderARNs,
+                  (JSON..=) "SupportedLoginProviders"
+                    Prelude.<$> supportedLoginProviders])))
+instance Property "AllowClassicFlow" IdentityPool where
+  type PropertyType "AllowClassicFlow" IdentityPool = Value Prelude.Bool
+  set newValue IdentityPool {..}
+    = IdentityPool {allowClassicFlow = Prelude.pure newValue, ..}
+instance Property "AllowUnauthenticatedIdentities" IdentityPool where
+  type PropertyType "AllowUnauthenticatedIdentities" IdentityPool = Value Prelude.Bool
+  set newValue IdentityPool {..}
+    = IdentityPool {allowUnauthenticatedIdentities = newValue, ..}
+instance Property "CognitoEvents" IdentityPool where
+  type PropertyType "CognitoEvents" IdentityPool = JSON.Object
+  set newValue IdentityPool {..}
+    = IdentityPool {cognitoEvents = Prelude.pure newValue, ..}
+instance Property "CognitoIdentityProviders" IdentityPool where
+  type PropertyType "CognitoIdentityProviders" IdentityPool = [CognitoIdentityProviderProperty]
+  set newValue IdentityPool {..}
+    = IdentityPool
+        {cognitoIdentityProviders = Prelude.pure newValue, ..}
+instance Property "CognitoStreams" IdentityPool where
+  type PropertyType "CognitoStreams" IdentityPool = CognitoStreamsProperty
+  set newValue IdentityPool {..}
+    = IdentityPool {cognitoStreams = Prelude.pure newValue, ..}
+instance Property "DeveloperProviderName" IdentityPool where
+  type PropertyType "DeveloperProviderName" IdentityPool = Value Prelude.Text
+  set newValue IdentityPool {..}
+    = IdentityPool {developerProviderName = Prelude.pure newValue, ..}
+instance Property "IdentityPoolName" IdentityPool where
+  type PropertyType "IdentityPoolName" IdentityPool = Value Prelude.Text
+  set newValue IdentityPool {..}
+    = IdentityPool {identityPoolName = Prelude.pure newValue, ..}
+instance Property "IdentityPoolTags" IdentityPool where
+  type PropertyType "IdentityPoolTags" IdentityPool = [Tag]
+  set newValue IdentityPool {..}
+    = IdentityPool {identityPoolTags = Prelude.pure newValue, ..}
+instance Property "OpenIdConnectProviderARNs" IdentityPool where
+  type PropertyType "OpenIdConnectProviderARNs" IdentityPool = ValueList Prelude.Text
+  set newValue IdentityPool {..}
+    = IdentityPool
+        {openIdConnectProviderARNs = Prelude.pure newValue, ..}
+instance Property "PushSync" IdentityPool where
+  type PropertyType "PushSync" IdentityPool = PushSyncProperty
+  set newValue IdentityPool {..}
+    = IdentityPool {pushSync = Prelude.pure newValue, ..}
+instance Property "SamlProviderARNs" IdentityPool where
+  type PropertyType "SamlProviderARNs" IdentityPool = ValueList Prelude.Text
+  set newValue IdentityPool {..}
+    = IdentityPool {samlProviderARNs = Prelude.pure newValue, ..}
+instance Property "SupportedLoginProviders" IdentityPool where
+  type PropertyType "SupportedLoginProviders" IdentityPool = JSON.Object
+  set newValue IdentityPool {..}
+    = IdentityPool
+        {supportedLoginProviders = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPool/CognitoIdentityProviderProperty.hs b/gen/Stratosphere/Cognito/IdentityPool/CognitoIdentityProviderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPool/CognitoIdentityProviderProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.Cognito.IdentityPool.CognitoIdentityProviderProperty (
+        CognitoIdentityProviderProperty(..),
+        mkCognitoIdentityProviderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CognitoIdentityProviderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html>
+    CognitoIdentityProviderProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html#cfn-cognito-identitypool-cognitoidentityprovider-clientid>
+                                     clientId :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html#cfn-cognito-identitypool-cognitoidentityprovider-providername>
+                                     providerName :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html#cfn-cognito-identitypool-cognitoidentityprovider-serversidetokencheck>
+                                     serverSideTokenCheck :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCognitoIdentityProviderProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> CognitoIdentityProviderProperty
+mkCognitoIdentityProviderProperty clientId providerName
+  = CognitoIdentityProviderProperty
+      {haddock_workaround_ = (), clientId = clientId,
+       providerName = providerName,
+       serverSideTokenCheck = Prelude.Nothing}
+instance ToResourceProperties CognitoIdentityProviderProperty where
+  toResourceProperties CognitoIdentityProviderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPool.CognitoIdentityProvider",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ClientId" JSON..= clientId, "ProviderName" JSON..= providerName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ServerSideTokenCheck"
+                                 Prelude.<$> serverSideTokenCheck]))}
+instance JSON.ToJSON CognitoIdentityProviderProperty where
+  toJSON CognitoIdentityProviderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ClientId" JSON..= clientId, "ProviderName" JSON..= providerName]
+              (Prelude.catMaybes
+                 [(JSON..=) "ServerSideTokenCheck"
+                    Prelude.<$> serverSideTokenCheck])))
+instance Property "ClientId" CognitoIdentityProviderProperty where
+  type PropertyType "ClientId" CognitoIdentityProviderProperty = Value Prelude.Text
+  set newValue CognitoIdentityProviderProperty {..}
+    = CognitoIdentityProviderProperty {clientId = newValue, ..}
+instance Property "ProviderName" CognitoIdentityProviderProperty where
+  type PropertyType "ProviderName" CognitoIdentityProviderProperty = Value Prelude.Text
+  set newValue CognitoIdentityProviderProperty {..}
+    = CognitoIdentityProviderProperty {providerName = newValue, ..}
+instance Property "ServerSideTokenCheck" CognitoIdentityProviderProperty where
+  type PropertyType "ServerSideTokenCheck" CognitoIdentityProviderProperty = Value Prelude.Bool
+  set newValue CognitoIdentityProviderProperty {..}
+    = CognitoIdentityProviderProperty
+        {serverSideTokenCheck = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPool/CognitoIdentityProviderProperty.hs-boot b/gen/Stratosphere/Cognito/IdentityPool/CognitoIdentityProviderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPool/CognitoIdentityProviderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.IdentityPool.CognitoIdentityProviderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CognitoIdentityProviderProperty :: Prelude.Type
+instance ToResourceProperties CognitoIdentityProviderProperty
+instance Prelude.Eq CognitoIdentityProviderProperty
+instance Prelude.Show CognitoIdentityProviderProperty
+instance JSON.ToJSON CognitoIdentityProviderProperty
diff --git a/gen/Stratosphere/Cognito/IdentityPool/CognitoStreamsProperty.hs b/gen/Stratosphere/Cognito/IdentityPool/CognitoStreamsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPool/CognitoStreamsProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.Cognito.IdentityPool.CognitoStreamsProperty (
+        CognitoStreamsProperty(..), mkCognitoStreamsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CognitoStreamsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitostreams.html>
+    CognitoStreamsProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitostreams.html#cfn-cognito-identitypool-cognitostreams-rolearn>
+                            roleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitostreams.html#cfn-cognito-identitypool-cognitostreams-streamname>
+                            streamName :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitostreams.html#cfn-cognito-identitypool-cognitostreams-streamingstatus>
+                            streamingStatus :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCognitoStreamsProperty :: CognitoStreamsProperty
+mkCognitoStreamsProperty
+  = CognitoStreamsProperty
+      {haddock_workaround_ = (), roleArn = Prelude.Nothing,
+       streamName = Prelude.Nothing, streamingStatus = Prelude.Nothing}
+instance ToResourceProperties CognitoStreamsProperty where
+  toResourceProperties CognitoStreamsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPool.CognitoStreams",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RoleArn" Prelude.<$> roleArn,
+                            (JSON..=) "StreamName" Prelude.<$> streamName,
+                            (JSON..=) "StreamingStatus" Prelude.<$> streamingStatus])}
+instance JSON.ToJSON CognitoStreamsProperty where
+  toJSON CognitoStreamsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RoleArn" Prelude.<$> roleArn,
+               (JSON..=) "StreamName" Prelude.<$> streamName,
+               (JSON..=) "StreamingStatus" Prelude.<$> streamingStatus]))
+instance Property "RoleArn" CognitoStreamsProperty where
+  type PropertyType "RoleArn" CognitoStreamsProperty = Value Prelude.Text
+  set newValue CognitoStreamsProperty {..}
+    = CognitoStreamsProperty {roleArn = Prelude.pure newValue, ..}
+instance Property "StreamName" CognitoStreamsProperty where
+  type PropertyType "StreamName" CognitoStreamsProperty = Value Prelude.Text
+  set newValue CognitoStreamsProperty {..}
+    = CognitoStreamsProperty {streamName = Prelude.pure newValue, ..}
+instance Property "StreamingStatus" CognitoStreamsProperty where
+  type PropertyType "StreamingStatus" CognitoStreamsProperty = Value Prelude.Text
+  set newValue CognitoStreamsProperty {..}
+    = CognitoStreamsProperty
+        {streamingStatus = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPool/CognitoStreamsProperty.hs-boot b/gen/Stratosphere/Cognito/IdentityPool/CognitoStreamsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPool/CognitoStreamsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.IdentityPool.CognitoStreamsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CognitoStreamsProperty :: Prelude.Type
+instance ToResourceProperties CognitoStreamsProperty
+instance Prelude.Eq CognitoStreamsProperty
+instance Prelude.Show CognitoStreamsProperty
+instance JSON.ToJSON CognitoStreamsProperty
diff --git a/gen/Stratosphere/Cognito/IdentityPool/PushSyncProperty.hs b/gen/Stratosphere/Cognito/IdentityPool/PushSyncProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPool/PushSyncProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.Cognito.IdentityPool.PushSyncProperty (
+        PushSyncProperty(..), mkPushSyncProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PushSyncProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-pushsync.html>
+    PushSyncProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-pushsync.html#cfn-cognito-identitypool-pushsync-applicationarns>
+                      applicationArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-pushsync.html#cfn-cognito-identitypool-pushsync-rolearn>
+                      roleArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPushSyncProperty :: PushSyncProperty
+mkPushSyncProperty
+  = PushSyncProperty
+      {haddock_workaround_ = (), applicationArns = Prelude.Nothing,
+       roleArn = Prelude.Nothing}
+instance ToResourceProperties PushSyncProperty where
+  toResourceProperties PushSyncProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPool.PushSync",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ApplicationArns" Prelude.<$> applicationArns,
+                            (JSON..=) "RoleArn" Prelude.<$> roleArn])}
+instance JSON.ToJSON PushSyncProperty where
+  toJSON PushSyncProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ApplicationArns" Prelude.<$> applicationArns,
+               (JSON..=) "RoleArn" Prelude.<$> roleArn]))
+instance Property "ApplicationArns" PushSyncProperty where
+  type PropertyType "ApplicationArns" PushSyncProperty = ValueList Prelude.Text
+  set newValue PushSyncProperty {..}
+    = PushSyncProperty {applicationArns = Prelude.pure newValue, ..}
+instance Property "RoleArn" PushSyncProperty where
+  type PropertyType "RoleArn" PushSyncProperty = Value Prelude.Text
+  set newValue PushSyncProperty {..}
+    = PushSyncProperty {roleArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPool/PushSyncProperty.hs-boot b/gen/Stratosphere/Cognito/IdentityPool/PushSyncProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPool/PushSyncProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.IdentityPool.PushSyncProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PushSyncProperty :: Prelude.Type
+instance ToResourceProperties PushSyncProperty
+instance Prelude.Eq PushSyncProperty
+instance Prelude.Show PushSyncProperty
+instance JSON.ToJSON PushSyncProperty
diff --git a/gen/Stratosphere/Cognito/IdentityPoolPrincipalTag.hs b/gen/Stratosphere/Cognito/IdentityPoolPrincipalTag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPoolPrincipalTag.hs
@@ -0,0 +1,68 @@
+module Stratosphere.Cognito.IdentityPoolPrincipalTag (
+        IdentityPoolPrincipalTag(..), mkIdentityPoolPrincipalTag
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IdentityPoolPrincipalTag
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolprincipaltag.html>
+    IdentityPoolPrincipalTag {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolprincipaltag.html#cfn-cognito-identitypoolprincipaltag-identitypoolid>
+                              identityPoolId :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolprincipaltag.html#cfn-cognito-identitypoolprincipaltag-identityprovidername>
+                              identityProviderName :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolprincipaltag.html#cfn-cognito-identitypoolprincipaltag-principaltags>
+                              principalTags :: (Prelude.Maybe JSON.Object),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolprincipaltag.html#cfn-cognito-identitypoolprincipaltag-usedefaults>
+                              useDefaults :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdentityPoolPrincipalTag ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> IdentityPoolPrincipalTag
+mkIdentityPoolPrincipalTag identityPoolId identityProviderName
+  = IdentityPoolPrincipalTag
+      {haddock_workaround_ = (), identityPoolId = identityPoolId,
+       identityProviderName = identityProviderName,
+       principalTags = Prelude.Nothing, useDefaults = Prelude.Nothing}
+instance ToResourceProperties IdentityPoolPrincipalTag where
+  toResourceProperties IdentityPoolPrincipalTag {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPoolPrincipalTag",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IdentityPoolId" JSON..= identityPoolId,
+                            "IdentityProviderName" JSON..= identityProviderName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "PrincipalTags" Prelude.<$> principalTags,
+                               (JSON..=) "UseDefaults" Prelude.<$> useDefaults]))}
+instance JSON.ToJSON IdentityPoolPrincipalTag where
+  toJSON IdentityPoolPrincipalTag {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IdentityPoolId" JSON..= identityPoolId,
+               "IdentityProviderName" JSON..= identityProviderName]
+              (Prelude.catMaybes
+                 [(JSON..=) "PrincipalTags" Prelude.<$> principalTags,
+                  (JSON..=) "UseDefaults" Prelude.<$> useDefaults])))
+instance Property "IdentityPoolId" IdentityPoolPrincipalTag where
+  type PropertyType "IdentityPoolId" IdentityPoolPrincipalTag = Value Prelude.Text
+  set newValue IdentityPoolPrincipalTag {..}
+    = IdentityPoolPrincipalTag {identityPoolId = newValue, ..}
+instance Property "IdentityProviderName" IdentityPoolPrincipalTag where
+  type PropertyType "IdentityProviderName" IdentityPoolPrincipalTag = Value Prelude.Text
+  set newValue IdentityPoolPrincipalTag {..}
+    = IdentityPoolPrincipalTag {identityProviderName = newValue, ..}
+instance Property "PrincipalTags" IdentityPoolPrincipalTag where
+  type PropertyType "PrincipalTags" IdentityPoolPrincipalTag = JSON.Object
+  set newValue IdentityPoolPrincipalTag {..}
+    = IdentityPoolPrincipalTag
+        {principalTags = Prelude.pure newValue, ..}
+instance Property "UseDefaults" IdentityPoolPrincipalTag where
+  type PropertyType "UseDefaults" IdentityPoolPrincipalTag = Value Prelude.Bool
+  set newValue IdentityPoolPrincipalTag {..}
+    = IdentityPoolPrincipalTag
+        {useDefaults = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment.hs b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment.hs
@@ -0,0 +1,59 @@
+module Stratosphere.Cognito.IdentityPoolRoleAttachment (
+        module Exports, IdentityPoolRoleAttachment(..),
+        mkIdentityPoolRoleAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.IdentityPoolRoleAttachment.RoleMappingProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IdentityPoolRoleAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolroleattachment.html>
+    IdentityPoolRoleAttachment {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolroleattachment.html#cfn-cognito-identitypoolroleattachment-identitypoolid>
+                                identityPoolId :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolroleattachment.html#cfn-cognito-identitypoolroleattachment-rolemappings>
+                                roleMappings :: (Prelude.Maybe (Prelude.Map Prelude.Text RoleMappingProperty)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolroleattachment.html#cfn-cognito-identitypoolroleattachment-roles>
+                                roles :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text)))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdentityPoolRoleAttachment ::
+  Value Prelude.Text -> IdentityPoolRoleAttachment
+mkIdentityPoolRoleAttachment identityPoolId
+  = IdentityPoolRoleAttachment
+      {haddock_workaround_ = (), identityPoolId = identityPoolId,
+       roleMappings = Prelude.Nothing, roles = Prelude.Nothing}
+instance ToResourceProperties IdentityPoolRoleAttachment where
+  toResourceProperties IdentityPoolRoleAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPoolRoleAttachment",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IdentityPoolId" JSON..= identityPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "RoleMappings" Prelude.<$> roleMappings,
+                               (JSON..=) "Roles" Prelude.<$> roles]))}
+instance JSON.ToJSON IdentityPoolRoleAttachment where
+  toJSON IdentityPoolRoleAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IdentityPoolId" JSON..= identityPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "RoleMappings" Prelude.<$> roleMappings,
+                  (JSON..=) "Roles" Prelude.<$> roles])))
+instance Property "IdentityPoolId" IdentityPoolRoleAttachment where
+  type PropertyType "IdentityPoolId" IdentityPoolRoleAttachment = Value Prelude.Text
+  set newValue IdentityPoolRoleAttachment {..}
+    = IdentityPoolRoleAttachment {identityPoolId = newValue, ..}
+instance Property "RoleMappings" IdentityPoolRoleAttachment where
+  type PropertyType "RoleMappings" IdentityPoolRoleAttachment = Prelude.Map Prelude.Text RoleMappingProperty
+  set newValue IdentityPoolRoleAttachment {..}
+    = IdentityPoolRoleAttachment
+        {roleMappings = Prelude.pure newValue, ..}
+instance Property "Roles" IdentityPoolRoleAttachment where
+  type PropertyType "Roles" IdentityPoolRoleAttachment = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue IdentityPoolRoleAttachment {..}
+    = IdentityPoolRoleAttachment {roles = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/MappingRuleProperty.hs b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/MappingRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/MappingRuleProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.Cognito.IdentityPoolRoleAttachment.MappingRuleProperty (
+        MappingRuleProperty(..), mkMappingRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MappingRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html>
+    MappingRuleProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html#cfn-cognito-identitypoolroleattachment-mappingrule-claim>
+                         claim :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html#cfn-cognito-identitypoolroleattachment-mappingrule-matchtype>
+                         matchType :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html#cfn-cognito-identitypoolroleattachment-mappingrule-rolearn>
+                         roleARN :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html#cfn-cognito-identitypoolroleattachment-mappingrule-value>
+                         value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMappingRuleProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> Value Prelude.Text -> MappingRuleProperty
+mkMappingRuleProperty claim matchType roleARN value
+  = MappingRuleProperty
+      {haddock_workaround_ = (), claim = claim, matchType = matchType,
+       roleARN = roleARN, value = value}
+instance ToResourceProperties MappingRuleProperty where
+  toResourceProperties MappingRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPoolRoleAttachment.MappingRule",
+         supportsTags = Prelude.False,
+         properties = ["Claim" JSON..= claim, "MatchType" JSON..= matchType,
+                       "RoleARN" JSON..= roleARN, "Value" JSON..= value]}
+instance JSON.ToJSON MappingRuleProperty where
+  toJSON MappingRuleProperty {..}
+    = JSON.object
+        ["Claim" JSON..= claim, "MatchType" JSON..= matchType,
+         "RoleARN" JSON..= roleARN, "Value" JSON..= value]
+instance Property "Claim" MappingRuleProperty where
+  type PropertyType "Claim" MappingRuleProperty = Value Prelude.Text
+  set newValue MappingRuleProperty {..}
+    = MappingRuleProperty {claim = newValue, ..}
+instance Property "MatchType" MappingRuleProperty where
+  type PropertyType "MatchType" MappingRuleProperty = Value Prelude.Text
+  set newValue MappingRuleProperty {..}
+    = MappingRuleProperty {matchType = newValue, ..}
+instance Property "RoleARN" MappingRuleProperty where
+  type PropertyType "RoleARN" MappingRuleProperty = Value Prelude.Text
+  set newValue MappingRuleProperty {..}
+    = MappingRuleProperty {roleARN = newValue, ..}
+instance Property "Value" MappingRuleProperty where
+  type PropertyType "Value" MappingRuleProperty = Value Prelude.Text
+  set newValue MappingRuleProperty {..}
+    = MappingRuleProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/MappingRuleProperty.hs-boot b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/MappingRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/MappingRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.IdentityPoolRoleAttachment.MappingRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MappingRuleProperty :: Prelude.Type
+instance ToResourceProperties MappingRuleProperty
+instance Prelude.Eq MappingRuleProperty
+instance Prelude.Show MappingRuleProperty
+instance JSON.ToJSON MappingRuleProperty
diff --git a/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RoleMappingProperty.hs b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RoleMappingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RoleMappingProperty.hs
@@ -0,0 +1,71 @@
+module Stratosphere.Cognito.IdentityPoolRoleAttachment.RoleMappingProperty (
+        module Exports, RoleMappingProperty(..), mkRoleMappingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.IdentityPoolRoleAttachment.RulesConfigurationTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RoleMappingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html>
+    RoleMappingProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html#cfn-cognito-identitypoolroleattachment-rolemapping-ambiguousroleresolution>
+                         ambiguousRoleResolution :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html#cfn-cognito-identitypoolroleattachment-rolemapping-identityprovider>
+                         identityProvider :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html#cfn-cognito-identitypoolroleattachment-rolemapping-rulesconfiguration>
+                         rulesConfiguration :: (Prelude.Maybe RulesConfigurationTypeProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html#cfn-cognito-identitypoolroleattachment-rolemapping-type>
+                         type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRoleMappingProperty :: Value Prelude.Text -> RoleMappingProperty
+mkRoleMappingProperty type'
+  = RoleMappingProperty
+      {haddock_workaround_ = (), type' = type',
+       ambiguousRoleResolution = Prelude.Nothing,
+       identityProvider = Prelude.Nothing,
+       rulesConfiguration = Prelude.Nothing}
+instance ToResourceProperties RoleMappingProperty where
+  toResourceProperties RoleMappingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPoolRoleAttachment.RoleMapping",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "AmbiguousRoleResolution"
+                                 Prelude.<$> ambiguousRoleResolution,
+                               (JSON..=) "IdentityProvider" Prelude.<$> identityProvider,
+                               (JSON..=) "RulesConfiguration" Prelude.<$> rulesConfiguration]))}
+instance JSON.ToJSON RoleMappingProperty where
+  toJSON RoleMappingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "AmbiguousRoleResolution"
+                    Prelude.<$> ambiguousRoleResolution,
+                  (JSON..=) "IdentityProvider" Prelude.<$> identityProvider,
+                  (JSON..=) "RulesConfiguration" Prelude.<$> rulesConfiguration])))
+instance Property "AmbiguousRoleResolution" RoleMappingProperty where
+  type PropertyType "AmbiguousRoleResolution" RoleMappingProperty = Value Prelude.Text
+  set newValue RoleMappingProperty {..}
+    = RoleMappingProperty
+        {ambiguousRoleResolution = Prelude.pure newValue, ..}
+instance Property "IdentityProvider" RoleMappingProperty where
+  type PropertyType "IdentityProvider" RoleMappingProperty = Value Prelude.Text
+  set newValue RoleMappingProperty {..}
+    = RoleMappingProperty
+        {identityProvider = Prelude.pure newValue, ..}
+instance Property "RulesConfiguration" RoleMappingProperty where
+  type PropertyType "RulesConfiguration" RoleMappingProperty = RulesConfigurationTypeProperty
+  set newValue RoleMappingProperty {..}
+    = RoleMappingProperty
+        {rulesConfiguration = Prelude.pure newValue, ..}
+instance Property "Type" RoleMappingProperty where
+  type PropertyType "Type" RoleMappingProperty = Value Prelude.Text
+  set newValue RoleMappingProperty {..}
+    = RoleMappingProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RoleMappingProperty.hs-boot b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RoleMappingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RoleMappingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.IdentityPoolRoleAttachment.RoleMappingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RoleMappingProperty :: Prelude.Type
+instance ToResourceProperties RoleMappingProperty
+instance Prelude.Eq RoleMappingProperty
+instance Prelude.Show RoleMappingProperty
+instance JSON.ToJSON RoleMappingProperty
diff --git a/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RulesConfigurationTypeProperty.hs b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RulesConfigurationTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RulesConfigurationTypeProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.Cognito.IdentityPoolRoleAttachment.RulesConfigurationTypeProperty (
+        module Exports, RulesConfigurationTypeProperty(..),
+        mkRulesConfigurationTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.IdentityPoolRoleAttachment.MappingRuleProperty as Exports
+import Stratosphere.ResourceProperties
+data RulesConfigurationTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rulesconfigurationtype.html>
+    RulesConfigurationTypeProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rulesconfigurationtype.html#cfn-cognito-identitypoolroleattachment-rulesconfigurationtype-rules>
+                                    rules :: [MappingRuleProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRulesConfigurationTypeProperty ::
+  [MappingRuleProperty] -> RulesConfigurationTypeProperty
+mkRulesConfigurationTypeProperty rules
+  = RulesConfigurationTypeProperty
+      {haddock_workaround_ = (), rules = rules}
+instance ToResourceProperties RulesConfigurationTypeProperty where
+  toResourceProperties RulesConfigurationTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::IdentityPoolRoleAttachment.RulesConfigurationType",
+         supportsTags = Prelude.False, properties = ["Rules" JSON..= rules]}
+instance JSON.ToJSON RulesConfigurationTypeProperty where
+  toJSON RulesConfigurationTypeProperty {..}
+    = JSON.object ["Rules" JSON..= rules]
+instance Property "Rules" RulesConfigurationTypeProperty where
+  type PropertyType "Rules" RulesConfigurationTypeProperty = [MappingRuleProperty]
+  set newValue RulesConfigurationTypeProperty {..}
+    = RulesConfigurationTypeProperty {rules = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RulesConfigurationTypeProperty.hs-boot b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RulesConfigurationTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/IdentityPoolRoleAttachment/RulesConfigurationTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.IdentityPoolRoleAttachment.RulesConfigurationTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RulesConfigurationTypeProperty :: Prelude.Type
+instance ToResourceProperties RulesConfigurationTypeProperty
+instance Prelude.Eq RulesConfigurationTypeProperty
+instance Prelude.Show RulesConfigurationTypeProperty
+instance JSON.ToJSON RulesConfigurationTypeProperty
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration.hs b/gen/Stratosphere/Cognito/LogDeliveryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration.hs
@@ -0,0 +1,51 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration (
+        module Exports, LogDeliveryConfiguration(..),
+        mkLogDeliveryConfiguration
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.LogDeliveryConfiguration.LogConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LogDeliveryConfiguration
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-logdeliveryconfiguration.html>
+    LogDeliveryConfiguration {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-logdeliveryconfiguration.html#cfn-cognito-logdeliveryconfiguration-logconfigurations>
+                              logConfigurations :: (Prelude.Maybe [LogConfigurationProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-logdeliveryconfiguration.html#cfn-cognito-logdeliveryconfiguration-userpoolid>
+                              userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLogDeliveryConfiguration ::
+  Value Prelude.Text -> LogDeliveryConfiguration
+mkLogDeliveryConfiguration userPoolId
+  = LogDeliveryConfiguration
+      {haddock_workaround_ = (), userPoolId = userPoolId,
+       logConfigurations = Prelude.Nothing}
+instance ToResourceProperties LogDeliveryConfiguration where
+  toResourceProperties LogDeliveryConfiguration {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::LogDeliveryConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LogConfigurations" Prelude.<$> logConfigurations]))}
+instance JSON.ToJSON LogDeliveryConfiguration where
+  toJSON LogDeliveryConfiguration {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "LogConfigurations" Prelude.<$> logConfigurations])))
+instance Property "LogConfigurations" LogDeliveryConfiguration where
+  type PropertyType "LogConfigurations" LogDeliveryConfiguration = [LogConfigurationProperty]
+  set newValue LogDeliveryConfiguration {..}
+    = LogDeliveryConfiguration
+        {logConfigurations = Prelude.pure newValue, ..}
+instance Property "UserPoolId" LogDeliveryConfiguration where
+  type PropertyType "UserPoolId" LogDeliveryConfiguration = Value Prelude.Text
+  set newValue LogDeliveryConfiguration {..}
+    = LogDeliveryConfiguration {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration/CloudWatchLogsConfigurationProperty.hs b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/CloudWatchLogsConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/CloudWatchLogsConfigurationProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration.CloudWatchLogsConfigurationProperty (
+        CloudWatchLogsConfigurationProperty(..),
+        mkCloudWatchLogsConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CloudWatchLogsConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-cloudwatchlogsconfiguration.html>
+    CloudWatchLogsConfigurationProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-cloudwatchlogsconfiguration.html#cfn-cognito-logdeliveryconfiguration-cloudwatchlogsconfiguration-loggrouparn>
+                                         logGroupArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudWatchLogsConfigurationProperty ::
+  CloudWatchLogsConfigurationProperty
+mkCloudWatchLogsConfigurationProperty
+  = CloudWatchLogsConfigurationProperty
+      {haddock_workaround_ = (), logGroupArn = Prelude.Nothing}
+instance ToResourceProperties CloudWatchLogsConfigurationProperty where
+  toResourceProperties CloudWatchLogsConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::LogDeliveryConfiguration.CloudWatchLogsConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LogGroupArn" Prelude.<$> logGroupArn])}
+instance JSON.ToJSON CloudWatchLogsConfigurationProperty where
+  toJSON CloudWatchLogsConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LogGroupArn" Prelude.<$> logGroupArn]))
+instance Property "LogGroupArn" CloudWatchLogsConfigurationProperty where
+  type PropertyType "LogGroupArn" CloudWatchLogsConfigurationProperty = Value Prelude.Text
+  set newValue CloudWatchLogsConfigurationProperty {..}
+    = CloudWatchLogsConfigurationProperty
+        {logGroupArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration/CloudWatchLogsConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/CloudWatchLogsConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/CloudWatchLogsConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration.CloudWatchLogsConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CloudWatchLogsConfigurationProperty :: Prelude.Type
+instance ToResourceProperties CloudWatchLogsConfigurationProperty
+instance Prelude.Eq CloudWatchLogsConfigurationProperty
+instance Prelude.Show CloudWatchLogsConfigurationProperty
+instance JSON.ToJSON CloudWatchLogsConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration/FirehoseConfigurationProperty.hs b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/FirehoseConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/FirehoseConfigurationProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration.FirehoseConfigurationProperty (
+        FirehoseConfigurationProperty(..), mkFirehoseConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FirehoseConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-firehoseconfiguration.html>
+    FirehoseConfigurationProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-firehoseconfiguration.html#cfn-cognito-logdeliveryconfiguration-firehoseconfiguration-streamarn>
+                                   streamArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFirehoseConfigurationProperty :: FirehoseConfigurationProperty
+mkFirehoseConfigurationProperty
+  = FirehoseConfigurationProperty
+      {haddock_workaround_ = (), streamArn = Prelude.Nothing}
+instance ToResourceProperties FirehoseConfigurationProperty where
+  toResourceProperties FirehoseConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::LogDeliveryConfiguration.FirehoseConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "StreamArn" Prelude.<$> streamArn])}
+instance JSON.ToJSON FirehoseConfigurationProperty where
+  toJSON FirehoseConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "StreamArn" Prelude.<$> streamArn]))
+instance Property "StreamArn" FirehoseConfigurationProperty where
+  type PropertyType "StreamArn" FirehoseConfigurationProperty = Value Prelude.Text
+  set newValue FirehoseConfigurationProperty {..}
+    = FirehoseConfigurationProperty
+        {streamArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration/FirehoseConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/FirehoseConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/FirehoseConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration.FirehoseConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FirehoseConfigurationProperty :: Prelude.Type
+instance ToResourceProperties FirehoseConfigurationProperty
+instance Prelude.Eq FirehoseConfigurationProperty
+instance Prelude.Show FirehoseConfigurationProperty
+instance JSON.ToJSON FirehoseConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration/LogConfigurationProperty.hs b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/LogConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/LogConfigurationProperty.hs
@@ -0,0 +1,84 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration.LogConfigurationProperty (
+        module Exports, LogConfigurationProperty(..),
+        mkLogConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.LogDeliveryConfiguration.CloudWatchLogsConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.LogDeliveryConfiguration.FirehoseConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.LogDeliveryConfiguration.S3ConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LogConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-logconfiguration.html>
+    LogConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-logconfiguration.html#cfn-cognito-logdeliveryconfiguration-logconfiguration-cloudwatchlogsconfiguration>
+                              cloudWatchLogsConfiguration :: (Prelude.Maybe CloudWatchLogsConfigurationProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-logconfiguration.html#cfn-cognito-logdeliveryconfiguration-logconfiguration-eventsource>
+                              eventSource :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-logconfiguration.html#cfn-cognito-logdeliveryconfiguration-logconfiguration-firehoseconfiguration>
+                              firehoseConfiguration :: (Prelude.Maybe FirehoseConfigurationProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-logconfiguration.html#cfn-cognito-logdeliveryconfiguration-logconfiguration-loglevel>
+                              logLevel :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-logconfiguration.html#cfn-cognito-logdeliveryconfiguration-logconfiguration-s3configuration>
+                              s3Configuration :: (Prelude.Maybe S3ConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLogConfigurationProperty :: LogConfigurationProperty
+mkLogConfigurationProperty
+  = LogConfigurationProperty
+      {haddock_workaround_ = (),
+       cloudWatchLogsConfiguration = Prelude.Nothing,
+       eventSource = Prelude.Nothing,
+       firehoseConfiguration = Prelude.Nothing,
+       logLevel = Prelude.Nothing, s3Configuration = Prelude.Nothing}
+instance ToResourceProperties LogConfigurationProperty where
+  toResourceProperties LogConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::LogDeliveryConfiguration.LogConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CloudWatchLogsConfiguration"
+                              Prelude.<$> cloudWatchLogsConfiguration,
+                            (JSON..=) "EventSource" Prelude.<$> eventSource,
+                            (JSON..=) "FirehoseConfiguration"
+                              Prelude.<$> firehoseConfiguration,
+                            (JSON..=) "LogLevel" Prelude.<$> logLevel,
+                            (JSON..=) "S3Configuration" Prelude.<$> s3Configuration])}
+instance JSON.ToJSON LogConfigurationProperty where
+  toJSON LogConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CloudWatchLogsConfiguration"
+                 Prelude.<$> cloudWatchLogsConfiguration,
+               (JSON..=) "EventSource" Prelude.<$> eventSource,
+               (JSON..=) "FirehoseConfiguration"
+                 Prelude.<$> firehoseConfiguration,
+               (JSON..=) "LogLevel" Prelude.<$> logLevel,
+               (JSON..=) "S3Configuration" Prelude.<$> s3Configuration]))
+instance Property "CloudWatchLogsConfiguration" LogConfigurationProperty where
+  type PropertyType "CloudWatchLogsConfiguration" LogConfigurationProperty = CloudWatchLogsConfigurationProperty
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty
+        {cloudWatchLogsConfiguration = Prelude.pure newValue, ..}
+instance Property "EventSource" LogConfigurationProperty where
+  type PropertyType "EventSource" LogConfigurationProperty = Value Prelude.Text
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty
+        {eventSource = Prelude.pure newValue, ..}
+instance Property "FirehoseConfiguration" LogConfigurationProperty where
+  type PropertyType "FirehoseConfiguration" LogConfigurationProperty = FirehoseConfigurationProperty
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty
+        {firehoseConfiguration = Prelude.pure newValue, ..}
+instance Property "LogLevel" LogConfigurationProperty where
+  type PropertyType "LogLevel" LogConfigurationProperty = Value Prelude.Text
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty {logLevel = Prelude.pure newValue, ..}
+instance Property "S3Configuration" LogConfigurationProperty where
+  type PropertyType "S3Configuration" LogConfigurationProperty = S3ConfigurationProperty
+  set newValue LogConfigurationProperty {..}
+    = LogConfigurationProperty
+        {s3Configuration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration/LogConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/LogConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/LogConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration.LogConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LogConfigurationProperty :: Prelude.Type
+instance ToResourceProperties LogConfigurationProperty
+instance Prelude.Eq LogConfigurationProperty
+instance Prelude.Show LogConfigurationProperty
+instance JSON.ToJSON LogConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration/S3ConfigurationProperty.hs b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/S3ConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/S3ConfigurationProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration.S3ConfigurationProperty (
+        S3ConfigurationProperty(..), mkS3ConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data S3ConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-s3configuration.html>
+    S3ConfigurationProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-logdeliveryconfiguration-s3configuration.html#cfn-cognito-logdeliveryconfiguration-s3configuration-bucketarn>
+                             bucketArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkS3ConfigurationProperty :: S3ConfigurationProperty
+mkS3ConfigurationProperty
+  = S3ConfigurationProperty
+      {haddock_workaround_ = (), bucketArn = Prelude.Nothing}
+instance ToResourceProperties S3ConfigurationProperty where
+  toResourceProperties S3ConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::LogDeliveryConfiguration.S3Configuration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "BucketArn" Prelude.<$> bucketArn])}
+instance JSON.ToJSON S3ConfigurationProperty where
+  toJSON S3ConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "BucketArn" Prelude.<$> bucketArn]))
+instance Property "BucketArn" S3ConfigurationProperty where
+  type PropertyType "BucketArn" S3ConfigurationProperty = Value Prelude.Text
+  set newValue S3ConfigurationProperty {..}
+    = S3ConfigurationProperty {bucketArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/LogDeliveryConfiguration/S3ConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/S3ConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/LogDeliveryConfiguration/S3ConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.LogDeliveryConfiguration.S3ConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data S3ConfigurationProperty :: Prelude.Type
+instance ToResourceProperties S3ConfigurationProperty
+instance Prelude.Eq S3ConfigurationProperty
+instance Prelude.Show S3ConfigurationProperty
+instance JSON.ToJSON S3ConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/ManagedLoginBranding.hs b/gen/Stratosphere/Cognito/ManagedLoginBranding.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/ManagedLoginBranding.hs
@@ -0,0 +1,90 @@
+module Stratosphere.Cognito.ManagedLoginBranding (
+        module Exports, ManagedLoginBranding(..), mkManagedLoginBranding
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.ManagedLoginBranding.AssetTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedLoginBranding
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-managedloginbranding.html>
+    ManagedLoginBranding {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-managedloginbranding.html#cfn-cognito-managedloginbranding-assets>
+                          assets :: (Prelude.Maybe [AssetTypeProperty]),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-managedloginbranding.html#cfn-cognito-managedloginbranding-clientid>
+                          clientId :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-managedloginbranding.html#cfn-cognito-managedloginbranding-returnmergedresources>
+                          returnMergedResources :: (Prelude.Maybe (Value Prelude.Bool)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-managedloginbranding.html#cfn-cognito-managedloginbranding-settings>
+                          settings :: (Prelude.Maybe JSON.Object),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-managedloginbranding.html#cfn-cognito-managedloginbranding-usecognitoprovidedvalues>
+                          useCognitoProvidedValues :: (Prelude.Maybe (Value Prelude.Bool)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-managedloginbranding.html#cfn-cognito-managedloginbranding-userpoolid>
+                          userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedLoginBranding ::
+  Value Prelude.Text -> ManagedLoginBranding
+mkManagedLoginBranding userPoolId
+  = ManagedLoginBranding
+      {haddock_workaround_ = (), userPoolId = userPoolId,
+       assets = Prelude.Nothing, clientId = Prelude.Nothing,
+       returnMergedResources = Prelude.Nothing,
+       settings = Prelude.Nothing,
+       useCognitoProvidedValues = Prelude.Nothing}
+instance ToResourceProperties ManagedLoginBranding where
+  toResourceProperties ManagedLoginBranding {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::ManagedLoginBranding",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Assets" Prelude.<$> assets,
+                               (JSON..=) "ClientId" Prelude.<$> clientId,
+                               (JSON..=) "ReturnMergedResources"
+                                 Prelude.<$> returnMergedResources,
+                               (JSON..=) "Settings" Prelude.<$> settings,
+                               (JSON..=) "UseCognitoProvidedValues"
+                                 Prelude.<$> useCognitoProvidedValues]))}
+instance JSON.ToJSON ManagedLoginBranding where
+  toJSON ManagedLoginBranding {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Assets" Prelude.<$> assets,
+                  (JSON..=) "ClientId" Prelude.<$> clientId,
+                  (JSON..=) "ReturnMergedResources"
+                    Prelude.<$> returnMergedResources,
+                  (JSON..=) "Settings" Prelude.<$> settings,
+                  (JSON..=) "UseCognitoProvidedValues"
+                    Prelude.<$> useCognitoProvidedValues])))
+instance Property "Assets" ManagedLoginBranding where
+  type PropertyType "Assets" ManagedLoginBranding = [AssetTypeProperty]
+  set newValue ManagedLoginBranding {..}
+    = ManagedLoginBranding {assets = Prelude.pure newValue, ..}
+instance Property "ClientId" ManagedLoginBranding where
+  type PropertyType "ClientId" ManagedLoginBranding = Value Prelude.Text
+  set newValue ManagedLoginBranding {..}
+    = ManagedLoginBranding {clientId = Prelude.pure newValue, ..}
+instance Property "ReturnMergedResources" ManagedLoginBranding where
+  type PropertyType "ReturnMergedResources" ManagedLoginBranding = Value Prelude.Bool
+  set newValue ManagedLoginBranding {..}
+    = ManagedLoginBranding
+        {returnMergedResources = Prelude.pure newValue, ..}
+instance Property "Settings" ManagedLoginBranding where
+  type PropertyType "Settings" ManagedLoginBranding = JSON.Object
+  set newValue ManagedLoginBranding {..}
+    = ManagedLoginBranding {settings = Prelude.pure newValue, ..}
+instance Property "UseCognitoProvidedValues" ManagedLoginBranding where
+  type PropertyType "UseCognitoProvidedValues" ManagedLoginBranding = Value Prelude.Bool
+  set newValue ManagedLoginBranding {..}
+    = ManagedLoginBranding
+        {useCognitoProvidedValues = Prelude.pure newValue, ..}
+instance Property "UserPoolId" ManagedLoginBranding where
+  type PropertyType "UserPoolId" ManagedLoginBranding = Value Prelude.Text
+  set newValue ManagedLoginBranding {..}
+    = ManagedLoginBranding {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/ManagedLoginBranding/AssetTypeProperty.hs b/gen/Stratosphere/Cognito/ManagedLoginBranding/AssetTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/ManagedLoginBranding/AssetTypeProperty.hs
@@ -0,0 +1,72 @@
+module Stratosphere.Cognito.ManagedLoginBranding.AssetTypeProperty (
+        AssetTypeProperty(..), mkAssetTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AssetTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-managedloginbranding-assettype.html>
+    AssetTypeProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-managedloginbranding-assettype.html#cfn-cognito-managedloginbranding-assettype-bytes>
+                       bytes :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-managedloginbranding-assettype.html#cfn-cognito-managedloginbranding-assettype-category>
+                       category :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-managedloginbranding-assettype.html#cfn-cognito-managedloginbranding-assettype-colormode>
+                       colorMode :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-managedloginbranding-assettype.html#cfn-cognito-managedloginbranding-assettype-extension>
+                       extension :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-managedloginbranding-assettype.html#cfn-cognito-managedloginbranding-assettype-resourceid>
+                       resourceId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAssetTypeProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> AssetTypeProperty
+mkAssetTypeProperty category colorMode extension
+  = AssetTypeProperty
+      {haddock_workaround_ = (), category = category,
+       colorMode = colorMode, extension = extension,
+       bytes = Prelude.Nothing, resourceId = Prelude.Nothing}
+instance ToResourceProperties AssetTypeProperty where
+  toResourceProperties AssetTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::ManagedLoginBranding.AssetType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Category" JSON..= category, "ColorMode" JSON..= colorMode,
+                            "Extension" JSON..= extension]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Bytes" Prelude.<$> bytes,
+                               (JSON..=) "ResourceId" Prelude.<$> resourceId]))}
+instance JSON.ToJSON AssetTypeProperty where
+  toJSON AssetTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Category" JSON..= category, "ColorMode" JSON..= colorMode,
+               "Extension" JSON..= extension]
+              (Prelude.catMaybes
+                 [(JSON..=) "Bytes" Prelude.<$> bytes,
+                  (JSON..=) "ResourceId" Prelude.<$> resourceId])))
+instance Property "Bytes" AssetTypeProperty where
+  type PropertyType "Bytes" AssetTypeProperty = Value Prelude.Text
+  set newValue AssetTypeProperty {..}
+    = AssetTypeProperty {bytes = Prelude.pure newValue, ..}
+instance Property "Category" AssetTypeProperty where
+  type PropertyType "Category" AssetTypeProperty = Value Prelude.Text
+  set newValue AssetTypeProperty {..}
+    = AssetTypeProperty {category = newValue, ..}
+instance Property "ColorMode" AssetTypeProperty where
+  type PropertyType "ColorMode" AssetTypeProperty = Value Prelude.Text
+  set newValue AssetTypeProperty {..}
+    = AssetTypeProperty {colorMode = newValue, ..}
+instance Property "Extension" AssetTypeProperty where
+  type PropertyType "Extension" AssetTypeProperty = Value Prelude.Text
+  set newValue AssetTypeProperty {..}
+    = AssetTypeProperty {extension = newValue, ..}
+instance Property "ResourceId" AssetTypeProperty where
+  type PropertyType "ResourceId" AssetTypeProperty = Value Prelude.Text
+  set newValue AssetTypeProperty {..}
+    = AssetTypeProperty {resourceId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/ManagedLoginBranding/AssetTypeProperty.hs-boot b/gen/Stratosphere/Cognito/ManagedLoginBranding/AssetTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/ManagedLoginBranding/AssetTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.ManagedLoginBranding.AssetTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AssetTypeProperty :: Prelude.Type
+instance ToResourceProperties AssetTypeProperty
+instance Prelude.Eq AssetTypeProperty
+instance Prelude.Show AssetTypeProperty
+instance JSON.ToJSON AssetTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPool.hs b/gen/Stratosphere/Cognito/UserPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool.hs
@@ -0,0 +1,326 @@
+module Stratosphere.Cognito.UserPool (
+        module Exports, UserPool(..), mkUserPool
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.AccountRecoverySettingProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.AdminCreateUserConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.DeviceConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.EmailConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.LambdaConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.PoliciesProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.SchemaAttributeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.SmsConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.UserAttributeUpdateSettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.UserPoolAddOnsProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.UsernameConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.VerificationMessageTemplateProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPool
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html>
+    UserPool {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-accountrecoverysetting>
+              accountRecoverySetting :: (Prelude.Maybe AccountRecoverySettingProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-admincreateuserconfig>
+              adminCreateUserConfig :: (Prelude.Maybe AdminCreateUserConfigProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-aliasattributes>
+              aliasAttributes :: (Prelude.Maybe (ValueList Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-autoverifiedattributes>
+              autoVerifiedAttributes :: (Prelude.Maybe (ValueList Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-deletionprotection>
+              deletionProtection :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-deviceconfiguration>
+              deviceConfiguration :: (Prelude.Maybe DeviceConfigurationProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailauthenticationmessage>
+              emailAuthenticationMessage :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailauthenticationsubject>
+              emailAuthenticationSubject :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailconfiguration>
+              emailConfiguration :: (Prelude.Maybe EmailConfigurationProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailverificationmessage>
+              emailVerificationMessage :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailverificationsubject>
+              emailVerificationSubject :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-enabledmfas>
+              enabledMfas :: (Prelude.Maybe (ValueList Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-lambdaconfig>
+              lambdaConfig :: (Prelude.Maybe LambdaConfigProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-mfaconfiguration>
+              mfaConfiguration :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-policies>
+              policies :: (Prelude.Maybe PoliciesProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-schema>
+              schema :: (Prelude.Maybe [SchemaAttributeProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-smsauthenticationmessage>
+              smsAuthenticationMessage :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-smsconfiguration>
+              smsConfiguration :: (Prelude.Maybe SmsConfigurationProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-smsverificationmessage>
+              smsVerificationMessage :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-userattributeupdatesettings>
+              userAttributeUpdateSettings :: (Prelude.Maybe UserAttributeUpdateSettingsProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-userpooladdons>
+              userPoolAddOns :: (Prelude.Maybe UserPoolAddOnsProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-userpoolname>
+              userPoolName :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-userpooltags>
+              userPoolTags :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-userpooltier>
+              userPoolTier :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-usernameattributes>
+              usernameAttributes :: (Prelude.Maybe (ValueList Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-usernameconfiguration>
+              usernameConfiguration :: (Prelude.Maybe UsernameConfigurationProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-verificationmessagetemplate>
+              verificationMessageTemplate :: (Prelude.Maybe VerificationMessageTemplateProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-webauthnrelyingpartyid>
+              webAuthnRelyingPartyID :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-webauthnuserverification>
+              webAuthnUserVerification :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPool :: UserPool
+mkUserPool
+  = UserPool
+      {haddock_workaround_ = (),
+       accountRecoverySetting = Prelude.Nothing,
+       adminCreateUserConfig = Prelude.Nothing,
+       aliasAttributes = Prelude.Nothing,
+       autoVerifiedAttributes = Prelude.Nothing,
+       deletionProtection = Prelude.Nothing,
+       deviceConfiguration = Prelude.Nothing,
+       emailAuthenticationMessage = Prelude.Nothing,
+       emailAuthenticationSubject = Prelude.Nothing,
+       emailConfiguration = Prelude.Nothing,
+       emailVerificationMessage = Prelude.Nothing,
+       emailVerificationSubject = Prelude.Nothing,
+       enabledMfas = Prelude.Nothing, lambdaConfig = Prelude.Nothing,
+       mfaConfiguration = Prelude.Nothing, policies = Prelude.Nothing,
+       schema = Prelude.Nothing,
+       smsAuthenticationMessage = Prelude.Nothing,
+       smsConfiguration = Prelude.Nothing,
+       smsVerificationMessage = Prelude.Nothing,
+       userAttributeUpdateSettings = Prelude.Nothing,
+       userPoolAddOns = Prelude.Nothing, userPoolName = Prelude.Nothing,
+       userPoolTags = Prelude.Nothing, userPoolTier = Prelude.Nothing,
+       usernameAttributes = Prelude.Nothing,
+       usernameConfiguration = Prelude.Nothing,
+       verificationMessageTemplate = Prelude.Nothing,
+       webAuthnRelyingPartyID = Prelude.Nothing,
+       webAuthnUserVerification = Prelude.Nothing}
+instance ToResourceProperties UserPool where
+  toResourceProperties UserPool {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AccountRecoverySetting"
+                              Prelude.<$> accountRecoverySetting,
+                            (JSON..=) "AdminCreateUserConfig"
+                              Prelude.<$> adminCreateUserConfig,
+                            (JSON..=) "AliasAttributes" Prelude.<$> aliasAttributes,
+                            (JSON..=) "AutoVerifiedAttributes"
+                              Prelude.<$> autoVerifiedAttributes,
+                            (JSON..=) "DeletionProtection" Prelude.<$> deletionProtection,
+                            (JSON..=) "DeviceConfiguration" Prelude.<$> deviceConfiguration,
+                            (JSON..=) "EmailAuthenticationMessage"
+                              Prelude.<$> emailAuthenticationMessage,
+                            (JSON..=) "EmailAuthenticationSubject"
+                              Prelude.<$> emailAuthenticationSubject,
+                            (JSON..=) "EmailConfiguration" Prelude.<$> emailConfiguration,
+                            (JSON..=) "EmailVerificationMessage"
+                              Prelude.<$> emailVerificationMessage,
+                            (JSON..=) "EmailVerificationSubject"
+                              Prelude.<$> emailVerificationSubject,
+                            (JSON..=) "EnabledMfas" Prelude.<$> enabledMfas,
+                            (JSON..=) "LambdaConfig" Prelude.<$> lambdaConfig,
+                            (JSON..=) "MfaConfiguration" Prelude.<$> mfaConfiguration,
+                            (JSON..=) "Policies" Prelude.<$> policies,
+                            (JSON..=) "Schema" Prelude.<$> schema,
+                            (JSON..=) "SmsAuthenticationMessage"
+                              Prelude.<$> smsAuthenticationMessage,
+                            (JSON..=) "SmsConfiguration" Prelude.<$> smsConfiguration,
+                            (JSON..=) "SmsVerificationMessage"
+                              Prelude.<$> smsVerificationMessage,
+                            (JSON..=) "UserAttributeUpdateSettings"
+                              Prelude.<$> userAttributeUpdateSettings,
+                            (JSON..=) "UserPoolAddOns" Prelude.<$> userPoolAddOns,
+                            (JSON..=) "UserPoolName" Prelude.<$> userPoolName,
+                            (JSON..=) "UserPoolTags" Prelude.<$> userPoolTags,
+                            (JSON..=) "UserPoolTier" Prelude.<$> userPoolTier,
+                            (JSON..=) "UsernameAttributes" Prelude.<$> usernameAttributes,
+                            (JSON..=) "UsernameConfiguration"
+                              Prelude.<$> usernameConfiguration,
+                            (JSON..=) "VerificationMessageTemplate"
+                              Prelude.<$> verificationMessageTemplate,
+                            (JSON..=) "WebAuthnRelyingPartyID"
+                              Prelude.<$> webAuthnRelyingPartyID,
+                            (JSON..=) "WebAuthnUserVerification"
+                              Prelude.<$> webAuthnUserVerification])}
+instance JSON.ToJSON UserPool where
+  toJSON UserPool {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AccountRecoverySetting"
+                 Prelude.<$> accountRecoverySetting,
+               (JSON..=) "AdminCreateUserConfig"
+                 Prelude.<$> adminCreateUserConfig,
+               (JSON..=) "AliasAttributes" Prelude.<$> aliasAttributes,
+               (JSON..=) "AutoVerifiedAttributes"
+                 Prelude.<$> autoVerifiedAttributes,
+               (JSON..=) "DeletionProtection" Prelude.<$> deletionProtection,
+               (JSON..=) "DeviceConfiguration" Prelude.<$> deviceConfiguration,
+               (JSON..=) "EmailAuthenticationMessage"
+                 Prelude.<$> emailAuthenticationMessage,
+               (JSON..=) "EmailAuthenticationSubject"
+                 Prelude.<$> emailAuthenticationSubject,
+               (JSON..=) "EmailConfiguration" Prelude.<$> emailConfiguration,
+               (JSON..=) "EmailVerificationMessage"
+                 Prelude.<$> emailVerificationMessage,
+               (JSON..=) "EmailVerificationSubject"
+                 Prelude.<$> emailVerificationSubject,
+               (JSON..=) "EnabledMfas" Prelude.<$> enabledMfas,
+               (JSON..=) "LambdaConfig" Prelude.<$> lambdaConfig,
+               (JSON..=) "MfaConfiguration" Prelude.<$> mfaConfiguration,
+               (JSON..=) "Policies" Prelude.<$> policies,
+               (JSON..=) "Schema" Prelude.<$> schema,
+               (JSON..=) "SmsAuthenticationMessage"
+                 Prelude.<$> smsAuthenticationMessage,
+               (JSON..=) "SmsConfiguration" Prelude.<$> smsConfiguration,
+               (JSON..=) "SmsVerificationMessage"
+                 Prelude.<$> smsVerificationMessage,
+               (JSON..=) "UserAttributeUpdateSettings"
+                 Prelude.<$> userAttributeUpdateSettings,
+               (JSON..=) "UserPoolAddOns" Prelude.<$> userPoolAddOns,
+               (JSON..=) "UserPoolName" Prelude.<$> userPoolName,
+               (JSON..=) "UserPoolTags" Prelude.<$> userPoolTags,
+               (JSON..=) "UserPoolTier" Prelude.<$> userPoolTier,
+               (JSON..=) "UsernameAttributes" Prelude.<$> usernameAttributes,
+               (JSON..=) "UsernameConfiguration"
+                 Prelude.<$> usernameConfiguration,
+               (JSON..=) "VerificationMessageTemplate"
+                 Prelude.<$> verificationMessageTemplate,
+               (JSON..=) "WebAuthnRelyingPartyID"
+                 Prelude.<$> webAuthnRelyingPartyID,
+               (JSON..=) "WebAuthnUserVerification"
+                 Prelude.<$> webAuthnUserVerification]))
+instance Property "AccountRecoverySetting" UserPool where
+  type PropertyType "AccountRecoverySetting" UserPool = AccountRecoverySettingProperty
+  set newValue UserPool {..}
+    = UserPool {accountRecoverySetting = Prelude.pure newValue, ..}
+instance Property "AdminCreateUserConfig" UserPool where
+  type PropertyType "AdminCreateUserConfig" UserPool = AdminCreateUserConfigProperty
+  set newValue UserPool {..}
+    = UserPool {adminCreateUserConfig = Prelude.pure newValue, ..}
+instance Property "AliasAttributes" UserPool where
+  type PropertyType "AliasAttributes" UserPool = ValueList Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {aliasAttributes = Prelude.pure newValue, ..}
+instance Property "AutoVerifiedAttributes" UserPool where
+  type PropertyType "AutoVerifiedAttributes" UserPool = ValueList Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {autoVerifiedAttributes = Prelude.pure newValue, ..}
+instance Property "DeletionProtection" UserPool where
+  type PropertyType "DeletionProtection" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {deletionProtection = Prelude.pure newValue, ..}
+instance Property "DeviceConfiguration" UserPool where
+  type PropertyType "DeviceConfiguration" UserPool = DeviceConfigurationProperty
+  set newValue UserPool {..}
+    = UserPool {deviceConfiguration = Prelude.pure newValue, ..}
+instance Property "EmailAuthenticationMessage" UserPool where
+  type PropertyType "EmailAuthenticationMessage" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {emailAuthenticationMessage = Prelude.pure newValue, ..}
+instance Property "EmailAuthenticationSubject" UserPool where
+  type PropertyType "EmailAuthenticationSubject" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {emailAuthenticationSubject = Prelude.pure newValue, ..}
+instance Property "EmailConfiguration" UserPool where
+  type PropertyType "EmailConfiguration" UserPool = EmailConfigurationProperty
+  set newValue UserPool {..}
+    = UserPool {emailConfiguration = Prelude.pure newValue, ..}
+instance Property "EmailVerificationMessage" UserPool where
+  type PropertyType "EmailVerificationMessage" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {emailVerificationMessage = Prelude.pure newValue, ..}
+instance Property "EmailVerificationSubject" UserPool where
+  type PropertyType "EmailVerificationSubject" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {emailVerificationSubject = Prelude.pure newValue, ..}
+instance Property "EnabledMfas" UserPool where
+  type PropertyType "EnabledMfas" UserPool = ValueList Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {enabledMfas = Prelude.pure newValue, ..}
+instance Property "LambdaConfig" UserPool where
+  type PropertyType "LambdaConfig" UserPool = LambdaConfigProperty
+  set newValue UserPool {..}
+    = UserPool {lambdaConfig = Prelude.pure newValue, ..}
+instance Property "MfaConfiguration" UserPool where
+  type PropertyType "MfaConfiguration" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {mfaConfiguration = Prelude.pure newValue, ..}
+instance Property "Policies" UserPool where
+  type PropertyType "Policies" UserPool = PoliciesProperty
+  set newValue UserPool {..}
+    = UserPool {policies = Prelude.pure newValue, ..}
+instance Property "Schema" UserPool where
+  type PropertyType "Schema" UserPool = [SchemaAttributeProperty]
+  set newValue UserPool {..}
+    = UserPool {schema = Prelude.pure newValue, ..}
+instance Property "SmsAuthenticationMessage" UserPool where
+  type PropertyType "SmsAuthenticationMessage" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {smsAuthenticationMessage = Prelude.pure newValue, ..}
+instance Property "SmsConfiguration" UserPool where
+  type PropertyType "SmsConfiguration" UserPool = SmsConfigurationProperty
+  set newValue UserPool {..}
+    = UserPool {smsConfiguration = Prelude.pure newValue, ..}
+instance Property "SmsVerificationMessage" UserPool where
+  type PropertyType "SmsVerificationMessage" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {smsVerificationMessage = Prelude.pure newValue, ..}
+instance Property "UserAttributeUpdateSettings" UserPool where
+  type PropertyType "UserAttributeUpdateSettings" UserPool = UserAttributeUpdateSettingsProperty
+  set newValue UserPool {..}
+    = UserPool
+        {userAttributeUpdateSettings = Prelude.pure newValue, ..}
+instance Property "UserPoolAddOns" UserPool where
+  type PropertyType "UserPoolAddOns" UserPool = UserPoolAddOnsProperty
+  set newValue UserPool {..}
+    = UserPool {userPoolAddOns = Prelude.pure newValue, ..}
+instance Property "UserPoolName" UserPool where
+  type PropertyType "UserPoolName" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {userPoolName = Prelude.pure newValue, ..}
+instance Property "UserPoolTags" UserPool where
+  type PropertyType "UserPoolTags" UserPool = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue UserPool {..}
+    = UserPool {userPoolTags = Prelude.pure newValue, ..}
+instance Property "UserPoolTier" UserPool where
+  type PropertyType "UserPoolTier" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {userPoolTier = Prelude.pure newValue, ..}
+instance Property "UsernameAttributes" UserPool where
+  type PropertyType "UsernameAttributes" UserPool = ValueList Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {usernameAttributes = Prelude.pure newValue, ..}
+instance Property "UsernameConfiguration" UserPool where
+  type PropertyType "UsernameConfiguration" UserPool = UsernameConfigurationProperty
+  set newValue UserPool {..}
+    = UserPool {usernameConfiguration = Prelude.pure newValue, ..}
+instance Property "VerificationMessageTemplate" UserPool where
+  type PropertyType "VerificationMessageTemplate" UserPool = VerificationMessageTemplateProperty
+  set newValue UserPool {..}
+    = UserPool
+        {verificationMessageTemplate = Prelude.pure newValue, ..}
+instance Property "WebAuthnRelyingPartyID" UserPool where
+  type PropertyType "WebAuthnRelyingPartyID" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {webAuthnRelyingPartyID = Prelude.pure newValue, ..}
+instance Property "WebAuthnUserVerification" UserPool where
+  type PropertyType "WebAuthnUserVerification" UserPool = Value Prelude.Text
+  set newValue UserPool {..}
+    = UserPool {webAuthnUserVerification = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/AccountRecoverySettingProperty.hs b/gen/Stratosphere/Cognito/UserPool/AccountRecoverySettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/AccountRecoverySettingProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.Cognito.UserPool.AccountRecoverySettingProperty (
+        module Exports, AccountRecoverySettingProperty(..),
+        mkAccountRecoverySettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.RecoveryOptionProperty as Exports
+import Stratosphere.ResourceProperties
+data AccountRecoverySettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-accountrecoverysetting.html>
+    AccountRecoverySettingProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-accountrecoverysetting.html#cfn-cognito-userpool-accountrecoverysetting-recoverymechanisms>
+                                    recoveryMechanisms :: (Prelude.Maybe [RecoveryOptionProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccountRecoverySettingProperty :: AccountRecoverySettingProperty
+mkAccountRecoverySettingProperty
+  = AccountRecoverySettingProperty
+      {haddock_workaround_ = (), recoveryMechanisms = Prelude.Nothing}
+instance ToResourceProperties AccountRecoverySettingProperty where
+  toResourceProperties AccountRecoverySettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.AccountRecoverySetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RecoveryMechanisms" Prelude.<$> recoveryMechanisms])}
+instance JSON.ToJSON AccountRecoverySettingProperty where
+  toJSON AccountRecoverySettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RecoveryMechanisms" Prelude.<$> recoveryMechanisms]))
+instance Property "RecoveryMechanisms" AccountRecoverySettingProperty where
+  type PropertyType "RecoveryMechanisms" AccountRecoverySettingProperty = [RecoveryOptionProperty]
+  set newValue AccountRecoverySettingProperty {..}
+    = AccountRecoverySettingProperty
+        {recoveryMechanisms = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/AccountRecoverySettingProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/AccountRecoverySettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/AccountRecoverySettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.AccountRecoverySettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccountRecoverySettingProperty :: Prelude.Type
+instance ToResourceProperties AccountRecoverySettingProperty
+instance Prelude.Eq AccountRecoverySettingProperty
+instance Prelude.Show AccountRecoverySettingProperty
+instance JSON.ToJSON AccountRecoverySettingProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/AdminCreateUserConfigProperty.hs b/gen/Stratosphere/Cognito/UserPool/AdminCreateUserConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/AdminCreateUserConfigProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.Cognito.UserPool.AdminCreateUserConfigProperty (
+        module Exports, AdminCreateUserConfigProperty(..),
+        mkAdminCreateUserConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.InviteMessageTemplateProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdminCreateUserConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-admincreateuserconfig.html>
+    AdminCreateUserConfigProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-admincreateuserconfig.html#cfn-cognito-userpool-admincreateuserconfig-allowadmincreateuseronly>
+                                   allowAdminCreateUserOnly :: (Prelude.Maybe (Value Prelude.Bool)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-admincreateuserconfig.html#cfn-cognito-userpool-admincreateuserconfig-invitemessagetemplate>
+                                   inviteMessageTemplate :: (Prelude.Maybe InviteMessageTemplateProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-admincreateuserconfig.html#cfn-cognito-userpool-admincreateuserconfig-unusedaccountvaliditydays>
+                                   unusedAccountValidityDays :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdminCreateUserConfigProperty :: AdminCreateUserConfigProperty
+mkAdminCreateUserConfigProperty
+  = AdminCreateUserConfigProperty
+      {haddock_workaround_ = (),
+       allowAdminCreateUserOnly = Prelude.Nothing,
+       inviteMessageTemplate = Prelude.Nothing,
+       unusedAccountValidityDays = Prelude.Nothing}
+instance ToResourceProperties AdminCreateUserConfigProperty where
+  toResourceProperties AdminCreateUserConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.AdminCreateUserConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllowAdminCreateUserOnly"
+                              Prelude.<$> allowAdminCreateUserOnly,
+                            (JSON..=) "InviteMessageTemplate"
+                              Prelude.<$> inviteMessageTemplate,
+                            (JSON..=) "UnusedAccountValidityDays"
+                              Prelude.<$> unusedAccountValidityDays])}
+instance JSON.ToJSON AdminCreateUserConfigProperty where
+  toJSON AdminCreateUserConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllowAdminCreateUserOnly"
+                 Prelude.<$> allowAdminCreateUserOnly,
+               (JSON..=) "InviteMessageTemplate"
+                 Prelude.<$> inviteMessageTemplate,
+               (JSON..=) "UnusedAccountValidityDays"
+                 Prelude.<$> unusedAccountValidityDays]))
+instance Property "AllowAdminCreateUserOnly" AdminCreateUserConfigProperty where
+  type PropertyType "AllowAdminCreateUserOnly" AdminCreateUserConfigProperty = Value Prelude.Bool
+  set newValue AdminCreateUserConfigProperty {..}
+    = AdminCreateUserConfigProperty
+        {allowAdminCreateUserOnly = Prelude.pure newValue, ..}
+instance Property "InviteMessageTemplate" AdminCreateUserConfigProperty where
+  type PropertyType "InviteMessageTemplate" AdminCreateUserConfigProperty = InviteMessageTemplateProperty
+  set newValue AdminCreateUserConfigProperty {..}
+    = AdminCreateUserConfigProperty
+        {inviteMessageTemplate = Prelude.pure newValue, ..}
+instance Property "UnusedAccountValidityDays" AdminCreateUserConfigProperty where
+  type PropertyType "UnusedAccountValidityDays" AdminCreateUserConfigProperty = Value Prelude.Integer
+  set newValue AdminCreateUserConfigProperty {..}
+    = AdminCreateUserConfigProperty
+        {unusedAccountValidityDays = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/AdminCreateUserConfigProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/AdminCreateUserConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/AdminCreateUserConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.AdminCreateUserConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdminCreateUserConfigProperty :: Prelude.Type
+instance ToResourceProperties AdminCreateUserConfigProperty
+instance Prelude.Eq AdminCreateUserConfigProperty
+instance Prelude.Show AdminCreateUserConfigProperty
+instance JSON.ToJSON AdminCreateUserConfigProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/AdvancedSecurityAdditionalFlowsProperty.hs b/gen/Stratosphere/Cognito/UserPool/AdvancedSecurityAdditionalFlowsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/AdvancedSecurityAdditionalFlowsProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.Cognito.UserPool.AdvancedSecurityAdditionalFlowsProperty (
+        AdvancedSecurityAdditionalFlowsProperty(..),
+        mkAdvancedSecurityAdditionalFlowsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdvancedSecurityAdditionalFlowsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-advancedsecurityadditionalflows.html>
+    AdvancedSecurityAdditionalFlowsProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-advancedsecurityadditionalflows.html#cfn-cognito-userpool-advancedsecurityadditionalflows-customauthmode>
+                                             customAuthMode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdvancedSecurityAdditionalFlowsProperty ::
+  AdvancedSecurityAdditionalFlowsProperty
+mkAdvancedSecurityAdditionalFlowsProperty
+  = AdvancedSecurityAdditionalFlowsProperty
+      {haddock_workaround_ = (), customAuthMode = Prelude.Nothing}
+instance ToResourceProperties AdvancedSecurityAdditionalFlowsProperty where
+  toResourceProperties AdvancedSecurityAdditionalFlowsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.AdvancedSecurityAdditionalFlows",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CustomAuthMode" Prelude.<$> customAuthMode])}
+instance JSON.ToJSON AdvancedSecurityAdditionalFlowsProperty where
+  toJSON AdvancedSecurityAdditionalFlowsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CustomAuthMode" Prelude.<$> customAuthMode]))
+instance Property "CustomAuthMode" AdvancedSecurityAdditionalFlowsProperty where
+  type PropertyType "CustomAuthMode" AdvancedSecurityAdditionalFlowsProperty = Value Prelude.Text
+  set newValue AdvancedSecurityAdditionalFlowsProperty {..}
+    = AdvancedSecurityAdditionalFlowsProperty
+        {customAuthMode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/AdvancedSecurityAdditionalFlowsProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/AdvancedSecurityAdditionalFlowsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/AdvancedSecurityAdditionalFlowsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.AdvancedSecurityAdditionalFlowsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdvancedSecurityAdditionalFlowsProperty :: Prelude.Type
+instance ToResourceProperties AdvancedSecurityAdditionalFlowsProperty
+instance Prelude.Eq AdvancedSecurityAdditionalFlowsProperty
+instance Prelude.Show AdvancedSecurityAdditionalFlowsProperty
+instance JSON.ToJSON AdvancedSecurityAdditionalFlowsProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/CustomEmailSenderProperty.hs b/gen/Stratosphere/Cognito/UserPool/CustomEmailSenderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/CustomEmailSenderProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.Cognito.UserPool.CustomEmailSenderProperty (
+        CustomEmailSenderProperty(..), mkCustomEmailSenderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomEmailSenderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-customemailsender.html>
+    CustomEmailSenderProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-customemailsender.html#cfn-cognito-userpool-customemailsender-lambdaarn>
+                               lambdaArn :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-customemailsender.html#cfn-cognito-userpool-customemailsender-lambdaversion>
+                               lambdaVersion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomEmailSenderProperty :: CustomEmailSenderProperty
+mkCustomEmailSenderProperty
+  = CustomEmailSenderProperty
+      {haddock_workaround_ = (), lambdaArn = Prelude.Nothing,
+       lambdaVersion = Prelude.Nothing}
+instance ToResourceProperties CustomEmailSenderProperty where
+  toResourceProperties CustomEmailSenderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.CustomEmailSender",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LambdaArn" Prelude.<$> lambdaArn,
+                            (JSON..=) "LambdaVersion" Prelude.<$> lambdaVersion])}
+instance JSON.ToJSON CustomEmailSenderProperty where
+  toJSON CustomEmailSenderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LambdaArn" Prelude.<$> lambdaArn,
+               (JSON..=) "LambdaVersion" Prelude.<$> lambdaVersion]))
+instance Property "LambdaArn" CustomEmailSenderProperty where
+  type PropertyType "LambdaArn" CustomEmailSenderProperty = Value Prelude.Text
+  set newValue CustomEmailSenderProperty {..}
+    = CustomEmailSenderProperty {lambdaArn = Prelude.pure newValue, ..}
+instance Property "LambdaVersion" CustomEmailSenderProperty where
+  type PropertyType "LambdaVersion" CustomEmailSenderProperty = Value Prelude.Text
+  set newValue CustomEmailSenderProperty {..}
+    = CustomEmailSenderProperty
+        {lambdaVersion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/CustomEmailSenderProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/CustomEmailSenderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/CustomEmailSenderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.CustomEmailSenderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomEmailSenderProperty :: Prelude.Type
+instance ToResourceProperties CustomEmailSenderProperty
+instance Prelude.Eq CustomEmailSenderProperty
+instance Prelude.Show CustomEmailSenderProperty
+instance JSON.ToJSON CustomEmailSenderProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/CustomSMSSenderProperty.hs b/gen/Stratosphere/Cognito/UserPool/CustomSMSSenderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/CustomSMSSenderProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.Cognito.UserPool.CustomSMSSenderProperty (
+        CustomSMSSenderProperty(..), mkCustomSMSSenderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomSMSSenderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-customsmssender.html>
+    CustomSMSSenderProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-customsmssender.html#cfn-cognito-userpool-customsmssender-lambdaarn>
+                             lambdaArn :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-customsmssender.html#cfn-cognito-userpool-customsmssender-lambdaversion>
+                             lambdaVersion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomSMSSenderProperty :: CustomSMSSenderProperty
+mkCustomSMSSenderProperty
+  = CustomSMSSenderProperty
+      {haddock_workaround_ = (), lambdaArn = Prelude.Nothing,
+       lambdaVersion = Prelude.Nothing}
+instance ToResourceProperties CustomSMSSenderProperty where
+  toResourceProperties CustomSMSSenderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.CustomSMSSender",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LambdaArn" Prelude.<$> lambdaArn,
+                            (JSON..=) "LambdaVersion" Prelude.<$> lambdaVersion])}
+instance JSON.ToJSON CustomSMSSenderProperty where
+  toJSON CustomSMSSenderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LambdaArn" Prelude.<$> lambdaArn,
+               (JSON..=) "LambdaVersion" Prelude.<$> lambdaVersion]))
+instance Property "LambdaArn" CustomSMSSenderProperty where
+  type PropertyType "LambdaArn" CustomSMSSenderProperty = Value Prelude.Text
+  set newValue CustomSMSSenderProperty {..}
+    = CustomSMSSenderProperty {lambdaArn = Prelude.pure newValue, ..}
+instance Property "LambdaVersion" CustomSMSSenderProperty where
+  type PropertyType "LambdaVersion" CustomSMSSenderProperty = Value Prelude.Text
+  set newValue CustomSMSSenderProperty {..}
+    = CustomSMSSenderProperty
+        {lambdaVersion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/CustomSMSSenderProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/CustomSMSSenderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/CustomSMSSenderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.CustomSMSSenderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomSMSSenderProperty :: Prelude.Type
+instance ToResourceProperties CustomSMSSenderProperty
+instance Prelude.Eq CustomSMSSenderProperty
+instance Prelude.Show CustomSMSSenderProperty
+instance JSON.ToJSON CustomSMSSenderProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/DeviceConfigurationProperty.hs b/gen/Stratosphere/Cognito/UserPool/DeviceConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/DeviceConfigurationProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.Cognito.UserPool.DeviceConfigurationProperty (
+        DeviceConfigurationProperty(..), mkDeviceConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeviceConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-deviceconfiguration.html>
+    DeviceConfigurationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-deviceconfiguration.html#cfn-cognito-userpool-deviceconfiguration-challengerequiredonnewdevice>
+                                 challengeRequiredOnNewDevice :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-deviceconfiguration.html#cfn-cognito-userpool-deviceconfiguration-deviceonlyrememberedonuserprompt>
+                                 deviceOnlyRememberedOnUserPrompt :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeviceConfigurationProperty :: DeviceConfigurationProperty
+mkDeviceConfigurationProperty
+  = DeviceConfigurationProperty
+      {haddock_workaround_ = (),
+       challengeRequiredOnNewDevice = Prelude.Nothing,
+       deviceOnlyRememberedOnUserPrompt = Prelude.Nothing}
+instance ToResourceProperties DeviceConfigurationProperty where
+  toResourceProperties DeviceConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.DeviceConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ChallengeRequiredOnNewDevice"
+                              Prelude.<$> challengeRequiredOnNewDevice,
+                            (JSON..=) "DeviceOnlyRememberedOnUserPrompt"
+                              Prelude.<$> deviceOnlyRememberedOnUserPrompt])}
+instance JSON.ToJSON DeviceConfigurationProperty where
+  toJSON DeviceConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ChallengeRequiredOnNewDevice"
+                 Prelude.<$> challengeRequiredOnNewDevice,
+               (JSON..=) "DeviceOnlyRememberedOnUserPrompt"
+                 Prelude.<$> deviceOnlyRememberedOnUserPrompt]))
+instance Property "ChallengeRequiredOnNewDevice" DeviceConfigurationProperty where
+  type PropertyType "ChallengeRequiredOnNewDevice" DeviceConfigurationProperty = Value Prelude.Bool
+  set newValue DeviceConfigurationProperty {..}
+    = DeviceConfigurationProperty
+        {challengeRequiredOnNewDevice = Prelude.pure newValue, ..}
+instance Property "DeviceOnlyRememberedOnUserPrompt" DeviceConfigurationProperty where
+  type PropertyType "DeviceOnlyRememberedOnUserPrompt" DeviceConfigurationProperty = Value Prelude.Bool
+  set newValue DeviceConfigurationProperty {..}
+    = DeviceConfigurationProperty
+        {deviceOnlyRememberedOnUserPrompt = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/DeviceConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/DeviceConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/DeviceConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.DeviceConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeviceConfigurationProperty :: Prelude.Type
+instance ToResourceProperties DeviceConfigurationProperty
+instance Prelude.Eq DeviceConfigurationProperty
+instance Prelude.Show DeviceConfigurationProperty
+instance JSON.ToJSON DeviceConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/EmailConfigurationProperty.hs b/gen/Stratosphere/Cognito/UserPool/EmailConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/EmailConfigurationProperty.hs
@@ -0,0 +1,74 @@
+module Stratosphere.Cognito.UserPool.EmailConfigurationProperty (
+        EmailConfigurationProperty(..), mkEmailConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EmailConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html>
+    EmailConfigurationProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html#cfn-cognito-userpool-emailconfiguration-configurationset>
+                                configurationSet :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html#cfn-cognito-userpool-emailconfiguration-emailsendingaccount>
+                                emailSendingAccount :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html#cfn-cognito-userpool-emailconfiguration-from>
+                                from :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html#cfn-cognito-userpool-emailconfiguration-replytoemailaddress>
+                                replyToEmailAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html#cfn-cognito-userpool-emailconfiguration-sourcearn>
+                                sourceArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEmailConfigurationProperty :: EmailConfigurationProperty
+mkEmailConfigurationProperty
+  = EmailConfigurationProperty
+      {haddock_workaround_ = (), configurationSet = Prelude.Nothing,
+       emailSendingAccount = Prelude.Nothing, from = Prelude.Nothing,
+       replyToEmailAddress = Prelude.Nothing, sourceArn = Prelude.Nothing}
+instance ToResourceProperties EmailConfigurationProperty where
+  toResourceProperties EmailConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.EmailConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ConfigurationSet" Prelude.<$> configurationSet,
+                            (JSON..=) "EmailSendingAccount" Prelude.<$> emailSendingAccount,
+                            (JSON..=) "From" Prelude.<$> from,
+                            (JSON..=) "ReplyToEmailAddress" Prelude.<$> replyToEmailAddress,
+                            (JSON..=) "SourceArn" Prelude.<$> sourceArn])}
+instance JSON.ToJSON EmailConfigurationProperty where
+  toJSON EmailConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ConfigurationSet" Prelude.<$> configurationSet,
+               (JSON..=) "EmailSendingAccount" Prelude.<$> emailSendingAccount,
+               (JSON..=) "From" Prelude.<$> from,
+               (JSON..=) "ReplyToEmailAddress" Prelude.<$> replyToEmailAddress,
+               (JSON..=) "SourceArn" Prelude.<$> sourceArn]))
+instance Property "ConfigurationSet" EmailConfigurationProperty where
+  type PropertyType "ConfigurationSet" EmailConfigurationProperty = Value Prelude.Text
+  set newValue EmailConfigurationProperty {..}
+    = EmailConfigurationProperty
+        {configurationSet = Prelude.pure newValue, ..}
+instance Property "EmailSendingAccount" EmailConfigurationProperty where
+  type PropertyType "EmailSendingAccount" EmailConfigurationProperty = Value Prelude.Text
+  set newValue EmailConfigurationProperty {..}
+    = EmailConfigurationProperty
+        {emailSendingAccount = Prelude.pure newValue, ..}
+instance Property "From" EmailConfigurationProperty where
+  type PropertyType "From" EmailConfigurationProperty = Value Prelude.Text
+  set newValue EmailConfigurationProperty {..}
+    = EmailConfigurationProperty {from = Prelude.pure newValue, ..}
+instance Property "ReplyToEmailAddress" EmailConfigurationProperty where
+  type PropertyType "ReplyToEmailAddress" EmailConfigurationProperty = Value Prelude.Text
+  set newValue EmailConfigurationProperty {..}
+    = EmailConfigurationProperty
+        {replyToEmailAddress = Prelude.pure newValue, ..}
+instance Property "SourceArn" EmailConfigurationProperty where
+  type PropertyType "SourceArn" EmailConfigurationProperty = Value Prelude.Text
+  set newValue EmailConfigurationProperty {..}
+    = EmailConfigurationProperty
+        {sourceArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/EmailConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/EmailConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/EmailConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.EmailConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EmailConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EmailConfigurationProperty
+instance Prelude.Eq EmailConfigurationProperty
+instance Prelude.Show EmailConfigurationProperty
+instance JSON.ToJSON EmailConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/InviteMessageTemplateProperty.hs b/gen/Stratosphere/Cognito/UserPool/InviteMessageTemplateProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/InviteMessageTemplateProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.Cognito.UserPool.InviteMessageTemplateProperty (
+        InviteMessageTemplateProperty(..), mkInviteMessageTemplateProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InviteMessageTemplateProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-invitemessagetemplate.html>
+    InviteMessageTemplateProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-invitemessagetemplate.html#cfn-cognito-userpool-invitemessagetemplate-emailmessage>
+                                   emailMessage :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-invitemessagetemplate.html#cfn-cognito-userpool-invitemessagetemplate-emailsubject>
+                                   emailSubject :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-invitemessagetemplate.html#cfn-cognito-userpool-invitemessagetemplate-smsmessage>
+                                   sMSMessage :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInviteMessageTemplateProperty :: InviteMessageTemplateProperty
+mkInviteMessageTemplateProperty
+  = InviteMessageTemplateProperty
+      {haddock_workaround_ = (), emailMessage = Prelude.Nothing,
+       emailSubject = Prelude.Nothing, sMSMessage = Prelude.Nothing}
+instance ToResourceProperties InviteMessageTemplateProperty where
+  toResourceProperties InviteMessageTemplateProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.InviteMessageTemplate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EmailMessage" Prelude.<$> emailMessage,
+                            (JSON..=) "EmailSubject" Prelude.<$> emailSubject,
+                            (JSON..=) "SMSMessage" Prelude.<$> sMSMessage])}
+instance JSON.ToJSON InviteMessageTemplateProperty where
+  toJSON InviteMessageTemplateProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EmailMessage" Prelude.<$> emailMessage,
+               (JSON..=) "EmailSubject" Prelude.<$> emailSubject,
+               (JSON..=) "SMSMessage" Prelude.<$> sMSMessage]))
+instance Property "EmailMessage" InviteMessageTemplateProperty where
+  type PropertyType "EmailMessage" InviteMessageTemplateProperty = Value Prelude.Text
+  set newValue InviteMessageTemplateProperty {..}
+    = InviteMessageTemplateProperty
+        {emailMessage = Prelude.pure newValue, ..}
+instance Property "EmailSubject" InviteMessageTemplateProperty where
+  type PropertyType "EmailSubject" InviteMessageTemplateProperty = Value Prelude.Text
+  set newValue InviteMessageTemplateProperty {..}
+    = InviteMessageTemplateProperty
+        {emailSubject = Prelude.pure newValue, ..}
+instance Property "SMSMessage" InviteMessageTemplateProperty where
+  type PropertyType "SMSMessage" InviteMessageTemplateProperty = Value Prelude.Text
+  set newValue InviteMessageTemplateProperty {..}
+    = InviteMessageTemplateProperty
+        {sMSMessage = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/InviteMessageTemplateProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/InviteMessageTemplateProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/InviteMessageTemplateProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.InviteMessageTemplateProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InviteMessageTemplateProperty :: Prelude.Type
+instance ToResourceProperties InviteMessageTemplateProperty
+instance Prelude.Eq InviteMessageTemplateProperty
+instance Prelude.Show InviteMessageTemplateProperty
+instance JSON.ToJSON InviteMessageTemplateProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/LambdaConfigProperty.hs b/gen/Stratosphere/Cognito/UserPool/LambdaConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/LambdaConfigProperty.hs
@@ -0,0 +1,167 @@
+module Stratosphere.Cognito.UserPool.LambdaConfigProperty (
+        module Exports, LambdaConfigProperty(..), mkLambdaConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.CustomEmailSenderProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.CustomSMSSenderProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.PreTokenGenerationConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LambdaConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html>
+    LambdaConfigProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-createauthchallenge>
+                          createAuthChallenge :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-customemailsender>
+                          customEmailSender :: (Prelude.Maybe CustomEmailSenderProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-custommessage>
+                          customMessage :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-customsmssender>
+                          customSMSSender :: (Prelude.Maybe CustomSMSSenderProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-defineauthchallenge>
+                          defineAuthChallenge :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-kmskeyid>
+                          kMSKeyID :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-postauthentication>
+                          postAuthentication :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-postconfirmation>
+                          postConfirmation :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-preauthentication>
+                          preAuthentication :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-presignup>
+                          preSignUp :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-pretokengeneration>
+                          preTokenGeneration :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-pretokengenerationconfig>
+                          preTokenGenerationConfig :: (Prelude.Maybe PreTokenGenerationConfigProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-usermigration>
+                          userMigration :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-verifyauthchallengeresponse>
+                          verifyAuthChallengeResponse :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLambdaConfigProperty :: LambdaConfigProperty
+mkLambdaConfigProperty
+  = LambdaConfigProperty
+      {haddock_workaround_ = (), createAuthChallenge = Prelude.Nothing,
+       customEmailSender = Prelude.Nothing,
+       customMessage = Prelude.Nothing, customSMSSender = Prelude.Nothing,
+       defineAuthChallenge = Prelude.Nothing, kMSKeyID = Prelude.Nothing,
+       postAuthentication = Prelude.Nothing,
+       postConfirmation = Prelude.Nothing,
+       preAuthentication = Prelude.Nothing, preSignUp = Prelude.Nothing,
+       preTokenGeneration = Prelude.Nothing,
+       preTokenGenerationConfig = Prelude.Nothing,
+       userMigration = Prelude.Nothing,
+       verifyAuthChallengeResponse = Prelude.Nothing}
+instance ToResourceProperties LambdaConfigProperty where
+  toResourceProperties LambdaConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.LambdaConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CreateAuthChallenge" Prelude.<$> createAuthChallenge,
+                            (JSON..=) "CustomEmailSender" Prelude.<$> customEmailSender,
+                            (JSON..=) "CustomMessage" Prelude.<$> customMessage,
+                            (JSON..=) "CustomSMSSender" Prelude.<$> customSMSSender,
+                            (JSON..=) "DefineAuthChallenge" Prelude.<$> defineAuthChallenge,
+                            (JSON..=) "KMSKeyID" Prelude.<$> kMSKeyID,
+                            (JSON..=) "PostAuthentication" Prelude.<$> postAuthentication,
+                            (JSON..=) "PostConfirmation" Prelude.<$> postConfirmation,
+                            (JSON..=) "PreAuthentication" Prelude.<$> preAuthentication,
+                            (JSON..=) "PreSignUp" Prelude.<$> preSignUp,
+                            (JSON..=) "PreTokenGeneration" Prelude.<$> preTokenGeneration,
+                            (JSON..=) "PreTokenGenerationConfig"
+                              Prelude.<$> preTokenGenerationConfig,
+                            (JSON..=) "UserMigration" Prelude.<$> userMigration,
+                            (JSON..=) "VerifyAuthChallengeResponse"
+                              Prelude.<$> verifyAuthChallengeResponse])}
+instance JSON.ToJSON LambdaConfigProperty where
+  toJSON LambdaConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CreateAuthChallenge" Prelude.<$> createAuthChallenge,
+               (JSON..=) "CustomEmailSender" Prelude.<$> customEmailSender,
+               (JSON..=) "CustomMessage" Prelude.<$> customMessage,
+               (JSON..=) "CustomSMSSender" Prelude.<$> customSMSSender,
+               (JSON..=) "DefineAuthChallenge" Prelude.<$> defineAuthChallenge,
+               (JSON..=) "KMSKeyID" Prelude.<$> kMSKeyID,
+               (JSON..=) "PostAuthentication" Prelude.<$> postAuthentication,
+               (JSON..=) "PostConfirmation" Prelude.<$> postConfirmation,
+               (JSON..=) "PreAuthentication" Prelude.<$> preAuthentication,
+               (JSON..=) "PreSignUp" Prelude.<$> preSignUp,
+               (JSON..=) "PreTokenGeneration" Prelude.<$> preTokenGeneration,
+               (JSON..=) "PreTokenGenerationConfig"
+                 Prelude.<$> preTokenGenerationConfig,
+               (JSON..=) "UserMigration" Prelude.<$> userMigration,
+               (JSON..=) "VerifyAuthChallengeResponse"
+                 Prelude.<$> verifyAuthChallengeResponse]))
+instance Property "CreateAuthChallenge" LambdaConfigProperty where
+  type PropertyType "CreateAuthChallenge" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {createAuthChallenge = Prelude.pure newValue, ..}
+instance Property "CustomEmailSender" LambdaConfigProperty where
+  type PropertyType "CustomEmailSender" LambdaConfigProperty = CustomEmailSenderProperty
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {customEmailSender = Prelude.pure newValue, ..}
+instance Property "CustomMessage" LambdaConfigProperty where
+  type PropertyType "CustomMessage" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty {customMessage = Prelude.pure newValue, ..}
+instance Property "CustomSMSSender" LambdaConfigProperty where
+  type PropertyType "CustomSMSSender" LambdaConfigProperty = CustomSMSSenderProperty
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {customSMSSender = Prelude.pure newValue, ..}
+instance Property "DefineAuthChallenge" LambdaConfigProperty where
+  type PropertyType "DefineAuthChallenge" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {defineAuthChallenge = Prelude.pure newValue, ..}
+instance Property "KMSKeyID" LambdaConfigProperty where
+  type PropertyType "KMSKeyID" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty {kMSKeyID = Prelude.pure newValue, ..}
+instance Property "PostAuthentication" LambdaConfigProperty where
+  type PropertyType "PostAuthentication" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {postAuthentication = Prelude.pure newValue, ..}
+instance Property "PostConfirmation" LambdaConfigProperty where
+  type PropertyType "PostConfirmation" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {postConfirmation = Prelude.pure newValue, ..}
+instance Property "PreAuthentication" LambdaConfigProperty where
+  type PropertyType "PreAuthentication" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {preAuthentication = Prelude.pure newValue, ..}
+instance Property "PreSignUp" LambdaConfigProperty where
+  type PropertyType "PreSignUp" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty {preSignUp = Prelude.pure newValue, ..}
+instance Property "PreTokenGeneration" LambdaConfigProperty where
+  type PropertyType "PreTokenGeneration" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {preTokenGeneration = Prelude.pure newValue, ..}
+instance Property "PreTokenGenerationConfig" LambdaConfigProperty where
+  type PropertyType "PreTokenGenerationConfig" LambdaConfigProperty = PreTokenGenerationConfigProperty
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {preTokenGenerationConfig = Prelude.pure newValue, ..}
+instance Property "UserMigration" LambdaConfigProperty where
+  type PropertyType "UserMigration" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty {userMigration = Prelude.pure newValue, ..}
+instance Property "VerifyAuthChallengeResponse" LambdaConfigProperty where
+  type PropertyType "VerifyAuthChallengeResponse" LambdaConfigProperty = Value Prelude.Text
+  set newValue LambdaConfigProperty {..}
+    = LambdaConfigProperty
+        {verifyAuthChallengeResponse = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/LambdaConfigProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/LambdaConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/LambdaConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.LambdaConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LambdaConfigProperty :: Prelude.Type
+instance ToResourceProperties LambdaConfigProperty
+instance Prelude.Eq LambdaConfigProperty
+instance Prelude.Show LambdaConfigProperty
+instance JSON.ToJSON LambdaConfigProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/NumberAttributeConstraintsProperty.hs b/gen/Stratosphere/Cognito/UserPool/NumberAttributeConstraintsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/NumberAttributeConstraintsProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.Cognito.UserPool.NumberAttributeConstraintsProperty (
+        NumberAttributeConstraintsProperty(..),
+        mkNumberAttributeConstraintsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NumberAttributeConstraintsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-numberattributeconstraints.html>
+    NumberAttributeConstraintsProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-numberattributeconstraints.html#cfn-cognito-userpool-numberattributeconstraints-maxvalue>
+                                        maxValue :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-numberattributeconstraints.html#cfn-cognito-userpool-numberattributeconstraints-minvalue>
+                                        minValue :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNumberAttributeConstraintsProperty ::
+  NumberAttributeConstraintsProperty
+mkNumberAttributeConstraintsProperty
+  = NumberAttributeConstraintsProperty
+      {haddock_workaround_ = (), maxValue = Prelude.Nothing,
+       minValue = Prelude.Nothing}
+instance ToResourceProperties NumberAttributeConstraintsProperty where
+  toResourceProperties NumberAttributeConstraintsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.NumberAttributeConstraints",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "MaxValue" Prelude.<$> maxValue,
+                            (JSON..=) "MinValue" Prelude.<$> minValue])}
+instance JSON.ToJSON NumberAttributeConstraintsProperty where
+  toJSON NumberAttributeConstraintsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "MaxValue" Prelude.<$> maxValue,
+               (JSON..=) "MinValue" Prelude.<$> minValue]))
+instance Property "MaxValue" NumberAttributeConstraintsProperty where
+  type PropertyType "MaxValue" NumberAttributeConstraintsProperty = Value Prelude.Text
+  set newValue NumberAttributeConstraintsProperty {..}
+    = NumberAttributeConstraintsProperty
+        {maxValue = Prelude.pure newValue, ..}
+instance Property "MinValue" NumberAttributeConstraintsProperty where
+  type PropertyType "MinValue" NumberAttributeConstraintsProperty = Value Prelude.Text
+  set newValue NumberAttributeConstraintsProperty {..}
+    = NumberAttributeConstraintsProperty
+        {minValue = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/NumberAttributeConstraintsProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/NumberAttributeConstraintsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/NumberAttributeConstraintsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.NumberAttributeConstraintsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NumberAttributeConstraintsProperty :: Prelude.Type
+instance ToResourceProperties NumberAttributeConstraintsProperty
+instance Prelude.Eq NumberAttributeConstraintsProperty
+instance Prelude.Show NumberAttributeConstraintsProperty
+instance JSON.ToJSON NumberAttributeConstraintsProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/PasswordPolicyProperty.hs b/gen/Stratosphere/Cognito/UserPool/PasswordPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/PasswordPolicyProperty.hs
@@ -0,0 +1,98 @@
+module Stratosphere.Cognito.UserPool.PasswordPolicyProperty (
+        PasswordPolicyProperty(..), mkPasswordPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PasswordPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html>
+    PasswordPolicyProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-minimumlength>
+                            minimumLength :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-passwordhistorysize>
+                            passwordHistorySize :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-requirelowercase>
+                            requireLowercase :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-requirenumbers>
+                            requireNumbers :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-requiresymbols>
+                            requireSymbols :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-requireuppercase>
+                            requireUppercase :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-temporarypasswordvaliditydays>
+                            temporaryPasswordValidityDays :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPasswordPolicyProperty :: PasswordPolicyProperty
+mkPasswordPolicyProperty
+  = PasswordPolicyProperty
+      {haddock_workaround_ = (), minimumLength = Prelude.Nothing,
+       passwordHistorySize = Prelude.Nothing,
+       requireLowercase = Prelude.Nothing,
+       requireNumbers = Prelude.Nothing, requireSymbols = Prelude.Nothing,
+       requireUppercase = Prelude.Nothing,
+       temporaryPasswordValidityDays = Prelude.Nothing}
+instance ToResourceProperties PasswordPolicyProperty where
+  toResourceProperties PasswordPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.PasswordPolicy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "MinimumLength" Prelude.<$> minimumLength,
+                            (JSON..=) "PasswordHistorySize" Prelude.<$> passwordHistorySize,
+                            (JSON..=) "RequireLowercase" Prelude.<$> requireLowercase,
+                            (JSON..=) "RequireNumbers" Prelude.<$> requireNumbers,
+                            (JSON..=) "RequireSymbols" Prelude.<$> requireSymbols,
+                            (JSON..=) "RequireUppercase" Prelude.<$> requireUppercase,
+                            (JSON..=) "TemporaryPasswordValidityDays"
+                              Prelude.<$> temporaryPasswordValidityDays])}
+instance JSON.ToJSON PasswordPolicyProperty where
+  toJSON PasswordPolicyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "MinimumLength" Prelude.<$> minimumLength,
+               (JSON..=) "PasswordHistorySize" Prelude.<$> passwordHistorySize,
+               (JSON..=) "RequireLowercase" Prelude.<$> requireLowercase,
+               (JSON..=) "RequireNumbers" Prelude.<$> requireNumbers,
+               (JSON..=) "RequireSymbols" Prelude.<$> requireSymbols,
+               (JSON..=) "RequireUppercase" Prelude.<$> requireUppercase,
+               (JSON..=) "TemporaryPasswordValidityDays"
+                 Prelude.<$> temporaryPasswordValidityDays]))
+instance Property "MinimumLength" PasswordPolicyProperty where
+  type PropertyType "MinimumLength" PasswordPolicyProperty = Value Prelude.Integer
+  set newValue PasswordPolicyProperty {..}
+    = PasswordPolicyProperty
+        {minimumLength = Prelude.pure newValue, ..}
+instance Property "PasswordHistorySize" PasswordPolicyProperty where
+  type PropertyType "PasswordHistorySize" PasswordPolicyProperty = Value Prelude.Integer
+  set newValue PasswordPolicyProperty {..}
+    = PasswordPolicyProperty
+        {passwordHistorySize = Prelude.pure newValue, ..}
+instance Property "RequireLowercase" PasswordPolicyProperty where
+  type PropertyType "RequireLowercase" PasswordPolicyProperty = Value Prelude.Bool
+  set newValue PasswordPolicyProperty {..}
+    = PasswordPolicyProperty
+        {requireLowercase = Prelude.pure newValue, ..}
+instance Property "RequireNumbers" PasswordPolicyProperty where
+  type PropertyType "RequireNumbers" PasswordPolicyProperty = Value Prelude.Bool
+  set newValue PasswordPolicyProperty {..}
+    = PasswordPolicyProperty
+        {requireNumbers = Prelude.pure newValue, ..}
+instance Property "RequireSymbols" PasswordPolicyProperty where
+  type PropertyType "RequireSymbols" PasswordPolicyProperty = Value Prelude.Bool
+  set newValue PasswordPolicyProperty {..}
+    = PasswordPolicyProperty
+        {requireSymbols = Prelude.pure newValue, ..}
+instance Property "RequireUppercase" PasswordPolicyProperty where
+  type PropertyType "RequireUppercase" PasswordPolicyProperty = Value Prelude.Bool
+  set newValue PasswordPolicyProperty {..}
+    = PasswordPolicyProperty
+        {requireUppercase = Prelude.pure newValue, ..}
+instance Property "TemporaryPasswordValidityDays" PasswordPolicyProperty where
+  type PropertyType "TemporaryPasswordValidityDays" PasswordPolicyProperty = Value Prelude.Integer
+  set newValue PasswordPolicyProperty {..}
+    = PasswordPolicyProperty
+        {temporaryPasswordValidityDays = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/PasswordPolicyProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/PasswordPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/PasswordPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.PasswordPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PasswordPolicyProperty :: Prelude.Type
+instance ToResourceProperties PasswordPolicyProperty
+instance Prelude.Eq PasswordPolicyProperty
+instance Prelude.Show PasswordPolicyProperty
+instance JSON.ToJSON PasswordPolicyProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/PoliciesProperty.hs b/gen/Stratosphere/Cognito/UserPool/PoliciesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/PoliciesProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.Cognito.UserPool.PoliciesProperty (
+        module Exports, PoliciesProperty(..), mkPoliciesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.PasswordPolicyProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.SignInPolicyProperty as Exports
+import Stratosphere.ResourceProperties
+data PoliciesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-policies.html>
+    PoliciesProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-policies.html#cfn-cognito-userpool-policies-passwordpolicy>
+                      passwordPolicy :: (Prelude.Maybe PasswordPolicyProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-policies.html#cfn-cognito-userpool-policies-signinpolicy>
+                      signInPolicy :: (Prelude.Maybe SignInPolicyProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPoliciesProperty :: PoliciesProperty
+mkPoliciesProperty
+  = PoliciesProperty
+      {haddock_workaround_ = (), passwordPolicy = Prelude.Nothing,
+       signInPolicy = Prelude.Nothing}
+instance ToResourceProperties PoliciesProperty where
+  toResourceProperties PoliciesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.Policies",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PasswordPolicy" Prelude.<$> passwordPolicy,
+                            (JSON..=) "SignInPolicy" Prelude.<$> signInPolicy])}
+instance JSON.ToJSON PoliciesProperty where
+  toJSON PoliciesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PasswordPolicy" Prelude.<$> passwordPolicy,
+               (JSON..=) "SignInPolicy" Prelude.<$> signInPolicy]))
+instance Property "PasswordPolicy" PoliciesProperty where
+  type PropertyType "PasswordPolicy" PoliciesProperty = PasswordPolicyProperty
+  set newValue PoliciesProperty {..}
+    = PoliciesProperty {passwordPolicy = Prelude.pure newValue, ..}
+instance Property "SignInPolicy" PoliciesProperty where
+  type PropertyType "SignInPolicy" PoliciesProperty = SignInPolicyProperty
+  set newValue PoliciesProperty {..}
+    = PoliciesProperty {signInPolicy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/PoliciesProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/PoliciesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/PoliciesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.PoliciesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PoliciesProperty :: Prelude.Type
+instance ToResourceProperties PoliciesProperty
+instance Prelude.Eq PoliciesProperty
+instance Prelude.Show PoliciesProperty
+instance JSON.ToJSON PoliciesProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/PreTokenGenerationConfigProperty.hs b/gen/Stratosphere/Cognito/UserPool/PreTokenGenerationConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/PreTokenGenerationConfigProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.Cognito.UserPool.PreTokenGenerationConfigProperty (
+        PreTokenGenerationConfigProperty(..),
+        mkPreTokenGenerationConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PreTokenGenerationConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-pretokengenerationconfig.html>
+    PreTokenGenerationConfigProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-pretokengenerationconfig.html#cfn-cognito-userpool-pretokengenerationconfig-lambdaarn>
+                                      lambdaArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-pretokengenerationconfig.html#cfn-cognito-userpool-pretokengenerationconfig-lambdaversion>
+                                      lambdaVersion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPreTokenGenerationConfigProperty ::
+  PreTokenGenerationConfigProperty
+mkPreTokenGenerationConfigProperty
+  = PreTokenGenerationConfigProperty
+      {haddock_workaround_ = (), lambdaArn = Prelude.Nothing,
+       lambdaVersion = Prelude.Nothing}
+instance ToResourceProperties PreTokenGenerationConfigProperty where
+  toResourceProperties PreTokenGenerationConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.PreTokenGenerationConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LambdaArn" Prelude.<$> lambdaArn,
+                            (JSON..=) "LambdaVersion" Prelude.<$> lambdaVersion])}
+instance JSON.ToJSON PreTokenGenerationConfigProperty where
+  toJSON PreTokenGenerationConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LambdaArn" Prelude.<$> lambdaArn,
+               (JSON..=) "LambdaVersion" Prelude.<$> lambdaVersion]))
+instance Property "LambdaArn" PreTokenGenerationConfigProperty where
+  type PropertyType "LambdaArn" PreTokenGenerationConfigProperty = Value Prelude.Text
+  set newValue PreTokenGenerationConfigProperty {..}
+    = PreTokenGenerationConfigProperty
+        {lambdaArn = Prelude.pure newValue, ..}
+instance Property "LambdaVersion" PreTokenGenerationConfigProperty where
+  type PropertyType "LambdaVersion" PreTokenGenerationConfigProperty = Value Prelude.Text
+  set newValue PreTokenGenerationConfigProperty {..}
+    = PreTokenGenerationConfigProperty
+        {lambdaVersion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/PreTokenGenerationConfigProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/PreTokenGenerationConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/PreTokenGenerationConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.PreTokenGenerationConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PreTokenGenerationConfigProperty :: Prelude.Type
+instance ToResourceProperties PreTokenGenerationConfigProperty
+instance Prelude.Eq PreTokenGenerationConfigProperty
+instance Prelude.Show PreTokenGenerationConfigProperty
+instance JSON.ToJSON PreTokenGenerationConfigProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/RecoveryOptionProperty.hs b/gen/Stratosphere/Cognito/UserPool/RecoveryOptionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/RecoveryOptionProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.Cognito.UserPool.RecoveryOptionProperty (
+        RecoveryOptionProperty(..), mkRecoveryOptionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RecoveryOptionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-recoveryoption.html>
+    RecoveryOptionProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-recoveryoption.html#cfn-cognito-userpool-recoveryoption-name>
+                            name :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-recoveryoption.html#cfn-cognito-userpool-recoveryoption-priority>
+                            priority :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRecoveryOptionProperty :: RecoveryOptionProperty
+mkRecoveryOptionProperty
+  = RecoveryOptionProperty
+      {haddock_workaround_ = (), name = Prelude.Nothing,
+       priority = Prelude.Nothing}
+instance ToResourceProperties RecoveryOptionProperty where
+  toResourceProperties RecoveryOptionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.RecoveryOption",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Priority" Prelude.<$> priority])}
+instance JSON.ToJSON RecoveryOptionProperty where
+  toJSON RecoveryOptionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Priority" Prelude.<$> priority]))
+instance Property "Name" RecoveryOptionProperty where
+  type PropertyType "Name" RecoveryOptionProperty = Value Prelude.Text
+  set newValue RecoveryOptionProperty {..}
+    = RecoveryOptionProperty {name = Prelude.pure newValue, ..}
+instance Property "Priority" RecoveryOptionProperty where
+  type PropertyType "Priority" RecoveryOptionProperty = Value Prelude.Integer
+  set newValue RecoveryOptionProperty {..}
+    = RecoveryOptionProperty {priority = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/RecoveryOptionProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/RecoveryOptionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/RecoveryOptionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.RecoveryOptionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RecoveryOptionProperty :: Prelude.Type
+instance ToResourceProperties RecoveryOptionProperty
+instance Prelude.Eq RecoveryOptionProperty
+instance Prelude.Show RecoveryOptionProperty
+instance JSON.ToJSON RecoveryOptionProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/SchemaAttributeProperty.hs b/gen/Stratosphere/Cognito/UserPool/SchemaAttributeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/SchemaAttributeProperty.hs
@@ -0,0 +1,102 @@
+module Stratosphere.Cognito.UserPool.SchemaAttributeProperty (
+        module Exports, SchemaAttributeProperty(..),
+        mkSchemaAttributeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.NumberAttributeConstraintsProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.StringAttributeConstraintsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SchemaAttributeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html>
+    SchemaAttributeProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-attributedatatype>
+                             attributeDataType :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-developeronlyattribute>
+                             developerOnlyAttribute :: (Prelude.Maybe (Value Prelude.Bool)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-mutable>
+                             mutable :: (Prelude.Maybe (Value Prelude.Bool)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-name>
+                             name :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-numberattributeconstraints>
+                             numberAttributeConstraints :: (Prelude.Maybe NumberAttributeConstraintsProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-required>
+                             required :: (Prelude.Maybe (Value Prelude.Bool)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-stringattributeconstraints>
+                             stringAttributeConstraints :: (Prelude.Maybe StringAttributeConstraintsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSchemaAttributeProperty :: SchemaAttributeProperty
+mkSchemaAttributeProperty
+  = SchemaAttributeProperty
+      {haddock_workaround_ = (), attributeDataType = Prelude.Nothing,
+       developerOnlyAttribute = Prelude.Nothing,
+       mutable = Prelude.Nothing, name = Prelude.Nothing,
+       numberAttributeConstraints = Prelude.Nothing,
+       required = Prelude.Nothing,
+       stringAttributeConstraints = Prelude.Nothing}
+instance ToResourceProperties SchemaAttributeProperty where
+  toResourceProperties SchemaAttributeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.SchemaAttribute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AttributeDataType" Prelude.<$> attributeDataType,
+                            (JSON..=) "DeveloperOnlyAttribute"
+                              Prelude.<$> developerOnlyAttribute,
+                            (JSON..=) "Mutable" Prelude.<$> mutable,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "NumberAttributeConstraints"
+                              Prelude.<$> numberAttributeConstraints,
+                            (JSON..=) "Required" Prelude.<$> required,
+                            (JSON..=) "StringAttributeConstraints"
+                              Prelude.<$> stringAttributeConstraints])}
+instance JSON.ToJSON SchemaAttributeProperty where
+  toJSON SchemaAttributeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AttributeDataType" Prelude.<$> attributeDataType,
+               (JSON..=) "DeveloperOnlyAttribute"
+                 Prelude.<$> developerOnlyAttribute,
+               (JSON..=) "Mutable" Prelude.<$> mutable,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "NumberAttributeConstraints"
+                 Prelude.<$> numberAttributeConstraints,
+               (JSON..=) "Required" Prelude.<$> required,
+               (JSON..=) "StringAttributeConstraints"
+                 Prelude.<$> stringAttributeConstraints]))
+instance Property "AttributeDataType" SchemaAttributeProperty where
+  type PropertyType "AttributeDataType" SchemaAttributeProperty = Value Prelude.Text
+  set newValue SchemaAttributeProperty {..}
+    = SchemaAttributeProperty
+        {attributeDataType = Prelude.pure newValue, ..}
+instance Property "DeveloperOnlyAttribute" SchemaAttributeProperty where
+  type PropertyType "DeveloperOnlyAttribute" SchemaAttributeProperty = Value Prelude.Bool
+  set newValue SchemaAttributeProperty {..}
+    = SchemaAttributeProperty
+        {developerOnlyAttribute = Prelude.pure newValue, ..}
+instance Property "Mutable" SchemaAttributeProperty where
+  type PropertyType "Mutable" SchemaAttributeProperty = Value Prelude.Bool
+  set newValue SchemaAttributeProperty {..}
+    = SchemaAttributeProperty {mutable = Prelude.pure newValue, ..}
+instance Property "Name" SchemaAttributeProperty where
+  type PropertyType "Name" SchemaAttributeProperty = Value Prelude.Text
+  set newValue SchemaAttributeProperty {..}
+    = SchemaAttributeProperty {name = Prelude.pure newValue, ..}
+instance Property "NumberAttributeConstraints" SchemaAttributeProperty where
+  type PropertyType "NumberAttributeConstraints" SchemaAttributeProperty = NumberAttributeConstraintsProperty
+  set newValue SchemaAttributeProperty {..}
+    = SchemaAttributeProperty
+        {numberAttributeConstraints = Prelude.pure newValue, ..}
+instance Property "Required" SchemaAttributeProperty where
+  type PropertyType "Required" SchemaAttributeProperty = Value Prelude.Bool
+  set newValue SchemaAttributeProperty {..}
+    = SchemaAttributeProperty {required = Prelude.pure newValue, ..}
+instance Property "StringAttributeConstraints" SchemaAttributeProperty where
+  type PropertyType "StringAttributeConstraints" SchemaAttributeProperty = StringAttributeConstraintsProperty
+  set newValue SchemaAttributeProperty {..}
+    = SchemaAttributeProperty
+        {stringAttributeConstraints = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/SchemaAttributeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/SchemaAttributeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/SchemaAttributeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.SchemaAttributeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SchemaAttributeProperty :: Prelude.Type
+instance ToResourceProperties SchemaAttributeProperty
+instance Prelude.Eq SchemaAttributeProperty
+instance Prelude.Show SchemaAttributeProperty
+instance JSON.ToJSON SchemaAttributeProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/SignInPolicyProperty.hs b/gen/Stratosphere/Cognito/UserPool/SignInPolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/SignInPolicyProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.Cognito.UserPool.SignInPolicyProperty (
+        SignInPolicyProperty(..), mkSignInPolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SignInPolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-signinpolicy.html>
+    SignInPolicyProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-signinpolicy.html#cfn-cognito-userpool-signinpolicy-allowedfirstauthfactors>
+                          allowedFirstAuthFactors :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSignInPolicyProperty :: SignInPolicyProperty
+mkSignInPolicyProperty
+  = SignInPolicyProperty
+      {haddock_workaround_ = (),
+       allowedFirstAuthFactors = Prelude.Nothing}
+instance ToResourceProperties SignInPolicyProperty where
+  toResourceProperties SignInPolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.SignInPolicy",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllowedFirstAuthFactors"
+                              Prelude.<$> allowedFirstAuthFactors])}
+instance JSON.ToJSON SignInPolicyProperty where
+  toJSON SignInPolicyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllowedFirstAuthFactors"
+                 Prelude.<$> allowedFirstAuthFactors]))
+instance Property "AllowedFirstAuthFactors" SignInPolicyProperty where
+  type PropertyType "AllowedFirstAuthFactors" SignInPolicyProperty = ValueList Prelude.Text
+  set newValue SignInPolicyProperty {..}
+    = SignInPolicyProperty
+        {allowedFirstAuthFactors = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/SignInPolicyProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/SignInPolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/SignInPolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.SignInPolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SignInPolicyProperty :: Prelude.Type
+instance ToResourceProperties SignInPolicyProperty
+instance Prelude.Eq SignInPolicyProperty
+instance Prelude.Show SignInPolicyProperty
+instance JSON.ToJSON SignInPolicyProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/SmsConfigurationProperty.hs b/gen/Stratosphere/Cognito/UserPool/SmsConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/SmsConfigurationProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.Cognito.UserPool.SmsConfigurationProperty (
+        SmsConfigurationProperty(..), mkSmsConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SmsConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-smsconfiguration.html>
+    SmsConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-smsconfiguration.html#cfn-cognito-userpool-smsconfiguration-externalid>
+                              externalId :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-smsconfiguration.html#cfn-cognito-userpool-smsconfiguration-snscallerarn>
+                              snsCallerArn :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-smsconfiguration.html#cfn-cognito-userpool-smsconfiguration-snsregion>
+                              snsRegion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSmsConfigurationProperty :: SmsConfigurationProperty
+mkSmsConfigurationProperty
+  = SmsConfigurationProperty
+      {haddock_workaround_ = (), externalId = Prelude.Nothing,
+       snsCallerArn = Prelude.Nothing, snsRegion = Prelude.Nothing}
+instance ToResourceProperties SmsConfigurationProperty where
+  toResourceProperties SmsConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.SmsConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ExternalId" Prelude.<$> externalId,
+                            (JSON..=) "SnsCallerArn" Prelude.<$> snsCallerArn,
+                            (JSON..=) "SnsRegion" Prelude.<$> snsRegion])}
+instance JSON.ToJSON SmsConfigurationProperty where
+  toJSON SmsConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ExternalId" Prelude.<$> externalId,
+               (JSON..=) "SnsCallerArn" Prelude.<$> snsCallerArn,
+               (JSON..=) "SnsRegion" Prelude.<$> snsRegion]))
+instance Property "ExternalId" SmsConfigurationProperty where
+  type PropertyType "ExternalId" SmsConfigurationProperty = Value Prelude.Text
+  set newValue SmsConfigurationProperty {..}
+    = SmsConfigurationProperty {externalId = Prelude.pure newValue, ..}
+instance Property "SnsCallerArn" SmsConfigurationProperty where
+  type PropertyType "SnsCallerArn" SmsConfigurationProperty = Value Prelude.Text
+  set newValue SmsConfigurationProperty {..}
+    = SmsConfigurationProperty
+        {snsCallerArn = Prelude.pure newValue, ..}
+instance Property "SnsRegion" SmsConfigurationProperty where
+  type PropertyType "SnsRegion" SmsConfigurationProperty = Value Prelude.Text
+  set newValue SmsConfigurationProperty {..}
+    = SmsConfigurationProperty {snsRegion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/SmsConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/SmsConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/SmsConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.SmsConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SmsConfigurationProperty :: Prelude.Type
+instance ToResourceProperties SmsConfigurationProperty
+instance Prelude.Eq SmsConfigurationProperty
+instance Prelude.Show SmsConfigurationProperty
+instance JSON.ToJSON SmsConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/StringAttributeConstraintsProperty.hs b/gen/Stratosphere/Cognito/UserPool/StringAttributeConstraintsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/StringAttributeConstraintsProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.Cognito.UserPool.StringAttributeConstraintsProperty (
+        StringAttributeConstraintsProperty(..),
+        mkStringAttributeConstraintsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StringAttributeConstraintsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-stringattributeconstraints.html>
+    StringAttributeConstraintsProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-stringattributeconstraints.html#cfn-cognito-userpool-stringattributeconstraints-maxlength>
+                                        maxLength :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-stringattributeconstraints.html#cfn-cognito-userpool-stringattributeconstraints-minlength>
+                                        minLength :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStringAttributeConstraintsProperty ::
+  StringAttributeConstraintsProperty
+mkStringAttributeConstraintsProperty
+  = StringAttributeConstraintsProperty
+      {haddock_workaround_ = (), maxLength = Prelude.Nothing,
+       minLength = Prelude.Nothing}
+instance ToResourceProperties StringAttributeConstraintsProperty where
+  toResourceProperties StringAttributeConstraintsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.StringAttributeConstraints",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "MaxLength" Prelude.<$> maxLength,
+                            (JSON..=) "MinLength" Prelude.<$> minLength])}
+instance JSON.ToJSON StringAttributeConstraintsProperty where
+  toJSON StringAttributeConstraintsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "MaxLength" Prelude.<$> maxLength,
+               (JSON..=) "MinLength" Prelude.<$> minLength]))
+instance Property "MaxLength" StringAttributeConstraintsProperty where
+  type PropertyType "MaxLength" StringAttributeConstraintsProperty = Value Prelude.Text
+  set newValue StringAttributeConstraintsProperty {..}
+    = StringAttributeConstraintsProperty
+        {maxLength = Prelude.pure newValue, ..}
+instance Property "MinLength" StringAttributeConstraintsProperty where
+  type PropertyType "MinLength" StringAttributeConstraintsProperty = Value Prelude.Text
+  set newValue StringAttributeConstraintsProperty {..}
+    = StringAttributeConstraintsProperty
+        {minLength = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/StringAttributeConstraintsProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/StringAttributeConstraintsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/StringAttributeConstraintsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.StringAttributeConstraintsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StringAttributeConstraintsProperty :: Prelude.Type
+instance ToResourceProperties StringAttributeConstraintsProperty
+instance Prelude.Eq StringAttributeConstraintsProperty
+instance Prelude.Show StringAttributeConstraintsProperty
+instance JSON.ToJSON StringAttributeConstraintsProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/UserAttributeUpdateSettingsProperty.hs b/gen/Stratosphere/Cognito/UserPool/UserAttributeUpdateSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/UserAttributeUpdateSettingsProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.Cognito.UserPool.UserAttributeUpdateSettingsProperty (
+        UserAttributeUpdateSettingsProperty(..),
+        mkUserAttributeUpdateSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserAttributeUpdateSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-userattributeupdatesettings.html>
+    UserAttributeUpdateSettingsProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-userattributeupdatesettings.html#cfn-cognito-userpool-userattributeupdatesettings-attributesrequireverificationbeforeupdate>
+                                         attributesRequireVerificationBeforeUpdate :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserAttributeUpdateSettingsProperty ::
+  ValueList Prelude.Text -> UserAttributeUpdateSettingsProperty
+mkUserAttributeUpdateSettingsProperty
+  attributesRequireVerificationBeforeUpdate
+  = UserAttributeUpdateSettingsProperty
+      {haddock_workaround_ = (),
+       attributesRequireVerificationBeforeUpdate = attributesRequireVerificationBeforeUpdate}
+instance ToResourceProperties UserAttributeUpdateSettingsProperty where
+  toResourceProperties UserAttributeUpdateSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.UserAttributeUpdateSettings",
+         supportsTags = Prelude.False,
+         properties = ["AttributesRequireVerificationBeforeUpdate"
+                         JSON..= attributesRequireVerificationBeforeUpdate]}
+instance JSON.ToJSON UserAttributeUpdateSettingsProperty where
+  toJSON UserAttributeUpdateSettingsProperty {..}
+    = JSON.object
+        ["AttributesRequireVerificationBeforeUpdate"
+           JSON..= attributesRequireVerificationBeforeUpdate]
+instance Property "AttributesRequireVerificationBeforeUpdate" UserAttributeUpdateSettingsProperty where
+  type PropertyType "AttributesRequireVerificationBeforeUpdate" UserAttributeUpdateSettingsProperty = ValueList Prelude.Text
+  set newValue UserAttributeUpdateSettingsProperty {..}
+    = UserAttributeUpdateSettingsProperty
+        {attributesRequireVerificationBeforeUpdate = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/UserAttributeUpdateSettingsProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/UserAttributeUpdateSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/UserAttributeUpdateSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.UserAttributeUpdateSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data UserAttributeUpdateSettingsProperty :: Prelude.Type
+instance ToResourceProperties UserAttributeUpdateSettingsProperty
+instance Prelude.Eq UserAttributeUpdateSettingsProperty
+instance Prelude.Show UserAttributeUpdateSettingsProperty
+instance JSON.ToJSON UserAttributeUpdateSettingsProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/UserPoolAddOnsProperty.hs b/gen/Stratosphere/Cognito/UserPool/UserPoolAddOnsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/UserPoolAddOnsProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.Cognito.UserPool.UserPoolAddOnsProperty (
+        module Exports, UserPoolAddOnsProperty(..),
+        mkUserPoolAddOnsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPool.AdvancedSecurityAdditionalFlowsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolAddOnsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-userpooladdons.html>
+    UserPoolAddOnsProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-userpooladdons.html#cfn-cognito-userpool-userpooladdons-advancedsecurityadditionalflows>
+                            advancedSecurityAdditionalFlows :: (Prelude.Maybe AdvancedSecurityAdditionalFlowsProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-userpooladdons.html#cfn-cognito-userpool-userpooladdons-advancedsecuritymode>
+                            advancedSecurityMode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolAddOnsProperty :: UserPoolAddOnsProperty
+mkUserPoolAddOnsProperty
+  = UserPoolAddOnsProperty
+      {haddock_workaround_ = (),
+       advancedSecurityAdditionalFlows = Prelude.Nothing,
+       advancedSecurityMode = Prelude.Nothing}
+instance ToResourceProperties UserPoolAddOnsProperty where
+  toResourceProperties UserPoolAddOnsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.UserPoolAddOns",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdvancedSecurityAdditionalFlows"
+                              Prelude.<$> advancedSecurityAdditionalFlows,
+                            (JSON..=) "AdvancedSecurityMode"
+                              Prelude.<$> advancedSecurityMode])}
+instance JSON.ToJSON UserPoolAddOnsProperty where
+  toJSON UserPoolAddOnsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdvancedSecurityAdditionalFlows"
+                 Prelude.<$> advancedSecurityAdditionalFlows,
+               (JSON..=) "AdvancedSecurityMode"
+                 Prelude.<$> advancedSecurityMode]))
+instance Property "AdvancedSecurityAdditionalFlows" UserPoolAddOnsProperty where
+  type PropertyType "AdvancedSecurityAdditionalFlows" UserPoolAddOnsProperty = AdvancedSecurityAdditionalFlowsProperty
+  set newValue UserPoolAddOnsProperty {..}
+    = UserPoolAddOnsProperty
+        {advancedSecurityAdditionalFlows = Prelude.pure newValue, ..}
+instance Property "AdvancedSecurityMode" UserPoolAddOnsProperty where
+  type PropertyType "AdvancedSecurityMode" UserPoolAddOnsProperty = Value Prelude.Text
+  set newValue UserPoolAddOnsProperty {..}
+    = UserPoolAddOnsProperty
+        {advancedSecurityMode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/UserPoolAddOnsProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/UserPoolAddOnsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/UserPoolAddOnsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.UserPoolAddOnsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data UserPoolAddOnsProperty :: Prelude.Type
+instance ToResourceProperties UserPoolAddOnsProperty
+instance Prelude.Eq UserPoolAddOnsProperty
+instance Prelude.Show UserPoolAddOnsProperty
+instance JSON.ToJSON UserPoolAddOnsProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/UsernameConfigurationProperty.hs b/gen/Stratosphere/Cognito/UserPool/UsernameConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/UsernameConfigurationProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.Cognito.UserPool.UsernameConfigurationProperty (
+        UsernameConfigurationProperty(..), mkUsernameConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UsernameConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-usernameconfiguration.html>
+    UsernameConfigurationProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-usernameconfiguration.html#cfn-cognito-userpool-usernameconfiguration-casesensitive>
+                                   caseSensitive :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUsernameConfigurationProperty :: UsernameConfigurationProperty
+mkUsernameConfigurationProperty
+  = UsernameConfigurationProperty
+      {haddock_workaround_ = (), caseSensitive = Prelude.Nothing}
+instance ToResourceProperties UsernameConfigurationProperty where
+  toResourceProperties UsernameConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.UsernameConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CaseSensitive" Prelude.<$> caseSensitive])}
+instance JSON.ToJSON UsernameConfigurationProperty where
+  toJSON UsernameConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CaseSensitive" Prelude.<$> caseSensitive]))
+instance Property "CaseSensitive" UsernameConfigurationProperty where
+  type PropertyType "CaseSensitive" UsernameConfigurationProperty = Value Prelude.Bool
+  set newValue UsernameConfigurationProperty {..}
+    = UsernameConfigurationProperty
+        {caseSensitive = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/UsernameConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/UsernameConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/UsernameConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.UsernameConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data UsernameConfigurationProperty :: Prelude.Type
+instance ToResourceProperties UsernameConfigurationProperty
+instance Prelude.Eq UsernameConfigurationProperty
+instance Prelude.Show UsernameConfigurationProperty
+instance JSON.ToJSON UsernameConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/UserPool/VerificationMessageTemplateProperty.hs b/gen/Stratosphere/Cognito/UserPool/VerificationMessageTemplateProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/VerificationMessageTemplateProperty.hs
@@ -0,0 +1,88 @@
+module Stratosphere.Cognito.UserPool.VerificationMessageTemplateProperty (
+        VerificationMessageTemplateProperty(..),
+        mkVerificationMessageTemplateProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VerificationMessageTemplateProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-verificationmessagetemplate.html>
+    VerificationMessageTemplateProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-verificationmessagetemplate.html#cfn-cognito-userpool-verificationmessagetemplate-defaultemailoption>
+                                         defaultEmailOption :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-verificationmessagetemplate.html#cfn-cognito-userpool-verificationmessagetemplate-emailmessage>
+                                         emailMessage :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-verificationmessagetemplate.html#cfn-cognito-userpool-verificationmessagetemplate-emailmessagebylink>
+                                         emailMessageByLink :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-verificationmessagetemplate.html#cfn-cognito-userpool-verificationmessagetemplate-emailsubject>
+                                         emailSubject :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-verificationmessagetemplate.html#cfn-cognito-userpool-verificationmessagetemplate-emailsubjectbylink>
+                                         emailSubjectByLink :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-verificationmessagetemplate.html#cfn-cognito-userpool-verificationmessagetemplate-smsmessage>
+                                         smsMessage :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVerificationMessageTemplateProperty ::
+  VerificationMessageTemplateProperty
+mkVerificationMessageTemplateProperty
+  = VerificationMessageTemplateProperty
+      {haddock_workaround_ = (), defaultEmailOption = Prelude.Nothing,
+       emailMessage = Prelude.Nothing,
+       emailMessageByLink = Prelude.Nothing,
+       emailSubject = Prelude.Nothing,
+       emailSubjectByLink = Prelude.Nothing, smsMessage = Prelude.Nothing}
+instance ToResourceProperties VerificationMessageTemplateProperty where
+  toResourceProperties VerificationMessageTemplateProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPool.VerificationMessageTemplate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DefaultEmailOption" Prelude.<$> defaultEmailOption,
+                            (JSON..=) "EmailMessage" Prelude.<$> emailMessage,
+                            (JSON..=) "EmailMessageByLink" Prelude.<$> emailMessageByLink,
+                            (JSON..=) "EmailSubject" Prelude.<$> emailSubject,
+                            (JSON..=) "EmailSubjectByLink" Prelude.<$> emailSubjectByLink,
+                            (JSON..=) "SmsMessage" Prelude.<$> smsMessage])}
+instance JSON.ToJSON VerificationMessageTemplateProperty where
+  toJSON VerificationMessageTemplateProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DefaultEmailOption" Prelude.<$> defaultEmailOption,
+               (JSON..=) "EmailMessage" Prelude.<$> emailMessage,
+               (JSON..=) "EmailMessageByLink" Prelude.<$> emailMessageByLink,
+               (JSON..=) "EmailSubject" Prelude.<$> emailSubject,
+               (JSON..=) "EmailSubjectByLink" Prelude.<$> emailSubjectByLink,
+               (JSON..=) "SmsMessage" Prelude.<$> smsMessage]))
+instance Property "DefaultEmailOption" VerificationMessageTemplateProperty where
+  type PropertyType "DefaultEmailOption" VerificationMessageTemplateProperty = Value Prelude.Text
+  set newValue VerificationMessageTemplateProperty {..}
+    = VerificationMessageTemplateProperty
+        {defaultEmailOption = Prelude.pure newValue, ..}
+instance Property "EmailMessage" VerificationMessageTemplateProperty where
+  type PropertyType "EmailMessage" VerificationMessageTemplateProperty = Value Prelude.Text
+  set newValue VerificationMessageTemplateProperty {..}
+    = VerificationMessageTemplateProperty
+        {emailMessage = Prelude.pure newValue, ..}
+instance Property "EmailMessageByLink" VerificationMessageTemplateProperty where
+  type PropertyType "EmailMessageByLink" VerificationMessageTemplateProperty = Value Prelude.Text
+  set newValue VerificationMessageTemplateProperty {..}
+    = VerificationMessageTemplateProperty
+        {emailMessageByLink = Prelude.pure newValue, ..}
+instance Property "EmailSubject" VerificationMessageTemplateProperty where
+  type PropertyType "EmailSubject" VerificationMessageTemplateProperty = Value Prelude.Text
+  set newValue VerificationMessageTemplateProperty {..}
+    = VerificationMessageTemplateProperty
+        {emailSubject = Prelude.pure newValue, ..}
+instance Property "EmailSubjectByLink" VerificationMessageTemplateProperty where
+  type PropertyType "EmailSubjectByLink" VerificationMessageTemplateProperty = Value Prelude.Text
+  set newValue VerificationMessageTemplateProperty {..}
+    = VerificationMessageTemplateProperty
+        {emailSubjectByLink = Prelude.pure newValue, ..}
+instance Property "SmsMessage" VerificationMessageTemplateProperty where
+  type PropertyType "SmsMessage" VerificationMessageTemplateProperty = Value Prelude.Text
+  set newValue VerificationMessageTemplateProperty {..}
+    = VerificationMessageTemplateProperty
+        {smsMessage = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPool/VerificationMessageTemplateProperty.hs-boot b/gen/Stratosphere/Cognito/UserPool/VerificationMessageTemplateProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPool/VerificationMessageTemplateProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPool.VerificationMessageTemplateProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VerificationMessageTemplateProperty :: Prelude.Type
+instance ToResourceProperties VerificationMessageTemplateProperty
+instance Prelude.Eq VerificationMessageTemplateProperty
+instance Prelude.Show VerificationMessageTemplateProperty
+instance JSON.ToJSON VerificationMessageTemplateProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolClient.hs b/gen/Stratosphere/Cognito/UserPoolClient.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolClient.hs
@@ -0,0 +1,256 @@
+module Stratosphere.Cognito.UserPoolClient (
+        module Exports, UserPoolClient(..), mkUserPoolClient
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolClient.AnalyticsConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolClient.RefreshTokenRotationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolClient.TokenValidityUnitsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolClient
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html>
+    UserPoolClient {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-accesstokenvalidity>
+                    accessTokenValidity :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-allowedoauthflows>
+                    allowedOAuthFlows :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-allowedoauthflowsuserpoolclient>
+                    allowedOAuthFlowsUserPoolClient :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-allowedoauthscopes>
+                    allowedOAuthScopes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-analyticsconfiguration>
+                    analyticsConfiguration :: (Prelude.Maybe AnalyticsConfigurationProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-authsessionvalidity>
+                    authSessionValidity :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-callbackurls>
+                    callbackURLs :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-clientname>
+                    clientName :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-defaultredirecturi>
+                    defaultRedirectURI :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-enablepropagateadditionalusercontextdata>
+                    enablePropagateAdditionalUserContextData :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-enabletokenrevocation>
+                    enableTokenRevocation :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-explicitauthflows>
+                    explicitAuthFlows :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-generatesecret>
+                    generateSecret :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-idtokenvalidity>
+                    idTokenValidity :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-logouturls>
+                    logoutURLs :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-preventuserexistenceerrors>
+                    preventUserExistenceErrors :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-readattributes>
+                    readAttributes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-refreshtokenrotation>
+                    refreshTokenRotation :: (Prelude.Maybe RefreshTokenRotationProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-refreshtokenvalidity>
+                    refreshTokenValidity :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-supportedidentityproviders>
+                    supportedIdentityProviders :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-tokenvalidityunits>
+                    tokenValidityUnits :: (Prelude.Maybe TokenValidityUnitsProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-userpoolid>
+                    userPoolId :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-writeattributes>
+                    writeAttributes :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolClient :: Value Prelude.Text -> UserPoolClient
+mkUserPoolClient userPoolId
+  = UserPoolClient
+      {haddock_workaround_ = (), userPoolId = userPoolId,
+       accessTokenValidity = Prelude.Nothing,
+       allowedOAuthFlows = Prelude.Nothing,
+       allowedOAuthFlowsUserPoolClient = Prelude.Nothing,
+       allowedOAuthScopes = Prelude.Nothing,
+       analyticsConfiguration = Prelude.Nothing,
+       authSessionValidity = Prelude.Nothing,
+       callbackURLs = Prelude.Nothing, clientName = Prelude.Nothing,
+       defaultRedirectURI = Prelude.Nothing,
+       enablePropagateAdditionalUserContextData = Prelude.Nothing,
+       enableTokenRevocation = Prelude.Nothing,
+       explicitAuthFlows = Prelude.Nothing,
+       generateSecret = Prelude.Nothing,
+       idTokenValidity = Prelude.Nothing, logoutURLs = Prelude.Nothing,
+       preventUserExistenceErrors = Prelude.Nothing,
+       readAttributes = Prelude.Nothing,
+       refreshTokenRotation = Prelude.Nothing,
+       refreshTokenValidity = Prelude.Nothing,
+       supportedIdentityProviders = Prelude.Nothing,
+       tokenValidityUnits = Prelude.Nothing,
+       writeAttributes = Prelude.Nothing}
+instance ToResourceProperties UserPoolClient where
+  toResourceProperties UserPoolClient {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolClient",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccessTokenValidity" Prelude.<$> accessTokenValidity,
+                               (JSON..=) "AllowedOAuthFlows" Prelude.<$> allowedOAuthFlows,
+                               (JSON..=) "AllowedOAuthFlowsUserPoolClient"
+                                 Prelude.<$> allowedOAuthFlowsUserPoolClient,
+                               (JSON..=) "AllowedOAuthScopes" Prelude.<$> allowedOAuthScopes,
+                               (JSON..=) "AnalyticsConfiguration"
+                                 Prelude.<$> analyticsConfiguration,
+                               (JSON..=) "AuthSessionValidity" Prelude.<$> authSessionValidity,
+                               (JSON..=) "CallbackURLs" Prelude.<$> callbackURLs,
+                               (JSON..=) "ClientName" Prelude.<$> clientName,
+                               (JSON..=) "DefaultRedirectURI" Prelude.<$> defaultRedirectURI,
+                               (JSON..=) "EnablePropagateAdditionalUserContextData"
+                                 Prelude.<$> enablePropagateAdditionalUserContextData,
+                               (JSON..=) "EnableTokenRevocation"
+                                 Prelude.<$> enableTokenRevocation,
+                               (JSON..=) "ExplicitAuthFlows" Prelude.<$> explicitAuthFlows,
+                               (JSON..=) "GenerateSecret" Prelude.<$> generateSecret,
+                               (JSON..=) "IdTokenValidity" Prelude.<$> idTokenValidity,
+                               (JSON..=) "LogoutURLs" Prelude.<$> logoutURLs,
+                               (JSON..=) "PreventUserExistenceErrors"
+                                 Prelude.<$> preventUserExistenceErrors,
+                               (JSON..=) "ReadAttributes" Prelude.<$> readAttributes,
+                               (JSON..=) "RefreshTokenRotation" Prelude.<$> refreshTokenRotation,
+                               (JSON..=) "RefreshTokenValidity" Prelude.<$> refreshTokenValidity,
+                               (JSON..=) "SupportedIdentityProviders"
+                                 Prelude.<$> supportedIdentityProviders,
+                               (JSON..=) "TokenValidityUnits" Prelude.<$> tokenValidityUnits,
+                               (JSON..=) "WriteAttributes" Prelude.<$> writeAttributes]))}
+instance JSON.ToJSON UserPoolClient where
+  toJSON UserPoolClient {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccessTokenValidity" Prelude.<$> accessTokenValidity,
+                  (JSON..=) "AllowedOAuthFlows" Prelude.<$> allowedOAuthFlows,
+                  (JSON..=) "AllowedOAuthFlowsUserPoolClient"
+                    Prelude.<$> allowedOAuthFlowsUserPoolClient,
+                  (JSON..=) "AllowedOAuthScopes" Prelude.<$> allowedOAuthScopes,
+                  (JSON..=) "AnalyticsConfiguration"
+                    Prelude.<$> analyticsConfiguration,
+                  (JSON..=) "AuthSessionValidity" Prelude.<$> authSessionValidity,
+                  (JSON..=) "CallbackURLs" Prelude.<$> callbackURLs,
+                  (JSON..=) "ClientName" Prelude.<$> clientName,
+                  (JSON..=) "DefaultRedirectURI" Prelude.<$> defaultRedirectURI,
+                  (JSON..=) "EnablePropagateAdditionalUserContextData"
+                    Prelude.<$> enablePropagateAdditionalUserContextData,
+                  (JSON..=) "EnableTokenRevocation"
+                    Prelude.<$> enableTokenRevocation,
+                  (JSON..=) "ExplicitAuthFlows" Prelude.<$> explicitAuthFlows,
+                  (JSON..=) "GenerateSecret" Prelude.<$> generateSecret,
+                  (JSON..=) "IdTokenValidity" Prelude.<$> idTokenValidity,
+                  (JSON..=) "LogoutURLs" Prelude.<$> logoutURLs,
+                  (JSON..=) "PreventUserExistenceErrors"
+                    Prelude.<$> preventUserExistenceErrors,
+                  (JSON..=) "ReadAttributes" Prelude.<$> readAttributes,
+                  (JSON..=) "RefreshTokenRotation" Prelude.<$> refreshTokenRotation,
+                  (JSON..=) "RefreshTokenValidity" Prelude.<$> refreshTokenValidity,
+                  (JSON..=) "SupportedIdentityProviders"
+                    Prelude.<$> supportedIdentityProviders,
+                  (JSON..=) "TokenValidityUnits" Prelude.<$> tokenValidityUnits,
+                  (JSON..=) "WriteAttributes" Prelude.<$> writeAttributes])))
+instance Property "AccessTokenValidity" UserPoolClient where
+  type PropertyType "AccessTokenValidity" UserPoolClient = Value Prelude.Integer
+  set newValue UserPoolClient {..}
+    = UserPoolClient {accessTokenValidity = Prelude.pure newValue, ..}
+instance Property "AllowedOAuthFlows" UserPoolClient where
+  type PropertyType "AllowedOAuthFlows" UserPoolClient = ValueList Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {allowedOAuthFlows = Prelude.pure newValue, ..}
+instance Property "AllowedOAuthFlowsUserPoolClient" UserPoolClient where
+  type PropertyType "AllowedOAuthFlowsUserPoolClient" UserPoolClient = Value Prelude.Bool
+  set newValue UserPoolClient {..}
+    = UserPoolClient
+        {allowedOAuthFlowsUserPoolClient = Prelude.pure newValue, ..}
+instance Property "AllowedOAuthScopes" UserPoolClient where
+  type PropertyType "AllowedOAuthScopes" UserPoolClient = ValueList Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {allowedOAuthScopes = Prelude.pure newValue, ..}
+instance Property "AnalyticsConfiguration" UserPoolClient where
+  type PropertyType "AnalyticsConfiguration" UserPoolClient = AnalyticsConfigurationProperty
+  set newValue UserPoolClient {..}
+    = UserPoolClient
+        {analyticsConfiguration = Prelude.pure newValue, ..}
+instance Property "AuthSessionValidity" UserPoolClient where
+  type PropertyType "AuthSessionValidity" UserPoolClient = Value Prelude.Integer
+  set newValue UserPoolClient {..}
+    = UserPoolClient {authSessionValidity = Prelude.pure newValue, ..}
+instance Property "CallbackURLs" UserPoolClient where
+  type PropertyType "CallbackURLs" UserPoolClient = ValueList Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {callbackURLs = Prelude.pure newValue, ..}
+instance Property "ClientName" UserPoolClient where
+  type PropertyType "ClientName" UserPoolClient = Value Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {clientName = Prelude.pure newValue, ..}
+instance Property "DefaultRedirectURI" UserPoolClient where
+  type PropertyType "DefaultRedirectURI" UserPoolClient = Value Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {defaultRedirectURI = Prelude.pure newValue, ..}
+instance Property "EnablePropagateAdditionalUserContextData" UserPoolClient where
+  type PropertyType "EnablePropagateAdditionalUserContextData" UserPoolClient = Value Prelude.Bool
+  set newValue UserPoolClient {..}
+    = UserPoolClient
+        {enablePropagateAdditionalUserContextData = Prelude.pure newValue,
+         ..}
+instance Property "EnableTokenRevocation" UserPoolClient where
+  type PropertyType "EnableTokenRevocation" UserPoolClient = Value Prelude.Bool
+  set newValue UserPoolClient {..}
+    = UserPoolClient
+        {enableTokenRevocation = Prelude.pure newValue, ..}
+instance Property "ExplicitAuthFlows" UserPoolClient where
+  type PropertyType "ExplicitAuthFlows" UserPoolClient = ValueList Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {explicitAuthFlows = Prelude.pure newValue, ..}
+instance Property "GenerateSecret" UserPoolClient where
+  type PropertyType "GenerateSecret" UserPoolClient = Value Prelude.Bool
+  set newValue UserPoolClient {..}
+    = UserPoolClient {generateSecret = Prelude.pure newValue, ..}
+instance Property "IdTokenValidity" UserPoolClient where
+  type PropertyType "IdTokenValidity" UserPoolClient = Value Prelude.Integer
+  set newValue UserPoolClient {..}
+    = UserPoolClient {idTokenValidity = Prelude.pure newValue, ..}
+instance Property "LogoutURLs" UserPoolClient where
+  type PropertyType "LogoutURLs" UserPoolClient = ValueList Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {logoutURLs = Prelude.pure newValue, ..}
+instance Property "PreventUserExistenceErrors" UserPoolClient where
+  type PropertyType "PreventUserExistenceErrors" UserPoolClient = Value Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient
+        {preventUserExistenceErrors = Prelude.pure newValue, ..}
+instance Property "ReadAttributes" UserPoolClient where
+  type PropertyType "ReadAttributes" UserPoolClient = ValueList Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {readAttributes = Prelude.pure newValue, ..}
+instance Property "RefreshTokenRotation" UserPoolClient where
+  type PropertyType "RefreshTokenRotation" UserPoolClient = RefreshTokenRotationProperty
+  set newValue UserPoolClient {..}
+    = UserPoolClient {refreshTokenRotation = Prelude.pure newValue, ..}
+instance Property "RefreshTokenValidity" UserPoolClient where
+  type PropertyType "RefreshTokenValidity" UserPoolClient = Value Prelude.Integer
+  set newValue UserPoolClient {..}
+    = UserPoolClient {refreshTokenValidity = Prelude.pure newValue, ..}
+instance Property "SupportedIdentityProviders" UserPoolClient where
+  type PropertyType "SupportedIdentityProviders" UserPoolClient = ValueList Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient
+        {supportedIdentityProviders = Prelude.pure newValue, ..}
+instance Property "TokenValidityUnits" UserPoolClient where
+  type PropertyType "TokenValidityUnits" UserPoolClient = TokenValidityUnitsProperty
+  set newValue UserPoolClient {..}
+    = UserPoolClient {tokenValidityUnits = Prelude.pure newValue, ..}
+instance Property "UserPoolId" UserPoolClient where
+  type PropertyType "UserPoolId" UserPoolClient = Value Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {userPoolId = newValue, ..}
+instance Property "WriteAttributes" UserPoolClient where
+  type PropertyType "WriteAttributes" UserPoolClient = ValueList Prelude.Text
+  set newValue UserPoolClient {..}
+    = UserPoolClient {writeAttributes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolClient/AnalyticsConfigurationProperty.hs b/gen/Stratosphere/Cognito/UserPoolClient/AnalyticsConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolClient/AnalyticsConfigurationProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.Cognito.UserPoolClient.AnalyticsConfigurationProperty (
+        AnalyticsConfigurationProperty(..),
+        mkAnalyticsConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalyticsConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-analyticsconfiguration.html>
+    AnalyticsConfigurationProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-analyticsconfiguration.html#cfn-cognito-userpoolclient-analyticsconfiguration-applicationarn>
+                                    applicationArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-analyticsconfiguration.html#cfn-cognito-userpoolclient-analyticsconfiguration-applicationid>
+                                    applicationId :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-analyticsconfiguration.html#cfn-cognito-userpoolclient-analyticsconfiguration-externalid>
+                                    externalId :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-analyticsconfiguration.html#cfn-cognito-userpoolclient-analyticsconfiguration-rolearn>
+                                    roleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-analyticsconfiguration.html#cfn-cognito-userpoolclient-analyticsconfiguration-userdatashared>
+                                    userDataShared :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalyticsConfigurationProperty :: AnalyticsConfigurationProperty
+mkAnalyticsConfigurationProperty
+  = AnalyticsConfigurationProperty
+      {haddock_workaround_ = (), applicationArn = Prelude.Nothing,
+       applicationId = Prelude.Nothing, externalId = Prelude.Nothing,
+       roleArn = Prelude.Nothing, userDataShared = Prelude.Nothing}
+instance ToResourceProperties AnalyticsConfigurationProperty where
+  toResourceProperties AnalyticsConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolClient.AnalyticsConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ApplicationArn" Prelude.<$> applicationArn,
+                            (JSON..=) "ApplicationId" Prelude.<$> applicationId,
+                            (JSON..=) "ExternalId" Prelude.<$> externalId,
+                            (JSON..=) "RoleArn" Prelude.<$> roleArn,
+                            (JSON..=) "UserDataShared" Prelude.<$> userDataShared])}
+instance JSON.ToJSON AnalyticsConfigurationProperty where
+  toJSON AnalyticsConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ApplicationArn" Prelude.<$> applicationArn,
+               (JSON..=) "ApplicationId" Prelude.<$> applicationId,
+               (JSON..=) "ExternalId" Prelude.<$> externalId,
+               (JSON..=) "RoleArn" Prelude.<$> roleArn,
+               (JSON..=) "UserDataShared" Prelude.<$> userDataShared]))
+instance Property "ApplicationArn" AnalyticsConfigurationProperty where
+  type PropertyType "ApplicationArn" AnalyticsConfigurationProperty = Value Prelude.Text
+  set newValue AnalyticsConfigurationProperty {..}
+    = AnalyticsConfigurationProperty
+        {applicationArn = Prelude.pure newValue, ..}
+instance Property "ApplicationId" AnalyticsConfigurationProperty where
+  type PropertyType "ApplicationId" AnalyticsConfigurationProperty = Value Prelude.Text
+  set newValue AnalyticsConfigurationProperty {..}
+    = AnalyticsConfigurationProperty
+        {applicationId = Prelude.pure newValue, ..}
+instance Property "ExternalId" AnalyticsConfigurationProperty where
+  type PropertyType "ExternalId" AnalyticsConfigurationProperty = Value Prelude.Text
+  set newValue AnalyticsConfigurationProperty {..}
+    = AnalyticsConfigurationProperty
+        {externalId = Prelude.pure newValue, ..}
+instance Property "RoleArn" AnalyticsConfigurationProperty where
+  type PropertyType "RoleArn" AnalyticsConfigurationProperty = Value Prelude.Text
+  set newValue AnalyticsConfigurationProperty {..}
+    = AnalyticsConfigurationProperty
+        {roleArn = Prelude.pure newValue, ..}
+instance Property "UserDataShared" AnalyticsConfigurationProperty where
+  type PropertyType "UserDataShared" AnalyticsConfigurationProperty = Value Prelude.Bool
+  set newValue AnalyticsConfigurationProperty {..}
+    = AnalyticsConfigurationProperty
+        {userDataShared = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolClient/AnalyticsConfigurationProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolClient/AnalyticsConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolClient/AnalyticsConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolClient.AnalyticsConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalyticsConfigurationProperty :: Prelude.Type
+instance ToResourceProperties AnalyticsConfigurationProperty
+instance Prelude.Eq AnalyticsConfigurationProperty
+instance Prelude.Show AnalyticsConfigurationProperty
+instance JSON.ToJSON AnalyticsConfigurationProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolClient/RefreshTokenRotationProperty.hs b/gen/Stratosphere/Cognito/UserPoolClient/RefreshTokenRotationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolClient/RefreshTokenRotationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.Cognito.UserPoolClient.RefreshTokenRotationProperty (
+        RefreshTokenRotationProperty(..), mkRefreshTokenRotationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RefreshTokenRotationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-refreshtokenrotation.html>
+    RefreshTokenRotationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-refreshtokenrotation.html#cfn-cognito-userpoolclient-refreshtokenrotation-feature>
+                                  feature :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-refreshtokenrotation.html#cfn-cognito-userpoolclient-refreshtokenrotation-retrygraceperiodseconds>
+                                  retryGracePeriodSeconds :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRefreshTokenRotationProperty :: RefreshTokenRotationProperty
+mkRefreshTokenRotationProperty
+  = RefreshTokenRotationProperty
+      {haddock_workaround_ = (), feature = Prelude.Nothing,
+       retryGracePeriodSeconds = Prelude.Nothing}
+instance ToResourceProperties RefreshTokenRotationProperty where
+  toResourceProperties RefreshTokenRotationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolClient.RefreshTokenRotation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Feature" Prelude.<$> feature,
+                            (JSON..=) "RetryGracePeriodSeconds"
+                              Prelude.<$> retryGracePeriodSeconds])}
+instance JSON.ToJSON RefreshTokenRotationProperty where
+  toJSON RefreshTokenRotationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Feature" Prelude.<$> feature,
+               (JSON..=) "RetryGracePeriodSeconds"
+                 Prelude.<$> retryGracePeriodSeconds]))
+instance Property "Feature" RefreshTokenRotationProperty where
+  type PropertyType "Feature" RefreshTokenRotationProperty = Value Prelude.Text
+  set newValue RefreshTokenRotationProperty {..}
+    = RefreshTokenRotationProperty
+        {feature = Prelude.pure newValue, ..}
+instance Property "RetryGracePeriodSeconds" RefreshTokenRotationProperty where
+  type PropertyType "RetryGracePeriodSeconds" RefreshTokenRotationProperty = Value Prelude.Integer
+  set newValue RefreshTokenRotationProperty {..}
+    = RefreshTokenRotationProperty
+        {retryGracePeriodSeconds = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolClient/RefreshTokenRotationProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolClient/RefreshTokenRotationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolClient/RefreshTokenRotationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolClient.RefreshTokenRotationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RefreshTokenRotationProperty :: Prelude.Type
+instance ToResourceProperties RefreshTokenRotationProperty
+instance Prelude.Eq RefreshTokenRotationProperty
+instance Prelude.Show RefreshTokenRotationProperty
+instance JSON.ToJSON RefreshTokenRotationProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolClient/TokenValidityUnitsProperty.hs b/gen/Stratosphere/Cognito/UserPoolClient/TokenValidityUnitsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolClient/TokenValidityUnitsProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.Cognito.UserPoolClient.TokenValidityUnitsProperty (
+        TokenValidityUnitsProperty(..), mkTokenValidityUnitsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TokenValidityUnitsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-tokenvalidityunits.html>
+    TokenValidityUnitsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-tokenvalidityunits.html#cfn-cognito-userpoolclient-tokenvalidityunits-accesstoken>
+                                accessToken :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-tokenvalidityunits.html#cfn-cognito-userpoolclient-tokenvalidityunits-idtoken>
+                                idToken :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolclient-tokenvalidityunits.html#cfn-cognito-userpoolclient-tokenvalidityunits-refreshtoken>
+                                refreshToken :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTokenValidityUnitsProperty :: TokenValidityUnitsProperty
+mkTokenValidityUnitsProperty
+  = TokenValidityUnitsProperty
+      {haddock_workaround_ = (), accessToken = Prelude.Nothing,
+       idToken = Prelude.Nothing, refreshToken = Prelude.Nothing}
+instance ToResourceProperties TokenValidityUnitsProperty where
+  toResourceProperties TokenValidityUnitsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolClient.TokenValidityUnits",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AccessToken" Prelude.<$> accessToken,
+                            (JSON..=) "IdToken" Prelude.<$> idToken,
+                            (JSON..=) "RefreshToken" Prelude.<$> refreshToken])}
+instance JSON.ToJSON TokenValidityUnitsProperty where
+  toJSON TokenValidityUnitsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AccessToken" Prelude.<$> accessToken,
+               (JSON..=) "IdToken" Prelude.<$> idToken,
+               (JSON..=) "RefreshToken" Prelude.<$> refreshToken]))
+instance Property "AccessToken" TokenValidityUnitsProperty where
+  type PropertyType "AccessToken" TokenValidityUnitsProperty = Value Prelude.Text
+  set newValue TokenValidityUnitsProperty {..}
+    = TokenValidityUnitsProperty
+        {accessToken = Prelude.pure newValue, ..}
+instance Property "IdToken" TokenValidityUnitsProperty where
+  type PropertyType "IdToken" TokenValidityUnitsProperty = Value Prelude.Text
+  set newValue TokenValidityUnitsProperty {..}
+    = TokenValidityUnitsProperty {idToken = Prelude.pure newValue, ..}
+instance Property "RefreshToken" TokenValidityUnitsProperty where
+  type PropertyType "RefreshToken" TokenValidityUnitsProperty = Value Prelude.Text
+  set newValue TokenValidityUnitsProperty {..}
+    = TokenValidityUnitsProperty
+        {refreshToken = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolClient/TokenValidityUnitsProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolClient/TokenValidityUnitsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolClient/TokenValidityUnitsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolClient.TokenValidityUnitsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TokenValidityUnitsProperty :: Prelude.Type
+instance ToResourceProperties TokenValidityUnitsProperty
+instance Prelude.Eq TokenValidityUnitsProperty
+instance Prelude.Show TokenValidityUnitsProperty
+instance JSON.ToJSON TokenValidityUnitsProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolDomain.hs b/gen/Stratosphere/Cognito/UserPoolDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolDomain.hs
@@ -0,0 +1,64 @@
+module Stratosphere.Cognito.UserPoolDomain (
+        module Exports, UserPoolDomain(..), mkUserPoolDomain
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolDomain.CustomDomainConfigTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolDomain
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooldomain.html>
+    UserPoolDomain {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooldomain.html#cfn-cognito-userpooldomain-customdomainconfig>
+                    customDomainConfig :: (Prelude.Maybe CustomDomainConfigTypeProperty),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooldomain.html#cfn-cognito-userpooldomain-domain>
+                    domain :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooldomain.html#cfn-cognito-userpooldomain-managedloginversion>
+                    managedLoginVersion :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooldomain.html#cfn-cognito-userpooldomain-userpoolid>
+                    userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolDomain ::
+  Value Prelude.Text -> Value Prelude.Text -> UserPoolDomain
+mkUserPoolDomain domain userPoolId
+  = UserPoolDomain
+      {haddock_workaround_ = (), domain = domain,
+       userPoolId = userPoolId, customDomainConfig = Prelude.Nothing,
+       managedLoginVersion = Prelude.Nothing}
+instance ToResourceProperties UserPoolDomain where
+  toResourceProperties UserPoolDomain {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolDomain",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Domain" JSON..= domain, "UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CustomDomainConfig" Prelude.<$> customDomainConfig,
+                               (JSON..=) "ManagedLoginVersion" Prelude.<$> managedLoginVersion]))}
+instance JSON.ToJSON UserPoolDomain where
+  toJSON UserPoolDomain {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Domain" JSON..= domain, "UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "CustomDomainConfig" Prelude.<$> customDomainConfig,
+                  (JSON..=) "ManagedLoginVersion" Prelude.<$> managedLoginVersion])))
+instance Property "CustomDomainConfig" UserPoolDomain where
+  type PropertyType "CustomDomainConfig" UserPoolDomain = CustomDomainConfigTypeProperty
+  set newValue UserPoolDomain {..}
+    = UserPoolDomain {customDomainConfig = Prelude.pure newValue, ..}
+instance Property "Domain" UserPoolDomain where
+  type PropertyType "Domain" UserPoolDomain = Value Prelude.Text
+  set newValue UserPoolDomain {..}
+    = UserPoolDomain {domain = newValue, ..}
+instance Property "ManagedLoginVersion" UserPoolDomain where
+  type PropertyType "ManagedLoginVersion" UserPoolDomain = Value Prelude.Integer
+  set newValue UserPoolDomain {..}
+    = UserPoolDomain {managedLoginVersion = Prelude.pure newValue, ..}
+instance Property "UserPoolId" UserPoolDomain where
+  type PropertyType "UserPoolId" UserPoolDomain = Value Prelude.Text
+  set newValue UserPoolDomain {..}
+    = UserPoolDomain {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolDomain/CustomDomainConfigTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolDomain/CustomDomainConfigTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolDomain/CustomDomainConfigTypeProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.Cognito.UserPoolDomain.CustomDomainConfigTypeProperty (
+        CustomDomainConfigTypeProperty(..),
+        mkCustomDomainConfigTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomDomainConfigTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpooldomain-customdomainconfigtype.html>
+    CustomDomainConfigTypeProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpooldomain-customdomainconfigtype.html#cfn-cognito-userpooldomain-customdomainconfigtype-certificatearn>
+                                    certificateArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomDomainConfigTypeProperty :: CustomDomainConfigTypeProperty
+mkCustomDomainConfigTypeProperty
+  = CustomDomainConfigTypeProperty
+      {haddock_workaround_ = (), certificateArn = Prelude.Nothing}
+instance ToResourceProperties CustomDomainConfigTypeProperty where
+  toResourceProperties CustomDomainConfigTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolDomain.CustomDomainConfigType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CertificateArn" Prelude.<$> certificateArn])}
+instance JSON.ToJSON CustomDomainConfigTypeProperty where
+  toJSON CustomDomainConfigTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CertificateArn" Prelude.<$> certificateArn]))
+instance Property "CertificateArn" CustomDomainConfigTypeProperty where
+  type PropertyType "CertificateArn" CustomDomainConfigTypeProperty = Value Prelude.Text
+  set newValue CustomDomainConfigTypeProperty {..}
+    = CustomDomainConfigTypeProperty
+        {certificateArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolDomain/CustomDomainConfigTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolDomain/CustomDomainConfigTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolDomain/CustomDomainConfigTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolDomain.CustomDomainConfigTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomDomainConfigTypeProperty :: Prelude.Type
+instance ToResourceProperties CustomDomainConfigTypeProperty
+instance Prelude.Eq CustomDomainConfigTypeProperty
+instance Prelude.Show CustomDomainConfigTypeProperty
+instance JSON.ToJSON CustomDomainConfigTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolGroup.hs b/gen/Stratosphere/Cognito/UserPoolGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolGroup.hs
@@ -0,0 +1,72 @@
+module Stratosphere.Cognito.UserPoolGroup (
+        UserPoolGroup(..), mkUserPoolGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html>
+    UserPoolGroup {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-description>
+                   description :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-groupname>
+                   groupName :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-precedence>
+                   precedence :: (Prelude.Maybe (Value Prelude.Integer)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-rolearn>
+                   roleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-userpoolid>
+                   userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolGroup :: Value Prelude.Text -> UserPoolGroup
+mkUserPoolGroup userPoolId
+  = UserPoolGroup
+      {haddock_workaround_ = (), userPoolId = userPoolId,
+       description = Prelude.Nothing, groupName = Prelude.Nothing,
+       precedence = Prelude.Nothing, roleArn = Prelude.Nothing}
+instance ToResourceProperties UserPoolGroup where
+  toResourceProperties UserPoolGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolGroup",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "GroupName" Prelude.<$> groupName,
+                               (JSON..=) "Precedence" Prelude.<$> precedence,
+                               (JSON..=) "RoleArn" Prelude.<$> roleArn]))}
+instance JSON.ToJSON UserPoolGroup where
+  toJSON UserPoolGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "GroupName" Prelude.<$> groupName,
+                  (JSON..=) "Precedence" Prelude.<$> precedence,
+                  (JSON..=) "RoleArn" Prelude.<$> roleArn])))
+instance Property "Description" UserPoolGroup where
+  type PropertyType "Description" UserPoolGroup = Value Prelude.Text
+  set newValue UserPoolGroup {..}
+    = UserPoolGroup {description = Prelude.pure newValue, ..}
+instance Property "GroupName" UserPoolGroup where
+  type PropertyType "GroupName" UserPoolGroup = Value Prelude.Text
+  set newValue UserPoolGroup {..}
+    = UserPoolGroup {groupName = Prelude.pure newValue, ..}
+instance Property "Precedence" UserPoolGroup where
+  type PropertyType "Precedence" UserPoolGroup = Value Prelude.Integer
+  set newValue UserPoolGroup {..}
+    = UserPoolGroup {precedence = Prelude.pure newValue, ..}
+instance Property "RoleArn" UserPoolGroup where
+  type PropertyType "RoleArn" UserPoolGroup = Value Prelude.Text
+  set newValue UserPoolGroup {..}
+    = UserPoolGroup {roleArn = Prelude.pure newValue, ..}
+instance Property "UserPoolId" UserPoolGroup where
+  type PropertyType "UserPoolId" UserPoolGroup = Value Prelude.Text
+  set newValue UserPoolGroup {..}
+    = UserPoolGroup {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolIdentityProvider.hs b/gen/Stratosphere/Cognito/UserPoolIdentityProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolIdentityProvider.hs
@@ -0,0 +1,91 @@
+module Stratosphere.Cognito.UserPoolIdentityProvider (
+        UserPoolIdentityProvider(..), mkUserPoolIdentityProvider
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolIdentityProvider
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolidentityprovider.html>
+    UserPoolIdentityProvider {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolidentityprovider.html#cfn-cognito-userpoolidentityprovider-attributemapping>
+                              attributeMapping :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolidentityprovider.html#cfn-cognito-userpoolidentityprovider-idpidentifiers>
+                              idpIdentifiers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolidentityprovider.html#cfn-cognito-userpoolidentityprovider-providerdetails>
+                              providerDetails :: (Prelude.Map Prelude.Text (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolidentityprovider.html#cfn-cognito-userpoolidentityprovider-providername>
+                              providerName :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolidentityprovider.html#cfn-cognito-userpoolidentityprovider-providertype>
+                              providerType :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolidentityprovider.html#cfn-cognito-userpoolidentityprovider-userpoolid>
+                              userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolIdentityProvider ::
+  Prelude.Map Prelude.Text (Value Prelude.Text)
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text -> UserPoolIdentityProvider
+mkUserPoolIdentityProvider
+  providerDetails
+  providerName
+  providerType
+  userPoolId
+  = UserPoolIdentityProvider
+      {haddock_workaround_ = (), providerDetails = providerDetails,
+       providerName = providerName, providerType = providerType,
+       userPoolId = userPoolId, attributeMapping = Prelude.Nothing,
+       idpIdentifiers = Prelude.Nothing}
+instance ToResourceProperties UserPoolIdentityProvider where
+  toResourceProperties UserPoolIdentityProvider {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolIdentityProvider",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ProviderDetails" JSON..= providerDetails,
+                            "ProviderName" JSON..= providerName,
+                            "ProviderType" JSON..= providerType,
+                            "UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AttributeMapping" Prelude.<$> attributeMapping,
+                               (JSON..=) "IdpIdentifiers" Prelude.<$> idpIdentifiers]))}
+instance JSON.ToJSON UserPoolIdentityProvider where
+  toJSON UserPoolIdentityProvider {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ProviderDetails" JSON..= providerDetails,
+               "ProviderName" JSON..= providerName,
+               "ProviderType" JSON..= providerType,
+               "UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AttributeMapping" Prelude.<$> attributeMapping,
+                  (JSON..=) "IdpIdentifiers" Prelude.<$> idpIdentifiers])))
+instance Property "AttributeMapping" UserPoolIdentityProvider where
+  type PropertyType "AttributeMapping" UserPoolIdentityProvider = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue UserPoolIdentityProvider {..}
+    = UserPoolIdentityProvider
+        {attributeMapping = Prelude.pure newValue, ..}
+instance Property "IdpIdentifiers" UserPoolIdentityProvider where
+  type PropertyType "IdpIdentifiers" UserPoolIdentityProvider = ValueList Prelude.Text
+  set newValue UserPoolIdentityProvider {..}
+    = UserPoolIdentityProvider
+        {idpIdentifiers = Prelude.pure newValue, ..}
+instance Property "ProviderDetails" UserPoolIdentityProvider where
+  type PropertyType "ProviderDetails" UserPoolIdentityProvider = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue UserPoolIdentityProvider {..}
+    = UserPoolIdentityProvider {providerDetails = newValue, ..}
+instance Property "ProviderName" UserPoolIdentityProvider where
+  type PropertyType "ProviderName" UserPoolIdentityProvider = Value Prelude.Text
+  set newValue UserPoolIdentityProvider {..}
+    = UserPoolIdentityProvider {providerName = newValue, ..}
+instance Property "ProviderType" UserPoolIdentityProvider where
+  type PropertyType "ProviderType" UserPoolIdentityProvider = Value Prelude.Text
+  set newValue UserPoolIdentityProvider {..}
+    = UserPoolIdentityProvider {providerType = newValue, ..}
+instance Property "UserPoolId" UserPoolIdentityProvider where
+  type PropertyType "UserPoolId" UserPoolIdentityProvider = Value Prelude.Text
+  set newValue UserPoolIdentityProvider {..}
+    = UserPoolIdentityProvider {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolResourceServer.hs b/gen/Stratosphere/Cognito/UserPoolResourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolResourceServer.hs
@@ -0,0 +1,64 @@
+module Stratosphere.Cognito.UserPoolResourceServer (
+        module Exports, UserPoolResourceServer(..),
+        mkUserPoolResourceServer
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolResourceServer.ResourceServerScopeTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolResourceServer
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolresourceserver.html>
+    UserPoolResourceServer {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolresourceserver.html#cfn-cognito-userpoolresourceserver-identifier>
+                            identifier :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolresourceserver.html#cfn-cognito-userpoolresourceserver-name>
+                            name :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolresourceserver.html#cfn-cognito-userpoolresourceserver-scopes>
+                            scopes :: (Prelude.Maybe [ResourceServerScopeTypeProperty]),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolresourceserver.html#cfn-cognito-userpoolresourceserver-userpoolid>
+                            userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolResourceServer ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> UserPoolResourceServer
+mkUserPoolResourceServer identifier name userPoolId
+  = UserPoolResourceServer
+      {haddock_workaround_ = (), identifier = identifier, name = name,
+       userPoolId = userPoolId, scopes = Prelude.Nothing}
+instance ToResourceProperties UserPoolResourceServer where
+  toResourceProperties UserPoolResourceServer {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolResourceServer",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Identifier" JSON..= identifier, "Name" JSON..= name,
+                            "UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes [(JSON..=) "Scopes" Prelude.<$> scopes]))}
+instance JSON.ToJSON UserPoolResourceServer where
+  toJSON UserPoolResourceServer {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Identifier" JSON..= identifier, "Name" JSON..= name,
+               "UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes [(JSON..=) "Scopes" Prelude.<$> scopes])))
+instance Property "Identifier" UserPoolResourceServer where
+  type PropertyType "Identifier" UserPoolResourceServer = Value Prelude.Text
+  set newValue UserPoolResourceServer {..}
+    = UserPoolResourceServer {identifier = newValue, ..}
+instance Property "Name" UserPoolResourceServer where
+  type PropertyType "Name" UserPoolResourceServer = Value Prelude.Text
+  set newValue UserPoolResourceServer {..}
+    = UserPoolResourceServer {name = newValue, ..}
+instance Property "Scopes" UserPoolResourceServer where
+  type PropertyType "Scopes" UserPoolResourceServer = [ResourceServerScopeTypeProperty]
+  set newValue UserPoolResourceServer {..}
+    = UserPoolResourceServer {scopes = Prelude.pure newValue, ..}
+instance Property "UserPoolId" UserPoolResourceServer where
+  type PropertyType "UserPoolId" UserPoolResourceServer = Value Prelude.Text
+  set newValue UserPoolResourceServer {..}
+    = UserPoolResourceServer {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolResourceServer/ResourceServerScopeTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolResourceServer/ResourceServerScopeTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolResourceServer/ResourceServerScopeTypeProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.Cognito.UserPoolResourceServer.ResourceServerScopeTypeProperty (
+        ResourceServerScopeTypeProperty(..),
+        mkResourceServerScopeTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourceServerScopeTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolresourceserver-resourceserverscopetype.html>
+    ResourceServerScopeTypeProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolresourceserver-resourceserverscopetype.html#cfn-cognito-userpoolresourceserver-resourceserverscopetype-scopedescription>
+                                     scopeDescription :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolresourceserver-resourceserverscopetype.html#cfn-cognito-userpoolresourceserver-resourceserverscopetype-scopename>
+                                     scopeName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceServerScopeTypeProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ResourceServerScopeTypeProperty
+mkResourceServerScopeTypeProperty scopeDescription scopeName
+  = ResourceServerScopeTypeProperty
+      {haddock_workaround_ = (), scopeDescription = scopeDescription,
+       scopeName = scopeName}
+instance ToResourceProperties ResourceServerScopeTypeProperty where
+  toResourceProperties ResourceServerScopeTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolResourceServer.ResourceServerScopeType",
+         supportsTags = Prelude.False,
+         properties = ["ScopeDescription" JSON..= scopeDescription,
+                       "ScopeName" JSON..= scopeName]}
+instance JSON.ToJSON ResourceServerScopeTypeProperty where
+  toJSON ResourceServerScopeTypeProperty {..}
+    = JSON.object
+        ["ScopeDescription" JSON..= scopeDescription,
+         "ScopeName" JSON..= scopeName]
+instance Property "ScopeDescription" ResourceServerScopeTypeProperty where
+  type PropertyType "ScopeDescription" ResourceServerScopeTypeProperty = Value Prelude.Text
+  set newValue ResourceServerScopeTypeProperty {..}
+    = ResourceServerScopeTypeProperty {scopeDescription = newValue, ..}
+instance Property "ScopeName" ResourceServerScopeTypeProperty where
+  type PropertyType "ScopeName" ResourceServerScopeTypeProperty = Value Prelude.Text
+  set newValue ResourceServerScopeTypeProperty {..}
+    = ResourceServerScopeTypeProperty {scopeName = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolResourceServer/ResourceServerScopeTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolResourceServer/ResourceServerScopeTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolResourceServer/ResourceServerScopeTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolResourceServer.ResourceServerScopeTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceServerScopeTypeProperty :: Prelude.Type
+instance ToResourceProperties ResourceServerScopeTypeProperty
+instance Prelude.Eq ResourceServerScopeTypeProperty
+instance Prelude.Show ResourceServerScopeTypeProperty
+instance JSON.ToJSON ResourceServerScopeTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment.hs
@@ -0,0 +1,88 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment (
+        module Exports, UserPoolRiskConfigurationAttachment(..),
+        mkUserPoolRiskConfigurationAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverRiskConfigurationTypeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.CompromisedCredentialsRiskConfigurationTypeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.RiskExceptionConfigurationTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolRiskConfigurationAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolriskconfigurationattachment.html>
+    UserPoolRiskConfigurationAttachment {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolriskconfigurationattachment.html#cfn-cognito-userpoolriskconfigurationattachment-accounttakeoverriskconfiguration>
+                                         accountTakeoverRiskConfiguration :: (Prelude.Maybe AccountTakeoverRiskConfigurationTypeProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolriskconfigurationattachment.html#cfn-cognito-userpoolriskconfigurationattachment-clientid>
+                                         clientId :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolriskconfigurationattachment.html#cfn-cognito-userpoolriskconfigurationattachment-compromisedcredentialsriskconfiguration>
+                                         compromisedCredentialsRiskConfiguration :: (Prelude.Maybe CompromisedCredentialsRiskConfigurationTypeProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolriskconfigurationattachment.html#cfn-cognito-userpoolriskconfigurationattachment-riskexceptionconfiguration>
+                                         riskExceptionConfiguration :: (Prelude.Maybe RiskExceptionConfigurationTypeProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolriskconfigurationattachment.html#cfn-cognito-userpoolriskconfigurationattachment-userpoolid>
+                                         userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolRiskConfigurationAttachment ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> UserPoolRiskConfigurationAttachment
+mkUserPoolRiskConfigurationAttachment clientId userPoolId
+  = UserPoolRiskConfigurationAttachment
+      {haddock_workaround_ = (), clientId = clientId,
+       userPoolId = userPoolId,
+       accountTakeoverRiskConfiguration = Prelude.Nothing,
+       compromisedCredentialsRiskConfiguration = Prelude.Nothing,
+       riskExceptionConfiguration = Prelude.Nothing}
+instance ToResourceProperties UserPoolRiskConfigurationAttachment where
+  toResourceProperties UserPoolRiskConfigurationAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ClientId" JSON..= clientId, "UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccountTakeoverRiskConfiguration"
+                                 Prelude.<$> accountTakeoverRiskConfiguration,
+                               (JSON..=) "CompromisedCredentialsRiskConfiguration"
+                                 Prelude.<$> compromisedCredentialsRiskConfiguration,
+                               (JSON..=) "RiskExceptionConfiguration"
+                                 Prelude.<$> riskExceptionConfiguration]))}
+instance JSON.ToJSON UserPoolRiskConfigurationAttachment where
+  toJSON UserPoolRiskConfigurationAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ClientId" JSON..= clientId, "UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccountTakeoverRiskConfiguration"
+                    Prelude.<$> accountTakeoverRiskConfiguration,
+                  (JSON..=) "CompromisedCredentialsRiskConfiguration"
+                    Prelude.<$> compromisedCredentialsRiskConfiguration,
+                  (JSON..=) "RiskExceptionConfiguration"
+                    Prelude.<$> riskExceptionConfiguration])))
+instance Property "AccountTakeoverRiskConfiguration" UserPoolRiskConfigurationAttachment where
+  type PropertyType "AccountTakeoverRiskConfiguration" UserPoolRiskConfigurationAttachment = AccountTakeoverRiskConfigurationTypeProperty
+  set newValue UserPoolRiskConfigurationAttachment {..}
+    = UserPoolRiskConfigurationAttachment
+        {accountTakeoverRiskConfiguration = Prelude.pure newValue, ..}
+instance Property "ClientId" UserPoolRiskConfigurationAttachment where
+  type PropertyType "ClientId" UserPoolRiskConfigurationAttachment = Value Prelude.Text
+  set newValue UserPoolRiskConfigurationAttachment {..}
+    = UserPoolRiskConfigurationAttachment {clientId = newValue, ..}
+instance Property "CompromisedCredentialsRiskConfiguration" UserPoolRiskConfigurationAttachment where
+  type PropertyType "CompromisedCredentialsRiskConfiguration" UserPoolRiskConfigurationAttachment = CompromisedCredentialsRiskConfigurationTypeProperty
+  set newValue UserPoolRiskConfigurationAttachment {..}
+    = UserPoolRiskConfigurationAttachment
+        {compromisedCredentialsRiskConfiguration = Prelude.pure newValue,
+         ..}
+instance Property "RiskExceptionConfiguration" UserPoolRiskConfigurationAttachment where
+  type PropertyType "RiskExceptionConfiguration" UserPoolRiskConfigurationAttachment = RiskExceptionConfigurationTypeProperty
+  set newValue UserPoolRiskConfigurationAttachment {..}
+    = UserPoolRiskConfigurationAttachment
+        {riskExceptionConfiguration = Prelude.pure newValue, ..}
+instance Property "UserPoolId" UserPoolRiskConfigurationAttachment where
+  type PropertyType "UserPoolId" UserPoolRiskConfigurationAttachment = Value Prelude.Text
+  set newValue UserPoolRiskConfigurationAttachment {..}
+    = UserPoolRiskConfigurationAttachment {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionTypeProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverActionTypeProperty (
+        AccountTakeoverActionTypeProperty(..),
+        mkAccountTakeoverActionTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AccountTakeoverActionTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoveractiontype.html>
+    AccountTakeoverActionTypeProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoveractiontype.html#cfn-cognito-userpoolriskconfigurationattachment-accounttakeoveractiontype-eventaction>
+                                       eventAction :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoveractiontype.html#cfn-cognito-userpoolriskconfigurationattachment-accounttakeoveractiontype-notify>
+                                       notify :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccountTakeoverActionTypeProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Bool -> AccountTakeoverActionTypeProperty
+mkAccountTakeoverActionTypeProperty eventAction notify
+  = AccountTakeoverActionTypeProperty
+      {haddock_workaround_ = (), eventAction = eventAction,
+       notify = notify}
+instance ToResourceProperties AccountTakeoverActionTypeProperty where
+  toResourceProperties AccountTakeoverActionTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment.AccountTakeoverActionType",
+         supportsTags = Prelude.False,
+         properties = ["EventAction" JSON..= eventAction,
+                       "Notify" JSON..= notify]}
+instance JSON.ToJSON AccountTakeoverActionTypeProperty where
+  toJSON AccountTakeoverActionTypeProperty {..}
+    = JSON.object
+        ["EventAction" JSON..= eventAction, "Notify" JSON..= notify]
+instance Property "EventAction" AccountTakeoverActionTypeProperty where
+  type PropertyType "EventAction" AccountTakeoverActionTypeProperty = Value Prelude.Text
+  set newValue AccountTakeoverActionTypeProperty {..}
+    = AccountTakeoverActionTypeProperty {eventAction = newValue, ..}
+instance Property "Notify" AccountTakeoverActionTypeProperty where
+  type PropertyType "Notify" AccountTakeoverActionTypeProperty = Value Prelude.Bool
+  set newValue AccountTakeoverActionTypeProperty {..}
+    = AccountTakeoverActionTypeProperty {notify = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverActionTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccountTakeoverActionTypeProperty :: Prelude.Type
+instance ToResourceProperties AccountTakeoverActionTypeProperty
+instance Prelude.Eq AccountTakeoverActionTypeProperty
+instance Prelude.Show AccountTakeoverActionTypeProperty
+instance JSON.ToJSON AccountTakeoverActionTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionsTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionsTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionsTypeProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverActionsTypeProperty (
+        module Exports, AccountTakeoverActionsTypeProperty(..),
+        mkAccountTakeoverActionsTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverActionTypeProperty as Exports
+import Stratosphere.ResourceProperties
+data AccountTakeoverActionsTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoveractionstype.html>
+    AccountTakeoverActionsTypeProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoveractionstype.html#cfn-cognito-userpoolriskconfigurationattachment-accounttakeoveractionstype-highaction>
+                                        highAction :: (Prelude.Maybe AccountTakeoverActionTypeProperty),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoveractionstype.html#cfn-cognito-userpoolriskconfigurationattachment-accounttakeoveractionstype-lowaction>
+                                        lowAction :: (Prelude.Maybe AccountTakeoverActionTypeProperty),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoveractionstype.html#cfn-cognito-userpoolriskconfigurationattachment-accounttakeoveractionstype-mediumaction>
+                                        mediumAction :: (Prelude.Maybe AccountTakeoverActionTypeProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccountTakeoverActionsTypeProperty ::
+  AccountTakeoverActionsTypeProperty
+mkAccountTakeoverActionsTypeProperty
+  = AccountTakeoverActionsTypeProperty
+      {haddock_workaround_ = (), highAction = Prelude.Nothing,
+       lowAction = Prelude.Nothing, mediumAction = Prelude.Nothing}
+instance ToResourceProperties AccountTakeoverActionsTypeProperty where
+  toResourceProperties AccountTakeoverActionsTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment.AccountTakeoverActionsType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "HighAction" Prelude.<$> highAction,
+                            (JSON..=) "LowAction" Prelude.<$> lowAction,
+                            (JSON..=) "MediumAction" Prelude.<$> mediumAction])}
+instance JSON.ToJSON AccountTakeoverActionsTypeProperty where
+  toJSON AccountTakeoverActionsTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "HighAction" Prelude.<$> highAction,
+               (JSON..=) "LowAction" Prelude.<$> lowAction,
+               (JSON..=) "MediumAction" Prelude.<$> mediumAction]))
+instance Property "HighAction" AccountTakeoverActionsTypeProperty where
+  type PropertyType "HighAction" AccountTakeoverActionsTypeProperty = AccountTakeoverActionTypeProperty
+  set newValue AccountTakeoverActionsTypeProperty {..}
+    = AccountTakeoverActionsTypeProperty
+        {highAction = Prelude.pure newValue, ..}
+instance Property "LowAction" AccountTakeoverActionsTypeProperty where
+  type PropertyType "LowAction" AccountTakeoverActionsTypeProperty = AccountTakeoverActionTypeProperty
+  set newValue AccountTakeoverActionsTypeProperty {..}
+    = AccountTakeoverActionsTypeProperty
+        {lowAction = Prelude.pure newValue, ..}
+instance Property "MediumAction" AccountTakeoverActionsTypeProperty where
+  type PropertyType "MediumAction" AccountTakeoverActionsTypeProperty = AccountTakeoverActionTypeProperty
+  set newValue AccountTakeoverActionsTypeProperty {..}
+    = AccountTakeoverActionsTypeProperty
+        {mediumAction = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionsTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionsTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverActionsTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverActionsTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccountTakeoverActionsTypeProperty :: Prelude.Type
+instance ToResourceProperties AccountTakeoverActionsTypeProperty
+instance Prelude.Eq AccountTakeoverActionsTypeProperty
+instance Prelude.Show AccountTakeoverActionsTypeProperty
+instance JSON.ToJSON AccountTakeoverActionsTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverRiskConfigurationTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverRiskConfigurationTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverRiskConfigurationTypeProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverRiskConfigurationTypeProperty (
+        module Exports, AccountTakeoverRiskConfigurationTypeProperty(..),
+        mkAccountTakeoverRiskConfigurationTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverActionsTypeProperty as Exports
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.NotifyConfigurationTypeProperty as Exports
+import Stratosphere.ResourceProperties
+data AccountTakeoverRiskConfigurationTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoverriskconfigurationtype.html>
+    AccountTakeoverRiskConfigurationTypeProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoverriskconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-accounttakeoverriskconfigurationtype-actions>
+                                                  actions :: AccountTakeoverActionsTypeProperty,
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-accounttakeoverriskconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-accounttakeoverriskconfigurationtype-notifyconfiguration>
+                                                  notifyConfiguration :: (Prelude.Maybe NotifyConfigurationTypeProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccountTakeoverRiskConfigurationTypeProperty ::
+  AccountTakeoverActionsTypeProperty
+  -> AccountTakeoverRiskConfigurationTypeProperty
+mkAccountTakeoverRiskConfigurationTypeProperty actions
+  = AccountTakeoverRiskConfigurationTypeProperty
+      {haddock_workaround_ = (), actions = actions,
+       notifyConfiguration = Prelude.Nothing}
+instance ToResourceProperties AccountTakeoverRiskConfigurationTypeProperty where
+  toResourceProperties
+    AccountTakeoverRiskConfigurationTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment.AccountTakeoverRiskConfigurationType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Actions" JSON..= actions]
+                           (Prelude.catMaybes
+                              [(JSON..=) "NotifyConfiguration"
+                                 Prelude.<$> notifyConfiguration]))}
+instance JSON.ToJSON AccountTakeoverRiskConfigurationTypeProperty where
+  toJSON AccountTakeoverRiskConfigurationTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Actions" JSON..= actions]
+              (Prelude.catMaybes
+                 [(JSON..=) "NotifyConfiguration"
+                    Prelude.<$> notifyConfiguration])))
+instance Property "Actions" AccountTakeoverRiskConfigurationTypeProperty where
+  type PropertyType "Actions" AccountTakeoverRiskConfigurationTypeProperty = AccountTakeoverActionsTypeProperty
+  set newValue AccountTakeoverRiskConfigurationTypeProperty {..}
+    = AccountTakeoverRiskConfigurationTypeProperty
+        {actions = newValue, ..}
+instance Property "NotifyConfiguration" AccountTakeoverRiskConfigurationTypeProperty where
+  type PropertyType "NotifyConfiguration" AccountTakeoverRiskConfigurationTypeProperty = NotifyConfigurationTypeProperty
+  set newValue AccountTakeoverRiskConfigurationTypeProperty {..}
+    = AccountTakeoverRiskConfigurationTypeProperty
+        {notifyConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverRiskConfigurationTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverRiskConfigurationTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/AccountTakeoverRiskConfigurationTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverRiskConfigurationTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccountTakeoverRiskConfigurationTypeProperty :: Prelude.Type
+instance ToResourceProperties AccountTakeoverRiskConfigurationTypeProperty
+instance Prelude.Eq AccountTakeoverRiskConfigurationTypeProperty
+instance Prelude.Show AccountTakeoverRiskConfigurationTypeProperty
+instance JSON.ToJSON AccountTakeoverRiskConfigurationTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsActionsTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsActionsTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsActionsTypeProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.CompromisedCredentialsActionsTypeProperty (
+        CompromisedCredentialsActionsTypeProperty(..),
+        mkCompromisedCredentialsActionsTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CompromisedCredentialsActionsTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-compromisedcredentialsactionstype.html>
+    CompromisedCredentialsActionsTypeProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-compromisedcredentialsactionstype.html#cfn-cognito-userpoolriskconfigurationattachment-compromisedcredentialsactionstype-eventaction>
+                                               eventAction :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCompromisedCredentialsActionsTypeProperty ::
+  Value Prelude.Text -> CompromisedCredentialsActionsTypeProperty
+mkCompromisedCredentialsActionsTypeProperty eventAction
+  = CompromisedCredentialsActionsTypeProperty
+      {haddock_workaround_ = (), eventAction = eventAction}
+instance ToResourceProperties CompromisedCredentialsActionsTypeProperty where
+  toResourceProperties CompromisedCredentialsActionsTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment.CompromisedCredentialsActionsType",
+         supportsTags = Prelude.False,
+         properties = ["EventAction" JSON..= eventAction]}
+instance JSON.ToJSON CompromisedCredentialsActionsTypeProperty where
+  toJSON CompromisedCredentialsActionsTypeProperty {..}
+    = JSON.object ["EventAction" JSON..= eventAction]
+instance Property "EventAction" CompromisedCredentialsActionsTypeProperty where
+  type PropertyType "EventAction" CompromisedCredentialsActionsTypeProperty = Value Prelude.Text
+  set newValue CompromisedCredentialsActionsTypeProperty {..}
+    = CompromisedCredentialsActionsTypeProperty
+        {eventAction = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsActionsTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsActionsTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsActionsTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.CompromisedCredentialsActionsTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CompromisedCredentialsActionsTypeProperty :: Prelude.Type
+instance ToResourceProperties CompromisedCredentialsActionsTypeProperty
+instance Prelude.Eq CompromisedCredentialsActionsTypeProperty
+instance Prelude.Show CompromisedCredentialsActionsTypeProperty
+instance JSON.ToJSON CompromisedCredentialsActionsTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsRiskConfigurationTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsRiskConfigurationTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsRiskConfigurationTypeProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.CompromisedCredentialsRiskConfigurationTypeProperty (
+        module Exports,
+        CompromisedCredentialsRiskConfigurationTypeProperty(..),
+        mkCompromisedCredentialsRiskConfigurationTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.CompromisedCredentialsActionsTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CompromisedCredentialsRiskConfigurationTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-compromisedcredentialsriskconfigurationtype.html>
+    CompromisedCredentialsRiskConfigurationTypeProperty {haddock_workaround_ :: (),
+                                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-compromisedcredentialsriskconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-compromisedcredentialsriskconfigurationtype-actions>
+                                                         actions :: CompromisedCredentialsActionsTypeProperty,
+                                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-compromisedcredentialsriskconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-compromisedcredentialsriskconfigurationtype-eventfilter>
+                                                         eventFilter :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCompromisedCredentialsRiskConfigurationTypeProperty ::
+  CompromisedCredentialsActionsTypeProperty
+  -> CompromisedCredentialsRiskConfigurationTypeProperty
+mkCompromisedCredentialsRiskConfigurationTypeProperty actions
+  = CompromisedCredentialsRiskConfigurationTypeProperty
+      {haddock_workaround_ = (), actions = actions,
+       eventFilter = Prelude.Nothing}
+instance ToResourceProperties CompromisedCredentialsRiskConfigurationTypeProperty where
+  toResourceProperties
+    CompromisedCredentialsRiskConfigurationTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment.CompromisedCredentialsRiskConfigurationType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Actions" JSON..= actions]
+                           (Prelude.catMaybes
+                              [(JSON..=) "EventFilter" Prelude.<$> eventFilter]))}
+instance JSON.ToJSON CompromisedCredentialsRiskConfigurationTypeProperty where
+  toJSON CompromisedCredentialsRiskConfigurationTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Actions" JSON..= actions]
+              (Prelude.catMaybes
+                 [(JSON..=) "EventFilter" Prelude.<$> eventFilter])))
+instance Property "Actions" CompromisedCredentialsRiskConfigurationTypeProperty where
+  type PropertyType "Actions" CompromisedCredentialsRiskConfigurationTypeProperty = CompromisedCredentialsActionsTypeProperty
+  set
+    newValue
+    CompromisedCredentialsRiskConfigurationTypeProperty {..}
+    = CompromisedCredentialsRiskConfigurationTypeProperty
+        {actions = newValue, ..}
+instance Property "EventFilter" CompromisedCredentialsRiskConfigurationTypeProperty where
+  type PropertyType "EventFilter" CompromisedCredentialsRiskConfigurationTypeProperty = ValueList Prelude.Text
+  set
+    newValue
+    CompromisedCredentialsRiskConfigurationTypeProperty {..}
+    = CompromisedCredentialsRiskConfigurationTypeProperty
+        {eventFilter = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsRiskConfigurationTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsRiskConfigurationTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/CompromisedCredentialsRiskConfigurationTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.CompromisedCredentialsRiskConfigurationTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CompromisedCredentialsRiskConfigurationTypeProperty :: Prelude.Type
+instance ToResourceProperties CompromisedCredentialsRiskConfigurationTypeProperty
+instance Prelude.Eq CompromisedCredentialsRiskConfigurationTypeProperty
+instance Prelude.Show CompromisedCredentialsRiskConfigurationTypeProperty
+instance JSON.ToJSON CompromisedCredentialsRiskConfigurationTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyConfigurationTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyConfigurationTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyConfigurationTypeProperty.hs
@@ -0,0 +1,89 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.NotifyConfigurationTypeProperty (
+        module Exports, NotifyConfigurationTypeProperty(..),
+        mkNotifyConfigurationTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.NotifyEmailTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NotifyConfigurationTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype.html>
+    NotifyConfigurationTypeProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype-blockemail>
+                                     blockEmail :: (Prelude.Maybe NotifyEmailTypeProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype-from>
+                                     from :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype-mfaemail>
+                                     mfaEmail :: (Prelude.Maybe NotifyEmailTypeProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype-noactionemail>
+                                     noActionEmail :: (Prelude.Maybe NotifyEmailTypeProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype-replyto>
+                                     replyTo :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyconfigurationtype-sourcearn>
+                                     sourceArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotifyConfigurationTypeProperty ::
+  Value Prelude.Text -> NotifyConfigurationTypeProperty
+mkNotifyConfigurationTypeProperty sourceArn
+  = NotifyConfigurationTypeProperty
+      {haddock_workaround_ = (), sourceArn = sourceArn,
+       blockEmail = Prelude.Nothing, from = Prelude.Nothing,
+       mfaEmail = Prelude.Nothing, noActionEmail = Prelude.Nothing,
+       replyTo = Prelude.Nothing}
+instance ToResourceProperties NotifyConfigurationTypeProperty where
+  toResourceProperties NotifyConfigurationTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment.NotifyConfigurationType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SourceArn" JSON..= sourceArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BlockEmail" Prelude.<$> blockEmail,
+                               (JSON..=) "From" Prelude.<$> from,
+                               (JSON..=) "MfaEmail" Prelude.<$> mfaEmail,
+                               (JSON..=) "NoActionEmail" Prelude.<$> noActionEmail,
+                               (JSON..=) "ReplyTo" Prelude.<$> replyTo]))}
+instance JSON.ToJSON NotifyConfigurationTypeProperty where
+  toJSON NotifyConfigurationTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SourceArn" JSON..= sourceArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "BlockEmail" Prelude.<$> blockEmail,
+                  (JSON..=) "From" Prelude.<$> from,
+                  (JSON..=) "MfaEmail" Prelude.<$> mfaEmail,
+                  (JSON..=) "NoActionEmail" Prelude.<$> noActionEmail,
+                  (JSON..=) "ReplyTo" Prelude.<$> replyTo])))
+instance Property "BlockEmail" NotifyConfigurationTypeProperty where
+  type PropertyType "BlockEmail" NotifyConfigurationTypeProperty = NotifyEmailTypeProperty
+  set newValue NotifyConfigurationTypeProperty {..}
+    = NotifyConfigurationTypeProperty
+        {blockEmail = Prelude.pure newValue, ..}
+instance Property "From" NotifyConfigurationTypeProperty where
+  type PropertyType "From" NotifyConfigurationTypeProperty = Value Prelude.Text
+  set newValue NotifyConfigurationTypeProperty {..}
+    = NotifyConfigurationTypeProperty
+        {from = Prelude.pure newValue, ..}
+instance Property "MfaEmail" NotifyConfigurationTypeProperty where
+  type PropertyType "MfaEmail" NotifyConfigurationTypeProperty = NotifyEmailTypeProperty
+  set newValue NotifyConfigurationTypeProperty {..}
+    = NotifyConfigurationTypeProperty
+        {mfaEmail = Prelude.pure newValue, ..}
+instance Property "NoActionEmail" NotifyConfigurationTypeProperty where
+  type PropertyType "NoActionEmail" NotifyConfigurationTypeProperty = NotifyEmailTypeProperty
+  set newValue NotifyConfigurationTypeProperty {..}
+    = NotifyConfigurationTypeProperty
+        {noActionEmail = Prelude.pure newValue, ..}
+instance Property "ReplyTo" NotifyConfigurationTypeProperty where
+  type PropertyType "ReplyTo" NotifyConfigurationTypeProperty = Value Prelude.Text
+  set newValue NotifyConfigurationTypeProperty {..}
+    = NotifyConfigurationTypeProperty
+        {replyTo = Prelude.pure newValue, ..}
+instance Property "SourceArn" NotifyConfigurationTypeProperty where
+  type PropertyType "SourceArn" NotifyConfigurationTypeProperty = Value Prelude.Text
+  set newValue NotifyConfigurationTypeProperty {..}
+    = NotifyConfigurationTypeProperty {sourceArn = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyConfigurationTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyConfigurationTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyConfigurationTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.NotifyConfigurationTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NotifyConfigurationTypeProperty :: Prelude.Type
+instance ToResourceProperties NotifyConfigurationTypeProperty
+instance Prelude.Eq NotifyConfigurationTypeProperty
+instance Prelude.Show NotifyConfigurationTypeProperty
+instance JSON.ToJSON NotifyConfigurationTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyEmailTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyEmailTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyEmailTypeProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.NotifyEmailTypeProperty (
+        NotifyEmailTypeProperty(..), mkNotifyEmailTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NotifyEmailTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyemailtype.html>
+    NotifyEmailTypeProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyemailtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyemailtype-htmlbody>
+                             htmlBody :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyemailtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyemailtype-subject>
+                             subject :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-notifyemailtype.html#cfn-cognito-userpoolriskconfigurationattachment-notifyemailtype-textbody>
+                             textBody :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotifyEmailTypeProperty ::
+  Value Prelude.Text -> NotifyEmailTypeProperty
+mkNotifyEmailTypeProperty subject
+  = NotifyEmailTypeProperty
+      {haddock_workaround_ = (), subject = subject,
+       htmlBody = Prelude.Nothing, textBody = Prelude.Nothing}
+instance ToResourceProperties NotifyEmailTypeProperty where
+  toResourceProperties NotifyEmailTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment.NotifyEmailType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Subject" JSON..= subject]
+                           (Prelude.catMaybes
+                              [(JSON..=) "HtmlBody" Prelude.<$> htmlBody,
+                               (JSON..=) "TextBody" Prelude.<$> textBody]))}
+instance JSON.ToJSON NotifyEmailTypeProperty where
+  toJSON NotifyEmailTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Subject" JSON..= subject]
+              (Prelude.catMaybes
+                 [(JSON..=) "HtmlBody" Prelude.<$> htmlBody,
+                  (JSON..=) "TextBody" Prelude.<$> textBody])))
+instance Property "HtmlBody" NotifyEmailTypeProperty where
+  type PropertyType "HtmlBody" NotifyEmailTypeProperty = Value Prelude.Text
+  set newValue NotifyEmailTypeProperty {..}
+    = NotifyEmailTypeProperty {htmlBody = Prelude.pure newValue, ..}
+instance Property "Subject" NotifyEmailTypeProperty where
+  type PropertyType "Subject" NotifyEmailTypeProperty = Value Prelude.Text
+  set newValue NotifyEmailTypeProperty {..}
+    = NotifyEmailTypeProperty {subject = newValue, ..}
+instance Property "TextBody" NotifyEmailTypeProperty where
+  type PropertyType "TextBody" NotifyEmailTypeProperty = Value Prelude.Text
+  set newValue NotifyEmailTypeProperty {..}
+    = NotifyEmailTypeProperty {textBody = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyEmailTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyEmailTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/NotifyEmailTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.NotifyEmailTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NotifyEmailTypeProperty :: Prelude.Type
+instance ToResourceProperties NotifyEmailTypeProperty
+instance Prelude.Eq NotifyEmailTypeProperty
+instance Prelude.Show NotifyEmailTypeProperty
+instance JSON.ToJSON NotifyEmailTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/RiskExceptionConfigurationTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/RiskExceptionConfigurationTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/RiskExceptionConfigurationTypeProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.RiskExceptionConfigurationTypeProperty (
+        RiskExceptionConfigurationTypeProperty(..),
+        mkRiskExceptionConfigurationTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RiskExceptionConfigurationTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-riskexceptionconfigurationtype.html>
+    RiskExceptionConfigurationTypeProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-riskexceptionconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-riskexceptionconfigurationtype-blockediprangelist>
+                                            blockedIPRangeList :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpoolriskconfigurationattachment-riskexceptionconfigurationtype.html#cfn-cognito-userpoolriskconfigurationattachment-riskexceptionconfigurationtype-skippediprangelist>
+                                            skippedIPRangeList :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRiskExceptionConfigurationTypeProperty ::
+  RiskExceptionConfigurationTypeProperty
+mkRiskExceptionConfigurationTypeProperty
+  = RiskExceptionConfigurationTypeProperty
+      {haddock_workaround_ = (), blockedIPRangeList = Prelude.Nothing,
+       skippedIPRangeList = Prelude.Nothing}
+instance ToResourceProperties RiskExceptionConfigurationTypeProperty where
+  toResourceProperties RiskExceptionConfigurationTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolRiskConfigurationAttachment.RiskExceptionConfigurationType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BlockedIPRangeList" Prelude.<$> blockedIPRangeList,
+                            (JSON..=) "SkippedIPRangeList" Prelude.<$> skippedIPRangeList])}
+instance JSON.ToJSON RiskExceptionConfigurationTypeProperty where
+  toJSON RiskExceptionConfigurationTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BlockedIPRangeList" Prelude.<$> blockedIPRangeList,
+               (JSON..=) "SkippedIPRangeList" Prelude.<$> skippedIPRangeList]))
+instance Property "BlockedIPRangeList" RiskExceptionConfigurationTypeProperty where
+  type PropertyType "BlockedIPRangeList" RiskExceptionConfigurationTypeProperty = ValueList Prelude.Text
+  set newValue RiskExceptionConfigurationTypeProperty {..}
+    = RiskExceptionConfigurationTypeProperty
+        {blockedIPRangeList = Prelude.pure newValue, ..}
+instance Property "SkippedIPRangeList" RiskExceptionConfigurationTypeProperty where
+  type PropertyType "SkippedIPRangeList" RiskExceptionConfigurationTypeProperty = ValueList Prelude.Text
+  set newValue RiskExceptionConfigurationTypeProperty {..}
+    = RiskExceptionConfigurationTypeProperty
+        {skippedIPRangeList = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/RiskExceptionConfigurationTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/RiskExceptionConfigurationTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolRiskConfigurationAttachment/RiskExceptionConfigurationTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.RiskExceptionConfigurationTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RiskExceptionConfigurationTypeProperty :: Prelude.Type
+instance ToResourceProperties RiskExceptionConfigurationTypeProperty
+instance Prelude.Eq RiskExceptionConfigurationTypeProperty
+instance Prelude.Show RiskExceptionConfigurationTypeProperty
+instance JSON.ToJSON RiskExceptionConfigurationTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolUICustomizationAttachment.hs b/gen/Stratosphere/Cognito/UserPoolUICustomizationAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolUICustomizationAttachment.hs
@@ -0,0 +1,55 @@
+module Stratosphere.Cognito.UserPoolUICustomizationAttachment (
+        UserPoolUICustomizationAttachment(..),
+        mkUserPoolUICustomizationAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolUICustomizationAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluicustomizationattachment.html>
+    UserPoolUICustomizationAttachment {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluicustomizationattachment.html#cfn-cognito-userpooluicustomizationattachment-css>
+                                       cSS :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluicustomizationattachment.html#cfn-cognito-userpooluicustomizationattachment-clientid>
+                                       clientId :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluicustomizationattachment.html#cfn-cognito-userpooluicustomizationattachment-userpoolid>
+                                       userPoolId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolUICustomizationAttachment ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> UserPoolUICustomizationAttachment
+mkUserPoolUICustomizationAttachment clientId userPoolId
+  = UserPoolUICustomizationAttachment
+      {haddock_workaround_ = (), clientId = clientId,
+       userPoolId = userPoolId, cSS = Prelude.Nothing}
+instance ToResourceProperties UserPoolUICustomizationAttachment where
+  toResourceProperties UserPoolUICustomizationAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolUICustomizationAttachment",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ClientId" JSON..= clientId, "UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes [(JSON..=) "CSS" Prelude.<$> cSS]))}
+instance JSON.ToJSON UserPoolUICustomizationAttachment where
+  toJSON UserPoolUICustomizationAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ClientId" JSON..= clientId, "UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes [(JSON..=) "CSS" Prelude.<$> cSS])))
+instance Property "CSS" UserPoolUICustomizationAttachment where
+  type PropertyType "CSS" UserPoolUICustomizationAttachment = Value Prelude.Text
+  set newValue UserPoolUICustomizationAttachment {..}
+    = UserPoolUICustomizationAttachment
+        {cSS = Prelude.pure newValue, ..}
+instance Property "ClientId" UserPoolUICustomizationAttachment where
+  type PropertyType "ClientId" UserPoolUICustomizationAttachment = Value Prelude.Text
+  set newValue UserPoolUICustomizationAttachment {..}
+    = UserPoolUICustomizationAttachment {clientId = newValue, ..}
+instance Property "UserPoolId" UserPoolUICustomizationAttachment where
+  type PropertyType "UserPoolId" UserPoolUICustomizationAttachment = Value Prelude.Text
+  set newValue UserPoolUICustomizationAttachment {..}
+    = UserPoolUICustomizationAttachment {userPoolId = newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolUser.hs b/gen/Stratosphere/Cognito/UserPoolUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolUser.hs
@@ -0,0 +1,102 @@
+module Stratosphere.Cognito.UserPoolUser (
+        module Exports, UserPoolUser(..), mkUserPoolUser
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Cognito.UserPoolUser.AttributeTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolUser
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html>
+    UserPoolUser {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-clientmetadata>
+                  clientMetadata :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-desireddeliverymediums>
+                  desiredDeliveryMediums :: (Prelude.Maybe (ValueList Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-forcealiascreation>
+                  forceAliasCreation :: (Prelude.Maybe (Value Prelude.Bool)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-messageaction>
+                  messageAction :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-userattributes>
+                  userAttributes :: (Prelude.Maybe [AttributeTypeProperty]),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-userpoolid>
+                  userPoolId :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-username>
+                  username :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-validationdata>
+                  validationData :: (Prelude.Maybe [AttributeTypeProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolUser :: Value Prelude.Text -> UserPoolUser
+mkUserPoolUser userPoolId
+  = UserPoolUser
+      {haddock_workaround_ = (), userPoolId = userPoolId,
+       clientMetadata = Prelude.Nothing,
+       desiredDeliveryMediums = Prelude.Nothing,
+       forceAliasCreation = Prelude.Nothing,
+       messageAction = Prelude.Nothing, userAttributes = Prelude.Nothing,
+       username = Prelude.Nothing, validationData = Prelude.Nothing}
+instance ToResourceProperties UserPoolUser where
+  toResourceProperties UserPoolUser {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolUser",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["UserPoolId" JSON..= userPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ClientMetadata" Prelude.<$> clientMetadata,
+                               (JSON..=) "DesiredDeliveryMediums"
+                                 Prelude.<$> desiredDeliveryMediums,
+                               (JSON..=) "ForceAliasCreation" Prelude.<$> forceAliasCreation,
+                               (JSON..=) "MessageAction" Prelude.<$> messageAction,
+                               (JSON..=) "UserAttributes" Prelude.<$> userAttributes,
+                               (JSON..=) "Username" Prelude.<$> username,
+                               (JSON..=) "ValidationData" Prelude.<$> validationData]))}
+instance JSON.ToJSON UserPoolUser where
+  toJSON UserPoolUser {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["UserPoolId" JSON..= userPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "ClientMetadata" Prelude.<$> clientMetadata,
+                  (JSON..=) "DesiredDeliveryMediums"
+                    Prelude.<$> desiredDeliveryMediums,
+                  (JSON..=) "ForceAliasCreation" Prelude.<$> forceAliasCreation,
+                  (JSON..=) "MessageAction" Prelude.<$> messageAction,
+                  (JSON..=) "UserAttributes" Prelude.<$> userAttributes,
+                  (JSON..=) "Username" Prelude.<$> username,
+                  (JSON..=) "ValidationData" Prelude.<$> validationData])))
+instance Property "ClientMetadata" UserPoolUser where
+  type PropertyType "ClientMetadata" UserPoolUser = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue UserPoolUser {..}
+    = UserPoolUser {clientMetadata = Prelude.pure newValue, ..}
+instance Property "DesiredDeliveryMediums" UserPoolUser where
+  type PropertyType "DesiredDeliveryMediums" UserPoolUser = ValueList Prelude.Text
+  set newValue UserPoolUser {..}
+    = UserPoolUser {desiredDeliveryMediums = Prelude.pure newValue, ..}
+instance Property "ForceAliasCreation" UserPoolUser where
+  type PropertyType "ForceAliasCreation" UserPoolUser = Value Prelude.Bool
+  set newValue UserPoolUser {..}
+    = UserPoolUser {forceAliasCreation = Prelude.pure newValue, ..}
+instance Property "MessageAction" UserPoolUser where
+  type PropertyType "MessageAction" UserPoolUser = Value Prelude.Text
+  set newValue UserPoolUser {..}
+    = UserPoolUser {messageAction = Prelude.pure newValue, ..}
+instance Property "UserAttributes" UserPoolUser where
+  type PropertyType "UserAttributes" UserPoolUser = [AttributeTypeProperty]
+  set newValue UserPoolUser {..}
+    = UserPoolUser {userAttributes = Prelude.pure newValue, ..}
+instance Property "UserPoolId" UserPoolUser where
+  type PropertyType "UserPoolId" UserPoolUser = Value Prelude.Text
+  set newValue UserPoolUser {..}
+    = UserPoolUser {userPoolId = newValue, ..}
+instance Property "Username" UserPoolUser where
+  type PropertyType "Username" UserPoolUser = Value Prelude.Text
+  set newValue UserPoolUser {..}
+    = UserPoolUser {username = Prelude.pure newValue, ..}
+instance Property "ValidationData" UserPoolUser where
+  type PropertyType "ValidationData" UserPoolUser = [AttributeTypeProperty]
+  set newValue UserPoolUser {..}
+    = UserPoolUser {validationData = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolUser/AttributeTypeProperty.hs b/gen/Stratosphere/Cognito/UserPoolUser/AttributeTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolUser/AttributeTypeProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.Cognito.UserPoolUser.AttributeTypeProperty (
+        AttributeTypeProperty(..), mkAttributeTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AttributeTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpooluser-attributetype.html>
+    AttributeTypeProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpooluser-attributetype.html#cfn-cognito-userpooluser-attributetype-name>
+                           name :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpooluser-attributetype.html#cfn-cognito-userpooluser-attributetype-value>
+                           value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAttributeTypeProperty :: AttributeTypeProperty
+mkAttributeTypeProperty
+  = AttributeTypeProperty
+      {haddock_workaround_ = (), name = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties AttributeTypeProperty where
+  toResourceProperties AttributeTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolUser.AttributeType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON AttributeTypeProperty where
+  toJSON AttributeTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "Name" AttributeTypeProperty where
+  type PropertyType "Name" AttributeTypeProperty = Value Prelude.Text
+  set newValue AttributeTypeProperty {..}
+    = AttributeTypeProperty {name = Prelude.pure newValue, ..}
+instance Property "Value" AttributeTypeProperty where
+  type PropertyType "Value" AttributeTypeProperty = Value Prelude.Text
+  set newValue AttributeTypeProperty {..}
+    = AttributeTypeProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Cognito/UserPoolUser/AttributeTypeProperty.hs-boot b/gen/Stratosphere/Cognito/UserPoolUser/AttributeTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolUser/AttributeTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Cognito.UserPoolUser.AttributeTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AttributeTypeProperty :: Prelude.Type
+instance ToResourceProperties AttributeTypeProperty
+instance Prelude.Eq AttributeTypeProperty
+instance Prelude.Show AttributeTypeProperty
+instance JSON.ToJSON AttributeTypeProperty
diff --git a/gen/Stratosphere/Cognito/UserPoolUserToGroupAttachment.hs b/gen/Stratosphere/Cognito/UserPoolUserToGroupAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Cognito/UserPoolUserToGroupAttachment.hs
@@ -0,0 +1,50 @@
+module Stratosphere.Cognito.UserPoolUserToGroupAttachment (
+        UserPoolUserToGroupAttachment(..), mkUserPoolUserToGroupAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UserPoolUserToGroupAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolusertogroupattachment.html>
+    UserPoolUserToGroupAttachment {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolusertogroupattachment.html#cfn-cognito-userpoolusertogroupattachment-groupname>
+                                   groupName :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolusertogroupattachment.html#cfn-cognito-userpoolusertogroupattachment-userpoolid>
+                                   userPoolId :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolusertogroupattachment.html#cfn-cognito-userpoolusertogroupattachment-username>
+                                   username :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUserPoolUserToGroupAttachment ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> UserPoolUserToGroupAttachment
+mkUserPoolUserToGroupAttachment groupName userPoolId username
+  = UserPoolUserToGroupAttachment
+      {haddock_workaround_ = (), groupName = groupName,
+       userPoolId = userPoolId, username = username}
+instance ToResourceProperties UserPoolUserToGroupAttachment where
+  toResourceProperties UserPoolUserToGroupAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::Cognito::UserPoolUserToGroupAttachment",
+         supportsTags = Prelude.False,
+         properties = ["GroupName" JSON..= groupName,
+                       "UserPoolId" JSON..= userPoolId, "Username" JSON..= username]}
+instance JSON.ToJSON UserPoolUserToGroupAttachment where
+  toJSON UserPoolUserToGroupAttachment {..}
+    = JSON.object
+        ["GroupName" JSON..= groupName, "UserPoolId" JSON..= userPoolId,
+         "Username" JSON..= username]
+instance Property "GroupName" UserPoolUserToGroupAttachment where
+  type PropertyType "GroupName" UserPoolUserToGroupAttachment = Value Prelude.Text
+  set newValue UserPoolUserToGroupAttachment {..}
+    = UserPoolUserToGroupAttachment {groupName = newValue, ..}
+instance Property "UserPoolId" UserPoolUserToGroupAttachment where
+  type PropertyType "UserPoolId" UserPoolUserToGroupAttachment = Value Prelude.Text
+  set newValue UserPoolUserToGroupAttachment {..}
+    = UserPoolUserToGroupAttachment {userPoolId = newValue, ..}
+instance Property "Username" UserPoolUserToGroupAttachment where
+  type PropertyType "Username" UserPoolUserToGroupAttachment = Value Prelude.Text
+  set newValue UserPoolUserToGroupAttachment {..}
+    = UserPoolUserToGroupAttachment {username = newValue, ..}
diff --git a/stratosphere-cognito.cabal b/stratosphere-cognito.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-cognito.cabal
@@ -0,0 +1,134 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-cognito
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS Cognito.
+description:    Integration into stratosphere to generate resources and properties for AWS Cognito
+category:       AWS, Cloud, Cognito
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.Cognito.IdentityPool
+      Stratosphere.Cognito.IdentityPool.CognitoIdentityProviderProperty
+      Stratosphere.Cognito.IdentityPool.CognitoStreamsProperty
+      Stratosphere.Cognito.IdentityPool.PushSyncProperty
+      Stratosphere.Cognito.IdentityPoolPrincipalTag
+      Stratosphere.Cognito.IdentityPoolRoleAttachment
+      Stratosphere.Cognito.IdentityPoolRoleAttachment.MappingRuleProperty
+      Stratosphere.Cognito.IdentityPoolRoleAttachment.RoleMappingProperty
+      Stratosphere.Cognito.IdentityPoolRoleAttachment.RulesConfigurationTypeProperty
+      Stratosphere.Cognito.LogDeliveryConfiguration
+      Stratosphere.Cognito.LogDeliveryConfiguration.CloudWatchLogsConfigurationProperty
+      Stratosphere.Cognito.LogDeliveryConfiguration.FirehoseConfigurationProperty
+      Stratosphere.Cognito.LogDeliveryConfiguration.LogConfigurationProperty
+      Stratosphere.Cognito.LogDeliveryConfiguration.S3ConfigurationProperty
+      Stratosphere.Cognito.ManagedLoginBranding
+      Stratosphere.Cognito.ManagedLoginBranding.AssetTypeProperty
+      Stratosphere.Cognito.UserPool
+      Stratosphere.Cognito.UserPool.AccountRecoverySettingProperty
+      Stratosphere.Cognito.UserPool.AdminCreateUserConfigProperty
+      Stratosphere.Cognito.UserPool.AdvancedSecurityAdditionalFlowsProperty
+      Stratosphere.Cognito.UserPool.CustomEmailSenderProperty
+      Stratosphere.Cognito.UserPool.CustomSMSSenderProperty
+      Stratosphere.Cognito.UserPool.DeviceConfigurationProperty
+      Stratosphere.Cognito.UserPool.EmailConfigurationProperty
+      Stratosphere.Cognito.UserPool.InviteMessageTemplateProperty
+      Stratosphere.Cognito.UserPool.LambdaConfigProperty
+      Stratosphere.Cognito.UserPool.NumberAttributeConstraintsProperty
+      Stratosphere.Cognito.UserPool.PasswordPolicyProperty
+      Stratosphere.Cognito.UserPool.PoliciesProperty
+      Stratosphere.Cognito.UserPool.PreTokenGenerationConfigProperty
+      Stratosphere.Cognito.UserPool.RecoveryOptionProperty
+      Stratosphere.Cognito.UserPool.SchemaAttributeProperty
+      Stratosphere.Cognito.UserPool.SignInPolicyProperty
+      Stratosphere.Cognito.UserPool.SmsConfigurationProperty
+      Stratosphere.Cognito.UserPool.StringAttributeConstraintsProperty
+      Stratosphere.Cognito.UserPool.UserAttributeUpdateSettingsProperty
+      Stratosphere.Cognito.UserPool.UsernameConfigurationProperty
+      Stratosphere.Cognito.UserPool.UserPoolAddOnsProperty
+      Stratosphere.Cognito.UserPool.VerificationMessageTemplateProperty
+      Stratosphere.Cognito.UserPoolClient
+      Stratosphere.Cognito.UserPoolClient.AnalyticsConfigurationProperty
+      Stratosphere.Cognito.UserPoolClient.RefreshTokenRotationProperty
+      Stratosphere.Cognito.UserPoolClient.TokenValidityUnitsProperty
+      Stratosphere.Cognito.UserPoolDomain
+      Stratosphere.Cognito.UserPoolDomain.CustomDomainConfigTypeProperty
+      Stratosphere.Cognito.UserPoolGroup
+      Stratosphere.Cognito.UserPoolIdentityProvider
+      Stratosphere.Cognito.UserPoolResourceServer
+      Stratosphere.Cognito.UserPoolResourceServer.ResourceServerScopeTypeProperty
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverActionsTypeProperty
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverActionTypeProperty
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.AccountTakeoverRiskConfigurationTypeProperty
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.CompromisedCredentialsActionsTypeProperty
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.CompromisedCredentialsRiskConfigurationTypeProperty
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.NotifyConfigurationTypeProperty
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.NotifyEmailTypeProperty
+      Stratosphere.Cognito.UserPoolRiskConfigurationAttachment.RiskExceptionConfigurationTypeProperty
+      Stratosphere.Cognito.UserPoolUICustomizationAttachment
+      Stratosphere.Cognito.UserPoolUser
+      Stratosphere.Cognito.UserPoolUser.AttributeTypeProperty
+      Stratosphere.Cognito.UserPoolUserToGroupAttachment
+  other-modules:
+      Paths_stratosphere_cognito
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
