Repository: Azure/ARO-RP
Pull request #1762 (2021-09-22 17:41:32)

Cloud Aware SRE Portal Oauth Endpoints
### Which issue this PR addresses:

The PR addresses SRE Portal oauth2 Active Directory endpoints not being cloud aware and creating the following error within the PR: 

`auth2: cannot fetch token: 400 Bad Request#012Response: {"error":"invalid_request","error_description":"AADSTS900432: Confidential Client is not supported in Cross Cloud request.`

USGovernmentCloud requires:
 ActiveDirectoryEndpoint:      "https://login.microsoftonline.us/"
PublicCloud requires:
  ActiveDirectoryEndpoint:      "https://login.microsoftonline.com/"

Work Item: https://msazure.visualstudio.com/AzureRedHatOpenShift/_workitems/edit/9964892

### What this PR does / why we need it:

The SRE Portal oauther.Endpoint value will be set from [environments.go](https://github.com/Azure/ARO-RP/blob/master/vendor/github.com/Azure/go-autorest/autorest/azure/environments.go#L134) based off of which cloud environment is configured at runtime.

### Test plan for issue:

Testing will be done in FF-INT.

### Is there any documentation that needs to be updated for this PR?

No, not a large enough impact to warrant documentation outside of the PR.  


rogbas: The change and unit tests are looking good, lgtm and let's move to test it in FF int.

Patch:
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index f64854703..df1137e69 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,1 +1,1 @@
-* @mjudeikis @jewzaam @m1kola @bennerv @hawkowl @mwoodson @rogbas
+* @mjudeikis @jewzaam @m1kola
diff --git a/.pipelines/onebranch/pipeline.buildrp.dev.yml b/.pipelines/onebranch/pipeline.buildrp.dev.yml
new file mode 100644
index 000000000..989681f19
--- /dev/null
+++ b/.pipelines/onebranch/pipeline.buildrp.dev.yml
@@ -0,0 +1,85 @@
+#################################################################################
+#                               OneBranch Pipelines                             #
+# This pipeline was created by EasyStart from a sample located at:              #
+#   https://aka.ms/obpipelines/easystart/samples                                #
+# Documentation:  https://aka.ms/obpipelines                                    #
+# Yaml Schema:    https://aka.ms/obpipelines/yaml/schema                        #
+# Retail Tasks:   https://aka.ms/obpipelines/tasks                              #
+# Support:        https://aka.ms/onebranchsup                                   #
+#################################################################################
+
+trigger: none
+pr: none
+
+variables:
+  Cdp_Definition_Build_Count: $[counter('', 0)] # needed for onebranch.pipeline.version task https://aka.ms/obpipelines/versioning
+  LinuxContainerImage: cdpxlinux.azurecr.io/global/ubuntu-1804-all:5.0   # Docker image which is used to build the project https://aka.ms/obpipelines/containers
+  Debian_Frontend: noninteractive
+
+resources:
+  repositories:
+  - repository: templates
+    type: git
+    name: OneBranch.Pipelines/GovernedTemplates
+    ref: refs/heads/main
+  - repository: rhado
+    type: git
+    name: ARO.Pipelines
+  - repository: rpconfig
+    type: git
+    name: RP-Config
+
+extends:
+  template: v2/OneBranch.NonOfficial.CrossPlat.yml@templates # https://aka.ms/obpipelines/templates
+  parameters:
+    globalSdl: # https://aka.ms/obpipelines/sdl
+      # tsa:
+      #  enabled: true # SDL results of non-official builds aren't uploaded to TSA by default.
+      # credscan:
+      #   suppressionsFile: $(Build.SourcesDirectory)\.config\CredScanSuppressions.json
+      policheck:
+        break: true # always break the build on policheck issues. You can disable it by setting to 'false'
+      suppression:
+        suppressionFile: $(Build.SourcesDirectory)\.gdn\.gdnsuppress
+        suppressionSet: default
+
+    stages:
+    - stage: Build_Ev2_Artifacts
+      jobs:
+      - job: Build_Ev2_Artifacts
+        pool:
+          type: linux
+
+        variables: # More settings at https://aka.ms/obpipelines/yaml/jobs
+          ob_outputDirectory: $(Build.SourcesDirectory)/out   # this directory is uploaded to pipeline artifacts, reddog and cloudvault. More info at https://aka.ms/obpipelines/artifacts
+
+        steps:
+        - template: .pipelines/onebranch/templates/template-generate-ev2-manifests.yml@self
+          parameters:
+            generationType: deployment
+
+    - stage: Build_Docker_Image
+      jobs:
+      - job: Build_Docker_Image
+        pool:
+          type: docker
+          os: linux
+
+        variables:
+          ob_git_checkout: true
+
+        steps:
+        - template: .pipelines/onebranch/templates/template-buildrp-builddocker.yml@self
+
+
+    - stage: Build_ARO
+      jobs:
+      - job: Build_ARO
+        pool:
+          type: linux
+
+        variables: # More settings at https://aka.ms/obpipelines/yaml/jobs
+          ob_outputDirectory: $(Build.SourcesDirectory)/out   # this directory is uploaded to pipeline artifacts, reddog and cloudvault. More info at https://aka.ms/obpipelines/artifacts
+
+        steps:
+        - template: .pipelines/onebranch/templates/template-buildrp-buildaro.yml@self
diff --git a/.pipelines/onebranch/pipeline.image.mirror.dev.yml b/.pipelines/onebranch/pipeline.image.mirror.dev.yml
new file mode 100644
index 000000000..effba9554
--- /dev/null
+++ b/.pipelines/onebranch/pipeline.image.mirror.dev.yml
@@ -0,0 +1,51 @@
+#################################################################################
+#                               OneBranch Pipelines                             #
+# This pipeline was created by EasyStart from a sample located at:              #
+#   https://aka.ms/obpipelines/easystart/samples                                #
+# Documentation:  https://aka.ms/obpipelines                                    #
+# Yaml Schema:    https://aka.ms/obpipelines/yaml/schema                        #
+# Retail Tasks:   https://aka.ms/obpipelines/tasks                              #
+# Support:        https://aka.ms/onebranchsup                                   #
+#################################################################################
+
+trigger: none
+pr: none
+
+parameters:
+- name: vsoDeployerBuildID
+  type: string
+  default: latest
+
+variables:
+  Cdp_Definition_Build_Count: $[counter('', 0)] # needed for onebranch.pipeline.version task https://aka.ms/obpipelines/versioning
+  LinuxContainerImage: centos:centos7   # Docker image which is used to build the project https://aka.ms/obpipelines/containers
+  Debian_Frontend: noninteractive
+
+resources:
+  repositories:
+  - repository: templates
+    type: git
+    name: OneBranch.Pipelines/GovernedTemplates
+    ref: refs/heads/main
+  - repository: rhado
+    type: git
+    name: ARO.Pipelines
+
+extends:
+  template: v2/OneBranch.NonOfficial.CrossPlat.yml@templates # https://aka.ms/obpipelines/templates
+  parameters:
+    globalSdl: # https://aka.ms/obpipelines/sdl
+      # tsa:
+      #  enabled: true # SDL results of non-official builds aren't uploaded to TSA by default.
+      # credscan:
+      #   suppressionsFile: $(Build.SourcesDirectory)\.config\CredScanSuppressions.json
+      policheck:
+        break: true # always break the build on policheck issues. You can disable it by setting to 'false'
+      suppression:
+        suppressionFile: $(Build.SourcesDirectory)\.gdn\.gdnsuppress
+        suppressionSet: default
+
+    stages:
+    - stage: Mirror_Images
+      jobs:
+      - template: .pipelines/onebranch/templates/template-image-mirror.yml@self
diff --git a/.pipelines/onebranch/templates/template-generate-ev2-manifests.yml b/.pipelines/onebranch/templates/template-generate-ev2-manifests.yml
index 122b7470b..fa6e1ec28 100644
--- a/.pipelines/onebranch/templates/template-generate-ev2-manifests.yml
+++ b/.pipelines/onebranch/templates/template-generate-ev2-manifests.yml
@@ -12,7 +12,8 @@ parameters:
 
 steps:
 - checkout: rhado
-- checkout: rpconfig
+- ${{ if eq(parameters.generationType, 'deployment') }}:
+  - checkout: rpconfig
 - task: GoTool@0
   displayName: Use Go 1.16.2
   inputs:
diff --git a/.pipelines/onebranch/templates/template-image-mirror.yml b/.pipelines/onebranch/templates/template-image-mirror.yml
index 4f5776012..4a517b418 100644
--- a/.pipelines/onebranch/templates/template-image-mirror.yml
+++ b/.pipelines/onebranch/templates/template-image-mirror.yml
@@ -11,6 +11,7 @@ jobs:
 
   steps:
   - checkout: rhado
+  - checkout: rpconfig
   - task: DownloadPipelineArtifact@2
     displayName: Download Deployer
     inputs:
diff --git a/README.md b/README.md
index 444df2181..abc4b601c 100644
--- a/README.md
+++ b/README.md
@@ -89,6 +89,7 @@ questions or comments.
       aro-operator-master.openshift-azure-operator:8080, to avoid the
       `AlertmanagerReceiversNotConfigured` warning.
 
+    * azurensg: Ensures that the Network Security Groups (NSGs) are correct, and updates the Azure Machine Provider spec with subnet, vnet, and Network Resource Group.
 
     * checker: Watches the `Cluster` resource for changes and updates conditions
       of the resource based on checks mentioned below
@@ -127,8 +128,6 @@ questions or comments.
     * routefix: Ensures all the routefix resources in the namespace
       `openshift-azure-routefix` remain on the cluster.
 
-    * subnets: Ensures that the Network Security Groups (NSGs) are correct, and updates the Azure Machine Provider spec with subnet, vnet, and Network Resource Group.
-
     * workaround: Applies a set of temporay workarounds to the ARO cluster.
 
   * pkg/portal: Portal for running promql queries against a cluster or requesting a kubeconfig for a cluster.
diff --git a/deploy/env-development.json b/deploy/env-development.json
index 41604f787..63aba616d 100644
--- a/deploy/env-development.json
+++ b/deploy/env-development.json
@@ -66,7 +66,7 @@
             "properties": {
                 "addressSpace": {
                     "addressPrefixes": [
-                        "10.0.0.0/9"
+                        "10.0.0.0/23"
                     ]
                 },
                 "subnets": [
diff --git a/pkg/cluster/install.go b/pkg/cluster/install.go
index e0fa4746f..aedcd7212 100644
--- a/pkg/cluster/install.go
+++ b/pkg/cluster/install.go
@@ -35,9 +35,9 @@ func (m *manager) AdminUpdate(ctx context.Context) error {
 		steps.Action(m.ensureDefaults),
 		steps.AuthorizationRefreshingAction(m.fpAuthorizer, steps.Action(m.ensureResourceGroup)), // re-create RP RBAC if needed after tenant migration
 		steps.Action(m.createOrUpdateDenyAssignment),
+		steps.Action(m.populateRegistryStorageAccountName),
 		steps.Action(m.startVMs),
 		steps.Condition(m.apiServersReady, 30*time.Minute, false),
-		steps.Action(m.populateRegistryStorageAccountName),
 		steps.Action(m.ensureBillingRecord), // belt and braces
 		steps.Action(m.configureAPIServerCertificate),
 		steps.Action(m.configureIngressCertificate),
diff --git a/pkg/deploy/bindata.go b/pkg/deploy/bindata.go
index f22fd3123..080fdc288 100644
--- a/pkg/deploy/bindata.go
+++ b/pkg/deploy/bindata.go
@@ -136,7 +136,7 @@ func databasesDevelopmentJson() (*asset, error) {
 	return a, nil
 }
 
-var _envDevelopmentJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7b\x69\x6f\xa3\x4a\xf6\xf7\xfb\xfb\x29\xa2\x3c\x23\xa5\x5b\x4f\xa7\x03\x38\xee\x09\x23\xdd\x17\x18\x07\x8c\x8d\x89\x01\xb3\xce\xb4\xae\xa0\xaa\x82\xb1\x8b\x65\xa0\xc0\xc1\xa3\xfb\xdd\xff\x02\x2f\xf1\x16\xdb\xe9\x45\x1a\xcd\x6d\x5a\xe9\xc4\x70\xce\xa9\xaa\x53\x67\xad\x1f\xfe\xcf\x6f\x57\x57\x57\x57\xd7\x7f\xcb\xc1\x04\x45\xde\xf5\x3f\xae\xae\x27\x84\xa4\xf9\x3f\xee\xee\x96\x77\x3e\x47\x5e\xec\x05\x28\x42\x31\xf9\xec\x2d\x8a\x0c\x7d\x06\x49\xb4\x7a\x96\xdf\x31\x14\xdd\xbe\xa5\xe8\x5b\x8a\xbe\x83\x28\xc5\x49\x55\xd3\x8d\x51\x94\x62\x8f\xa0\xcf\xd3\x3c\x89\xff\xdf\xf5\xa7\xe5\x08\x20\x89\x09\x8a\x89\x89\xb2\x3c\x4c\xe2\x7a\x20\xfa\x33\x55\xff\x5b\x13\xa4\x5e\xe6\x45\x88\xa0\x2c\xbf\xfe\xc7\xd5\x72\x5a\x4b\xc6\x90\x5b\xa4\xe3\x64\x86\xe2\x9d\xfb\xcd\x33\x52\xa5\xa8\x16\x95\x93\x2c\x8c\x83\x95\xa4\xcd\x53\x88\x9e\xbd\x02\x13\xd3\xc3\x45\x43\x75\xbd\x79\xfc\xe7\xa7\x6d\xf9\xbc\x97\x7a\x20\x24\xd5\xdb\xf2\xc3\x98\x9c\x11\x4e\xbd\x21\x7b\x94\x24\x58\xf1\x22\xf4\x73\xe6\x9e\x66\xc9\x4b\xc5\xa3\x8c\x9c\x15\x7f\x82\x1d\x87\x28\x26\xdf\x29\xa4\x9b\x44\x5e\x18\xd7\x0b\x95\x3d\x1f\xe1\xef\x90\x24\x45\x5e\x70\x5e\x5b\x67\xf8\xb9\x82\x4c\x4e\xc8\x40\xa0\xc8\xd0\x59\x49\x03\x74\xc2\x22\x2e\x90\x51\xf8\x38\x04\xd2\x88\x83\x30\x43\x79\xce\x61\x9c\x00\x8f\x84\x49\x3c\x44\x64\x92\xc0\xef\x35\x08\x9d\x78\x24\x04\x17\x0d\xad\xcf\x8a\x1f\x61\x82\x3a\xf1\x62\xe8\x65\xf0\xf8\x98\x79\x3e\x19\x35\xc3\x9e\x56\xdb\x09\x85\x95\x69\xcc\x73\xb5\x1d\x86\xcf\x21\xf0\xc8\x8f\x74\x99\xdf\xb6\xc6\xba\xce\x50\x9e\x14\x19\x40\x75\x9c\xf9\xe7\x86\x66\x6f\xa8\x7c\x56\x1c\x8c\xdf\x3c\x88\x97\x9a\xbc\xfe\xe7\x6b\xbc\xfa\x70\x73\x5c\xe1\x37\x1f\xbf\x5e\xef\x08\xf8\x73\x6f\xc6\x69\x96\xa4\xf5\x7a\x51\x7e\x7c\xac\x8d\xd8\x43\xdb\x39\x39\xfe\x3e\xfd\xd9\x89\xac\x17\x05\x51\x79\x5b\xa6\xf1\x6d\x1a\xa6\xfb\xda\x5d\xeb\x7e\x18\x82\x2c\xc9\x93\x67\xf2\x59\x41\x64\x9e\x64\xb3\xbb\xbd\xc1\x51\xbe\xcf\xba\x9e\x4c\x33\xed\xb5\xf6\xc5\x2c\x29\xd2\x0f\x1f\x3f\xaf\x1f\x7e\xdd\xe7\x02\x49\x0c\xc3\x0d\x1b\xfa\x77\xe1\xe1\xfc\xc3\xf6\xa2\x5f\x03\xf7\xcd\xc7\x4f\x57\xd4\xc7\x03\x09\x5e\x1a\x6e\xa5\x1b\x86\x62\xa8\x5b\xea\xe1\x96\xa2\x8f\x9a\xdf\x7f\xde\xb7\x35\xde\x6a\xa7\x53\x0f\x1c\x1a\xea\x3e\xd5\x28\x43\xcf\xe1\xcb\x9e\xc1\x1d\x10\xd3\xd4\x32\x21\xde\xb1\xd7\x47\x89\xbe\x1e\xdc\xdd\xdb\xc6\x46\x4a\x5e\xf8\x31\x22\x6f\x0f\x75\x7c\xa6\x57\x17\xac\xf9\xed\x95\x35\xd9\x7c\x3d\x7b\xe6\xfe\xf8\xf4\xdf\x98\xf0\x46\xe2\xda\x06\x45\x8f\xa0\xb9\x57\xe9\xcd\x3a\x8e\x8b\x7a\x43\xcc\x4f\x5d\x1a\xbd\x5c\xda\xdb\x0b\x58\x2e\x62\xe9\x13\x7a\x9d\x1d\x42\x52\x35\x46\x7e\x76\xc4\x86\x33\x84\x3b\xee\x21\xc1\x0f\x37\x87\xae\x76\x4c\x7c\x7e\xf3\xe9\xea\x26\x4b\x6f\xe3\x3c\xb8\x39\xf0\x81\xa3\x43\x11\x2f\xa8\xd5\x10\x17\x18\x9f\x24\xfe\xf3\xbb\xf6\x71\x9c\x24\x38\x8c\x83\x93\xfb\x78\x70\xf7\xeb\xe5\x61\xaa\x96\x7a\x71\x8c\x2a\xc3\x8c\x14\x1e\x5e\x7d\xfc\x41\x11\xea\x67\xc6\x97\x30\xe5\x93\xf8\x39\x0c\x8a\xac\x19\xfb\xa7\xfb\xf3\x32\x6c\xfc\x40\x53\xdd\xd3\xf8\xdd\x2a\x2e\xd5\xc6\xba\xde\xbe\xfa\xef\x1d\x6f\x3f\xc8\x53\xfb\xd7\x09\xbb\xbb\x3a\x52\xf8\xfc\xc0\xe5\x1c\x24\xb9\xcd\x42\x96\xe9\xf2\xfc\xd4\xbf\xcb\x99\x56\xb5\xcd\xc5\x6e\x74\x24\x31\x94\x69\x3c\x5e\xf9\x87\x96\x14\x04\x75\xbc\x1c\xc1\x23\xe1\xe2\xcd\xd2\x67\x67\x42\x66\x1a\x8b\x73\xfa\x8d\x68\x73\x4d\x42\x94\x6d\x51\x5d\x94\xb8\xea\xf2\x6f\xd9\x8a\x6c\x1b\xfe\xdb\x33\xd9\xd0\xaf\xb6\xa4\xee\xb4\x4e\x6e\xf8\xbb\xb2\x71\xc3\x40\xb3\xcc\x67\xfa\xcb\xc3\x67\xa6\xdd\x3e\x93\xd8\x0e\x73\xf3\x1b\xcb\xdc\x9d\xba\x96\x24\x64\xab\xe2\x3d\x3d\xa5\x33\x1e\xfc\x0e\x6f\xbf\x7a\xf5\x95\x7a\xf4\xae\x47\xbc\x83\x92\x72\xbf\x1a\xff\x6e\xdf\xdc\xaf\x31\x81\x77\xa2\x4e\x38\x5e\x00\x9d\x53\xe7\x28\x4b\x48\x02\x12\x7c\xa6\xd0\x7a\x4a\x51\x6c\x8e\x94\x8b\xab\xac\xf7\x94\xce\xdf\x9a\x92\x56\x71\xf0\xbf\xbf\x76\x3e\x68\xba\x52\x14\xc3\xfc\x29\x3e\xaa\xf2\x1f\x11\x55\x8f\x84\x8a\xf7\xa5\x9e\x9d\x94\xb3\x6f\xc5\x5f\x2f\xc8\xd5\x67\x7b\xc1\x75\x67\xfc\x47\x97\xc9\xff\x28\x5b\xc7\xa6\xbc\x8e\x88\x9b\x26\xfa\x08\x0d\x78\x3d\x87\xda\xf5\xc5\xed\xdd\xfa\xce\x96\xb2\x48\x83\xcc\x83\x68\x94\xe0\x10\x1c\xf6\xe9\x1b\xb2\x28\x81\x4b\xb3\xf5\xe2\xc2\xc3\x17\x06\xf0\xa5\xda\x87\x1e\x98\x84\x31\x1a\x65\xc9\x73\x88\x4f\xf4\x46\x49\x7e\x8e\x64\xa9\x94\x24\x4a\x0b\x82\xb2\xba\xa1\x7e\x2d\xc9\x41\x78\x7b\xa2\xd2\xbd\xf6\x60\x14\xc6\x46\x8e\xb2\xf5\x0e\x01\x9c\x14\xf0\xb6\xc8\x51\x76\x8a\x0d\x87\x71\xf1\x72\x59\xfa\xd9\xf0\xc0\x30\xf7\x7c\x8c\x46\x5e\x9e\xcf\x93\x0c\x72\x05\x99\xa0\x98\x84\x1b\xaf\x25\x59\x81\xce\x44\xc6\x3c\x3f\x3c\xac\x3a\x4a\x98\xae\x0f\x58\xce\xe7\xae\xf5\x75\x5e\xea\xab\x74\xaf\x39\x34\xbb\xbe\x9b\x24\x11\xba\x7b\xd5\xd8\xdd\xe7\x3c\x9f\xdc\x79\x05\x99\x24\x59\xb8\x40\xf0\x8f\x19\x3a\x88\x53\x27\x05\xcf\x50\x75\x34\xc5\x6c\x1f\x19\x9d\x4d\x2f\xeb\xeb\xed\x3a\x6a\x7d\x1d\xcf\xc5\xe7\xf9\x8f\x3f\x79\x2b\x87\xe7\x24\xc9\xbc\xe0\xac\x99\x37\xb4\x61\xe4\x05\x48\x43\xcf\x28\x43\xf1\x89\xe3\x82\x0d\x7d\xb3\xcf\xf9\x64\x19\x31\x34\x04\x7b\xde\x7e\xab\x73\xc0\x92\x3c\x3f\xaf\xc8\x7b\x8f\xf2\x39\xe2\x65\x40\xbb\xfe\xfb\xad\x6c\x0e\xcf\xd1\x96\xaf\x59\x00\xd7\x25\xca\x1b\x35\xe8\xd5\x99\x42\x36\xc9\xbb\x61\x3e\x3b\xbf\x74\x90\x21\x8f\xa0\xa7\x74\x9d\xbc\x84\x2c\x89\x96\x47\xc2\x67\xe6\xb9\xc4\x29\xe0\x45\xa3\x5c\x6d\x6d\x20\x07\x40\x52\xc4\x64\x5d\x1a\x8f\x32\x14\x85\x45\xf4\x87\xac\xe9\xdf\x5c\xcf\xbf\xcb\x8e\x56\x2d\xfd\x45\x76\xb4\xa2\x95\x62\x82\xb2\x67\x0f\xa0\x0b\x5b\xc4\xf5\x75\x81\x52\x36\xf1\x32\xbc\x2d\xa3\x3c\xbf\x8d\x43\x70\xc9\x89\xc2\x3b\x6b\xcf\x15\x4f\x18\x79\x59\x75\x51\x88\xdc\x30\x5d\xdc\x16\x1f\xbb\x2e\x8f\x85\x57\xc7\x74\x11\xa6\xa0\x19\xfb\x1d\xa1\xef\xea\x1b\x95\xb3\xc3\xff\x8e\xd6\xfc\x28\xff\x8f\x6c\xd7\x77\x0e\x75\x2e\x8e\xd9\xdb\xd7\x99\x36\xe1\xe8\x0a\xbe\xc5\x54\x76\x05\xec\xd6\x99\xef\x4b\xf1\x6f\x4a\xdd\x37\x90\xc3\x53\xf3\xcb\x27\xf8\x7d\x36\xb2\x91\x03\xe3\x5c\x47\x84\x84\x71\xf0\x7d\x82\x96\xc2\x0e\x40\xbd\x6b\x2f\x4b\x6e\x41\xf8\xfe\x5d\x5f\x5f\xe7\xb3\xf7\x8f\xe1\x7a\x1f\xc7\xe5\xd4\x97\x51\x9e\xae\x40\xce\xcb\x79\xfb\xe9\xfb\xce\x19\xd0\x0b\x41\x71\x9d\xbd\x2f\xca\x2e\x1b\xea\x9f\x92\x49\x40\x7e\x2e\x85\x5f\x7d\x73\x26\xd9\x2e\x97\x5e\x43\x1b\xd7\xbc\xae\xf0\xf8\xba\xaa\x0b\x73\xcc\xba\x65\xe7\x8b\x9c\x24\x91\x0e\xb2\x30\x3d\x57\x7e\xed\xf0\xf6\xbc\x18\x62\x94\x6d\xb7\xcf\x9b\xb7\x1c\xce\x0a\xf0\x0a\x92\x18\xcb\x1e\x6d\x18\xc6\xc9\x96\x94\x77\x64\xc9\x7c\x2b\x04\x5c\x18\x6f\x6b\xc5\x13\x04\x08\x82\xdf\x14\x3f\xae\xf3\xa5\x9a\xea\x44\xe3\x7b\x39\xfa\x72\xff\x01\x24\x31\xf0\xc8\x87\xe5\xa7\x71\xa2\x37\x98\xed\x87\x1b\xc0\x98\x94\xc4\xd3\x98\x0f\x92\xdf\x6f\x3e\x7e\xba\xe1\x25\xce\x1d\x8d\x9f\x06\x8f\xca\xef\x37\x37\x37\x9f\x76\xdb\xde\xf5\x9b\x1f\x35\xe1\xcd\xcd\xbf\xe2\x9b\x9a\x7e\xf4\xf4\x24\x2b\xdc\xf0\xf1\x08\xfd\xfa\x6d\x8b\x2d\xfa\xfa\xbf\xfd\x39\xf0\x31\xa6\x7d\x9d\x23\x48\xef\xd0\x40\xd4\x26\x50\x34\x02\xd9\x0e\x02\x93\x12\x86\x9e\xd5\xa6\xd1\xa3\x10\xbb\x56\x9b\xe2\x83\x34\x87\x91\x79\x0f\x45\xb3\x70\x79\x8e\xf8\x3c\x97\x29\x63\x0e\x6b\xb8\x2f\x68\x3a\x57\xba\xa2\xc9\xc8\xad\x7e\xe9\xb7\x34\xc6\xad\x58\xc6\xb1\xfb\x39\x0c\xd2\x7b\x37\x56\x9e\xdd\x56\xbf\x84\x8c\xbb\x90\xf8\xfa\xbe\x34\xe0\xa3\x17\xc6\xb5\x27\x94\x6b\xb5\x67\x12\x4f\xe7\x12\x9f\xbf\x0c\xbb\x6f\xca\x4a\x7c\x86\xc6\x7e\xcf\x19\x20\xd1\x5d\xd8\x0c\xac\xfc\x16\x8c\x40\xc5\x95\x9e\xc8\x12\x57\x4d\x06\x20\xee\x10\x89\xa7\x88\x67\xd1\x73\xbf\xd5\xa7\x24\x71\x42\xc1\x5e\x67\xf1\x14\x3e\x94\xae\x38\x2f\xdc\xc8\x9c\xf9\xad\xfe\x04\xf4\xfa\xa5\x17\x99\x53\xc8\xb7\x4b\x10\x81\x12\xf4\xcc\x50\x66\xcc\xb9\x6b\xcd\x4b\x03\x77\x14\xd9\x80\xaa\x56\xd1\xb2\x66\xce\x88\x66\x76\x84\x31\x4f\xb5\xf8\xb8\x3f\xaf\xf5\x23\x5b\x98\x00\x91\xad\x20\xdf\x49\x60\x4f\x9b\x83\x45\x52\xca\xad\xce\xc4\x61\xc8\xc4\x65\xcc\x85\x1c\xd1\xa9\xd3\xea\x97\x80\x61\x23\xc8\xb7\xa7\x3e\x43\x95\x1e\x63\xb6\x41\xc5\x12\xcf\x52\x2a\xbf\xa5\x94\x6e\xac\x16\x8e\xad\x4c\xf9\x20\x6d\x43\x8b\x0a\x64\x7b\x16\x78\x56\x7b\x01\x45\x21\xf7\xb7\xe5\x32\x5a\x2e\x47\x2e\x76\x45\xb6\x72\xec\x4e\xe5\x33\x29\x76\x5a\x6a\xe1\xb7\xfa\xb1\xdc\xea\xd0\x4e\xc8\x62\x20\x9a\xf9\x6a\xee\x04\x44\x66\xee\x5a\xc2\xc2\xd5\xe9\xdc\xb1\x35\x0c\x5a\x2a\x51\xaa\x76\xe1\x33\x42\xe5\x30\x41\x51\xeb\x87\x0f\xd2\xa9\x63\xab\xc1\x28\x64\x31\x14\x87\x25\xb2\x4d\x22\xc7\x7d\x0c\x44\x76\x21\x47\x6a\xe9\xd8\x29\x0d\x22\xa3\x00\x91\x39\xf7\x2b\xee\x61\xc4\x43\x61\x4c\x39\x31\x8f\xeb\x26\xde\xac\x5c\x9d\x9e\xfa\x22\x86\x7c\xd4\x9e\xf8\x96\xc1\xae\xe8\x89\xc3\xbc\xa4\x7c\xd4\x9f\x00\xc6\xa4\x41\x34\x67\xbd\x9e\x46\x81\xde\xf0\x8b\x5c\xb1\x73\xc7\x52\x32\xc7\x82\x18\x54\xed\x5d\x1d\x30\x2c\x91\x5b\x98\xf6\xed\xd5\xf8\x8c\xf0\x05\xda\x7d\x2c\x5b\x4a\xee\xa9\x29\xf6\x23\x21\xf4\x45\x73\x36\xb2\x31\x06\xf3\x34\x06\x22\x9c\x7a\xa2\x39\xf5\x16\x74\xdb\xb5\x87\x03\xcd\x60\xc5\x8d\x0e\x75\x7a\x4d\x5f\xb9\x76\xa7\x1c\xd9\xfd\x04\x5a\x33\x02\xa2\x09\xf6\x79\xaa\x25\xdb\x0a\x06\xb1\x8b\x41\x48\x57\x5e\xcf\x4c\x65\x8b\x9d\x43\x11\x97\x7e\x24\xe4\xb2\xdd\x9f\xfb\xf6\x70\x7f\x1f\xb6\xd6\x3b\x0b\x5c\x91\x9d\x7a\x8c\x59\x49\x62\xfa\x22\x89\x70\xea\x54\x9d\xca\xe3\xe9\xd8\xb3\xd5\xea\x49\x6f\xfe\x9e\x23\x5b\x4b\x7c\xe6\x7e\xa1\x84\x1d\xca\xb7\x3b\x2d\xc7\xd6\xa6\x1e\x97\x0c\x34\x8a\x7d\x36\x67\xa6\x6e\x50\x78\x34\x9e\x52\x2f\xf2\xf4\x91\x92\xa7\xb3\x81\xd3\x32\xab\xc3\xfd\x86\xa5\xcf\xc0\xdc\xd5\x97\xb6\xe3\x32\x0f\xf5\xcf\x0c\x51\x70\x64\xd3\xae\x60\x60\xa5\x3f\xa6\xda\xac\x1c\xbd\xa4\x7e\x6c\xde\xcb\x96\x40\xdc\xae\x43\xc9\xb1\x36\x01\x61\x3b\x46\x61\xe7\x41\xea\xd5\x7f\x73\x44\xad\xb8\x12\xda\x4a\x25\x33\x2f\xa5\xc3\x08\xb9\xc4\xd3\xf7\x28\x48\x73\x3f\xe4\x08\xd8\x7b\x26\x33\xb0\x94\x99\x7e\xea\x87\x0f\xff\x96\x78\x96\x06\x2d\xa9\xf4\x45\x76\xea\x58\xf3\xd2\x89\x70\xc1\x07\xa9\x65\xd0\xda\xd8\xa6\x84\x9e\x66\xb4\x8d\xd7\xb9\xdc\xb3\xc3\xf0\xfe\xe5\xa9\x1b\x14\xc3\x79\x4a\x3c\x46\x4b\x41\xb8\xf2\x49\x9d\x9d\xfa\x22\x4b\xbb\x3c\x4d\x03\xc6\xac\x64\x66\x15\x43\xe2\x0e\x0d\x98\xc9\x4c\xe2\x97\x3e\x2d\x33\x4a\xee\xb7\xcc\x99\x6c\x9b\x0b\xd7\x96\xca\xda\x56\xfc\x58\x3d\xd4\x4f\xcb\x5d\xc0\x9e\x52\xfb\x59\x01\x7b\x6b\x9f\x33\x8a\xa5\x0d\x9a\xd8\x15\x21\x96\xa3\x36\x86\x3c\xbb\xa4\xe1\x1f\x66\x88\x76\xc7\xa6\xa0\x3c\xab\x06\x14\xc6\x58\x7b\xdd\x87\x98\x2a\x61\xac\x50\xa0\xa2\x57\xb4\x74\xde\xc4\x39\x9e\xbe\x57\xa6\x2a\xe9\xf7\xc8\x1b\xeb\x6d\xb3\xc7\x74\x8d\x7a\xc9\xc0\x61\x26\x25\x64\xee\x03\xd9\x94\x02\x87\x79\x29\xa1\xa5\x12\x58\xdb\xdd\x34\xdd\xd1\x83\xc4\xdf\x0f\xf8\xf0\xbe\xd1\xab\xcc\xe0\x02\xb4\xb4\x89\x2f\xbe\xcc\x5c\xbb\x83\xfd\x48\xc3\x7e\xa4\xa4\xae\x3d\x2c\x00\x13\x0c\x40\xcb\x9c\xf9\x15\x47\xa0\xde\xd9\x97\x51\x3a\x0c\x5b\xb8\x11\x8e\xe5\x58\x49\xea\xb8\x07\xad\xf6\x04\xf6\xb4\x46\x46\x1d\x9b\x65\xfb\xc0\xbe\x30\x0c\xdb\x2b\xbb\x5e\xda\x97\x6f\x2b\xab\xcf\x75\x6c\x13\x68\x28\x06\x01\x10\x05\xaa\x91\x27\xb2\x99\x6b\xdd\x07\x52\xa8\x75\x75\x43\xf0\x0c\x41\x1b\xe9\x94\xf9\x24\x85\xb5\xec\x4e\xe9\x33\xf3\xe5\x33\xb3\x33\x1a\x53\x2f\x4f\xaa\x41\x0b\xcd\x33\x6b\xb9\xcf\x12\xdf\xef\x18\xb3\x07\x62\xcc\x26\x75\x0c\x9d\xe9\x8f\xec\xd8\x7c\x6c\x77\xc6\x86\x11\xd6\xf2\x9b\x18\x23\x0a\x53\x57\x4d\x0a\xb9\xa5\x30\x4e\xd5\x5e\x78\x7c\x27\xf5\x63\x85\x72\xac\x97\x5c\x12\x77\xec\x62\x00\x44\x76\xee\x72\xc9\x40\xaa\x3a\xc4\xb5\xfb\xb1\xab\x77\x52\x3f\xe4\x4a\xbf\xd5\xa1\xe4\x56\x3f\x69\x7e\xf4\xa4\x74\xad\xf6\xc4\x89\x5e\x30\x1f\x29\x13\xc8\x73\xff\x5f\x66\x26\xa5\x6f\x19\xe5\xce\x9e\x84\x1b\x1b\x29\xea\xf5\x7a\xfc\x56\xac\x0b\xd9\x12\xf4\xd4\x12\x44\x41\xfd\x43\x40\x0f\x53\x9e\xc8\x16\xc3\x85\x53\x82\x88\x2d\xe1\xca\x3f\xea\xfd\x7b\xda\xa3\x75\x19\x4c\x0d\xa7\xb3\x63\x74\x07\x3e\xb5\xbe\x77\xec\x39\xa8\x7d\x71\x9a\x2c\x7d\xb4\xa5\x84\x9e\x75\xff\xe5\xf8\x3a\x1e\x8a\x3d\x99\xc7\x7d\xaa\xf6\xe1\x99\x39\xd2\x82\xda\x4e\x05\x4a\xea\xde\x9f\xf4\x51\xb9\x6a\x63\x3f\x76\x82\x51\x77\x1e\xd7\x71\xb6\x3f\x4f\x87\x9a\xc0\x0e\x75\xa3\xaf\xab\x66\xdf\xb5\xe9\x4e\xc7\x7c\x0c\x58\x99\x61\xe7\x90\x67\x2b\xaf\xf9\xd9\x8e\x81\x6c\xe5\x33\x2c\x25\xb7\xcc\x05\x08\xd9\xdc\xb3\x24\x46\xe9\x26\xaf\x7b\xc5\x34\xb9\x79\x36\x9c\xaa\x3b\xba\xf2\x45\x1c\x2a\x53\x75\x30\x36\x84\x27\xe3\x51\x30\xf4\x2e\xb5\xbb\xbf\x76\xa7\x0d\xc5\x49\xe9\x4f\x87\xab\xda\x40\x5d\xeb\x28\x71\xea\xdc\xc1\xd0\x93\x5a\x6f\x3b\x3c\x16\x4c\x61\x57\x6a\xbf\x49\x1f\xa4\xaa\x66\xf6\x87\x8a\xf1\xd2\x57\xa7\xd4\xe5\xbc\xad\x0e\x06\xd1\x9c\x96\x5b\x6e\xed\x73\x25\xc0\xec\xdc\xb5\xfb\x39\x8f\x3b\xb2\x46\xb3\xdd\x31\xd5\x16\x75\x03\x3e\xbf\x6b\x1d\xcc\x4b\xea\x4c\x1d\x4a\x6e\x75\x32\x97\x51\x4a\x3f\x72\x53\x77\x9e\x3a\xda\x23\x7c\xd6\x1e\x05\x43\x35\xd9\x47\xdd\xec\x8f\x47\xfa\x65\x36\x0a\x98\xc9\x04\x44\xc6\x97\xf5\x3e\xf8\x8c\x32\xf1\x79\x76\xe1\x89\x42\xe5\x8e\x93\x9d\xf5\xac\xed\x03\x30\x66\x5d\x8f\xa5\x75\x4d\x2a\xf1\x70\x21\xd3\xed\x91\x21\x68\x75\xec\x1b\x8f\x74\x08\xfa\x15\x28\xc7\x74\xc7\xd0\x0d\xf6\xc9\x58\x50\xb1\xcd\x83\x58\x36\xc0\x6e\xcc\x0b\xb9\xb2\x5f\x71\xa5\x6b\x6b\x53\xb9\xa5\xb4\xc1\x7a\x2d\x15\x3b\xf3\x19\x25\xab\xfd\x99\x8f\x95\x36\x68\x69\xd8\xb7\x14\xca\xe7\x3b\xab\xfc\x6d\x6c\x72\xed\x7e\xad\x52\xd7\x55\x7e\xd8\x4e\xfc\x3a\x2f\xf4\x66\x25\x14\xe9\x39\x64\x04\xca\x61\x82\x2d\x3b\x4d\xa6\x92\xce\xd6\xfe\x52\x3a\x91\xb0\xa8\xf3\xaf\x6b\x4f\xb0\x53\x71\x4b\x9f\x0a\xd9\xd7\xdc\xcc\x73\x95\x22\x06\x81\xdc\xd2\x08\xe0\xd2\xda\xf7\xeb\x18\x4e\x7c\x46\x0d\x06\xad\x20\x90\x19\x93\x72\x2a\x76\x0a\x22\xb6\x90\xa3\x49\x09\xed\x7e\x8e\x74\x76\x27\xb7\x0f\x7a\x4a\xee\x5a\xe6\x5c\xea\x0e\xe7\x4f\x55\xa7\x72\xad\x66\x2f\x53\x89\x77\x06\x37\x1f\x3f\xfe\xb8\x23\xfc\x1f\xdc\x1e\x5f\x04\x5f\x25\x25\xca\xd2\x2c\x29\xc3\x55\xbf\xf5\xec\xe1\x1c\x5d\x04\xfd\xae\x5a\xdc\xf3\xd0\x2f\xbf\xc4\xb2\xee\x76\x91\x32\x1d\x78\x18\xe9\x88\xfc\x14\xec\x37\x68\xce\xd3\xb3\xef\x07\x7f\xbf\xfc\x70\xf0\xf7\x7f\x00\xa6\xa5\x7f\x61\xb1\xcb\x37\x1f\x9a\x17\xe6\x7f\x41\xb2\xbf\x20\xd9\xe3\xd7\x2f\x48\xf6\x17\x24\xfb\x0b\x92\x3d\x72\xbd\xe3\x20\xfd\x35\xcc\xfe\x42\x66\x8f\xab\xe4\xaf\x0a\xd0\x66\xe9\x06\x9f\xcd\xd2\xdb\xfc\x17\x36\xfb\xb6\x89\xfc\x05\x20\xda\xdd\x2f\x86\x1d\xf9\x72\xe6\x37\x99\xc6\xfa\xfa\x05\xe0\x5e\x22\xe7\x7f\x09\xc0\xdd\xf3\xa0\x5f\x38\xee\x45\x02\xfe\x32\x38\x2e\xe2\x92\xc1\xcd\xc7\x4f\x37\x23\xed\xc9\x76\xa4\x21\x27\x3e\xfe\xfe\xb7\x15\xf1\xd5\x2d\xbc\xfa\x57\x41\x51\x2d\xb0\xfd\xff\xcd\xcd\x1a\x90\xfd\x70\x10\xa9\x9a\xb2\xf2\xe6\x63\x83\xde\x7e\x6c\xe0\xdb\x57\xb1\x9c\x31\xee\x7d\xaf\xe8\xba\x15\x3c\x14\xcf\x3f\x6a\xe3\x03\x30\x79\xf3\xd5\xfa\x2d\x2c\x79\x49\x2d\x4b\x8f\xca\xf8\x04\xcf\xe6\xfb\xf4\xfb\x9c\x83\x47\xe7\x38\x4b\xd3\x6c\x9d\x44\xac\x91\x6d\x12\x89\xa7\xdb\x52\xcf\x9c\xbb\xa2\x40\xb9\x3a\x47\x10\xdf\xb1\x55\x63\x89\x8c\xa9\x2b\x14\x69\x43\x27\xae\x91\x96\xf9\xf6\x09\x63\xe4\xd9\x7d\x0c\x19\x21\xf7\x79\x7a\xea\x5b\x6a\x20\xeb\xf4\xc4\x15\xd5\x25\xca\xdb\xa5\x28\xa5\x3b\x2c\xa1\xa8\xcc\x1b\xc4\x42\x34\x2b\xdf\x12\x8a\x15\x12\xbe\x41\xbb\x96\x27\xae\x0f\xc5\x46\xee\x1a\x79\x58\x9d\xec\xca\x91\x56\x3a\x0c\xc1\x20\x64\xa7\x3e\xd3\x8e\x3c\x0b\x14\x5e\xac\x94\x7e\xc8\x3d\x8c\x1e\xcd\x91\x16\xa4\x7f\xe7\x83\x59\xe8\xd8\x26\xe5\xf5\x86\xe1\x53\xd8\xa9\x3f\xf7\xa5\x50\xfb\xbb\x21\xf4\x47\x96\x80\xfb\x63\x43\xe8\x69\xba\x81\xe5\x2a\x65\xa5\x69\x12\xa0\x79\xd2\xe7\xd5\x15\x0f\x2f\x7d\x91\x78\x69\xb6\x43\x6b\x08\xa6\xf9\x18\x84\xb5\x9c\x67\x35\xe9\x3f\xab\x29\xbb\x3c\xe1\x4d\x17\xc8\x56\x28\xd7\xa2\xa7\x50\x9c\x07\xb5\x4e\x40\xac\x6e\x74\x22\xc7\x0d\x52\x9a\x3a\x8c\x31\xd8\xa0\x9e\xbd\x0e\x5d\xeb\x4d\x0a\x35\xd5\x98\xb1\x8e\x65\x60\x45\x35\xa0\x20\x05\xc9\xc0\xb7\xc8\xcc\xb3\xa5\xf5\x69\xe9\x1c\x44\xec\x3d\x52\xd3\xd0\xb1\x15\xac\x4c\xd5\x40\xb6\xd4\x60\xd4\x9d\x3f\xbc\xf2\x2a\x82\x81\xd5\x50\xea\xde\xaf\x4e\x87\x3b\x95\xdf\x9a\xb4\x37\xbf\x23\xa5\x82\xdc\x29\x7e\x22\x58\xba\xb4\x39\x15\x06\xbd\x7e\x89\x7a\xb3\xf5\xef\xc2\x63\xcc\xf6\x12\x89\x36\x18\x85\xe7\x88\xcb\x73\x0f\xa3\xee\x3c\xec\x0b\x1d\x7d\x4c\x4f\x5c\x95\x7a\xe9\x6b\x46\xdb\x50\x29\x53\x37\xf9\x37\xe5\x34\x88\x76\x83\x84\x2c\xe7\x33\xf5\x44\xb6\xe5\x87\x1c\x31\x42\xee\x65\xd8\xe5\xe6\x4f\xd3\xc7\xf9\xb0\xcb\xed\xaf\x7b\xea\x89\x74\xe9\xf2\xdc\x5c\x99\x72\x73\x89\x3f\x31\xc7\xbd\xd3\x6d\xd0\xc2\x8b\x0d\xa2\xb7\xd2\x85\xd4\x9d\x3f\x34\x28\x37\x5e\xce\xdd\xa6\x96\x7a\x1f\xe9\x60\x77\xaf\x75\xb0\x46\xc3\x0f\x64\x42\xd1\x24\x2e\xcf\xae\xf6\x9c\xda\xcc\x01\x30\x66\x05\x23\x3c\x75\xf5\x1d\x94\xdf\xf4\x23\x4c\xd9\x6a\xda\x71\x63\x0d\x83\x29\xbd\x3e\xad\x7f\xa5\x57\x53\xdd\xb5\x05\xba\xf6\x1b\xb0\x38\xf6\x3c\x19\x58\xf4\xda\x86\x4c\xc8\xcf\xcc\x02\x46\xb8\xf2\x99\x36\xa9\xf5\xa9\x45\x38\x77\xc7\xd4\x31\x64\x60\xad\x43\x01\x89\xe6\xd4\x68\xec\x52\x53\x41\x64\xb0\xb2\xfe\x8a\x94\xc9\xcc\xda\x97\x3a\x95\xaf\x73\xc4\x0d\x39\xec\x07\xdb\x3c\x2a\xbb\x42\x3b\x1a\x14\xe0\xd5\x86\xfb\xb4\xdf\x20\x97\xfd\xe6\x2d\x11\x3f\x12\x88\xab\x73\xb8\x41\xc3\x79\xae\xf6\xf3\x2f\x4f\x5d\x95\x1a\x56\x1c\x81\x21\xb7\x63\x9b\x4f\x21\xbb\x70\x2d\xa5\x72\x6d\x6d\x21\xf1\x2b\x3b\x34\xd9\xa5\xee\x5f\xe7\x5b\x82\x2e\xb5\x42\x71\x1a\xa4\x61\xad\x9b\xda\xc7\x4a\xc0\x37\xf3\xd4\x5d\x5b\xa1\x1c\xbb\x4f\x8d\x2c\x21\x87\x8c\xd0\x06\xf3\xd7\x7b\x06\x63\x4e\x47\xe3\xc7\xc1\x6a\xed\x43\xcf\xa2\x53\xf8\x88\x0b\x28\xd6\xba\x15\xf2\xd1\x98\x1b\xf0\x98\xf4\xd7\x08\xa9\xad\xa6\xb6\x63\xb5\x29\xd7\xd2\x78\x34\xa6\x09\xb4\x5e\x28\x4f\x5f\x21\x79\xb1\x36\x01\x11\xc4\x70\x85\x6c\xbc\x85\xb6\x1c\xd8\x83\xfa\x0b\xd5\x38\xf1\x85\xb6\xd7\xba\xef\xbf\x04\xdc\x78\x13\x99\xf8\x6d\x57\x2d\x5f\x7f\xfb\xf3\xb7\xff\x0b\x00\x00\xff\xff\x31\xf7\x91\xb7\xdb\x48\x00\x00")
+var _envDevelopmentJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7b\x69\x6f\xa3\x4a\xf6\xf7\xfb\xfb\x29\xa2\x3c\x23\xa5\x5b\x4f\xa7\x03\x38\xee\x09\x23\xdd\x17\x18\x07\x8c\x8d\x89\x01\xb3\xce\xb4\xae\xa0\xaa\x82\xb1\x8b\x65\xa0\xc0\xc1\xa3\xfb\xdd\xff\x02\x2f\xf1\x16\xdb\xe9\x45\x1a\xcd\x6d\x5a\xe9\xc4\x70\xce\xa9\xaa\x53\x67\xad\x1f\xfe\xcf\x6f\x57\x57\x57\x57\xd7\x7f\xcb\xc1\x04\x45\xde\xf5\x3f\xae\xae\x27\x84\xa4\xf9\x3f\xee\xee\x96\x77\x3e\x47\x5e\xec\x05\x28\x42\x31\xf9\xec\x2d\x8a\x0c\x7d\x06\x49\xb4\x7a\x96\xdf\x31\x14\xdd\xbe\xa5\xe8\x5b\x8a\xbe\x83\x28\xc5\x49\x55\xd3\x8d\x51\x94\x62\x8f\xa0\xcf\xd3\x3c\x89\xff\xdf\xf5\xa7\xe5\x08\x20\x89\x09\x8a\x89\x89\xb2\x3c\x4c\xe2\x7a\x20\xfa\x33\x55\xff\x5b\x13\xa4\x5e\xe6\x45\x88\xa0\x2c\xbf\xfe\xc7\xd5\x72\x5a\x4b\xc6\x90\x5b\xa4\xe3\x64\x86\xe2\x9d\xfb\xcd\x33\x52\xa5\xa8\x16\x95\x93\x2c\x8c\x83\x95\xa4\xcd\x53\x88\x9e\xbd\x02\x13\xd3\xc3\x45\x43\x75\xbd\x79\xfc\xe7\xa7\x6d\xf9\xbc\x97\x7a\x20\x24\xd5\xdb\xf2\xc3\x98\x9c\x11\x4e\xbd\x21\x7b\x94\x24\x58\xf1\x22\xf4\x73\xe6\x9e\x66\xc9\x4b\xc5\xa3\x8c\x9c\x15\x7f\x82\x1d\x87\x28\x26\xdf\x29\xa4\x9b\x44\x5e\x18\xd7\x0b\x95\x3d\x1f\xe1\xef\x90\x24\x45\x5e\x70\x5e\x5b\x67\xf8\xb9\x82\x4c\x4e\xc8\x40\xa0\xc8\xd0\x59\x49\x03\x74\xc2\x22\x2e\x90\x51\xf8\x38\x04\xd2\x88\x83\x30\x43\x79\xce\x61\x9c\x00\x8f\x84\x49\x3c\x44\x64\x92\xc0\xef\x35\x08\x9d\x78\x24\x04\x17\x0d\xad\xcf\x8a\x1f\x61\x82\x3a\xf1\x62\xe8\x65\xf0\xf8\x98\x79\x3e\x19\x35\xc3\x9e\x56\xdb\x09\x85\x95\x69\xcc\x73\xb5\x1d\x86\xcf\x21\xf0\xc8\x8f\x74\x99\xdf\xb6\xc6\xba\xce\x50\x9e\x14\x19\x40\x75\x9c\xf9\xe7\x86\x66\x6f\xa8\x7c\x56\x1c\x8c\xdf\x3c\x88\x97\x9a\xbc\xfe\xe7\x6b\xbc\xfa\x70\x73\x5c\xe1\x37\x1f\xbf\x5e\xef\x08\xf8\x73\x6f\xc6\x69\x96\xa4\xf5\x7a\x51\x7e\x7c\xac\x8d\xd8\x43\xdb\x39\x39\xfe\x3e\xfd\xd9\x89\xac\x17\x05\x51\x79\x5b\xa6\xf1\x6d\x1a\xa6\xfb\xda\x5d\xeb\x7e\x18\x82\x2c\xc9\x93\x67\xf2\x59\x41\x64\x9e\x64\xb3\xbb\xbd\xc1\x51\xbe\xcf\xba\x9e\x4c\x33\xed\xb5\xf6\xc5\x2c\x29\xd2\x0f\x1f\x3f\xaf\x1f\x7e\xdd\xe7\x02\x49\x0c\xc3\x0d\x1b\xfa\x77\xe1\xe1\xfc\xc3\xf6\xa2\x5f\x03\xf7\xcd\xc7\x4f\x57\xd4\xc7\x03\x09\x5e\x1a\x6e\xa5\x1b\x86\x62\xa8\x5b\xea\xe1\x96\xa2\x8f\x9a\xdf\x7f\xde\xb7\x35\xde\x6a\xa7\x53\x0f\x1c\x1a\xea\x3e\xd5\x28\x43\xcf\xe1\xcb\x9e\xc1\x1d\x10\xd3\xd4\x32\x21\xde\x31\xad\xeb\xa3\x54\x5f\x0f\xee\xee\xed\x63\x23\x26\x2f\xfc\x18\x91\xb7\xc7\x3a\x3e\xd5\xab\x0b\x16\xfd\xf6\xd2\x9a\x74\xbe\x99\xfe\xfd\xf1\xe9\xbf\x31\xe1\x8d\xc4\xb5\x11\x8a\x1e\x41\x73\xaf\xd2\x9b\x75\x1c\x17\xf5\x86\x98\x9f\xba\x34\x7a\xb9\xb4\xb7\x17\xb0\x5c\xc4\xd2\x29\xf4\x3a\x3d\x84\xa4\x6a\xac\xfc\xec\x88\x0d\x67\x08\x77\xfc\x43\x82\x1f\x6e\x0e\x7d\xed\x98\xf8\xfc\xe6\xd3\xd5\x4d\x96\xde\xc6\x79\x70\x73\xe0\x04\x47\x87\x22\x5e\x50\xab\x21\x2e\x30\x3e\x49\xfc\xe7\x77\xed\xe3\x38\x49\x70\x18\x07\x27\xf7\xf1\xe0\xee\xd7\xcb\xe3\x54\x2d\xf5\xe2\x20\x55\x86\x19\x29\x3c\xbc\xfa\xf8\x83\x42\xd4\xcf\x0c\x30\x61\xca\x27\xf1\x73\x18\x14\x59\x33\xf6\x4f\xf7\xe7\x65\xd8\xf8\x81\xa6\xba\xa7\xf1\xbb\x55\x5c\xaa\x8d\x75\xbd\x7d\xf5\xdf\x3b\xde\x7e\x90\xa8\xf6\xaf\x13\x76\x77\x75\xa4\xf2\xf9\x81\xcb\x39\xc8\x72\x9b\x85\x2c\xf3\xe5\xf9\xa9\x7f\x97\x33\xad\x8a\x9b\x8b\xdd\xe8\x48\x62\x28\xd3\x78\xbc\xf2\x0f\x2d\x29\x08\xea\x78\x39\x82\x47\xc2\xc5\x9b\xb5\xcf\xce\x84\xcc\x34\x16\xe7\xf4\x1b\xd1\xe6\x9a\x84\x28\xdb\xa2\xba\x28\x71\xd5\xf5\xdf\xb2\x17\xd9\x36\xfc\xb7\x67\xb2\xa1\x5f\x6d\x49\xdd\x6a\x9d\xdc\xf0\x77\xa5\xe3\x86\x81\x66\x99\xcf\xf4\x97\x87\xcf\x4c\xbb\x7d\x26\xb1\x1d\xe6\xe6\x37\x96\xb9\x3b\x75\x2d\x49\xc8\x56\xc9\x7b\x7a\x4a\x67\x3c\xf8\x1d\xde\x7e\xf5\xea\x2b\xf5\xe8\x5d\x8f\x78\x07\x35\xe5\x7e\x39\xfe\xdd\xbe\xb9\x5f\x64\x02\xef\x44\x9d\x70\xbc\x00\x3a\xa7\xce\x51\x96\x90\x04\x24\xf8\x4c\xa5\xf5\x94\xa2\xd8\x1c\x29\x17\x57\x59\xef\xa9\x9d\xbf\x35\x25\xad\xe2\xe0\x7f\x7f\xf1\x7c\xd0\x75\xa5\x28\x86\xf9\x53\x7c\x54\xe5\x3f\x22\xaa\x1e\x09\x15\xef\x4b\x3d\x3b\x29\x67\xdf\x8a\xbf\x5e\x90\xab\xcf\x36\x83\xeb\xd6\xf8\x8f\x2e\x93\xff\x51\xb6\x8e\x4d\x79\x1d\x11\x37\x5d\xf4\x11\x1a\xf0\x7a\x10\xb5\xeb\x8b\xdb\xbb\xf5\x9d\x3d\x65\x91\x06\x99\x07\xd1\x28\xc1\x21\x38\x6c\xd4\x37\x64\x51\x02\x97\x66\xeb\xc5\x85\x87\x2f\x0c\xe0\x4b\xb5\x0f\x3d\x30\x09\x63\x34\xca\x92\xe7\x10\x9f\x68\x8e\x92\xfc\x1c\xc9\x52\x29\x49\x94\x16\x04\x65\x75\x47\xfd\x5a\x92\x83\xf0\xf6\x44\xa5\x7b\xed\xc1\x28\x8c\x8d\x1c\x65\xeb\x1d\x02\x38\x29\xe0\x6d\x91\xa3\xec\x14\x1b\x0e\xe3\xe2\xe5\xb2\xf4\xb3\xe1\x81\x61\xee\xf9\x18\x8d\xbc\x3c\x9f\x27\x19\xe4\x0a\x32\x41\x31\x09\x37\x5e\x4b\xb2\x02\x9d\x89\x8c\x79\x7e\x78\x5a\x75\x94\x30\x5d\x9f\xb0\x9c\xcf\x5d\xeb\xeb\xbc\xd4\x57\xe9\x5e\x73\x6a\x76\x7d\x37\x49\x22\x74\xf7\xaa\xb1\xbb\xcf\x79\x3e\xb9\xf3\x0a\x32\x49\xb2\x70\x81\xe0\x1f\x33\x74\x10\xa7\x4e\x0a\x9e\xa1\xea\x68\x8a\xd9\x3e\x33\x3a\x9b\x5e\xd6\xd7\xdb\x75\xd4\xfa\x3a\x9e\x8b\xcf\xf3\x1f\x7f\xf2\x56\x0e\xcf\x49\x92\x79\xc1\x59\x33\x6f\x68\xc3\xc8\x0b\x90\x86\x9e\x51\x86\xe2\x13\xe7\x05\x1b\xfa\x66\x9f\xf3\xc9\x32\x62\x68\x08\xf6\xbc\xfd\x56\xe7\x80\x25\x79\x7e\x5e\x91\xf7\x1e\xe5\x73\xc4\xcb\x80\x76\xfd\xf7\x5b\xd9\x1c\x9e\xa3\x2d\x5f\xb3\x00\xae\x4b\x94\x37\x6a\xd0\xab\x33\x85\x6c\x92\x77\xc3\x7c\x76\x7e\xe9\x20\x43\x1e\x41\x4f\xe9\x3a\x79\x09\x59\x12\x2d\xcf\x84\xcf\xcc\x73\x09\x54\xc0\x8b\x46\xb9\xda\xda\x40\x0e\x80\xa4\x88\xc9\xba\x34\x1e\x65\x28\x0a\x8b\xe8\x0f\x59\xd3\xbf\xb9\x9e\x7f\x97\x1d\xad\x5a\xfa\x8b\xec\x68\x45\x2b\xc5\x04\x65\xcf\x1e\x40\x17\xb6\x88\xeb\xeb\x02\xa5\x6c\xe2\x65\x78\x5b\x46\x79\x7e\x1b\x87\xe0\x92\x13\x85\x77\xd6\x9e\x2b\x9e\x30\xf2\xb2\xea\xa2\x10\xb9\x61\xba\xb8\x2d\x3e\x76\x5d\x1e\x0b\xaf\x8e\xe9\x22\x4c\x41\x33\xf6\x3b\x42\xdf\xd5\x37\x2a\x67\x87\xff\x1d\xad\xf9\x51\xfe\x1f\xd9\xae\xef\x1c\xea\x5c\x1c\xb3\xb7\xaf\x33\x6d\xc2\xd1\x15\x7c\x8b\xa9\xec\x0a\xd8\xad\x33\xdf\x97\xe2\xdf\x94\xba\x6f\x20\x87\xc7\xe6\x97\x4f\xf0\xfb\x6c\x64\x23\x07\xc6\xb9\x8e\x08\x09\xe3\xe0\xfb\x04\x2d\x85\x1d\xa0\x7a\xd7\x5e\x96\xdc\x82\xf0\xfd\xbb\xbe\xbe\xce\x67\xef\x1f\xc3\xf5\x3e\x8e\xcb\xa9\x2f\xa3\x3c\x5d\x81\x9c\x97\xf3\xf6\xd3\xf7\x9d\x33\xa0\x17\x82\xe2\x3a\x7b\x5f\x94\x5d\x36\xd4\x3f\x25\x93\x80\xfc\x5c\x0a\xbf\xfa\xe6\x4c\xb2\x5d\x2e\xbd\x86\x36\xae\x79\x5f\xe1\xf1\x75\x55\x17\xe6\x98\x75\xcb\xce\x17\x39\x49\x22\x1d\x64\x61\x7a\xae\xfc\xda\xe1\xed\x79\x31\xc4\x28\xdb\x6e\x9f\x37\xaf\x39\x9c\x15\xe0\x15\x24\x31\x96\x3d\xda\x30\x8c\x93\x2d\x29\xef\xc8\x92\xf9\x56\x08\xb8\x30\xde\xd6\x8a\x27\x08\x10\x04\xbf\x29\x7e\x5c\xe7\x4b\x35\xd5\x89\xc6\xf7\x72\xf4\xe5\xfe\x03\x48\x62\xe0\x91\x0f\xcb\x4f\xe3\x44\x6f\x40\xdb\x0f\x37\x80\x31\x29\x89\xa7\x31\x1f\x24\xbf\xdf\x7c\xfc\x74\xc3\x4b\x9c\x3b\x1a\x3f\x0d\x1e\x95\xdf\x6f\x6e\x6e\x3e\xed\xb6\xbd\xeb\x57\x3f\x6a\xc2\x9b\x9b\x7f\xc5\x37\x35\xfd\xe8\xe9\x49\x56\xb8\xe1\xe3\x11\xfa\xf5\xeb\x16\x5b\xf4\xf5\x7f\xfb\x73\xe0\x63\x4c\xfb\x3a\x47\x90\xde\xa1\x81\xa8\x4d\xa0\x68\x04\xb2\x1d\x04\x26\x25\x0c\x3d\xab\x4d\xa3\x47\x21\x76\xad\x36\xc5\x07\x69\x0e\x23\xf3\x1e\x8a\x66\xe1\xf2\x1c\xf1\x79\x2e\x53\xc6\x1c\xd6\x70\x5f\xd0\x74\xae\x74\x45\x93\x91\x5b\xfd\xd2\x6f\x69\x8c\x5b\xb1\x8c\x63\xf7\x73\x18\xa4\xf7\x6e\xac\x3c\xbb\xad\x7e\x09\x19\x77\x21\xf1\xf5\x7d\x69\xc0\x47\x2f\x8c\x6b\x4f\x28\xd7\x6a\xcf\x24\x9e\xce\x25\x3e\x7f\x19\x76\xdf\x94\x95\xf8\x0c\x8d\xfd\x9e\x33\x40\xa2\xbb\xb0\x19\x58\xf9\x2d\x18\x81\x8a\x2b\x3d\x91\x25\xae\x9a\x0c\x40\xdc\x21\x12\x4f\x11\xcf\xa2\xe7\x7e\xab\x4f\x49\xe2\x84\x82\xbd\xce\xe2\x29\x7c\x28\x5d\x71\x5e\xb8\x91\x39\xf3\x5b\xfd\x09\xe8\xf5\x4b\x2f\x32\xa7\x90\x6f\x97\x20\x02\x25\xe8\x99\xa1\xcc\x98\x73\xd7\x9a\x97\x06\xee\x28\xb2\x01\x55\xad\xa2\x65\xcd\x9c\x11\xcd\xec\x08\x63\x9e\x6a\xf1\x71\x7f\x5e\xeb\x47\xb6\x30\x01\x22\x5b\x41\xbe\x93\xc0\x9e\x36\x07\x8b\xa4\x94\x5b\x9d\x89\xc3\x90\x89\xcb\x98\x0b\x39\xa2\x53\xa7\xd5\x2f\x01\xc3\x46\x90\x6f\x4f\x7d\x86\x2a\x3d\xc6\x6c\x83\x8a\x25\x9e\xa5\x54\x7e\x4b\x29\xdd\x58\x2d\x1c\x5b\x99\xf2\x41\xda\x86\x16\x15\xc8\xf6\x2c\xf0\xac\xf6\x02\x8a\x42\xee\x6f\xcb\x65\xb4\x5c\x8e\x5c\xec\x8a\x6c\xe5\xd8\x9d\xca\x67\x52\xec\xb4\xd4\xc2\x6f\xf5\x63\xb9\xd5\xa1\x9d\x90\xc5\x40\x34\xf3\xd5\xdc\x09\x88\xcc\xdc\xb5\x84\x85\xab\xd3\xb9\x63\x6b\x18\xb4\x54\xa2\x54\xed\xc2\x67\x84\xca\x61\x82\xa2\xd6\x0f\x1f\xa4\x53\xc7\x56\x83\x51\xc8\x62\x28\x0e\x4b\x64\x9b\x44\x8e\xfb\x18\x88\xec\x42\x8e\xd4\xd2\xb1\x53\x1a\x44\x46\x01\x22\x73\xee\x57\xdc\xc3\x88\x87\xc2\x98\x72\x62\x1e\xd7\x4d\xbc\x59\xb9\x3a\x3d\xf5\x45\x0c\xf9\xa8\x3d\xf1\x2d\x83\x5d\xd1\x13\x87\x79\x49\xf9\xa8\x3f\x01\x8c\x49\x83\x68\xce\x7a\x3d\x8d\x02\xbd\xe1\x17\xb9\x62\xe7\x8e\xa5\x64\x8e\x05\x31\xa8\xda\xbb\x3a\x60\x58\x22\xb7\x30\xed\xdb\xab\xf1\x19\xe1\x0b\xb4\xfb\x58\xb6\x94\xdc\x53\x53\xec\x47\x42\xe8\x8b\xe6\x6c\x64\x63\x0c\xe6\x69\x0c\x44\x38\xf5\x44\x73\xea\x2d\xe8\xb6\x6b\x0f\x07\x9a\xc1\x8a\x1b\x1d\xea\xf4\x9a\xbe\x72\xed\x4e\x39\xb2\xfb\x09\xb4\x66\x04\x44\x13\xec\xf3\x54\x4b\xb6\x15\x0c\x62\x17\x83\x90\xae\xbc\x9e\x99\xca\x16\x3b\x87\x22\x2e\xfd\x48\xc8\x65\xbb\x3f\xf7\xed\xe1\xfe\x3e\x6c\xad\x77\x16\xb8\x22\x3b\xf5\x18\xb3\x92\xc4\xf4\x45\x12\xe1\xd4\xa9\x3a\x95\xc7\xd3\xb1\x67\xab\xd5\x93\xde\xfc\x3d\x47\xb6\x96\xf8\xcc\xfd\x42\x09\x3b\x94\x6f\x77\x5a\x8e\xad\x4d\x3d\x2e\x19\x68\x14\xfb\x6c\xce\x4c\xdd\xa0\xf0\x68\x3c\xa5\x5e\xe4\xe9\x23\x25\x4f\x67\x03\xa7\x65\x56\x87\xfb\x0d\x4b\x9f\x81\xb9\xab\x2f\x6d\xc7\x65\x1e\xea\x9f\x19\xa2\xe0\xc8\xa6\x5d\xc1\xc0\x4a\x7f\x4c\xb5\x59\x39\x7a\x49\xfd\xd8\xbc\x97\x2d\x81\xb8\x5d\x87\x92\x63\x6d\x02\xc2\x76\x8c\xc2\xce\x83\xd4\xab\xff\xe6\x88\x5a\x71\x25\xb4\x95\x4a\x66\x5e\x4a\x87\x11\x72\x89\xa7\xef\x51\x90\xe6\x7e\xc8\x11\xb0\xf7\x4c\x66\x60\x29\x33\xfd\xd4\x0f\x1f\xfe\x2d\xf1\x2c\x0d\x5a\x52\xe9\x8b\xec\xd4\xb1\xe6\xa5\x13\xe1\x82\x0f\x52\xcb\xa0\xb5\xb1\x4d\x09\x3d\xcd\x68\x1b\xaf\x73\xb9\x67\x87\xe1\xfd\xcb\x53\x37\x28\x86\xf3\x94\x78\x8c\x96\x82\x70\xe5\x93\x3a\x3b\xf5\x45\x96\x76\x79\x9a\x06\x8c\x59\xc9\xcc\x2a\x86\xc4\x1d\x1a\x30\x93\x99\xc4\x2f\x7d\x5a\x66\x94\xdc\x6f\x99\x33\xd9\x36\x17\xae\x2d\x95\xb5\xad\xf8\xb1\x7a\xa8\x9f\x96\xbb\x80\x3d\xa5\xf6\xb3\x02\xf6\xd6\x3e\x67\x14\x4b\x1b\x34\xb1\x2b\x42\x2c\x47\x6d\x0c\x79\x76\x49\xc3\x3f\xcc\x10\xed\x8e\x4d\x41\x79\x56\x0d\x28\x8c\xb1\xf6\xba\x0f\x31\x55\xc2\x58\xa1\x40\x45\xaf\x68\xe9\xbc\x89\x73\x3c\x7d\xaf\x4c\x55\xd2\xef\x91\x37\xd6\xdb\x66\x8f\xe9\x1a\xf5\x92\x81\xc3\x4c\x4a\xc8\xdc\x07\xb2\x29\x05\x0e\xf3\x52\x42\x4b\x25\xb0\xb6\xbb\x69\xba\xa3\x07\x89\xbf\x1f\xf0\xe1\x7d\xa3\x57\x99\xc1\x05\x68\x69\x13\x5f\x7c\x99\xb9\x76\x07\xfb\x91\x86\xfd\x48\x49\x5d\x7b\x58\x00\x26\x18\x80\x96\x39\xf3\x2b\x8e\x40\xbd\xb3\x2f\xa3\x74\x18\xb6\x70\x23\x1c\xcb\xb1\x92\xd4\x71\x0f\x5a\xed\x09\xec\x69\x8d\x8c\x3a\x36\xcb\xf6\x81\x7d\x61\x18\xb6\x57\x76\xbd\xb4\x2f\xdf\x56\x56\x9f\xeb\xd8\x26\xd0\x50\x0c\x02\x20\x0a\x54\x23\x4f\x64\x33\xd7\xba\x0f\xa4\x50\xeb\xea\x86\xe0\x19\x82\x36\xd2\x29\xf3\x49\x0a\x6b\xd9\x9d\xd2\x67\xe6\xcb\x67\x66\x67\x34\xa6\x5e\x9e\x54\x83\x16\x9a\x67\xd6\x72\x9f\x25\xbe\xdf\x31\x66\x0f\xc4\x98\x4d\xea\x18\x3a\xd3\x1f\xd9\xb1\xf9\xd8\xee\x8c\x0d\x23\xac\xe5\x37\x31\x46\x14\xa6\xae\x9a\x14\x72\x4b\x61\x9c\xaa\xbd\xf0\xf8\x4e\xea\xc7\x0a\xe5\x58\x2f\xb9\x24\xee\xd8\xc5\x00\x88\xec\xdc\xe5\x92\x81\x54\x75\x88\x6b\xf7\x63\x57\xef\xa4\x7e\xc8\x95\x7e\xab\x43\xc9\xad\x7e\xd2\xfc\xe8\x49\xe9\x5a\xed\x89\x13\xbd\x60\x3e\x52\x26\x90\xe7\xfe\xbf\xcc\x4c\x4a\xdf\x32\xca\x9d\x3d\x09\x37\x36\x52\xd4\xeb\xf5\xf8\xad\x58\x17\xb2\x25\xe8\xa9\x25\x88\x82\xfa\x87\x80\x1e\xa6\x3c\x91\x2d\x86\x0b\xa7\x04\x11\x5b\xc2\x95\x7f\xd4\xfb\xf7\xb4\x47\xeb\x32\x98\x1a\x4e\x67\xc7\xe8\x0e\x7c\x6a\x7d\xef\xd8\x73\x50\xfb\xe2\x34\x59\xfa\x68\x4b\x09\x3d\xeb\xfe\xcb\xf1\x75\x3c\x14\x7b\x32\x8f\xfb\x54\xed\xc3\x33\x73\xa4\x05\xb5\x9d\x0a\x94\xd4\xbd\x3f\xe9\xa3\x72\xd5\xc6\x7e\xec\x04\xa3\xee\x3c\xae\xe3\x6c\x7f\x9e\x0e\x35\x81\x1d\xea\x46\x5f\x57\xcd\xbe\x6b\xd3\x9d\x8e\xf9\x18\xb0\x32\xc3\xce\x21\xcf\x56\x5e\xf3\xb3\x1d\x03\xd9\xca\x67\x58\x4a\x6e\x99\x0b\x10\xb2\xb9\x67\x49\x8c\xd2\x4d\x5e\xf7\x8a\x69\x72\xf3\x6c\x38\x55\x77\x74\xe5\x8b\x38\x54\xa6\xea\x60\x6c\x08\x4f\xc6\xa3\x60\xe8\x5d\x6a\x77\x7f\xed\x4e\x1b\x8a\x93\xd2\x9f\x0e\x57\xb5\x81\xba\xd6\x51\xe2\xd4\xb9\x83\xa1\x27\xb5\xde\x76\x78\x2c\x98\xc2\xae\xd4\x7e\x93\x3e\x48\x55\xcd\xec\x0f\x15\xe3\xa5\xaf\x4e\xa9\xcb\x79\x5b\x1d\x0c\xa2\x39\x2d\xb7\xdc\xda\xe7\x4a\x80\xd9\xb9\x6b\xf7\x73\x1e\x77\x64\x8d\x66\xbb\x63\xaa\x2d\xea\x06\x7c\x7e\xd7\x3a\x98\x97\xd4\x99\x3a\x94\xdc\xea\x64\x2e\xa3\x94\x7e\xe4\xa6\xee\x3c\x75\xb4\x47\xf8\xac\x3d\x0a\x86\x6a\xb2\x8f\xba\xd9\x1f\x8f\xf4\xcb\x6c\x14\x30\x93\x09\x88\x8c\x2f\xeb\x7d\xf0\x19\x65\xe2\xf3\xec\xc2\x13\x85\xca\x1d\x27\x3b\xeb\x59\xdb\x07\x60\xcc\xba\x1e\x4b\xeb\x9a\x54\xe2\xe1\x42\xa6\xdb\x23\x43\xd0\xea\xd8\x37\x1e\xe9\x10\xf4\x2b\x50\x8e\xe9\x8e\xa1\x1b\xec\x93\xb1\xa0\x62\x9b\x07\xb1\x6c\x80\xdd\x98\x17\x72\x65\xbf\xe2\x4a\xd7\xd6\xa6\x72\x4b\x69\x83\xf5\x5a\x2a\x76\xe6\x33\x4a\x56\xfb\x33\x1f\x2b\x6d\xd0\xd2\xb0\x6f\x29\x94\xcf\x77\x56\xf9\xdb\xd8\xe4\xda\xfd\x5a\xa5\xae\xab\xfc\xb0\x9d\xf8\x75\x5e\xe8\xcd\x4a\x28\xd2\x73\xc8\x08\x94\xc3\x04\x5b\x76\x9a\x4c\x25\x9d\xad\xfd\xa5\x74\x22\x61\x51\xe7\x5f\xd7\x9e\x60\xa7\xe2\x96\x3e\x15\xb2\xaf\xb9\x99\xe7\x2a\x45\x0c\x02\xb9\xa5\x11\xc0\xa5\xb5\xef\xd7\x31\x9c\xf8\x8c\x1a\x0c\x5a\x41\x20\x33\x26\xe5\x54\xec\x14\x44\x6c\x21\x47\x93\x12\xda\xfd\x1c\xe9\xec\x4e\x6e\x1f\xf4\x94\xdc\xb5\xcc\xb9\xd4\x1d\xce\x9f\xaa\x4e\xe5\x5a\xcd\x5e\xa6\x12\xef\x0c\x6e\x3e\x7e\xfc\x71\x47\xf8\x3f\xb8\x3d\xbe\x08\xbe\x4a\x4a\x94\xa5\x59\x52\x86\xab\x7e\xeb\xd9\xc3\x39\xba\x08\xfa\x5d\xb5\xb8\xe7\xa1\x5f\x7e\x89\x65\xdd\xed\x22\x65\x3a\xf0\x30\xd2\x11\xf9\x29\xd8\x6f\xd0\x9c\xa7\x67\xdf\x0f\xfe\x7e\xf9\xe1\xe0\xef\xff\x00\x4c\x4b\xff\xc2\x62\x97\x6f\x3e\x34\x6f\xcc\xff\x82\x64\x7f\x41\xb2\xc7\xaf\x5f\x90\xec\x2f\x48\xf6\x17\x24\x7b\xe4\x7a\xc7\x41\xfa\x6b\x98\xfd\x85\xcc\x1e\x57\xc9\x5f\x15\xa0\xcd\xd2\x0d\x3e\x9b\xa5\xb7\xf9\x2f\x6c\xf6\x6d\x13\xf9\x0b\x40\xb4\xbb\xdf\x0c\x3b\xf2\xed\xcc\x6f\x32\x8d\xf5\xf5\x0b\xc0\xbd\x44\xce\xff\x12\x80\xbb\xe7\x41\xbf\x70\xdc\x8b\x04\xfc\x65\x70\x5c\xc4\x25\x83\x9b\x8f\x9f\x6e\x46\xda\x93\xed\x48\x43\x4e\x7c\xfc\xfd\x6f\x2b\xe2\xab\x5b\x78\xf5\xaf\x82\xa2\x5a\x60\xfb\xff\x9b\x9b\x35\x20\xfb\xe1\x20\x52\x35\x65\xe5\xcd\xc7\x06\xbd\xfd\xd8\xc0\xb7\xaf\x62\x39\x63\xdc\xfb\x5e\xd1\x75\x2b\x78\x28\x9e\x7f\xd4\xc6\x07\x60\xf2\xe6\xbb\xf5\x5b\x58\xf2\x92\x5a\x96\x1e\x95\xf1\x09\x9e\xcd\x17\xea\xf7\x39\x07\x8f\xce\x71\x96\xa6\xd9\x3a\x89\x58\x23\xdb\x24\x12\x4f\xb7\xa5\x9e\x39\x77\x45\x81\x72\x75\x8e\x20\xbe\x63\xab\xc6\x12\x19\x53\x57\x28\xd2\x86\x4e\x5c\x23\x2d\xf3\xed\x13\xc6\xc8\xb3\xfb\x18\x32\x42\xee\xf3\xf4\xd4\xb7\xd4\x40\xd6\xe9\x89\x2b\xaa\x4b\x94\xb7\x4b\x51\x4a\x77\x58\x42\x51\x99\x37\x88\x85\x68\x56\xbe\x25\x14\x2b\x24\x7c\x83\x76\x2d\x4f\x5c\x1f\x8a\x8d\xdc\x35\xf2\xb0\x3a\xd9\x95\x23\xad\x74\x18\x82\x41\xc8\x4e\x7d\xa6\x1d\x79\x16\x28\xbc\x58\x29\xfd\x90\x7b\x18\x3d\x9a\x23\x2d\x48\xff\xce\x07\xb3\xd0\xb1\x4d\xca\xeb\x0d\xc3\xa7\xb0\x53\x7f\xee\x4b\xa1\xf6\x77\x43\xe8\x8f\x2c\x01\xf7\xc7\x86\xd0\xd3\x74\x03\xcb\x55\xca\x4a\xd3\x24\x40\xf3\xa4\xcf\xab\x2b\x1e\x5e\xfa\x22\xf1\xd2\x6c\x87\xd6\x10\x4c\xf3\x31\x08\x6b\x39\xcf\x6a\xd2\x7f\x56\x53\x76\x79\xc2\x9b\x2e\x90\xad\x50\xae\x45\x4f\xa1\x38\x0f\x6a\x9d\x80\x58\xdd\xe8\x44\x8e\x1b\xa4\x34\x75\x18\x63\xb0\x41\x3d\x7b\x1d\xba\xd6\x9b\x14\x6a\xaa\x31\x63\x1d\xcb\xc0\x8a\x6a\x40\x41\x0a\x92\x81\x6f\x91\x99\x67\x4b\xeb\xd3\xd2\x39\x88\xd8\x7b\xa4\xa6\xa1\x63\x2b\x58\x99\xaa\x81\x6c\xa9\xc1\xa8\x3b\x7f\x78\xe5\x55\x04\x03\xab\xa1\xd4\xbd\x5f\x9d\x0e\x77\x2a\xbf\x35\x69\x6f\x7e\x47\x4a\x05\xb9\x53\xfc\x44\xb0\x74\x69\x73\x2a\x0c\x7a\xfd\x12\xf5\x66\xeb\xdf\x85\xc7\x98\xed\x25\x12\x6d\x30\x0a\xcf\x11\x97\xe7\x1e\x46\xdd\x79\xd8\x17\x3a\xfa\x98\x9e\xb8\x2a\xf5\xd2\xd7\x8c\xb6\xa1\x52\xa6\x6e\xf2\x6f\xca\x69\x10\xed\x06\x09\x59\xce\x67\xea\x89\x6c\xcb\x0f\x39\x62\x84\xdc\xcb\xb0\xcb\xcd\x9f\xa6\x8f\xf3\x61\x97\xdb\x5f\xf7\xd4\x13\xe9\xd2\xe5\xb9\xb9\x32\xe5\xe6\x12\x7f\x62\x8e\x7b\xa7\xdb\xa0\x85\x17\x1b\x44\x6f\xa5\x0b\xa9\x3b\x7f\x68\x50\x6e\xbc\x9c\xbb\x4d\x2d\xf5\x3e\xd2\xc1\xee\x5e\xeb\x60\x8d\x86\x1f\xc8\x84\xa2\x49\x5c\x9e\x5d\xed\x39\xb5\x99\x03\x60\xcc\x0a\x46\x78\xea\xea\x3b\x28\xbf\xe9\x47\x98\xb2\xd5\xb4\xe3\xc6\x1a\x06\x53\x7a\x7d\x5a\xff\x4a\xaf\xa6\xba\x6b\x0b\x74\xed\x37\x60\x71\xec\x79\x32\xb0\xe8\xb5\x0d\x99\x90\x9f\x99\x05\x8c\x70\xe5\x33\x6d\x52\xeb\x53\x8b\x70\xee\x8e\xa9\x63\xc8\xc0\x5a\x87\x02\x12\xcd\xa9\xd1\xd8\xa5\xa6\x82\xc8\x60\x65\xfd\x15\x29\x93\x99\xb5\x2f\x75\x2a\x5f\xe7\x88\x1b\x72\xd8\x0f\xb6\x79\x54\x76\x85\x76\x34\x28\xc0\xab\x0d\xf7\x69\xbf\x41\x2e\xfb\xcd\x5b\x22\x7e\x24\x10\x57\xe7\x70\x83\x86\xf3\x5c\xed\xe7\x5f\x9e\xba\x2a\x35\xac\x38\x02\x43\x6e\xc7\x36\x9f\x42\x76\xe1\x5a\x4a\xe5\xda\xda\x42\xe2\x57\x76\x68\xb2\x4b\xdd\xbf\xce\xb7\x04\x5d\x6a\x85\xe2\x34\x48\xc3\x5a\x37\xb5\x8f\x95\x80\x6f\xe6\xa9\xbb\xb6\x42\x39\x76\x9f\x1a\x59\x42\x0e\x19\xa1\x0d\xe6\xaf\xf7\x0c\xc6\x9c\x8e\xc6\x8f\x83\xd5\xda\x87\x9e\x45\xa7\xf0\x11\x17\x50\xac\x75\x2b\xe4\xa3\x31\x37\xe0\x31\xe9\xaf\x11\x52\x5b\x4d\x6d\xc7\x6a\x53\xae\xa5\xf1\x68\x4c\x13\x68\xbd\x50\x9e\xbe\x42\xf2\x62\x6d\x02\x22\x88\xe1\x0a\xd9\x78\x0b\x6d\x39\xb0\x07\xf5\x17\xaa\x71\xe2\x0b\x6d\xaf\x75\xdf\x7f\x09\xb8\xf1\x26\x32\xf1\xdb\xae\x5a\xbe\xfe\xf6\xe7\x6f\xff\x17\x00\x00\xff\xff\xaf\x31\xe0\x2e\xdc\x48\x00\x00")
 
 func envDevelopmentJsonBytes() ([]byte, error) {
 	return bindataRead(
diff --git a/pkg/deploy/generator/resources_dev.go b/pkg/deploy/generator/resources_dev.go
index 024e71f78..8bfe432bf 100644
--- a/pkg/deploy/generator/resources_dev.go
+++ b/pkg/deploy/generator/resources_dev.go
@@ -210,7 +210,7 @@ func (g *generator) devVPNPip() *arm.Resource {
 }
 
 func (g *generator) devVnet() *arm.Resource {
-	return g.virtualNetwork("dev-vnet", "10.0.0.0/9", &[]mgmtnetwork.Subnet{
+	return g.virtualNetwork("dev-vnet", "10.0.0.0/23", &[]mgmtnetwork.Subnet{
 		{
 			SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{
 				AddressPrefix: to.StringPtr("10.0.0.0/24"),
diff --git a/pkg/portal/middleware/aad.go b/pkg/portal/middleware/aad.go
index 0b05cff6e..29742b773 100644
--- a/pkg/portal/middleware/aad.go
+++ b/pkg/portal/middleware/aad.go
@@ -20,7 +20,6 @@ import (
 	"github.com/gorilla/sessions"
 	"github.com/sirupsen/logrus"
 	"golang.org/x/oauth2"
-	"golang.org/x/oauth2/microsoft"
 
 	"github.com/Azure/ARO-RP/pkg/env"
 	"github.com/Azure/ARO-RP/pkg/util/oidc"
@@ -92,6 +91,11 @@ func NewAAD(log *logrus.Entry,
 		return nil, errors.New("invalid sessionKey")
 	}
 
+	endpoint := oauth2.Endpoint{
+		AuthURL:  env.Environment().ActiveDirectoryEndpoint + env.TenantID() + "/oauth2/v2.0/authorize",
+		TokenURL: env.Environment().ActiveDirectoryEndpoint + env.TenantID() + "/oauth2/v2.0/token",
+	}
+
 	a := &aad{
 		log: log,
 		env: env,
@@ -105,7 +109,7 @@ func NewAAD(log *logrus.Entry,
 		store:       sessions.NewCookieStore(sessionKey),
 		oauther: &oauth2.Config{
 			ClientID:    clientID,
-			Endpoint:    microsoft.AzureADEndpoint(env.TenantID()),
+			Endpoint:    endpoint,
 			RedirectURL: "https://" + hostname + "/callback",
 			Scopes: []string{
 				"openid",


Test patch:
diff --git a/pkg/api/v20210901preview/openshiftcluster_validatestatic.go b/pkg/api/v20210901preview/openshiftcluster_validatestatic.go
index 7e8f84d5b..2ef30b83f 100644
--- a/pkg/api/v20210901preview/openshiftcluster_validatestatic.go
+++ b/pkg/api/v20210901preview/openshiftcluster_validatestatic.go
@@ -267,10 +267,10 @@ func (sv *openShiftClusterStaticValidator) validateWorkerProfile(path string, wp
 	if !validate.RxSubnetID.MatchString(wp.SubnetID) {
 		return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, path+".subnetId", "The provided worker VM subnet '%s' is invalid.", wp.SubnetID)
 	}
-	switch wp.EncryptionAtHost {
+	switch mp.EncryptionAtHost {
 	case EncryptionAtHostDisabled, EncryptionAtHostEnabled:
 	default:
-		return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, path+".encryptionAtHost", "The provided value '%s' is invalid.", wp.EncryptionAtHost)
+		return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, path+".encryptionAtHost", "The provided value '%s' is invalid.", mp.EncryptionAtHost)
 	}
 	workerVnetID, _, err := subnet.Split(wp.SubnetID)
 	if err != nil {
diff --git a/pkg/api/v20210901preview/openshiftcluster_validatestatic_test.go b/pkg/api/v20210901preview/openshiftcluster_validatestatic_test.go
index bf8a5b02d..c02a95894 100644
--- a/pkg/api/v20210901preview/openshiftcluster_validatestatic_test.go
+++ b/pkg/api/v20210901preview/openshiftcluster_validatestatic_test.go
@@ -646,20 +646,6 @@ func TestOpenShiftClusterStaticValidateWorkerProfile(t *testing.T) {
 			},
 			wantErr: "400: InvalidParameter: properties.workerProfiles['worker'].subnetId: The provided worker disk encryption set '/subscriptions/7a3036d1-60a1-4605-8a41-44955e050804/resourceGroups/fakeRG/providers/Microsoft.Compute/diskEncryptionSets/fakeDES1' is invalid: must be the same as master disk encryption set '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-cluster/providers/Microsoft.Compute/diskEncryptionSets/test-disk-encryption-set'.",
 		},
-		{
-			name: "encryption at host invalid",
-			modify: func(oc *OpenShiftCluster) {
-				oc.Properties.WorkerProfiles[0].EncryptionAtHost = "Banana"
-			},
-			wantErr: "400: InvalidParameter: properties.workerProfiles['worker'].encryptionAtHost: The provided value 'Banana' is invalid.",
-		},
-		{
-			name: "encryption at host empty",
-			modify: func(oc *OpenShiftCluster) {
-				oc.Properties.WorkerProfiles[0].EncryptionAtHost = ""
-			},
-			wantErr: "400: InvalidParameter: properties.workerProfiles['worker'].encryptionAtHost: The provided value '' is invalid.",
-		},
 	}
 
 	// We do not perform this validation on update
diff --git a/pkg/portal/middleware/aad_test.go b/pkg/portal/middleware/aad_test.go
index 78cbec76b..39fac60db 100644
--- a/pkg/portal/middleware/aad_test.go
+++ b/pkg/portal/middleware/aad_test.go
@@ -144,8 +144,9 @@ func TestAAD(t *testing.T) {
 			controller := gomock.NewController(t)
 			defer controller.Finish()
 			env := mock_env.NewMockInterface(controller)
+			env.EXPECT().Environment().AnyTimes().Return(&azureclient.PublicCloud)
 			env.EXPECT().IsLocalDevelopmentMode().AnyTimes().Return(false)
-			env.EXPECT().TenantID().AnyTimes().Return("")
+			env.EXPECT().TenantID().AnyTimes().Return("common")
 
 			_, audit := testlog.NewAudit()
 			_, baseLog := testlog.New()
@@ -243,8 +244,9 @@ func TestCheckAuthentication(t *testing.T) {
 			controller := gomock.NewController(t)
 			defer controller.Finish()
 			env := mock_env.NewMockInterface(controller)
+			env.EXPECT().Environment().AnyTimes().Return(&azureclient.PublicCloud)
 			env.EXPECT().IsLocalDevelopmentMode().AnyTimes().Return(false)
-			env.EXPECT().TenantID().AnyTimes().Return("")
+			env.EXPECT().TenantID().AnyTimes().Return("common")
 
 			_, audit := testlog.NewAudit()
 			_, baseLog := testlog.New()
@@ -323,7 +325,8 @@ func TestLogin(t *testing.T) {
 			defer controller.Finish()
 			env := mock_env.NewMockInterface(controller)
 			env.EXPECT().IsLocalDevelopmentMode().AnyTimes().Return(false)
-			env.EXPECT().TenantID().AnyTimes().Return("")
+			env.EXPECT().Environment().AnyTimes().Return(&azureclient.PublicCloud)
+			env.EXPECT().TenantID().AnyTimes().Return("common")
 
 			_, audit := testlog.NewAudit()
 			_, baseLog := testlog.New()
@@ -413,7 +416,8 @@ func TestLogout(t *testing.T) {
 			defer controller.Finish()
 			env := mock_env.NewMockInterface(controller)
 			env.EXPECT().IsLocalDevelopmentMode().AnyTimes().Return(false)
-			env.EXPECT().TenantID().AnyTimes().Return("")
+			env.EXPECT().Environment().AnyTimes().Return(&azureclient.PublicCloud)
+			env.EXPECT().TenantID().AnyTimes().Return("common")
 
 			_, audit := testlog.NewAudit()
 			_, baseLog := testlog.New()
@@ -739,7 +743,8 @@ func TestCallback(t *testing.T) {
 			defer controller.Finish()
 			env := mock_env.NewMockInterface(controller)
 			env.EXPECT().IsLocalDevelopmentMode().AnyTimes().Return(false)
-			env.EXPECT().TenantID().AnyTimes().Return("")
+			env.EXPECT().Environment().AnyTimes().Return(&azureclient.PublicCloud)
+			env.EXPECT().TenantID().AnyTimes().Return("common")
 
 			_, audit := testlog.NewAudit()
 			_, baseLog := testlog.New()
@@ -830,7 +835,7 @@ func TestClientAssertion(t *testing.T) {
 	env := mock_env.NewMockInterface(controller)
 	env.EXPECT().Environment().AnyTimes().Return(&azureclient.PublicCloud)
 	env.EXPECT().IsLocalDevelopmentMode().AnyTimes().Return(false)
-	env.EXPECT().TenantID().AnyTimes().Return("")
+	env.EXPECT().TenantID().AnyTimes().Return("common")
 
 	clientID := "00000000-0000-0000-0000-000000000000"
 	_, audit := testlog.NewAudit()