Redis - Install service

Octopus.Script exported 2017-08-31 by J-Sek belongs to ‘Redis’ category.

Script will make sure that Redis server is installed as a Windows service

  • It will start Redis inside package directory
  • To provide custom config you can prepare your own package (e.g. my-redis-64) or improve this template

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

Unpackage step

ris_UnpackageStep =

The step where you unpack the topshelf service

Service name

ris_ServiceName = Redis

null

Port

ris_Port = 6379

null

Force reinstall

ris_ForceReinstall = False

Service with the same name will be removed before installation

Script body

Steps based on this template will execute the following PowerShell script.

$step  = $OctopusParameters['ris_UnpackageStep']
$force = $OctopusParameters['ris_ForceReinstall']
$name  = $OctopusParameters['ris_ServiceName']
$port  = $OctopusParameters['ris_Port']

$outputPath = $OctopusParameters["Octopus.Action[$step].Package.CustomInstallationDirectory"]
if(!$outputPath) 
{
    $outputPath = $OctopusParameters["Octopus.Action[$step].Output.Package.InstallationDirectoryPath"]
}
if(!$outputPath) 
{
    Throw "Unable to find output path for step $step. Make sure you've selected the correct step for your package."
}

$path   = Join-Path $outputPath '\tools\redis-server.exe'
if (-not (Test-Path $path) )
{
    Throw "$path was not found"
}

$service = Get-Service -Name $name -ErrorAction SilentlyContinue
if ($service) {

    if (-not $force) {
        Write-Host "Service already installed. Skipping this time."
        return
    }

    Write-Host ">>> Uninstalling with: sc.exe"
    if ($service.Status -eq 'Running') {
        &"sc.exe" stop $name | Write-Host
    }
    &"sc.exe" delete $name | Write-Host

    $limit = 15
    while (Get-Service -Name $name -ErrorAction SilentlyContinue) {
        Start-Sleep -s 1
        
        $limit = $limit - 1
        if ($limit -eq 0) {
            Throw "Unable to stop Redis service within 15s"
        }
    }
}

Write-Host ">>> Installing with: $path"

Set-Location $outputPath

& $path --service-install --service-name $name --port $port | echo
& $path --service-start   --service-name $name              | echo

Write-Host ">>> Verification: Expecting the service with 'Running' status"

$limit = 15
do {
    Start-Sleep -s 1

    $limit = $limit - 1
    if ($limit -eq 0) {
        Throw "Redis service did not start within 15s"
    }

    $service = Get-Service -Name $name -ErrorAction SilentlyContinue

} until ($service -and $service.Status -eq 'Running')

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "3cf1dadf-169d-4fd2-b95b-f5f07343b911",
  "Name": "Redis - Install service",
  "Description": "Script will make sure that Redis server is installed as a Windows service\n\n- It will start Redis inside package directory\n- To provide custom config you can prepare your own package (e.g. my-redis-64) or improve this template",
  "Version": 1,
  "ExportedAt": "2017-08-31T23:11:05.000Z",
  "ActionType": "Octopus.Script",
  "Author": "J-Sek",
  "Parameters": [
    {
      "Id": "2fdb42bf-b1f0-4187-b925-bdf4975090e4",
      "Name": "ris_UnpackageStep",
      "Label": "Unpackage step",
      "HelpText": "The step where you unpack the topshelf service",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "StepName"
      },
      "Links": {}
    },
    {
      "Id": "58802353-e686-421c-b71c-8866759eca42",
      "Name": "ris_ServiceName",
      "Label": "Service name",
      "HelpText": null,
      "DefaultValue": "Redis",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      },
      "Links": {}
    },
    {
      "Id": "0f7fdded-881d-4bb8-94ee-5d6d71d38575",
      "Name": "ris_Port",
      "Label": "Port",
      "HelpText": null,
      "DefaultValue": "6379",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      },
      "Links": {}
    },
    {
      "Id": "e7411860-8679-4519-b871-dd9724ee357e",
      "Name": "ris_ForceReinstall",
      "Label": "Force reinstall",
      "HelpText": "Service with the same name will be removed before installation",
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    }
  ],
  "Properties": {
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.RunOnServer": "false",
    "Octopus.Action.Script.ScriptBody": "$step  = $OctopusParameters['ris_UnpackageStep']\n$force = $OctopusParameters['ris_ForceReinstall']\n$name  = $OctopusParameters['ris_ServiceName']\n$port  = $OctopusParameters['ris_Port']\n\n$outputPath = $OctopusParameters[\"Octopus.Action[$step].Package.CustomInstallationDirectory\"]\nif(!$outputPath) \n{\n    $outputPath = $OctopusParameters[\"Octopus.Action[$step].Output.Package.InstallationDirectoryPath\"]\n}\nif(!$outputPath) \n{\n    Throw \"Unable to find output path for step $step. Make sure you've selected the correct step for your package.\"\n}\n\n$path   = Join-Path $outputPath '\\tools\\redis-server.exe'\nif (-not (Test-Path $path) )\n{\n    Throw \"$path was not found\"\n}\n\n$service = Get-Service -Name $name -ErrorAction SilentlyContinue\nif ($service) {\n\n    if (-not $force) {\n        Write-Host \"Service already installed. Skipping this time.\"\n        return\n    }\n\n    Write-Host \">>> Uninstalling with: sc.exe\"\n    if ($service.Status -eq 'Running') {\n        &\"sc.exe\" stop $name | Write-Host\n    }\n    &\"sc.exe\" delete $name | Write-Host\n\n    $limit = 15\n    while (Get-Service -Name $name -ErrorAction SilentlyContinue) {\n        Start-Sleep -s 1\n        \n        $limit = $limit - 1\n        if ($limit -eq 0) {\n            Throw \"Unable to stop Redis service within 15s\"\n        }\n    }\n}\n\nWrite-Host \">>> Installing with: $path\"\n\nSet-Location $outputPath\n\n& $path --service-install --service-name $name --port $port | echo\n& $path --service-start   --service-name $name              | echo\n\nWrite-Host \">>> Verification: Expecting the service with 'Running' status\"\n\n$limit = 15\ndo {\n    Start-Sleep -s 1\n\n    $limit = $limit - 1\n    if ($limit -eq 0) {\n        Throw \"Redis service did not start within 15s\"\n    }\n\n    $service = Get-Service -Name $name -ErrorAction SilentlyContinue\n\n} until ($service -and $service.Status -eq 'Running')",
    "Octopus.Action.Script.ScriptFileName": null,
    "Octopus.Action.Package.FeedId": null,
    "Octopus.Action.Package.PackageId": null
  },
  "Category": "Redis",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/redis-install.json",
  "Website": "/step-templates/3cf1dadf-169d-4fd2-b95b-f5f07343b911",
  "Logo": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAlAklEQVR4Xu2dCZhdRZXHg6PjqOMsKkQkSb/9dZZ+ndAKKGAcB2RAVFBwA51BEB2UmYERFYHRwREBdRx0RowLhH7dCYnsCUkIhrDJYgJhSXrJvpCExJBOQhaSdHfN+d/3Ch6df3fecqtevZc63/f7ApVO37pV59Q5p7Y7TCnl8XgGgRZ6PJ4ctNDj8eSghR6PJwct9Hg8OWihx+PJQQs9Hk8OWujxeHLQQo/Hk4MWejyeHLSQ4cVLPQnTcQYtZHjxUk/CdJxBCxlevNSTMB1n0EKGFy/1JEzHGbSQ4cVLPQnTcQYtZHjxUk/CdJxBCxlevNSTMB1n0EKGFy/1JEzHGbSQ4cVLPQnTcQYtZHjxUk/CdJxBCxlevNSTMB1n0EKGFy/1JEzHGbSQ4cVLPQnTcQYtZHjxUk/CdJxBCxlezMn8iRPf2N2UjC1tbvxId3Pj1zsz6es6MqlJnc3p33Q0pX7W2ZS+ojvT+NnFzcnxGzOZt+X/mZcKhOk4gxYyvIQrnRPS7+kanz5bjGCysKkzk9rf1ZxWQyE/19fVnHpZDGhWV1PqAhjVd4cNe0P+V3opQZiOM2ghw0tlAkXubk4etSSTOl8U/FFhNzOCUhCDeaWzOfVUZ3Pywo6jG4+UxxyWe5qXgwnTcQYtZHgpT1a0xP5aRv1Pd2VSDwi7mKKHgRjKTmEGwrSFLUe+Nf94L4MI03EGLWR4KV7U2cP+bGlT4jhR2MliHFuYQptEPMtayWGuXzZhTEJ6znsVIkzHGbSQ4eXgIooZEa7oaE51McW1jRhon3it+WKk5/rk/vXCdJxBCxleuHSm029HCCVJ9lxRSkmiubJWG8l5tndmkv+7JJM8VnrzkE/smY4zaCHDy2uysKXlTVC0blE48RjbmUI6TJ8YS0dHU+qifGJ/SArTcQYtZHgZNgyzUN2Z9MXiMbrFMJz1FsUiXm+3vMetHeMTE1dNbPiL/GseEsJ0nEELGYeqrG9peeuSptEnSSx/txjGTqZoxbDsg8eorgmj6d9VGzGSfnm/VR2Z5OXLxsZHSm/XfWLPdJxBCxmHksjbvkEUJipJ7jUyyq5hSlUq6791qdq96Cm14duXqqXHTaA/Uy74fd3vy9C/KxnxKuIlZy3LpE9Zmki8Od8kdSdMxxm0kHEoCBRiSSb1GRlR54lh9FIFKpPuYzJq78rl0pRK9W7dqnpubVerzvoY/dliWHrcePXCpRerHffNkt+7Qgykif5cRYhXkba4Wojkm6huROv1waCFjHoVrHB3Tki/V5ThfySEeokqSkisu+jLSvX3S3PmRf5797OL1MbvficXgpF/U8iyE49R67/5b2rH3Nmqb8+e/C9RamvrTfTnw0IMBFtc5nQ2pc+ql0VIabaioIWMepMV46LDu5vTX5HOf1boZ4oRNt1Hj1G7FjwpzXmg9L+yR22763a15rxzVHfL2Ff/zfKTTpCw7N/Vy/Pnqf59+/I/XSC9vWrF6Se/7jlmSW3pzKSvFWNpEq2o2VxFWq4oaCGjHmRVQ8NfdIxvnCjeol3yiz1cAcyy+rOfVP2i1IOKeJV969aqP934c7XrycdV/969+b/gsvPhB+lzTIMQVAzlj2Iw53Y0Nr4z38Q1I9J0RUELGbUqQQglMXR3Jnk5Em5b3mJQxjeqHbNnSpOGIH19at1Xv8SfY5NMahu25y/JjJ6ANaJ80zst0npFQQsZtSaPHTfiLd3jkqeJUcyVka4q3mIwVpz+kaG9SJGyb+0aCdteC8eqjbRzb1cm/UxnU+OFi8eMeYd0g7MhmDRfUdBCRo3IYUvHJuLSUdeJp1jHOrGaYKbphUu+pl5+aL7q379fmrUy2XT9NfQ5TpBJw6u05be2OGco0nxFQQsZLgs24olBnCOu/gH506kVbiTma7/0BdVz2zTVu61HmjIkkVxla+vNauUnTqXPdQkZsJ7FDoRnMrEj8l1WdZEWLApayHBNpEa56dmm1A0SRm1jHVM1JM9YddbH1ZZJ/6f2bdwgzWdQMFX8zCK18T8uV8s+9H5eH2dI7ZVBbErH+MTJEoL9eb4rqyLSckVBCxmuiDTsu8VLfEUa+3mnvIUYxYrT/l7Cnh+ovcuXBQm0bcFU8fZ7Z6i1F/6T6j62mdfTAaTf+gUJgVPfEoOJSrdaD8GkuYqCFjKqKVjhlsY8vrM5NUViW2On8spl9bmfDhbvere+FEpuUbGIV9m/5U/qpd9MUqvOPE11SZjH6u0CYiivSN/O6R6fPE0Gv7/Md7lxkVYqClrIsC3yxMOwe7azKX2ZjDLLpTHd3T07YXSw9WPZxOPU8o9MDLaQrPval9XGq69SW371C7Xtjt8Fifmexc+pfRvWB7lI366duTUOUWYjIr8XC4u927epnY89qtb80+d53d2hXwxlo+Qr1y4ZPzo5fdiwP8urghGRFioKWsiwJYhNpZFOEaOYKX9WfLGBi2BfFvKFFR89Sa369Blq3T+frzb/z4+LNxYJ3+Cp+l95Re1/caPa/dyzasfv56qt7a1q049/qNZferFa/fmz1MqPfSR4Tvd7x9F6uIrklPuk/x/qakqfvfa4EW/Jq0aoIq1YFLSQYVrE1UY6m5Pfkz9Xskare8QL7fj9fdLUgwtWzWFMqz5zhlp+8gdrTvHL5EXxLDdga0teVUIRac6ioIUME/IMpmeb0md1NKXmSEOEunu2FoHS9+3cKc1NRLwLtqmwf2cDGbjUH8el1H2NSfXTo45UM5IR9WxTiv6sOVJPSFTxpfwiZEUiLVoUtJARlshvOgyjgbjQ6yXp3sob4tBl80+uleY+UDCVy37eNM82pdXDY1LqrlRC3Z7MceURh6vLD39X8OdvG45SD4+OBwbE/r0RguuTUr/tbkqeWO50sTRpUdBCRqXS1ZJ6l7zYF4QFwkFvEawULNAt+7sPqJVnnKbWfeU8teHKb6nN/32d2vLrG1XP1Da17fbpatvddwQJdM+0Keqlm36tNt/wE7XxP69UL3z9QskNPpELYyRfYL/fFN3vbQrOdwyUDZd/g/68CZZkct5idjqp7sgbRSHaQDTfEX545HB1V6JBPT0uSX+nIfokX1ktxvJNhOgYfPPqdlCRJi0KWsgoR1RLy5s6mxpbOsTaxTUaXcxb+v4JavVnzlSbrvtBsDV8/6YXVd+uXeWvR2AWaM+eYOp218IFassv/1etveCLuXMb4xtpHcJi7YXnva7eqEP3MWbXNeAB4C0eHJ18nbdgDDSQQq6Sv5s06j3qodExMTSrIdgeyWHnibGcgcv68io4qEizFgUtZBQrsGJsfxYv8c9S2efEMIxNz2K0XXv+uWr7zHvU/j9tlmqal74dO9SuJx7PHZ09voXWq2Kw43fu7PwTldrym0n850KgQ7zFE2NTalY6Qb0FYygDKeQa8Sq3x0epRU1WvQq2tmwW3btx8ZjEGNFHesWRNGtR0ELGwQSGIUZxglRsirCDVTwsYBgvXnO12rt6lVStetLb06O2Zicb2eKBVfm+PbuDqdwVp51Ef6YS4C3mF+EtGMUaiAZe5Zcj36MebIxZzVXEUHBm5d7uscnmvJq+KtJ9RUELGYNJx/sa39mdSV4sxrGYVTJscP5h75rVUiV3pG/ny2rTtd8P/dYSrI3sfPRh+nfloL0Fcgum+MVSqoEUglzld+JVnrKZq+TWVa4vTOil24qCFjIGCla5u8anrhdvUfZVOCUhYUewmFaFPU7Fyo55c9XSEPdAYXV+1ZkfpX9XCouaUuoB8RZ3EmUvh0oMRIPE/kbxKvPEq1jLVTLp6bg3Gfor3VUUtJChJUi8xWN02jKMPBu/d6W5bRkhCm4ZceH+q8XiLR4XbzGzQm/BCMNACrl6+BFqWmyU+uPYBH2XsOjMpHqXNMfHBnpMdJxBCxnaOMRVtUkcafXYKqZae3u2SjVqQHp7g82L7D1Mg/j+afEW8xrD8xaMsA1Ec8UR7wpmwJ4ztACJ9nlsbOp4YwYiCc+X2INNs/qcs6UKtSOYEmbvYRIYxr1prtBhE7aBXCG/77+PereanYqo5w2GW4+PSar2hvj7jRkIjlCyB5tm1adOlyrUjmBBkr2HaYJ1DFGCcmamSiEsA/ne8MNVNjJCPWk4tAJ/lHBzSixm1kAeGp2Yyh5uHInpX1nWLdVwXzA1iyla+h6W6BCeHJdScyTUYgpeKZUYCJLzG0YcGXiLxRaSc4RVD0o7tEdjqk0waiBTotGpmCZkFTEN4vpgZdxl6esLtpuz+leL5yRZf0i8yj0hepWrZORnyj8U//XuI0RBRxpPxAt5WgaJuxLxwDA0Rg2kTQxkijzkkdFJqws+mjXnfV7t37xJquOeYFsKtrmY3oZSLugvvRu32BXzwSjWQOBpfi7eYm46Gng1Vi8TYJfxHBkQtNewaiD6QTOS8aAirIImWfah49T2mXcHK8xOiHgN3NqOSxpYfV0EU8APi1eZUaZXuXL4EdQgNNhiMjU20vbGxUAf56YTCoN4oVEUYs1AAJKe30uFnpcGZxU2hozSKz9+itp2523hXqVTgvTt3q12Pv4HtfbL/xjsHKb1dBx4lafEq8wtcVr4qiMONBBsJ/m/ke9R820u/OV5Ju8xoI+F+smwaiCaqVKxeY0JK0nXQJae8D61/t8vDk7j9W7bFsqNhVTEU/Tt3hVcPr3ph1cHZ89dDafKAYPco2NSRXkVGAOMAgn3DyS3mB4bZd1baOOeKfVhodRgVMVANDCU+8SjwKLZS5kGR1BXnf2J4HMCPdOnqt1PLwxu9yhH+l7eofZ0LFbbZ81Qm350jVrzj58zt3vXIaB4C0Xx7h8iV/muhFjYfAhvgf1d7PeYAvV7AlPZA5LvYsk2NBxXNQMpZKbkKJh7Zi9pG6zErzjtJLXmC59R6y66QK2/7F/Vhu9cpjZe9W214YpvqvXfvES9cPFXg5s/Vp5xas0ZAgYGXNAA2N+XC3IVeJWZ+QVIbFt5VJTzGcvb1wEOcWFy6LZ4eYahccZANHghvBgam724pziQ5yw/6cTgtpIN37pUbbnx57mvS61YHlzvg7PsK0PY2DgY1vPMPEi8fy/hO6ITpl+l4pyBaPCC91cx/KoJJKfBV6QwAYFt/dhC3zN9itr9zNNByBd8QGeQDZubf/oj/jtrEB3mzRxkqrYSnDUQDV747nz4ZXNu3CWWHjteLf/7E4JbSvD1KFwuh4vlcKkcPEGpEw27n1rg9O2JxYIw6jEJ4W4vM78oBucNpJDfSfj1cBB+1Z9XwWfUlr7/aLXi1L8Tb3B+cGcvPrGGxH//5s2hreNguhkeh9WhVsAGxQcak2pazJxhaGrKQDQIvzCPjYM9rAGdBdO8uHb0A0er1Z8Tb3D5N9RLN/0quOBt74plqnf7dmk6gyLhFo4e07rVAIskjJpV5PpFWNSkgRSC6Tu4WcShrFGrBZLklR+T3OCiLwcfrum57Va1a8ETwdWf1TrIteuJx2pukRL9+vjYZBBms/43Tc0biGaajCoPNCaqsp2FIp4CC5LBhzVNLUaWIDhAFixWsro6CGbBcKXQdAth1FBMiUSOrQsD0SCp12sqTngVbHM5/WTVc2t72YuQFUtfn9WL5CoBO2oH2zhom2wkuit71FEj6spACtFJfbXm5AeCSxXwZac9SxZb9SrYVuPCuffB0LenIFx2wTBANhrrz0aj1wWKLCLNWBS0kAFpi8Sy7OG20Uk9RicXvAryAEzZ7phzb3AFkEnBdv9lHzyW1qPaYDYKh5OqHUYNRIyjVwb3X8yfOPGNgSKLSFMWBS1kQMQCz5UH9g+sQLXA6HRnPqm3vSdoMLC+sfmn16t9618IP3mX3/fCpRfT51YTvZs2rNXuUIlEd7RHoxfge/mBEudFWrMoaCEDAgtsjUSc8CIDwRw6dhSbuhGjVLAOsu5rF6qdf3gkNEPBxklXdhDDcz85NqnukfzQlTBqAAipZrWOGJEIlHeASHMWBS1kaJnU0vKmbCR2jVjmPlKpqoPOujeZkM5zJKkXsIlwa9tk1btlizRleYLLuLENhf1+m2BP3UOSByIfZO3vApKML7wlFjstr7JUpEmLghYyBop4kmOzkciTrIKugE5EZ7qS1He/rynYQYy9VSXdECk/i28est9pCyziBqf1XAyj8twej++5J5W4pJjvG0qrFgUtZDCRuO6N2Vjsc1K5roGVdQl0KmJkHLBxwqtMGB1cZbR9xp3BRzYPJj3T2vnvMUxwO4p4YizqORpGBfW6W/LQ15YBUns7M6n7O5qTZ3am02/Pq+oBIs1aFLSQMZTMSiTejAR+SjS2lr2EK6AxsRHuD5LUY2McUwrb4HsjOJC1d9UK6lVwgz22srB/a4rgzHoQRvF2dAEMevfmZzLZO+QIvpr7Dfa9EGnaoqCFjMEEiXt3c3K8VGayWG4PLNnlEUdzqzQwtt+7slLf3TJOrTnvHPXygw+8upERn4le88XP0p83gb70wMnZqDz62EQpkzFiJC90jUudIVr86heotF4fDFrIGChS8oaOTOPpnc2px6QSB3wkBzGrKyuoQ4H6YSbGpaR+xakfDj4VZ+sK0wUyCpd6tts208SbYatK2QfvMqn9+OZ+Xn2pjjNoIaNQOsel3ytW+SityACQIGNP1XSHZz00SOqx0OVKUm8S5BcINe+QkJO1hStgnQv1DGPwEp3dvbhlzCjoMNNxBi1kaJGHfFVCqZI/wokXxIIeEirXvQruVdJJPXuXWgahyfzg7AV/dxfQ+YWJ9l84JnUC9JjpOIMWMiAd4xMny0Mq/p65XnlFHsAayCUwwrqU1JeL3jQ41KVq1QZGm7tnzczAhDaYFjd47Y8k4r9lDy4XKB3WKSq9qcIGSA7RebV0ph5eO5g0cdhro14YhB4VPTC5XQieEyG00XuxHh+bnM4eXinoyAXSkbjO1OURDuikHorn6pl6KFpwttvhgQf9jP7G5QymJ0fwDH2c16iBSEg0zfS0KH4/pvFqIfyC58N6gSvhl/bILk+IwBNjKtnG9DoGCuhSofc0fLNibBoaf+jFmXBAZ+OSMtdnWYDu9GqFX2ir+Y0JpxNvm4MJPBLyRjZQGDcQPATuESOVadeowWzGbCSYjnsVjFQ2Tz9iTQDT0q56W7QHwiisMbH6hw3a/ImxQw+qVgxEgxjX5gJbbqSsjaQedcQoZiLxfL4p5zFcXfGGweKOZlu7FJALFptzWTUQDRZzbI2aAM/B84Kk3nGvguQwt6O4MmXBOyO0heK5OpEBBbWZk8GD4lrb6SXoQFUMRAPXhi+J2jzd95woHqZfXY6/gV78wiGjYrdLoB2R18DAoHyFyaYrwFj1rJ6tARJTtjgcV05oafjan6ENRIPkCLFx2ftmykBPbcKbuahIhSA0wmCCxB4jIC44gIIhXMU7YGsOvGMtzEbZmpiA8YVx0ZwTBqJBI1bjeyG1sGpcq8BoEUbZHPwwcNwT0sDnlIFo9GwGRkpbbhjoWZ5aSOpdB0cYED7b6j/kMWF8D2QgThpIIRiBHhKltb1jFiEMpmC9VykeRADwxDYjAMx8hfk9kIE4byAaKKreMWvTq8AwkeC5HN9Xm2Dbv4zetmaj0P/YaoQBzHT+WDMGokGDIGFFcmqrQwDmzhEyuHT7XzVBG6AtbIbB6G+sFdkMgWvOQArBtF3ubiveoKZACIHJhFrY/xU2mBHCzBBmiFjbmEB78Wq0d00biAbhF46A4iio7aTeRGLoIlBOTCfbHIwQTmMtqJqLu3VhIIXYXp0FMMpcUu/+mfpSQXtiELC1mKuP9mJ9itXHJtlIdH82EknXlYFo4FWwMGVjJ3EhetW2lpN6GLnNTYPgtaO97rRbNhqdrS+VYzrOoIUMiDzgVvZg2+ivUNn2KnhmLSX1mCrFLmibq904nIRnutZGuAX05oaGvwkUWYTpOIMWMiDZhti32cOrRS6pT1rbNarBlUZQAlNz9ZXy2tluXv+wwUCFGUHMRjpnGPj0QSSWnXTkkW8NlDgvTMcZtJABySYSf5WNxJ5lFakm6JRqHINFUo+NhK5c5BwswlrM17BR1LUw6nVEousk6jlr4KcPIEzHGbSQoWVaInG4PHy+4Mx3QgrBDBSUxOZeIYQW2KVbrfALBmr60gMN3vVp8aC2v05bCpKMv4wvEEyPHXjlqBam4wxayCiU6WPG/LnEdJfhm2+sgi6AzkMYZDupx/NsxeDwGLZmpGAYemGV1cUF0Odz04n+ReMSUzqb0sFs1WDCdJxBCxlMpsbjI8WF3SyGspdV2BXQqaZO9w2GycUwPVULpWXPDhO8B7aduBJGMpAL4nKGwkNp0jb9XZn0/V1NqVNFe1+9k1cL03EGLWQMJbOTyRNnJOIbXHW5GjQkNsIhyS5UApPAKPWBJ1anYsE0d26qNkmfEzbBkQFROteS7kJgtMiBDpJz9eOa3OfHJ5vz6hoI03EGLWQMFFjl8kzjuO7m9G+kAntQGVgwLNn10306qce6gC2vgtEeK8nY0oI8qRjFg/fBNnNbORXaApceuD6VrffuleRBM+ldoqefyqsv1XEGLWQUyvNj4yM7Mqn2zkxqH6sMLBqr37WwZQNxPEIIU9ddMtCxCF2wMfABGQHvk5wFeQt2N2N6FtcdwcvZMl49G+fyYig8KAa1Si6aEwPpWTFu3HDoMNNxBi1kaFmWSZ/SlUltYRUYCF4EU6+18L0QhIf6wuRyO6DWwPoRPJqr6zkAdQvzVOqisanjocdMxxm0kAHpaGo8WodTpaJ3zLrcGRq4cIzirl4tWikYhZ3/HojoSUXfAyFg+8sdJi+vlrDql+zBpYDwC+68FsKvW2PxIKm3vVJvAnhFVzYNDgXqV3J+UQTQu+ASb5PX/jw9Lnkbe3i5IEnGzIzr4RfQM0i1Fn5hBMZI7Oxqt4DwFguP8GzsHSoFA5weGIwayO2J2DQTsyn6bqvpDneiRm/nsLXPqVwQ0mJG0eWpd7Ql1ooWG5ogwWCGULkwrDd+cRws0dSMD2ZtdBhQC0k9Zp2wXuCKV0E99KEkV9sP9UKOFyzcDqh/mKAd2Kq/lZsV4a5Nni1AR0Px4HZdT+rR4TBorB/YmpYdCNoL4YnLs4W2ZgkxPT7UBIS1q0dRAbzws4aPbCKUQUjj8lYHTbCm0mh3o2RgGGSkdIXckYTSPttcDthAWczMnDUD0WABB9O3phsAo05ww56MkgPr4Bp67t7k7BfO67vcFthag/jf9NZ7tAMmUFgdGNYNRAPL1TE5e5EwgeLVypYWhIkIK9h7lErhVUXsedUG74tRHIvDrP5hgXbAVLCemSoFJy5twD2qGO1NxpoAvx/JnstbsDXB4qOEipixY+8yGHhHGBjWY0zsDA4DDFQYsExHEXpLTCVT1k7daoKYHNuybcTk+hisq0qkwSgLY8EeLKyroN5QLORaz8uf8I7IK9Bu8D6uvo9+DxvnUcKcsnby2h/E5LauytejTLE7Zl0AeRw6H3+6XmfUEVeEwohNRgj43Tq/CLNNnL4XCy+KqUhb4Rca2F9YHQ7wZDbCKL0WVun5mcGomYvjMG2Lkd70LAdA2FKtqy5rHXhihFGm+wkhJm6oMT3xUjMGotFTojZmvzD7UStJfTWBp8/tPTPv6TEBYesMP6g5AykEiovpOxsr0kiOMS3tvcpr6MHKdK5YzenqmjYQDZQWszwmF9o0CB1w+vH2Q9irIIyy8T0Q5C+5e7R4PWxQFwai0a4eH1cxubENIJSAu783WRuHuioFbYsR3PQWfvxuhM8Io6o9WZKNxvpaY7FxdWMghSCpt/XxSCSM+DSAy2e0ywXTyVhfwd4l9u5hgTAZGzhd2pmdjUQX4k43YwbSWkUD0WB0R+5g44Mv6OTHpZMx0rrSyeWCsHWehWlaDGAIo5wbXCLRde2jkrFAkUWYjjNoIQOSjUavow+vEjqpNz3TAhAm4PaRMFZzbaI9r+n8AgMWBi4X20c8x4K2SKQhUOK8MB1n0EIGJJtIjJA4biOrRDVB0oeQyFZSj4TW9TP1GDwwU2Q6v0AYhb13rA7VRnR1twzq35/U0vKmQIELhOk4gxYytNzSkBwtFrmUVajaIAzSu0lNexX8fjwHkwiurNTn3j+3DYTVOSxwohSDxHRHvakYxX4xjrta4/FEXm0PEKbjDFrIKBTcmi1G4vSdvIiBbZ0dR1yPvWbVWlPRibfp9QuEmUEYRergBJHovmwkdv/kaPQY0dgD7uMtFKbjDFrIGCioQLtUpC0a/UPwkRJWYQeA8mCKEZ1r2qvoNRVb4RcUFac6TRoGptexou7yRIUM1K8I97bH4y3sWyBMmI4zaCFjMME339ojkVPEehe4bCjoXH1ZgOmEVYdfppQKhmHaY+hd0Y4fdd4lHqNtcjw+Nq+ORQvTcQYtZBxMYCitsdiHpdL3iaE4+XEdDUIh7Ey1kdQjHwjrFkNMcZuuN3636zdgilFsyzZEr70lFhuVV7+Shek4gxYyShEJu5rESH4lbm8He0FX0EmtjQvhoHiYaSt1SwsUFQYWXJNjyPNpj4e2YHVwhkh0mejWJfgUYF7Vyham4wxayChH8FXRtobo5bkXIy/sEMGNJBJSmF5IAzh2i+O3GKlxPgahH/IWGA/CMoRPWGzDFhuThotQE/VwecoaYbvwUGs0+qli84tihOk4gxYyKhHMQ7c2NJwh1j/f5ZkvAK+CpN70ibmB4Fm2ngdvhvMxTu85i0S3I79ANBKmYWhhOs6ghYwwBC/aHoslg/ArGnuJNowjwFBwqs1GUm8DGB82Y8I7OTtNK8gA+gIW936bSByeVxsjwnScQQsZYUv7qFF/2xaJ/Ys0CBYd+wY2lEvYTOrDBoaBD/W4fZ0rFvaii9qj0XNahw9/W15FjArTcQYtZJgS7K6UhjlJDGWWsJ83oBtAwfT32G2GX+WAhP4R8X5O5xcItyPRO1pHxT+AWdC8SlgRpuMMWsiwIdgaIKHXj6Th/sQa1CWgeLbO1JeC3k3r8ucOpI+3SvTwk6kjR8bzXW9dmI4zaCHDpkwbMeIt4nIvkCTtSWlQp8MvrNRjmwmO8DKFtQVm3/AJCVd3G4tR9EufPiNcZCuMGkqYjjNoIaMagqQ+G48fLY3bKvSwhncJ/eVcm+GX3gfmbn4R2yMD3YxsQ/xDJmajyhWm4wxayKi2YE1FGvoyoRujEekIZ8D2DNM3SmLCAIbh6oyUhMmbJPn+GVa7RXuG3DhYDWE6zqCFDFcESb2EER+Wxp8thrKbdY4r6MsnwtpRDM/kyvluhvRHr/TLktZI5MIwVrtNCtNxBi1kOCiHTW1oiLRFoj/MjVbuehUsyFWy+AhPhE8JuDpVK+2/LxiwJIyaP3HiG/P947QwHWfQQobL0jo88zbMoUtHLZAOcz78miOhEc66D/bxIRgEjAmzUfg4jrOJd26v3c8k/G3Md0XNCNNxBi1k1IgcJu79WOm4m7FVYWCHugg8AqZkYTjA6e0fmkh0ieSC/+p6GDWUMB1n0EJGrcld6fTbxe1fIsaymHaypzRwWi8andPa0PAPLs1GlStMxxm0kFGrghVaxMbZSOQe6eidB3S8Z2gi0c1iGDdOHjkyLlrg3GxUucJ0nEELGbUu6NzsqFFHZqPx74tXWSOd73SuUmWwONvVFon8y6RY7K/zTVhXwnScQQsZ9SRYqZfO/4QYyqOC09vvrSJhlORwDyOMuiGReHO+uepSmI4zaCGjHgVeZXI0mpFc5ZdiKC9TpTkEwHqSvP9NYhzN0ix1E0YNJUzHGbSQUe9yZ0PD37RGo1+XUfR5pkT1iBjFesnNrrq5oeHd+WY4ZITpOIMWMg4VgVdpHRX7sBjKHTKy7mGKVeP0i2EsbG2IncduHDxUhOk4gxYyDkE5DCOrhB0/EENZRRSt1oCx390Wix1fD9O0lQrTcQYtZBzKgoQ1G4udKSPvI0KtJfUviTf8BS5vhnfMv9IhL0zHGbSQ4SW//X7UqDGicDeJ4rm8/R5h1PpsNHrFtBEj3pGvvpcCYTrOoIUML68XXCpwS0Ps30QRV4hCOnGoS0JBGMZS5BfTx4z5y3xVvRBhOs6ghQwvXLB7VUbqj4pizoOCMsW1BE7rnVUru2mrLUzHGbSQ4eXg0haNNrVGYr+WEMzaRslsJPa0JN6flB7y+UUJwnScQQsZXoqX4PSjxP+iwKZmv/raIrEnbxHD8DNS5QnTcQYtZHgpXTD7JV7lfCw+hhF+ye/YLczJNjR8yPY1OfUmTMcZtJDhpXzBgpx4lBPbo7HpkqvgSqOijUV+fm9rNNrV1hC9emo8PlJ6wodSIQjTcQYtZHgJR4Kvc4kHyEYiPxblf6Q1EnlRPMwO8TQ75f+xH6xH/lwsBjW1NRK/ENvMJYzyiXfIwnScQQsZXswIPAKODP96xIh3wHj8LJQdYTrOoIUML17qSZiOM2ghw4uXehKm4wxayPDipZ6E6TiDFjK8eKknYTrOoIUML17qSZiOM2ghw4uXehKm4wxayPDipZ6E6TiDFjK8eKknYTrOoIUML17qSZiOM2ghw4uXehKm4wxayPDipZ6E6TiDFjK8eKknYTrOoIUML17qSZiOM2ihx+PJQQs9Hk8OWujxeHLQQo/Hk4MWejyeHLTQ4/HkoIUejycHLfR4PDloocfjyUELPR4PUMP+Hx7GjrL7/P6jAAAAAElFTkSuQmCC",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Thursday, August 31, 2017