diff --git a/101-automation/README.md b/101-automation/README.md new file mode 100644 index 000000000000..3a6f62013f41 --- /dev/null +++ b/101-automation/README.md @@ -0,0 +1,32 @@ +# Azure Automation Create Account template + +![Azure Public Test Date](https://azurequickstartsservice.blob.core.windows.net/badges/101-automation/PublicLastTestDate.svg) +![Azure Public Test Result](https://azurequickstartsservice.blob.core.windows.net/badges/101-automation/PublicDeployment.svg) + +![Azure US Gov Last Test Date](https://azurequickstartsservice.blob.core.windows.net/badges/101-automation/FairfaxLastTestDate.svg) +![Azure US Gov Last Test Result](https://azurequickstartsservice.blob.core.windows.net/badges/101-automation/FairfaxDeployment.svg) + +![Best Practice Check](https://azurequickstartsservice.blob.core.windows.net/badges/101-automation/BestPracticeResult.svg) +![Cred Scan Check](https://azurequickstartsservice.blob.core.windows.net/badges/101-automation/CredScanResult.svg) + +[![Deploy to Azure](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazure.svg?sanitize=true)](https://portal.azure.us/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F101-automation%2Fazuredeploy.json) +[![Deploy to Azure US Gov](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazuregov.svg?sanitize=true)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F101-automation%2Fazuredeploy.json) + +[![Visualize](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/visualizebutton.svg?sanitize=true)](http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F101-automation%2Fazuredeploy.json) + +This template demonstrates the creation of an Azure Automation account and links it +to a new or existing Azure Monitor Log Analytics workspace that you specify. + +## Is it acceptable to link directly to PowerShell Gallery in Azure-Quickstart-Templates? + +The expected workflow from any public gallery is to download/save an artifact, +review the source code and test it to verify functionality, +and then publish it to a private, trusted feed for usage. +However, since module authors releasing to PowerShell Gallery increment the version number +when changes are made, +if template authors would like to validate and test *specific versions* of modules +in the gallery and use *static links* to those artifacts, +those artifacts can be expected to remain unchanged. +**This does not change the operational best practice behavior of reviewing, validating, and testing +all code artifacts including ARM templates, PowerShell scripts, and DSC resources, +before production deployment.** \ No newline at end of file diff --git a/101-automation/azuredeploy.json b/101-automation/azuredeploy.json new file mode 100644 index 000000000000..2e2faee64a63 --- /dev/null +++ b/101-automation/azuredeploy.json @@ -0,0 +1,197 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "workspaceName": { + "type": "string", + "metadata": { + "description": "Workspace name" + } + }, + "sku": { + "type": "string", + "allowedValues": [ + "pergb2018", + "Free", + "Standalone", + "PerNode", + "Standard", + "Premium" + ], + "defaultValue": "pergb2018", + "metadata": { + "description": "Pricing tier: perGB2018 or legacy tiers (Free, Standalone, PerNode, Standard or Premium), which are not available to all customers." + } + }, + "dataRetention": { + "type": "int", + "defaultValue": 30, + "minValue": 7, + "maxValue": 730, + "metadata": { + "description": "Number of days to retain data." + } + }, + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Specifies the location in which to create the workspace." + } + }, + "automationAccountName": { + "type": "string", + "metadata": { + "description": "Automation account name" + } + }, + "automationAccountLocation": { + "type": "string", + "metadata": { + "description": "Specifies the location in which to create the Automation account." + } + }, + "sampleGraphicalRunbookName": { + "type": "String", + "defaultValue": "AzureAutomationTutorial" + }, + "sampleGraphicalRunbookDescription": { + "type": "String", + "defaultValue": " An example runbook that gets all the Resource Manager resources by using the Run As account (service principal)." + }, + "samplePowerShellRunbookName": { + "type": "String", + "defaultValue": "AzureAutomationTutorialScript" + }, + "samplePowerShellRunbookDescription": { + "type": "String", + "defaultValue": " An example runbook that gets all the Resource Manager resources by using the Run As account (service principal)." + }, + "samplePython2RunbookName": { + "type": "String", + "defaultValue": "AzureAutomationTutorialPython2" + }, + "samplePython2RunbookDescription": { + "type": "String", + "defaultValue": " An example runbook that gets all the Resource Manager resources by using the Run As account (service principal)." + }, + "_artifactsLocation": { + "type": "string", + "defaultValue": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-automation/", + "metadata": { + "description": "URI to artifacts location" + } + }, + "_artifactsLocationSasToken": { + "type": "securestring", + "defaultValue": "", + "metadata": { + "description": "The sasToken required to access _artifactsLocation. When the template is deployed using the accompanying scripts, a sasToken will be automatically generated" + } + } + }, + "resources": [ + { + "type": "Microsoft.OperationalInsights/workspaces", + "apiVersion": "2020-03-01-preview", + "name": "[parameters('workspaceName')]", + "location": "[parameters('location')]", + "properties": { + "sku": { + "name": "[parameters('sku')]" + }, + "retentionInDays": "[parameters('dataRetention')]", + "features": { + "searchVersion": 1, + "legacy": 0 + } + } + }, + { + "type": "Microsoft.Automation/automationAccounts", + "apiVersion": "2020-01-13-preview", + "name": "[parameters('automationAccountName')]", + "location": "[parameters('automationAccountLocation')]", + "dependsOn": [ + "[parameters('workspaceName')]" + ], + "properties": { + "sku": { + "name": "Basic" + } + }, + "resources": [ + { + "type": "runbooks", + "apiVersion": "2018-06-30", + "name": "[parameters('sampleGraphicalRunbookName')]", + "location": "[parameters('automationAccountLocation')]", + "dependsOn": [ + "[parameters('automationAccountName')]" + ], + "properties": { + "runbookType": "GraphPowerShell", + "logProgress": "false", + "logVerbose": "false", + "description": "[parameters('sampleGraphicalRunbookDescription')]", + "publishContentLink": { + "uri": "[uri(parameters('_artifactsLocation'), concat('scripts/AzureAutomationTutorial.graphrunbook', parameters('_artifactsLocationSasToken')))]", + "version": "1.0.0.0" + } + } + }, + { + "type": "runbooks", + "apiVersion": "2018-06-30", + "name": "[parameters('samplePowerShellRunbookName')]", + "location": "[parameters('automationAccountLocation')]", + "dependsOn": [ + "[parameters('automationAccountName')]" + ], + "properties": { + "runbookType": "PowerShell", + "logProgress": "false", + "logVerbose": "false", + "description": "[parameters('samplePowerShellRunbookDescription')]", + "publishContentLink": { + "uri": "[uri(parameters('_artifactsLocation'), concat('scripts/AzureAutomationTutorial.ps1', parameters('_artifactsLocationSasToken')))]", + "version": "1.0.0.0" + } + } + }, + { + "type": "runbooks", + "apiVersion": "2018-06-30", + "name": "[parameters('samplePython2RunbookName')]", + "location": "[parameters('automationAccountLocation')]", + "dependsOn": [ + "[parameters('automationAccountName')]" + ], + "properties": { + "runbookType": "Python2", + "logProgress": "false", + "logVerbose": "false", + "description": "[parameters('samplePython2RunbookDescription')]", + "publishContentLink": { + "uri": "[uri(parameters('_artifactsLocation'), concat('scripts/AzureAutomationTutorialPython2.py', parameters('_artifactsLocationSasToken')))]", + "version": "1.0.0.0" + } + } + } + ] + }, + { + "type": "Microsoft.OperationalInsights/workspaces/linkedServices", + "apiVersion": "2020-03-01-preview", + "name": "[concat(parameters('workspaceName'), '/' , 'Automation')]", + "location": "[parameters('location')]", + "dependsOn": [ + "[parameters('workspaceName')]", + "[parameters('automationAccountName')]" + ], + "properties": { + "resourceId": "[resourceId('Microsoft.Automation/automationAccounts', parameters('automationAccountName'))]" + } + } + ] +} diff --git a/101-automation/azuredeploy.parameters.json b/101-automation/azuredeploy.parameters.json new file mode 100644 index 000000000000..400c302f8976 --- /dev/null +++ b/101-automation/azuredeploy.parameters.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "workspaceName": { + "value": "GEN-UNIQUE" + }, + "automationAccountName": { + "value": "GEN-UNIQUE" + }, + "automationAccountLocation": { + "value": "eastus2" + } + } +} diff --git a/101-automation/azuredeploy.parameters.us.json b/101-automation/azuredeploy.parameters.us.json new file mode 100644 index 000000000000..7a7351dad429 --- /dev/null +++ b/101-automation/azuredeploy.parameters.us.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "workspaceName": { + "value": "GEN-UNIQUE" + }, + "automationAccountName": { + "value": "GEN-UNIQUE" + }, + "automationAccountLocation": { + "value": "usgovvirginia" + } + } +} diff --git a/101-automation/metadata.json b/101-automation/metadata.json new file mode 100644 index 000000000000..55dcd0f1e0d9 --- /dev/null +++ b/101-automation/metadata.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://aka.ms/azure-quickstart-templates-metadata-schema#", + "type": "QuickStart", + "itemDisplayName": "Create Azure Automation account", + "description": "This template provides an example of how create an Azure Automation account and links it to a new or existing Azure Monitor Log Analytics workspace.", + "summary": "Create an Azure Automation account and create a new Azure Monitor Log Analytics workspace if not exist, and then link them together.", + "githubUsername": "mgoedtel", + "dateUpdated": "2020-06-17" + } + diff --git a/101-automation/scripts/AzureAutomationTutorial.graphrunbook b/101-automation/scripts/AzureAutomationTutorial.graphrunbook new file mode 100644 index 000000000000..871d9dc12e91 --- /dev/null +++ b/101-automation/scripts/AzureAutomationTutorial.graphrunbook @@ -0,0 +1 @@ +{"SchemaVersion":"1.7","RunbookDefinition":"AAEAAAD/////AQAAAAAAAAAMAgAAAFZPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuR3JhcGhSdW5ib29rBQAAAApwYXJhbWV0ZXJzCmFjdGl2aXRpZXMFbGlua3MIY29tbWVudHMLb3V0cHV0VHlwZXMDAwMDA6YBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBhcmFtZXRlciwgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXaUBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkFjdGl2aXR5LCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1doQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuTGluaywgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXaQBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkNvbW1lbnQsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAkEAAAACQUAAAAJBgAAAAkHAAAABAMAAACmAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5QYXJhbWV0ZXIsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAACtPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBhcmFtZXRlcltdAgAAAAgICQgAAAAAAAAAAAAAAAQEAAAApQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuQWN0aXZpdHksIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAACpPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkFjdGl2aXR5W10CAAAACAgJCQAAAAcAAAAHAAAABAUAAAChAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5MaW5rLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24EAAAmT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5MaW5rW10CAAAACAgJCgAAAAUAAAAFAAAABAYAAACkAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5Db21tZW50LCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24EAAApT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5Db21tZW50W10CAAAACAgJCwAAAAAAAAAAAAAABAcAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJDAAAAAAAAAAAAAAABwgAAAAAAQAAAAAAAAAEKU9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuUGFyYW1ldGVyAgAAAAcJAAAAAAEAAAAIAAAABChPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkFjdGl2aXR5AgAAAAkNAAAACQ4AAAAJDwAAAAkQAAAACREAAAAJEgAAAAkTAAAACgcKAAAAAAEAAAAIAAAABCRPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkxpbmsCAAAACRQAAAAJFQAAAAkWAAAACRcAAAAJGAAAAA0DBwsAAAAAAQAAAAAAAAAEJ09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuQ29tbWVudAIAAAARDAAAAAAAAAAFDQAAAC9PcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkNvbW1hbmRBY3Rpdml0eQwAAAAcPENvbW1hbmRUeXBlPmtfX0JhY2tpbmdGaWVsZDRJbnZvY2F0aW9uQWN0aXZpdHkrPFBhcmFtZXRlclNldE5hbWU+a19fQmFja2luZ0ZpZWxkLkludm9jYXRpb25BY3Rpdml0eSs8UGFyYW1ldGVycz5rX19CYWNraW5nRmllbGQ0SW52b2NhdGlvbkFjdGl2aXR5KzxDdXN0b21QYXJhbWV0ZXJzPmtfX0JhY2tpbmdGaWVsZDNJbnZvY2F0aW9uQWN0aXZpdHkrPENoZWNrcG9pbnRBZnRlcj5rX19CYWNraW5nRmllbGQiTG9vcGFibGVBY3Rpdml0eStsb29wRXhpdENvbmRpdGlvbitMb29wYWJsZUFjdGl2aXR5KzxMb29wRGVsYXk+a19fQmFja2luZ0ZpZWxkHkFjdGl2aXR5KzxOYW1lPmtfX0JhY2tpbmdGaWVsZCJBY3Rpdml0eSs8RW50aXR5SWQ+a19fQmFja2luZ0ZpZWxkI0FjdGl2aXR5KzxQb3NpdGlvblg+a19fQmFja2luZ0ZpZWxkI0FjdGl2aXR5KzxQb3NpdGlvblk+a19fQmFja2luZ0ZpZWxkJUFjdGl2aXR5KzxEZXNjcmlwdGlvbj5rX19CYWNraW5nRmllbGQEAQMBAAQEBAEAAAEzT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5Db21tYW5kQWN0aXZpdHlUeXBlAgAAANkCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LlBhcmFtZXRlck5hbWUsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXSxbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5JVmFsdWVEZXNjcmlwdG9yLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dASlPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkNvbmRpdGlvbgIAAAA3T3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5Db25zdGFudFZhbHVlRGVzY3JpcHRvcgIAAAA7T3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5BY3Rpdml0eU5hbWUCAAAACAgCAAAACRkAAAAGGgAAABtTZXJ2aWNlUHJpbmNpcGFsQ2VydGlmaWNhdGUJGwAAAAYcAAAAAAAJHQAAAAkeAAAACR8AAAAGIAAAACQ1MDI5ZWMwZS02YmJmLTRhOWUtYjUyZC0wYjZkYjJlMWIxOGEYAQAAlgAAAAYhAAAAGUF1dGhlbnRpY2F0ZSB0byBBenVyZSBBUk0BDgAAAA0AAAAJIgAAAAYjAAAAB0RlZmF1bHQJJAAAAAYlAAAAEy1FcnJvckFjdGlvbiBJZ25vcmUACSYAAAAJJwAAAAkoAAAABikAAAAkOWM5YTRiN2ItM2MwOC00ZjkzLWI5MjgtY2RiNDllNDUyZTRmGAEAADwAAAAGKgAAAEhHZXQgdGhlIEF6dXJlUnVuQXNDb25uZWN0aW9uIHdpdGggZGF0YSBmb3IgYXV0aGVudGljYXRpbmcgd2l0aCBBenVyZSBBUk0BDwAAAA0AAAAJKwAAAAkcAAAACS0AAAAJHAAAAAAJLwAAAAkwAAAACTEAAAAGMgAAACQ5OGNkYTg1YS1jNzA3LTRlNmItODU2Ny05NGIzZGEzNGI1ZDEYAQAA8AAAAAYzAAAAMUdldCB0aGUgQXp1cmUgcmVzb3VyY2UgZ3JvdXBzIGluIHRoZSBzdWJzY3JpcHRpb24BEAAAAA0AAAAJNAAAAAY1AAAAMUxpc3RzIHRoZSByZXNvdXJjZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBzY29wZS4JNgAAAAkcAAAAAAk4AAAACTkAAAAJOgAAAAY7AAAAJDgxOTI3Njk1LTk3NGUtNDhlNS04MTFhLTQxZWQ3YWVjMDEyMBgBAABKAQAABjwAAAAtR2V0IHRoZSBBenVyZSByZXNvdXJjZXMgaW4gdGhlIHJlc291cmNlIGdyb3VwAREAAAANAAAACT0AAAAGPgAAAAtOb0V4Y2VwdGlvbgk/AAAACRwAAAAACUEAAAAJQgAAAAlDAAAABkQAAAAkYTBlZTllMTctYWUxYi00NDljLWI1MDItOWUzMjM4NWFiMDRk4AEAAG4AAAAJHAAAAAUSAAAANk9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuV29ya2Zsb3dTY3JpcHRBY3Rpdml0eQsAAAAWPEJlZ2luPmtfX0JhY2tpbmdGaWVsZBg8UHJvY2Vzcz5rX19CYWNraW5nRmllbGQUPEVuZD5rX19CYWNraW5nRmllbGQgPENoZWNrcG9pbnRBZnRlcj5rX19CYWNraW5nRmllbGQiTG9vcGFibGVBY3Rpdml0eStsb29wRXhpdENvbmRpdGlvbitMb29wYWJsZUFjdGl2aXR5KzxMb29wRGVsYXk+a19fQmFja2luZ0ZpZWxkHkFjdGl2aXR5KzxOYW1lPmtfX0JhY2tpbmdGaWVsZCJBY3Rpdml0eSs8RW50aXR5SWQ+a19fQmFja2luZ0ZpZWxkI0FjdGl2aXR5KzxQb3NpdGlvblg+a19fQmFja2luZ0ZpZWxkI0FjdGl2aXR5KzxQb3NpdGlvblk+a19fQmFja2luZ0ZpZWxkJUFjdGl2aXR5KzxEZXNjcmlwdGlvbj5rX19CYWNraW5nRmllbGQBAQEABAQEAQAAAQEpT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5Db25kaXRpb24CAAAAN09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuQ29uc3RhbnRWYWx1ZURlc2NyaXB0b3ICAAAAO09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuRXhlY3V0YWJsZVZpZXcuQWN0aXZpdHlOYW1lAgAAAAgIAgAAAAkcAAAABkYAAADjBDwjCi5TWU5PUFNJUwpUaGlzIHJ1bmJvb2sgc2hvd3MgaG93IHRvIGF1dGhlbnRpY2F0ZSB0byBBenVyZSB3aXRoIHRoZSBSdW4gQXMgYWNjb3VudC4gIEl0IGFsc28gaG93IHRvIG1hbmFnZSBhbiBBenVyZSByZXNvdXJjZSAtIGluIHRoaXMgY2FzZSwgZ2V0IGEgbGlzdCBvZiBBenVyZSBWTXMgaW4gdGhlIHN1YnNjcmlwdGlvbi4KCi5ERVNDUklQVElPTgpUaGlzIHJ1bmJvb2sgc2hvd3MgaG93IHRvIGF1dGhlbnRpY2F0ZSB0byBBenVyZSB3aXRoIHRoZSBSdW4gQXMgYWNjb3VudC4gIEl0IGFsc28gaG93IHRvIG1hbmFnZSBBenVyZSByZXNvdXJjZXMgLSBpbiB0aGlzIGNhc2UsIGdldCBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyBpbiB5b3VyIEF6dXJlIHN1YnNjcmlwdGlvbi4KCi5ERVBFTkRFTkNJRVMKICAtIE5vbmUKICAKLlJFUVVJUkVEIEFVVE9NQVRJT04gQVNTRVRTCiAgLSBBbiBBdXRvbWF0aW9uIGNvbm5lY3Rpb24gYXNzZXQgY2FsbGVkICJBenVyZVJ1bkFzQ29ubmVjdGlvbiIgdGhhdCBpcyBvZiB0eXBlIEF6dXJlU2VydmljZVByaW5jaXBhbAoKLk5PVEVTCiAgIEFVVEhPUjogQXp1cmUgQXV0b21hdGlvbiBUZWFtIAogICBMQVNURURJVDogMjAxNi00LTIwCiM+CRwAAAAACUgAAAAJSQAAAAlKAAAABksAAAAkYzE5ZTQ2YTMtZjdkYy00ZmMyLWEyNGQtYWM0ZjM1MjlmMGQ3WgAAADwAAAAGTAAAAB1SZWFkIHRoZSBjb21tZW50IGluIHRoZSBDb2RlIQETAAAAEgAAAAkcAAAABk4AAACRASJSZXNvdXJjZSAnIiArICRBY3Rpdml0eU91dHB1dFsnRmluZCBBenVyZSBSZXNvdXJjZXMnXS5SZXNvdXJjZU5hbWUgKyAiJyBvZiB0eXBlICciICsgJEFjdGl2aXR5T3V0cHV0WydGaW5kIEF6dXJlIFJlc291cmNlcyddLlJlc291cmNlVHlwZSArICInIgoJHAAAAAAJUAAAAAlRAAAACVIAAAAGUwAAACQ0YmQ5ZTcxNC05YzlhLTQwMzYtOTk5Ni0xZDlkMmYxMGI0M2IYAQAApAEAAAkcAAAABRQAAAAkT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5MaW5rBgAAAA5saW5rU3RyZWFtVHlwZQljb25kaXRpb24cPERlc2NyaXB0aW9uPmtfX0JhY2tpbmdGaWVsZCw8RGVzdGluYXRpb25BY3Rpdml0eUVudGl0eUlkPmtfX0JhY2tpbmdGaWVsZBk8TGlua1R5cGU+a19fQmFja2luZ0ZpZWxkJzxTb3VyY2VBY3Rpdml0eUVudGl0eUlkPmtfX0JhY2tpbmdGaWVsZAMEAQEEAQxTeXN0ZW0uSW50MzIpT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5Db25kaXRpb24CAAAAN09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuRXhlY3V0YWJsZVZpZXcuTGlua1R5cGUCAAAAAgAAAAgIAAAAAAlVAAAACRwAAAAGVwAAACQ1MDI5ZWMwZS02YmJmLTRhOWUtYjUyZC0wYjZkYjJlMWIxOGEFqP///zdPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LkxpbmtUeXBlAQAAAAd2YWx1ZV9fAAgCAAAAAQAAAAZZAAAAJDljOWE0YjdiLTNjMDgtNGY5My1iOTI4LWNkYjQ5ZTQ1MmU0ZgEVAAAAFAAAAAgIAAAAAAlaAAAACRwAAAAGXAAAACQ5OGNkYTg1YS1jNzA3LTRlNmItODU2Ny05NGIzZGEzNGI1ZDEBo////6j///8BAAAABl4AAAAkNTAyOWVjMGUtNmJiZi00YTllLWI1MmQtMGI2ZGIyZTFiMThhARYAAAAUAAAACAgAAAAACV8AAAAJHAAAAAZhAAAAJDgxOTI3Njk1LTk3NGUtNDhlNS04MTFhLTQxZWQ3YWVjMDEyMAGe////qP///wEAAAAGYwAAACQ5OGNkYTg1YS1jNzA3LTRlNmItODU2Ny05NGIzZGEzNGI1ZDEBFwAAABQAAAAICAAAAAAJZAAAAAkcAAAABmYAAAAkNGJkOWU3MTQtOWM5YS00MDM2LTk5OTYtMWQ5ZDJmMTBiNDNiAZn///+o////AQAAAAZoAAAAJDgxOTI3Njk1LTk3NGUtNDhlNS04MTFhLTQxZWQ3YWVjMDEyMAEYAAAAFAAAAAgIAAAAAAlpAAAACRwAAAAGawAAACRhMGVlOWUxNy1hZTFiLTQ0OWMtYjUwMi05ZTMyMzg1YWIwNGQBlP///6j///8AAAAABm0AAAAkOWM5YTRiN2ItM2MwOC00ZjkzLWI5MjgtY2RiNDllNDUyZTRmBRkAAAAzT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5Db21tYW5kQWN0aXZpdHlUeXBlAwAAACM8SW5wdXRQYXJhbWV0ZXJTZXRzPmtfX0JhY2tpbmdGaWVsZBw8Q29tbWFuZE5hbWU+a19fQmFja2luZ0ZpZWxkGzxNb2R1bGVOYW1lPmtfX0JhY2tpbmdGaWVsZAMBAakBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBhcmFtZXRlclNldCwgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQIAAAAJbgAAAAZvAAAAEkFkZC1BenVyZVJtQWNjb3VudAZwAAAAD0F6dXJlUk0uUHJvZmlsZQQbAAAA2QJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuRXhlY3V0YWJsZVZpZXcuUGFyYW1ldGVyTmFtZSwgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdLFtPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LklWYWx1ZURlc2NyaXB0b3IsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0EAAAAB1ZlcnNpb24IQ29tcGFyZXIISGFzaFNpemUNS2V5VmFsdWVQYWlycwADAAMIywFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5PYmplY3RFcXVhbGl0eUNvbXBhcmVyYDFbW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuRXhlY3V0YWJsZVZpZXcuUGFyYW1ldGVyTmFtZSwgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQjdAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LlBhcmFtZXRlck5hbWUsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXSxbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5JVmFsdWVEZXNjcmlwdG9yLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dW10EAAAACXEAAAAHAAAACXIAAAAFHQAAAClPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkNvbmRpdGlvbgIAAAAKZXhwcmVzc2lvbhU8TW9kZT5rX19CYWNraW5nRmllbGQBBC1PcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkNvbmRpdGlvbk1vZGUCAAAAAgAAAAkcAAAABYz///8tT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5Db25kaXRpb25Nb2RlAQAAAAd2YWx1ZV9fAAgCAAAAAQAAAAUeAAAAN09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuQ29uc3RhbnRWYWx1ZURlc2NyaXB0b3IBAAAAFjxWYWx1ZT5rX19CYWNraW5nRmllbGQCAgAAAAgMAAAAAAAAAAAFHwAAADtPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LkFjdGl2aXR5TmFtZQEAAAAaQ2FzZUluc2Vuc2l0aXZlTmFtZWAxK25hbWUBAgAAAAZ1AAAADkxvZ2luIHRvIEF6dXJlASIAAAAZAAAACXYAAAAGdwAAABhHZXQtQXV0b21hdGlvbkNvbm5lY3Rpb24JHAAAAAEkAAAAGwAAAAEAAAAJcQAAAAMAAAAJegAAAAEmAAAAHQAAAAkcAAAAAYT///+M////AQAAAAEnAAAAHgAAAAgMAAAAAAAAAAABKAAAAB8AAAAGfQAAABVHZXQgUnVuIEFzIENvbm5lY3Rpb24BKwAAABkAAAAJfgAAAAZ/AAAAGEdldC1BenVyZVJtUmVzb3VyY2VHcm91cAaAAAAAEUF6dXJlUk0uUmVzb3VyY2VzBC0AAADZAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkRpY3Rpb25hcnlgMltbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5QYXJhbWV0ZXJOYW1lLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF0sW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuRXhlY3V0YWJsZVZpZXcuSVZhbHVlRGVzY3JpcHRvciwgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAHVmVyc2lvbghDb21wYXJlcghIYXNoU2l6ZQADAAjLAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLk9iamVjdEVxdWFsaXR5Q29tcGFyZXJgMVtbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5QYXJhbWV0ZXJOYW1lLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dCAAAAAAJcQAAAAAAAAABLwAAAB0AAAAJHAAAAAF9////jP///wEAAAABMAAAAB4AAAAIDAAAAAAAAAAAATEAAAAfAAAABoQAAAAZR2V0IEF6dXJlIFJlc291cmNlIEdyb3VwcwE0AAAAGQAAAAmFAAAABoYAAAAURmluZC1BenVyZVJtUmVzb3VyY2UGhwAAABFBenVyZVJNLlJlc291cmNlcwE2AAAAGwAAAAEAAAAJcQAAAAMAAAAJiQAAAAE4AAAAHQAAAAkcAAAAAXX///+M////AQAAAAE5AAAAHgAAAAgMAAAAAAAAAAABOgAAAB8AAAAGjAAAABRGaW5kIEF6dXJlIFJlc291cmNlcwE9AAAAGQAAAAmNAAAABo4AAAALV3JpdGUtRXJyb3IGjwAAABxNaWNyb3NvZnQuUG93ZXJTaGVsbC5VdGlsaXR5AT8AAAAbAAAAAQAAAAlxAAAAAwAAAAmRAAAAAUEAAAAdAAAACRwAAAABbf///4z///8BAAAAAUIAAAAeAAAACAwAAAAAAAAAAAFDAAAAHwAAAAaUAAAAIldyaXRlIEVycm9yIC0gQ29ubmVjdGlvbiBOb3QgRm91bmQBSAAAAB0AAAAJHAAAAAFq////jP///wEAAAABSQAAAB4AAAAIDAAAAAAAAAAAAUoAAAAfAAAABpcAAAAHUkVBRCBNRQFQAAAAHQAAAAkcAAAAAWf///+M////AQAAAAFRAAAAHgAAAAgMAAAAAAAAAAABUgAAAB8AAAAGmgAAABdXcml0ZSBPdXQgTmFtZSBhbmQgVHlwZQFVAAAAHQAAAAkcAAAAAWT///+M////AQAAAAFaAAAAHQAAAAkcAAAAAWP///+M////AQAAAAFfAAAAHQAAAAkcAAAAAWL///+M////AQAAAAFkAAAAHQAAAAkcAAAAAWH///+M////AQAAAAFpAAAAHQAAAAagAAAAKyghJEFjdGl2aXR5T3V0cHV0WydHZXQgUnVuIEFzIENvbm5lY3Rpb24nXSkBX////4z///8AAAAABG4AAACpAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5QYXJhbWV0ZXJTZXQsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC5PcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBhcmFtZXRlclNldFtdAgAAAAgICaIAAAAGAAAABgAAAARxAAAAywFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5PYmplY3RFcXVhbGl0eUNvbXBhcmVyYDFbW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuRXhlY3V0YWJsZVZpZXcuUGFyYW1ldGVyTmFtZSwgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQAAAAAHcgAAAAABAAAABAAAAAPbAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LlBhcmFtZXRlck5hbWUsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXSxbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5JVmFsdWVEZXNjcmlwdG9yLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dBF3////bAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LlBhcmFtZXRlck5hbWUsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXSxbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5JVmFsdWVEZXNjcmlwdG9yLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAgAAAANrZXkFdmFsdWUEBDxPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LlBhcmFtZXRlck5hbWUCAAAAPU9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuQWN0aXZpdHlPdXRwdXRWYWx1ZURlc2NyaXB0b3ICAAAACaQAAAAJpQAAAAFa////Xf///wmnAAAACagAAAABV////13///8JqgAAAAmrAAAAAVT///9d////Ca0AAAAJrgAAAAF2AAAAbgAAAAmvAAAAAQAAAAEAAAAHegAAAAABAAAAAQAAAAPbAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LlBhcmFtZXRlck5hbWUsIE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwsIFZlcnNpb249Ny4yLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXSxbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5JVmFsdWVEZXNjcmlwdG9yLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAVD///9d////CbEAAAAJsgAAAAF+AAAAbgAAAAmzAAAAAgAAAAIAAAABhQAAAG4AAAAJtAAAAAMAAAADAAAAB4kAAAAAAQAAAAEAAAAD2wJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5QYXJhbWV0ZXJOYW1lLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF0sW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuRXhlY3V0YWJsZVZpZXcuSVZhbHVlRGVzY3JpcHRvciwgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQFL////Xf///wm2AAAACbcAAAABjQAAAG4AAAAJuAAAAAMAAAADAAAAB5EAAAAAAQAAAAEAAAAD2wJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5QYXJhbWV0ZXJOYW1lLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF0sW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuRXhlY3V0YWJsZVZpZXcuSVZhbHVlRGVzY3JpcHRvciwgT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbCwgVmVyc2lvbj03LjIuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQFH////Xf///wm6AAAACbsAAAAHogAAAAABAAAACAAAAAQsT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5QYXJhbWV0ZXJTZXQCAAAACbwAAAAJvQAAAAm+AAAACb8AAAAJwAAAAAnBAAAADQIFpAAAADxPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LlBhcmFtZXRlck5hbWUBAAAAGkNhc2VJbnNlbnNpdGl2ZU5hbWVgMStuYW1lAQIAAAAGwgAAAA1BcHBsaWNhdGlvbklkBaUAAAA9T3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5BY3Rpdml0eU91dHB1dFZhbHVlRGVzY3JpcHRvcgIAAAAdPEFjdGl2aXR5TmFtZT5rX19CYWNraW5nRmllbGQaPEZpZWxkUGF0aD5rX19CYWNraW5nRmllbGQEAztPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLkV4ZWN1dGFibGVWaWV3LkFjdGl2aXR5TmFtZQIAAAAPU3lzdGVtLlN0cmluZ1tdAgAAAAnDAAAACcQAAAABpwAAAKQAAAAGxQAAABVDZXJ0aWZpY2F0ZVRodW1icHJpbnQBqAAAAKUAAAAJxgAAAAnHAAAAAaoAAACkAAAABsgAAAAQU2VydmljZVByaW5jaXBhbAGrAAAAHgAAAAgBAQGtAAAApAAAAAbJAAAACFRlbmFudElkAa4AAAClAAAACcoAAAAJywAAAAevAAAAAAEAAAAEAAAABCxPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBhcmFtZXRlclNldAIAAAAJzAAAAA0DAbEAAACkAAAABs0AAAAETmFtZQGyAAAAHgAAAAbOAAAAFEF6dXJlUnVuQXNDb25uZWN0aW9uB7MAAAAAAQAAAAQAAAAELE9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuUGFyYW1ldGVyU2V0AgAAAAnPAAAACdAAAAANAge0AAAAAAEAAAAEAAAABCxPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBhcmFtZXRlclNldAIAAAAJ0QAAAAnSAAAACdMAAAAKAbYAAACkAAAABtQAAAAZUmVzb3VyY2VHcm91cE5hbWVDb250YWlucwG3AAAApQAAAAnVAAAACdYAAAAHuAAAAAABAAAABAAAAAQsT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5QYXJhbWV0ZXJTZXQCAAAACdcAAAAJ2AAAAAnZAAAACgG6AAAApAAAAAbaAAAAB01lc3NhZ2UFuwAAAENPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBvd2VyU2hlbGxFeHByZXNzaW9uVmFsdWVEZXNjcmlwdG9yAQAAAApleHByZXNzaW9uAQIAAAAG2wAAALYBIlRoZSBDb25uZWN0aW9uIGFzc2V0IG5hbWVkICdBenVyZVJ1bkFzQ29ubmVjdGlvbicgY291bGQgbm90IGJlIGZvdW5kIGluIHRoaXMgQXV0b21hdGlvbiBhY2NvdW50LiAgQXNzdXJlIHRoYXQgdGhlIEF6dXJlIFJ1biBBcyBhY2NvdW50IGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgQXV0b21hdGlvbiBhY2NvdW50LiIFvAAAACxPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBhcmFtZXRlclNldAMAAAAVPE5hbWU+a19fQmFja2luZ0ZpZWxkHzxPdXRwdXRUeXBlTmFtZT5rX19CYWNraW5nRmllbGQbPFBhcmFtZXRlcnM+a19fQmFja2luZ0ZpZWxkAQEDpgFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW09yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuUGFyYW1ldGVyLCBPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLCBWZXJzaW9uPTcuMi4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAgAAAAbcAAAABFVzZXIKCd0AAAABvQAAALwAAAAG3gAAABtTZXJ2aWNlUHJpbmNpcGFsQ2VydGlmaWNhdGUKCd8AAAABvgAAALwAAAAG4AAAABBTZXJ2aWNlUHJpbmNpcGFsCgnhAAAAAb8AAAC8AAAABuIAAAAQU3Vic2NyaXB0aW9uTmFtZQoJ4wAAAAHAAAAAvAAAAAbkAAAAC0FjY2Vzc1Rva2VuCgnlAAAAAcEAAAC8AAAABuYAAAAOU3Vic2NyaXB0aW9uSWQKCecAAAABwwAAAB8AAAAG6AAAABVHZXQgUnVuIEFzIENvbm5lY3Rpb24RxAAAAAEAAAAG6QAAAA1BcHBsaWNhdGlvbklkAcYAAAAfAAAABuoAAAAVR2V0IFJ1biBBcyBDb25uZWN0aW9uEccAAAABAAAABusAAAAVQ2VydGlmaWNhdGVUaHVtYnByaW50AcoAAAAfAAAABuwAAAAVR2V0IFJ1biBBcyBDb25uZWN0aW9uEcsAAAABAAAABu0AAAAIVGVuYW50SWQBzAAAALwAAAAG7gAAAAdEZWZhdWx0CgnvAAAAAc8AAAC8AAAABvAAAAApTGlzdHMgdGhlIHJlc291cmNlIGdyb3VwIGJhc2VkIGluIHRoZSBJZC4KCfEAAAAB0AAAALwAAAAG8gAAACtMaXN0cyB0aGUgcmVzb3VyY2Ug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dG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5QYXJhbWV0ZXICAAAACVIBAAAJUwEAAAlUAQAACVUBAAAJVgEAAAlXAQAACVgBAAAJWQEAAAlaAQAACVsBAAAJXAEAAA0FBw4BAAAAAQAAABAAAAAEKU9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuUGFyYW1ldGVyAgAAAAldAQAACV4BAAAJXwEAAAlgAQAACWEBAAAJYgEAAAljAQAACWQBAAAJZQEAAA0HBw8BAAAAAQAAABAAAAAEKU9yY2hlc3RyYXRvci5HcmFwaFJ1bmJvb2suTW9kZWwuUGFyYW1ldGVyAgAAAAlmAQAACWcBAAAJaAEAAAlpAQAACWoBAAAJawEAAAlsAQAACW0BAAAJbgEAAAlvAQAADQYHEAEAAAABAAAACAAAAAQpT3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5QYXJhbWV0ZXICAAAACXABAAAJcQEAAAlyAQAACXMBAAAJdAEAAAl1AQAADQIFEQEAAClPcmNoZXN0cmF0b3IuR3JhcGhSdW5ib29rLk1vZGVsLlBhcmFtZXRlcgUAAAAdPERlZmF1bHRWYWx1ZT5rX19CYWNraW5nRmllbGQVPE5hbWU+a19fQmFja2luZ0ZpZWxkGTxPcHRpb25hbD5rX19CYWNraW5nRmllbGQZPFR5cGVOYW1lPmtfX0JhY2tpbmdGaWVsZBw8RGVzY3JpcHRpb24+a19fQmFja2luZ0ZpZWxkAgQAAQE8T3JjaGVzdHJhdG9yLkdyYXBoUnVuYm9vay5Nb2RlbC5FeGVjdXRhYmxlVmlldy5QYXJhbWV0ZXJOYW1lAgAAAAECAAAACgl2AQAAAQZ3AQAAKVN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uUFNDcmVkZW50aWFsCgESAQAAEQEAAAoJeAEAAAEGeQEAAD1NaWNyb3NvZnQuQXp1cmUuQ29tbW9uLkF1dGhlbnRpY2F0aW9uLk1vZGVscy5BenVyZUVudmlyb25tZW50CgETAQAAEQEAAAoJegEAAAEGewEAAA1TeXN0ZW0uU3RyaW5nCgEUAQAAEQEAAAoJfAEAAAEGfQEAAA1TeXN0ZW0uU3RyaW5nCgEVAQAAEQEAAAoJfgEAAAAGfwEAAA1TeXN0ZW0uU3RyaW5nCgEWAQAAEQEAAAoJgAEAAAAGgQEAAA1TeXN0ZW0uU3RyaW5nCgEXAQAAEQEAAAoJggEAAAEGgwEAAD1NaWNyb3NvZnQuQXp1cmUuQ29tbW9uLkF1dGhlbnRpY2F0aW9uLk1vZGVscy5BenVyZUVudmlyb25tZW50CgEYAQAAEQEAAAoJhAEAAAEGhQEAAA1TeXN0ZW0uU3RyaW5nCgEZAQAAEQEAAAoJhgEAAAAGhwEAACxTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlN3aXRjaFBhcmFtZXRlcgoBGgEAABEBAAAKCYgBAAAABokBAAANU3lzdGVtLlN0cmluZwoBGwEAABEBAAAKCYoBAAAABosBAAApU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5QU0NyZWRlbnRpYWwKARwBAAARAQAACgmMAQAAAQaNAQAAPU1pY3Jvc29mdC5BenVyZS5Db21tb24uQXV0aGVudGljYXRpb24uTW9kZWxzLkF6dXJlRW52aXJvbm1lbnQKAR0BAAARAQAACgmOAQAAAQaPAQAADVN5c3RlbS5TdHJpbmcKAR4BAAARAQAACgmQAQAAAAaRAQAALFN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU3dpdGNoUGFyYW1ldGVyCgEfAQAAEQEAAAoJkgEAAAEGkwEAAA1TeXN0ZW0uU3RyaW5nCgEgAQAAEQEAAAoJlAEAAAEGlQEAAA1TeXN0ZW0uU3RyaW5nCgEhAQAAEQEAAAoJlgEAAAAGlwEAAA1TeXN0ZW0uU3RyaW5nCgEiAQAAEQEAAAoJmAEAAAEGmQEAAA1TeXN0ZW0uU3RyaW5nCgEjAQAAEQEAAAoJmgEAAAEGmwEAAA1TeXN0ZW0uU3RyaW5nCgEkAQAAEQEAAAoJnAEAAAEGnQEAAA1TeXN0ZW0uU3RyaW5nCgElAQAAEQEAAAoJngEAAAEGnwEAAA1TeXN0ZW0uU3RyaW5nCgEmAQAAEQEAAAoJoAEAAAEGoQEAAClTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlBTQ3JlZGVudGlhbAoBJwEAABEBAAAKCaIBAAABBqMBAAA9TWljcm9zb2Z0LkF6dXJlLkNvbW1vbi5BdXRoZW50aWNhdGlvbi5N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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=","RunbookType":"GraphPowerShell"} \ No newline at end of file diff --git a/101-automation/scripts/AzureAutomationTutorial.ps1 b/101-automation/scripts/AzureAutomationTutorial.ps1 new file mode 100644 index 000000000000..81af5da36172 --- /dev/null +++ b/101-automation/scripts/AzureAutomationTutorial.ps1 @@ -0,0 +1,46 @@ +<# + .DESCRIPTION + An example runbook which gets all the ARM resources using the Run As Account (Service Principal) + + .NOTES + AUTHOR: Azure Automation Team + LASTEDIT: Mar 14, 2016 +#> + +$connectionName = "AzureRunAsConnection" +try +{ + # Get the connection "AzureRunAsConnection " + $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName + + "Logging in to Azure..." + Add-AzureRmAccount ` + -ServicePrincipal ` + -TenantId $servicePrincipalConnection.TenantId ` + -ApplicationId $servicePrincipalConnection.ApplicationId ` + -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint +} +catch { + if (!$servicePrincipalConnection) + { + $ErrorMessage = "Connection $connectionName not found." + throw $ErrorMessage + } else{ + Write-Error -Message $_.Exception + throw $_.Exception + } +} + +#Get all ARM resources from all resource groups +$ResourceGroups = Get-AzureRmResourceGroup + +foreach ($ResourceGroup in $ResourceGroups) +{ + Write-Output ("Showing resources in resource group " + $ResourceGroup.ResourceGroupName) + $Resources = Find-AzureRmResource -ResourceGroupNameContains $ResourceGroup.ResourceGroupName | Select ResourceName, ResourceType + ForEach ($Resource in $Resources) + { + Write-Output ($Resource.ResourceName + " of type " + $Resource.ResourceType) + } + Write-Output ("") +} diff --git a/101-automation/scripts/AzureAutomationTutorialPython2.py b/101-automation/scripts/AzureAutomationTutorialPython2.py new file mode 100644 index 000000000000..19a754aa385c --- /dev/null +++ b/101-automation/scripts/AzureAutomationTutorialPython2.py @@ -0,0 +1,57 @@ +""" +Python support for Azure automation is now public preview! + +Azure Automation documentation : https://aka.ms/azure-automation-python-documentation +Azure Python SDK documentation : https://aka.ms/azure-python-sdk + +This tutorial runbook demonstrate how to authenticate against Azure using the Azure automation service principal and then lists the resource groups present in the specified subscription. +""" +import azure.mgmt.resource +import automationassets +from msrestazure.azure_cloud import AZURE_PUBLIC_CLOUD + +def get_automation_runas_credential(runas_connection, resource_url, authority_url ): + """ Returns credentials to authenticate against Azure resoruce manager """ + from OpenSSL import crypto + from msrestazure import azure_active_directory + import adal + + # Get the Azure Automation RunAs service principal certificate + cert = automationassets.get_automation_certificate("AzureRunAsCertificate") + pks12_cert = crypto.load_pkcs12(cert) + pem_pkey = crypto.dump_privatekey(crypto.FILETYPE_PEM, pks12_cert.get_privatekey()) + + # Get run as connection information for the Azure Automation service principal + application_id = runas_connection["ApplicationId"] + thumbprint = runas_connection["CertificateThumbprint"] + tenant_id = runas_connection["TenantId"] + + # Authenticate with service principal certificate + authority_full_url = (authority_url + '/' + tenant_id) + context = adal.AuthenticationContext(authority_full_url) + return azure_active_directory.AdalAuthentication( + lambda: context.acquire_token_with_client_certificate( + resource_url, + application_id, + pem_pkey, + thumbprint) + ) + + +# Authenticate to Azure using the Azure Automation RunAs service principal +runas_connection = automationassets.get_automation_connection("AzureRunAsConnection") +resource_url = AZURE_PUBLIC_CLOUD.endpoints.active_directory_resource_id +authority_url = AZURE_PUBLIC_CLOUD.endpoints.active_directory +resourceManager_url = AZURE_PUBLIC_CLOUD.endpoints.resource_manager +azure_credential = get_automation_runas_credential(runas_connection, resource_url, authority_url) + +# Intialize the resource management client with the RunAs credential and subscription +resource_client = azure.mgmt.resource.ResourceManagementClient( + azure_credential, + str(runas_connection["SubscriptionId"]), + base_url=resourceManager_url) + +# Get list of resource groups and print them out +groups = resource_client.resource_groups.list() +for group in groups: + print group.name.encode('utf-8')