Wednesday, February 8, 2017

Run WildFly 10.1 as a Service on Windows

  • Copy docs\contrib\scripts\service directory to bin
  • Run cmd as an adminsitrator and go to bin\scripts
  • Run service.bat install /startup
  • Start the service

Before running the service.bat replace its contents with the following (or download the latest version from gitHub https://github.com/wildfly/wildfly-core/blob/master/core-feature-pack/src/main/resources/content/docs/contrib/scripts/service/service.bat). The problem with 10.1 release is that instead of

set DESCRIPTION=WildFly Application Server

we have

set DESCRIPTION="WildFly Application Server" which leads to double quoting in prunsrv parameters

@echo off
REM -------------------------------------------------------------------------
REM  WildFly Service Script for Windows
REM    It has to reside in %JBOSS_HOME%\bin
REM    It is expecting that prunsrv.exe reside in:
REM      %JBOSS_HOME%\bin\service\
REM Easiest way to make it work is to copy whole "service" directory to %JBOSS_HOME%\bin
REM
REM  v9 2016-02-16 customize for WildFly, fix working on paths with spaces (Tomaz Cerar)
REM  v8 2016-01-20 customize for EAP 7 (Petr Sakar)
REM  v7 2014-07-09 added /logpath /startup /config /hostconfig /base /debug
REM                      simplified/corrected use of quotes
REM
REM  v6 was shipped with EAP 6.2.0 and supports all previous versions of 6.x as well.
REM  v6 2013-08-21 added /name /desc
REM                added /serviceuser /servicepass
REM                extended directory checking for versions and locations
REM                extended checking on option usage
REM  v5 2013-06-10 adapted for EAP 6.1.0
REM  v4 2012-10-03 Small changes to properly handles spaces in LogPath, StartPath,
REM                and StopPath (George Rypysc)
REM  v3 2012-09-14 fixed service log path
REM                cmd line options for controller,domain host, loglevel,
REM        username,password
REM  v2 2012-09-05 NOPAUSE support
REM  v1 2012-08-20 initial edit
REM
REM Author: Tom Fonteyne (unless noted above)
REM ========================================================
setlocal EnableExtensions EnableDelayedExpansion

set DEBUG=0
if "%DEBUG%" == "1" (
    echo "Debug info enabled"
    echo on
)

set "DIRNAME=%~dp0%"
if "%DEBUG%" == "1" (
    echo DIRNAME "%DIRNAME%x"
)

if exist "%DIRNAME%..\jboss-modules.jar" (
  REM we are in JBOSS_HOME/bin
  set "WE=%DIRNAME%..\"
  goto :WE_FOUND
) else if exist "%DIRNAME%..\..\jboss-modules.jar" (
  REM we are in bin\service in a WildFly installation
  set "WE=%DIRNAME%..\..\"
  goto :WE_FOUND
) else if exist "%DIRNAME%..\..\..\jboss-modules.jar" (
  REM we are in sbin in a 6.0.x installation
  set "WE=%DIRNAME%..\..\..\"
  goto :WE_FOUND
) else (
  REM we should be in sbin in 6.1 and up
  set "WE=%DIRNAME%..\..\..\..\..\..\"
)

if "%DEBUG%" == "1" (
    echo WE was not found, using "%WE%"
)

:WE_FOUND
if "%DEBUG%" == "1" (
    echo WE "%WE%"
)
pushd "%WE%"
set "RESOLVED_JBOSS_HOME=%CD%"
popd
set WE=
set DIRNAME=
if "x%JBOSS_HOME%" == "x" (
  set "JBOSS_HOME=%RESOLVED_JBOSS_HOME%"
)

pushd "%JBOSS_HOME%"
set "SANITIZED_JBOSS_HOME=%CD%"
popd

if "%DEBUG%" == "1" (
    echo SANITIZED_JBOSS_HOME="%SANITIZED_JBOSS_HOME%"
    echo RESOLVED_JBOSS_HOME="%RESOLVED_JBOSS_HOME%"
    echo JBOSS_HOME="%JBOSS_HOME%"
)

if not "%RESOLVED_JBOSS_HOME%x" == "%SANITIZED_JBOSS_HOME%x" (
    echo WARNING JBOSS_HOME may be pointing to a different installation - unpredictable results may occur.
    goto cmdEnd
)

rem Find jboss-modules.jar to check JBOSS_HOME
if not exist "%JBOSS_HOME%\jboss-modules.jar" (
  echo Could not locate "%JBOSS_HOME%\jboss-modules.jar"
  goto cmdEnd
)

set PRUNSRV=
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
  echo Using the X86-64bit version of prunsrv
  set PRUNSRV="%JBOSS_HOME%\bin\service\amd64\wildfly-service"
) else (
  echo Using the X86-32bit version of prunsrv
  set PRUNSRV="%JBOSS_HOME%\bin\service\wildfly-service"
)

if "%DEBUG%" == "1" (
    echo PRUNSRV %PRUNSRV%
)

echo(

rem defaults
set SHORTNAME=Wildfly
set DISPLAYNAME=WildFly
rem NO quotes around the description here !
set DESCRIPTION=WildFly Application Server
set CONTROLLER=localhost:9990
set DC_HOST=master
set IS_DOMAIN=false
set LOGLEVEL=INFO
set LOGPATH=
set JBOSSUSER=
set JBOSSPASS=
set SERVICE_USER=
set SERVICE_PASS=
set STARTUP_MODE=manual
set ISDEBUG=
set CONFIG=
set HOSTCONFIG=host.xml
set BASE=

set COMMAND=%1
shift
if /I "%COMMAND%" == "install"   goto cmdInstall
if /I "%COMMAND%" == "uninstall" goto cmdUninstall
if /I "%COMMAND%" == "start"     goto cmdStart
if /I "%COMMAND%" == "stop"      goto cmdStop
if /I "%COMMAND%" == "restart"   goto cmdRestart

echo ERROR: invalid command

:cmdUsage
echo WildFly Service Script for Windows
echo Usage:
echo(
echo   service install ^<options^>  , where the options are:
echo(
echo     /startup                  : Set the service to auto start
echo                                 Not specifying sets the service to manual
echo(
echo     /jbossuser ^<username^>     : JBoss username to use for the shutdown command.
echo     /jbosspass ^<password^>     : Password for /jbossuser
echo(
echo     /controller ^<host:port^>   : The host:port of the management interface.
echo                                 default: %CONTROLLER%
echo(
echo     /host [^<domainhost^>]      : Indicates that domain mode is to be used with an
echo                                 optional domain controller name.
echo                                 default: %DC_HOST%
echo                                 Not specifying /host will install JBoss in
echo                                 standalone mode.
echo(
echo Options to use when multiple services or different accounts are needed:
echo(
echo     /name ^<servicename^>       : The name of the service
echo(
echo                                 default: %SHORTNAME%
echo     /desc ^<description^>       : The description of the service, use double
echo                                 quotes to allow spaces.
echo                                 Maximum 1024 characters.
echo                                 default: %DESCRIPTION%
echo(
echo     /serviceuser ^<username^>   : Specifies the name of the account under which
echo                                 the service should run.
echo                                 Use an account name in the form of
echo                                 DomainName\UserName
echo                                 default: not used, the service runs as
echo                                 Local System Account.
echo     /servicepass ^<password^>   : password for /serviceuser
echo(
echo Advanced options:
echo(
echo     /config ^<xmlfile^>         : The server-config to use
echo                                 default: standalone.xml / domain.xml
echo     /hostconfig ^<xmlfile^>     : domain mode only, the host config to use
echo                                 default: host.xml
echo(
echo     /base ^<directory^>         : The base directory for server/domain content
echo                                 Must be specified as a fully qualified path
echo                                 default: %JBOSS_HOME%\standalone or
echo                                          %JBOSS_HOME%\domain
echo(
echo     /loglevel ^<level^>         : The log level for the service:  Error, Info,
echo                                 Warn or Debug ^(Case insensitive^)
echo                                 default: %LOGLEVEL%
echo     /logpath ^<path^>           : Path of the log
echo                                 default depends on domain or standalone mode
echo                                 /base applies when /logpath is not set.
echo                                   %JBOSS_HOME%\domain\log
echo                                   %JBOSS_HOME%\standalone\log
echo(
echo     /debug                    : run the service install in debug mode
echo(
echo Other commands:
echo(
echo   service uninstall [/name ^<servicename^>]
echo   service start [/name ^<servicename^>]
echo   service stop [/name ^<servicename^>]
echo   service restart [/name ^<servicename^>]
echo(
echo     /name  ^<servicename^>      : Name of the service: should not contain spaces
echo                                 default: %SHORTNAME%
echo(
goto endBatch

:cmdInstall

:LoopArgs
if "%~1" == "" goto doInstall

if /I "%~1"== "/debug" (
  set ISDEBUG=true
  shift
  goto LoopArgs
)
if /I "%~1"== "/startup" (
  set STARTUP_MODE=auto
  shift
  goto LoopArgs
)
if /I "%~1"== "/config" (
  set CONFIG=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set CONFIG=%~2
    )
  )
  if "!CONFIG!" == "" (
    echo ERROR: You need to specify a config name
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/hostconfig" (
  set HOSTCONFIG=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set HOSTCONFIG=%~2
    )
  )
  if "!HOSTCONFIG!" == "" (
    echo ERROR: You need to specify a host-config name
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/base" (
  set BASE=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set BASE=%~2
    )
  )
  if "!BASE!" == "" (
    echo ERROR: You need to specify a base directory name
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/controller" (
  set CONTROLLER=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set CONTROLLER=%~2
    )
  )
  if "!CONTROLLER!" == "" (
    echo ERROR: The management interface should be specified in the format host:port, example:  127.0.0.1:9999
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/name" (
  set SHORTNAME=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set SHORTNAME=%~2
      set DISPLAYNAME=%~2
    )
  )
  if "!SHORTNAME!" == "" (
    echo ERROR: You need to specify a service name
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/desc" (
  set DESCRIPTION=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set DESCRIPTION=%~2
    )
  )
  if "!DESCRIPTION!" == "" (
    echo ERROR: You need to specify a description, maximum of 1024 characters
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/jbossuser" (
  set JBOSSUSER=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set JBOSSUSER=%~2
    )
  )
  if "!JBOSSUSER!" == "" (
    echo ERROR: You need to specify a username
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/jbosspass" (
  set JBOSSPASS=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set JBOSSPASS=%~2
    )
  )
  if "!JBOSSPASS!" == "" (
    echo ERROR: You need to specify a password for /jbosspass
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/serviceuser" (
  set SERVICE_USER=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set SERVICE_USER=%~2
    )
  )
  if "!SERVICE_USER!" == "" (
    echo ERROR: You need to specify a username in the format DOMAIN\USER, or .\USER for the local domain
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/servicepass" (
  set SERVICE_PASS=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set SERVICE_PASS=%~2
    )
  )
  if "!SERVICE_PASS!" == "" (
    echo ERROR: You need to specify a password for /servicepass
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
rem the hostname is optional
if /I "%~1"== "/host" (
  set IS_DOMAIN=true
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set DC_HOST=%~2
      shift
    )
  )
  shift
  goto LoopArgs
)
if /I "%~1"== "/loglevel" (
  if /I not "%~2"=="Error" if /I not "%~2"=="Info" if /I not "%~2"=="Warn" if /I not "%~2"=="Debug" (
    echo ERROR: /loglevel must be set to Error, Info, Warn or Debug ^(Case insensitive^)
    goto endBatch
  )
  set LOGLEVEL=%~2
  shift
  shift
  goto LoopArgs
)
if /I "%~1"== "/logpath" (
  set LOGPATH=
  if not "%~2"=="" (
    set T=%~2
    if not "!T:~0,1!"=="/" (
      set LOGPATH=%~2
    )
  )
  if "!LOGPATH!" == "" (
    echo ERROR: You need to specify a path for the service log
    goto endBatch
  )
  shift
  shift
  goto LoopArgs
)
echo ERROR: Unrecognised option: %1
echo(
goto cmdUsage

:doInstall
set CREDENTIALS=
if not "%JBOSSUSER%" == "" (
  if "%JBOSSPASS%" == "" (
    echo When specifying a user, you need to specify the password
    goto endBatch
  )
  set CREDENTIALS=--user=%JBOSSUSER% --password=%JBOSSPASS%
)

set RUNAS=
if not "%SERVICE_USER%" == "" (
  if "%SERVICE_PASS%" == "" (
    echo When specifying a user, you need to specify the password
    goto endBatch
  )
  set RUNAS=--ServiceUser=%SERVICE_USER% --ServicePassword=%SERVICE_PASS%
)

if "%STDOUT%"=="" set STDOUT=auto
if "%STDERR%"=="" set STDERR=auto

if "%START_PATH%"=="" set START_PATH="%JBOSS_HOME%\bin"
if "%STOP_PATH%"=="" set STOP_PATH="%JBOSS_HOME%\bin"

if "%STOP_SCRIPT%"=="" set STOP_SCRIPT=jboss-cli.bat

if /I "%IS_DOMAIN%" == "true" (
  if "%BASE%"=="" set BASE="%JBOSS_HOME%\domain"
  if "%CONFIG%"=="" set CONFIG=domain.xml
  if "%START_SCRIPT%"=="" set START_SCRIPT=domain.bat
  set STARTPARAM="/c#set#NOPAUSE=Y#&&#!START_SCRIPT!#-Djboss.domain.base.dir=!BASE!#--domain-config=!CONFIG!#--host-config=!HOSTCONFIG!"
  set STOPPARAM="/c %STOP_SCRIPT% --controller=%CONTROLLER% --connect %CREDENTIALS% --command=/host=!DC_HOST!:shutdown"
) else (
  if "%BASE%"=="" set "BASE=%JBOSS_HOME%\standalone"
  if "%CONFIG%"=="" set CONFIG=standalone.xml
  if "%START_SCRIPT%"=="" set START_SCRIPT=standalone.bat
  set STARTPARAM="/c#set#NOPAUSE=Y#&&#!START_SCRIPT!#-Djboss.server.base.dir=!BASE!#--server-config=!CONFIG!"
  set STOPPARAM="/c !STOP_SCRIPT! --controller=%CONTROLLER% --connect %CREDENTIALS% --command=:shutdown"
)

if "%LOGPATH%"=="" set LOGPATH="!BASE!\log"

if not exist "%BASE%" (
  echo The base directory does not exist: "%BASE%"
  goto endBatch
)

if not exist "%BASE%\configuration\%CONFIG%" (
  echo The configuration does not exist: "%BASE%\configuration\%CONFIG%"
  goto endBatch
)

if /I "%ISDEBUG%" == "true" (
  echo JBOSS_HOME="%JBOSS_HOME%"
  echo RUNAS=%RUNAS%
  echo SHORTNAME="%SHORTNAME%"
  echo DESCRIPTION="%DESCRIPTION%"
  echo STARTPARAM=%STARTPARAM%
  echo STOPPARAM=%STOPPARAM%
  echo LOGLEVEL=%LOGLEVEL%
  echo LOGPATH=%LOGPATH%
  echo CREDENTIALS=%CREDENTIALS%
  echo BASE="%BASE%"
  echo CONFIG="%CONFIG%"
  echo START_SCRIPT=%START_SCRIPT%
  echo START_PATH=%START_PATH%
  echo STOP_SCRIPT=%STOP_SCRIPT%
  echo STOP_PATH=%STOP_PATH%
  echo STDOUT="%STDOUT%"
  echo STDERR="%STDERR%"
)
if /I "%ISDEBUG%" == "true" (
  @echo on
)

@rem quotes around the "%DESCRIPTION%" but nowhere else
echo %PRUNSRV% install %SHORTNAME% %RUNAS% --DisplayName=%DISPLAYNAME% --Description="%DESCRIPTION%" --LogLevel=%LOGLEVEL% --LogPath=%LOGPATH% --LogPrefix=service --StdOutput=%STDOUT% --StdError=%STDERR% --StartMode=exe --Startup=%STARTUP_MODE% --StartImage=cmd.exe --StartPath=%START_PATH% ++StartParams=%STARTPARAM% --StopMode=exe --StopImage=cmd.exe --StopPath=%STOP_PATH%  ++StopParams=%STOPPARAM%

%PRUNSRV% install %SHORTNAME% %RUNAS% --DisplayName=%DISPLAYNAME% --Description="%DESCRIPTION%" --LogLevel=%LOGLEVEL% --LogPath=%LOGPATH% --LogPrefix=service --StdOutput=%STDOUT% --StdError=%STDERR% --StartMode=exe --Startup=%STARTUP_MODE% --StartImage=cmd.exe --StartPath=%START_PATH% ++StartParams=%STARTPARAM% --StopMode=exe --StopImage=cmd.exe --StopPath=%STOP_PATH%  ++StopParams=%STOPPARAM%
@rem %PRUNSRV% install "%SHORTNAME%" "%RUNAS%" --DisplayName="%DISPLAYNAME%" --Description="%DESCRIPTION%" --LogLevel="%LOGLEVEL%" --LogPath="%LOGPATH%" --LogPrefix=service --StdOutput="%STDOUT%" --StdError="%STDERR%" --StartMode=exe --Startup="%STARTUP_MODE%" --StartImage=cmd.exe --StartPath="%START_PATH%" ++StartParams="%STARTPARAM%" --StopMode=exe --StopImage=cmd.exe --StopPath="%STOP_PATH%"  ++StopParams="%STOPPARAM%"

@if /I "%ISDEBUG%" == "true" (
  @echo off
)

if errorlevel 8 (
  echo ERROR: The service %SHORTNAME% already exists
  goto endBatch
)
if errorlevel 0 (
  echo Service %SHORTNAME% installed
  goto endBatch
)
goto cmdEnd


REM the other commands take a /name parameter - if there is no ^<servicename^> passed as second parameter,
REM we silently ignore this and use the default SHORTNAME

:cmdUninstall
if /I "%~1"=="/name" (
  if not "%~2"=="" (
    set SHORTNAME="%~2"
  )
)
%PRUNSRV% stop %SHORTNAME%
if errorlevel 0 (
  %PRUNSRV% delete %SHORTNAME%
  if errorlevel 0 (
    echo Service %SHORTNAME% uninstalled
  )
) else (
  echo Unable to stop the service %SHORTNAME%
)
goto cmdEnd

:cmdStart
if /I "%~1"=="/name" (
  if not "%~2"=="" (
    set SHORTNAME="%~2"
  )
)
%PRUNSRV% start %SHORTNAME%
echo Service %SHORTNAME% starting...
goto cmdEnd

:cmdStop
if /I "%~1"=="/name" (
  if not "%~2"=="" (
    set SHORTNAME="%~2"
  )
)
%PRUNSRV% stop %SHORTNAME%
echo Service %SHORTNAME% stopping...
goto cmdEnd

:cmdRestart
if /I "%~1"=="/name" (
  if not "%~2"=="" (
    set SHORTNAME="%~2"
  )
)
%PRUNSRV% stop %SHORTNAME%
echo Service %SHORTNAME% stopping...
if "%errorlevel%" == "0" (
  %PRUNSRV% start %SHORTNAME%
  echo Service %SHORTNAME% starting...
) else (
  echo Unable to stop the service %SHORTNAME%
)
goto cmdEnd


:cmdEnd
REM if there is a need to add other error messages, make sure to list higher numbers first !
if errorlevel 2 (
  echo ERROR: Failed to load service %SHORTNAME% configuration
  goto endBatch
)
if errorlevel 0 (
  goto endBatch
)
echo "Unforseen error=%errorlevel%"

rem nothing below, exit
:endBatch
PHVsPg0KPGxpPkNvcHkgZG9jc1xjb250cmliXHNjcmlwdHNcc2VydmljZSBkaXJlY3Rvcnkg dG8gYmluPC9saT4NCjxsaT5SdW4gY21kIGFzIGFuIGFkbWluc2l0cmF0b3IgYW5kIGdvIHRv IGJpblxzY3JpcHRzPC9saT4NCjxsaT5SdW4gPGNvZGU+c2VydmljZS5iYXQgaW5zdGFsbCAv c3RhcnR1cDwvY29kZT48L2xpPg0KPGxpPlN0YXJ0IHRoZSBzZXJ2aWNlPC9saT4NCjwvdWw+ DQoNCjxwPkJlZm9yZSBydW5uaW5nIHRoZSBzZXJ2aWNlLmJhdCByZXBsYWNlIGl0cyBjb250 ZW50cyB3aXRoIHRoZSBmb2xsb3dpbmcgKG9yIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lv biBmcm9tIGdpdEh1YiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vd2lsZGZseS93aWxk Zmx5LWNvcmUvYmxvYi9tYXN0ZXIvY29yZS1mZWF0dXJlLXBhY2svc3JjL21haW4vcmVzb3Vy Y2VzL2NvbnRlbnQvZG9jcy9jb250cmliL3NjcmlwdHMvc2VydmljZS9zZXJ2aWNlLmJhdCI+ aHR0cHM6Ly9naXRodWIuY29tL3dpbGRmbHkvd2lsZGZseS1jb3JlL2Jsb2IvbWFzdGVyL2Nv cmUtZmVhdHVyZS1wYWNrL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZW50L2RvY3MvY29udHJp Yi9zY3JpcHRzL3NlcnZpY2Uvc2VydmljZS5iYXQ8L2E+KS4NClRoZSBwcm9ibGVtIHdpdGgg MTAuMSByZWxlYXNlIGlzIHRoYXQgaW5zdGVhZCBvZjwvcD4NCg0KPHA+PGNvZGU+c2V0IERF U0NSSVBUSU9OPVdpbGRGbHkgQXBwbGljYXRpb24gU2VydmVyPC9jb2RlPjwvcD4NCg0KPHA+ d2UgaGF2ZTwvcD4NCg0KPHA+PGNvZGU+c2V0IERFU0NSSVBUSU9OPSZxdW90O1dpbGRGbHkg QXBwbGljYXRpb24gU2VydmVyJnF1b3Q7PC9jb2RlPiB3aGljaCBsZWFkcyB0byBkb3VibGUg cXVvdGluZyBpbiBwcnVuc3J2IHBhcmFtZXRlcnM8L3A+DQoNCjxwcmU+PGNvZGU+QGVjaG8g b2ZmDQpSRU0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUkVNICBXaWxkRmx5IFNlcnZpY2UgU2Ny aXB0IGZvciBXaW5kb3dzDQpSRU0gICAgSXQgaGFzIHRvIHJlc2lkZSBpbiAlSkJPU1NfSE9N RSVcYmluDQpSRU0gICAgSXQgaXMgZXhwZWN0aW5nIHRoYXQgcHJ1bnNydi5leGUgcmVzaWRl IGluOg0KUkVNICAgICAgJUpCT1NTX0hPTUUlXGJpblxzZXJ2aWNlXA0KUkVNIEVhc2llc3Qg d2F5IHRvIG1ha2UgaXQgd29yayBpcyB0byBjb3B5IHdob2xlICZxdW90O3NlcnZpY2UmcXVv dDsgZGlyZWN0b3J5IHRvICVKQk9TU19IT01FJVxiaW4NClJFTQ0KUkVNICB2OSAyMDE2LTAy LTE2IGN1c3RvbWl6ZSBmb3IgV2lsZEZseSwgZml4IHdvcmtpbmcgb24gcGF0aHMgd2l0aCBz cGFjZXMgKFRvbWF6IENlcmFyKQ0KUkVNICB2OCAyMDE2LTAxLTIwIGN1c3RvbWl6ZSBmb3Ig RUFQIDcgKFBldHIgU2FrYXIpDQpSRU0gIHY3IDIwMTQtMDctMDkgYWRkZWQgL2xvZ3BhdGgg L3N0YXJ0dXAgL2NvbmZpZyAvaG9zdGNvbmZpZyAvYmFzZSAvZGVidWcNClJFTSAgICAgICAg ICAgICAgICAgICAgICBzaW1wbGlmaWVkL2NvcnJlY3RlZCB1c2Ugb2YgcXVvdGVzDQpSRU0N ClJFTSAgdjYgd2FzIHNoaXBwZWQgd2l0aCBFQVAgNi4yLjAgYW5kIHN1cHBvcnRzIGFsbCBw cmV2aW91cyB2ZXJzaW9ucyBvZiA2LnggYXMgd2VsbC4NClJFTSAgdjYgMjAxMy0wOC0yMSBh ZGRlZCAvbmFtZSAvZGVzYw0KUkVNICAgICAgICAgICAgICAgIGFkZGVkIC9zZXJ2aWNldXNl ciAvc2VydmljZXBhc3MNClJFTSAgICAgICAgICAgICAgICBleHRlbmRlZCBkaXJlY3Rvcnkg Y2hlY2tpbmcgZm9yIHZlcnNpb25zIGFuZCBsb2NhdGlvbnMNClJFTSAgICAgICAgICAgICAg ICBleHRlbmRlZCBjaGVja2luZyBvbiBvcHRpb24gdXNhZ2UNClJFTSAgdjUgMjAxMy0wNi0x MCBhZGFwdGVkIGZvciBFQVAgNi4xLjANClJFTSAgdjQgMjAxMi0xMC0wMyBTbWFsbCBjaGFu Z2VzIHRvIHByb3Blcmx5IGhhbmRsZXMgc3BhY2VzIGluIExvZ1BhdGgsIFN0YXJ0UGF0aCwN ClJFTSAgICAgICAgICAgICAgICBhbmQgU3RvcFBhdGggKEdlb3JnZSBSeXB5c2MpDQpSRU0g IHYzIDIwMTItMDktMTQgZml4ZWQgc2VydmljZSBsb2cgcGF0aA0KUkVNICAgICAgICAgICAg ICAgIGNtZCBsaW5lIG9wdGlvbnMgZm9yIGNvbnRyb2xsZXIsZG9tYWluIGhvc3QsIGxvZ2xl dmVsLA0KUkVNICAgICAgICB1c2VybmFtZSxwYXNzd29yZA0KUkVNICB2MiAyMDEyLTA5LTA1 IE5PUEFVU0Ugc3VwcG9ydA0KUkVNICB2MSAyMDEyLTA4LTIwIGluaXRpYWwgZWRpdA0KUkVN DQpSRU0gQXV0aG9yOiBUb20gRm9udGV5bmUgKHVubGVzcyBub3RlZCBhYm92ZSkNClJFTSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0Kc2V0bG9jYWwgRW5hYmxlRXh0ZW5zaW9ucyBFbmFibGVEZWxheWVkRXhwYW5zaW9uDQoN CnNldCBERUJVRz0wDQppZiAmcXVvdDslREVCVUclJnF1b3Q7ID09ICZxdW90OzEmcXVvdDsg KA0KICAgIGVjaG8gJnF1b3Q7RGVidWcgaW5mbyBlbmFibGVkJnF1b3Q7DQogICAgZWNobyBv bg0KKQ0KDQpzZXQgJnF1b3Q7RElSTkFNRT0lfmRwMCUmcXVvdDsNCmlmICZxdW90OyVERUJV RyUmcXVvdDsgPT0gJnF1b3Q7MSZxdW90OyAoDQogICAgZWNobyBESVJOQU1FICZxdW90OyVE SVJOQU1FJXgmcXVvdDsNCikNCg0KaWYgZXhpc3QgJnF1b3Q7JURJUk5BTUUlLi5camJvc3Mt bW9kdWxlcy5qYXImcXVvdDsgKA0KICBSRU0gd2UgYXJlIGluIEpCT1NTX0hPTUUvYmluDQog IHNldCAmcXVvdDtXRT0lRElSTkFNRSUuLlwmcXVvdDsNCiAgZ290byA6V0VfRk9VTkQNCikg ZWxzZSBpZiBleGlzdCAmcXVvdDslRElSTkFNRSUuLlwuLlxqYm9zcy1tb2R1bGVzLmphciZx dW90OyAoDQogIFJFTSB3ZSBhcmUgaW4gYmluXHNlcnZpY2UgaW4gYSBXaWxkRmx5IGluc3Rh bGxhdGlvbg0KICBzZXQgJnF1b3Q7V0U9JURJUk5BTUUlLi5cLi5cJnF1b3Q7DQogIGdvdG8g OldFX0ZPVU5EDQopIGVsc2UgaWYgZXhpc3QgJnF1b3Q7JURJUk5BTUUlLi5cLi5cLi5camJv c3MtbW9kdWxlcy5qYXImcXVvdDsgKA0KICBSRU0gd2UgYXJlIGluIHNiaW4gaW4gYSA2LjAu eCBpbnN0YWxsYXRpb24NCiAgc2V0ICZxdW90O1dFPSVESVJOQU1FJS4uXC4uXC4uXCZxdW90 Ow0KICBnb3RvIDpXRV9GT1VORA0KKSBlbHNlICgNCiAgUkVNIHdlIHNob3VsZCBiZSBpbiBz YmluIGluIDYuMSBhbmQgdXANCiAgc2V0ICZxdW90O1dFPSVESVJOQU1FJS4uXC4uXC4uXC4u XC4uXC4uXCZxdW90Ow0KKQ0KDQppZiAmcXVvdDslREVCVUclJnF1b3Q7ID09ICZxdW90OzEm cXVvdDsgKA0KICAgIGVjaG8gV0Ugd2FzIG5vdCBmb3VuZCwgdXNpbmcgJnF1b3Q7JVdFJSZx dW90Ow0KKQ0KDQo6V0VfRk9VTkQNCmlmICZxdW90OyVERUJVRyUmcXVvdDsgPT0gJnF1b3Q7 MSZxdW90OyAoDQogICAgZWNobyBXRSAmcXVvdDslV0UlJnF1b3Q7DQopDQpwdXNoZCAmcXVv dDslV0UlJnF1b3Q7DQpzZXQgJnF1b3Q7UkVTT0xWRURfSkJPU1NfSE9NRT0lQ0QlJnF1b3Q7 DQpwb3BkDQpzZXQgV0U9DQpzZXQgRElSTkFNRT0NCmlmICZxdW90O3glSkJPU1NfSE9NRSUm cXVvdDsgPT0gJnF1b3Q7eCZxdW90OyAoDQogIHNldCAmcXVvdDtKQk9TU19IT01FPSVSRVNP TFZFRF9KQk9TU19IT01FJSZxdW90Ow0KKQ0KDQpwdXNoZCAmcXVvdDslSkJPU1NfSE9NRSUm cXVvdDsNCnNldCAmcXVvdDtTQU5JVElaRURfSkJPU1NfSE9NRT0lQ0QlJnF1b3Q7DQpwb3Bk DQoNCmlmICZxdW90OyVERUJVRyUmcXVvdDsgPT0gJnF1b3Q7MSZxdW90OyAoDQogICAgZWNo byBTQU5JVElaRURfSkJPU1NfSE9NRT0mcXVvdDslU0FOSVRJWkVEX0pCT1NTX0hPTUUlJnF1 b3Q7DQogICAgZWNobyBSRVNPTFZFRF9KQk9TU19IT01FPSZxdW90OyVSRVNPTFZFRF9KQk9T U19IT01FJSZxdW90Ow0KICAgIGVjaG8gSkJPU1NfSE9NRT0mcXVvdDslSkJPU1NfSE9NRSUm cXVvdDsNCikNCg0KaWYgbm90ICZxdW90OyVSRVNPTFZFRF9KQk9TU19IT01FJXgmcXVvdDsg PT0gJnF1b3Q7JVNBTklUSVpFRF9KQk9TU19IT01FJXgmcXVvdDsgKA0KICAgIGVjaG8gV0FS TklORyBKQk9TU19IT01FIG1heSBiZSBwb2ludGluZyB0byBhIGRpZmZlcmVudCBpbnN0YWxs YXRpb24gLSB1bnByZWRpY3RhYmxlIHJlc3VsdHMgbWF5IG9jY3VyLg0KICAgIGdvdG8gY21k RW5kDQopDQoNCnJlbSBGaW5kIGpib3NzLW1vZHVsZXMuamFyIHRvIGNoZWNrIEpCT1NTX0hP TUUNCmlmIG5vdCBleGlzdCAmcXVvdDslSkJPU1NfSE9NRSVcamJvc3MtbW9kdWxlcy5qYXIm cXVvdDsgKA0KICBlY2hvIENvdWxkIG5vdCBsb2NhdGUgJnF1b3Q7JUpCT1NTX0hPTUUlXGpi b3NzLW1vZHVsZXMuamFyJnF1b3Q7DQogIGdvdG8gY21kRW5kDQopDQoNCnNldCBQUlVOU1JW PQ0KaWYgJnF1b3Q7JVBST0NFU1NPUl9BUkNISVRFQ1RVUkUlJnF1b3Q7PT0mcXVvdDtBTUQ2 NCZxdW90OyAoDQogIGVjaG8gVXNpbmcgdGhlIFg4Ni02NGJpdCB2ZXJzaW9uIG9mIHBydW5z cnYNCiAgc2V0IFBSVU5TUlY9JnF1b3Q7JUpCT1NTX0hPTUUlXGJpblxzZXJ2aWNlXGFtZDY0 XHdpbGRmbHktc2VydmljZSZxdW90Ow0KKSBlbHNlICgNCiAgZWNobyBVc2luZyB0aGUgWDg2 LTMyYml0IHZlcnNpb24gb2YgcHJ1bnNydg0KICBzZXQgUFJVTlNSVj0mcXVvdDslSkJPU1Nf SE9NRSVcYmluXHNlcnZpY2Vcd2lsZGZseS1zZXJ2aWNlJnF1b3Q7DQopDQoNCmlmICZxdW90 OyVERUJVRyUmcXVvdDsgPT0gJnF1b3Q7MSZxdW90OyAoDQogICAgZWNobyBQUlVOU1JWICVQ UlVOU1JWJQ0KKQ0KDQplY2hvKA0KDQpyZW0gZGVmYXVsdHMNCnNldCBTSE9SVE5BTUU9V2ls ZGZseQ0Kc2V0IERJU1BMQVlOQU1FPVdpbGRGbHkNCnJlbSBOTyBxdW90ZXMgYXJvdW5kIHRo ZSBkZXNjcmlwdGlvbiBoZXJlICENCnNldCBERVNDUklQVElPTj1XaWxkRmx5IEFwcGxpY2F0 aW9uIFNlcnZlcg0Kc2V0IENPTlRST0xMRVI9bG9jYWxob3N0Ojk5OTANCnNldCBEQ19IT1NU PW1hc3Rlcg0Kc2V0IElTX0RPTUFJTj1mYWxzZQ0Kc2V0IExPR0xFVkVMPUlORk8NCnNldCBM T0dQQVRIPQ0Kc2V0IEpCT1NTVVNFUj0NCnNldCBKQk9TU1BBU1M9DQpzZXQgU0VSVklDRV9V U0VSPQ0Kc2V0IFNFUlZJQ0VfUEFTUz0NCnNldCBTVEFSVFVQX01PREU9bWFudWFsDQpzZXQg SVNERUJVRz0NCnNldCBDT05GSUc9DQpzZXQgSE9TVENPTkZJRz1ob3N0LnhtbA0Kc2V0IEJB U0U9DQoNCnNldCBDT01NQU5EPSUxDQpzaGlmdA0KaWYgL0kgJnF1b3Q7JUNPTU1BTkQlJnF1 b3Q7ID09ICZxdW90O2luc3RhbGwmcXVvdDsgICBnb3RvIGNtZEluc3RhbGwNCmlmIC9JICZx dW90OyVDT01NQU5EJSZxdW90OyA9PSAmcXVvdDt1bmluc3RhbGwmcXVvdDsgZ290byBjbWRV bmluc3RhbGwNCmlmIC9JICZxdW90OyVDT01NQU5EJSZxdW90OyA9PSAmcXVvdDtzdGFydCZx dW90OyAgICAgZ290byBjbWRTdGFydA0KaWYgL0kgJnF1b3Q7JUNPTU1BTkQlJnF1b3Q7ID09 ICZxdW90O3N0b3AmcXVvdDsgICAgICBnb3RvIGNtZFN0b3ANCmlmIC9JICZxdW90OyVDT01N QU5EJSZxdW90OyA9PSAmcXVvdDtyZXN0YXJ0JnF1b3Q7ICAgZ290byBjbWRSZXN0YXJ0DQoN CmVjaG8gRVJST1I6IGludmFsaWQgY29tbWFuZA0KDQo6Y21kVXNhZ2UNCmVjaG8gV2lsZEZs eSBTZXJ2aWNlIFNjcmlwdCBmb3IgV2luZG93cw0KZWNobyBVc2FnZToNCmVjaG8oDQplY2hv ICAgc2VydmljZSBpbnN0YWxsIF4mbHQ7b3B0aW9uc14mZ3Q7ICAsIHdoZXJlIHRoZSBvcHRp b25zIGFyZToNCmVjaG8oDQplY2hvICAgICAvc3RhcnR1cCAgICAgICAgICAgICAgICAgIDog U2V0IHRoZSBzZXJ2aWNlIHRvIGF1dG8gc3RhcnQNCmVjaG8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOb3Qgc3BlY2lmeWluZyBzZXRzIHRoZSBzZXJ2aWNlIHRvIG1hbnVh bA0KZWNobygNCmVjaG8gICAgIC9qYm9zc3VzZXIgXiZsdDt1c2VybmFtZV4mZ3Q7ICAgICA6 IEpCb3NzIHVzZXJuYW1lIHRvIHVzZSBmb3IgdGhlIHNodXRkb3duIGNvbW1hbmQuDQplY2hv ICAgICAvamJvc3NwYXNzIF4mbHQ7cGFzc3dvcmReJmd0OyAgICAgOiBQYXNzd29yZCBmb3Ig L2pib3NzdXNlcg0KZWNobygNCmVjaG8gICAgIC9jb250cm9sbGVyIF4mbHQ7aG9zdDpwb3J0 XiZndDsgICA6IFRoZSBob3N0OnBvcnQgb2YgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlLg0K ZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICVDT05UUk9M TEVSJQ0KZWNobygNCmVjaG8gICAgIC9ob3N0IFteJmx0O2RvbWFpbmhvc3ReJmd0O10gICAg ICA6IEluZGljYXRlcyB0aGF0IGRvbWFpbiBtb2RlIGlzIHRvIGJlIHVzZWQgd2l0aCBhbg0K ZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGRvbWFpbiBj b250cm9sbGVyIG5hbWUuDQplY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVmYXVsdDogJURDX0hPU1QlDQplY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTm90IHNwZWNpZnlpbmcgL2hvc3Qgd2lsbCBpbnN0YWxsIEpCb3NzIGluDQplY2hvICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhbG9uZSBtb2RlLg0KZWNobygN CmVjaG8gT3B0aW9ucyB0byB1c2Ugd2hlbiBtdWx0aXBsZSBzZXJ2aWNlcyBvciBkaWZmZXJl bnQgYWNjb3VudHMgYXJlIG5lZWRlZDoNCmVjaG8oDQplY2hvICAgICAvbmFtZSBeJmx0O3Nl cnZpY2VuYW1lXiZndDsgICAgICAgOiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZQ0KZWNobygN CmVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAlU0hPUlRO QU1FJQ0KZWNobyAgICAgL2Rlc2MgXiZsdDtkZXNjcmlwdGlvbl4mZ3Q7ICAgICAgIDogVGhl IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLCB1c2UgZG91YmxlDQplY2hvICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzIHRvIGFsbG93IHNwYWNlcy4NCmVjaG8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIDEwMjQgY2hhcmFjdGVy cy4NCmVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAlREVT Q1JJUFRJT04lDQplY2hvKA0KZWNobyAgICAgL3NlcnZpY2V1c2VyIF4mbHQ7dXNlcm5hbWVe Jmd0OyAgIDogU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhY2NvdW50IHVuZGVyIHdoaWNo DQplY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2Ugc2hv dWxkIHJ1bi4NCmVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgYW4g YWNjb3VudCBuYW1lIGluIHRoZSBmb3JtIG9mDQplY2hvICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRG9tYWluTmFtZVxVc2VyTmFtZQ0KZWNobyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG5vdCB1c2VkLCB0aGUgc2VydmljZSBydW5zIGFz DQplY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWwgU3lzdGVtIEFj Y291bnQuDQplY2hvICAgICAvc2VydmljZXBhc3MgXiZsdDtwYXNzd29yZF4mZ3Q7ICAgOiBw YXNzd29yZCBmb3IgL3NlcnZpY2V1c2VyDQplY2hvKA0KZWNobyBBZHZhbmNlZCBvcHRpb25z Og0KZWNobygNCmVjaG8gICAgIC9jb25maWcgXiZsdDt4bWxmaWxlXiZndDsgICAgICAgICA6 IFRoZSBzZXJ2ZXItY29uZmlnIHRvIHVzZQ0KZWNobyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQ6IHN0YW5kYWxvbmUueG1sIC8gZG9tYWluLnhtbA0KZWNobyAg ICAgL2hvc3Rjb25maWcgXiZsdDt4bWxmaWxlXiZndDsgICAgIDogZG9tYWluIG1vZGUgb25s eSwgdGhlIGhvc3QgY29uZmlnIHRvIHVzZQ0KZWNobyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQ6IGhvc3QueG1sDQplY2hvKA0KZWNobyAgICAgL2Jhc2UgXiZs dDtkaXJlY3RvcnleJmd0OyAgICAgICAgIDogVGhlIGJhc2UgZGlyZWN0b3J5IGZvciBzZXJ2 ZXIvZG9tYWluIGNvbnRlbnQNCmVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNdXN0IGJlIHNwZWNpZmllZCBhcyBhIGZ1bGx5IHF1YWxpZmllZCBwYXRoDQplY2hvICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogJUpCT1NTX0hPTUUlXHN0 YW5kYWxvbmUgb3INCmVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAlSkJPU1NfSE9NRSVcZG9tYWluDQplY2hvKA0KZWNobyAgICAgL2xvZ2xldmVsIF4m bHQ7bGV2ZWxeJmd0OyAgICAgICAgIDogVGhlIGxvZyBsZXZlbCBmb3IgdGhlIHNlcnZpY2U6 ICBFcnJvciwgSW5mbywNCmVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX YXJuIG9yIERlYnVnIF4oQ2FzZSBpbnNlbnNpdGl2ZV4pDQplY2hvICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogJUxPR0xFVkVMJQ0KZWNobyAgICAgL2xvZ3Bh dGggXiZsdDtwYXRoXiZndDsgICAgICAgICAgIDogUGF0aCBvZiB0aGUgbG9nDQplY2hvICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBkZXBlbmRzIG9uIGRvbWFp biBvciBzdGFuZGFsb25lIG1vZGUNCmVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvYmFzZSBhcHBsaWVzIHdoZW4gL2xvZ3BhdGggaXMgbm90IHNldC4NCmVjaG8gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVKQk9TU19IT01FJVxkb21haW5cbG9n DQplY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlSkJPU1NfSE9NRSVc c3RhbmRhbG9uZVxsb2cNCmVjaG8oDQplY2hvICAgICAvZGVidWcgICAgICAgICAgICAgICAg ICAgIDogcnVuIHRoZSBzZXJ2aWNlIGluc3RhbGwgaW4gZGVidWcgbW9kZQ0KZWNobygNCmVj aG8gT3RoZXIgY29tbWFuZHM6DQplY2hvKA0KZWNobyAgIHNlcnZpY2UgdW5pbnN0YWxsIFsv bmFtZSBeJmx0O3NlcnZpY2VuYW1lXiZndDtdDQplY2hvICAgc2VydmljZSBzdGFydCBbL25h bWUgXiZsdDtzZXJ2aWNlbmFtZV4mZ3Q7XQ0KZWNobyAgIHNlcnZpY2Ugc3RvcCBbL25hbWUg XiZsdDtzZXJ2aWNlbmFtZV4mZ3Q7XQ0KZWNobyAgIHNlcnZpY2UgcmVzdGFydCBbL25hbWUg XiZsdDtzZXJ2aWNlbmFtZV4mZ3Q7XQ0KZWNobygNCmVjaG8gICAgIC9uYW1lICBeJmx0O3Nl cnZpY2VuYW1lXiZndDsgICAgICA6IE5hbWUgb2YgdGhlIHNlcnZpY2U6IHNob3VsZCBub3Qg Y29udGFpbiBzcGFjZXMNCmVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWZhdWx0OiAlU0hPUlROQU1FJQ0KZWNobygNCmdvdG8gZW5kQmF0Y2gNCg0KOmNtZEluc3Rh bGwNCg0KOkxvb3BBcmdzDQppZiAmcXVvdDslfjEmcXVvdDsgPT0gJnF1b3Q7JnF1b3Q7IGdv dG8gZG9JbnN0YWxsDQoNCmlmIC9JICZxdW90OyV+MSZxdW90Oz09ICZxdW90Oy9kZWJ1ZyZx dW90OyAoDQogIHNldCBJU0RFQlVHPXRydWUNCiAgc2hpZnQNCiAgZ290byBMb29wQXJncw0K KQ0KaWYgL0kgJnF1b3Q7JX4xJnF1b3Q7PT0gJnF1b3Q7L3N0YXJ0dXAmcXVvdDsgKA0KICBz ZXQgU1RBUlRVUF9NT0RFPWF1dG8NCiAgc2hpZnQNCiAgZ290byBMb29wQXJncw0KKQ0KaWYg L0kgJnF1b3Q7JX4xJnF1b3Q7PT0gJnF1b3Q7L2NvbmZpZyZxdW90OyAoDQogIHNldCBDT05G SUc9DQogIGlmIG5vdCAmcXVvdDslfjImcXVvdDs9PSZxdW90OyZxdW90OyAoDQogICAgc2V0 IFQ9JX4yDQogICAgaWYgbm90ICZxdW90OyFUOn4wLDEhJnF1b3Q7PT0mcXVvdDsvJnF1b3Q7 ICgNCiAgICAgIHNldCBDT05GSUc9JX4yDQogICAgKQ0KICApDQogIGlmICZxdW90OyFDT05G SUchJnF1b3Q7ID09ICZxdW90OyZxdW90OyAoDQogICAgZWNobyBFUlJPUjogWW91IG5lZWQg dG8gc3BlY2lmeSBhIGNvbmZpZyBuYW1lDQogICAgZ290byBlbmRCYXRjaA0KICApDQogIHNo aWZ0DQogIHNoaWZ0DQogIGdvdG8gTG9vcEFyZ3MNCikNCmlmIC9JICZxdW90OyV+MSZxdW90 Oz09ICZxdW90Oy9ob3N0Y29uZmlnJnF1b3Q7ICgNCiAgc2V0IEhPU1RDT05GSUc9DQogIGlm IG5vdCAmcXVvdDslfjImcXVvdDs9PSZxdW90OyZxdW90OyAoDQogICAgc2V0IFQ9JX4yDQog ICAgaWYgbm90ICZxdW90OyFUOn4wLDEhJnF1b3Q7PT0mcXVvdDsvJnF1b3Q7ICgNCiAgICAg IHNldCBIT1NUQ09ORklHPSV+Mg0KICAgICkNCiAgKQ0KICBpZiAmcXVvdDshSE9TVENPTkZJ RyEmcXVvdDsgPT0gJnF1b3Q7JnF1b3Q7ICgNCiAgICBlY2hvIEVSUk9SOiBZb3UgbmVlZCB0 byBzcGVjaWZ5IGEgaG9zdC1jb25maWcgbmFtZQ0KICAgIGdvdG8gZW5kQmF0Y2gNCiAgKQ0K ICBzaGlmdA0KICBzaGlmdA0KICBnb3RvIExvb3BBcmdzDQopDQppZiAvSSAmcXVvdDslfjEm cXVvdDs9PSAmcXVvdDsvYmFzZSZxdW90OyAoDQogIHNldCBCQVNFPQ0KICBpZiBub3QgJnF1 b3Q7JX4yJnF1b3Q7PT0mcXVvdDsmcXVvdDsgKA0KICAgIHNldCBUPSV+Mg0KICAgIGlmIG5v dCAmcXVvdDshVDp+MCwxISZxdW90Oz09JnF1b3Q7LyZxdW90OyAoDQogICAgICBzZXQgQkFT RT0lfjINCiAgICApDQogICkNCiAgaWYgJnF1b3Q7IUJBU0UhJnF1b3Q7ID09ICZxdW90OyZx dW90OyAoDQogICAgZWNobyBFUlJPUjogWW91IG5lZWQgdG8gc3BlY2lmeSBhIGJhc2UgZGly ZWN0b3J5IG5hbWUNCiAgICBnb3RvIGVuZEJhdGNoDQogICkNCiAgc2hpZnQNCiAgc2hpZnQN CiAgZ290byBMb29wQXJncw0KKQ0KaWYgL0kgJnF1b3Q7JX4xJnF1b3Q7PT0gJnF1b3Q7L2Nv bnRyb2xsZXImcXVvdDsgKA0KICBzZXQgQ09OVFJPTExFUj0NCiAgaWYgbm90ICZxdW90OyV+ MiZxdW90Oz09JnF1b3Q7JnF1b3Q7ICgNCiAgICBzZXQgVD0lfjINCiAgICBpZiBub3QgJnF1 b3Q7IVQ6fjAsMSEmcXVvdDs9PSZxdW90Oy8mcXVvdDsgKA0KICAgICAgc2V0IENPTlRST0xM RVI9JX4yDQogICAgKQ0KICApDQogIGlmICZxdW90OyFDT05UUk9MTEVSISZxdW90OyA9PSAm cXVvdDsmcXVvdDsgKA0KICAgIGVjaG8gRVJST1I6IFRoZSBtYW5hZ2VtZW50IGludGVyZmFj ZSBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtYXQgaG9zdDpwb3J0LCBleGFtcGxl OiAgMTI3LjAuMC4xOjk5OTkNCiAgICBnb3RvIGVuZEJhdGNoDQogICkNCiAgc2hpZnQNCiAg c2hpZnQNCiAgZ290byBMb29wQXJncw0KKQ0KaWYgL0kgJnF1b3Q7JX4xJnF1b3Q7PT0gJnF1 b3Q7L25hbWUmcXVvdDsgKA0KICBzZXQgU0hPUlROQU1FPQ0KICBpZiBub3QgJnF1b3Q7JX4y JnF1b3Q7PT0mcXVvdDsmcXVvdDsgKA0KICAgIHNldCBUPSV+Mg0KICAgIGlmIG5vdCAmcXVv dDshVDp+MCwxISZxdW90Oz09JnF1b3Q7LyZxdW90OyAoDQogICAgICBzZXQgU0hPUlROQU1F PSV+Mg0KICAgICAgc2V0IERJU1BMQVlOQU1FPSV+Mg0KICAgICkNCiAgKQ0KICBpZiAmcXVv dDshU0hPUlROQU1FISZxdW90OyA9PSAmcXVvdDsmcXVvdDsgKA0KICAgIGVjaG8gRVJST1I6 IFlvdSBuZWVkIHRvIHNwZWNpZnkgYSBzZXJ2aWNlIG5hbWUNCiAgICBnb3RvIGVuZEJhdGNo DQogICkNCiAgc2hpZnQNCiAgc2hpZnQNCiAgZ290byBMb29wQXJncw0KKQ0KaWYgL0kgJnF1 b3Q7JX4xJnF1b3Q7PT0gJnF1b3Q7L2Rlc2MmcXVvdDsgKA0KICBzZXQgREVTQ1JJUFRJT049 DQogIGlmIG5vdCAmcXVvdDslfjImcXVvdDs9PSZxdW90OyZxdW90OyAoDQogICAgc2V0IFQ9 JX4yDQogICAgaWYgbm90ICZxdW90OyFUOn4wLDEhJnF1b3Q7PT0mcXVvdDsvJnF1b3Q7ICgN CiAgICAgIHNldCBERVNDUklQVElPTj0lfjINCiAgICApDQogICkNCiAgaWYgJnF1b3Q7IURF U0NSSVBUSU9OISZxdW90OyA9PSAmcXVvdDsmcXVvdDsgKA0KICAgIGVjaG8gRVJST1I6IFlv dSBuZWVkIHRvIHNwZWNpZnkgYSBkZXNjcmlwdGlvbiwgbWF4aW11bSBvZiAxMDI0IGNoYXJh Y3RlcnMNCiAgICBnb3RvIGVuZEJhdGNoDQogICkNCiAgc2hpZnQNCiAgc2hpZnQNCiAgZ290 byBMb29wQXJncw0KKQ0KaWYgL0kgJnF1b3Q7JX4xJnF1b3Q7PT0gJnF1b3Q7L2pib3NzdXNl ciZxdW90OyAoDQogIHNldCBKQk9TU1VTRVI9DQogIGlmIG5vdCAmcXVvdDslfjImcXVvdDs9 PSZxdW90OyZxdW90OyAoDQogICAgc2V0IFQ9JX4yDQogICAgaWYgbm90ICZxdW90OyFUOn4w LDEhJnF1b3Q7PT0mcXVvdDsvJnF1b3Q7ICgNCiAgICAgIHNldCBKQk9TU1VTRVI9JX4yDQog ICAgKQ0KICApDQogIGlmICZxdW90OyFKQk9TU1VTRVIhJnF1b3Q7ID09ICZxdW90OyZxdW90 OyAoDQogICAgZWNobyBFUlJPUjogWW91IG5lZWQgdG8gc3BlY2lmeSBhIHVzZXJuYW1lDQog ICAgZ290byBlbmRCYXRjaA0KICApDQogIHNoaWZ0DQogIHNoaWZ0DQogIGdvdG8gTG9vcEFy Z3MNCikNCmlmIC9JICZxdW90OyV+MSZxdW90Oz09ICZxdW90Oy9qYm9zc3Bhc3MmcXVvdDsg KA0KICBzZXQgSkJPU1NQQVNTPQ0KICBpZiBub3QgJnF1b3Q7JX4yJnF1b3Q7PT0mcXVvdDsm cXVvdDsgKA0KICAgIHNldCBUPSV+Mg0KICAgIGlmIG5vdCAmcXVvdDshVDp+MCwxISZxdW90 Oz09JnF1b3Q7LyZxdW90OyAoDQogICAgICBzZXQgSkJPU1NQQVNTPSV+Mg0KICAgICkNCiAg KQ0KICBpZiAmcXVvdDshSkJPU1NQQVNTISZxdW90OyA9PSAmcXVvdDsmcXVvdDsgKA0KICAg IGVjaG8gRVJST1I6IFlvdSBuZWVkIHRvIHNwZWNpZnkgYSBwYXNzd29yZCBmb3IgL2pib3Nz cGFzcw0KICAgIGdvdG8gZW5kQmF0Y2gNCiAgKQ0KICBzaGlmdA0KICBzaGlmdA0KICBnb3Rv IExvb3BBcmdzDQopDQppZiAvSSAmcXVvdDslfjEmcXVvdDs9PSAmcXVvdDsvc2VydmljZXVz ZXImcXVvdDsgKA0KICBzZXQgU0VSVklDRV9VU0VSPQ0KICBpZiBub3QgJnF1b3Q7JX4yJnF1 b3Q7PT0mcXVvdDsmcXVvdDsgKA0KICAgIHNldCBUPSV+Mg0KICAgIGlmIG5vdCAmcXVvdDsh VDp+MCwxISZxdW90Oz09JnF1b3Q7LyZxdW90OyAoDQogICAgICBzZXQgU0VSVklDRV9VU0VS PSV+Mg0KICAgICkNCiAgKQ0KICBpZiAmcXVvdDshU0VSVklDRV9VU0VSISZxdW90OyA9PSAm cXVvdDsmcXVvdDsgKA0KICAgIGVjaG8gRVJST1I6IFlvdSBuZWVkIHRvIHNwZWNpZnkgYSB1 c2VybmFtZSBpbiB0aGUgZm9ybWF0IERPTUFJTlxVU0VSLCBvciAuXFVTRVIgZm9yIHRoZSBs b2NhbCBkb21haW4NCiAgICBnb3RvIGVuZEJhdGNoDQogICkNCiAgc2hpZnQNCiAgc2hpZnQN CiAgZ290byBMb29wQXJncw0KKQ0KaWYgL0kgJnF1b3Q7JX4xJnF1b3Q7PT0gJnF1b3Q7L3Nl cnZpY2VwYXNzJnF1b3Q7ICgNCiAgc2V0IFNFUlZJQ0VfUEFTUz0NCiAgaWYgbm90ICZxdW90 OyV+MiZxdW90Oz09JnF1b3Q7JnF1b3Q7ICgNCiAgICBzZXQgVD0lfjINCiAgICBpZiBub3Qg JnF1b3Q7IVQ6fjAsMSEmcXVvdDs9PSZxdW90Oy8mcXVvdDsgKA0KICAgICAgc2V0IFNFUlZJ Q0VfUEFTUz0lfjINCiAgICApDQogICkNCiAgaWYgJnF1b3Q7IVNFUlZJQ0VfUEFTUyEmcXVv dDsgPT0gJnF1b3Q7JnF1b3Q7ICgNCiAgICBlY2hvIEVSUk9SOiBZb3UgbmVlZCB0byBzcGVj aWZ5IGEgcGFzc3dvcmQgZm9yIC9zZXJ2aWNlcGFzcw0KICAgIGdvdG8gZW5kQmF0Y2gNCiAg KQ0KICBzaGlmdA0KICBzaGlmdA0KICBnb3RvIExvb3BBcmdzDQopDQpyZW0gdGhlIGhvc3Ru YW1lIGlzIG9wdGlvbmFsDQppZiAvSSAmcXVvdDslfjEmcXVvdDs9PSAmcXVvdDsvaG9zdCZx dW90OyAoDQogIHNldCBJU19ET01BSU49dHJ1ZQ0KICBpZiBub3QgJnF1b3Q7JX4yJnF1b3Q7 PT0mcXVvdDsmcXVvdDsgKA0KICAgIHNldCBUPSV+Mg0KICAgIGlmIG5vdCAmcXVvdDshVDp+ MCwxISZxdW90Oz09JnF1b3Q7LyZxdW90OyAoDQogICAgICBzZXQgRENfSE9TVD0lfjINCiAg ICAgIHNoaWZ0DQogICAgKQ0KICApDQogIHNoaWZ0DQogIGdvdG8gTG9vcEFyZ3MNCikNCmlm IC9JICZxdW90OyV+MSZxdW90Oz09ICZxdW90Oy9sb2dsZXZlbCZxdW90OyAoDQogIGlmIC9J IG5vdCAmcXVvdDslfjImcXVvdDs9PSZxdW90O0Vycm9yJnF1b3Q7IGlmIC9JIG5vdCAmcXVv dDslfjImcXVvdDs9PSZxdW90O0luZm8mcXVvdDsgaWYgL0kgbm90ICZxdW90OyV+MiZxdW90 Oz09JnF1b3Q7V2FybiZxdW90OyBpZiAvSSBub3QgJnF1b3Q7JX4yJnF1b3Q7PT0mcXVvdDtE ZWJ1ZyZxdW90OyAoDQogICAgZWNobyBFUlJPUjogL2xvZ2xldmVsIG11c3QgYmUgc2V0IHRv IEVycm9yLCBJbmZvLCBXYXJuIG9yIERlYnVnIF4oQ2FzZSBpbnNlbnNpdGl2ZV4pDQogICAg Z290byBlbmRCYXRjaA0KICApDQogIHNldCBMT0dMRVZFTD0lfjINCiAgc2hpZnQNCiAgc2hp ZnQNCiAgZ290byBMb29wQXJncw0KKQ0KaWYgL0kgJnF1b3Q7JX4xJnF1b3Q7PT0gJnF1b3Q7 L2xvZ3BhdGgmcXVvdDsgKA0KICBzZXQgTE9HUEFUSD0NCiAgaWYgbm90ICZxdW90OyV+MiZx dW90Oz09JnF1b3Q7JnF1b3Q7ICgNCiAgICBzZXQgVD0lfjINCiAgICBpZiBub3QgJnF1b3Q7 IVQ6fjAsMSEmcXVvdDs9PSZxdW90Oy8mcXVvdDsgKA0KICAgICAgc2V0IExPR1BBVEg9JX4y DQogICAgKQ0KICApDQogIGlmICZxdW90OyFMT0dQQVRIISZxdW90OyA9PSAmcXVvdDsmcXVv dDsgKA0KICAgIGVjaG8gRVJST1I6IFlvdSBuZWVkIHRvIHNwZWNpZnkgYSBwYXRoIGZvciB0 aGUgc2VydmljZSBsb2cNCiAgICBnb3RvIGVuZEJhdGNoDQogICkNCiAgc2hpZnQNCiAgc2hp ZnQNCiAgZ290byBMb29wQXJncw0KKQ0KZWNobyBFUlJPUjogVW5yZWNvZ25pc2VkIG9wdGlv bjogJTENCmVjaG8oDQpnb3RvIGNtZFVzYWdlDQoNCjpkb0luc3RhbGwNCnNldCBDUkVERU5U SUFMUz0NCmlmIG5vdCAmcXVvdDslSkJPU1NVU0VSJSZxdW90OyA9PSAmcXVvdDsmcXVvdDsg KA0KICBpZiAmcXVvdDslSkJPU1NQQVNTJSZxdW90OyA9PSAmcXVvdDsmcXVvdDsgKA0KICAg IGVjaG8gV2hlbiBzcGVjaWZ5aW5nIGEgdXNlciwgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUg cGFzc3dvcmQNCiAgICBnb3RvIGVuZEJhdGNoDQogICkNCiAgc2V0IENSRURFTlRJQUxTPS0t dXNlcj0lSkJPU1NVU0VSJSAtLXBhc3N3b3JkPSVKQk9TU1BBU1MlDQopDQoNCnNldCBSVU5B Uz0NCmlmIG5vdCAmcXVvdDslU0VSVklDRV9VU0VSJSZxdW90OyA9PSAmcXVvdDsmcXVvdDsg KA0KICBpZiAmcXVvdDslU0VSVklDRV9QQVNTJSZxdW90OyA9PSAmcXVvdDsmcXVvdDsgKA0K ICAgIGVjaG8gV2hlbiBzcGVjaWZ5aW5nIGEgdXNlciwgeW91IG5lZWQgdG8gc3BlY2lmeSB0 aGUgcGFzc3dvcmQNCiAgICBnb3RvIGVuZEJhdGNoDQogICkNCiAgc2V0IFJVTkFTPS0tU2Vy dmljZVVzZXI9JVNFUlZJQ0VfVVNFUiUgLS1TZXJ2aWNlUGFzc3dvcmQ9JVNFUlZJQ0VfUEFT UyUNCikNCg0KaWYgJnF1b3Q7JVNURE9VVCUmcXVvdDs9PSZxdW90OyZxdW90OyBzZXQgU1RE T1VUPWF1dG8NCmlmICZxdW90OyVTVERFUlIlJnF1b3Q7PT0mcXVvdDsmcXVvdDsgc2V0IFNU REVSUj1hdXRvDQoNCmlmICZxdW90OyVTVEFSVF9QQVRIJSZxdW90Oz09JnF1b3Q7JnF1b3Q7 IHNldCBTVEFSVF9QQVRIPSZxdW90OyVKQk9TU19IT01FJVxiaW4mcXVvdDsNCmlmICZxdW90 OyVTVE9QX1BBVEglJnF1b3Q7PT0mcXVvdDsmcXVvdDsgc2V0IFNUT1BfUEFUSD0mcXVvdDsl SkJPU1NfSE9NRSVcYmluJnF1b3Q7DQoNCmlmICZxdW90OyVTVE9QX1NDUklQVCUmcXVvdDs9 PSZxdW90OyZxdW90OyBzZXQgU1RPUF9TQ1JJUFQ9amJvc3MtY2xpLmJhdA0KDQppZiAvSSAm cXVvdDslSVNfRE9NQUlOJSZxdW90OyA9PSAmcXVvdDt0cnVlJnF1b3Q7ICgNCiAgaWYgJnF1 b3Q7JUJBU0UlJnF1b3Q7PT0mcXVvdDsmcXVvdDsgc2V0IEJBU0U9JnF1b3Q7JUpCT1NTX0hP TUUlXGRvbWFpbiZxdW90Ow0KICBpZiAmcXVvdDslQ09ORklHJSZxdW90Oz09JnF1b3Q7JnF1 b3Q7IHNldCBDT05GSUc9ZG9tYWluLnhtbA0KICBpZiAmcXVvdDslU1RBUlRfU0NSSVBUJSZx dW90Oz09JnF1b3Q7JnF1b3Q7IHNldCBTVEFSVF9TQ1JJUFQ9ZG9tYWluLmJhdA0KICBzZXQg U1RBUlRQQVJBTT0mcXVvdDsvYyNzZXQjTk9QQVVTRT1ZIyZhbXA7JmFtcDsjIVNUQVJUX1ND UklQVCEjLURqYm9zcy5kb21haW4uYmFzZS5kaXI9IUJBU0UhIy0tZG9tYWluLWNvbmZpZz0h Q09ORklHISMtLWhvc3QtY29uZmlnPSFIT1NUQ09ORklHISZxdW90Ow0KICBzZXQgU1RPUFBB UkFNPSZxdW90Oy9jICVTVE9QX1NDUklQVCUgLS1jb250cm9sbGVyPSVDT05UUk9MTEVSJSAt LWNvbm5lY3QgJUNSRURFTlRJQUxTJSAtLWNvbW1hbmQ9L2hvc3Q9IURDX0hPU1QhOnNodXRk b3duJnF1b3Q7DQopIGVsc2UgKA0KICBpZiAmcXVvdDslQkFTRSUmcXVvdDs9PSZxdW90OyZx dW90OyBzZXQgJnF1b3Q7QkFTRT0lSkJPU1NfSE9NRSVcc3RhbmRhbG9uZSZxdW90Ow0KICBp ZiAmcXVvdDslQ09ORklHJSZxdW90Oz09JnF1b3Q7JnF1b3Q7IHNldCBDT05GSUc9c3RhbmRh bG9uZS54bWwNCiAgaWYgJnF1b3Q7JVNUQVJUX1NDUklQVCUmcXVvdDs9PSZxdW90OyZxdW90 OyBzZXQgU1RBUlRfU0NSSVBUPXN0YW5kYWxvbmUuYmF0DQogIHNldCBTVEFSVFBBUkFNPSZx dW90Oy9jI3NldCNOT1BBVVNFPVkjJmFtcDsmYW1wOyMhU1RBUlRfU0NSSVBUISMtRGpib3Nz LnNlcnZlci5iYXNlLmRpcj0hQkFTRSEjLS1zZXJ2ZXItY29uZmlnPSFDT05GSUchJnF1b3Q7 DQogIHNldCBTVE9QUEFSQU09JnF1b3Q7L2MgIVNUT1BfU0NSSVBUISAtLWNvbnRyb2xsZXI9 JUNPTlRST0xMRVIlIC0tY29ubmVjdCAlQ1JFREVOVElBTFMlIC0tY29tbWFuZD06c2h1dGRv d24mcXVvdDsNCikNCg0KaWYgJnF1b3Q7JUxPR1BBVEglJnF1b3Q7PT0mcXVvdDsmcXVvdDsg c2V0IExPR1BBVEg9JnF1b3Q7IUJBU0UhXGxvZyZxdW90Ow0KDQppZiBub3QgZXhpc3QgJnF1 b3Q7JUJBU0UlJnF1b3Q7ICgNCiAgZWNobyBUaGUgYmFzZSBkaXJlY3RvcnkgZG9lcyBub3Qg ZXhpc3Q6ICZxdW90OyVCQVNFJSZxdW90Ow0KICBnb3RvIGVuZEJhdGNoDQopDQoNCmlmIG5v dCBleGlzdCAmcXVvdDslQkFTRSVcY29uZmlndXJhdGlvblwlQ09ORklHJSZxdW90OyAoDQog IGVjaG8gVGhlIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgZXhpc3Q6ICZxdW90OyVCQVNFJVxj b25maWd1cmF0aW9uXCVDT05GSUclJnF1b3Q7DQogIGdvdG8gZW5kQmF0Y2gNCikNCg0KaWYg L0kgJnF1b3Q7JUlTREVCVUclJnF1b3Q7ID09ICZxdW90O3RydWUmcXVvdDsgKA0KICBlY2hv IEpCT1NTX0hPTUU9JnF1b3Q7JUpCT1NTX0hPTUUlJnF1b3Q7DQogIGVjaG8gUlVOQVM9JVJV TkFTJQ0KICBlY2hvIFNIT1JUTkFNRT0mcXVvdDslU0hPUlROQU1FJSZxdW90Ow0KICBlY2hv IERFU0NSSVBUSU9OPSZxdW90OyVERVNDUklQVElPTiUmcXVvdDsNCiAgZWNobyBTVEFSVFBB UkFNPSVTVEFSVFBBUkFNJQ0KICBlY2hvIFNUT1BQQVJBTT0lU1RPUFBBUkFNJQ0KICBlY2hv IExPR0xFVkVMPSVMT0dMRVZFTCUNCiAgZWNobyBMT0dQQVRIPSVMT0dQQVRIJQ0KICBlY2hv IENSRURFTlRJQUxTPSVDUkVERU5USUFMUyUNCiAgZWNobyBCQVNFPSZxdW90OyVCQVNFJSZx dW90Ow0KICBlY2hvIENPTkZJRz0mcXVvdDslQ09ORklHJSZxdW90Ow0KICBlY2hvIFNUQVJU X1NDUklQVD0lU1RBUlRfU0NSSVBUJQ0KICBlY2hvIFNUQVJUX1BBVEg9JVNUQVJUX1BBVEgl DQogIGVjaG8gU1RPUF9TQ1JJUFQ9JVNUT1BfU0NSSVBUJQ0KICBlY2hvIFNUT1BfUEFUSD0l U1RPUF9QQVRIJQ0KICBlY2hvIFNURE9VVD0mcXVvdDslU1RET1VUJSZxdW90Ow0KICBlY2hv IFNUREVSUj0mcXVvdDslU1RERVJSJSZxdW90Ow0KKQ0KaWYgL0kgJnF1b3Q7JUlTREVCVUcl JnF1b3Q7ID09ICZxdW90O3RydWUmcXVvdDsgKA0KICBAZWNobyBvbg0KKQ0KDQpAcmVtIHF1 b3RlcyBhcm91bmQgdGhlICZxdW90OyVERVNDUklQVElPTiUmcXVvdDsgYnV0IG5vd2hlcmUg ZWxzZQ0KZWNobyAlUFJVTlNSViUgaW5zdGFsbCAlU0hPUlROQU1FJSAlUlVOQVMlIC0tRGlz cGxheU5hbWU9JURJU1BMQVlOQU1FJSAtLURlc2NyaXB0aW9uPSZxdW90OyVERVNDUklQVElP TiUmcXVvdDsgLS1Mb2dMZXZlbD0lTE9HTEVWRUwlIC0tTG9nUGF0aD0lTE9HUEFUSCUgLS1M b2dQcmVmaXg9c2VydmljZSAtLVN0ZE91dHB1dD0lU1RET1VUJSAtLVN0ZEVycm9yPSVTVERF UlIlIC0tU3RhcnRNb2RlPWV4ZSAtLVN0YXJ0dXA9JVNUQVJUVVBfTU9ERSUgLS1TdGFydElt YWdlPWNtZC5leGUgLS1TdGFydFBhdGg9JVNUQVJUX1BBVEglICsrU3RhcnRQYXJhbXM9JVNU QVJUUEFSQU0lIC0tU3RvcE1vZGU9ZXhlIC0tU3RvcEltYWdlPWNtZC5leGUgLS1TdG9wUGF0 aD0lU1RPUF9QQVRIJSAgKytTdG9wUGFyYW1zPSVTVE9QUEFSQU0lDQoNCiVQUlVOU1JWJSBp bnN0YWxsICVTSE9SVE5BTUUlICVSVU5BUyUgLS1EaXNwbGF5TmFtZT0lRElTUExBWU5BTUUl IC0tRGVzY3JpcHRpb249JnF1b3Q7JURFU0NSSVBUSU9OJSZxdW90OyAtLUxvZ0xldmVsPSVM T0dMRVZFTCUgLS1Mb2dQYXRoPSVMT0dQQVRIJSAtLUxvZ1ByZWZpeD1zZXJ2aWNlIC0tU3Rk T3V0cHV0PSVTVERPVVQlIC0tU3RkRXJyb3I9JVNUREVSUiUgLS1TdGFydE1vZGU9ZXhlIC0t U3RhcnR1cD0lU1RBUlRVUF9NT0RFJSAtLVN0YXJ0SW1hZ2U9Y21kLmV4ZSAtLVN0YXJ0UGF0 aD0lU1RBUlRfUEFUSCUgKytTdGFydFBhcmFtcz0lU1RBUlRQQVJBTSUgLS1TdG9wTW9kZT1l eGUgLS1TdG9wSW1hZ2U9Y21kLmV4ZSAtLVN0b3BQYXRoPSVTVE9QX1BBVEglICArK1N0b3BQ YXJhbXM9JVNUT1BQQVJBTSUNCkByZW0gJVBSVU5TUlYlIGluc3RhbGwgJnF1b3Q7JVNIT1JU TkFNRSUmcXVvdDsgJnF1b3Q7JVJVTkFTJSZxdW90OyAtLURpc3BsYXlOYW1lPSZxdW90OyVE SVNQTEFZTkFNRSUmcXVvdDsgLS1EZXNjcmlwdGlvbj0mcXVvdDslREVTQ1JJUFRJT04lJnF1 b3Q7IC0tTG9nTGV2ZWw9JnF1b3Q7JUxPR0xFVkVMJSZxdW90OyAtLUxvZ1BhdGg9JnF1b3Q7 JUxPR1BBVEglJnF1b3Q7IC0tTG9nUHJlZml4PXNlcnZpY2UgLS1TdGRPdXRwdXQ9JnF1b3Q7 JVNURE9VVCUmcXVvdDsgLS1TdGRFcnJvcj0mcXVvdDslU1RERVJSJSZxdW90OyAtLVN0YXJ0 TW9kZT1leGUgLS1TdGFydHVwPSZxdW90OyVTVEFSVFVQX01PREUlJnF1b3Q7IC0tU3RhcnRJ bWFnZT1jbWQuZXhlIC0tU3RhcnRQYXRoPSZxdW90OyVTVEFSVF9QQVRIJSZxdW90OyArK1N0 YXJ0UGFyYW1zPSZxdW90OyVTVEFSVFBBUkFNJSZxdW90OyAtLVN0b3BNb2RlPWV4ZSAtLVN0 b3BJbWFnZT1jbWQuZXhlIC0tU3RvcFBhdGg9JnF1b3Q7JVNUT1BfUEFUSCUmcXVvdDsgICsr U3RvcFBhcmFtcz0mcXVvdDslU1RPUFBBUkFNJSZxdW90Ow0KDQpAaWYgL0kgJnF1b3Q7JUlT REVCVUclJnF1b3Q7ID09ICZxdW90O3RydWUmcXVvdDsgKA0KICBAZWNobyBvZmYNCikNCg0K aWYgZXJyb3JsZXZlbCA4ICgNCiAgZWNobyBFUlJPUjogVGhlIHNlcnZpY2UgJVNIT1JUTkFN RSUgYWxyZWFkeSBleGlzdHMNCiAgZ290byBlbmRCYXRjaA0KKQ0KaWYgZXJyb3JsZXZlbCAw ICgNCiAgZWNobyBTZXJ2aWNlICVTSE9SVE5BTUUlIGluc3RhbGxlZA0KICBnb3RvIGVuZEJh dGNoDQopDQpnb3RvIGNtZEVuZA0KDQoNClJFTSB0aGUgb3RoZXIgY29tbWFuZHMgdGFrZSBh IC9uYW1lIHBhcmFtZXRlciAtIGlmIHRoZXJlIGlzIG5vIF4mbHQ7c2VydmljZW5hbWVeJmd0 OyBwYXNzZWQgYXMgc2Vjb25kIHBhcmFtZXRlciwNClJFTSB3ZSBzaWxlbnRseSBpZ25vcmUg dGhpcyBhbmQgdXNlIHRoZSBkZWZhdWx0IFNIT1JUTkFNRQ0KDQo6Y21kVW5pbnN0YWxsDQpp ZiAvSSAmcXVvdDslfjEmcXVvdDs9PSZxdW90Oy9uYW1lJnF1b3Q7ICgNCiAgaWYgbm90ICZx dW90OyV+MiZxdW90Oz09JnF1b3Q7JnF1b3Q7ICgNCiAgICBzZXQgU0hPUlROQU1FPSZxdW90 OyV+MiZxdW90Ow0KICApDQopDQolUFJVTlNSViUgc3RvcCAlU0hPUlROQU1FJQ0KaWYgZXJy b3JsZXZlbCAwICgNCiAgJVBSVU5TUlYlIGRlbGV0ZSAlU0hPUlROQU1FJQ0KICBpZiBlcnJv cmxldmVsIDAgKA0KICAgIGVjaG8gU2VydmljZSAlU0hPUlROQU1FJSB1bmluc3RhbGxlZA0K ICApDQopIGVsc2UgKA0KICBlY2hvIFVuYWJsZSB0byBzdG9wIHRoZSBzZXJ2aWNlICVTSE9S VE5BTUUlDQopDQpnb3RvIGNtZEVuZA0KDQo6Y21kU3RhcnQNCmlmIC9JICZxdW90OyV+MSZx dW90Oz09JnF1b3Q7L25hbWUmcXVvdDsgKA0KICBpZiBub3QgJnF1b3Q7JX4yJnF1b3Q7PT0m cXVvdDsmcXVvdDsgKA0KICAgIHNldCBTSE9SVE5BTUU9JnF1b3Q7JX4yJnF1b3Q7DQogICkN CikNCiVQUlVOU1JWJSBzdGFydCAlU0hPUlROQU1FJQ0KZWNobyBTZXJ2aWNlICVTSE9SVE5B TUUlIHN0YXJ0aW5nLi4uDQpnb3RvIGNtZEVuZA0KDQo6Y21kU3RvcA0KaWYgL0kgJnF1b3Q7 JX4xJnF1b3Q7PT0mcXVvdDsvbmFtZSZxdW90OyAoDQogIGlmIG5vdCAmcXVvdDslfjImcXVv dDs9PSZxdW90OyZxdW90OyAoDQogICAgc2V0IFNIT1JUTkFNRT0mcXVvdDslfjImcXVvdDsN CiAgKQ0KKQ0KJVBSVU5TUlYlIHN0b3AgJVNIT1JUTkFNRSUNCmVjaG8gU2VydmljZSAlU0hP UlROQU1FJSBzdG9wcGluZy4uLg0KZ290byBjbWRFbmQNCg0KOmNtZFJlc3RhcnQNCmlmIC9J ICZxdW90OyV+MSZxdW90Oz09JnF1b3Q7L25hbWUmcXVvdDsgKA0KICBpZiBub3QgJnF1b3Q7 JX4yJnF1b3Q7PT0mcXVvdDsmcXVvdDsgKA0KICAgIHNldCBTSE9SVE5BTUU9JnF1b3Q7JX4y JnF1b3Q7DQogICkNCikNCiVQUlVOU1JWJSBzdG9wICVTSE9SVE5BTUUlDQplY2hvIFNlcnZp Y2UgJVNIT1JUTkFNRSUgc3RvcHBpbmcuLi4NCmlmICZxdW90OyVlcnJvcmxldmVsJSZxdW90 OyA9PSAmcXVvdDswJnF1b3Q7ICgNCiAgJVBSVU5TUlYlIHN0YXJ0ICVTSE9SVE5BTUUlDQog IGVjaG8gU2VydmljZSAlU0hPUlROQU1FJSBzdGFydGluZy4uLg0KKSBlbHNlICgNCiAgZWNo byBVbmFibGUgdG8gc3RvcCB0aGUgc2VydmljZSAlU0hPUlROQU1FJQ0KKQ0KZ290byBjbWRF bmQNCg0KDQo6Y21kRW5kDQpSRU0gaWYgdGhlcmUgaXMgYSBuZWVkIHRvIGFkZCBvdGhlciBl cnJvciBtZXNzYWdlcywgbWFrZSBzdXJlIHRvIGxpc3QgaGlnaGVyIG51bWJlcnMgZmlyc3Qg IQ0KaWYgZXJyb3JsZXZlbCAyICgNCiAgZWNobyBFUlJPUjogRmFpbGVkIHRvIGxvYWQgc2Vy dmljZSAlU0hPUlROQU1FJSBjb25maWd1cmF0aW9uDQogIGdvdG8gZW5kQmF0Y2gNCikNCmlm IGVycm9ybGV2ZWwgMCAoDQogIGdvdG8gZW5kQmF0Y2gNCikNCmVjaG8gJnF1b3Q7VW5mb3Jz ZWVuIGVycm9yPSVlcnJvcmxldmVsJSZxdW90Ow0KDQpyZW0gbm90aGluZyBiZWxvdywgZXhp dA0KOmVuZEJhdGNoDQo8L2NvZGU+PC9wcmU+DQo=

No comments :

Post a Comment