diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 7a55c70..d6b7c07 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -12,6 +12,9 @@ jobs: contents: write outputs: new_version: ${{ steps.set-build-number.outputs.new_version }} + env: + PRIVATE_KEY: ${{ secrets.SIGNING_KEY }} + steps: - name: Check out code into the Go module directory uses: actions/checkout@v4 diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 5393af7..4ffdb90 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -25,7 +25,11 @@ jobs: runs-on: ubuntu-latest permissions: contents: write + outputs: new_version: ${{ steps.set-build-number.outputs.new_version }} + env: + PRIVATE_KEY: ${{ secrets.SIGNING_KEY }} + steps: - name: Check out code into the Go module directory uses: actions/checkout@v4 @@ -59,6 +63,7 @@ jobs: - name: Build binaries run: | go mod tidy && go mod vendor + echo "$PRIVATE_KEY=${{ secrets.SIGNING_KEY }}" >> $GITHUB_ENV bash ${GITHUB_WORKSPACE}/Utility/create_binaries.sh beta - name: Create a Release diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4a20886..6cc1c4a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,6 +12,9 @@ jobs: contents: write outputs: new_version: ${{ steps.set-build-number.outputs.new_version }} + env: + PRIVATE_KEY: ${{ secrets.SIGNING_KEY }} + steps: - name: Check out code into the Go module directory uses: actions/checkout@v4 @@ -47,6 +50,7 @@ jobs: - name: Build binaries run: | go mod tidy && go mod vendor + echo "$PRIVATE_KEY=${{ secrets.SIGNING_KEY }}" >> $GITHUB_ENV bash ${GITHUB_WORKSPACE}/Utility/create_binaries.sh - name: Create a Release diff --git a/Dockerfile b/Dockerfile index 5f5229f..0d663a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,8 +19,8 @@ FROM base AS beta RUN go build -tags beta . FROM ${BUILD_FLAG} AS builder -ARG BRANCH -RUN echo "Build ${BRANCH} version" +ARG BUILD_FLAG +RUN echo "Build ${BUILD_FLAG} version" # Second stage. Creating an image # ----------------------------------------------------------------------------- diff --git a/Utility/create_binaries.sh b/Utility/create_binaries.sh index f64d1c9..ffd20d3 100644 --- a/Utility/create_binaries.sh +++ b/Utility/create_binaries.sh @@ -1,8 +1,46 @@ #!/bin/bash +set -e + +if [ -z "$PRIVATE_KEY" ]; then + echo "PRIVATE_KEY environment variable is not set. Exiting..." + exit 1 +fi + +function exitOnFailure { + echo "Build failed for ${1}/${2}. Exiting..." + rm threadfin_privkey.pem + exit 1 +} + +function verifySignature { + # Variables + binary_file="dist/${1}" + signature_file="signature.bin" + original_file="original_binary" + signature_size=256 + + # Extract the signature (assuming the signature is 256 bytes long) + tail -c $signature_size "$binary_file" > "$signature_file" + + # Extract the original binary content + head -c -$signature_size "$binary_file" > "$original_file" + + # Verify the signature + if ! openssl dgst -sha256 -verify threadfin_pubkey.pem -signature "$signature_file" "$original_file"; then + echo "Signature verification failed for ${1}. Exiting..." + exit 1 + fi + + # Clean up + rm "$signature_file" "$original_file" +} + os_list=("darwin" "freebsd" "linux" "windows") arch_list=("amd64" "arm64") +echo "$PRIVATE_KEY" > threadfin_privkey.pem + for os in "${os_list[@]}"; do export GOOS=$os for arch in "${arch_list[@]}"; do @@ -12,14 +50,31 @@ for os in "${os_list[@]}"; do bin_string="${bin_string}_beta" fi bin_string="${bin_string}_${os}_${arch}" + sha_string="${bin_string}" if [ "$os" = "windows" ]; then bin_string="${bin_string}.exe" fi echo "Building ${bin_string}" if [ "$1" = "beta" ]; then - go build -o "dist/${bin_string}" -tags beta + if ! go build -o "dist/${bin_string}" -tags beta; then + exitOnFailure "$os" "$arch" + fi else - go build -o "dist/${bin_string}" + if ! go build -o "dist/${bin_string}"; then + exitOnFailure "$os" "$arch" + fi fi + + echo "Signing the binary" + openssl dgst -sha256 -sign threadfin_privkey.pem -out signature.bin "dist/${bin_string}" + cat signature.bin >> "dist/${bin_string}" + + echo "Verify signature" + verifySignature "$bin_string" + + echo "Calculating sha256 for ${bin_string}" + sha256sum "dist/${bin_string}" > "dist/${sha_string}.sha256" done -done \ No newline at end of file +done + +rm threadfin_privkey.pem \ No newline at end of file diff --git a/src/buffer-interface.go b/src/buffer-interface.go new file mode 100644 index 0000000..99d7b63 --- /dev/null +++ b/src/buffer-interface.go @@ -0,0 +1,22 @@ +package src + +import "io" + +type BufferInterface interface { + StartBuffer(stream *Stream) error + StopBuffer() + CloseBuffer() + HandleByteOutput(stdOut io.ReadCloser) + PrepareBufferFolder(folder string) error + GetBufTmpFiles() []string + GetBufferedSize() int + addBufferedFilesToPipe() + DeleteOldestSegment() + CheckBufferFolder() (bool, error) + CheckBufferedFile(file string) (bool, error) + writeToPipe(file string) error + writeBytesToPipe(data []byte) error + GetPipeReader() *io.PipeReader + GetStopChan() chan struct{} + SetStopChan(chan struct{}) +} \ No newline at end of file diff --git a/src/buffer.go b/src/buffer.go index 85ccb11..0cd4dd1 100644 --- a/src/buffer.go +++ b/src/buffer.go @@ -5,114 +5,396 @@ import ( "fmt" "io" "os" + "path/filepath" + "sort" + "strconv" + "strings" + "time" "github.com/avfs/avfs" ) -func (b *Buffer) StartBuffer(stream *Stream,) { - b.Stream = stream - var err error = nil - if err = b.PrepareBufferFolder(stream.Folder); err != nil { +type StreamBuffer struct { + FileSystem avfs.VFS + Stream *Stream // Reference to the parents struct + StopChan chan struct{} + Stopped bool + CloseChan chan struct{} + Closed bool + LatestSegment int + OldSegments []string + PipeWriter *io.PipeWriter + PipeReader *io.PipeReader +} + +const ( + BufferFolderError = 4008 + SendFileError = 4009 + CreateFileError = 4010 + EndOfFileError = 4011 + ReadIntoBufferError = 4012 + WriteToBufferError = 4013 + OpenFileError = 4014 //errMsg = "Not able to open buffered file" + FileStatError = 4015 //errMsg = "Could not get file statics of buffered file" + ReadFileError = 4016 //errMsg = "Could not read buffered file before sending to clients" + FileDoesNotExistError = 4019 //errMsg = "Buffered file does not exist anymore" +) + +func (sb *StreamBuffer) StartBuffer(stream *Stream) error { + sb.Stream = stream + if err := sb.PrepareBufferFolder(filepath.Join(stream.Folder, "0.ts")); err != nil { // If something went wrong when setting up the buffer storage don't run at all stream.ReportError(err, BufferFolderError, "", true) - return + return err + } + return nil +} + +func (sb *StreamBuffer) StopBuffer() { + if !sb.Stopped { + sb.Stopped = true + close(sb.StopChan) } +} - switch Settings.Buffer { - case "ffmpeg", "vlc": - b.IsThirdPartyBuffer = true - err = StartThirdPartyBuffer(stream) - case "threadfin": - err = StartThreadfinBuffer(stream) - default: - return +func (sb *StreamBuffer) CloseBuffer() { + sb.StopBuffer() + if ! sb.Closed { + close(sb.CloseChan) + sb.Closed = true } - if err != nil { - b.Stream.handleBufferError(err) + if sb.Stream.Folder != "" { + sb.RemoveBufferedFiles(filepath.Join(sb.Stream.Folder, "0.ts")) } } +func (sb *StreamBuffer) GetPipeReader() *io.PipeReader{ + return sb.PipeReader +} + +func (sb *StreamBuffer) GetStopChan() chan struct{} { + return sb.StopChan +} + +func (sb *StreamBuffer) SetStopChan(stopChan chan struct{}) { + sb.StopChan = stopChan +} + /* HandleByteOutput save the byte ouptut of the command or http request as files */ -func (b *Buffer) HandleByteOutput(stdOut io.ReadCloser) { +func (sb *StreamBuffer) HandleByteOutput(stdOut io.ReadCloser) { TS_PACKAGE_MIN_SIZE := 188 bufferSize := Settings.BufferSize * 1024 // in bytes buffer := make([]byte, bufferSize) var fileSize int init := true - tmpFolder := b.Stream.Folder + string(os.PathSeparator) - tmpSegment := b.Stream.LatestSegment + tmpFolder := sb.Stream.Folder + string(os.PathSeparator) + tmpSegment := sb.LatestSegment - var bufferVFS = b.FileSystem + var bufferVFS = sb.FileSystem var f avfs.File var err error var tmpFile string reader := bufio.NewReader(stdOut) for { - if init { - tmpFile = fmt.Sprintf("%s%d.ts", tmpFolder, tmpSegment) - f, err = bufferVFS.Create(tmpFile) + select { + case <- sb.CloseChan: + // If the stream got stopped, stop the output + return + default: + if init { + tmpFile = fmt.Sprintf("%s%d.ts", tmpFolder, tmpSegment) + f, err = bufferVFS.Create(tmpFile) + if err != nil { + f.Close() + ShowError(err, CreateFileError) + sb.Stream.ReportError(err, CreateFileError, "", true) + return + } + init = false + } + n, err := reader.Read(buffer) + if n == 0 && err == nil { + continue + } + if err == io.EOF { + f.Close() + ShowDebug("Buffer reached EOF!", 3) + sb.Stream.ReportError(err, EndOfFileError, "", true) + return + } if err != nil { f.Close() - ShowError(err, CreateFileError) - b.Stream.ReportError(err, CreateFileError, "", true) + bufferVFS.Remove(tmpFile) + sb.Stream.ReportError(err, ReadIntoBufferError, "", true) return } - init = false + if _, err := f.Write(buffer[:n]); err != nil { + f.Close() + bufferVFS.Remove(tmpFile) + sb.Stream.ReportError(err, WriteToBufferError, "", true) + return + } + fileSize += n + // Check if the file size exceeds the threshold + if fileSize >= TS_PACKAGE_MIN_SIZE*1024 { + tmpSegment++ + tmpFile = fmt.Sprintf("%s%d.ts", tmpFolder, tmpSegment) + // Close the current file and create a new one + f.Close() + sb.LatestSegment = tmpSegment + f, err = bufferVFS.Create(tmpFile) + if err != nil { + f.Close() + sb.Stream.ReportError(err, CreateFileError, "", true) + return + } + fileSize = 0 + } } - n, err := reader.Read(buffer) - if n == 0 && err == nil { - continue + } +} + +func (sb *StreamBuffer) RemoveBufferedFiles(folder string) error { + test := filepath.Dir(folder) + if err := sb.FileSystem.RemoveAll(test); err != nil { + return fmt.Errorf("failed to remove buffer folder: %w", err) + } + return nil +} + +/* +PrepareBufferFolder will clean the buffer folder and check if the folder exists +*/ +func (sb *StreamBuffer) PrepareBufferFolder(folder string) error { + if err := sb.RemoveBufferedFiles(folder); err != nil { + return err + } + + if err := sb.createBufferFolder(filepath.Dir(folder)); err != nil { + return fmt.Errorf("failed to create buffer folder: %w", err) + } + + return nil +} + +func (sb *StreamBuffer) createBufferFolder(path string) (err error) { + + var debug string + _, err = sb.FileSystem.Stat(path) + + if fsIsNotExistErr(err) { + // Folder does not exist, will now be created + + // If we are on Windows and the cache location path is NOT on C:\ we need to create the volume it is located on + // Failure to do so here will result in a panic error and the stream not playing + if Settings.StoreBufferInRAM { + if sb.FileSystem.OSType() == avfs.OsWindows { + vm := sb.FileSystem.(avfs.VolumeManager) + pathIterator := avfs.NewPathIterator(sb.FileSystem, path) + if pathIterator.VolumeName() != "C:" { + vm.VolumeAdd(path) + } + } + + err = sb.FileSystem.MkdirAll(path, 0755) + if err == nil { + debug = fmt.Sprintf("Create virtual filesystem Folder: %s", path) + ShowDebug(debug, 1) + } else { + return err + } + + } else { + err = sb.FileSystem.MkdirAll(path, 0755) + if err == nil { + debug = fmt.Sprintf("Created folder on disk: %s", path) + ShowDebug(debug, 1) + } else { + return err + } } - if err == io.EOF { - f.Close() - ShowDebug("Buffer reached EOF!", 3) - b.Stream.ReportError(err, EndOfFileError, "", true) + + return nil + } + + return nil +} + +/* +GetBufTmpFiles retrieves the files within the buffer folder +and returns a sorted list with the file names +*/ +func (sb *StreamBuffer) GetBufTmpFiles() (tmpFiles []string) { + + var tmpFolder = sb.Stream.Folder + var fileIDs []float64 + + if _, err := sb.FileSystem.Stat(tmpFolder); !fsIsNotExistErr(err) { + files, err := sb.FileSystem.ReadDir(tmpFolder) + if err != nil { + ShowError(err, 000) return } + + // Check if more then one file is available + if len(files) >= 1 { + // Iterate over the files and collect the IDs + for _, file := range files { + if !file.IsDir() && filepath.Ext(file.Name()) == ".ts" { + fileID := strings.TrimSuffix(file.Name(), ".ts") + if f, err := strconv.ParseFloat(fileID, 64); err == nil { + fileIDs = append(fileIDs, f) + } + } + } + + sort.Float64s(fileIDs) + if len(fileIDs) > 0 { + fileIDs = fileIDs[:len(fileIDs)-1] + } + + // Create the return array with the sorted files + for _, file := range fileIDs { + fileName := fmt.Sprintf("%.0f.ts", file) + // Check if the file is already within old segments array + if !ContainsString(sb.OldSegments, fileName) { + tmpFiles = append(tmpFiles, fileName) + sb.OldSegments = append(sb.OldSegments, fileName) + } + } + } + } + return +} + +func (sb *StreamBuffer) GetBufferedSize() (size int) { + size = 0 + var tmpFolder = sb.Stream.Folder + if _, err := sb.FileSystem.Stat(tmpFolder); !fsIsNotExistErr(err) { + + files, err := sb.FileSystem.ReadDir(tmpFolder) if err != nil { - f.Close() - bufferVFS.Remove(tmpFile) - b.Stream.ReportError(err, ReadIntoBufferError, "", true) + ShowError(err, 000) return } - if _, err := f.Write(buffer[:n]); err != nil { - f.Close() - bufferVFS.Remove(tmpFile) - b.Stream.ReportError(err, WriteToBufferError, "", true) - return + for _, file := range files { + if !file.IsDir() && filepath.Ext(file.Name()) == ".ts" { + file_info, err := sb.FileSystem.Stat(filepath.Join(tmpFolder, file.Name())) + if err == nil { + size += int(file_info.Size()) + } + } } - fileSize += n - // Check if the file size exceeds the threshold - if fileSize >= TS_PACKAGE_MIN_SIZE * 1024 { - tmpSegment++ - tmpFile = fmt.Sprintf("%s%d.ts", tmpFolder, tmpSegment) - // Close the current file and create a new one - f.Close() - b.Stream.LatestSegment = tmpSegment - f, err = bufferVFS.Create(tmpFile) - if err != nil { - f.Close() - b.Stream.ReportError(err, CreateFileError, "", true) - return + } + return size +} + +func (sb *StreamBuffer) addBufferedFilesToPipe() { + for { + select { + case <-sb.StopChan: + return + default: + if sb.GetBufferedSize() < Settings.BufferSize * 1024 { + time.Sleep(25 * time.Millisecond) // Wait for new files + continue + } + tmpFiles := sb.GetBufTmpFiles() + for _, f := range tmpFiles { + if ok, err := sb.CheckBufferFolder(); !ok { + sb.Stream.ReportError(err, BufferFolderError, "", true) + return + } + ShowDebug(fmt.Sprintf("Streaming:Broadcasting file %s to clients", f), 1) + err := sb.writeToPipe(f) // Add file so it will be copied to the pipes + if err != nil { + sb.Stream.ReportError(err, 0, "", false) + } + sb.DeleteOldestSegment() } - fileSize = 0 } } } /* -PrepareBufferFolder will clean the buffer folder and check if the folder exists +DeleteOldesSegment will delete the file provided in the buffer */ -func (b *Buffer) PrepareBufferFolder(folder string) error { - if err := b.FileSystem.RemoveAll(getPlatformPath(folder)); err != nil { - return fmt.Errorf("failed to remove buffer folder: %w", err) +func (sb *StreamBuffer) DeleteOldestSegment() { + fileToRemove := filepath.Join(sb.Stream.Folder, sb.OldSegments[0]) + if err := sb.FileSystem.Remove(fileToRemove); err != nil { + ShowError(err, 4007) } + sb.OldSegments = sb.OldSegments[1:] +} - if err := checkVFSFolder(folder, b.FileSystem); err != nil { - return fmt.Errorf("failed to check buffer folder: %w", err) +/* +CheckBufferFolder reports whether the buffer folder exists. +*/ +func (sb *StreamBuffer) CheckBufferFolder() (bool, error) { + if _, err := sb.FileSystem.Stat(sb.Stream.Folder); fsIsNotExistErr(err) { + return false, err } + return true, nil +} - return nil +// CheckBufferedFile check for the existance of the given file (file path is needed) +func (sb *StreamBuffer) CheckBufferedFile(file string) (bool, error) { + if _, err := sb.FileSystem.Stat(file); fsIsNotExistErr(err) { + return false, err + } + return true, nil } + +func (sb *StreamBuffer) writeToPipe(file string) error { + f, err := sb.FileSystem.Open(filepath.Join(sb.Stream.Folder, file)) + if err != nil { + return err + } + defer f.Close() + + + buf := make([]byte, 4096) // 4KB buffer + for { + select { + case <- sb.StopChan: + // Pipe was closed quit writing to it + return nil + default: + n, err := f.Read(buf) + if err != nil && err != io.EOF { + sb.Stream.ReportError(err, 0, "", true) // TODO: Add error code + return err + } else if err == io.EOF { + return nil + } + if n == 0 { + break + } + + _, err = sb.PipeWriter.Write(buf[:n]) + if err != nil { + sb.Stream.ReportError(err, 0, "", true) // TODO: Add error code + return err + } + } + } +} + +func (sb *StreamBuffer) writeBytesToPipe(data []byte) error { + for { + select { + case <- sb.StopChan: + // Pipe was closed quit writing to it + return nil + default: + _, err := sb.PipeWriter.Write(data) + if err != nil { + sb.Stream.ReportError(err, 0, "", true) // TODO: Add error code + return err + } + time.Sleep(800 * time.Millisecond) + } + } +} \ No newline at end of file diff --git a/src/config.go b/src/config.go index d074787..f000fd0 100644 --- a/src/config.go +++ b/src/config.go @@ -136,12 +136,7 @@ func Init() (err error) { ShowError(err, 1071) return } - - err = conditionalUpdateChanges() - if err != nil { - return - } - + // Einstellungen laden (settings.json) ShowInfo(fmt.Sprintf("Load Settings:%s", System.File.Settings)) diff --git a/src/data.go b/src/data.go index 72cf638..4aa24b5 100644 --- a/src/data.go +++ b/src/data.go @@ -15,7 +15,7 @@ import ( ) // Einstellungen ändern (WebUI) -func updateServerSettings(request RequestStruct) (settings SettingsStruct, err error) { +func updateServerSettings(request RequestStruct) (settings *SettingsStruct, err error) { oldSettings, err := jsonToMap(mapToJSON(Settings)) if err != nil { @@ -27,6 +27,11 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e ShowError(err, 0 ) //TODO: Define error code return } + + if len(newSettings) == 0 { + return nil, nil + } + var reloadData = false var cacheImages = false var createXEPGFiles = false @@ -57,7 +62,7 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e _, err := time.Parse("1504", v.(string)) if err != nil { ShowError(err, 1012) - return Settings, err + return &Settings, err } newUpdateTimes = append(newUpdateTimes, v.(string)) @@ -219,7 +224,7 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e err = saveSettings(Settings) if err == nil { - settings = Settings + settings = &Settings if reloadData { @@ -447,7 +452,7 @@ func deleteLocalProviderFiles(dataID, fileType string) { } // Filtereinstellungen speichern (WebUI) -func saveFilter(request RequestStruct) (settings SettingsStruct, err error) { +func saveFilter(request RequestStruct) (settings *SettingsStruct, err error) { var filterMap = make(map[int64]interface{}) var newData = make(map[int64]interface{}) @@ -522,7 +527,7 @@ func saveFilter(request RequestStruct) (settings SettingsStruct, err error) { return } - settings = Settings + settings = &Settings err = buildDatabaseDVR() if err != nil { diff --git a/src/internal/up2date/client/client.go b/src/internal/up2date/client/client.go deleted file mode 100755 index 4bd0728..0000000 --- a/src/internal/up2date/client/client.go +++ /dev/null @@ -1,135 +0,0 @@ -package up2date - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "io" - "net" - "net/http" - "net/url" - "runtime" - "time" -) - -// ClientInfo : Information about the key (NAME OS, ARCH, UUID, KEY) -type ClientInfo struct { - Arch string `json:"arch"` - Branch string `json:"branch"` - CMD string `json:"cmd,omitempty"` - Name string `json:"name"` - OS string `json:"os"` - URL string `json:"url"` - - Response ServerResponse `json:"response,omitempty"` -} - -//ServerResponse : Response from server after client request -type ServerResponse struct { - Status bool `json:"status,omitempty"` - Reason string `json:"reason,omitempty"` - Version string `json:"version,omitempty"` - UpdateBIN string `json:"update.url.bin,omitempty"` - UpdateZIP string `json:"update.url.zip,omitempty"` - Filename string `json:"filename.bin,omitempty"` - UpdatedAt string - Assets []AssetsStruct -} - -type AssetsStruct struct { - DownloadUrl string - UpdatetAt string -} - -// Updater : Client infos -var Updater ClientInfo - -// UpdateURL : URL for the new binary -var UpdateURL string - -// Init : Init -func Init() { - Updater.OS = runtime.GOOS - Updater.Arch = runtime.GOARCH -} - -// GetVersion : Information about the latest version -func GetVersion() (err error) { - - Updater.CMD = "getVersion" - err = serverRequest() - return -} - -func serverRequest() (err error) { - - var serverResponse ServerResponse - jsonByte, err := json.MarshalIndent(Updater, "", " ") - if err == nil { - - // Serververbindung prüfen - u, err := url.Parse(Updater.URL) - if err != nil { - return err - } - var server = u.Host - - timeout := time.Duration(1 * time.Second) - _, err = net.DialTimeout("tcp", server, timeout) - if err != nil { - return err - } - - // Check redirect 301 <---> 308 - redirect, _ := http.NewRequest("POST", Updater.URL, nil) - - client := &http.Client{} - client.CheckRedirect = func(redirect *http.Request, via []*http.Request) error { - return errors.New("Redirect") - } - - resp, err := client.Do(redirect) - - if err != nil { - // Redirect - if resp.StatusCode >= 301 && resp.StatusCode <= 308 { //status code 301 <---> 308 - Updater.URL = resp.Header.Get("Location") - } else { - return err - } - } - // --- - - req, _ := http.NewRequest("POST", Updater.URL, bytes.NewBuffer(jsonByte)) - req.Header.Set("Content-Type", "application/json") - - client = &http.Client{} - resp, err = client.Do(req) - - if err != nil { - return err - } - - if resp.StatusCode != http.StatusOK { - //fmt.Println(resp.StatusCode, Updater.URL, Updater.CMD) - return fmt.Errorf("%d: %s (%s)", resp.StatusCode, http.StatusText(resp.StatusCode), Updater.URL) - } - - Updater.CMD = "" - defer resp.Body.Close() - - body, _ := io.ReadAll(resp.Body) - - err = json.Unmarshal(body, &serverResponse) - - if err != nil { - return err - } - - Updater.Response = serverResponse - - } - - return -} diff --git a/src/internal/up2date/client/update.go b/src/internal/up2date/client/update.go deleted file mode 100755 index 2327cbc..0000000 --- a/src/internal/up2date/client/update.go +++ /dev/null @@ -1,258 +0,0 @@ -package up2date - -import ( - "archive/zip" - "fmt" - "io" - "log" - "net/http" - "os" - "os/exec" - "path/filepath" - "runtime" - "strings" - "syscall" -) - -// DoUpdate : Update binary -func DoUpdate(fileType, filenameBIN string) (err error) { - - var url string - switch fileType { - case "bin": - url = Updater.Response.UpdateBIN - case "zip": - url = Updater.Response.UpdateZIP - } - - if len(url) > 0 { - log.Println("["+strings.ToUpper(fileType)+"]", "New version ("+Updater.Name+"):", Updater.Response.Version) - - // Download new binary - log.Println("DEBUG: ", url) - resp, err := http.Get(url) - if err != nil { - return err - } - defer resp.Body.Close() - log.Println("["+strings.ToUpper(fileType)+"]", "Download new version...") - - if resp.StatusCode != http.StatusOK { - log.Println("["+strings.ToUpper(fileType)+"]", "Download new version...NOK") - return fmt.Errorf("bad status: %s", resp.Status) - } - - // Change binary filename to .filename - binary, _ := os.Executable() - var filename = getFilenameFromPath(binary) - var path = getPlatformPath(binary) - var oldBinary = path + "_old_" + filename - var newBinary = binary - - // ZIP - var tmpFolder = path + "tmp" - var tmpFile = tmpFolder + string(os.PathSeparator) + filenameBIN - - //fmt.Println(binary, path+"."+filename) - os.Rename(newBinary, oldBinary) - - // Save the new binary with the old file name - out, err := os.Create(binary) - if err != nil { - restorOldBinary(oldBinary, newBinary) - return err - } - defer out.Close() - - // Write the body to file - - _, err = io.Copy(out, resp.Body) - if err != nil { - restorOldBinary(oldBinary, newBinary) - return err - } - - // Update as a ZIP file - if fileType == "zip" { - - log.Println("["+strings.ToUpper(fileType)+"]", "Update file:", filenameBIN) - log.Println("["+strings.ToUpper(fileType)+"]", "Unzip ZIP file...") - err = extractZIP(binary, tmpFolder) - - binary = newBinary - - if err != nil { - - log.Println("["+strings.ToUpper(fileType)+"]", "Unzip ZIP file...ERROR") - - restorOldBinary(oldBinary, newBinary) - - return err - } else { - - log.Println("["+strings.ToUpper(fileType)+"]", "Unzip ZIP file...OK") - log.Println("["+strings.ToUpper(fileType)+"]", "Copy binary file...") - - err = copyFile(tmpFile, binary) - if err == nil { - log.Println("["+strings.ToUpper(fileType)+"]", "Copy binary file...OK") - } else { - - log.Println("["+strings.ToUpper(fileType)+"]", "Copy binary file...ERROR") - restorOldBinary(oldBinary, newBinary) - - return err - } - - os.RemoveAll(tmpFolder) - } - - } - - // Set the permission - os.Chmod(binary, 0755) - - // Close the new file !Windows - out.Close() - - log.Println("["+strings.ToUpper(fileType)+"]", "Update Successful") - - // Restart binary (Windows) - if runtime.GOOS == "windows" { - - bin, err := os.Executable() - - if err != nil { - restorOldBinary(oldBinary, newBinary) - return err - } - - var pid = os.Getpid() - var process, _ = os.FindProcess(pid) - - if proc, err := start(bin); err == nil { - - os.RemoveAll(oldBinary) - process.Kill() - proc.Wait() - - } else { - restorOldBinary(oldBinary, newBinary) - } - - } else { - - // Restart binary (Linux and UNIX) - file, _ := os.Executable() - err = os.RemoveAll(oldBinary) - if err != nil { - fmt.Println(err) - } - err = syscall.Exec(file, os.Args, os.Environ()) - if err != nil { - restorOldBinary(oldBinary, newBinary) - log.Fatal(err) - return err - } - - } - - } - - return -} - -func start(args ...string) (p *os.Process, err error) { - - if args[0], err = exec.LookPath(args[0]); err == nil { - //fmt.Println(args[0]) - var procAttr os.ProcAttr - procAttr.Files = []*os.File{os.Stdin, os.Stdout, os.Stderr} - p, err := os.StartProcess(args[0], args, &procAttr) - - if err == nil { - return p, nil - } - - } - - return nil, err -} - -func restorOldBinary(oldBinary, newBinary string) { - os.RemoveAll(newBinary) - os.Rename(oldBinary, newBinary) -} - -func getFilenameFromPath(path string) string { - - file := filepath.Base(path) - - return file -} - -func getPlatformPath(path string) string { - - var newPath = filepath.Dir(path) - return newPath -} - -func copyFile(src, dst string) (err error) { - in, err := os.Open(src) - if err != nil { - return err - } - defer in.Close() - - out, err := os.Create(dst) - if err != nil { - return err - } - defer out.Close() - - _, err = io.Copy(out, in) - if err != nil { - return err - } - return out.Close() -} - -func extractZIP(archive, target string) (err error) { - - reader, err := zip.OpenReader(archive) - if err != nil { - return err - } - - if err := os.MkdirAll(target, 0755); err != nil { - return err - } - - for _, file := range reader.File { - - path := filepath.Join(target, file.Name) - if file.FileInfo().IsDir() { - os.MkdirAll(path, file.Mode()) - continue - } - - fileReader, err := file.Open() - if err != nil { - return err - } - defer fileReader.Close() - - targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode()) - if err != nil { - return err - } - defer targetFile.Close() - - if _, err := io.Copy(targetFile, fileReader); err != nil { - return err - } - - } - - return -} diff --git a/src/internal/updater/checkSigning.go b/src/internal/updater/checkSigning.go new file mode 100644 index 0000000..bf31808 --- /dev/null +++ b/src/internal/updater/checkSigning.go @@ -0,0 +1,92 @@ +package up2date + +import ( + "crypto" + "crypto/rsa" + "crypto/sha256" + "crypto/x509" + "encoding/pem" + "fmt" + "io" + "os" +) + +const pubkey = `-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2ZkUyr5n1c1iSO8fMtFl +ZV1zncySavnEOOADT+1jHAJVASipxYbm+gZ9welcAl5iYZSXd0FV7uGBbU1HogIL +pl3zfRJ4xY+TmVDRGdKfnc2KMn/7aY3JdSUfSCZ+smZVvHNRWlnzVsRoYNHMe6gm +dHg50I1IgFuhdtYY4p3e4FS4SdZVNV3BJuJTaAG8viUpsoy30DnaWIBsDpX+CPjp +7ntWZPGxDxCRl011ri+DWd3dgcClDmt6YXJAzkiSnfuNqXwENu2nhFV7wCqwMmFU +nfkRuBOYqTJ3GAsAJK+HNthxWV09p9O1n1pgLpaBNcp8UosBWXH+JEJU7UKSp2u3 +bwIDAQAB +-----END PUBLIC KEY-----` + +func checkSignature(filePath string) (bool, error) { + file, err := os.Open("threadfin") + if err != nil { + return false, err + } + // Gehe zum Ende der Datei und extrahiere die letzten 256 Bytes (Signatur)# + fileInfo, err := file.Stat() + if err != nil { + fmt.Println("Fehler beim Abrufen der Dateiinformationen:", err) + return false, err + } + signatureSize := 256 // Größe der RSA Signatur in Bytes + fileSize := fileInfo.Size() + if fileSize < int64(signatureSize) { + fmt.Println("Dateigröße zu klein für Signatur") + return false, err + } + // Extrahiere die Signatur + _, err = file.Seek(-int64(signatureSize), io.SeekEnd) + if err != nil { + fmt.Println("Fehler beim Suchen der Signatur:", err) + return false, err + } + signature := make([]byte, signatureSize) + _, err = file.Read(signature) + if err != nil { + fmt.Println("Fehler beim Lesen der Signatur:", err) + return false, err + } + // Gehe zum Anfang der Datei und lese den Inhalt ohne die Signatur + _, err = file.Seek(0, io.SeekStart) + if err != nil { + fmt.Println("Fehler beim Suchen des Datei-Anfangs:", err) + return false, err + } + content := make([]byte, fileSize-int64(signatureSize)) + _, err = file.Read(content) + if err != nil { + fmt.Println("Fehler beim Lesen des Datei-Inhalts:", err) + return false, err + } + // Lade den öffentlichen Schlüssel (aus einer PEM-Datei) + block, _ := pem.Decode([]byte(pubkey)) + if block == nil || block.Type != "PUBLIC KEY" { + fmt.Println("Fehler beim Dekodieren des öffentlichen Schlüssels") + return false, err + } + pubKey, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + fmt.Println("Fehler beim Parsen des öffentlichen Schlüssels:", err) + return false, err + } + rsaPubKey, ok := pubKey.(*rsa.PublicKey) + if !ok { + fmt.Println("Öffentlicher Schlüssel ist kein RSA-Schlüssel") + return false, err + } + // Berechne den SHA-256 Hash des Inhalts ohne die Signatur + hash := sha256.Sum256(content) + // Überprüfe die Signatur + err = rsa.VerifyPKCS1v15(rsaPubKey, crypto.SHA256, hash[:], signature) + if err != nil { + fmt.Println("Signaturüberprüfung fehlgeschlagen:", err) + return false, err + } else { + fmt.Println("Signaturüberprüfung erfolgreich!") + return true, nil + } +} \ No newline at end of file diff --git a/src/internal/updater/updater.go b/src/internal/updater/updater.go new file mode 100755 index 0000000..4706e62 --- /dev/null +++ b/src/internal/updater/updater.go @@ -0,0 +1,352 @@ +package up2date + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "os/exec" + "runtime" + "strings" + "time" + + "github.com/hashicorp/go-version" +) + +// ClientInfo : Information about the key (NAME OS, ARCH, UUID, KEY) +type ClientInfo struct { + Arch string `json:"arch"` + Branch string `json:"branch"` + CMD string `json:"cmd,omitempty"` + Name string `json:"name"` + OS string `json:"os"` + URL string `json:"url"` + + Filename string `json:"filename,omitempty"` + BinaryDownloadURL string `json:"binaryDownloadURL,omitempty"` + SHA256DownloadURL string `json:"sha256DownloadURL,omitempty"` + + Response ServerResponse `json:"response,omitempty"` + + Server *http.Server +} + +// ServerResponse : Response from server after client request +type ServerResponse struct { + Status bool `json:"status,omitempty"` + Reason string `json:"reason,omitempty"` + Version string `json:"version,omitempty"` + UpdateBIN string `json:"update.url.bin,omitempty"` + UpdateZIP string `json:"update.url.zip,omitempty"` + UpdatedAt string + Assets []AssetsStruct +} + +type GithubReleaseInfo struct { + TagName string `json:"tag_name"` + Prerelease bool `json:"prerelease"` + Assets []AssetsStruct `json:"assets"` +} + +type AssetsStruct struct { + Name string `json:"name"` + DownloadUrl string `json:"browser_download_url"` + UpdatetAt string `json:"updated_at"` + ContentType string `json:"content_type"` +} + +// Init : Init +func Init(branch, name, url string) *ClientInfo { + return &ClientInfo{ + Arch: runtime.GOARCH, + Branch: branch, + Name: name, + OS: runtime.GOOS, + URL: url, + } +} + +func (c *ClientInfo) GetBinaryDownloadURL(releasesURL string) error { + //var latest string + //var bin_name string + var body []byte + + var git []*GithubReleaseInfo + + resp, err := http.Get(releasesURL) + if err != nil { + return err + } + + body, _ = io.ReadAll(resp.Body) + + err = json.Unmarshal(body, &git) + if err != nil { + return err + } + + // Get latest prerelease tag name + if c.Branch == "beta" { + for _, release := range git { + if release.Prerelease { + if c.Response.Version == "" { + c.Response.Version = release.TagName + } + c.Response.Assets = append(c.Response.Assets, release.Assets...) + } + } + } + + // Latest main tag name + if c.Branch == "master" { + for _, release := range git { + if !release.Prerelease { + if c.Response.Version == "" { + c.Response.Version = release.TagName + } + c.Response.Assets = append(c.Response.Assets, release.Assets...) + } + } + } + + // Find the download link corresponding to the OS + foundBinaryURL := false + foundSHA256URL := false + for _, asset := range c.Response.Assets { + if strings.Contains(asset.Name, c.OS) && strings.Contains(asset.Name, c.Arch) { + if strings.Contains(asset.Name, "sha256") { + c.SHA256DownloadURL = asset.DownloadUrl + foundSHA256URL = true + } else { + c.BinaryDownloadURL = asset.DownloadUrl + foundBinaryURL = true + } + if foundBinaryURL && foundSHA256URL { + c.Filename = asset.Name + c.Response.Status = true + break + } + } + } + return nil +} + +func (c *ClientInfo) ExistsNewerVersion(Version, Build string) bool { + var currentVersion = Version + "." + Build + current_version, _ := version.NewVersion(currentVersion) + response_version, _ := version.NewVersion(c.Response.Version) + if response_version == nil { + current_date := getBinaryTime() + layout := time.RFC3339 + response_date, err := time.Parse(layout, c.Response.UpdatedAt) + if err != nil { + return false + } + if current_date.Before(response_date) { + return true + } + } else if response_version.GreaterThan(current_version) && c.Response.Status { + return true + } + return false +} + +func getBinaryTime() time.Time { + executablePath, err := os.Executable() + if err != nil { + return time.Now() + } + binaryInfo, err := os.Stat(executablePath) + if err != nil { + return time.Now() + } + return binaryInfo.ModTime() +} + +func (c *ClientInfo) DoUpdateNew() error { + client := &http.Client{ + CheckRedirect: func(req *http.Request, via []*http.Request) error { + // Allow up to 10 redirects + if len(via) >= 10 { + return http.ErrUseLastResponse + } + return nil + }, + } + + resp, err := client.Get(c.BinaryDownloadURL) + if err != nil { + return err + } + defer resp.Body.Close() + + // Create a temporary file to save the new binary + tmpBinary, err := os.CreateTemp("", c.Filename) + if err != nil { + return err + } + + buf := make ([]byte, 128 * 1024) + for { + n , err := resp.Body.Read(buf) + if err != nil && err != io.EOF { + return err + } + if n == 0 { + break + } + + if _, err := tmpBinary.Write(buf[:n]); err != nil { + return err + } + } + + // Close the file explicitly + tmpBinary.Close() + + if err := c.verifyChecksum(tmpBinary.Name()); err != nil { + os.Remove(tmpBinary.Name()) + return err + } + + // Check the signature + if ok, err := checkSignature(tmpBinary.Name()); !ok { + return err + } + + // Get the current executable + exePath, err := os.Executable() + if err != nil { + os.Remove(tmpBinary.Name()) + return err + } + + // Get the stat from the current executable + oldExeInfo, err := os.Stat(exePath) + if err != nil { + os.Remove(tmpBinary.Name()) + return err + } + + // Set attributes of the new executable + if err := os.Chmod(tmpBinary.Name(), oldExeInfo.Mode()); err != nil { + os.Remove(tmpBinary.Name()) + return err + } + + // Backup the old executable + backupPath := os.TempDir() + string(os.PathSeparator) + c.Filename + ".old" + _ = os.Remove(backupPath) + + // Move the existing executable + err = os.Rename(exePath, backupPath) + if err != nil { + os.Remove(tmpBinary.Name()) + return err + } + + // Move the new executable + if err := os.Rename(tmpBinary.Name(), exePath); err != nil { + copyFile(backupPath, exePath) + return err + } + + // Stop the webserver + if err = shutdownWebserver(c.Server); err != nil { + return err + } + + // Restart the application + restartApplication(exePath, os.Args, os.Environ()) + + return nil +} + +func shutdownWebserver(server *http.Server) error { + if server != nil { + ctx, cancel := context.WithTimeout(context.Background(), 25*time.Second) + defer cancel() + err := server.Shutdown(ctx) + if err != nil { + return err + } + } + return nil +} + +func restartApplication(exePath string, args []string, env []string) error { + + cmd := exec.Command(exePath, args[1:]...) // Pass all arguments except the first one (which is the executable path) + cmd.Env = env + err := cmd.Start() // Start the new executable + if err != nil { + return err + } + + if runtime.GOOS == "windows" { + + var pid = os.Getpid() + var process, _ = os.FindProcess(pid) + + process.Kill() // Kill this instance of the application + process.Wait() + } else { + os.Exit(0) // Stop this instance of the application + } + return nil +} + +func copyFile(src, dst string) error { + sourceFile, err := os.Open(src) + if err != nil { + return err + } + defer sourceFile.Close() + + destinationFile, err := os.Create(dst) + if err != nil { + return err + } + defer destinationFile.Close() + + _, err = io.Copy(destinationFile, sourceFile) + return err +} + +func (c *ClientInfo) verifyChecksum(filePath string) error { + // Download the expected checksum + if c.SHA256DownloadURL == "" { + return fmt.Errorf("no URL for the checksum") + } + resp, err := http.Get(c.SHA256DownloadURL) + if err != nil { + return err + } + defer resp.Body.Close() + + var expectedChecksum string + if _, err := fmt.Fscan(resp.Body, &expectedChecksum); err != nil { + return err + } + + file, err := os.Open(filePath) + if err != nil { + return err + } + defer file.Close() + + hash := sha256.New() + if _, err := io.Copy(hash, file); err != nil { + return err + } + calculatedChecksum := hex.EncodeToString(hash.Sum(nil)) + + if calculatedChecksum != expectedChecksum { + return fmt.Errorf("checksum verification failed: expected %s, got %s", expectedChecksum, calculatedChecksum) + } + return nil +} \ No newline at end of file diff --git a/src/provider.go b/src/provider.go index 2e3bc0f..b567cc0 100644 --- a/src/provider.go +++ b/src/provider.go @@ -305,7 +305,16 @@ func downloadFileFromServer(providerURL string, proxyUrl string) (filename strin return } - httpClient := &http.Client{} + httpClient := &http.Client{ + Timeout: 30 * time.Second, + CheckRedirect: func(req *http.Request, via []*http.Request) error { + // Allow up to 10 redirects + if len(via) >= 10 { + return http.ErrUseLastResponse + } + return nil + }, + } if proxyUrl != "" { proxyURL, err := url.Parse(proxyUrl) @@ -320,15 +329,23 @@ func downloadFileFromServer(providerURL string, proxyUrl string) (filename strin } } - resp, err := httpClient.Get(providerURL) + // Create a Request to set headers + req, err := http.NewRequest("GET", providerURL, nil) + if err != nil { + return + } + + req.Header.Set("User-Agent", Settings.UserAgent) + req.Header.Set("Accept", "*/*") + req.Header.Set("Accept-Encoding", "gzip,deflate") + + resp, err := httpClient.Do(req) if err != nil { return } defer resp.Body.Close() - resp.Header.Set("User-Agent", Settings.UserAgent) - if resp.StatusCode != http.StatusOK { err = fmt.Errorf("%d: %s %s", resp.StatusCode, providerURL, http.StatusText(resp.StatusCode)) return diff --git a/src/serveStream.go b/src/serveStream.go deleted file mode 100644 index a3fbb35..0000000 --- a/src/serveStream.go +++ /dev/null @@ -1,723 +0,0 @@ -package src - -import ( - "context" - "fmt" - "io/fs" - "net/http" - "os" - "os/exec" - "path/filepath" - "sort" - "strconv" - "strings" - "syscall" - "time" - - "github.com/google/uuid" - "github.com/avfs/avfs" - "github.com/avfs/avfs/vfs/memfs" - "github.com/avfs/avfs/vfs/osfs" -) - -/* -NewStreamManager creates and returns a new StreamManager struct and will check permanently the errorChan of the struct -*/ -func NewStreamManager() *StreamManager { - sm := &StreamManager{ - Playlists: map[string]*Playlist{}, - errorChan: make(chan ErrorInfo), - stopChan: make(chan bool), - FileSystem: nil, - } - - // Start a go routine that will check for the error channel - go func() { - for { - select { - case errorInfo := <-sm.errorChan: - stream := errorInfo.Stream - if errorInfo.BufferClosed && !stream.DoAutoReconnect { - ShowError(errorInfo.Error, errorInfo.ErrorCode) - } else { - ShowDebug(errorInfo.Error.Error(), 3) - } - _, streamID := sm.GetPlaylistIDandStreamID(stream) - if errorInfo.ClientID != "" { - // Client specifc errors - errorInfo.Stream.RemoveClientFromStream(streamID, errorInfo.ClientID) - } else { - // Buffer disconnect error - clients := stream.Clients - if len(clients) > 0 && errorInfo.BufferClosed { - if stream.DoAutoReconnect && stream.Buffer.IsThirdPartyBuffer { - stream.Buffer.StartBuffer(stream) - } else { - stream.StopStream(streamID) - } - } - } - case <-sm.stopChan: - return - } - } - }() - return sm -} - -/* -StartStream starts the ffmpeg process for buffering a stream -It will check if the stream already exists -*/ -func (sm *StreamManager) StartStream(streamInfo StreamInfo, w http.ResponseWriter) (clientID string, playlistID string) { - sm.mu.Lock() - defer sm.mu.Unlock() - - // get the playlist ID from stream info - playlistID = streamInfo.PlaylistID - // generate new client ID - clientID = uuid.New().String() - // set URL ID as stream ID - streamID := streamInfo.URLid - - // check if playlist already exists - _, exists := sm.Playlists[playlistID] - if !exists { - // create a new one - playlist := &Playlist{ - Name: getProviderParameter(playlistID, GetPlaylistType(playlistID), "name"), - Streams: make(map[string]*Stream), - } - // add the playlist to the map - sm.Playlists[playlistID] = playlist - - // check if a new stream is possible - if IsNewStreamPossible(sm, streamInfo, w) { - // create a new buffer and add the stream to the map within the new playlist - sm.Playlists[playlistID].Streams[streamID] = CreateStream(streamInfo, sm.FileSystem, sm.errorChan) - if sm.Playlists[playlistID].Streams[streamID] == nil { - return "", "" - } - ShowInfo(fmt.Sprintf("Streaming:Started streaming for %s", streamID)) - } else { - return "", "" - } - } else { - // check if the stream already exists - stream, exists := sm.Playlists[playlistID].Streams[streamID] - if !exists { - // check if a new stream is possible - if IsNewStreamPossible(sm, streamInfo, w) { - // create a new buffer and add the stream to the map within the existing playlist - sm.Playlists[playlistID].Streams[streamID] = CreateStream(streamInfo, sm.FileSystem, sm.errorChan) - ShowInfo(fmt.Sprintf("Streaming:Started streaming for %s", streamID)) - } else { - return "", "" - } - } else { - // Here we can check if multiple clients for one stream is allowed! - ShowInfo(fmt.Sprintf("Streaming:Client joined %s, total: %d", streamID, len(stream.Clients)+1)) - } - } - return -} - -func InitBufferVFS(virtual bool) avfs.VFS { - if virtual { - return memfs.New() - } else { - return osfs.New() - } -} - -/* -CreateStream will create and return a new Stream struct, it will also start the new buffer. -*/ -func CreateStream(streamInfo StreamInfo, fileSystem avfs.VFS, errorChan chan ErrorInfo) *Stream { - ctx, cancel := context.WithCancel(context.Background()) - folder := System.Folder.Temp + streamInfo.PlaylistID + string(os.PathSeparator) + streamInfo.URLid - stream := &Stream{ - Name: streamInfo.Name, - Buffer: &Buffer{Config: &BufferConfig{}, FileSystem: fileSystem}, - ErrorChan: errorChan, - Ctx: ctx, - Cancel: cancel, - URL: streamInfo.URL, - BackupChannel1URL: streamInfo.BackupChannel1URL, - BackupChannel2URL: streamInfo.BackupChannel2URL, - BackupChannel3URL: streamInfo.BackupChannel3URL, - Folder: folder, - Clients: make(map[string]Client), - BackupNumber: 0, - UseBackup: false, - DoAutoReconnect: Settings.BufferAutoReconnect, - } - stream.Buffer.StartBuffer(stream) - if stream.Buffer == nil { - return nil - } - return stream -} - -/* -IsNewStreamPossible reports whether there is a new connection allowed -*/ -func IsNewStreamPossible(sm *StreamManager, streamInfo StreamInfo, w http.ResponseWriter) bool { - playlistID := streamInfo.PlaylistID - if len(sm.Playlists[playlistID].Streams) < GetTuner(playlistID, GetPlaylistType(playlistID)) { - return true - } else { - HandleStreamLimit(w) - return false - } -} - -/* -GetStreamLimitContent will check if there is already a custuom video that will be provided to client. - -Otherwise it will check if there has been uploaded a image that will be converted into an video. -Finally it will provide either the default content or the new content. -*/ -func GetStreamLimitContent() ([]byte, bool) { - var content []byte - var contentOk bool - imageFileList, err := os.ReadDir(System.Folder.Custom) - if err != nil { - ShowError(err, 0) - } - fileList, err := os.ReadDir(System.Folder.Video) - if err == nil { - createContent := ShouldCreateContent(fileList) - if createContent && len(imageFileList) > 0 { - err := CreateAlternativNoMoreStreamsVideo(System.Folder.Custom + imageFileList[0].Name()) - if err == nil { - contentOk = true - } else { - ShowError(err, 0) - return nil, false - } - content, err = os.ReadFile(System.Folder.Video + fileList[0].Name()) - if err != nil { - ShowError(err, 0) - } - contentOk = true - } - } - if !contentOk { - if value, ok := webUI["html/video/stream-limit.ts"]; ok && !contentOk { - contentOk = true - content = GetHTMLString(value.(string)) - } - } - return content, contentOk -} - -/* -HandleStreamLimit sends an info to the client that the stream limit has been reached. -The content that will provided to client will be fetched with GetStreamLimitContent() function -*/ -func HandleStreamLimit(w http.ResponseWriter) { - ShowInfo("Streaming Status: No new connections available. Tuner limit reached.") - content, contentOk := GetStreamLimitContent() - if contentOk { - w.Header().Set("Content-type", "video/mpeg") - w.WriteHeader(http.StatusOK) - for i := 0; i < 600; i++ { - if _, err := w.Write(content); err != nil { - ShowError(err, 0) - return - } - time.Sleep(100 * time.Millisecond) - } - } -} - -/* -ShouldCreateContent reports whether a new video file shall be created. -It removes existing files if necessary. -*/ -func ShouldCreateContent(fileList []fs.DirEntry) bool { - switch len(fileList) { - case 0: - return true - case 1: - return false - default: - for _, file := range fileList { - os.Remove(System.Folder.Video + file.Name()) - } - return true - } -} - -/* -GetTuner returns the maximum number of connections for a playlist. -It will check if the buffer type is matching the third party buffers -*/ -func GetTuner(id, playlistType string) (tuner int) { - switch Settings.Buffer { - case "-": - tuner = Settings.Tuner - - case "ffmpeg", "vlc", "threadfin": - i, err := strconv.Atoi(getProviderParameter(id, playlistType, "tuner")) - if err == nil { - tuner = i - } else { - ShowError(err, 0) - tuner = 1 - } - } - return -} - -/* -GetPlaylistType returns the type of the playlist based on the playlist ID -*/ -func GetPlaylistType(playlistID string) string { - switch playlistID[0:1] { - case "M": - return "m3u" - case "H": - return "hdhr" - default: - return "" - } -} - -/* -CreateAlternativNoMoreStreamsVideo generates a new video file based on the image provided as path to it. -It will use the third party tool defined in the settings and starts a process for generating the video file -*/ -func CreateAlternativNoMoreStreamsVideo(pathToFile string) error { - cmd := new(exec.Cmd) - path, arguments := prepareArguments(pathToFile) - if len(arguments) == 0 { - if _, err := os.Stat(Settings.FFmpegPath); err != nil { - return fmt.Errorf("ffmpeg path is not valid. Can not convert custom image to video") - } - } - - cmd = exec.Command(path, arguments...) - - if len(cmd.Args) > 0 && path != "" { - ShowInfo("Streaming Status:Creating video from uploaded image for a customized no more stream video") - err := cmd.Run() - if err != nil { - return err - } - ShowInfo("Streaming Status:Successfully created video from custom image") - return nil - } else { - return fmt.Errorf("path for third party tool ") - } -} - -// TODO: Add description -func prepareArguments(pathToFile string) (string, []string) { - switch Settings.Buffer { - case "ffmpeg", "threadfin", "-": - return Settings.FFmpegPath, []string{"--no-audio", "--loop", "--sout", fmt.Sprintf("'#transcode{vcodec=h264,vb=1024,scale=1,width=1920,height=1080,acodec=none,venc=x264{preset=ultrafast}}:standard{access=file,mux=ts,dst=%sstream-limit.ts}'", System.Folder.Video), System.Folder.Video, pathToFile} - case "vlc": - return Settings.VLCPath, []string{"-loop", "1", "-i", pathToFile, "-c:v", "libx264", "-t", "1", "-pix_fmt", "yuv420p", "-vf", "scale=1920:1080", fmt.Sprintf("%sstream-limit.ts", System.Folder.Video)} - default: - return "", []string{} - } -} - -/* -StopStream stops the third party tool process when there are no more clients receiving the stream -*/ -func (sm *StreamManager) StopStream(playlistID string, streamID string, clientID string) { - sm.mu.Lock() - defer sm.mu.Unlock() - - playlist, exists := sm.Playlists[playlistID] - if exists { - if stream, exists := playlist.Streams[streamID]; exists { - if client, exists := stream.Clients[clientID]; exists { - CloseClientConnection(client.w) - delete(stream.Clients, clientID) - ShowInfo(fmt.Sprintf("Streaming:Client left %s, total: %d", streamID, len(stream.Clients))) - if len(stream.Clients) == 0 { - stream.Cancel() // Tell everyone about the ending of the stream - if stream.Buffer.IsThirdPartyBuffer { - stream.Buffer.Cmd.Process.Signal(syscall.SIGKILL) // Kill the third party tool process - stream.Buffer.Cmd.Wait() - DeletPIDfromDisc(fmt.Sprintf("%d", stream.Buffer.Cmd.Process.Pid)) // Delete the PID since the process has been terminated - } else { - close(stream.Buffer.StopChan) - } - - ShowInfo(fmt.Sprintf("Streaming:Stopped streaming for %s", streamID)) - var debug = fmt.Sprintf("Streaming:Remove temporary files (%s)", stream.Folder) - ShowDebug(debug, 1) - - debug = fmt.Sprintf("Streaming:Remove tmp folder %s", stream.Folder) - ShowDebug(debug, 1) - - if err := sm.FileSystem.RemoveAll(stream.Folder); err != nil { - ShowError(err, 4005) - } - delete(sm.Playlists[playlistID].Streams, streamID) - } - } - } - if len(sm.Playlists[playlistID].Streams) == 0 { - delete(sm.Playlists, playlistID) - } - } -} - -func CloseClientConnection(w http.ResponseWriter) { - // Set the header - w.Header().Set("Connection", "close") - // Close the connection explicitly - if flusher, ok := w.(http.Flusher); ok { - flusher.Flush() - } - if hijacker, ok := w.(http.Hijacker); ok { - conn, _, err := hijacker.Hijack() - if err == nil { - conn.Close() - } - } -} - -func (sm *StreamManager) StopAllStreams() { - for _, playlist := range sm.Playlists { - for streamID, stream := range playlist.Streams { - stream.StopStream(streamID) - } - } -} - -/* -ServeStream will ensure that the clients is getting the stream requested -*/ -func (sm *StreamManager) ServeStream(streamInfo StreamInfo, w http.ResponseWriter, r *http.Request) { - - if sm.LockAgainstNewStreams { - return - } - - // Initialize buffer file system - if sm.FileSystem == nil { - sm.FileSystem = InitBufferVFS(Settings.StoreBufferInRAM) - } - - clientID, playlistID := sm.StartStream(streamInfo, w) - if clientID == "" || playlistID == "" { - if sm.Playlists[streamInfo.PlaylistID].Streams[streamInfo.URLid] == nil { - delete(sm.Playlists, streamInfo.PlaylistID) - } - return - } - defer sm.StopStream(playlistID, streamInfo.URLid, clientID) - - // Add a new client to the client map - client := &Client{ - r: r, - w: w, - } - stream := sm.Playlists[playlistID].Streams[streamInfo.URLid] - stream.Clients[clientID] = *client - - // If it was the first client start t - if len(stream.Clients) == 1 { - // Send Data to the clients, this should run only once per stream - go stream.SendData() - } - - // Wait for the client context to get closed - <-r.Context().Done() -} - -/* -GetPlaylistIDandStreamID retrieves the playlist ID and the stream ID from the given stream -*/ -func (sm *StreamManager) GetPlaylistIDandStreamID(stream *Stream) (string, string) { - for playlistID, playlist := range sm.Playlists { - for streamID, tmpStream := range playlist.Streams { - if tmpStream.Name == stream.Name { - return playlistID, streamID - } - } - } - ShowDebug("Streaming:Could not get playlist ID and stream ID", 3) - return "", "" -} - -/* -SendData sends Data to the clients connected to the stream -With errorChan it reports occuring errors to the StreamManager instance -*/ -func (s *Stream) SendData() { - var oldSegments []string - - for { - select { - case <- s.Ctx.Done(): - return - default: - tmpFiles := s.GetBufTmpFiles() - for _, f := range tmpFiles { - if ok, err := s.CheckBufferFolder(); !ok { - s.ReportError(err, BufferFolderError, "", true) - return - } - oldSegments = append(oldSegments, f) - ShowDebug(fmt.Sprintf("Streaming:Sending file %s to clients", f), 1) - s.SendFileToClients(f) - if s.GetBufferedSize() > Settings.BufferSize * 1024 { - s.DeleteOldestSegment(oldSegments[0]) - oldSegments = oldSegments[1:] - } - } - if len(tmpFiles) == 0 { - time.Sleep(5 * time.Millisecond) // This will ensure that streams will synchronize over the time - } - } - } -} - -func (s *Stream) GetBufferedSize() (size int) { - size = 0 - var tmpFolder = s.Folder + string(os.PathSeparator) - if _, err := s.Buffer.FileSystem.Stat(tmpFolder); !fsIsNotExistErr(err) { - - files, err := s.Buffer.FileSystem.ReadDir(getPlatformPath(tmpFolder)) - if err != nil { - ShowError(err, 000) - return - } - for _, file := range files { - if !file.IsDir() && filepath.Ext(file.Name()) == ".ts" { - file_info, err := s.Buffer.FileSystem.Stat(getPlatformFile(tmpFolder + file.Name())) - if err == nil { - size += int(file_info.Size()) - } - } - } - } - return size -} - -/* -GetBufTmpFiles retrieves the files within the buffer folder -and returns a sorted list with the file names -*/ -func (s *Stream) GetBufTmpFiles() (tmpFiles []string) { - - var tmpFolder = s.Folder + string(os.PathSeparator) - var fileIDs []float64 - - if _, err := s.Buffer.FileSystem.Stat(tmpFolder); !fsIsNotExistErr(err) { - - files, err := s.Buffer.FileSystem.ReadDir(getPlatformPath(tmpFolder)) - if err != nil { - ShowError(err, 000) - return - } - - // Check if more then one file is available - if len(files) > 1 { - // Iterate over the files and collect the IDs - for _, file := range files { - if !file.IsDir() && filepath.Ext(file.Name()) == ".ts" { - fileID := strings.TrimSuffix(file.Name(), ".ts") - if f, err := strconv.ParseFloat(fileID, 64); err == nil { - fileIDs = append(fileIDs, f) - } - } - } - - sort.Float64s(fileIDs) - if len(fileIDs) > 0 { - fileIDs = fileIDs[:len(fileIDs)-1] - } - - // Create the return array with the sorted files - for _, file := range fileIDs { - fileName := fmt.Sprintf("%.0f.ts", file) - // Check if the file is already within old segments array - if !ContainsString(s.OldSegments, fileName) { - tmpFiles = append(tmpFiles, fileName) - s.OldSegments = append(s.OldSegments, fileName) - } - } - } - } - return -} - -/* -DeleteOldesSegment will delete the file provided in the buffer -*/ -func (s *Stream) DeleteOldestSegment(oldSegment string) { - fileToRemove := s.Folder + string(os.PathSeparator) + oldSegment - if err := s.Buffer.FileSystem.RemoveAll(getPlatformFile(fileToRemove)); err != nil { - ShowError(err, 4007) - } -} - -/* -CheckBufferFolder reports whether the buffer folder exists. -*/ -func (s *Stream) CheckBufferFolder() (bool, error) { - if _, err := s.Buffer.FileSystem.Stat(s.Folder); fsIsNotExistErr(err) { - return false, err - } - return true, nil -} - -// CheckBufferedFile check for the existance of the given file (file path is needed) -func (s *Stream) CheckBufferedFile(file string) (bool, error) { - if _, err := s.Buffer.FileSystem.Stat(file); fsIsNotExistErr(err) { - return false, err - } - return true, nil -} - -/* -SendFileToClients reports whether sending the File to the clients was successful -It will also use the errorChan to report to the StreamManager if there is an error sending the file to a specifc client -*/ -func (s *Stream) SendFileToClients(fileName string) { - var filePath string = fmt.Sprint(s.Folder + string(os.PathSeparator) + fileName) - if ok, err := s.CheckBufferedFile(filePath); !ok { - s.ReportError(err, 4019, "", false) - return - } - file, err := s.Buffer.FileSystem.Open(filePath) - if err != nil { - s.ReportError(err, OpenFileError, "", false) - return - } - defer file.Close() - l, err := file.Stat() - if err != nil { - s.ReportError(err, FileStatError, "", false) - return - } - buffer := make([]byte, l.Size()) - if _, err := file.Read(buffer); err != nil { - s.ReportError(err, ReadFileError, "", false) - return - } - for clientID, client := range s.Clients { - ShowDebug(fmt.Sprintf("Streaming:Sending file %s to client %s", fileName, clientID), 3) - if _, err := client.w.Write(buffer); err != nil { - s.ReportError(fmt.Errorf("Streaming:Error when trying to send file to client %s", clientID), SendFileError, clientID, false) - } - } -} - -func (s *Stream) ReportError(err error, errCode int, clientID string, closed bool) { - s.ErrorChan <- ErrorInfo{err, errCode, s, clientID, closed} -} - -func (s *Stream) StopStream(streamID string) { - for clientID, client := range s.Clients { - CloseClientConnection(client.w) - delete(s.Clients, clientID) - ShowInfo(fmt.Sprintf("Streaming:Client kicked %s, total: %d", streamID, len(s.Clients))) - if len(s.Clients) == 0 { - s.Cancel() // Tell everyone about the ending of the stream - if s.Buffer.IsThirdPartyBuffer { - s.Buffer.Cmd.Process.Signal(syscall.SIGKILL) // Kill the third party tool process - s.Buffer.Cmd.Wait() - DeletPIDfromDisc(fmt.Sprintf("%d", s.Buffer.Cmd.Process.Pid)) // Delete the PID since the process has been terminated - } else { - close(s.Buffer.StopChan) - } - } - } -} - -func (s *Stream) RemoveClientFromStream(streamID, clientID string) { - if client, exists := s.Clients[clientID]; exists { - CloseClientConnection(client.w) - delete(s.Clients, clientID) - ShowInfo(fmt.Sprintf("Streaming:Removed client from %s, total: %d", streamID, len(s.Clients))) - } -} - -/* -UpdateStreamURLForBackup will set the ther stream url when a backup will be used -*/ -func (s *Stream) UpdateStreamURLForBackup() { - switch s.BackupNumber { - case 1: - s.URL = s.BackupChannel1URL - ShowHighlight("START OF BACKUP 1 STREAM") - ShowInfo("Backup Channel 1 URL: " + s.URL) - case 2: - s.URL = s.BackupChannel2URL - ShowHighlight("START OF BACKUP 2 STREAM") - ShowInfo("Backup Channel 2 URL: " + s.URL) - case 3: - s.URL = s.BackupChannel3URL - ShowHighlight("START OF BACKUP 3 STREAM") - ShowInfo("Backup Channel 3 URL: " + s.URL) - } -} - -/* -HandleBufferError will retry running the Buffer function with the next backup number -*/ -func (s *Stream) handleBufferError(err error) { - ShowError(err, 4011) - if !s.UseBackup || (s.UseBackup && s.BackupNumber >= 0 && s.BackupNumber <= 3) { - s.BackupNumber++ - if s.BackupChannel1URL != "" || s.BackupChannel2URL != "" || s.BackupChannel3URL != "" { - s.UseBackup = true - s.UpdateStreamURLForBackup() - s.Buffer.StartBuffer(s) - } - } -} - -/* -GetCurrentlyUsedChannels will extract and fill the data into the response struct about the currently active playlists and channels -*/ -func GetCurrentlyUsedChannels(sm *StreamManager, response *APIResponseStruct) error { - // should be nil but its always better to check - if response.ActiveStreams == nil { - response.ActiveStreams = &ActiveStreamsStruct{ - Playlists: make(map[string]*PlaylistStruct), - } - } else if response.ActiveStreams.Playlists == nil { - response.ActiveStreams.Playlists = make(map[string]*PlaylistStruct) - } - // iterate over the playlists within the StreamManager and extract the data - for playlistID, playlist := range sm.Playlists { - // create a new ActiveStreams struct if it doesn't exist right now - if response.ActiveStreams == nil { - response.ActiveStreams = &ActiveStreamsStruct{ - Playlists: make(map[string]*PlaylistStruct), - } - } - // for every Playlist found Create a new Playlist struct and add it to the map - response.ActiveStreams.Playlists[playlistID] = CreatePlaylistStruct(playlist.Name, sm.Playlists[playlistID].Streams) - } - return nil -} - -/* -CreatePlaylistSruct will extract the info from the given Stream struct -*/ -func CreatePlaylistStruct(name string, streams map[string]*Stream) *PlaylistStruct { - var playlist = &PlaylistStruct{ - PlaylistName: name, - ActiveChannels: &[]string{}, - ClientConnections: 0, - } - - // Iterate over every stream within the map - for _, stream := range streams { - *playlist.ActiveChannels = append(*playlist.ActiveChannels, stream.Name) - playlist.ClientConnections += len(stream.Clients) - } - return playlist -} diff --git a/src/stream.go b/src/stream.go new file mode 100644 index 0000000..d8cc08e --- /dev/null +++ b/src/stream.go @@ -0,0 +1,260 @@ +package src + +import ( + "bytes" + "context" + "fmt" + "io" + "net/http" + "os" + "sync" + "time" + + "github.com/avfs/avfs" +) + +// Stream repräsentiert einen einzelnen Stream +type Stream struct { + mu sync.Mutex + Name string + Clients map[string]*Client + Buffer BufferInterface + ErrorChan chan ErrorInfo + Ctx context.Context + Cancel context.CancelFunc + + Folder string + URL string + BackupChannel1URL string + BackupChannel2URL string + BackupChannel3URL string + UseBackup bool + BackupNumber int + DoAutoReconnect bool + + StopTimer *time.Timer + TimerCancel context.CancelFunc +} + +type Client struct { + w http.ResponseWriter + r *http.Request + buffer *bytes.Buffer + flushChannel chan struct{} + doneChannel chan struct{} +} + +type ErrorInfo struct { + Error error + ErrorCode int + Stream *Stream + ClientID string + BufferClosed bool +} + +/* +CreateStream will create and return a new Stream struct, it will also start the new buffer. +*/ +func CreateStream(streamInfo *StreamInfo, fileSystem avfs.VFS, errorChan chan ErrorInfo) *Stream { + ctx, cancel := context.WithCancel(context.Background()) + folder := System.Folder.Temp + streamInfo.PlaylistID + string(os.PathSeparator) + streamInfo.URLid + pipeReader, pipeWriter := io.Pipe() + streamBuffer := StreamBuffer{ + FileSystem: fileSystem, + PipeWriter: pipeWriter, + PipeReader: pipeReader, + StopChan: make(chan struct{}), + CloseChan: make(chan struct{}), + } + var buffer BufferInterface + switch Settings.Buffer { + case "vlc", "ffmpeg": + buffer = &ThirdPartyBuffer{ + StreamBuffer: streamBuffer, + } + case "threadfin": + buffer = &ThreadfinBuffer{ + StreamBuffer: streamBuffer, + } + default: + cancel() + return nil + } + + stream := &Stream{ + Name: streamInfo.Name, + Buffer: buffer, + ErrorChan: errorChan, + Ctx: ctx, + Cancel: cancel, + URL: streamInfo.URL, + BackupChannel1URL: streamInfo.BackupChannel1URL, + BackupChannel2URL: streamInfo.BackupChannel2URL, + BackupChannel3URL: streamInfo.BackupChannel3URL, + Folder: folder, + Clients: make(map[string]*Client), + BackupNumber: 0, + UseBackup: false, + DoAutoReconnect: Settings.BufferAutoReconnect, + } + if err := buffer.StartBuffer(stream); err != nil { + return nil + } + go buffer.addBufferedFilesToPipe() + return stream +} + +func CreateTunerLimitReachedStream() *Stream { + ctx, cancel := context.WithCancel(context.Background()) + // Create a minimal Stream object + pipeReader, pipeWriter := io.Pipe() + streamBuffer := &StreamBuffer{ + PipeWriter: pipeWriter, + PipeReader: pipeReader, + StopChan: make(chan struct{}), + CloseChan: make(chan struct{}), + } + var buffer BufferInterface = streamBuffer + stream := &Stream{ + Clients: make(map[string]*Client), + Buffer: buffer, + Name: "Tuner limit reached", + Ctx: ctx, + Cancel: cancel, + DoAutoReconnect: false, + Folder: "", + } + streamBuffer.Stream = stream + + return stream +} + +func CloseClientConnection(w http.ResponseWriter) { + // Set the header + w.Header().Set("Connection", "close") + // Close the connection explicitly + if flusher, ok := w.(http.Flusher); ok { + flusher.Flush() + } + if hijacker, ok := w.(http.Hijacker); ok { + conn, _, err := hijacker.Hijack() + if err == nil { + conn.Close() + } + } +} + +func (s *Stream) Broadcast() { + buffer := make([]byte, 4096) + var stopChan chan struct{} = s.Buffer.GetStopChan() + var pipeReader *io.PipeReader = s.Buffer.GetPipeReader() + for { + select { + case <- stopChan: + // Pipe was closed stop reading from it! + return + default: + n, err := pipeReader.Read(buffer) + if err != nil { + if err != io.EOF { + fmt.Printf("Streaming:Error when reading from pipe: %v\n", err) + } + break + } + + s.mu.Lock() + for clientID, client := range s.Clients { + client.buffer.Write(buffer[:n]) + select { + case client.flushChannel <- struct{}{}: + <-client.doneChannel + default: + // Skip sending if the channel is full + ShowDebug(fmt.Sprintf("Skipped sending data to client: %s", clientID), 3) + } + } + s.mu.Unlock() + } + } +} + +func (s *Stream) handleClientWrites(client *Client) { + for { + select { + case <-client.flushChannel: + client.buffer.WriteTo(client.w) + if flusher, ok := client.w.(http.Flusher); ok { + flusher.Flush() + } + client.doneChannel <- struct{}{} + case <-client.r.Context().Done(): + return + } + } +} + +func (s *Stream) ReportError(err error, errCode int, clientID string, closed bool) { + s.ErrorChan <- ErrorInfo{err, errCode, s, clientID, closed} +} + +func (s *Stream) StopStream(streamID string) { + var pipeWriter *io.PipeWriter + switch buffer := s.Buffer.(type) { + case *ThirdPartyBuffer: + pipeWriter = buffer.PipeWriter + } + pipeWriter.Close() + for clientID, client := range s.Clients { + CloseClientConnection(client.w) + delete(s.Clients, clientID) + ShowInfo(fmt.Sprintf("Streaming:Client kicked %s, total: %d", streamID, len(s.Clients))) + if len(s.Clients) == 0 { + s.Cancel() // Tell everyone about the ending of the stream + s.Buffer.CloseBuffer() + } + } +} + +func (s *Stream) RemoveClientFromStream(streamID, clientID string) { + s.Buffer.(*StreamBuffer).PipeWriter.Close() + if client, exists := s.Clients[clientID]; exists { + CloseClientConnection(client.w) + delete(s.Clients, clientID) + ShowInfo(fmt.Sprintf("Streaming:Removed client from %s, total: %d", streamID, len(s.Clients))) + } +} + +/* +UpdateStreamURLForBackup will set the ther stream url when a backup will be used +*/ +func (s *Stream) UpdateStreamURLForBackup() { + switch s.BackupNumber { + case 1: + s.URL = s.BackupChannel1URL + ShowHighlight("START OF BACKUP 1 STREAM") + ShowInfo("Backup Channel 1 URL: " + s.URL) + case 2: + s.URL = s.BackupChannel2URL + ShowHighlight("START OF BACKUP 2 STREAM") + ShowInfo("Backup Channel 2 URL: " + s.URL) + case 3: + s.URL = s.BackupChannel3URL + ShowHighlight("START OF BACKUP 3 STREAM") + ShowInfo("Backup Channel 3 URL: " + s.URL) + } +} + +/* +HandleBufferError will retry running the Buffer function with the next backup number +*/ +func (s *Stream) handleBufferError(err error) { + ShowError(err, 4011) + if !s.UseBackup || (s.UseBackup && s.BackupNumber >= 0 && s.BackupNumber <= 3) { + s.BackupNumber++ + if s.BackupChannel1URL != "" || s.BackupChannel2URL != "" || s.BackupChannel3URL != "" { + s.UseBackup = true + s.UpdateStreamURLForBackup() + s.Buffer.StartBuffer(s) + } + } +} diff --git a/src/streamManager.go b/src/streamManager.go new file mode 100644 index 0000000..3924f07 --- /dev/null +++ b/src/streamManager.go @@ -0,0 +1,490 @@ +package src + +import ( + "bytes" + "fmt" + "io/fs" + "net/http" + "os" + "os/exec" + "strconv" + "sync" + "time" + + "github.com/avfs/avfs" + "github.com/avfs/avfs/vfs/memfs" + "github.com/avfs/avfs/vfs/osfs" + "github.com/google/uuid" +) + +// StreamManager verwaltet die Streams und ffmpeg-Prozesse +type StreamManager struct { + Playlists map[string]*Playlist + errorChan chan ErrorInfo + stopChan chan bool + LockAgainstNewStreams bool + FileSystem avfs.VFS + mu sync.Mutex +} + +type Playlist struct { + Name string + Streams map[string]*Stream +} + +/* +NewStreamManager creates and returns a new StreamManager struct and will check permanently the errorChan of the struct +*/ +func NewStreamManager() *StreamManager { + sm := &StreamManager{ + Playlists: map[string]*Playlist{}, + errorChan: make(chan ErrorInfo), + stopChan: make(chan bool), + FileSystem: nil, + } + + // Start a go routine that will check for the error channel + go func() { + for { + select { + case errorInfo := <-sm.errorChan: + stream := errorInfo.Stream + if errorInfo.BufferClosed && !stream.DoAutoReconnect { + ShowError(errorInfo.Error, errorInfo.ErrorCode) + } else { + ShowDebug(errorInfo.Error.Error(), 3) + } + _, streamID := sm.GetPlaylistIDandStreamID(stream) + if errorInfo.ClientID != "" { + // Client specifc errors + errorInfo.Stream.RemoveClientFromStream(streamID, errorInfo.ClientID) + } else { + // Buffer disconnect error + clients := stream.Clients + if len(clients) > 0 && errorInfo.BufferClosed { + if stream.DoAutoReconnect{ + if buffer, ok := stream.Buffer.(*ThirdPartyBuffer); ok { + buffer.StartBuffer(stream) + continue + } + } + stream.StopStream(streamID) + } + } + case <-sm.stopChan: + return + } + } + }() + return sm +} + +/* +StartStream starts the ffmpeg process for buffering a stream +It will check if the stream already exists +*/ +func (sm *StreamManager) StartStream(streamInfo *StreamInfo) (clientID string, playlistID string) { + sm.mu.Lock() + defer sm.mu.Unlock() + + // get the playlist ID from stream info + playlistID = streamInfo.PlaylistID + // generate new client ID + clientID = uuid.New().String() + // set URL ID as stream ID + streamID := streamInfo.URLid + + // check if playlist already exists + _, exists := sm.Playlists[playlistID] + if !exists { + // create a new one + playlist := &Playlist{ + Name: getProviderParameter(playlistID, GetPlaylistType(playlistID), "name"), + Streams: make(map[string]*Stream), + } + // add the playlist to the map + sm.Playlists[playlistID] = playlist + + // check if a new stream is possible + if sm.IsNewStreamPossible(streamInfo) { + // create a new buffer and add the stream to the map within the new playlist + sm.Playlists[playlistID].Streams[streamID] = CreateStream(streamInfo, sm.FileSystem, sm.errorChan) + if sm.Playlists[playlistID].Streams[streamID] == nil { + return "", "" + } + ShowInfo(fmt.Sprintf("Streaming:Started streaming for %s", streamID)) + } else { + streamInfo.URLid = "TunerLimitReached" + if _, exists := sm.Playlists[playlistID].Streams["TunerLimitReached"]; !exists { + stream := CreateTunerLimitReachedStream() + sm.Playlists[playlistID].Streams["TunerLimitReached"] = stream + HandleStreamLimit(stream) + } + } + } else { + // check if the stream already exists + stream, exists := sm.Playlists[playlistID].Streams[streamID] + if !exists { + // check if a new stream is possible + if sm.IsNewStreamPossible(streamInfo) { + // create a new buffer and add the stream to the map within the existing playlist + sm.Playlists[playlistID].Streams[streamID] = CreateStream(streamInfo, sm.FileSystem, sm.errorChan) + ShowInfo(fmt.Sprintf("Streaming:Started streaming for %s", streamID)) + } else { + streamInfo.URLid = "TunerLimitReached" + if _, exists := sm.Playlists[playlistID].Streams["TunerLimitReached"]; !exists { + stream := CreateTunerLimitReachedStream() + sm.Playlists[playlistID].Streams["TunerLimitReached"] = stream + HandleStreamLimit(stream) + } + } + } else { + if len(stream.Clients) == 0 { + if stream.StopTimer != nil { + stream.StopTimer.Stop() + stream.StopTimer = nil + stream.TimerCancel = nil + } + stream.Buffer.SetStopChan(make(chan struct{})) + go stream.Buffer.addBufferedFilesToPipe() + } + // Here we can check if multiple clients for one stream is allowed! + ShowInfo(fmt.Sprintf("Streaming:Client joined %s, total: %d", streamID, len(stream.Clients)+1)) + } + } + return +} + +func InitBufferVFS(virtual bool) avfs.VFS { + if virtual { + return memfs.New() + } else { + return osfs.New() + } +} + +/* +IsNewStreamPossible reports whether there is a new connection allowed +*/ +func (sm *StreamManager) IsNewStreamPossible(streamInfo *StreamInfo) bool { + playlistID := streamInfo.PlaylistID + if len(sm.Playlists[playlistID].Streams) < GetTuner(playlistID, GetPlaylistType(playlistID)) { + return true + } else { + return false + } +} + +/* +StopStream stops the third party tool process when there are no more clients receiving the stream +*/ +func (sm *StreamManager) StopStream(playlistID string, streamID string, clientID string) { + sm.mu.Lock() + defer sm.mu.Unlock() + + playlist, exists := sm.Playlists[playlistID] + if exists { + if stream, exists := playlist.Streams[streamID]; exists { + if client, exists := stream.Clients[clientID]; exists { + CloseClientConnection(client.w) + delete(stream.Clients, clientID) + ShowInfo(fmt.Sprintf("Streaming:Client left %s, total: %d", streamID, len(stream.Clients))) + if len(stream.Clients) == 0 { + stream.Buffer.StopBuffer() + // Start a timer to stop the stream after a delay + cancel := func() { + sm.mu.Lock() + defer sm.mu.Unlock() + stream.Cancel() // Tell everyone about the ending of the stream + stream.Buffer.CloseBuffer() + + ShowInfo(fmt.Sprintf("Streaming:Stopped streaming for %s", streamID)) + var debug = fmt.Sprintf("Streaming:Remove temporary files (%s)", stream.Folder) + ShowDebug(debug, 1) + + debug = fmt.Sprintf("Streaming:Remove tmp folder %s", stream.Folder) + ShowDebug(debug, 1) + + if err := sm.FileSystem.RemoveAll(stream.Folder); err != nil { + ShowError(err, 4005) + } + delete(sm.Playlists[playlistID].Streams, streamID) + if len(sm.Playlists[playlistID].Streams) == 0 { + delete(sm.Playlists, playlistID) + } + } + stream.TimerCancel = cancel + stream.StopTimer = time.AfterFunc(time.Duration(Settings.BufferTerminationTimeout) * time.Second, cancel) + } + } + } + } +} + +func (sm *StreamManager) StopAllStreams() { + for _, playlist := range sm.Playlists { + for streamID, stream := range playlist.Streams { + stream.StopStream(streamID) + } + } +} + +/* +ServeStream will ensure that the clients is getting the stream requested +*/ +func (sm *StreamManager) ServeStream(streamInfo StreamInfo, w http.ResponseWriter, r *http.Request) { + + if sm.LockAgainstNewStreams { + return + } + + // Initialize buffer file system + if sm.FileSystem == nil { + sm.FileSystem = InitBufferVFS(Settings.StoreBufferInRAM) + } + + clientID, playlistID := sm.StartStream(&streamInfo) + if clientID == "" || playlistID == "" { + return + } + defer sm.StopStream(playlistID, streamInfo.URLid, clientID) + + // Add a new client to the client map + client := &Client{ + r: r, + w: w, + buffer: new(bytes.Buffer), + flushChannel: make(chan struct{}, 1), + doneChannel: make(chan struct{}, 1), + } + stream := sm.Playlists[playlistID].Streams[streamInfo.URLid] + stream.Clients[clientID] = client + + // Start a goroutine to handle writing to the client + go stream.handleClientWrites(client) + + // Make sure Broadcast is running only once + if len(stream.Clients) == 1 { + w.WriteHeader(http.StatusOK) + w.Header().Set("Content-type", "video/mpeg2ts") + go stream.Broadcast() + } + + // Wait for the client context to get closed + <-r.Context().Done() +} + +/* +GetPlaylistIDandStreamID retrieves the playlist ID and the stream ID from the given stream +*/ +func (sm *StreamManager) GetPlaylistIDandStreamID(stream *Stream) (string, string) { + for playlistID, playlist := range sm.Playlists { + for streamID, tmpStream := range playlist.Streams { + if tmpStream.Name == stream.Name { + return playlistID, streamID + } + } + } + ShowDebug("Streaming:Could not get playlist ID and stream ID", 3) + return "", "" +} + +/* +GetCurrentlyUsedChannels will extract and fill the data into the response struct about the currently active playlists and channels +*/ +func GetCurrentlyUsedChannels(sm *StreamManager, response *APIResponseStruct) error { + // should be nil but its always better to check + if response.ActiveStreams == nil { + response.ActiveStreams = &ActiveStreamsStruct{ + Playlists: make(map[string]*PlaylistStruct), + } + } else if response.ActiveStreams.Playlists == nil { + response.ActiveStreams.Playlists = make(map[string]*PlaylistStruct) + } + // iterate over the playlists within the StreamManager and extract the data + for playlistID, playlist := range sm.Playlists { + // create a new ActiveStreams struct if it doesn't exist right now + if response.ActiveStreams == nil { + response.ActiveStreams = &ActiveStreamsStruct{ + Playlists: make(map[string]*PlaylistStruct), + } + } + // for every Playlist found Create a new Playlist struct and add it to the map + response.ActiveStreams.Playlists[playlistID] = CreatePlaylistStruct(playlist.Name, sm.Playlists[playlistID].Streams) + } + return nil +} + +/* +CreatePlaylistSruct will extract the info from the given Stream struct +*/ +func CreatePlaylistStruct(name string, streams map[string]*Stream) *PlaylistStruct { + var playlist = &PlaylistStruct{ + PlaylistName: name, + ActiveChannels: &[]string{}, + ClientConnections: 0, + } + + // Iterate over every stream within the map + for _, stream := range streams { + *playlist.ActiveChannels = append(*playlist.ActiveChannels, stream.Name) + playlist.ClientConnections += len(stream.Clients) + } + return playlist +} + +/* +GetStreamLimitContent will check if there is already a custuom video that will be provided to client. + +Otherwise it will check if there has been uploaded a image that will be converted into an video. +Finally it will provide either the default content or the new content. +*/ +func GetStreamLimitContent() ([]byte, bool) { + var content []byte + var contentOk bool + imageFileList, err := os.ReadDir(System.Folder.Custom) + if err != nil { + ShowError(err, 0) + } + fileList, err := os.ReadDir(System.Folder.Video) + if err == nil { + createContent := ShouldCreateContent(fileList) + if createContent && len(imageFileList) > 0 { + err := CreateAlternativNoMoreStreamsVideo(System.Folder.Custom + imageFileList[0].Name()) + if err != nil { + ShowError(err, 0) + } + } + content, err = os.ReadFile(System.Folder.Video + fileList[0].Name()) + if err != nil { + ShowError(err, 0) + } else { + contentOk = true + } + } + if !contentOk { + if value, ok := webUI["web/public/video/stream-limit.ts"]; ok && !contentOk { + contentOk = true + content = GetHTMLString(value.(string)) + } + } + return content, contentOk +} + +/* +HandleStreamLimit sends an info to the client that the stream limit has been reached. +The content that will provided to client will be fetched with GetStreamLimitContent() function +*/ +func HandleStreamLimit(stream *Stream) { + ShowInfo("Streaming Status:No new connections available. Tuner limit reached.") + ShowInfo("Streaming limit reached content instead") + content, contentOk := GetStreamLimitContent() + var stopChannel = stream.Buffer.GetStopChan() + if contentOk { + // Write content to the pipe in a loop + go func() { + for { + select { + case <- stopChannel: + return + default: + stream.Buffer.writeBytesToPipe(content) + time.Sleep(750 * time.Millisecond) + } + } + }() + } +} + +/* +ShouldCreateContent reports whether a new video file shall be created. +It removes existing files if necessary. +*/ +func ShouldCreateContent(fileList []fs.DirEntry) bool { + switch len(fileList) { + case 0: + return true + case 1: + return false + default: + for _, file := range fileList { + os.Remove(System.Folder.Video + file.Name()) + } + return true + } +} + +/* +GetTuner returns the maximum number of connections for a playlist. +It will check if the buffer type is matching the third party buffers +*/ +func GetTuner(id, playlistType string) (tuner int) { + switch Settings.Buffer { + case "-": + tuner = Settings.Tuner + + case "ffmpeg", "vlc", "threadfin": + i, err := strconv.Atoi(getProviderParameter(id, playlistType, "tuner")) + if err == nil { + tuner = i + } else { + ShowError(err, 0) + tuner = 1 + } + } + return +} + +/* +GetPlaylistType returns the type of the playlist based on the playlist ID +*/ +func GetPlaylistType(playlistID string) string { + switch playlistID[0:1] { + case "M": + return "m3u" + case "H": + return "hdhr" + default: + return "" + } +} + +/* +CreateAlternativNoMoreStreamsVideo generates a new video file based on the image provided as path to it. +It will use the third party tool defined in the settings and starts a process for generating the video file +*/ +func CreateAlternativNoMoreStreamsVideo(pathToFile string) error { + cmd := new(exec.Cmd) + path, arguments := prepareArguments(pathToFile) + if len(arguments) == 0 { + if _, err := os.Stat(Settings.FFmpegPath); err != nil { + return fmt.Errorf("ffmpeg path is not valid. Can not convert custom image to video") + } + } + + cmd = exec.Command(path, arguments...) + + if len(cmd.Args) > 0 && path != "" { + ShowInfo("Streaming Status:Creating video from uploaded image for a customized no more stream video") + err := cmd.Run() + if err != nil { + return err + } + ShowInfo("Streaming Status:Successfully created video from custom image") + return nil + } else { + return fmt.Errorf("path for third party tool ") + } +} + +// TODO: Add description +func prepareArguments(pathToFile string) (string, []string) { + switch Settings.Buffer { + case "ffmpeg", "threadfin", "-": + return Settings.FFmpegPath, []string{"-loop", "1", "-i", pathToFile, "-c:v", "libx264", "-t", "1", "-pix_fmt", "yuv420p", "-vf", "scale=1920:1080", fmt.Sprintf("%sstream-limit.ts", System.Folder.Video)} + case "vlc": + return Settings.VLCPath, []string{"--no-audio", "--loop", "--sout", fmt.Sprintf("'#transcode{vcodec=h264,vb=1024,scale=1,width=1920,height=1080,acodec=none,venc=x264{preset=ultrafast}}:standard{access=file,mux=ts,dst=%sstream-limit.ts}'", System.Folder.Video), System.Folder.Video, pathToFile} + default: + return "", []string{} + } +} diff --git a/src/struct-buffer.go b/src/struct-buffer.go deleted file mode 100644 index a0b5ce0..0000000 --- a/src/struct-buffer.go +++ /dev/null @@ -1,87 +0,0 @@ -package src - -import ( - "context" - "net/http" - "os/exec" - "sync" - - "github.com/avfs/avfs" -) - -// StreamManager verwaltet die Streams und ffmpeg-Prozesse -type StreamManager struct { - Playlists map[string]*Playlist - errorChan chan ErrorInfo - stopChan chan bool - LockAgainstNewStreams bool - FileSystem avfs.VFS - mu sync.Mutex -} - -type Playlist struct { - Name string - Streams map[string]*Stream -} - -// Stream repräsentiert einen einzelnen Stream -type Stream struct { - Name string - Clients map[string]Client - Buffer *Buffer - ErrorChan chan ErrorInfo - Ctx context.Context - Cancel context.CancelFunc - - Folder string - LatestSegment int - OldSegments []string - URL string - BackupChannel1URL string - BackupChannel2URL string - BackupChannel3URL string - UseBackup bool - BackupNumber int - DoAutoReconnect bool -} - -type Buffer struct { - FileSystem avfs.VFS - IsThirdPartyBuffer bool - Cmd *exec.Cmd - Config *BufferConfig - Stream *Stream // Reference to the parents struct - StopChan chan struct{} -} - -type BufferConfig struct { - BufferType string - Path string - Options string -} - -type Client struct { - w http.ResponseWriter - r *http.Request -} - -type ErrorInfo struct { - Error error - ErrorCode int - Stream *Stream - ClientID string - BufferClosed bool -} - -const ( - BufferFolderError = 4008 - SendFileError = 4009 - CreateFileError = 4010 - EndOfFileError = 4011 - ReadIntoBufferError = 4012 - WriteToBufferError = 4013 - OpenFileError = 4014 //errMsg = "Not able to open buffered file" - FileStatError = 4015 //errMsg = "Could not get file statics of buffered file" - ReadFileError = 4016 //errMsg = "Could not read buffered file before sending to clients" - FileDoesNotExistError = 4019 //errMsg = "Buffered file does not exist anymore" -) diff --git a/src/struct-system.go b/src/struct-system.go index 003e9ce..0d591c6 100644 --- a/src/struct-system.go +++ b/src/struct-system.go @@ -95,11 +95,7 @@ type SystemStruct struct { TagName string } - Update struct { - Git string - Name string - Github string - } + Update Update URLBase string UDPxy string @@ -109,22 +105,19 @@ type SystemStruct struct { } } +type Update struct { + Git string + Name string + Github string +} + // GitStruct : Updateinformationen von GitHub type GitStruct struct { Filename string `json:"filename"` Version string `json:"version"` } -type GithubReleaseInfo struct { - TagName string `json:"tag_name"` - Prerelease bool `json:"prerelease"` - Assets []AssetsStruct `json:"assets"` -} -type AssetsStruct struct { - DownloadUrl string `json:"browser_download_url"` - UpdatetAt string `json:"updated_at"` -} // DataStruct : Alle Daten werden hier abgelegt. (Lineup, XMLTV) type DataStruct struct { @@ -278,28 +271,29 @@ type Notification struct { // SettingsStruct : Inhalt der settings.json type SettingsStruct struct { - API bool `json:"api"` - AuthenticationAPI bool `json:"authentication.api"` - AuthenticationM3U bool `json:"authentication.m3u"` - AuthenticationPMS bool `json:"authentication.pms"` - AuthenticationWEB bool `json:"authentication.web"` - AuthenticationXML bool `json:"authentication.xml"` - BackupKeep int `json:"backup.keep"` - BackupPath string `json:"backup.path"` - Branch string `json:"git.branch,omitempty"` - Buffer string `json:"buffer"` - BufferSize int `json:"buffer.size.kb"` - BufferTimeout float64 `json:"buffer.timeout"` - BufferAutoReconnect bool `json:"buffer.autoReconnect"` - CacheImages bool `json:"cache.images"` - ChangeVersion bool `json:"changeVersion"` - EpgSource string `json:"epgSource"` - FFmpegOptions string `json:"ffmpeg.options"` - FFmpegPath string `json:"ffmpeg.path"` - VLCOptions string `json:"vlc.options"` - VLCPath string `json:"vlc.path"` - FileM3U []string `json:"file,omitempty"` // Beim Wizard wird die M3U in ein Slice gespeichert - FileXMLTV []string `json:"xmltv,omitempty"` // Altes Speichersystem der Provider XML Datei Slice (Wird für die Umwandlung auf das neue benötigt) + API bool `json:"api"` + AuthenticationAPI bool `json:"authentication.api"` + AuthenticationM3U bool `json:"authentication.m3u"` + AuthenticationPMS bool `json:"authentication.pms"` + AuthenticationWEB bool `json:"authentication.web"` + AuthenticationXML bool `json:"authentication.xml"` + BackupKeep int `json:"backup.keep"` + BackupPath string `json:"backup.path"` + Branch string `json:"git.branch,omitempty"` + Buffer string `json:"buffer"` + BufferSize int `json:"buffer.size.kb"` + BufferTimeout float64 `json:"buffer.timeout"` + BufferAutoReconnect bool `json:"buffer.autoReconnect"` + BufferTerminationTimeout int `json:"buffer.terminationTimeout"` + CacheImages bool `json:"cache.images"` + ChangeVersion bool `json:"changeVersion"` + EpgSource string `json:"epgSource"` + FFmpegOptions string `json:"ffmpeg.options"` + FFmpegPath string `json:"ffmpeg.path"` + VLCOptions string `json:"vlc.options"` + VLCPath string `json:"vlc.path"` + FileM3U []string `json:"file,omitempty"` // Beim Wizard wird die M3U in ein Slice gespeichert + FileXMLTV []string `json:"xmltv,omitempty"` // Altes Speichersystem der Provider XML Datei Slice (Wird für die Umwandlung auf das neue benötigt) Files struct { HDHR map[string]interface{} `json:"hdhr"` diff --git a/src/struct-webserver.go b/src/struct-webserver.go index 7c11af8..306f7c3 100644 --- a/src/struct-webserver.go +++ b/src/struct-webserver.go @@ -36,6 +36,7 @@ type RequestStruct struct { Buffer *string `json:"buffer,omitempty"` BufferSize *int `json:"buffer.size.kb,omitempty"` BufferTimeout *float64 `json:"buffer.timeout,omitempty"` + BufferTerminationTimeout *int `json:"buffer.terminationTimeout,omitempty"` BufferAutoReconnect *bool `json:"buffer.autoReconnect,omitempty"` CacheImages *bool `json:"cache.images,omitempty"` EpgSource *string `json:"epgSource,omitempty"` @@ -59,7 +60,7 @@ type RequestStruct struct { BindingIPs *string `json:"bindingIPs,omitempty"` ForceHttpsToUpstream *bool `json:"forceHttps,omitempty"` UseHttps *bool `json:"useHttps,omitempty"` - ForceClientHttps *bool `json:"forceClientHttps"` + ForceClientHttps *bool `json:"forceClientHttps,omitempty"` ThreadfinDomain *string `json:"threadfinDomain,omitempty"` EnableNonAscii *bool `json:"enableNonAscii,omitempty"` EpgCategories *string `json:"epgCategories,omitempty"` @@ -135,7 +136,7 @@ type ResponseStruct struct { OpenLink string `json:"openLink,omitempty"` OpenMenu string `json:"openMenu,omitempty"` Reload bool `json:"reload,omitempty"` - Settings SettingsStruct `json:"settings"` + Settings *SettingsStruct `json:"settings"` Status bool `json:"status"` Token string `json:"token,omitempty"` Users map[string]interface{} `json:"users,omitempty"` diff --git a/src/system.go b/src/system.go index 3a3fbf8..98143d6 100644 --- a/src/system.go +++ b/src/system.go @@ -133,6 +133,7 @@ func loadSettings() (settings SettingsStruct, err error) { defaults["buffer.size.kb"] = 1024 defaults["buffer.timeout"] = 500 defaults["buffer.autoReconnect"] = false + defaults["buffer.terminationTimeout"] = 5 defaults["cache.images"] = false defaults["epgSource"] = "PMS" defaults["ffmpeg.options"] = System.FFmpeg.DefaultOptions diff --git a/src/thirdPartyBuffer.go b/src/thirdPartyBuffer.go index 819898d..c7908dc 100644 --- a/src/thirdPartyBuffer.go +++ b/src/thirdPartyBuffer.go @@ -7,42 +7,70 @@ import ( "net/url" "os" "os/exec" + "path/filepath" "strings" + "syscall" ) +type ThirdPartyBuffer struct { + StreamBuffer + Cmd *exec.Cmd + BufferType string + Path string + Options string +} + + // StartThirdPartyBuffer starts the third party tool and capture its output for the given stream. -func StartThirdPartyBuffer(stream *Stream) error { - - SetBufferConfig(stream.Buffer.Config) - bufferConfig := stream.Buffer.Config - if bufferConfig.BufferType == "" { +func (sb *ThirdPartyBuffer) StartBuffer(stream *Stream) error { + if err := sb.StreamBuffer.StartBuffer(stream); err != nil { + return err + } + + sb.SetBufferConfig() + if sb.BufferType == "" { return fmt.Errorf("could not set buffer config") } - ShowInfo(fmt.Sprintf("Streaming: Buffer:%s path:%s", bufferConfig.BufferType, bufferConfig.Path)) + ShowInfo(fmt.Sprintf("Streaming: Buffer:%s path:%s", sb.BufferType, sb.Path)) ShowInfo("Streaming URL:" + stream.URL) - err := RunBufferCommand(stream) + err := sb.RunBufferCommand(stream) if err != nil { stream.handleBufferError(err) } return nil } +func (sb *ThirdPartyBuffer) StopBuffer() { + close(sb.StopChan) +} + +func (sb *ThirdPartyBuffer) CloseBuffer() { + if !sb.Closed{ + sb.Closed = true + close(sb.CloseChan) + sb.Cmd.Process.Signal(syscall.SIGKILL) // Kill the third party tool process + sb.Cmd.Wait() + DeletPIDfromDisc(fmt.Sprintf("%d", sb.Cmd.Process.Pid)) // Delete the PID since the process has been terminated + sb.RemoveBufferedFiles(filepath.Join(sb.Stream.Folder, "0.ts")) + } +} + // SetBufferConfig returns the the arguments from the buffer settings in the config file -func SetBufferConfig(config *BufferConfig) { - config.BufferType = strings.ToUpper(Settings.Buffer) - switch config.BufferType { +func (sb *ThirdPartyBuffer) SetBufferConfig() { + sb.BufferType = strings.ToUpper(Settings.Buffer) + switch sb.BufferType { case "FFMPEG": - config.Options = Settings.FFmpegOptions - config.Path = Settings.FFmpegPath + sb.Options = Settings.FFmpegOptions + sb.Path = Settings.FFmpegPath case "VLC": - config.Options = Settings.VLCOptions - config.Path = Settings.VLCPath + sb.Options = Settings.VLCOptions + sb.Path = Settings.VLCPath default: - config.BufferType = "" - config.Options = "" - config.Path = "" + sb.BufferType = "" + sb.Options = "" + sb.Path = "" } } @@ -58,12 +86,12 @@ func SetBufferConfig(config *BufferConfig) { // Returns: // - *Buffer: A pointer to a Buffer struct representing the buffer process. // - error: An error object if an error occurs, otherwise nil. -func RunBufferCommand(stream *Stream) error { - bufferConfig := stream.Buffer.Config - args := PrepareBufferArguments(bufferConfig.Options, stream.URL) +func (sb *ThirdPartyBuffer) RunBufferCommand(stream *Stream) error { + sb.Stream = stream + args := PrepareBufferArguments(sb.Options, stream.URL) - cmd := exec.Command(bufferConfig.Path, args...) - debug := fmt.Sprintf("%s:%s %s", strings.ToUpper(Settings.Buffer), bufferConfig.Path, args) + cmd := exec.Command(sb.Path, args...) + debug := fmt.Sprintf("%s:%s %s", strings.ToUpper(Settings.Buffer), sb.Path, args) ShowDebug(debug, 1) stdOut, stdErr, err := GetCommandPipes(cmd) @@ -76,12 +104,10 @@ func RunBufferCommand(stream *Stream) error { } WritePIDtoDisk(fmt.Sprintf("%d", cmd.Process.Pid)) - go ShowCommandStdErrInConsole(bufferConfig.BufferType, stdErr) - go stream.Buffer.HandleByteOutput(stdOut) - - stream.Buffer.IsThirdPartyBuffer = true - stream.Buffer.Cmd = cmd + go ShowCommandStdErrInConsole(sb.BufferType, stdErr) + go sb.HandleByteOutput(stdOut) + sb.Cmd = cmd return nil } diff --git a/src/threadfinBuffer.go b/src/threadfinBuffer.go index ff5bee1..1508645 100644 --- a/src/threadfinBuffer.go +++ b/src/threadfinBuffer.go @@ -6,12 +6,20 @@ import ( "io" "mime" "net/http" + "path/filepath" "strings" "time" ) -func StartThreadfinBuffer(stream *Stream) error { - stopChan := make(chan struct{}) +type ThreadfinBuffer struct{ + StreamBuffer +} + +func (sb *ThreadfinBuffer) StartBuffer(stream *Stream) error { + if err := sb.StreamBuffer.StartBuffer(stream); err != nil { + return err + } + ShowInfo(fmt.Sprintf("Streaming:Buffer:%s", "Threadfin")) ShowInfo("Streaming URL:" + stream.URL) @@ -55,7 +63,7 @@ func StartThreadfinBuffer(stream *Stream) error { for { select { - case <-stopChan: + case <-sb.StopChan: resp.Body.Close() time.Sleep(200 * time.Millisecond) // Let the buffer stop before going on return @@ -64,10 +72,17 @@ func StartThreadfinBuffer(stream *Stream) error { } } }() - stream.Buffer.StopChan = stopChan return nil } +func (sb *ThreadfinBuffer) CloseBuffer() { + if !sb.Closed { + sb.Closed = true + close(sb.CloseChan) + sb.RemoveBufferedFiles(filepath.Join(sb.Stream.Folder, "0.ts")) + } +} + func selectStreamFromMaster(resp io.ReadCloser) (string, string, error) { defer resp.Close() diff --git a/src/update.go b/src/update.go index 2b919b7..387591c 100644 --- a/src/update.go +++ b/src/update.go @@ -1,41 +1,26 @@ package src import ( - "encoding/json" - "errors" "fmt" - "io" - "net/http" - "os" - "strings" - up2date "threadfin/src/internal/up2date/client" - "time" - - "github.com/hashicorp/go-version" - - "reflect" + updater "threadfin/src/internal/updater" ) // BinaryUpdate : Binary Update Prozess. Git Branch master und beta wird von GitHub geladen. -func BinaryUpdate(forceUpdate bool) (err error) { +func BinaryUpdate(forceUpdate bool) bool { if !System.GitHub.Update { ShowWarning(2099) - return + return false } if !forceUpdate { if !Settings.ThreadfinAutoUpdate { ShowWarning(2098) - return + return false } } - var updater = &up2date.Updater - updater.Name = System.Update.Name - updater.Branch = System.Branch - - up2date.Init() + var updater = updater.Init(System.Branch, System.Update.Name, System.Update.Git) if System.Beta { updater.Branch = "beta" @@ -44,303 +29,36 @@ func BinaryUpdate(forceUpdate bool) (err error) { } ShowInfo("Update Version:" + updater.Branch) - var releaseInfo = fmt.Sprintf("%s/releases", System.Update.Github) - //var latest string - //var bin_name string - var body []byte + var releaseInfoURL = fmt.Sprintf("%s/releases", System.Update.Github) - var git []*GithubReleaseInfo - - resp, err := http.Get(releaseInfo) - if err != nil { - ShowError(err, 6003) - return nil + if updater.GetBinaryDownloadURL(releaseInfoURL) != nil { + return false } - body, _ = io.ReadAll(resp.Body) - - err = json.Unmarshal(body, &git) - if err != nil { - return err - } - - // Get latest prerelease tag name - if updater.Branch == "beta" { - for _, release := range git { - if release.Prerelease { - updater.Response.Version = release.TagName - updater.Response.UpdatedAt = release.Assets[0].UpdatetAt - for _, asset := range release.Assets { - new_asset := up2date.AssetsStruct{DownloadUrl: asset.DownloadUrl, UpdatetAt: asset.UpdatetAt} - updater.Response.Assets = append(updater.Response.Assets, new_asset) - } - break - } - } - } - - // Latest main tag name - if updater.Branch == "master" { - for _, release := range git { - if !release.Prerelease { - updater.Response.Version = release.TagName - for _, asset := range release.Assets { - new_asset := up2date.AssetsStruct{DownloadUrl: asset.DownloadUrl, UpdatetAt: asset.UpdatetAt} - updater.Response.Assets = append(updater.Response.Assets, new_asset) - } - break - } - } + if !updater.Response.Status { + return false } ShowInfo("LATEST VERSION:" + updater.Response.Version) + ShowInfo("FILE:" + updater.BinaryDownloadURL) - for _, asset := range updater.Response.Assets { - if strings.Contains(asset.DownloadUrl, System.OS) && strings.Contains(asset.DownloadUrl, System.ARCH) { - updater.Response.Status = true - updater.Response.UpdateBIN = asset.DownloadUrl - break - } - } - - ShowInfo("FILE:" + updater.Response.UpdateBIN) - - var path_to_file string do_upgrade := false if !forceUpdate { - do_upgrade = existsNewerVersion(updater.Response) + do_upgrade = updater.ExistsNewerVersion(System.Version, System.Build) } else { do_upgrade = true } // Versionsnummer überprüfen if do_upgrade { - // Update durchführen - var fileType, url string - - ShowInfo(fmt.Sprintf("Update Available:Version: %s", updater.Response.Version)) - - switch System.Branch { - - // Update von GitHub - case "master", "beta", "development": - ShowInfo("Update Server:GitHub") - - // Update vom eigenen Server - default: - ShowInfo(fmt.Sprintf("Update Server:%s", Settings.UpdateURL)) - - } - - ShowInfo(fmt.Sprintf("Start Update:Branch: %s", updater.Branch)) - - // Neue Version als BIN Datei herunterladen - if len(updater.Response.UpdateBIN) > 0 { - url = updater.Response.UpdateBIN - fileType = "bin" - } - - // Neue Version als ZIP Datei herunterladen - if len(updater.Response.UpdateZIP) > 0 { - url = updater.Response.UpdateZIP - fileType = "zip" - } - - if len(url) > 0 { - - err = up2date.DoUpdate(fileType, updater.Response.Filename) - if err != nil { - ShowError(err, 6002) - } - if System.Branch == "beta" { - if err := os.WriteFile(path_to_file, []byte(updater.Response.UpdatedAt), 0666); err != nil { - ShowError(err, 6005) - } - } - } - } else { - ShowInfo("BIN:Update omitted") - } - - return nil -} - -func existsNewerVersion(response up2date.ServerResponse) bool { - var currentVersion = System.Version + "." + System.Build - current_version, _ := version.NewVersion(currentVersion) - response_version, _ := version.NewVersion(response.Version) - if response_version == nil { - current_date := getBinaryTime() - layout := time.RFC3339 - response_date, err := time.Parse(layout ,response.UpdatedAt) + err := updater.DoUpdateNew() if err != nil { + ShowError(err, 6002) return false } - if current_date.Before(response_date) { - return true - } - } else if response_version.GreaterThan(current_version) && response.Status { return true - } - return false -} - -func getBinaryTime() time.Time { - executablePath, err := os.Executable() - if err != nil { - return time.Now() - } - binaryInfo, err := os.Stat(executablePath) - if err != nil { - return time.Now() - } - return binaryInfo.ModTime() -} - -func conditionalUpdateChanges() (err error) { - -checkVersion: - settingsMap, err := loadJSONFileToMap(System.File.Settings) - if err != nil || len(settingsMap) == 0 { - return - } - - if settingsVersion, ok := settingsMap["version"].(string); ok { - - if settingsVersion > System.DBVersion { - ShowInfo("Settings DB Version:" + settingsVersion) - ShowInfo("System DB Version:" + System.DBVersion) - err = errors.New(getErrMsg(1031)) - return - } - - // Letzte Kompatible Version (1.4.4) - if settingsVersion < System.Compatibility { - err = errors.New(getErrMsg(1013)) - return - } - - switch settingsVersion { - - case "1.4.4": - // UUID Wert in xepg.json setzen - err = setValueForUUID() - if err != nil { - return - } - - // Neuer Filter (WebUI). Alte Filtereinstellungen werden konvertiert - if oldFilter, ok := settingsMap["filter"].([]interface{}); ok { - var newFilterMap = convertToNewFilter(oldFilter) - settingsMap["filter"] = newFilterMap - - settingsMap["version"] = "2.0.0" - - err = saveMapToJSONFile(System.File.Settings, settingsMap) - if err != nil { - return - } - - goto checkVersion - - } else { - err = errors.New(getErrMsg(1030)) - return - } - - case "2.0.0": - - if oldBuffer, ok := settingsMap["buffer"].(bool); ok { - - var newBuffer string - switch oldBuffer { - case true: - newBuffer = "threadfin" - case false: - newBuffer = "-" - } - - settingsMap["buffer"] = newBuffer - - settingsMap["version"] = "2.1.0" - - err = saveMapToJSONFile(System.File.Settings, settingsMap) - if err != nil { - return - } - - goto checkVersion - - } else { - err = errors.New(getErrMsg(1030)) - return - } - - case "2.1.0": - // Falls es in einem späteren Update Änderungen an der Datenbank gibt, geht es hier weiter - - break - } - } else { - // settings.json ist zu alt (älter als Version 1.4.4) - err = errors.New(getErrMsg(1013)) - } - - return -} - -func convertToNewFilter(oldFilter []interface{}) (newFilterMap map[int]interface{}) { - - newFilterMap = make(map[int]interface{}) - - switch reflect.TypeOf(oldFilter).Kind() { - - case reflect.Slice: - s := reflect.ValueOf(oldFilter) - - for i := 0; i < s.Len(); i++ { - - var newFilter FilterStruct - newFilter.Active = true - newFilter.Name = fmt.Sprintf("Custom filter %d", i+1) - newFilter.Filter = s.Index(i).Interface().(string) - newFilter.Type = "custom-filter" - newFilter.CaseSensitive = false - - newFilterMap[i] = newFilter - - } - - } - - return -} - -func setValueForUUID() (err error) { - - xepg, err := loadJSONFileToMap(System.File.XEPG) - if err == nil { - - for _, c := range xepg { - - var xepgChannel = c.(map[string]interface{}) - - if uuidKey, ok := xepgChannel["_uuid.key"].(string); ok { - - if value, ok := xepgChannel[uuidKey].(string); ok { - - if len(value) > 0 { - xepgChannel["_uuid.value"] = value - } - - } - - } - - } + ShowInfo("BIN:Update omitted") + return false } - err = saveMapToJSONFile(System.File.XEPG, xepg) - - return } diff --git a/src/webUI.go b/src/webUI.go index bb3cbc7..18d15f0 100644 --- a/src/webUI.go +++ b/src/webUI.go @@ -6,12 +6,12 @@ func loadHTMLMap() { webUI["web/public/configuration.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHkgb25sb2FkPSJqYXZhc2NyaXB0OiByZWFkeUZvckNvbmZpZ3VyYXRpb24oMCk7Ij4NCg0KICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+DQogIDwvZGl2Pg0KDQogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cEhlYWRlciI+PC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPg0KICAgICAgICAgICAgICA8ZGl2IGlkPSJwb3B1cEN1c3RvbSI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4NCiAgPGRpdiBpZD0iYm94Ij4NCg0KICAgIDxkaXYgaWQ9ImhlYWRsaW5lIj4NCiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj5Db25maWd1cmF0aW9uPC9oMT4NCiAgICA8L2Rpdj4NCiAgICA8cCBpZD0iZXJyIiBjbGFzcz0iZXJyb3JNc2cgY2VudGVyIj48L3A+DQogICAgPGRpdiBpZD0iY29udGVudCI+DQoNCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj4NCiAgICAgIDxpbnB1dCBpZD0ibmV4dCIgY2xhc3M9IiIgdHlwZT0iYnV0dG9uIiBuYW1lPSJuZXh0IiB2YWx1ZT0iTmV4dCIgb25jbGljaz0iamF2YXNjcmlwdDogc2F2ZVdpemFyZCgpOyI+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvY29uZmlndXJhdGlvbl90cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9uZXR3b3JrX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL21lbnVfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvc2V0dGluZ3NfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYmFzZV90cy5qcyI+PC9zY3JpcHQ+DQo8L2JvZHk+DQoNCjwvaHRtbD4=" webUI["web/public/create-first-user.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHk+DQoNCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4NCg0KICA8ZGl2IGlkPSJib3giPg0KDQogICAgPGRpdiBpZD0iaGVhZGxpbmUiPg0KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPnt7LmFjY291bnQuaGVhZGxpbmV9fTwvaDE+DQogICAgPC9kaXY+DQoNCiAgICA8cCBpZD0iZXJyIiBjbGFzcz0iZXJyb3JNc2cgY2VudGVyIj48L3A+DQoNCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCg0KICAgICAgPGZvcm0gaWQ9ImF1dGhlbnRpY2F0aW9uIiBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4NCg0KICAgICAgICA8aDU+e3suYWNjb3VudC51c2VybmFtZS50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPg0KICAgICAgICA8aDU+e3suYWNjb3VudC5wYXNzd29yZC50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiB2YWx1ZT0iIj4NCiAgICAgICAgPGg1Pnt7LmFjY291bnQuY29uZmlybS50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0iY29uZmlybSIgdHlwZT0icGFzc3dvcmQiIG5hbWU9ImNvbmZpcm0iIHBsYWNlaG9sZGVyPSJDb25maXJtIiB2YWx1ZT0iIj4NCg0KICAgICAgPC9mb3JtPg0KDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj4NCiAgICAgIDxpbnB1dCBpZD0ic3VibWl0IiBjbGFzcz0iIiB0eXBlPSJidXR0b24iIHZhbHVlPSJ7ey5idXR0b24uY3JhZXRlQWNjb3VudH19IiBvbmNsaWNrPSJqYXZhc2NyaXB0OiBsb2dpbigpOyI+DQogICAgPC9kaXY+DQoNCg0KICA8L2Rpdj4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY2xpcGJvYXJkLmpzLzIuMC4xMC9jbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmsuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYXV0aGVudGljYXRpb24uanMiPjwvc2NyaXB0Pg0KPC9ib2R5Pg0KDQo8L2h0bWw+" - webUI["web/public/index.html"] = "PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogIA0KICA8dGl0bGU+VGhyZWFkZmluPC90aXRsZT4NCiAgPCEtLSBmb250LWF3ZXNvbWUgLS0+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzUuMTQuMC9jc3MvYWxsLm1pbi5jc3MiPg0KICA8bGluayBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjMuMy9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBpbnRlZ3JpdHk9InNoYTM4NC1RV1RLWnlqcFBFaklTdjVXYVJVOU9GZVJwb2s2WWN0blltRHI1cE5seVQyYlJqWGgwSk1oalk2aFcrQUxFd0lIIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc2NyZWVuLmNzcyIgdHlwZT0idGV4dC9jc3MiPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPg0KICA8bGluayByZWw9Imljb24iIGhyZWY9ImltZy90aHJlYWRmaW4uaWNvIj4NCjwvaGVhZD4NCg0KPGJvZHkgb25sb2FkPSJqYXZhc2NyaXB0OiBQYWdlUmVhZHkoKTsiPg0KDQogIDxkaXYgaWQ9ImxvYWRpbmciIGNsYXNzPSJtb2RhbCBmYWRlIj4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbG9hZGVyIj48L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBpZD0icG9wdXAiIGNsYXNzPSJtb2RhbCBmYWRlIj4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwteGwiPg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCIgaWQ9InBvcHVwTW9kYWxDb250ZW50Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIiBpZD0icG9wdXBIZWFkZXIiPjwvZGl2Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiIGlkPSJwb3B1cEJvZHkiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIiBpZD0icG9wdXBCb2R5Q29udGFpbmVyIj4NCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IiBpZD0icG9wdXBSb3ciPg0KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InBvcHVwQ3VzdG9tIj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0ic2VydmVyX2luZm9ybWF0aW9uIj48L2Rpdj4NCiAgDQogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSIvd2ViIiB0aXRsZT0ibG9nbyI+DQogICAgICAgIDxzcGFuIGlkPSJsb2dvIj48L3NwYW4+DQogICAgICA8L2E+DQogICAgICA8YnV0dG9uIGNsYXNzPSJuYXZiYXItdG9nZ2xlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWJzLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtbGFiZWw9IlRvZ2dsZSBuYXZpZ2F0aW9uIj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hdmJhci10b2dnbGVyLWljb24iPjwvc3Bhbj4NCiAgICAgIDwvYnV0dG9uPg0KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIiBpZD0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCI+DQogICAgICAgIDx1bCBjbGFzcz0ibmF2YmFyLW5hdiBteC1hdXRvIG1iLTIgbWItbGctMCIgaWQ9Im1haW4tbWVudSI+DQogICAgICAgIDwvdWw+DQogICAgICAgIDx1bD4NCiAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1saW5rIiBkYXRhLWJzLXRvZ2dsZT0ibW9kYWwiIGRhdGEtYnMtdGFyZ2V0PSIjc2VydmVyX2luZm9ybWF0aW9uIiBpZD0ic2VydmVyX2luZm9ybWF0aW9uX2J1dHRvbiI+PGkgY2xhc3M9ImZhcyBmYS1pbmZvLWNpcmNsZSI+PC9pPiBTZXJ2ZXIgSW5mb3JtYXRpb248L2xpPg0KICAgICAgICA8L3VsPg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvbmF2Pg0KICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmxleCI+DQogICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiBjb2wtc20tMTIiPg0KICAgICAgICA8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0idGFibGUtcmVzcG9uc2l2ZSI+PC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJyb3ciIGlkPSJteVN0cmVhbXNCb3giPg0KICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTUgY29sLXNtLTEyIHRhYmxlLXJlc3BvbnNpdmUgZmxvYXQtc3RhcnQiPg0KICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWRhcmsgdGFibGUtYm9yZGVyZWQgY2FwdGlvbi10b3AiIGlkPSJhY3RpdmVTdHJlYW1zIj48L3RhYmxlPg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtc20tMTIgdGFibGUtcmVzcG9uc2l2ZSBmbG9hdC1lbmQiPg0KICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWRhcmsgdGFibGUtYm9yZGVyZWQgY2FwdGlvbi10b3AiIGlkPSJpbmFjdGl2ZVN0cmVhbXMiPjwvdGFibGU+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBpZD0ibm90aWZpY2F0aW9uX2NvbnRhaW50ZXIiIGNsYXNzPSJub3RpZmljYXRpb24iPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPg0KICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIiPg0KICAgICAgICA8aDUgY2xhc3M9InRpdGxlIiBpZD0ibm90aWZpY2F0aW9uX3RpdGxlIj48L2g1Pg0KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSBidG4tY2xvc2Utd2hpdGUiIGlkPSJjbG9zZU5vdGlmaWNhdGlvbiI+PC9idXR0b24+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkgbm90aWZpY2F0aW9uQ29udGVudCI+DQogICAgICAgICAgPHAgaWQ9Im5vdGlmaWNhdGlvbl90ZXh0Ij48L3A+DQogICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVwZGF0ZU5vdyIgaWQ9InVwZGF0ZU5vd0J1dHRvbiI+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9InRvcEZ1bmN0aW9uKCkiIGlkPSJiYWNrVG9Ub3AiPg0KICAgIDxpbWcgc3JjPSJpY29ucy9jaGV2cm9uLWRvdWJsZS11cC5zdmciIGFsdD0iR28gdG8gdG9wIj4NCiAgPC9idXR0b24+DQoNCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMy4zL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHoiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY2xpcGJvYXJkLmpzLzIuMC4xMS9jbGlwYm9hcmQubWluLmpzIiBpbnRlZ3JpdHk9InNoYTUxMi03TzVwWHBjMG9DUnJ4azhSVWZEWUZnbjBuTzF0K2pMdUlPUWRPTVJwNEFQQjd1WjR2U2pzcHpwNXk2WUR0RHM0VnpVU1RiV3pCRlovTEtKaG55Rk9Ldz09IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiByZWZlcnJlcnBvbGljeT0ibm8tcmVmZXJyZXIiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvc2VydmVyX2luZm9ybWF0aW9uLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmsuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvb3B0aW9uX2RpYWxvZ3VlLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL21lbnUuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvc2V0dGluZ3MuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbG9ncy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9iYXNlLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL3ZlcnNpb25fY2hlY2suanMiPjwvc2NyaXB0Pg0KDQo8L2JvZHk+PC9odG1sPg==" + webUI["web/public/index.html"] = "PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogIA0KICA8dGl0bGU+VGhyZWFkZmluPC90aXRsZT4NCiAgPCEtLSBmb250LWF3ZXNvbWUgLS0+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzYuNy4yL2Nzcy9hbGwubWluLmNzcyIgaW50ZWdyaXR5PSJzaGE1MTItRXZ2ODRNcjRrcVZHUk5TZ0lHTC9GL2FJRHFRYjd4UTJ2Y3JkSXd4ZmpUaFNIOENTUjdQQkVha0NyNTFDayt3Ky9VNnN3VTJJbTF2VlgwU1ZrOUFCaGc9PSIgY3Jvc3NvcmlnaW49ImFub255bW91cyIgcmVmZXJyZXJwb2xpY3k9Im5vLXJlZmVycmVyIiAvPg0KICA8bGluayBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjMuMy9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBpbnRlZ3JpdHk9InNoYTM4NC1RV1RLWnlqcFBFaklTdjVXYVJVOU9GZVJwb2s2WWN0blltRHI1cE5seVQyYlJqWGgwSk1oalk2aFcrQUxFd0lIIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc2NyZWVuLmNzcyIgdHlwZT0idGV4dC9jc3MiPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPg0KICA8bGluayByZWw9Imljb24iIGhyZWY9ImltZy90aHJlYWRmaW4uaWNvIj4NCjwvaGVhZD4NCg0KPGJvZHkgb25sb2FkPSJqYXZhc2NyaXB0OiBQYWdlUmVhZHkoKTsiPg0KDQogIDxkaXYgaWQ9ImxvYWRpbmciIGNsYXNzPSJtb2RhbCBmYWRlIj4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbG9hZGVyIj48L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBpZD0icG9wdXAiIGNsYXNzPSJtb2RhbCBmYWRlIj4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwteGwiPg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCIgaWQ9InBvcHVwTW9kYWxDb250ZW50Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIiBpZD0icG9wdXBIZWFkZXIiPjwvZGl2Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiIGlkPSJwb3B1cEJvZHkiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIiBpZD0icG9wdXBCb2R5Q29udGFpbmVyIj4NCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IiBpZD0icG9wdXBSb3ciPg0KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InBvcHVwQ3VzdG9tIj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0ic2VydmVyX2luZm9ybWF0aW9uIj48L2Rpdj4NCiAgDQogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSIvd2ViIiB0aXRsZT0ibG9nbyI+DQogICAgICAgIDxzcGFuIGlkPSJsb2dvIj48L3NwYW4+DQogICAgICA8L2E+DQogICAgICA8YnV0dG9uIGNsYXNzPSJuYXZiYXItdG9nZ2xlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWJzLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtbGFiZWw9IlRvZ2dsZSBuYXZpZ2F0aW9uIj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hdmJhci10b2dnbGVyLWljb24iPjwvc3Bhbj4NCiAgICAgIDwvYnV0dG9uPg0KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIiBpZD0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCI+DQogICAgICAgIDx1bCBjbGFzcz0ibmF2YmFyLW5hdiBteC1hdXRvIG1iLTIgbWItbGctMCIgaWQ9Im1haW4tbWVudSI+DQogICAgICAgIDwvdWw+DQogICAgICAgIDx1bD4NCiAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1saW5rIiBkYXRhLWJzLXRvZ2dsZT0ibW9kYWwiIGRhdGEtYnMtdGFyZ2V0PSIjc2VydmVyX2luZm9ybWF0aW9uIiBpZD0ic2VydmVyX2luZm9ybWF0aW9uX2J1dHRvbiI+PGkgY2xhc3M9ImZhcyBmYS1pbmZvLWNpcmNsZSI+PC9pPiBTZXJ2ZXIgSW5mb3JtYXRpb248L2xpPg0KICAgICAgICA8L3VsPg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvbmF2Pg0KICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmxleCI+DQogICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiBjb2wtc20tMTIiPg0KICAgICAgICA8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0idGFibGUtcmVzcG9uc2l2ZSI+PC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJyb3ciIGlkPSJteVN0cmVhbXNCb3giPg0KICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTUgY29sLXNtLTEyIHRhYmxlLXJlc3BvbnNpdmUgZmxvYXQtc3RhcnQiPg0KICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWRhcmsgdGFibGUtYm9yZGVyZWQgY2FwdGlvbi10b3AiIGlkPSJhY3RpdmVTdHJlYW1zIj48L3RhYmxlPg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtc20tMTIgdGFibGUtcmVzcG9uc2l2ZSBmbG9hdC1lbmQiPg0KICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWRhcmsgdGFibGUtYm9yZGVyZWQgY2FwdGlvbi10b3AiIGlkPSJpbmFjdGl2ZVN0cmVhbXMiPjwvdGFibGU+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBpZD0ibm90aWZpY2F0aW9uX2NvbnRhaW50ZXIiIGNsYXNzPSJub3RpZmljYXRpb24iPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPg0KICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIiPg0KICAgICAgICA8aDUgY2xhc3M9InRpdGxlIiBpZD0ibm90aWZpY2F0aW9uX3RpdGxlIj48L2g1Pg0KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSBidG4tY2xvc2Utd2hpdGUiIGlkPSJjbG9zZU5vdGlmaWNhdGlvbiI+PC9idXR0b24+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkgbm90aWZpY2F0aW9uQ29udGVudCI+DQogICAgICAgICAgPHAgaWQ9Im5vdGlmaWNhdGlvbl90ZXh0Ij48L3A+DQogICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVwZGF0ZU5vdyIgaWQ9InVwZGF0ZU5vd0J1dHRvbiI+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9InRvcEZ1bmN0aW9uKCkiIGlkPSJiYWNrVG9Ub3AiPg0KICAgIDxpbWcgc3JjPSJpY29ucy9jaGV2cm9uLWRvdWJsZS11cC5zdmciIGFsdD0iR28gdG8gdG9wIj4NCiAgPC9idXR0b24+DQoNCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMy4zL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHoiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY2xpcGJvYXJkLmpzLzIuMC4xMS9jbGlwYm9hcmQubWluLmpzIiBpbnRlZ3JpdHk9InNoYTUxMi03TzVwWHBjMG9DUnJ4azhSVWZEWUZnbjBuTzF0K2pMdUlPUWRPTVJwNEFQQjd1WjR2U2pzcHpwNXk2WUR0RHM0VnpVU1RiV3pCRlovTEtKaG55Rk9Ldz09IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiByZWZlcnJlcnBvbGljeT0ibm8tcmVmZXJyZXIiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvc2VydmVyX2luZm9ybWF0aW9uLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmsuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvb3B0aW9uX2RpYWxvZ3VlLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL21lbnUuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvc2V0dGluZ3MuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbG9ncy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9iYXNlLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL3ZlcnNpb25fY2hlY2suanMiPjwvc2NyaXB0Pg0KDQo8L2JvZHk+PC9odG1sPg==" webUI["web/public/login.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHk+DQogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSIvd2ViIj4NCiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4NCiAgICAgIDwvYT4NCiAgICA8L2Rpdj4NCiAgPC9uYXY+DQogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj4NCiAgICAgICAgICAgIDxoMz57ey5sb2dpbi5oZWFkbGluZX19PC9oMz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgPHAgaWQ9ImVyciIgY2xhc3M9ImVycm9yTXNnIGNlbnRlciI+e3suYXV0aGVudGljYXRpb25FcnJ9fTwvcD4NCiAgICAgICAgICAgIDxmb3JtIGlkPSJhdXRoZW50aWNhdGlvbiIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgICAgICAgPGg1Pnt7LmxvZ2luLnVzZXJuYW1lLnRpdGxlfX06PC9oNT4NCiAgICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VybmFtZSIgdHlwZT0idGV4dCIgbmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJVc2VybmFtZSIgdmFsdWU9IiI+DQogICAgICAgICAgICAgIDxoNT57ey5sb2dpbi5wYXNzd29yZC50aXRsZX19OjwvaDU+DQogICAgICAgICAgICAgIDxpbnB1dCBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiB2YWx1ZT0iIj4NCiAgICAgICAgICAgICAgPGlucHV0IGlkPSJzdWJtaXQiIGNsYXNzPSIiIHR5cGU9InN1Ym1pdCIgb25zdWJtaXQ9ImphdmFzY3JpcHQ6bG9naW4oKTsiIHZhbHVlPSJ7ey5idXR0b24ubG9naW59fSI+DQogICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KDQogIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1BM3JKRDg1Nktvd1NiN2R3bFpkWUVrTzM5R2FnaTd2SXNGMGpyUkFvUW1ES0t0UUJIVXVMWjlBc1N2NGpENFhhIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9uZXR3b3JrX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2F1dGhlbnRpY2F0aW9uX3RzLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCg0KPC9odG1sPg==" webUI["web/public/maintenance.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jhc2UuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQo8L2hlYWQ+DQoNCjxib2R5Pg0KDQogIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImltZ0NlbnRlciI+PC9kaXY+DQoNCiAgPGRpdiBpZD0iYm94Ij4NCg0KICAgIDxkaXYgaWQ9ImhlYWRsaW5lIj4NCiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj5NYWludGVuYW5jZTwvaDE+DQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCiAgICAgIFRocmVhZGZpbiBpcyB1cGRhdGluZyB0aGUgZGF0YWJhc2UsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj48L2Rpdj4NCg0KICA8L2Rpdj4NCg0KPC9ib2R5Pg0KDQo8L2h0bWw+" - webUI["web/public/css/base.css"] = "KnsNCiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOw0KICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7DQogIC1tcy1hcHBlYXJhbmNlOiBub25lOw0KICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsNCiAgbGV0dGVyLXNwYWNpbmc6IDJweDsNCn0NCg0KLyoNCjo6LXdlYmtpdC1zY3JvbGxiYXIgeyANCiAgICBkaXNwbGF5OiBub25lOyANCn0NCiovDQoNCjo6LXdlYmtpdC1zY3JvbGxiYXIgew0KICB3aWR0aDogMTJweDsNCiAgaGVpZ2h0OiAxMnB4Ow0KfQ0KDQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgew0KICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA2cHggcmdiYSgwLCAwLCAwLCAwLjMpOw0KICBib3JkZXItcmFkaXVzOiA1cHg7DQoNCn0NCg0KOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7DQogIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC42KTsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCn0NCg0KOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7DQogIGJhY2tncm91bmQ6ICMzMzM7DQp9DQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQp9DQoNCmEgew0KICBjb2xvcjogIzAwRTZGRjsNCn0NCg0KaHRtbCwNCmJvZHkgew0KICBjb2xvcjogI2ZmZjsNCiAgbWFyZ2luOiAwcHggYXV0bzsNCiAgaGVpZ2h0OiAxMDAlOw0KICBmb250LXNpemU6IDE0cHg7DQp9DQoNCmgyIHsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBsZXR0ZXItc3BhY2luZzogMnB4Ow0KfQ0KDQpoMyB7DQogIGZvbnQtc2l6ZTogMjJweDsNCiAgbGV0dGVyLXNwYWNpbmc6IDFweDsNCn0NCg0KaDQgew0KICBmb250LXNpemU6IDIwcHg7DQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQogIGxpbmUtaGVpZ2h0OiAxLjVlbTsNCg0KfQ0KDQpoNSB7DQogIGZvbnQtc2l6ZTogMTZweDsNCiAgbGV0dGVyLXNwYWNpbmc6IDFweDsNCiAgbGluZS1oZWlnaHQ6IDEuMmVtOw0KICBtYXJnaW46IDBweCBhdXRvOw0KICBtYXJnaW4tbGVmdDogMTBweDsNCn0NCg0KaHIgew0KICBib3JkZXI6IDA7DQogIGhlaWdodDogMXB4Ow0KICBiYWNrZ3JvdW5kOiAjMzMzOw0KICBtYXJnaW46IDEwcHggMHB4Ow0KfQ0KDQpwIHsNCiAgbWFyZ2luOiAycHg7DQogIHBhZGRpbmc6IDJweCA1cHg7DQp9DQoNCnByZSB7DQogIG1hcmdpbjogMHB4IDBweCA1cHggMHB4Ow0KICBmb250LXNpemU6IDEycHg7DQogIGNvbG9yOiAjZGRkOw0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7DQogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgZm9udC1zdHlsZTogbm9ybWFsOw0KICBmb250LXZhcmlhbnQ6IG5vcm1hbDsNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KfQ0KDQpsYWJlbCB7DQogIG1hcmdpbi1ib3R0b206IDIwcHg7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQpsaSB7DQogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zOw0KfQ0KDQpsaTpob3ZlciB7DQogIGJvcmRlci1jb2xvcjogIzAwRTZGRg0KfQ0KDQpzZWxlY3Qgew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIHdpZHRoOiBjYWxjKDEwMCUgKyAycHgpOw0KICBoZWlnaHQ6IGF1dG87DQogIGJvcmRlcjogc29saWQgMHB4ICMwMEU2RkY7DQogIGJvcmRlci1yYWRpdXM6IDBweDsNCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgb3V0bGluZTogbm9uZTsNCiAgY29sb3I6ICNmZmY7DQogIHBhZGRpbmc6IDlweCAxMHB4Ow0KICBkaXNwbGF5OiBibG9jazsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsNCiAgZm9udC1zaXplOiAxNHB4Ow0KICBtYXJnaW46IDVweCAwcHggNXB4IDBweDsNCn0NCg0Kc2VsZWN0OmZvY3VzIHsNCiAgb3V0bGluZTogbm9uZTsNCn0NCg0KaW5wdXQgew0KICAtd2Via2l0LWFwcGVhcmFuY2U6IHVuc2V0Ow0KICBtYXJnaW46IDBweDsNCiAgcGFkZGluZzogMi41cHggMTBweDsNCiAgb3V0bGluZTogbm9uZTsNCiAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl0sDQppbnB1dFt0eXBlPXN1Ym1pdF0gew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIG1hcmdpbjogMTBweCAxMHB4Ow0KICBwYWRkaW5nOiAxMHB4IDI1cHg7DQogIGJvcmRlcjogc29saWQgMHB4Ow0KICBib3JkZXItY29sb3I6ICMwMDA7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCiAgb3V0bGluZTogbm9uZTsNCiAgY29sb3I6ICNmZmY7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpmb2N1cyB7DQogIG91dGxpbmU6IG5vbmU7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl06aG92ZXIuZGVsZXRlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOw0KICBjb2xvcjogI2ZmZjsNCn0NCg0KaW5wdXRbdHlwZT10ZXh0XSwNCmlucHV0W3R5cGU9c2VhcmNoXSwNCmlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgY29sb3I6ICNmZmY7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDBweCk7DQogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDBweCk7DQogIHdpZHRoOiBjYWxjKDEwMCUgLSAwcHgpOw0KICBvdXRsaW5lOiBub25lOw0KICBib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudDsNCiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1ib3R0b20tY29sb3I6ICM1NTU7DQogIGJvcmRlci1yYWRpdXM6IDBweDsNCiAgcGFkZGluZzogOHB4IDEwcHg7DQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICBib3JkZXI6IHNvbGlkIDFweCAjMDBFNkZGOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBoZWlnaHQ6IDI1cHg7DQogIHdpZHRoOiAyNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIC8qDQogIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7DQogICovDQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7DQogIGNvbG9yOiAjZmZmOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBFNkZGOw0KICAvKmRpc3BsYXk6IGlubGluZS1ibG9jazsqLw0KfQ0KDQppbnB1dFt0eXBlPSJjaGVja2JveCJdOmJlZm9yZSB7DQogIHBvc2l0aW9uOiBpbml0aWFsOw0KICBsZWZ0OiAwcHg7DQogIG1hcmdpbi1sZWZ0OiAtNHB4Ow0KICBjb250ZW50OiAiICI7DQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogaW5pdGlhbDsNCiAgbGVmdDogMHB4Ow0KICBtYXJnaW4tbGVmdDogLTNweDsNCiAgY29udGVudDogIuKckyI7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPSJjaGVja2JveCJdLmJ1bGs6Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGxlZnQ6IDBweDsNCiAgdG9wOiAtMTFweDsNCiAgbWFyZ2luLWxlZnQ6IC0zcHg7DQogIGNvbnRlbnQ6ICLinJMiOw0KICBmb250LXNpemU6IDEuNWVtOw0KICBjb2xvcjogIzAwMDsNCn0NCg0KDQppbnB1dFt0eXBlPWJ1dHRvbl0uY2FuY2VsIHsNCg0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiByZWQ7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXS5zYXZlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQoNCmlucHV0W3R5cGU9YnV0dG9uXS5ibGFjaywNCmlucHV0W3R5cGU9c3VibWl0XS5ibGFjayB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KaW5wdXRbdHlwZT1idXR0b25dLmNlbnRlciB7DQogIG1hcmdpbi1yaWdodDogYXV0bzsNCiAgbWFyZ2luLWxlZnQ6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KLnBvaW50ZXIgew0KICBjdXJzb3I6IHBvaW50ZXI7DQp9DQoNCi5wb2ludGVyOmhvdmVyIHsNCiAgY29sb3I6ICMwMEU2RkY7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KLnNvcnRUaGlzIHsNCiAgY29sb3I6ICMwMEU2RkY7DQp9DQoNCi53NDBweCB7DQogIG1heC13aWR0aDogNDBweDsNCn0NCg0KLnc1MHB4IHsNCiAgbWF4LXdpZHRoOiA1MHB4Ow0KfQ0KDQoudzgwcHggew0KICBtYXgtd2lkdGg6IDgwcHg7DQp9DQoNCi53MTUwcHggew0KICBtYXgtd2lkdGg6IDE1MHB4Ow0KfQ0KDQoudzIwMHB4IHsNCiAgbWF4LXdpZHRoOiAyMDBweDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgd2lkdGg6IDIwMHB4Ow0KICBvdmVyZmxvdy14OiBoaWRkZW47DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KfQ0KDQoudzMwMHB4IHsNCiAgbWF4LXdpZHRoOiAzMDBweDsNCn0NCg0KLncyMjBweCB7DQogIG1heC13aWR0aDogMjIwcHg7DQogIGN1cnNvcjogYWxpYXM7DQp9DQoNCi5mb290ZXIgew0KICBmb250LXNpemU6IDEwcHg7DQp9DQoNCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi5zY3JlZW5Mb2dIaWRkZW4gew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xMTBweCk7DQp9DQoNCi5ib3JkZXJTcGFjZSB7DQogIG1hcmdpbi1ib3R0b206IDMwcHg7DQp9DQoNCi5ub25lIHsNCiAgZGlzcGxheTogbm9uZTsNCn0NCg0KDQoubm90VmlzaWJsZSB7DQogIGhlaWdodDogMHB4Ow0KICBkaXNwbGF5OiBub25lOw0KICBvcGFjaXR5OiAwOw0KICBib3JkZXItYm90dG9tOiAjMDAwIHNvbGlkIDBweDsNCg0KfQ0KDQoudmlzaWJsZSB7DQogIG9wYWNpdHk6IDE7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBib3JkZXItYm90dG9tOiAjNDQ0IHNvbGlkIDFweDsNCiAgcGFkZGluZzogMTBweDsNCn0NCg0KLmZsb2F0UmlnaHQgew0KICBmbG9hdDogcmlnaHQ7DQp9DQoNCi5mbG9hdExlZnQgew0KICBmbG9hdDogbGVmdDsNCn0NCg0KLm1lbnUtYWN0aXZlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsNCn0NCg0KdGFibGUgew0KICB3aWR0aDogMTAwJQ0KfQ0KDQojYnJhbmNoIHsNCiAgY29sb3I6IHJlZDsNCn0NCg0KI2ludGVyYWN0aW9uIHsNCiAgbWFyZ2luLWJvdHRvbTogMTAwcHg7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMHB4ICM3Nzc7DQp9DQoNCg0KLmhhbGYgew0KICBkaXNwbGF5OiBibG9jazsNCiAgd2lkdGg6IDQ1JTsNCn0NCg0KLm1lbnUgew0KICBib3JkZXI6IHNvbGlkIDFweCAjMDBFNkZGOw0KfQ0KDQouaW5mb01zZyB7DQogIGNvbG9yOiAjYWFhOw0KfQ0KDQouZXJyb3JNc2cgew0KICBjb2xvcjogcmVkOw0KfQ0KDQoud2FybmluZ01zZyB7DQogIGNvbG9yOiB5ZWxsb3c7DQp9DQoNCi5kZWJ1Z01zZyB7DQogIGNvbG9yOiBtYWdlbnRhOw0KfQ0KDQoNCi5jYXRlZ29yeSB7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAycHgNCn0NCg0KLm5ld3Mgew0KICBib3JkZXItY29sb3I6IHRvbWF0bw0KfQ0KDQoubW92aWUgew0KICBib3JkZXItY29sb3I6IHJveWFsYmx1ZTsNCn0NCg0KLnNlcmllcyB7DQogIGJvcmRlci1jb2xvcjogZ29sZDsNCn0NCg0KLnNwb3J0cyB7DQogIGJvcmRlci1jb2xvcjogeWVsbG93Z3JlZW47DQp9DQoNCi5raWRzIHsNCiAgYm9yZGVyLWNvbG9yOiBtZWRpdW1wdXJwbGU7DQp9DQoNCi8qIExvYWRpbmcgKi8NCiNsb2FkaW5nIHsNCiAgbGVmdDogMHB4Ow0KICB0b3A6IDBweDsNCiAgei1pbmRleDogMTAwMDA7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpOw0KICBtYXJnaW46IGF1dG87DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IDEwMCU7DQp9DQoNCg0KLmxvYWRlciB7DQogIGJvcmRlcjogNXB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICBib3JkZXItcmFkaXVzOiA1MCU7DQogIGJvcmRlci10b3A6IDVweCBzb2xpZCAjMDBFNkZGOw0KICBib3JkZXItYm90dG9tOiA1cHggc29saWQgIzAwRTZGRjsNCiAgd2lkdGg6IDUwcHg7DQogIGhlaWdodDogNTBweDsNCiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7DQogIGFuaW1hdGlvbjogc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTsNCg0KICBwb3NpdGlvbjogZml4ZWQ7DQogIG1hcmdpbjogYXV0bzsNCg0KICB0b3A6IDA7DQogIHJpZ2h0OiAwOw0KICBib3R0b206IDA7DQogIGxlZnQ6IDA7DQoNCn0NCg0KLm5vdGlmaWNhdGlvbiB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGNvbG9yOiAjZmZmOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIHBhZGRpbmc6IDEwcHg7IC8qIEFkanVzdCBwYWRkaW5nIGFzIG5lZWRlZCAqLw0KICBwb3NpdGlvbjogZml4ZWQ7DQogIGJvdHRvbTogMjBweDsgLyogQWRqdXN0IHBvc2l0aW9uIGFzIG5lZWRlZCAqLw0KICByaWdodDogMjBweDsgLyogQWRqdXN0IHBvc2l0aW9uIGFzIG5lZWRlZCAqLw0KICB6LWluZGV4OiAxMDAwOw0KICBkaXNwbGF5OiBub25lOyAvKiBJbml0aWFsbHkgaGlkZGVuICovDQogIHdpZHRoOiAzMDBweDsgLyogQWRqdXN0IHdpZHRoIGFzIG5lZWRlZCAqLw0KICBtYXgtaGVpZ2h0OiBjYWxjKDgwdmggLSAxMHB4KTsgLyogQWRqdXN0IGhlaWdodCBhcyBuZWVkZWQgKi8NCiAgYm9yZGVyLXJhZGl1czogMTBweDsgLyogT3B0aW9uYWw6IHJvdW5kZWQgY29ybmVycyAqLw0KICBib3gtc2hhZG93OiAwIDAgMTBweCByZ2JhKDAsIDAsIDAsIDAuNSk7IC8qIE9wdGlvbmFsOiBhZGQgc2hhZG93IGZvciBiZXR0ZXIgdmlzaWJpbGl0eSAqLw0KfQ0KDQoubm90aWZpY2F0aW9uIC5oZWFkZXIgew0KICBkaXNwbGF5OiBmbGV4Ow0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQp9DQoNCi5ub3RpZmljYXRpb24gLmNvbnRlbnQgew0KICBmbGV4LWdyb3c6IDE7IC8qIEFsbG93IGNvbnRlbnQgdG8gZ3JvdyBhbmQgdGFrZSBhdmFpbGFibGUgc3BhY2UgKi8NCiAgb3ZlcmZsb3cteTogYXV0bzsgLyogRW5hYmxlIHZlcnRpY2FsIHNjcm9sbGluZyBpZiBjb250ZW50IG92ZXJmbG93cyAqLw0KICBtYXJnaW4tYm90dG9tOiAxMHB4OyAvKiBFbnN1cmUgdGhlcmUncyBhIGdhcCB0byB0aGUgYm90dG9tICovDQp9DQoNCi5mYS1zdHlsZSB7DQogIGNvbG9yOiAjRkZGOw0KICBmb250LXNpemU6IDI1cHg7DQp9DQoNCi5mYS1zdHlsZTpob3ZlciB7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4yKTsNCn0NCg0KLm5vdGlmaWNhdGlvbkNvbnRlbnQgew0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KDQoudXBkYXRlTm93IHsNCiAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KfQ0KDQojYmFja1RvVG9wIHsNCiAgZGlzcGxheTogbm9uZTsgLyogSGlkZGVuIGJ5IGRlZmF1bHQgKi8NCiAgcG9zaXRpb246IGZpeGVkOyAvKiBGaXhlZC9zdGlja3kgcG9zaXRpb24gKi8NCiAgYm90dG9tOiA1MHB4OyAvKiBQbGFjZSB0aGUgYnV0dG9uIGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgKi8NCiAgcmlnaHQ6IDUwcHg7IC8qIFBsYWNlIHRoZSBidXR0b24gMzBweCBmcm9tIHRoZSByaWdodCAqLw0KICB6LWluZGV4OiA5OTsgLyogTWFrZSBzdXJlIGl0IGRvZXMgbm90IG92ZXJsYXAgKi8NCiAgYm9yZGVyOiBub25lOyAvKiBSZW1vdmUgYm9yZGVycyAqLw0KICBvdXRsaW5lOiBub25lOyAvKiBSZW1vdmUgb3V0bGluZSAqLw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOw0KICBjdXJzb3I6IHBvaW50ZXI7IC8qIEFkZCBhIG1vdXNlIHBvaW50ZXIgb24gaG92ZXIgKi8NCiAgcGFkZGluZzogNXB4IDEwcHggMTBweCAxMHB4OyAvKiBTb21lIHBhZGRpbmcgKi8NCiAgYm9yZGVyLXJhZGl1czogNXB4OyAvKiBSb3VuZGVkIGNvcm5lcnMgKi8NCn0NCg0KI2JhY2tUb1RvcDpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7IC8qIEFkZCBhIGRhcmstZ3JleSBiYWNrZ3JvdW5kIG9uIGhvdmVyICovDQp9DQoNCkAtd2Via2l0LWtleWZyYW1lcyBzcGluIHsNCiAgMCUgew0KICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7DQogIH0NCg0KICAxMDAlIHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7DQogIH0NCn0NCg0KQGtleWZyYW1lcyBzcGluIHsNCiAgMCUgew0KICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOw0KICB9DQoNCiAgMTAwJSB7DQogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsNCiAgfQ0KfQ==" - webUI["web/public/css/screen.css"] = "bmF2IGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXgtaGVpZ2h0OiAyMHB4Ow0KICBtYXgtd2lkdGg6IDIwcHg7DQogIGZsb2F0OiBsZWZ0Ow0KfQ0KDQpuYXYgcCB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHBhZGRpbmc6IDBweCAzMHB4Ow0KfQ0KDQojbGF5b3V0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogMTAwJTsNCn0NCi8qDQouZm9ybS1jb250cm9sIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCiAgY29sb3I6ICNGRkY7DQogIHBvaW50ZXItZXZlbnRzOiBub25lOw0KfSovDQoNCi5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCn0NCg0KLmxheW91dC1sZWZ0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1pbi13aWR0aDogMTUwcHg7DQogIG1heC13aWR0aDogMjAlOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOw0KICBoZWlnaHQ6IGluaGVyaXQ7DQogIGZsb2F0OiBsZWZ0Ow0KfQ0KDQoubGF5b3V0LXJpZ2h0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQp9DQoNCiNtZW51LXdyYXBwZXIgew0KICBoZWlnaHQ6IDEwMCU7DQp9DQoNCg0KI2xvZ28gew0KICBkaXNwbGF5OiBibG9jazsNCiAgbWluLXdpZHRoOiAxODBweDsNCiAgd2lkdGg6IDEwMCU7DQogIGhlaWdodDogMTAwcHg7DQogIGJhY2tncm91bmQ6IHVybCgiLi4vaW1nL3RocmVhZGZpbi5wbmciKTsNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOw0KICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7DQp9DQoNCg0KI3BhZ2Ugew0KICBtYXgtd2lkdGg6IDk1MHB4Ow0KICBtYXJnaW46IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQoNCiAgLyoNCiAgaGVpZ2h0OiAtd2Via2l0LWNhbGMoMTAwJSAtIDEzMHB4KTsNCiAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEzMHB4KTsNCiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMzBweCk7DQogICovDQoNCiAgbWluLWhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMjBweCk7DQogIG1pbi1oZWlnaHQ6IC1tb3otY2FsYygxMDAlIC0gMTIwcHgpOw0KICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAxMjBweCk7DQoNCg0KICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAjMjIyOw0KDQp9DQoNCiN1aVNldHRpbmcgew0KICBmbG9hdDogcmlnaHQ7DQogIG1hcmdpbi1yaWdodDogMjVweDsNCn0NCg0KI2JveCBpbnB1dFt0eXBlPXRleHRdLA0KI2JveCBpbnB1dFt0eXBlPXBhc3N3b3JkXSB7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojYm94IGlucHV0W3R5cGU9c3VibWl0XSB7DQogIG1hcmdpbjogNTBweCBhdXRvOw0KfQ0KDQojc2V0dGluZ3Mgew0KICBkaXNwbGF5OiBibG9jazsNCiAgcGFkZGluZzogMTBweCAxMHB4Ow0KfQ0KDQojc2V0dGluZ3MgaDUgew0KICBtYXJnaW46IDUwcHggMHB4IDEwcHggMHB4Ow0KfQ0KDQojY29udGVudC1pbnRlcmFjdGlvbiAuc2VhcmNoIHsNCiAgd2lkdGg6IDIwMHB4Ow0KICBib3JkZXI6IDFweCBzb2xpZCAjMDAwOw0KICBwYWRkaW5nOiA5cHg7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIG1hcmdpbjogMTBweDsNCiAgZmxvYXQ6IHJpZ2h0Ow0KICBib3JkZXItcmFkaXVzOiAzcHg7DQoNCn0NCg0KI215U3RyZWFtcyB7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgYm90dG9tOiAwcHg7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQogIHdpZHRoOiAxMDAlOw0KICBtYXgtd2lkdGg6IDk1MHB4Ow0KDQogIC8qDQogIG1heC1oZWlnaHQ6IDEwMHB4Ow0KICAqLw0KICBtYXJnaW4tYm90dG9tOiAwcHg7DQp9DQoNCiNteVN0cmVhbXMgaW1nIHsNCiAgd2lkdGg6IDQlOw0KICBwYWRkaW5nOiAycHggNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZsb2F0OiByaWdodDsNCn0NCg0KLyogV2l6YXJkKi8NCiNib3ggew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KICBtaW4taGVpZ2h0OiA0MDBweDsNCg0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQp9DQoNCiNib3ggcCB7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KfQ0KDQojYm94LWZvb3RlciB7DQogIG1hcmdpbi10b3A6IGF1dG87DQp9DQoNCiNib3gtZm9vdGVyIHsNCiAgbWFyZ2luOiBhdXRvOw0KICBwYWRkaW5nOiAxMHB4Ow0KfQ0KDQojaGVhZGxpbmUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOw0KICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggIzIyMjsNCiAgdHJhbnNpdGlvbjogYWxsIDAuNXM7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KI2NvbnRlbnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgb3ZlcmZsb3c6IGF1dG87DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi8qIC0tLSAqLw0KDQoNCiNjbGllbnRJbmZvLA0KI2FjdGl2ZVN0cmVhbXMsDQojaW5hY3RpdmVTdHJlYW1zIHsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgY29sb3I6ICMwMEU2RkY7DQogIHBhZGRpbmc6IDBweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMgdGhlYWQsDQojaW5hY3RpdmVTdHJlYW1zIHRoZWFkIHsNCiAgZm9udC1zaXplOiAyZW07DQp9DQoNCiNvcGVuU3RyZWFtcyB7DQogIHdpZHRoOiAyMHB4Ow0KICBoZWlnaHQ6IDIwMHB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZsb2F0OiByaWdodDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMHB4Ow0KICBib3R0b206IDBweDsNCiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdG91Y2gucG5nIik7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQoNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIHJpZ2h0Ow0KfQ0KDQojYWxsU3RyZWFtcyB7DQogIHBhZGRpbmc6IDJweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMgLnRkS2V5LA0KI2luYWN0aXZlU3RyZWFtcyAudGRLZXkgew0KICB3aWR0aDogMTE1cHg7DQogIGxldHRlci1zcGFjaW5nOiAwcHg7DQp9DQoNCmNhcHRpb24gew0KICBjb2xvcjogI0ZGRjsNCiAgZm9udC1zaXplOiAyZW07DQp9DQoNCi50ZEtleSB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi50ZFZhbCB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi5tb2RhbC1oZWFkZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5Ow0KfQ0KLm1vZGFsLWJvZHkgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KfQ0KDQojaW5hY3RpdmVTdHJlYW1zIC50ZEtleSB7DQogIGNvbG9yOiByZWQ7DQp9DQoNCiNjbGllbnRJbmZvIC50ZFZhbCwNCiNsb2dJbmZvIC50ZFZhbCwNCiNhY3RpdmVTdHJlYW1zIC50ZFZhbCwNCiNpbmFjdGl2ZVN0cmVhbXMgLnRkVmFsLA0KI21hcHBpbmdJbmZvIC50ZFZhbCB7DQogIGNvbG9yOiAjYWFhOw0KICB3aGl0ZS1zcGFjZTogaW5oZXJpdDsNCn0NCg0KI2JveC13cmFwcGVyIHsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICB3aWR0aDogMTAwJTsNCg0KICBvdmVyZmxvdy15OiBzY3JvbGw7DQp9DQoNCiNjb250ZW50VGFibGUsDQojaW5hY3RpdmVDb250ZW50VGFibGUsDQojbWFwcGluZy1kZXRhaWwtdGFibGUsDQojY29udGVudFRhYmxlIHsNCiAgZGlzcGxheTogdGFibGU7DQogIC0tYnMtdGFibGUtY29sb3I6IG5vbmU7DQogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQogIG92ZXJmbG93LXk6IHNjcm9sbDsNCn0NCg0KI2luYWN0aXZlQ29udGVudFRhYmxlIHsNCiAgbWFyZ2luLXRvcDogMiU7DQp9DQoNCg0KI2NvbnRlbnRUYWJsZSAuY29udGVudFRhYmxlSGVhZGVyLA0KI2luYWN0aXZlQ29udGVudFRhYmxlIC5pbmFjdGl2ZUNvbnRlbnRUYWJsZUhlYWRlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGhlaWdodDogNTBweDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMxMTE7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggIzMzMzsNCiAgY3Vyc29yOiBhdXRvOw0KDQp9DQoNCg0KdGJvZHkgew0KICB3aWR0aDogMTAwJTsNCn0NCg0KDQoudGFibGVFbGxpcHNpcyB7DQogIHdpZHRoOiAxNTBweDsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQp9DQoNCiNjb250ZW50VGFibGUgaW1nLA0KI2luYWN0aXZlQ29udGVudFRhYmxlIGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KICBtYXgtd2lkdGg6IDYwcHg7DQp9DQoNCiNjb250ZW50VGFibGUgdHIsDQojaW5hY3RpdmVDb250ZW50VGFibGUgdHIgew0KICBib3JkZXItbGVmdDogc29saWQgM3B4IDQ0NDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMzMzM7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KI2NvbnRlbnRUYWJsZSB0cjpob3ZlciwNCiNpbmFjdGl2ZUNvbnRlbnRUYWJsZSB0cjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQp9DQoNCiNjb250ZW50VGFibGUgdGQsDQojaW5hY3RpdmVDb250ZW50VGFibGUgdGQgew0KDQogIHBhZGRpbmc6IDBweCAycHg7DQp9DQoNCiNjb250ZW50VGFibGUgaW5wdXRbdHlwZT10ZXh0XSwNCiNpbmFjdGl2ZUNvbnRlbnRUYWJsZSBpbnB1dFt0eXBlPXRleHRdIHsNCiAgd2lkdGg6IDgwJTsNCiAgbWluLXdpZHRoOiAzNXB4Ow0KICBtYXgtd2lkdGg6IDYwcHg7DQogIGJvcmRlcjogMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBtYXJnaW4tbGVmdDogNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQojY29udGVudFRhYmxlIGlucHV0W3R5cGU9Y2hlY2tib3hdLA0KI2luYWN0aXZlQ29udGVudFRhYmxlIGlucHV0W3R5cGU9Y2hlY2tib3hdIHsNCiAgbWF4LXdpZHRoOiAyNXB4Ow0KICBtYXJnaW46IGF1dG87DQp9DQoNCg0KLnNob3dCdWxrIHsNCiAgZGlzcGxheTogYmxvY2s7DQp9DQoNCi5oaWRlQnVsayB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCiNjb250ZW50VGFibGUgdHIuYWN0aXZlRVBHLA0KI2luYWN0aXZlQ29udGVudFRhYmxlIHRyLmFjdGl2ZUVQRyB7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggbGF3bmdyZWVuOw0KfQ0KDQojY29udGVudFRhYmxlIHRyLm5vdEFjdGl2ZUVQRywNCiNpbmFjdGl2ZUNvbnRlbnRUYWJsZSB0ci5ub3RBY3RpdmVFUEcgew0KICBib3JkZXItbGVmdDogc29saWQgM3B4IHJlZDsNCn0NCg0KDQojbG9nU2NyZWVuIHAgew0KICB3aGl0ZS1zcGFjZTogcHJlOw0KICBmb250LXNpemU6IDEwcHg7DQogIC8qDQogIGxpbmUtaGVpZ2h0OiAxLjZlbTsNCiAgZm9udC1mYW1pbHk6ICJBcmlhbCIsIHNhbnMtc2VyaWY7DQogICovDQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgZm9udC1zdHlsZTogbm9ybWFsOw0KICBmb250LXZhcmlhbnQ6IG5vcm1hbDsNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwsDQojdXNlci1kZXRhaWwsDQojZmlsZS1kZXRhaWwgew0KICBib3gtc2hhZG93OiAwcHggNXB4IDQwcHggIzAwMDsNCiAgbWFyZ2luLXRvcDogMjBweDsNCiAgbWFyZ2luLWxlZnQ6IGF1dG87DQogIG1hcmdpbi1yaWdodDogYXV0bzsNCg0KICBtYXgtd2lkdGg6IDYwMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOw0KICBwYWRkaW5nOiAxMHB4Ow0KICBvdmVyZmxvdzogYXV0bzsNCn0NCg0KI2ZpbGUtZGV0YWlsIGlucHV0W3R5cGU9dGV4dF0gew0KICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IC1tb3otY2FsYygxMDAlIC0gMjBweCk7DQogIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsNCn0NCg0KI21hcHBpbmctZGV0YWlsIGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXgtaGVpZ2h0OiAzMHB4Ow0KICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSwNCiNjb250ZW50X3NldHRpbmdzIGlucHV0W3R5cGU9dGV4dF0sDQojY29udGVudF9zZXR0aW5ncyBpbnB1dFt0eXBlPXBhc3N3b3JkXSB7DQogIGJvcmRlcjogc29saWQgMXB4Ow0KICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IC1tb3otY2FsYygxMDAlIC0gMjBweCk7DQogIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsNCn0NCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlLA0KI3VzZXItZGV0YWlsLXRhYmxlIHsNCiAgZGlzcGxheTogaW5saW5lLXRhYmxlOw0KICB3aWR0aDogMTAwJTsNCn0NCg0KI2NvbnRlbnRfc2V0dGluZ3MgdGFibGUgew0KICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7DQogIHRhYmxlLWxheW91dDogZml4ZWQ7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQoNCiNtYXBwaW5nLWRldGFpbC10YWJsZSB0ZCwNCiN1c2VyLWRldGFpbC10YWJsZSB0ZCB7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KDQp9DQoNCiNtYXBwaW5nLWRldGFpbC10YWJsZSB0ZC5sZWZ0LA0KI3VzZXItZGV0YWlsLXRhYmxlIHRkLmxlZnQgew0KICB3aWR0aDogMzglOw0KfQ0KDQouaW50ZXJhY3Rpb24sDQojaW50ZXJhY3Rpb24gew0KICBtYXJnaW4tdG9wOiAyMHB4Ow0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouaW50ZXJhY3Rpb24gaW5wdXRbdHlwZT1idXR0b25dLA0KLmludGVyYWN0aW9uIGlucHV0W3R5cGU9c3VibWl0XSB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIG1pbi13aWR0aDogMTAwcHg7DQogIG1hcmdpbjogMHB4IDEwcHg7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KI25vdGlmaWNhdGlvbiB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBwb3NpdGlvbjogZml4ZWQ7DQogIHJpZ2h0OiAwcHg7DQogIGhlaWdodDogMTAwJTsNCiAgd2lkdGg6IDI1MHB4Ow0KDQogIGJhY2tncm91bmQtY29sb3I6ICMyMjI7DQogIGJveC1zaGFkb3c6IDBweCAwcHggMjBweCAjMDAwOw0KfQ0KDQojbm90aWZpY2F0aW9uIGg1IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzEyMTIxMjsNCiAgcGFkZGluZzogNXB4IDEwcHggNXB4IDEwcHg7DQp9DQoNCiNub3RpZmljYXRpb24gcHJlIHsNCiAgcGFkZGluZzogMHB4IDEwcHggMHB4IDEwcHg7DQp9DQoNCiNub3RpZmljYXRpb24gcCB7DQogIGZvbnQtc2l6ZTogMTAgcHg7DQogIG1hcmdpbjogMHB4Ow0KICBwYWRkaW5nOiAwcHggMTBweCA1cHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiAuZWxlbWVudCB7DQogIC8qcGFkZGluZzogMHB4IDVweDsqLw0KICBtYXJnaW46IDVweCA1cHg7DQogIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzE4MTgxODsNCiAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgZ3JlZW47DQp9DQoNCg0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MjBweCkgew0KICBib2R5IHsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KICB9DQoNCiAgaDEgew0KICAgIGZvbnQtc2l6ZTogMjZweDsNCiAgICBsZXR0ZXItc3BhY2luZzogM3B4Ow0KICB9DQoNCiAgbmF2IHAgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICB9DQoNCg0KDQogICNoZWFkZXJfY29uZmlnIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBoZWlnaHQ6IDEwMHB4Ow0KICAgIGJhY2tncm91bmQ6IHVybCgiLi4vaW1nL2xvZ29fd182MDB4MjAwLnBuZyIpOw0KICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQoNCiAgICBiYWNrZ3JvdW5kLXNpemU6IDMwMHB4IDEwMHB4Ow0KICB9DQoNCiAgI3NjcmVlbkxvZyB7DQogICAgbWFyZ2luLWxlZnQ6IDMwMHB4Ow0KDQogICAgdHJhbnNpdGlvbjogbm9uZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggdHJhbnNwYXJlbnQ7DQogICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggIzIyMjsNCiAgfQ0KDQogICNzZXR0aW5ncyB7DQogICAgLyoNCiAgICBoZWlnaHQ6IC13ZWJraXQtY2FsYygxMDAlIC0gMTAwcHgpOw0KICAgIGhlaWdodDogLW1vei1jYWxjKDEwMCUgLSAxMDBweCk7DQogICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMDBweCk7DQogICAgKi8NCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgb3ZlcmZsb3c6IGF1dG87DQogIH0NCg0KDQogIC5zY3JlZW5Mb2dIaWRkZW4gew0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMHB4KTsNCiAgfQ0KDQoNCiAgI2JveCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbWluLWhlaWdodDogNTAwcHg7DQogICAgbWF4LXdpZHRoOiA1MDBweDsNCiAgICBtYXJnaW46IDEwcHggYXV0bzsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KICAgIGJveC1zaGFkb3c6IDBweCA1cHggNXB4ICMyMjI7DQoNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogIH0NCn0NCg0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2MjBweCkgew0KICBib2R5IHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0OyAvKiBFbnN1cmUgdGhlIGJhY2tncm91bmQgY29sb3IgaXMgY29uc2lzdGVudCAqLw0KICB9DQoNCiAgLyogQWRkIGFueSBvdGhlciBzdHlsZXMgc3BlY2lmaWMgdG8gc21hbGwgZGV2aWNlcyBoZXJlICovDQp9DQoNCg0KLyoNCj09PT09PT09PT09PT09PSANClNpZGViYXINCj09PT09PT09PT09PT09PQ0KKi8NCjpyb290IHsNCiAgLyogZGFyayBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciovDQogIC0tY2xyLXByaW1hcnktMTogaHNsKDIwNSwgODYlLCAxNyUpOw0KICAtLWNsci1wcmltYXJ5LTI6IGhzbCgyMDUsIDc3JSwgMjclKTsNCiAgLS1jbHItcHJpbWFyeS0zOiBoc2woMjA1LCA3MiUsIDM3JSk7DQogIC0tY2xyLXByaW1hcnktNDogaHNsKDIwNSwgNjMlLCA0OCUpOw0KICAvKiBwcmltYXJ5L21haW4gY29sb3IgKi8NCiAgLS1jbHItcHJpbWFyeS01OiBoc2woMjA1LCA3OCUsIDYwJSk7DQogIC8qIGxpZ2h0ZXIgc2hhZGVzIG9mIHByaW1hcnkgY29sb3IgKi8NCiAgLS1jbHItcHJpbWFyeS02OiBoc2woMjA1LCA4OSUsIDcwJSk7DQogIC0tY2xyLXByaW1hcnktNzogaHNsKDIwNSwgOTAlLCA3NiUpOw0KICAtLWNsci1wcmltYXJ5LTg6IGhzbCgyMDUsIDg2JSwgODElKTsNCiAgLS1jbHItcHJpbWFyeS05OiBoc2woMjA1LCA5MCUsIDg4JSk7DQogIC0tY2xyLXByaW1hcnktMTA6IGhzbCgyMDUsIDEwMCUsIDk2JSk7DQogIC8qIGRhcmtlc3QgZ3JleSAtIHVzZWQgZm9yIGhlYWRpbmdzICovDQogIC0tY2xyLWdyZXktMTogaHNsKDIwOSwgNjElLCAxNiUpOw0KICAtLWNsci1ncmV5LTI6IGhzbCgyMTEsIDM5JSwgMjMlKTsNCiAgLS1jbHItZ3JleS0zOiBoc2woMjA5LCAzNCUsIDMwJSk7DQogIC0tY2xyLWdyZXktNDogaHNsKDIwOSwgMjglLCAzOSUpOw0KICAvKiBncmV5IHVzZWQgZm9yIHBhcmFncmFwaHMgKi8NCiAgLS1jbHItZ3JleS01OiBoc2woMjEwLCAyMiUsIDQ5JSk7DQogIC0tY2xyLWdyZXktNjogaHNsKDIwOSwgMjMlLCA2MCUpOw0KICAtLWNsci1ncmV5LTc6IGhzbCgyMTEsIDI3JSwgNzAlKTsNCiAgLS1jbHItZ3JleS04OiBoc2woMjEwLCAzMSUsIDgwJSk7DQogIC0tY2xyLWdyZXktOTogaHNsKDIxMiwgMzMlLCA4OSUpOw0KICAtLWNsci1ncmV5LTEwOiBoc2woMjEwLCAzNiUsIDk2JSk7DQogIC0tY2xyLXdoaXRlOiAjZmZmOw0KICAtLWNsci1yZWQtZGFyazogaHNsKDM2MCwgNjclLCA0NCUpOw0KICAtLWNsci1yZWQtbGlnaHQ6IGhzbCgzNjAsIDcxJSwgNjYlKTsNCiAgLS1jbHItZ3JlZW4tZGFyazogaHNsKDEyNSwgNjclLCA0NCUpOw0KICAtLWNsci1ncmVlbi1saWdodDogaHNsKDEyNSwgNzElLCA2NiUpOw0KICAtLWNsci1vcmFuZ2U6IGhzbCgxNCw5MyUsNTMlKTsNCiAgLS1jbHItYmxhY2s6ICMyMjI7DQogIC0tZmYtcHJpbWFyeTogJ1JvYm90bycsIHNhbnMtc2VyaWY7DQogIC0tZmYtc2Vjb25kYXJ5OiAnT3BlbiBTYW5zJywgc2Fucy1zZXJpZjsNCiAgLS10cmFuc2l0aW9uOiBhbGwgMC4zcyBsaW5lYXI7DQogIC0tc3BhY2luZzogMC4xcmVtOw0KICAtLXJhZGl1czogMC4yNXJlbTsNCiAgLS1saWdodC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjEpOw0KICAtLWRhcmstc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsNCiAgLS1tYXgtd2lkdGg6IDExNzBweDsNCiAgLS1maXhlZC13aWR0aDogNjIwcHg7DQp9DQoNCi5zaWRlYmFyLXRvZ2dsZSB7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgdG9wOiA0NHJlbTsNCiAgbGVmdDogMTFyZW07DQogIGZvbnQtc2l6ZTogMnJlbTsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgLyogYW5pbWF0aW9uOiBib3VuY2UgMTBzIGVhc2UtaW4tb3V0IGluZmluaXRlOyAqLw0KfQ0KLnNpZGViYXItdG9nZ2xlOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsNCn0NCi5zaWRlYmFyLXRvZ2dsZTpub3QoOmhvdmVyKSB7DQogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsNCiAgYW5pbWF0aW9uOiBjb2xsYXBzZSAuNXMgZWFzZS1vdXQgZm9yd2FyZHM7DQp9DQpAa2V5ZnJhbWVzIGV4cGFuZCB7DQogIDAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOw0KICB9DQogIDUwJSB7DQogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOw0KICB9DQogIDEwMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yNSk7DQogIH0NCn0NCkBrZXlmcmFtZXMgY29sbGFwc2Ugew0KICAwJSB7DQogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjI1KTsNCiAgfQ0KICAxMDAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOw0KICB9DQp9DQoNCi5zaWRlYmFyLWhlYWRlciB7DQogIGRpc3BsYXk6IGZsZXg7DQogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgcGFkZGluZzogMXJlbSAxLjVyZW07DQp9DQouY2xvc2UtYnRuIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDQ0cmVtOw0KICBsZWZ0OiA3MHJlbTsNCiAgZm9udC1zaXplOiAycmVtOw0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBkaXNwbGF5OiBub25lOw0KfQ0KLmNsb3NlLWJ0bjpob3ZlciB7DQogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsNCiAgYW5pbWF0aW9uOiBleHBhbmQgLjVzIGVhc2UtaW4gZm9yd2FyZHM7DQp9DQouY2xvc2UtYnRuOm5vdCg6aG92ZXIpIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGNvbGxhcHNlIC41cyBlYXNlLW91dCBmb3J3YXJkczsNCn0NCi5sb2dvIHsNCiAganVzdGlmeS1zZWxmOiBjZW50ZXI7DQogIGhlaWdodDogNDBweDsNCn0NCg0KLmxpbmtzIGEgew0KICBkaXNwbGF5OiBibG9jazsNCiAgZm9udC1zaXplOiAxLjVyZW07DQogIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOw0KICBwYWRkaW5nOiAxcmVtIDEuNXJlbTsNCiAgY29sb3I6IHZhcigtLWNsci1ncmV5LTUpOw0KICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsNCn0NCi5saW5rcyBhOmhvdmVyIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tY2xyLXByaW1hcnktOCk7DQogIGNvbG9yOiB2YXIoLS1jbHItcHJpbWFyeS01KTsNCiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtOw0KfQ0KLnNvY2lhbC1pY29ucyB7DQogIGp1c3RpZnktc2VsZjogY2VudGVyOw0KICBkaXNwbGF5OiBmbGV4Ow0KICBwYWRkaW5nLWJvdHRvbTogMnJlbTsNCn0NCi5zb2NpYWwtaWNvbnMgYSB7DQogIGZvbnQtc2l6ZTogMS41cmVtOw0KICBtYXJnaW46IDAgMC41cmVtOw0KICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktNSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KfQ0KLnNvY2lhbC1pY29ucyBhOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLWNsci1wcmltYXJ5LTEpOw0KfQ0KDQouc2lkZWJhciB7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgdG9wOiAwOw0KICBsZWZ0OiAwOw0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiAxMDAlOw0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jbHItYmxhY2spOw0KICBkaXNwbGF5OiBncmlkOw0KICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIGF1dG87DQogIHJvdy1nYXA6IDFyZW07DQogIGJveC1zaGFkb3c6IHZhcigtLWNsci1yZWQtZGFyayk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwJSk7DQp9DQouc2hvdy1zaWRlYmFyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCk7DQp9DQouc2hvdy1zaWRlYmFyIC5jbG9zZS1idG4gew0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KLnNpZGViYXIgLmNhcmQgew0KICB3aWR0aDogNDRlbTsNCiAgbWFyZ2luOiAzZW07DQp9DQouY2FyZCB7DQogIC8qIGNvbG9yOiB2YXIoLS1jbHItYmxhY2spOyAqLw0KICBib3JkZXI6IDVweCBzb2xpZCB2YXIoLS1jbHItb3JhbmdlKTsNCn0NCi8qIC5jYXJkIGlucHV0W3R5cGU9dGV4dF0gew0KICBjb2xvcjogdmFyKC0tY2xyLWJsYWNrKTsNCiAgb3V0bGluZTogdmFyKC0tY2xyLWJsYWNrKTsNCiAgYm9yZGVyOiBzb2xpZCAxcHggdmFyKC0tY2xyLWJsYWNrKTsNCn0gKi8NCi5jYXJkIGxhYmVsIHsNCiAgbWFyZ2luLXRvcDogMmVtOw0KfQ0KLmNhcmQgbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7DQogIG1hcmdpbi10b3A6IDFlbTsNCn0=" - webUI["web/public/icons/chevron-double-up.svg"] = "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiIGNsYXNzPSJiaSBiaS1jaGV2cm9uLWRvdWJsZS11cCIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjY0NiAyLjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDMuNzA3IDIuMzU0IDkuMzU0YS41LjUgMCAxIDEtLjcwOC0uNzA4eiIvPgogIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTcuNjQ2IDYuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxLS43MDguNzA4TDggNy43MDdsLTUuNjQ2IDUuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4eiIvPgo8L3N2Zz4=" + webUI["web/public/css/base.css"] = "KnsNCiAgLyoNCiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOw0KICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7DQogIC1tcy1hcHBlYXJhbmNlOiBub25lOyovDQogIGZvbnQtZmFtaWx5OiAiQXJpYWwiLCBzYW5zLXNlcmlmOw0KICBsZXR0ZXItc3BhY2luZzogMnB4Ow0KfQ0KDQovKg0KOjotd2Via2l0LXNjcm9sbGJhciB7IA0KICAgIGRpc3BsYXk6IG5vbmU7IA0KfQ0KKi8NCg0KOjotd2Via2l0LXNjcm9sbGJhciB7DQogIHdpZHRoOiAxMnB4Ow0KICBoZWlnaHQ6IDEycHg7DQp9DQoNCg0KOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7DQogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDZweCByZ2JhKDAsIDAsIDAsIDAuMyk7DQogIGJvcmRlci1yYWRpdXM6IDVweDsNCg0KfQ0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KfQ0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsNCiAgYmFja2dyb3VuZDogIzMzMzsNCn0NCg0KOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIgew0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCn0NCg0KYSB7DQogIGNvbG9yOiAjMDBFNkZGOw0KfQ0KDQpodG1sLA0KYm9keSB7DQogIGNvbG9yOiAjZmZmOw0KICBtYXJnaW46IDBweCBhdXRvOw0KICBoZWlnaHQ6IDEwMCU7DQogIGZvbnQtc2l6ZTogMTRweDsNCn0NCg0KaDIgew0KICBmb250LXNpemU6IDI0cHg7DQogIGxldHRlci1zcGFjaW5nOiAycHg7DQp9DQoNCmgzIHsNCiAgZm9udC1zaXplOiAyMnB4Ow0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KfQ0KDQpoNCB7DQogIGZvbnQtc2l6ZTogMjBweDsNCiAgbGV0dGVyLXNwYWNpbmc6IDFweDsNCiAgbGluZS1oZWlnaHQ6IDEuNWVtOw0KDQp9DQoNCmg1IHsNCiAgZm9udC1zaXplOiAxNnB4Ow0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICBsaW5lLWhlaWdodDogMS4yZW07DQogIG1hcmdpbjogMHB4IGF1dG87DQogIG1hcmdpbi1sZWZ0OiAxMHB4Ow0KfQ0KDQpociB7DQogIGJvcmRlcjogMDsNCiAgaGVpZ2h0OiAxcHg7DQogIGJhY2tncm91bmQ6ICMzMzM7DQogIG1hcmdpbjogMTBweCAwcHg7DQp9DQoNCnAgew0KICBtYXJnaW46IDJweDsNCiAgcGFkZGluZzogMnB4IDVweDsNCn0NCg0KcHJlIHsNCiAgbWFyZ2luOiAwcHggMHB4IDVweCAwcHg7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgY29sb3I6ICNkZGQ7DQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQogIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBmb250LXN0eWxlOiBub3JtYWw7DQogIGZvbnQtdmFyaWFudDogbm9ybWFsOw0KICBsaW5lLWhlaWdodDogMS42ZW07DQp9DQoNCmxhYmVsIHsNCiAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgZGlzcGxheTogYmxvY2s7DQp9DQoNCmxpIHsNCiAgbGlzdC1zdHlsZS10eXBlOiBub25lOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIHRyYW5zaXRpb246IGFsbCAwLjM7DQp9DQoNCmxpOmhvdmVyIHsNCiAgYm9yZGVyLWNvbG9yOiAjMDBFNkZGDQp9DQoNCnNlbGVjdCB7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgd2lkdGg6IGNhbGMoMTAwJSArIDJweCk7DQogIGhlaWdodDogYXV0bzsNCiAgYm9yZGVyOiBzb2xpZCAwcHggIzAwRTZGRjsNCiAgYm9yZGVyLXJhZGl1czogMHB4Ow0KICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICBvdXRsaW5lOiBub25lOw0KICBjb2xvcjogI2ZmZjsNCiAgcGFkZGluZzogOXB4IDEwcHg7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBmb250LXNpemU6IDE0cHg7DQogIG1hcmdpbjogNXB4IDBweCA1cHggMHB4Ow0KfQ0KDQpzZWxlY3Q6Zm9jdXMgew0KICBvdXRsaW5lOiBub25lOw0KfQ0KDQppbnB1dCB7DQogIC13ZWJraXQtYXBwZWFyYW5jZTogdW5zZXQ7DQogIG1hcmdpbjogMHB4Ow0KICBwYWRkaW5nOiAyLjVweCAxMHB4Ow0KICBvdXRsaW5lOiBub25lOw0KICBmb250LXNpemU6IDE0cHg7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXSwNCmlucHV0W3R5cGU9c3VibWl0XSB7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCiAgbWFyZ2luOiAxMHB4IDEwcHg7DQogIHBhZGRpbmc6IDEwcHggMjVweDsNCiAgYm9yZGVyOiBzb2xpZCAwcHg7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCiAgYm9yZGVyLXJhZGl1czogM3B4Ow0KICBvdXRsaW5lOiBub25lOw0KICBjb2xvcjogI2ZmZjsNCn0NCg0KaW5wdXRbdHlwZT1idXR0b25dOmZvY3VzIHsNCiAgb3V0bGluZTogbm9uZTsNCn0NCg0KaW5wdXRbdHlwZT1idXR0b25dOmhvdmVyIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsNCiAgY29sb3I6ICMwMDA7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpob3Zlci5kZWxldGUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7DQogIGNvbG9yOiAjZmZmOw0KfQ0KDQppbnB1dFt0eXBlPXRleHRdLA0KaW5wdXRbdHlwZT1zZWFyY2hdLA0KaW5wdXRbdHlwZT1wYXNzd29yZF0gew0KICBjb2xvcjogI2ZmZjsNCiAgd2lkdGg6IC13ZWJraXQtY2FsYygxMDAlIC0gMHB4KTsNCiAgd2lkdGg6IC1tb3otY2FsYygxMDAlIC0gMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDBweCk7DQogIG91dGxpbmU6IG5vbmU7DQogIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzU1NTsNCiAgYm9yZGVyLXJhZGl1czogMHB4Ow0KICBwYWRkaW5nOiA4cHggMTBweDsNCn0NCg0KaW5wdXRbdHlwZT1jaGVja2JveF0gew0KICBib3JkZXI6IHNvbGlkIDFweCAjMDBFNkZGOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBoZWlnaHQ6IDI1cHg7DQogIHdpZHRoOiAyNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQp9DQoNCmlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgew0KICBjb2xvcjogI2ZmZjsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRiAhaW1wb3J0YW50Ow0KICAvKmRpc3BsYXk6IGlubGluZS1ibG9jazsqLw0KfQ0KDQppbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmUgew0KICBwb3NpdGlvbjogaW5pdGlhbDsNCiAgbGVmdDogMHB4Ow0KICBtYXJnaW4tbGVmdDogLTRweDsNCiAgY29udGVudDogIiAiOw0KfQ0KDQppbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZSB7DQogIHBvc2l0aW9uOiBpbml0aWFsOw0KICBsZWZ0OiAwcHg7DQogIG1hcmdpbi1sZWZ0OiAtM3B4Ow0KICBjb250ZW50OiAi4pyTIjsNCiAgY29sb3I6ICMwMDA7DQp9DQoNCmlucHV0W3R5cGU9Y2hlY2tib3hdLmJ1bGs6Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogaW5pdGlhbDsNCiAgbGVmdDogMHB4Ow0KICBtYXJnaW4tbGVmdDogLTNweDsNCiAgY29udGVudDogIuKckyI7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl0uY2FuY2VsIHsNCg0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiByZWQ7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXS5zYXZlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQoNCmlucHV0W3R5cGU9YnV0dG9uXS5ibGFjaywNCmlucHV0W3R5cGU9c3VibWl0XS5ibGFjayB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KaW5wdXRbdHlwZT1idXR0b25dLmNlbnRlciB7DQogIG1hcmdpbi1yaWdodDogYXV0bzsNCiAgbWFyZ2luLWxlZnQ6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KLnBvaW50ZXIgew0KICBjdXJzb3I6IHBvaW50ZXI7DQp9DQoNCi5wb2ludGVyOmhvdmVyIHsNCiAgY29sb3I6ICMwMEU2RkY7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KLnNvcnRUaGlzIHsNCiAgY29sb3I6ICMwMEU2RkY7DQp9DQoNCi53NDBweCB7DQogIG1heC13aWR0aDogNDBweDsNCn0NCg0KLnc1MHB4IHsNCiAgbWF4LXdpZHRoOiA1MHB4Ow0KfQ0KDQoudzgwcHggew0KICBtYXgtd2lkdGg6IDgwcHg7DQp9DQoNCi53MTUwcHggew0KICBtYXgtd2lkdGg6IDE1MHB4Ow0KfQ0KDQoudzIwMHB4IHsNCiAgbWF4LXdpZHRoOiAyMDBweDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgd2lkdGg6IDIwMHB4Ow0KICBvdmVyZmxvdy14OiBoaWRkZW47DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KfQ0KDQoudzMwMHB4IHsNCiAgbWF4LXdpZHRoOiAzMDBweDsNCn0NCg0KLncyMjBweCB7DQogIG1heC13aWR0aDogMjIwcHg7DQogIGN1cnNvcjogYWxpYXM7DQp9DQoNCi5mb290ZXIgew0KICBmb250LXNpemU6IDEwcHg7DQp9DQoNCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi5zY3JlZW5Mb2dIaWRkZW4gew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xMTBweCk7DQp9DQoNCi5ib3JkZXJTcGFjZSB7DQogIG1hcmdpbi1ib3R0b206IDMwcHg7DQp9DQoNCi5ub25lIHsNCiAgZGlzcGxheTogbm9uZTsNCn0NCg0KDQoubm90VmlzaWJsZSB7DQogIGhlaWdodDogMHB4Ow0KICBkaXNwbGF5OiBub25lOw0KICBvcGFjaXR5OiAwOw0KICBib3JkZXItYm90dG9tOiAjMDAwIHNvbGlkIDBweDsNCg0KfQ0KDQoudmlzaWJsZSB7DQogIG9wYWNpdHk6IDE7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBib3JkZXItYm90dG9tOiAjNDQ0IHNvbGlkIDFweDsNCiAgcGFkZGluZzogMTBweDsNCn0NCg0KLmZsb2F0UmlnaHQgew0KICBmbG9hdDogcmlnaHQ7DQp9DQoNCi5mbG9hdExlZnQgew0KICBmbG9hdDogbGVmdDsNCn0NCg0KLm1lbnUtYWN0aXZlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsNCn0NCg0KdGFibGUgew0KICB3aWR0aDogMTAwJQ0KfQ0KDQojYnJhbmNoIHsNCiAgY29sb3I6IHJlZDsNCn0NCg0KI2ludGVyYWN0aW9uIHsNCiAgbWFyZ2luLWJvdHRvbTogMTAwcHg7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMHB4ICM3Nzc7DQp9DQoNCg0KLmhhbGYgew0KICBkaXNwbGF5OiBibG9jazsNCiAgd2lkdGg6IDQ1JTsNCn0NCg0KLm1lbnUgew0KICBib3JkZXI6IHNvbGlkIDFweCAjMDBFNkZGOw0KfQ0KDQouaW5mb01zZyB7DQogIGNvbG9yOiAjYWFhOw0KfQ0KDQouZXJyb3JNc2cgew0KICBjb2xvcjogcmVkOw0KfQ0KDQoud2FybmluZ01zZyB7DQogIGNvbG9yOiB5ZWxsb3c7DQp9DQoNCi5kZWJ1Z01zZyB7DQogIGNvbG9yOiBtYWdlbnRhOw0KfQ0KDQoNCi5jYXRlZ29yeSB7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAycHgNCn0NCg0KLm5ld3Mgew0KICBib3JkZXItY29sb3I6IHRvbWF0bw0KfQ0KDQoubW92aWUgew0KICBib3JkZXItY29sb3I6IHJveWFsYmx1ZTsNCn0NCg0KLnNlcmllcyB7DQogIGJvcmRlci1jb2xvcjogZ29sZDsNCn0NCg0KLnNwb3J0cyB7DQogIGJvcmRlci1jb2xvcjogeWVsbG93Z3JlZW47DQp9DQoNCi5raWRzIHsNCiAgYm9yZGVyLWNvbG9yOiBtZWRpdW1wdXJwbGU7DQp9DQoNCi8qIExvYWRpbmcgKi8NCiNsb2FkaW5nIHsNCiAgbGVmdDogMHB4Ow0KICB0b3A6IDBweDsNCiAgei1pbmRleDogMTAwMDA7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpOw0KICBtYXJnaW46IGF1dG87DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IDEwMCU7DQp9DQoNCg0KLmxvYWRlciB7DQogIGJvcmRlcjogNXB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICBib3JkZXItcmFkaXVzOiA1MCU7DQogIGJvcmRlci10b3A6IDVweCBzb2xpZCAjMDBFNkZGOw0KICBib3JkZXItYm90dG9tOiA1cHggc29saWQgIzAwRTZGRjsNCiAgd2lkdGg6IDUwcHg7DQogIGhlaWdodDogNTBweDsNCiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7DQogIGFuaW1hdGlvbjogc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTsNCg0KICBwb3NpdGlvbjogZml4ZWQ7DQogIG1hcmdpbjogYXV0bzsNCg0KICB0b3A6IDA7DQogIHJpZ2h0OiAwOw0KICBib3R0b206IDA7DQogIGxlZnQ6IDA7DQoNCn0NCg0KLm5vdGlmaWNhdGlvbiB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGNvbG9yOiAjZmZmOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIHBhZGRpbmc6IDEwcHg7IC8qIEFkanVzdCBwYWRkaW5nIGFzIG5lZWRlZCAqLw0KICBwb3NpdGlvbjogZml4ZWQ7DQogIGJvdHRvbTogMjBweDsgLyogQWRqdXN0IHBvc2l0aW9uIGFzIG5lZWRlZCAqLw0KICByaWdodDogMjBweDsgLyogQWRqdXN0IHBvc2l0aW9uIGFzIG5lZWRlZCAqLw0KICB6LWluZGV4OiAxMDAwOw0KICBkaXNwbGF5OiBub25lOyAvKiBJbml0aWFsbHkgaGlkZGVuICovDQogIHdpZHRoOiAzMDBweDsgLyogQWRqdXN0IHdpZHRoIGFzIG5lZWRlZCAqLw0KICBtYXgtaGVpZ2h0OiBjYWxjKDgwdmggLSAxMHB4KTsgLyogQWRqdXN0IGhlaWdodCBhcyBuZWVkZWQgKi8NCiAgYm9yZGVyLXJhZGl1czogMTBweDsgLyogT3B0aW9uYWw6IHJvdW5kZWQgY29ybmVycyAqLw0KICBib3gtc2hhZG93OiAwIDAgMTBweCByZ2JhKDAsIDAsIDAsIDAuNSk7IC8qIE9wdGlvbmFsOiBhZGQgc2hhZG93IGZvciBiZXR0ZXIgdmlzaWJpbGl0eSAqLw0KfQ0KDQoubm90aWZpY2F0aW9uIC5oZWFkZXIgew0KICBkaXNwbGF5OiBmbGV4Ow0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQp9DQoNCi5ub3RpZmljYXRpb24gLmNvbnRlbnQgew0KICBmbGV4LWdyb3c6IDE7IC8qIEFsbG93IGNvbnRlbnQgdG8gZ3JvdyBhbmQgdGFrZSBhdmFpbGFibGUgc3BhY2UgKi8NCiAgb3ZlcmZsb3cteTogYXV0bzsgLyogRW5hYmxlIHZlcnRpY2FsIHNjcm9sbGluZyBpZiBjb250ZW50IG92ZXJmbG93cyAqLw0KICBtYXJnaW4tYm90dG9tOiAxMHB4OyAvKiBFbnN1cmUgdGhlcmUncyBhIGdhcCB0byB0aGUgYm90dG9tICovDQp9DQoNCi5mYS1zdHlsZSB7DQogIGNvbG9yOiAjRkZGOw0KICBmb250LXNpemU6IDI1cHg7DQp9DQoNCi5mYS1zdHlsZTpob3ZlciB7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4yKTsNCn0NCg0KLm5vdGlmaWNhdGlvbkNvbnRlbnQgew0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KDQoudXBkYXRlTm93IHsNCiAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KfQ0KDQojYmFja1RvVG9wIHsNCiAgZGlzcGxheTogbm9uZTsgLyogSGlkZGVuIGJ5IGRlZmF1bHQgKi8NCiAgcG9zaXRpb246IGZpeGVkOyAvKiBGaXhlZC9zdGlja3kgcG9zaXRpb24gKi8NCiAgYm90dG9tOiA1MHB4OyAvKiBQbGFjZSB0aGUgYnV0dG9uIGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgKi8NCiAgcmlnaHQ6IDUwcHg7IC8qIFBsYWNlIHRoZSBidXR0b24gMzBweCBmcm9tIHRoZSByaWdodCAqLw0KICB6LWluZGV4OiA5OTsgLyogTWFrZSBzdXJlIGl0IGRvZXMgbm90IG92ZXJsYXAgKi8NCiAgYm9yZGVyOiBub25lOyAvKiBSZW1vdmUgYm9yZGVycyAqLw0KICBvdXRsaW5lOiBub25lOyAvKiBSZW1vdmUgb3V0bGluZSAqLw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOw0KICBjdXJzb3I6IHBvaW50ZXI7IC8qIEFkZCBhIG1vdXNlIHBvaW50ZXIgb24gaG92ZXIgKi8NCiAgcGFkZGluZzogNXB4IDEwcHggMTBweCAxMHB4OyAvKiBTb21lIHBhZGRpbmcgKi8NCiAgYm9yZGVyLXJhZGl1czogNXB4OyAvKiBSb3VuZGVkIGNvcm5lcnMgKi8NCn0NCg0KI2JhY2tUb1RvcDpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7IC8qIEFkZCBhIGRhcmstZ3JleSBiYWNrZ3JvdW5kIG9uIGhvdmVyICovDQp9DQoNCkAtd2Via2l0LWtleWZyYW1lcyBzcGluIHsNCiAgMCUgew0KICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7DQogIH0NCg0KICAxMDAlIHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7DQogIH0NCn0NCg0KQGtleWZyYW1lcyBzcGluIHsNCiAgMCUgew0KICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOw0KICB9DQoNCiAgMTAwJSB7DQogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsNCiAgfQ0KfQ==" + webUI["web/public/css/screen.css"] = "bmF2IGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXgtaGVpZ2h0OiAyMHB4Ow0KICBtYXgtd2lkdGg6IDIwcHg7DQogIGZsb2F0OiBsZWZ0Ow0KfQ0KDQpuYXYgcCB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHBhZGRpbmc6IDBweCAzMHB4Ow0KfQ0KDQojbGF5b3V0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogMTAwJTsNCn0NCi8qDQouZm9ybS1jb250cm9sIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCiAgY29sb3I6ICNGRkY7DQogIHBvaW50ZXItZXZlbnRzOiBub25lOw0KfSovDQoNCi5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCn0NCg0KLmxheW91dC1sZWZ0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1pbi13aWR0aDogMTUwcHg7DQogIG1heC13aWR0aDogMjAlOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOw0KICBoZWlnaHQ6IGluaGVyaXQ7DQogIGZsb2F0OiBsZWZ0Ow0KfQ0KDQoubGF5b3V0LXJpZ2h0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQp9DQoNCiNtZW51LXdyYXBwZXIgew0KICBoZWlnaHQ6IDEwMCU7DQp9DQoNCg0KI2xvZ28gew0KICBkaXNwbGF5OiBibG9jazsNCiAgbWluLXdpZHRoOiAxODBweDsNCiAgd2lkdGg6IDEwMCU7DQogIGhlaWdodDogMTAwcHg7DQogIGJhY2tncm91bmQ6IHVybCgiLi4vaW1nL3RocmVhZGZpbi5wbmciKTsNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOw0KICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7DQp9DQoNCg0KI3BhZ2Ugew0KICBtYXgtd2lkdGg6IDk1MHB4Ow0KICBtYXJnaW46IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQoNCiAgLyoNCiAgaGVpZ2h0OiAtd2Via2l0LWNhbGMoMTAwJSAtIDEzMHB4KTsNCiAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEzMHB4KTsNCiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMzBweCk7DQogICovDQoNCiAgbWluLWhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMjBweCk7DQogIG1pbi1oZWlnaHQ6IC1tb3otY2FsYygxMDAlIC0gMTIwcHgpOw0KICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAxMjBweCk7DQoNCg0KICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAjMjIyOw0KDQp9DQoNCiN1aVNldHRpbmcgew0KICBmbG9hdDogcmlnaHQ7DQogIG1hcmdpbi1yaWdodDogMjVweDsNCn0NCg0KI2JveCBpbnB1dFt0eXBlPXRleHRdLA0KI2JveCBpbnB1dFt0eXBlPXBhc3N3b3JkXSB7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojYm94IGlucHV0W3R5cGU9c3VibWl0XSB7DQogIG1hcmdpbjogNTBweCBhdXRvOw0KfQ0KDQojc2V0dGluZ3Mgew0KICBkaXNwbGF5OiBibG9jazsNCiAgcGFkZGluZzogMTBweCAxMHB4Ow0KfQ0KDQojc2V0dGluZ3MgaDUgew0KICBtYXJnaW46IDUwcHggMHB4IDEwcHggMHB4Ow0KfQ0KDQojY29udGVudC1pbnRlcmFjdGlvbiAuc2VhcmNoIHsNCiAgd2lkdGg6IDIwMHB4Ow0KICBib3JkZXI6IDFweCBzb2xpZCAjMDAwOw0KICBwYWRkaW5nOiA5cHg7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIG1hcmdpbjogMTBweDsNCiAgZmxvYXQ6IHJpZ2h0Ow0KICBib3JkZXItcmFkaXVzOiAzcHg7DQoNCn0NCg0KI215U3RyZWFtcyB7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgYm90dG9tOiAwcHg7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQogIHdpZHRoOiAxMDAlOw0KICBtYXgtd2lkdGg6IDk1MHB4Ow0KDQogIC8qDQogIG1heC1oZWlnaHQ6IDEwMHB4Ow0KICAqLw0KICBtYXJnaW4tYm90dG9tOiAwcHg7DQp9DQoNCiNteVN0cmVhbXMgaW1nIHsNCiAgd2lkdGg6IDQlOw0KICBwYWRkaW5nOiAycHggNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZsb2F0OiByaWdodDsNCn0NCg0KLyogV2l6YXJkKi8NCiNib3ggew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KICBtaW4taGVpZ2h0OiA0MDBweDsNCg0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQp9DQoNCiNib3ggcCB7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KfQ0KDQojYm94LWZvb3RlciB7DQogIG1hcmdpbi10b3A6IGF1dG87DQp9DQoNCiNib3gtZm9vdGVyIHsNCiAgbWFyZ2luOiBhdXRvOw0KICBwYWRkaW5nOiAxMHB4Ow0KfQ0KDQojaGVhZGxpbmUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOw0KICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggIzIyMjsNCiAgdHJhbnNpdGlvbjogYWxsIDAuNXM7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KI2NvbnRlbnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgb3ZlcmZsb3c6IGF1dG87DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi8qIC0tLSAqLw0KDQoNCiNjbGllbnRJbmZvLA0KI2FjdGl2ZVN0cmVhbXMsDQojaW5hY3RpdmVTdHJlYW1zIHsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgY29sb3I6ICMwMEU2RkY7DQogIHBhZGRpbmc6IDBweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMgdGhlYWQsDQojaW5hY3RpdmVTdHJlYW1zIHRoZWFkIHsNCiAgZm9udC1zaXplOiAyZW07DQp9DQoNCiNvcGVuU3RyZWFtcyB7DQogIHdpZHRoOiAyMHB4Ow0KICBoZWlnaHQ6IDIwMHB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZsb2F0OiByaWdodDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMHB4Ow0KICBib3R0b206IDBweDsNCiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdG91Y2gucG5nIik7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQoNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIHJpZ2h0Ow0KfQ0KDQojYWxsU3RyZWFtcyB7DQogIHBhZGRpbmc6IDJweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMgLnRkS2V5LA0KI2luYWN0aXZlU3RyZWFtcyAudGRLZXkgew0KICB3aWR0aDogMTE1cHg7DQogIGxldHRlci1zcGFjaW5nOiAwcHg7DQp9DQoNCmNhcHRpb24gew0KICBjb2xvcjogI0ZGRjsNCiAgZm9udC1zaXplOiAyZW07DQp9DQoNCi50ZEtleSB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi50ZFZhbCB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi5tb2RhbC1oZWFkZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5Ow0KfQ0KLm1vZGFsLWJvZHkgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KfQ0KDQojaW5hY3RpdmVTdHJlYW1zIC50ZEtleSB7DQogIGNvbG9yOiByZWQ7DQp9DQoNCiNjbGllbnRJbmZvIC50ZFZhbCwNCiNsb2dJbmZvIC50ZFZhbCwNCiNhY3RpdmVTdHJlYW1zIC50ZFZhbCwNCiNpbmFjdGl2ZVN0cmVhbXMgLnRkVmFsLA0KI21hcHBpbmdJbmZvIC50ZFZhbCB7DQogIGNvbG9yOiAjYWFhOw0KICB3aGl0ZS1zcGFjZTogaW5oZXJpdDsNCn0NCg0KI2JveC13cmFwcGVyIHsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICB3aWR0aDogMTAwJTsNCg0KICBvdmVyZmxvdy15OiBzY3JvbGw7DQp9DQoNCiNjb250ZW50VGFibGUsDQojaW5hY3RpdmVDb250ZW50VGFibGUsDQojbWFwcGluZy1kZXRhaWwtdGFibGUsDQojY29udGVudFRhYmxlIHsNCiAgZGlzcGxheTogdGFibGU7DQogIC0tYnMtdGFibGUtY29sb3I6IG5vbmU7DQogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQogIG92ZXJmbG93LXk6IHNjcm9sbDsNCn0NCg0KI2luYWN0aXZlQ29udGVudFRhYmxlIHsNCiAgbWFyZ2luLXRvcDogMiU7DQp9DQoNCg0KI2NvbnRlbnRUYWJsZSAuY29udGVudFRhYmxlSGVhZGVyLA0KI2luYWN0aXZlQ29udGVudFRhYmxlIC5pbmFjdGl2ZUNvbnRlbnRUYWJsZUhlYWRlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGhlaWdodDogNTBweDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMxMTE7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggIzMzMzsNCiAgY3Vyc29yOiBhdXRvOw0KDQp9DQoNCg0KdGJvZHkgew0KICB3aWR0aDogMTAwJTsNCn0NCg0KDQoudGFibGVFbGxpcHNpcyB7DQogIHdpZHRoOiAxNTBweDsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQp9DQoNCiNjb250ZW50VGFibGUgaW1nLA0KI2luYWN0aXZlQ29udGVudFRhYmxlIGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KICBtYXgtd2lkdGg6IDYwcHg7DQp9DQoNCiNjb250ZW50VGFibGUgdHIsDQojaW5hY3RpdmVDb250ZW50VGFibGUgdHIgew0KICBib3JkZXItbGVmdDogc29saWQgM3B4IDQ0NDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMzMzM7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KI2NvbnRlbnRUYWJsZSB0cjpob3ZlciwNCiNpbmFjdGl2ZUNvbnRlbnRUYWJsZSB0cjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQp9DQoNCiNjb250ZW50VGFibGUgdGQsDQojaW5hY3RpdmVDb250ZW50VGFibGUgdGQgew0KDQogIHBhZGRpbmc6IDBweCAycHg7DQp9DQoNCiNjb250ZW50VGFibGUgaW5wdXRbdHlwZT10ZXh0XSwNCiNpbmFjdGl2ZUNvbnRlbnRUYWJsZSBpbnB1dFt0eXBlPXRleHRdIHsNCiAgd2lkdGg6IDgwJTsNCiAgbWluLXdpZHRoOiAzNXB4Ow0KICBtYXgtd2lkdGg6IDYwcHg7DQogIGJvcmRlcjogMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBtYXJnaW4tbGVmdDogNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKg0KI2NvbnRlbnRUYWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XSwNCiNpbmFjdGl2ZUNvbnRlbnRUYWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XSB7DQogIG1heC13aWR0aDogMjVweDsNCiAgbWFyZ2luOiBhdXRvOw0KfQ0KKi8NCg0KDQouc2hvd0J1bGsgew0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KLmhpZGVCdWxrIHsNCiAgZGlzcGxheTogbm9uZTsNCn0NCg0KI2NvbnRlbnRUYWJsZSB0ci5hY3RpdmVFUEcsDQojaW5hY3RpdmVDb250ZW50VGFibGUgdHIuYWN0aXZlRVBHIHsNCiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDNweCBsYXduZ3JlZW47DQp9DQoNCiNjb250ZW50VGFibGUgdHIubm90QWN0aXZlRVBHLA0KI2luYWN0aXZlQ29udGVudFRhYmxlIHRyLm5vdEFjdGl2ZUVQRyB7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggcmVkOw0KfQ0KDQoNCiNsb2dTY3JlZW4gcCB7DQogIHdoaXRlLXNwYWNlOiBwcmU7DQogIGZvbnQtc2l6ZTogMTBweDsNCiAgLyoNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsNCiAgKi8NCiAgbGV0dGVyLXNwYWNpbmc6IDFweDsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBmb250LXN0eWxlOiBub3JtYWw7DQogIGZvbnQtdmFyaWFudDogbm9ybWFsOw0KICBsaW5lLWhlaWdodDogMS42ZW07DQp9DQoNCiNtYXBwaW5nLWRldGFpbCwNCiN1c2VyLWRldGFpbCwNCiNmaWxlLWRldGFpbCB7DQogIGJveC1zaGFkb3c6IDBweCA1cHggNDBweCAjMDAwOw0KICBtYXJnaW4tdG9wOiAyMHB4Ow0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KDQogIG1heC13aWR0aDogNjAwcHg7DQogIGJhY2tncm91bmQtY29sb3I6ICMyMjI7DQogIHBhZGRpbmc6IDEwcHg7DQogIG92ZXJmbG93OiBhdXRvOw0KfQ0KDQojZmlsZS1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSB7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwgaW1nIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1heC1oZWlnaHQ6IDMwcHg7DQogIG1hcmdpbi1ib3R0b206IDIwcHg7DQogIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICBtYXJnaW4tcmlnaHQ6IGF1dG87DQp9DQoNCiNtYXBwaW5nLWRldGFpbCBpbnB1dFt0eXBlPXRleHRdLA0KI2NvbnRlbnRfc2V0dGluZ3MgaW5wdXRbdHlwZT10ZXh0XSwNCiNjb250ZW50X3NldHRpbmdzIGlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgYm9yZGVyOiBzb2xpZCAxcHg7DQogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwtdGFibGUsDQojdXNlci1kZXRhaWwtdGFibGUgew0KICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQojY29udGVudF9zZXR0aW5ncyB0YWJsZSB7DQogIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgdGFibGUtbGF5b3V0OiBmaXhlZDsNCiAgd2lkdGg6IDEwMCU7DQp9DQoNCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLA0KI3VzZXItZGV0YWlsLXRhYmxlIHRkIHsNCiAgcGFkZGluZzogMTBweCAwcHg7DQoNCn0NCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLmxlZnQsDQojdXNlci1kZXRhaWwtdGFibGUgdGQubGVmdCB7DQogIHdpZHRoOiAzOCU7DQp9DQoNCi5pbnRlcmFjdGlvbiwNCiNpbnRlcmFjdGlvbiB7DQogIG1hcmdpbi10b3A6IDIwcHg7DQogIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICBmbG9hdDogcmlnaHQ7DQp9DQoNCi5pbnRlcmFjdGlvbiBpbnB1dFt0eXBlPWJ1dHRvbl0sDQouaW50ZXJhY3Rpb24gaW5wdXRbdHlwZT1zdWJtaXRdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgbWFyZ2luOiAwcHggMTBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQojbm90aWZpY2F0aW9uIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgcmlnaHQ6IDBweDsNCiAgaGVpZ2h0OiAxMDAlOw0KICB3aWR0aDogMjUwcHg7DQoNCiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsNCiAgYm94LXNoYWRvdzogMHB4IDBweCAyMHB4ICMwMDA7DQp9DQoNCiNub3RpZmljYXRpb24gaDUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIxMjEyOw0KICBwYWRkaW5nOiA1cHggMTBweCA1cHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiBwcmUgew0KICBwYWRkaW5nOiAwcHggMTBweCAwcHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiBwIHsNCiAgZm9udC1zaXplOiAxMCBweDsNCiAgbWFyZ2luOiAwcHg7DQogIHBhZGRpbmc6IDBweCAxMHB4IDVweCAxMHB4Ow0KfQ0KDQojbm90aWZpY2F0aW9uIC5lbGVtZW50IHsNCiAgLypwYWRkaW5nOiAwcHggNXB4OyovDQogIG1hcmdpbjogNXB4IDVweDsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTgxODE4Ow0KICBib3JkZXItbGVmdDogMTBweCBzb2xpZCBncmVlbjsNCn0NCg0KDQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYyMHB4KSB7DQogIGJvZHkgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQogIH0NCg0KICBoMSB7DQogICAgZm9udC1zaXplOiAyNnB4Ow0KICAgIGxldHRlci1zcGFjaW5nOiAzcHg7DQogIH0NCg0KICBuYXYgcCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogIH0NCg0KDQoNCiAgI2hlYWRlcl9jb25maWcgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGhlaWdodDogMTAwcHg7DQogICAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvbG9nb193XzYwMHgyMDAucG5nIik7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCg0KICAgIGJhY2tncm91bmQtc2l6ZTogMzAwcHggMTAwcHg7DQogIH0NCg0KICAjc2NyZWVuTG9nIHsNCiAgICBtYXJnaW4tbGVmdDogMzAwcHg7DQoNCiAgICB0cmFuc2l0aW9uOiBub25lOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCB0cmFuc3BhcmVudDsNCiAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAjMjIyOw0KICB9DQoNCiAgI3NldHRpbmdzIHsNCiAgICAvKg0KICAgIGhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMDBweCk7DQogICAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEwMHB4KTsNCiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEwMHB4KTsNCiAgICAqLw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBvdmVyZmxvdzogYXV0bzsNCiAgfQ0KDQoNCiAgLnNjcmVlbkxvZ0hpZGRlbiB7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOw0KICB9DQoNCg0KICAjYm94IHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtaW4taGVpZ2h0OiA1MDBweDsNCiAgICBtYXgtd2lkdGg6IDUwMHB4Ow0KICAgIG1hcmdpbjogMTBweCBhdXRvOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQogICAgYm94LXNoYWRvdzogMHB4IDVweCA1cHggIzIyMjsNCg0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgfQ0KfQ0KDQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDYyMHB4KSB7DQogIGJvZHkgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7IC8qIEVuc3VyZSB0aGUgYmFja2dyb3VuZCBjb2xvciBpcyBjb25zaXN0ZW50ICovDQogIH0NCg0KICAvKiBBZGQgYW55IG90aGVyIHN0eWxlcyBzcGVjaWZpYyB0byBzbWFsbCBkZXZpY2VzIGhlcmUgKi8NCn0NCg0KDQovKg0KPT09PT09PT09PT09PT09IA0KU2lkZWJhcg0KPT09PT09PT09PT09PT09DQoqLw0KOnJvb3Qgew0KICAvKiBkYXJrIHNoYWRlcyBvZiBwcmltYXJ5IGNvbG9yKi8NCiAgLS1jbHItcHJpbWFyeS0xOiBoc2woMjA1LCA4NiUsIDE3JSk7DQogIC0tY2xyLXByaW1hcnktMjogaHNsKDIwNSwgNzclLCAyNyUpOw0KICAtLWNsci1wcmltYXJ5LTM6IGhzbCgyMDUsIDcyJSwgMzclKTsNCiAgLS1jbHItcHJpbWFyeS00OiBoc2woMjA1LCA2MyUsIDQ4JSk7DQogIC8qIHByaW1hcnkvbWFpbiBjb2xvciAqLw0KICAtLWNsci1wcmltYXJ5LTU6IGhzbCgyMDUsIDc4JSwgNjAlKTsNCiAgLyogbGlnaHRlciBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciAqLw0KICAtLWNsci1wcmltYXJ5LTY6IGhzbCgyMDUsIDg5JSwgNzAlKTsNCiAgLS1jbHItcHJpbWFyeS03OiBoc2woMjA1LCA5MCUsIDc2JSk7DQogIC0tY2xyLXByaW1hcnktODogaHNsKDIwNSwgODYlLCA4MSUpOw0KICAtLWNsci1wcmltYXJ5LTk6IGhzbCgyMDUsIDkwJSwgODglKTsNCiAgLS1jbHItcHJpbWFyeS0xMDogaHNsKDIwNSwgMTAwJSwgOTYlKTsNCiAgLyogZGFya2VzdCBncmV5IC0gdXNlZCBmb3IgaGVhZGluZ3MgKi8NCiAgLS1jbHItZ3JleS0xOiBoc2woMjA5LCA2MSUsIDE2JSk7DQogIC0tY2xyLWdyZXktMjogaHNsKDIxMSwgMzklLCAyMyUpOw0KICAtLWNsci1ncmV5LTM6IGhzbCgyMDksIDM0JSwgMzAlKTsNCiAgLS1jbHItZ3JleS00OiBoc2woMjA5LCAyOCUsIDM5JSk7DQogIC8qIGdyZXkgdXNlZCBmb3IgcGFyYWdyYXBocyAqLw0KICAtLWNsci1ncmV5LTU6IGhzbCgyMTAsIDIyJSwgNDklKTsNCiAgLS1jbHItZ3JleS02OiBoc2woMjA5LCAyMyUsIDYwJSk7DQogIC0tY2xyLWdyZXktNzogaHNsKDIxMSwgMjclLCA3MCUpOw0KICAtLWNsci1ncmV5LTg6IGhzbCgyMTAsIDMxJSwgODAlKTsNCiAgLS1jbHItZ3JleS05OiBoc2woMjEyLCAzMyUsIDg5JSk7DQogIC0tY2xyLWdyZXktMTA6IGhzbCgyMTAsIDM2JSwgOTYlKTsNCiAgLS1jbHItd2hpdGU6ICNmZmY7DQogIC0tY2xyLXJlZC1kYXJrOiBoc2woMzYwLCA2NyUsIDQ0JSk7DQogIC0tY2xyLXJlZC1saWdodDogaHNsKDM2MCwgNzElLCA2NiUpOw0KICAtLWNsci1ncmVlbi1kYXJrOiBoc2woMTI1LCA2NyUsIDQ0JSk7DQogIC0tY2xyLWdyZWVuLWxpZ2h0OiBoc2woMTI1LCA3MSUsIDY2JSk7DQogIC0tY2xyLW9yYW5nZTogaHNsKDE0LDkzJSw1MyUpOw0KICAtLWNsci1ibGFjazogIzIyMjsNCiAgLS1mZi1wcmltYXJ5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsNCiAgLS1mZi1zZWNvbmRhcnk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmOw0KICAtLXRyYW5zaXRpb246IGFsbCAwLjNzIGxpbmVhcjsNCiAgLS1zcGFjaW5nOiAwLjFyZW07DQogIC0tcmFkaXVzOiAwLjI1cmVtOw0KICAtLWxpZ2h0LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMSk7DQogIC0tZGFyay1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjIpOw0KICAtLW1heC13aWR0aDogMTE3MHB4Ow0KICAtLWZpeGVkLXdpZHRoOiA2MjBweDsNCn0NCg0KLnNpZGViYXItdG9nZ2xlIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDQ0cmVtOw0KICBsZWZ0OiAxMXJlbTsNCiAgZm9udC1zaXplOiAycmVtOw0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICAvKiBhbmltYXRpb246IGJvdW5jZSAxMHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7ICovDQp9DQouc2lkZWJhci10b2dnbGU6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIGFuaW1hdGlvbjogZXhwYW5kIC41cyBlYXNlLWluIGZvcndhcmRzOw0KfQ0KLnNpZGViYXItdG9nZ2xlOm5vdCg6aG92ZXIpIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGNvbGxhcHNlIC41cyBlYXNlLW91dCBmb3J3YXJkczsNCn0NCkBrZXlmcmFtZXMgZXhwYW5kIHsNCiAgMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7DQogIH0NCiAgNTAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7DQogIH0NCiAgMTAwJSB7DQogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjI1KTsNCiAgfQ0KfQ0KQGtleWZyYW1lcyBjb2xsYXBzZSB7DQogIDAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOw0KICB9DQogIDEwMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7DQogIH0NCn0NCg0KLnNpZGViYXItaGVhZGVyIHsNCiAgZGlzcGxheTogZmxleDsNCiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBwYWRkaW5nOiAxcmVtIDEuNXJlbTsNCn0NCi5jbG9zZS1idG4gew0KICBwb3NpdGlvbjogZml4ZWQ7DQogIHRvcDogNDRyZW07DQogIGxlZnQ6IDcwcmVtOw0KICBmb250LXNpemU6IDJyZW07DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQouY2xvc2UtYnRuOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsNCn0NCi5jbG9zZS1idG46bm90KDpob3Zlcikgew0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIGFuaW1hdGlvbjogY29sbGFwc2UgLjVzIGVhc2Utb3V0IGZvcndhcmRzOw0KfQ0KLmxvZ28gew0KICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsNCiAgaGVpZ2h0OiA0MHB4Ow0KfQ0KDQoubGlua3MgYSB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBmb250LXNpemU6IDEuNXJlbTsNCiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7DQogIHBhZGRpbmc6IDFyZW0gMS41cmVtOw0KICBjb2xvcjogdmFyKC0tY2xyLWdyZXktNSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KfQ0KLmxpbmtzIGE6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jbHItcHJpbWFyeS04KTsNCiAgY29sb3I6IHZhcigtLWNsci1wcmltYXJ5LTUpOw0KICBwYWRkaW5nLWxlZnQ6IDEuNzVyZW07DQp9DQouc29jaWFsLWljb25zIHsNCiAganVzdGlmeS1zZWxmOiBjZW50ZXI7DQogIGRpc3BsYXk6IGZsZXg7DQogIHBhZGRpbmctYm90dG9tOiAycmVtOw0KfQ0KLnNvY2lhbC1pY29ucyBhIHsNCiAgZm9udC1zaXplOiAxLjVyZW07DQogIG1hcmdpbjogMCAwLjVyZW07DQogIGNvbG9yOiB2YXIoLS1jbHItcHJpbWFyeS01KTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQp9DQouc29jaWFsLWljb25zIGE6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktMSk7DQp9DQoNCi5zaWRlYmFyIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDA7DQogIGxlZnQ6IDA7DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IDEwMCU7DQogIGJhY2tncm91bmQ6IHZhcigtLWNsci1ibGFjayk7DQogIGRpc3BsYXk6IGdyaWQ7DQogIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bzsNCiAgcm93LWdhcDogMXJlbTsNCiAgYm94LXNoYWRvdzogdmFyKC0tY2xyLXJlZC1kYXJrKTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlKTsNCn0NCi5zaG93LXNpZGViYXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwKTsNCn0NCi5zaG93LXNpZGViYXIgLmNsb3NlLWJ0biB7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQouc2lkZWJhciAuY2FyZCB7DQogIHdpZHRoOiA0NGVtOw0KICBtYXJnaW46IDNlbTsNCn0NCi5jYXJkIHsNCiAgLyogY29sb3I6IHZhcigtLWNsci1ibGFjayk7ICovDQogIGJvcmRlcjogNXB4IHNvbGlkIHZhcigtLWNsci1vcmFuZ2UpOw0KfQ0KLyogLmNhcmQgaW5wdXRbdHlwZT10ZXh0XSB7DQogIGNvbG9yOiB2YXIoLS1jbHItYmxhY2spOw0KICBvdXRsaW5lOiB2YXIoLS1jbHItYmxhY2spOw0KICBib3JkZXI6IHNvbGlkIDFweCB2YXIoLS1jbHItYmxhY2spOw0KfSAqLw0KLmNhcmQgbGFiZWwgew0KICBtYXJnaW4tdG9wOiAyZW07DQp9DQouY2FyZCBsYWJlbDpmaXJzdC1vZi10eXBlIHsNCiAgbWFyZ2luLXRvcDogMWVtOw0KfQ==" + webUI["web/public/icons/chevron-double-up.svg"] = "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiIGNsYXNzPSJiaSBiaS1jaGV2cm9uLWRvdWJsZS11cCIgdmlld0JveD0iMCAwIDE2IDE2Ij4NCiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNy42NDYgMi42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCAzLjcwNyAyLjM1NCA5LjM1NGEuNS41IDAgMSAxLS43MDgtLjcwOHoiLz4NCiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNy42NDYgNi42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA3LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Ii8+DQo8L3N2Zz4=" webUI["web/public/img/filter.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzo2OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cs038OQAAAOISURBVGgF5ZpLSBVRGMfvvfmqCKKiKCqKtE3SQ8haJJm1ctPCZYHrFhXtohcUBLVsU1BRBJKLXpsSKs1aCL1oUUhvMgIloodZKmLZ72+OzNVx7jzOXGfqg/89Z875zv/7f35n7px7vanUP2JptzyGhoYKmK8GW0EZmA/mgW7wHrwDN0BTOp0epPVtxBBnLdgIVoE5YBboBR2gDTTA/5DWn0FeDPaBz8CLdeF0EBR5jYRvKbgABoAXa8Opwit/CudK8NoLs4PPM8ZyBsNnB/jpsD7X0C8cjgDXnaQkqkEPCGMSuGWivxxzx8OQj6xtpHWuPhPloHfEMWzTD0HN2GQY2xuW2Lb+/Fh+VaIQPLE5meh+gmSxFYz+BjBogtjGscfiH26Z2GmbNNltVQAIpwDdP6ZNO2iRYqTpZGhfgWUaiMC2w1kCzkbALcqLvDVvUyK6MW9HFES0b8BvsFwXEZi4F+iBtykCcjtlqf0igr52VJ1eqiIgzzdlrRIZfWfJd3SD8ZbqHvkB4XSDpJNB9V0VcX/cT4Ys/zEzSuSj/3WxW9GpRD7ETpZ/QcOJ6LyfdHugitxNehbob9G7lo4PXWBmQhPqQ/fsDOeUfjqNCU1Csi+TQ5+2luzc3yaRr6elevQZwhZr4bomYam0U41yabYqov5hvSTMjlp6RyuiAarSTLPZmox5246+lVREx/isiuh6NxhUJwF2yEpCWu1bK8WEsjyRgCSa0XrVrjNra2mC7TWD5ilYAuJoA4jSlnppF5dVEU3g0ENTD4b3nsZiZsfGJuGqj8qY+CINGqP2GLZCJ+HjtpblxAJ9k3cPrLfGJrnVUaSCarxw0jFua1lOLNBerANx+byya6IkLM2uLZWpAl6/Mcc1EjvjKtLrJNLqI5HnjfQ+bsVeteb0g2y/t7hGvd7CNjenOL8OkJ40KtOdTF+Cl/nV6Mkf4gxocI9vZPYLLKs9iQrqRIACcM2IXGeSboYrg+rztY5ARaDJWUeo0W+sXudLTFhnApaAW6FkZy/+yuXasLoCrSfwVHAnW0+gK93YawKJMLUIAdNAKwhqnSxcYUpPKB6EBE2mg7VR///EX24jybTQerXnOC70FyVP3gjTPXPTQyaP8NFPNeJrCNTPP667JKOq6VNo/A2hes5ccUjmEmPmDoD5+FMgWCcA+3FG57QJP//kQ1PgGBIOToEDgUn+t4V/AJeGknwARIKLAAAAAElFTkSuQmCC" webUI["web/public/img/log.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xNFQxMToxMDo0MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkP32mEAAANASURBVGgF7ZlPiE1RHMffw1AYhiL5k1HEijJiYaFZiHoyFspW2RFRkkSZGgtFWJIwi9FYmo0VOywkKTbKgjSlWcifRCPX51dv6s2d33md77vvXjfmV9859/7u93x/v98959x73p1KRbAkSargAhgDH0E/qIYkuHYEvAPGvwbmNOEerXM/0Q6BRSFuZj/ix0DaDnvCkGppIucDAe4OhzvkcUO+GaELAf8ux7/b8Zlrr+Pvc3zm6nX8NccXdKmFLHaUPJ/Ruhyu5zNap8Nd6PiCLrUQTyi0Rjy/5/M0Zd+smB7M32XwtgBr07aC6yfSTs7XO77OALfH4VbgHsD/HLytVquJx4nyIdQFBsHftscksK5Z0sGhpuN8Or4Aa5sJFHjtO7G2MjKvvZjN1sglOpSlCMt9LrDZ4S4Hd0Qg24vrK+gAZbPtjMqTdFKhEdkIsYxFWP720JlioUK6pzDL41jtpRIqxOOWxecuB3fhRGT8E85YBK8VygI6GSRTCxlH3TaJgyw4O2678aCxO94LbNPovYDdmOrUukIBN/MqwjJEOwGPOHR31W4VONVCLEBR9lAJpBbSrYhn5K5R+quFnGUOr1ICtMIlxjz6XVb6qot9JeKvCPSAdlQJJHDtd8hOIN0wtRDLxx6Ntr0ulalTq1TJNyYzXUjj3SjD8X87Iva7uR8s5+2bi6FtX1oOgi8g2tSn1g2yPx+t3gIR/c90s1+C1vuO/YkxdWrdjxFtE2dE0VELWaqIZ+QuUfqrhZxmyKUvgEoyE1xizOR4YOI8plXXyAZEbYsyTJvXFsUW+x6wGUSbWogJ237rZHSEgojq1CooLT3MdCH6Pcu3xz8zIq0s9lvc2+sgz6dWH/rnQPB/jlybZGoh99hCHJqk0P6TD0jaI/4b7dVYeXVq2bemokyKpRZiHwWKMimWWshxhryjoEpOKXHUNbIN8WcUc5s2r8Vue7l9oAaiTS3EhDeB6EUYnUlGojq1MobLr3uokB/5hcys7OYWKuRl5nD5Cbi5uYXw0ntPHoay2S8Seuol5RZSJ0r/n/DEc/BdrN9kTZrH7BkwDspgwyQxW6uggU3nHnAXvAG/QZE2SrARsL8hJffwDxM0mNDPvT8IAAAAAElFTkSuQmCC" webUI["web/public/img/logout.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xM1QxMToxMDoxODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cg27QeEAAANQSURBVGgF7Zk9aBRBGIZzSRSN8YdoCpEkghCCqK1o4g9IsBCCNmIniCAiWAhqI8G02qiIoqCCWggSEcFKEFPYpVAU8QdFUyiKRpRokBjP55OdZDLZvZnZ7N3Ngh887M7sN/O9797t7c5eTc3/8D8DxWKxGS5Ai//oAEYgvB4OwleQaAtAlp8ERG+Bp6Jei/wYQfRy6NfE67vhG0FtA/TBqK7c2A/bCGJ3wpAhOq4ZphGUroEHcYoT+sIygsgmOAu/EwQndYdhBHV1sB8+Jym19Lf6/faVIRuBG+GRRajtcPWMoKwFbtgUOh6vvBGEzYFj8MNRpEtaZY2gaAe8cVHmmXOc/K3QXIZv/+SUFFgJ96AS8ZwiZ6Ab6iZVzGCPiRbCKRiDasQHip6EdD/PDKyFvfAJQgg5kVfB/VoieT0MQojxE1G9UG/7otWS0A7pPkrb7DM/Ppcp+mAAM/bFGEmL4RL8gVDjI8JWOZ0bEjvhSahO0CXXsLMZWZYegREIMV4jaoHTJyNJJLfC7RCdoOm6sxGVyKAeeBegoU6l0XmLiXlwAqp1o4w7j3d1AwW9YdtnNrnQzkOXLddyfAPHv8Ey6ABpd8N88In2QqHwymfARC5mCrAH0i6qGDr9jk3fbNgFz8A1DkwIS7tDpSVwGdLcexIfPZhPHpf2wS+wRX9a/dPGUakLzBdwNgGJRlQBJtgMw5aJ3qr8TLYUmwVHwXXxZTUiwphvHYxDUnzPxIA5CdXa4E5SVa3fyUhkRtYqpSKbNYxpJiq+ncpDJar7GGlknvcl5mqM05BZH4Xl3iOLpLh7j7OR6MScSzAykplg20QIWA0PDSG+RuTdQVy8sNXP9DgK5N4jK9AvkRpfI4sYF/c2836mQl0nQ4zce66AfZFkTMqYl2DGaSMt/CYOHpsuaPco5bLUzUuMGkLHaQ+ovjwZUZrVdpAHRnnw/Bd5MrJCiY62t4x2+E2uBfkfRg95TdSkK8/LJ7JWF83+Nb5Ww0Zf+E3OviwXVMgT8dLwVRsKEd0A+uP8biMlH01MHAYVF/Oh2lCJenkDqpbUN9nPyzU91QnCRbyEPEXn1sQhxMv7tG1T7cW3rK/r44eVtxfxm6gwBh38zJqPJuUtXu3Z/wLwuBaBLgMkKwAAAABJRU5ErkJggg==" @@ -26,26 +26,26 @@ func loadHTMLMap() { webUI["web/public/img/xmltv.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQyMDowNzozMzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Co6j9bsAAAGgSURBVGgF7VqxTsNADL0gYGEon8DOwsbAAH8BYmJn6cYIn8DC3h0+oixISFRiYYCJL0AwMMBAeK5w2rpV6uikxHfYknW98+vds18TK21DWGBlWR7CH+BfcEv2AzLP8HP42gLqkyUATuEp2PWEdQjF9ATs1zF/g29Mrxt+vVcUxR3xWxEktzFPJQmivsv8ZSI9DiQyVnxlIonwn6fpiczXpNuVVXH8O+a3Ys3y9NUyuf/NTTbEHZTjUlGSRzSiPhroUIENwB4AS/vS/susDwDhTpYBER9g7wHh5DWyibV9CiitCZbIafDEYUuJHQI3Nr/9ciWsjK6IFSWYhyvClbAyZqOIlYJG84jq7E1Ot97Zm+TinV1TrWwudk9EI3ebGFekzWprzspGEU2ySWCiOrs/s9dr7M/s9fVJJJrNXcsTsfaJc0WsKZINH+/sf1Jqvl1n1f2ZnStRN/pdq646XcSkIh9dkIg4s+IrE3nCpp8RG7f91ns+cCYR/LD4jcAZB42PN+A7/mcQ8ZxJhBYQvMJwBB/BKTFLVoLMC/wCfgyv7BesTKUC2LKM3wAAAABJRU5ErkJggg==" webUI["web/public/js/authentication.js"] = "ZnVuY3Rpb24gbG9naW4oKSB7CiAgICB2YXIgZXJyID0gZmFsc2U7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOwogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXV0aGVudGljYXRpb24iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICBjb25zb2xlLmxvZyhpbnB1dHMpOwogICAgZm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBrZXkgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICB2YXIgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIGlucHV0c1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9ICJyZWQiOwogICAgICAgICAgICBlcnIgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIGlmIChlcnIgPT0gdHJ1ZSkgewogICAgICAgIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoImNvbmZpcm0iKSkgewogICAgICAgIGlmIChkYXRhWyJjb25maXJtIl0gIT0gZGF0YVsicGFzc3dvcmQiXSkgewogICAgICAgICAgICBhbGVydCgic2RhZnNkIik7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXNzd29yZCcpLnN0eWxlLmJvcmRlckNvbG9yID0gInJlZCI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtJykuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9ICJ7ey5hY2NvdW50LmZhaWxlZH19IjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgZm9ybS5zdWJtaXQoKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1hdXRoZW50aWNhdGlvbi5qcy5tYXA=" webUI["web/public/js/authentication.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHMvYXV0aGVudGljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxLQUFLO0lBQ1osSUFBSSxHQUFHLEdBQVcsS0FBSyxDQUFBO0lBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7SUFDdkIsSUFBSSxHQUFHLEdBQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNoRCxJQUFJLElBQUksR0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFeEQsSUFBSSxNQUFNLEdBQU8sR0FBRyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRWxELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFNUMsSUFBSSxHQUFHLEdBQVcsTUFBTSxDQUFDLENBQUMsQ0FBc0IsQ0FBQyxJQUFJLENBQUE7UUFDckQsSUFBSSxLQUFLLEdBQVcsTUFBTSxDQUFDLENBQUMsQ0FBc0IsQ0FBQyxLQUFLLENBQUE7UUFFeEQsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQTtZQUNuQyxHQUFHLEdBQUcsSUFBSSxDQUFBO1FBQ1osQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUE7SUFFbkIsQ0FBQztJQUVELElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hCLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO1FBQ25CLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ2YsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQTtZQUM3RCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1lBRTVELFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFBO1lBQ2hFLE9BQU07UUFDUixDQUFDO0lBRUgsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFakIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRWhCLENBQUMifQ==" - webUI["web/public/js/base.js"] = "dmFyIFNFUlZFUjsKdmFyIEJVTEtfRURJVCA9IGZhbHNlOwp2YXIgQ09MVU1OX1RPX1NPUlQ7CnZhciBJTkFDVElWRV9DT0xVTU5fVE9fU09SVDsKdmFyIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwp2YXIgVU5ETyA9IG5ldyBPYmplY3QoKTsKdmFyIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CnZhciBXU19BVkFJTEFCTEUgPSBmYWxzZTsKdmFyIHRvb2x0aXBUcmlnZ2VyTGlzdDsKdmFyIHRvb2x0aXBMaXN0Owpjb25zdCBjbGlwYm9hcmQgPSBuZXcgQ2xpcGJvYXJkSlMoJy5jb3B5LWJ0bicpOwpjbGlwYm9hcmQub24oJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAoZSkgewogICAgY29uc3QgdG9vbHRpcCA9IGJvb3RzdHJhcC5Ub29sdGlwLmdldEluc3RhbmNlKGUudHJpZ2dlcik7CiAgICBpZiAodG9vbHRpcCkgewogICAgICAgIGNvbnN0IHByZXZDb250ZW50ID0gdG9vbHRpcC5fY29uZmlnLnRpdGxlOwogICAgICAgIHRvb2x0aXAuc2V0Q29udGVudCh7ICcudG9vbHRpcC1pbm5lcic6ICdDb3BpZWQhJyB9KTsKICAgICAgICB0b29sdGlwLnNob3coKTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdG9vbHRpcC5zZXRDb250ZW50KHsgJy50b29sdGlwLWlubmVyJzogcHJldkNvbnRlbnQgfSk7CiAgICAgICAgfSwgMzAwMCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdUb29sdGlwIGluc3RhbmNlIG5vdCBmb3VuZCBmb3IgZWxlbWVudDonLCBlLnRyaWdnZXIpOwogICAgfQp9KTsKY2xpcGJvYXJkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7CiAgICBjb25zb2xlLmxvZyhlKTsKfSk7CnZhciBwb3B1cE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZSwKICAgIGJhY2tkcm9wOiAnc3RhdGljJwp9KTsKdmFyIGxvYWRpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKLy8gTWVuw7wKdmFyIG1lbnVJdGVtcyA9IG5ldyBBcnJheSgpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJwbGF5bGlzdCIsICJ7ey5tYWluTWVudS5pdGVtLnBsYXlsaXN0fX0iLCAibTN1LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5wbGF5bGlzdH19IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ4bWx0diIsICJ7ey5tYWluTWVudS5pdGVtLnhtbHR2fX0iLCAieG1sdHYucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnhtbHR2fX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oImZpbHRlciIsICJ7ey5tYWluTWVudS5pdGVtLmZpbHRlcn19IiwgImZpbHRlci5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuZmlsdGVyfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oIm1hcHBpbmciLCAie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iLCAibWFwcGluZy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUubWFwcGluZ319IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ1c2VycyIsICJ7ey5tYWluTWVudS5pdGVtLnVzZXJzfX0iLCAidXNlcnMucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnVzZXJzfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oInNldHRpbmdzIiwgInt7Lm1haW5NZW51Lml0ZW0uc2V0dGluZ3N9fSIsICJzZXR0aW5ncy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuc2V0dGluZ3N9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nIiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nfX0iLCAibG9nLnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2d9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nb3V0IiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nb3V0fX0iLCAibG9nb3V0LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2dvdXR9fSIpKTsKLy8gS2F0ZWdvcmllbiBmw7xyIGRpZSBFaW5zdGVsbHVuZ2VuCnZhciBzZXR0aW5nc0NhdGVnb3J5ID0gbmV3IEFycmF5KCk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmdlbmVyYWx9fSIsICJUaHJlYWRmaW5BdXRvVXBkYXRlLHNzZHAsdHVuZXIsZXBnU291cmNlLGVwZ0NhdGVnb3JpZXMsZXBnQ2F0ZWdvcmllc0NvbG9ycyxkdW1teSxkdW1teUNoYW5uZWwsaWdub3JlRmlsdGVycyxhcGkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmN1c3RvbWl6YXRpb259fSIsICJ1cGxvYWRDdXN0b21JbWFnZSIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkud2ViY2xpZW50fX0iLCAid2ViY2xpZW50Lmxhbmd1YWdlIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5maWxlc319IiwgInVwZGF0ZSxmaWxlcy51cGRhdGUsdGVtcC5wYXRoLGNhY2hlLmltYWdlcyxvbWl0UG9ydHMseGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzLHhlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlLGVuYWJsZU5vbkFzY2lpIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5uZXR3b3JrfX0iLCAiYmluZGluZ0lQcyx0aHJlYWRmaW5Eb21haW4sdXNlSHR0cHMsZm9yY2VDbGllbnRIdHRwcyxmb3JjZUh0dHBzIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5zdHJlYW1pbmd9fSIsICJidWZmZXIsdWRweHksYnVmZmVyLnNpemUua2Isc3RvcmVCdWZmZXJJblJBTSxidWZmZXIudGltZW91dCxidWZmZXIuYXV0b1JlY29ubmVjdCx1c2VyLmFnZW50LGZmbXBlZy5wYXRoLGZmbXBlZy5vcHRpb25zLHZsYy5wYXRoLHZsYy5vcHRpb25zIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5iYWNrdXB9fSIsICJiYWNrdXAucGF0aCxiYWNrdXAua2VlcCIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkuYXV0aGVudGljYXRpb259fSIsICJhdXRoZW50aWNhdGlvbi53ZWIsYXV0aGVudGljYXRpb24ucG1zLGF1dGhlbnRpY2F0aW9uLm0zdSxhdXRoZW50aWNhdGlvbi54bWwsYXV0aGVudGljYXRpb24uYXBpIikpOwp2YXIgc2VydmVySW5mb3JtYXRpb24gPSBuZXcgQXJyYXkoKTsKc2VydmVySW5mb3JtYXRpb24ucHVzaChuZXcgU2VydmVySW5mb3JtYXRpb25JdGVtKCJ7ey5zZXJ2ZXJJbmZvLmhlYWRlci5zZXJ2ZXJJbmZvfX0iLCAidmVyc2lvbixlcnJvcnMsd2FybmluZ3MiKSk7CnNlcnZlckluZm9ybWF0aW9uLnB1c2gobmV3IFNlcnZlckluZm9ybWF0aW9uSXRlbSgie3suc2VydmVySW5mby5oZWFkZXIuc3RyZWFtSW5mb319IiwgImR2cixtM3VVcmwseGVwZ1VybCxzdHJlYW1zLHhlcGciKSk7CnNlcnZlckluZm9ybWF0aW9uLnB1c2gobmV3IFNlcnZlckluZm9ybWF0aW9uSXRlbSgie3suc2VydmVySW5mby5oZWFkZXIuY2hhbmdlVmVyc2lvbn19IiwgImNoYW5nZVZlcnNpb24iKSk7CmZ1bmN0aW9uIHNob3dFbGVtZW50KGVsbUlELCBzaG93KSB7CiAgICBpZiAoZWxtSUQgPT0gInBvcHVwQ3VzdG9tIiB8fCBlbG1JRCA9PSAicG9wdXAiKSB7CiAgICAgICAgc3dpdGNoIChzaG93KSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIHBvcHVwTW9kYWwuc2hvdygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBwb3B1cE1vZGFsLmhpZGUoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlmIChlbG1JRCA9PSAibG9hZGluZyIpIHsKICAgICAgICBzd2l0Y2ggKHNob3cpIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgbG9hZGluZ01vZGFsLnNob3coKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgbG9hZGluZ01vZGFsLmhpZGUoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQpmdW5jdGlvbiBjaGFuZ2VCdXR0b25BY3Rpb24oZWxlbWVudCwgYnV0dG9uSUQsIGF0dHJpYnV0ZSkgewogICAgdmFyIHZhbHVlID0gZWxlbWVudC5vcHRpb25zW2VsZW1lbnQuc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25JRCkuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpOwp9CmZ1bmN0aW9uIGdldExvY2FsRGF0YShkYXRhVHlwZSwgaWQpIHsKICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiaGRociI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICBjYXNlICJncm91cC10aXRsZSI6CiAgICAgICAgICAgIGlmIChpZCA9PSAtMSkgewogICAgICAgICAgICAgICAgZGF0YVsiYWN0aXZlIl0gPSB0cnVlOwogICAgICAgICAgICAgICAgZGF0YVsiY2FzZVNlbnNpdGl2ZSJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICBkYXRhWyJkZXNjcmlwdGlvbiJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJleGNsdWRlIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImZpbHRlciJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJpbmNsdWRlIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbIm5hbWUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsidHlwZSJdID0gImdyb3VwLXRpdGxlIjsKICAgICAgICAgICAgICAgIGRhdGFbIngtY2F0ZWdvcnkiXSA9ICIiOwogICAgICAgICAgICAgICAgU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXVtpZF0gPSBkYXRhOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbHRlciJdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2RhdGFUeXBlXVtpZF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsidXNlcnMiXVtpZF1bImRhdGEiXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibTN1R3JvdXBzIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsiZGF0YSJdWyJwbGF5bGlzdCJdWyJtM3UiXVsiZ3JvdXBzIl07CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIGRhdGE7Cn0KZnVuY3Rpb24gZ2V0T2JqS2V5cyhvYmopIHsKICAgIHZhciBrZXlzID0gbmV3IEFycmF5KCk7CiAgICBmb3IgKHZhciBpIGluIG9iaikgewogICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaSkpIHsKICAgICAgICAgICAga2V5cy5wdXNoKGkpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBrZXlzOwp9CmZ1bmN0aW9uIGdldE93bk9ialByb3BzKG9iamVjdCkgewogICAgcmV0dXJuIG9iamVjdCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgOiBbXTsKfQpmdW5jdGlvbiBnZXRBbGxTZWxlY3RlZENoYW5uZWxzKCkgewogICAgdmFyIGNoYW5uZWxzID0gbmV3IEFycmF5KCk7CiAgICBpZiAoQlVMS19FRElUID09IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuIGNoYW5uZWxzOwogICAgfQogICAgdmFyIHRycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50VGFibGUiKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdHJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRyc1tpXS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIikgewogICAgICAgICAgICBpZiAodHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID09IHRydWUpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWxzLnB1c2godHJzW2ldLmlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHZhciB0cnNfaW5hY3RpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5hY3RpdmVDb250ZW50VGFibGUiKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdHJzX2luYWN0aXZlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRyc19pbmFjdGl2ZVtpXS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIikgewogICAgICAgICAgICBpZiAodHJzX2luYWN0aXZlW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID09IHRydWUpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWxzLnB1c2godHJzX2luYWN0aXZlW2ldLmlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjaGFubmVsczsKfQpmdW5jdGlvbiBzZWxlY3RBbGxDaGFubmVscyh0YWJsZV9uYW1lID0gImNvbnRlbnRUYWJsZSIpIHsKICAgIHZhciBidWxrID0gZmFsc2U7CiAgICB2YXIgdHJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVfbmFtZSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRSIik7CiAgICBpZiAodHJzWzBdLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID09IHRydWUpIHsKICAgICAgICBidWxrID0gdHJ1ZTsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdHJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRyc1tpXS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIikgewogICAgICAgICAgICBzd2l0Y2ggKGJ1bGspIHsKICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgICAgICB0cnNbaV0uZmlyc3RDaGlsZC5maXJzdENoaWxkLmNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgICAgICB0cnNbaV0uZmlyc3RDaGlsZC5maXJzdENoaWxkLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBidWxrRWRpdCgpIHsKICAgIEJVTEtfRURJVCA9ICFCVUxLX0VESVQ7CiAgICB2YXIgY2xhc3NOYW1lOwogICAgdmFyIHJvd3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJidWxrIik7CiAgICBzd2l0Y2ggKEJVTEtfRURJVCkgewogICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgY2xhc3NOYW1lID0gImJ1bGsgc2hvd0J1bGsiOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICBjbGFzc05hbWUgPSAiYnVsayBoaWRlQnVsayI7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcm93c1tpXS5jbGFzc05hbWUgPSBjbGFzc05hbWU7CiAgICAgICAgcm93c1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc29ydFRhYmxlKGNvbHVtbiwgdGFibGVfbmFtZSA9ICJjb250ZW50VGFibGUiKSB7CiAgICAvLyBjb25zb2xlLmxvZygiQ09MVU1OOiAiICsgY29sdW1uKTsKICAgIGlmICgoY29sdW1uID09IENPTFVNTl9UT19TT1JUICYmIHRhYmxlX25hbWUgPT0gImNvbnRlbnRUYWJsZSIpIHx8IChjb2x1bW4gPT0gSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgJiYgdGFibGVfbmFtZSA9PSAiaW5hY3RpdmVDb250ZW50VGFibGUiKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlX25hbWUpOwogICAgdmFyIHRhYmxlSGVhZCA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpWzBdOwogICAgdmFyIHRhYmxlSXRlbXMgPSB0YWJsZUhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIik7CiAgICB2YXIgc29ydE9iaiA9IG5ldyBPYmplY3QoKTsKICAgIHZhciB4LCB4VmFsdWU7CiAgICB2YXIgdGFibGVIZWFkZXI7CiAgICB2YXIgc29ydEJ5U3RyaW5nID0gZmFsc2U7CiAgICBpZiAoY29sdW1uID4gMCAmJiBDT0xVTU5fVE9fU09SVCA+IDAgJiYgdGFibGVfbmFtZSA9PSAiY29udGVudFRhYmxlIikgewogICAgICAgIHRhYmxlSXRlbXNbQ09MVU1OX1RPX1NPUlRdLmNsYXNzTmFtZSA9ICJwb2ludGVyIjsKICAgICAgICB0YWJsZUl0ZW1zW2NvbHVtbl0uY2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgIH0KICAgIGVsc2UgaWYgKGNvbHVtbiA+IDAgJiYgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPiAwICYmIHRhYmxlX25hbWUgPT0gImluYWN0aXZlQ29udGVudFRhYmxlIikgewogICAgICAgIHRhYmxlSXRlbXNbSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlRdLmNsYXNzTmFtZSA9ICJwb2ludGVyIjsKICAgICAgICB0YWJsZUl0ZW1zW2NvbHVtbl0uY2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgIH0KICAgIGlmICh0YWJsZV9uYW1lID09ICJjb250ZW50VGFibGUiKSB7CiAgICAgICAgQ09MVU1OX1RPX1NPUlQgPSBjb2x1bW47CiAgICB9CiAgICBlbHNlIGlmICh0YWJsZV9uYW1lID09ICJpbmFjdGl2ZUNvbnRlbnRUYWJsZSIpIHsKICAgICAgICBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9IGNvbHVtbjsKICAgIH0KICAgIHZhciByb3dzID0gdGFibGUucm93czsKICAgIGlmIChyb3dzWzFdICE9IHVuZGVmaW5lZCkgewogICAgICAgIHRhYmxlSGVhZGVyID0gcm93c1swXTsKICAgICAgICB4ID0gcm93c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKVtjb2x1bW5dOwogICAgICAgIGZvciAoaSA9IDE7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHggPSByb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpW2NvbHVtbl07CiAgICAgICAgICAgIHN3aXRjaCAoeC5jaGlsZE5vZGVzWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgewogICAgICAgICAgICAgICAgY2FzZSAiaW5wdXQiOgogICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIilbMF0udmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgInAiOgogICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlAiKVswXS5pbm5lclRleHQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGNvbnNvbGUubG9nKHguY2hpbGROb2Rlc1swXS50YWdOYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoeFZhbHVlID09ICIiKSB7CiAgICAgICAgICAgICAgICB4VmFsdWUgPSBpOwogICAgICAgICAgICAgICAgc29ydE9ialtpXSA9IHJvd3NbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGlzTmFOKHhWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWUgPSBwYXJzZUZsb2F0KHhWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRPYmpbeFZhbHVlXSA9IHJvd3NbaV07CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgc29ydEJ5U3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9ialt4VmFsdWUudG9Mb3dlckNhc2UoKSArIGldID0gcm93c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2hpbGUgKHRhYmxlLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgdGFibGUucmVtb3ZlQ2hpbGQodGFibGUuZmlyc3RDaGlsZCk7CiAgICAgICAgfQogICAgICAgIHZhciBzb3J0VmFsdWVzID0gZ2V0T2JqS2V5cyhzb3J0T2JqKTsKICAgICAgICBpZiAoc29ydEJ5U3RyaW5nID09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNvbHVtbiA9PSAzKSB7CiAgICAgICAgICAgICAgICB2YXIgY29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcih1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6ICdiYXNlJyB9KTsKICAgICAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydChjb2xsYXRvci5jb21wYXJlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmdW5jdGlvbiBzb3J0RmxvYXQoYSwgYikgewogICAgICAgICAgICAgICAgcmV0dXJuIGEgLSBiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydChzb3J0RmxvYXQpOwogICAgICAgIH0KICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0YWJsZUhlYWRlcik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3J0VmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHNvcnRPYmpbc29ydFZhbHVlc1tpXV0pOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBjcmVhdGVTZWFyY2hPYmooKSB7CiAgICBTRUFSQ0hfTUFQUElORyA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgIHZhciBjaGFubmVscyA9IGdldE9iaktleXMoZGF0YSk7CiAgICB2YXIgY2hhbm5lbEtleXMgPSBbIngtYWN0aXZlIiwgIngtY2hhbm5lbElEIiwgIngtbmFtZSIsICJfZmlsZS5tM3UubmFtZSIsICJ4LWdyb3VwLXRpdGxlIiwgIngteG1sdHYtZmlsZSJdOwogICAgY2hhbm5lbHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgY2hhbm5lbEtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICBpZiAoa2V5ID09ICJ4LWFjdGl2ZSIpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtpZF1ba2V5XSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gIm9ubGluZSAiOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSAib2ZmbGluZSAiOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gIngteG1sdHYtZmlsZSIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgeG1sdHZGaWxlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFbaWRdW2tleV0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKHhtbHR2RmlsZSAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gU0VBUkNIX01BUFBJTkdbaWRdICsgeG1sdHZGaWxlICsgIiAiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIFNFQVJDSF9NQVBQSU5HW2lkXSA9IFNFQVJDSF9NQVBQSU5HW2lkXSArIGRhdGFbaWRdW2tleV0gKyAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGVuYWJsZUdyb3VwU2VsZWN0aW9uKHNlbGVjdG9yKSB7CiAgICB2YXIgbGFzdGNoZWNrID0gbnVsbDsgLy8gbm8gY2hlY2tib3hlcyBjbGlja2VkIHlldAogICAgLy8gZ2V0IGRlc2lyZWQgY2hlY2tib3hlcwogICAgdmFyIGNoZWNrYm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKICAgIC8vIGxvb3Agb3ZlciBjaGVja2JveGVzIHRvIGFkZCBldmVudCBsaXN0ZW5lcgogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjaGVja2JveGVzLCBmdW5jdGlvbiAoY2J4LCBpZHgpIHsKICAgICAgICBjYnguYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgIC8vIHRlc3QgZm9yIHNoaWZ0IGtleSwgbm90IGZpcnN0IGNoZWNrYm94LCBhbmQgbm90IHNhbWUgY2hlY2tib3gKICAgICAgICAgICAgaWYgKGV2dC5zaGlmdEtleSAmJiBudWxsICE9PSBsYXN0Y2hlY2sgJiYgaWR4ICE9PSBsYXN0Y2hlY2spIHsKICAgICAgICAgICAgICAgIC8vIGdldCByYW5nZSBvZiBjaGVja3MgYmV0d2VlbiBsYXN0LWNoZWNrYm94IGFuZCBzaGlmdC1jaGVja2JveAogICAgICAgICAgICAgICAgLy8gTWF0aC5taW4vbWF4IGRvZXMgb3VyIHNvcnRpbmcgZm9yIHVzCiAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjaGVja2JveGVzLCBNYXRoLm1pbihsYXN0Y2hlY2ssIGlkeCksIE1hdGgubWF4KGxhc3RjaGVjaywgaWR4KSkKICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbG9vcCBvdmVyIGVhY2gKICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoY2NieCkgewogICAgICAgICAgICAgICAgICAgIGNjYnguY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXN0Y2hlY2sgPSBpZHg7IC8vIHNldCB0aGlzIGNoZWNrYm94IGFzIGxhc3QtY2hlY2tlZCBmb3IgbGF0ZXIKICAgICAgICB9KTsKICAgIH0pOwp9CmZ1bmN0aW9uIHNlYXJjaEluTWFwcGluZygpIHsKICAgIHZhciBzZWFyY2hWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2hNYXBwaW5nIikudmFsdWU7CiAgICB2YXIgdHJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRUYWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgaWQgPSB0cnNbaV0uZ2V0QXR0cmlidXRlKCJpZCIpOwogICAgICAgIHZhciBlbGVtZW50ID0gU0VBUkNIX01BUFBJTkdbaWRdOwogICAgICAgIHN3aXRjaCAoZWxlbWVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxOdW1iZXJzKGVsZW1lbnRzKSB7CiAgICB2YXIgc3RhcnRpbmdfbnVtYmVyX2VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgieC1jaGFubmVscy1zdGFydCIpWzBdOwogICAgdmFyIGVsZW1zID0gZWxlbWVudHMuc3BsaXQoIiwiKTsKICAgIHZhciBzdGFydGluZ19udW1iZXIgPSBwYXJzZUZsb2F0KHN0YXJ0aW5nX251bWJlcl9lbGVtZW50LnZhbHVlKTsKICAgIHZhciBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgIGVsZW1zLmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTsKICAgICAgICB2YXIgaW5wdXQgPSBlbGVtLmNoaWxkTm9kZXNbMV0uZmlyc3RDaGlsZDsKICAgICAgICBpbnB1dC52YWx1ZSA9IHN0YXJ0aW5nX251bWJlci50b1N0cmluZygpOwogICAgICAgIGRhdGFbZWxlbWVudF1bIngtY2hhbm5lbElEIl0gPSBzdGFydGluZ19udW1iZXIudG9TdHJpbmcoKTsKICAgICAgICBzdGFydGluZ19udW1iZXIrKzsKICAgIH0pOwogICAgaWYgKENPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxKTsKICAgIH0KICAgIGlmIChJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSwgImluYWN0aXZlX2NvbnRlbnRfcGFnZSIpOwogICAgfQp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxOdW1iZXIoZWxlbWVudCkgewogICAgdmFyIGRiSUQgPSBlbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZDsKICAgIHZhciBuZXdOdW1iZXIgPSBwYXJzZUZsb2F0KGVsZW1lbnQudmFsdWUpOwogICAgdmFyIGNoYW5uZWxOdW1iZXJzID0gW107CiAgICB2YXIgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICB2YXIgY2hhbm5lbHMgPSBnZXRPYmpLZXlzKGRhdGEpOwogICAgaWYgKGlzTmFOKG5ld051bWJlcikpIHsKICAgICAgICBhbGVydCgie3suYWxlcnQuaW52YWxpZENoYW5uZWxOdW1iZXJ9fSIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNoYW5uZWxzLmZvckVhY2goaWQgPT4gewogICAgICAgIHZhciBjaGFubmVsTnVtYmVyID0gcGFyc2VGbG9hdChkYXRhW2lkXVsieC1jaGFubmVsSUQiXSk7CiAgICAgICAgY2hhbm5lbE51bWJlcnMucHVzaChjaGFubmVsTnVtYmVyKTsKICAgIH0pOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsTnVtYmVycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjaGFubmVsTnVtYmVycy5pbmRleE9mKG5ld051bWJlcikgPT0gLTEpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChNYXRoLmZsb29yKG5ld051bWJlcikgPT0gbmV3TnVtYmVyKSB7CiAgICAgICAgICAgIG5ld051bWJlciA9IG5ld051bWJlciArIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXdOdW1iZXIgPSBuZXdOdW1iZXIgKyAwLjE7CiAgICAgICAgICAgIG5ld051bWJlci50b0ZpeGVkKDEpOwogICAgICAgICAgICBuZXdOdW1iZXIgPSBNYXRoLnJvdW5kKG5ld051bWJlciAqIDEwKSAvIDEwOwogICAgICAgIH0KICAgIH0KICAgIGRhdGFbZGJJRF1bIngtY2hhbm5lbElEIl0gPSBuZXdOdW1iZXIudG9TdHJpbmcoKTsKICAgIGVsZW1lbnQudmFsdWUgPSBuZXdOdW1iZXI7CiAgICBpZiAoQ09MVU1OX1RPX1NPUlQgPT0gMSkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgc29ydFRhYmxlKDEpOwogICAgfQogICAgaWYgKElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxLCAiaW5hY3RpdmVfY29udGVudF9wYWdlIik7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gYmFja3VwKCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBjb25zb2xlLmxvZygiQmFja3VwIGRhdGEiKTsKICAgIHZhciBjbWQgPSAiVGhyZWFkZmluQmFja3VwIjsKICAgIGNvbnNvbGUubG9nKCJTRU5EIFRPIFNFUlZFUiIpOwogICAgY29uc29sZS5sb2coZGF0YSk7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdG9nZ2xlQ2hhbm5lbFN0YXR1cyhpZCkgewogICAgdmFyIGVsZW1lbnQ7CiAgICB2YXIgc3RhdHVzOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUiKSkgewogICAgICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUiKTsKICAgICAgICBzdGF0dXMgPSAoY2hlY2tib3gpLmNoZWNrZWQ7CiAgICB9CiAgICB2YXIgaWRzID0gZ2V0QWxsU2VsZWN0ZWRDaGFubmVscygpOwogICAgaWYgKGlkcy5sZW5ndGggPT0gMCkgewogICAgICAgIGlkcy5wdXNoKGlkKTsKICAgIH0KICAgIGlkcy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgIGNoYW5uZWxbIngtYWN0aXZlIl0gPSBzdGF0dXM7CiAgICAgICAgc3dpdGNoIChjaGFubmVsWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIGlmIChjaGFubmVsWyJ4LXhtbHR2LWZpbGUiXSA9PSAiLSIgfHwgY2hhbm5lbFsieC1tYXBwaW5nIl0gPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEJVTEtfRURJVCA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGVydChjaGFubmVsWyJ4LW5hbWUiXSArICI6IE1pc3NpbmcgWE1MVFYgZmlsZSAvIGNoYW5uZWwiKQogICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFsieC1hY3RpdmUiXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIC8vIGNvZGUuLi4KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhbm5lbFsieC1hY3RpdmUiXSA9PSBmYWxzZSkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gImFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgfSk7Cn0KZnVuY3Rpb24gcmVzdG9yZSgpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgcmVzdG9yZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgidHlwZSIsICJmaWxlIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogICAgcmVzdG9yZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiIik7CiAgICByZXN0b3JlLmlkID0gInVwbG9hZCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlc3RvcmUpOwogICAgcmVzdG9yZS5jbGljaygpOwogICAgcmVzdG9yZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZmlsZW5hbWUgPSByZXN0b3JlLmZpbGVzWzBdLm5hbWU7CiAgICAgICAgdmFyIGNoZWNrID0gY29uZmlybSgiRmlsZTogIiArIGZpbGVuYW1lICsgIlxue3suY29uZmlybS5yZXN0b3JlfX0iKTsKICAgICAgICBpZiAoY2hlY2sgPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgICAgdmFyIGZpbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPWZpbGVdJykuZmlsZXNbMF07CiAgICAgICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNtZCA9ICJUaHJlYWRmaW5SZXN0b3JlIjsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJiYXNlNjQiXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBhbGVydCgiRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdG9yZS5yZW1vdmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdXBsb2FkTG9nbygpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgdXBsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgibmFtZSIsICIiKTsKICAgIHVwbG9hZC5pZCA9ICJ1cGxvYWQiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1cGxvYWQpOwogICAgdXBsb2FkLmNsaWNrKCk7CiAgICB1cGxvYWQub25ibHVyID0gZnVuY3Rpb24gKCkgewogICAgICAgIGFsZXJ0KCk7CiAgICB9OwogICAgdXBsb2FkLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBmaWxlbmFtZSA9IHVwbG9hZC5maWxlc1swXS5uYW1lOwogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgIHZhciBmaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzWzBdOwogICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICAgIHZhciBjbWQgPSAidXBsb2FkTG9nbyI7CiAgICAgICAgICAgICAgICBkYXRhWyJiYXNlNjQiXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICBkYXRhWyJmaWxlbmFtZSJdID0gZmlsZS5uYW1lOwogICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgICAgICAgICAgICAgdmFyIHVwZGF0ZUxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWljb24nKTsKICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ28uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgdXBkYXRlTG9nby5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhbGVydCgiRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkIik7CiAgICAgICAgfQogICAgICAgIHVwbG9hZC5yZW1vdmUoKTsKICAgICAgICByZXR1cm47CiAgICB9Owp9CmZ1bmN0aW9uIGNoZWNrVW5kbyhrZXkpIHsKICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgY2FzZSAiZXBnTWFwcGluZyI6CiAgICAgICAgICAgIGlmIChVTkRPLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgIFNFUlZFUlsieGVwZyJdW2tleV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVORE9ba2V5XSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgVU5ET1trZXldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShTRVJWRVJbInhlcGciXVtrZXldKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc29ydFNlbGVjdChlbGVtKSB7CiAgICB2YXIgdG1wQXJ5ID0gW107CiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IGVsZW1bZWxlbS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5vcHRpb25zLmxlbmd0aDsgaSsrKQogICAgICAgIHRtcEFyeS5wdXNoKGVsZW0ub3B0aW9uc1tpXSk7CiAgICB0bXBBcnkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKGEudGV4dCA8IGIudGV4dCkgPyAtMSA6IDE7IH0pOwogICAgd2hpbGUgKGVsZW0ub3B0aW9ucy5sZW5ndGggPiAwKQogICAgICAgIGVsZW0ub3B0aW9uc1swXSA9IG51bGw7CiAgICB2YXIgbmV3U2VsZWN0ZWRJbmRleCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcEFyeS5sZW5ndGg7IGkrKykgewogICAgICAgIGVsZW0ub3B0aW9uc1tpXSA9IHRtcEFyeVtpXTsKICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnZhbHVlID09IHNlbGVjdGVkVmFsdWUpCiAgICAgICAgICAgIG5ld1NlbGVjdGVkSW5kZXggPSBpOwogICAgfQogICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gbmV3U2VsZWN0ZWRJbmRleDsgLy8gU2V0IG5ldyBzZWxlY3RlZCBpbmRleCBhZnRlciBzb3J0aW5nCiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdXBkYXRlTG9nKCkgewogICAgY29uc29sZS5sb2coIlRPS0VOIik7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcigidXBkYXRlTG9nIik7CiAgICBzZXJ2ZXIucmVxdWVzdChuZXcgT2JqZWN0KCkpOwp9Ci8vIEdldCB0aGUgYnV0dG9uOgpsZXQgYmFja1RvVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJhY2tUb1RvcCIpOwpiYWNrVG9Ub3Auc2V0QXR0cmlidXRlKCJ0aXRsZSIsICJ7ey5idXR0b24uYmFja1RvVG9wfX0iKTsKLy8gV2hlbiB0aGUgdXNlciBzY3JvbGxzIGRvd24gMjBweCBmcm9tIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50LCBzaG93IHRoZSBidXR0b24Kd2luZG93Lm9uc2Nyb2xsID0gZnVuY3Rpb24gKCkgeyBzY3JvbGxGdW5jdGlvbigpOyB9OwpmdW5jdGlvbiBzY3JvbGxGdW5jdGlvbigpIHsKICAgIGlmIChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA+IDIwIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPiAyMCkgewogICAgICAgIGJhY2tUb1RvcC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGJhY2tUb1RvcC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgfQp9Ci8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBidXR0b24sIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBkb2N1bWVudApmdW5jdGlvbiB0b3BGdW5jdGlvbigpIHsKICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gMDsgLy8gRm9yIFNhZmFyaQogICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDA7IC8vIEZvciBDaHJvbWUsIEZpcmVmb3gsIElFIGFuZCBPcGVyYQp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2UuanMubWFw" - webUI["web/public/js/base.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksTUFBYyxDQUFBO0FBQ2xCLElBQUksU0FBUyxHQUFZLEtBQUssQ0FBQTtBQUM5QixJQUFJLGNBQXNCLENBQUE7QUFDMUIsSUFBSSx1QkFBK0IsQ0FBQTtBQUNuQyxJQUFJLGNBQWMsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0FBQ2pDLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7QUFDdkIsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUE7QUFDN0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFBO0FBSXhCLElBQUksa0JBQXVDLENBQUM7QUFDNUMsSUFBSSxXQUFrQixDQUFDO0FBRXZCLE1BQU0sU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9DLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBc0IsQ0FBQyxDQUFDO0lBQ3hFLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMxQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHlD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" + webUI["web/public/js/base.js"] = "dmFyIFNFUlZFUjsKdmFyIEJVTEtfRURJVCA9IGZhbHNlOwp2YXIgQ09MVU1OX1RPX1NPUlQ7CnZhciBJTkFDVElWRV9DT0xVTU5fVE9fU09SVDsKdmFyIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwp2YXIgVU5ETyA9IG5ldyBPYmplY3QoKTsKdmFyIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CnZhciBXU19BVkFJTEFCTEUgPSBmYWxzZTsKdmFyIHRvb2x0aXBUcmlnZ2VyTGlzdDsKdmFyIHRvb2x0aXBMaXN0Owpjb25zdCBjbGlwYm9hcmQgPSBuZXcgQ2xpcGJvYXJkSlMoJy5jb3B5LWJ0bicpOwpjbGlwYm9hcmQub24oJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAoZSkgewogICAgY29uc3QgdG9vbHRpcCA9IGJvb3RzdHJhcC5Ub29sdGlwLmdldEluc3RhbmNlKGUudHJpZ2dlcik7CiAgICBpZiAodG9vbHRpcCkgewogICAgICAgIGNvbnN0IHByZXZDb250ZW50ID0gdG9vbHRpcC5fY29uZmlnLnRpdGxlOwogICAgICAgIHRvb2x0aXAuc2V0Q29udGVudCh7ICcudG9vbHRpcC1pbm5lcic6ICdDb3BpZWQhJyB9KTsKICAgICAgICB0b29sdGlwLnNob3coKTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdG9vbHRpcC5zZXRDb250ZW50KHsgJy50b29sdGlwLWlubmVyJzogcHJldkNvbnRlbnQgfSk7CiAgICAgICAgfSwgMzAwMCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdUb29sdGlwIGluc3RhbmNlIG5vdCBmb3VuZCBmb3IgZWxlbWVudDonLCBlLnRyaWdnZXIpOwogICAgfQp9KTsKY2xpcGJvYXJkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7CiAgICBjb25zb2xlLmxvZyhlKTsKfSk7CnZhciBwb3B1cE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZSwKICAgIGJhY2tkcm9wOiAnc3RhdGljJwp9KTsKdmFyIGxvYWRpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKLy8gTWVuw7wKdmFyIG1lbnVJdGVtcyA9IG5ldyBBcnJheSgpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJwbGF5bGlzdCIsICJ7ey5tYWluTWVudS5pdGVtLnBsYXlsaXN0fX0iLCAibTN1LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5wbGF5bGlzdH19IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ4bWx0diIsICJ7ey5tYWluTWVudS5pdGVtLnhtbHR2fX0iLCAieG1sdHYucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnhtbHR2fX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oImZpbHRlciIsICJ7ey5tYWluTWVudS5pdGVtLmZpbHRlcn19IiwgImZpbHRlci5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuZmlsdGVyfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oIm1hcHBpbmciLCAie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iLCAibWFwcGluZy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUubWFwcGluZ319IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ1c2VycyIsICJ7ey5tYWluTWVudS5pdGVtLnVzZXJzfX0iLCAidXNlcnMucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnVzZXJzfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oInNldHRpbmdzIiwgInt7Lm1haW5NZW51Lml0ZW0uc2V0dGluZ3N9fSIsICJzZXR0aW5ncy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuc2V0dGluZ3N9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nIiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nfX0iLCAibG9nLnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2d9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nb3V0IiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nb3V0fX0iLCAibG9nb3V0LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2dvdXR9fSIpKTsKLy8gS2F0ZWdvcmllbiBmw7xyIGRpZSBFaW5zdGVsbHVuZ2VuCnZhciBzZXR0aW5nc0NhdGVnb3J5ID0gbmV3IEFycmF5KCk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmdlbmVyYWx9fSIsICJUaHJlYWRmaW5BdXRvVXBkYXRlLHNzZHAsdHVuZXIsZXBnU291cmNlLGVwZ0NhdGVnb3JpZXMsZXBnQ2F0ZWdvcmllc0NvbG9ycyxkdW1teSxkdW1teUNoYW5uZWwsaWdub3JlRmlsdGVycyxhcGkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmN1c3RvbWl6YXRpb259fSIsICJ1cGxvYWRDdXN0b21JbWFnZSIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkud2ViY2xpZW50fX0iLCAid2ViY2xpZW50Lmxhbmd1YWdlIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5maWxlc319IiwgInVwZGF0ZSxmaWxlcy51cGRhdGUsdGVtcC5wYXRoLGNhY2hlLmltYWdlcyxvbWl0UG9ydHMseGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzLHhlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlLGVuYWJsZU5vbkFzY2lpIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5uZXR3b3JrfX0iLCAiYmluZGluZ0lQcyx0aHJlYWRmaW5Eb21haW4sdXNlSHR0cHMsZm9yY2VDbGllbnRIdHRwcyxmb3JjZUh0dHBzIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5zdHJlYW1pbmd9fSIsICJidWZmZXIsdWRweHksYnVmZmVyLnNpemUua2Isc3RvcmVCdWZmZXJJblJBTSxidWZmZXIudGVybWluYXRpb25UaW1lb3V0LGJ1ZmZlci50aW1lb3V0LGJ1ZmZlci5hdXRvUmVjb25uZWN0LHVzZXIuYWdlbnQsZmZtcGVnLnBhdGgsZmZtcGVnLm9wdGlvbnMsdmxjLnBhdGgsdmxjLm9wdGlvbnMiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmJhY2t1cH19IiwgImJhY2t1cC5wYXRoLGJhY2t1cC5rZWVwIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5hdXRoZW50aWNhdGlvbn19IiwgImF1dGhlbnRpY2F0aW9uLndlYixhdXRoZW50aWNhdGlvbi5wbXMsYXV0aGVudGljYXRpb24ubTN1LGF1dGhlbnRpY2F0aW9uLnhtbCxhdXRoZW50aWNhdGlvbi5hcGkiKSk7CnZhciBzZXJ2ZXJJbmZvcm1hdGlvbiA9IG5ldyBBcnJheSgpOwpzZXJ2ZXJJbmZvcm1hdGlvbi5wdXNoKG5ldyBTZXJ2ZXJJbmZvcm1hdGlvbkl0ZW0oInt7LnNlcnZlckluZm8uaGVhZGVyLnNlcnZlckluZm99fSIsICJ2ZXJzaW9uLGVycm9ycyx3YXJuaW5ncyIpKTsKc2VydmVySW5mb3JtYXRpb24ucHVzaChuZXcgU2VydmVySW5mb3JtYXRpb25JdGVtKCJ7ey5zZXJ2ZXJJbmZvLmhlYWRlci5zdHJlYW1JbmZvfX0iLCAiZHZyLG0zdVVybCx4ZXBnVXJsLHN0cmVhbXMseGVwZyIpKTsKc2VydmVySW5mb3JtYXRpb24ucHVzaChuZXcgU2VydmVySW5mb3JtYXRpb25JdGVtKCJ7ey5zZXJ2ZXJJbmZvLmhlYWRlci5jaGFuZ2VWZXJzaW9ufX0iLCAiY2hhbmdlVmVyc2lvbiIpKTsKZnVuY3Rpb24gc2hvd0VsZW1lbnQoZWxtSUQsIHNob3cpIHsKICAgIGlmIChlbG1JRCA9PSAicG9wdXBDdXN0b20iIHx8IGVsbUlEID09ICJwb3B1cCIpIHsKICAgICAgICBzd2l0Y2ggKHNob3cpIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgcG9wdXBNb2RhbC5zaG93KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIHBvcHVwTW9kYWwuaGlkZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgaWYgKGVsbUlEID09ICJsb2FkaW5nIikgewogICAgICAgIHN3aXRjaCAoc2hvdykgewogICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICBsb2FkaW5nTW9kYWwuc2hvdygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBsb2FkaW5nTW9kYWwuaGlkZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIGNoYW5nZUJ1dHRvbkFjdGlvbihlbGVtZW50LCBidXR0b25JRCwgYXR0cmlidXRlKSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50Lm9wdGlvbnNbZWxlbWVudC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dHRvbklEKS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7Cn0KZnVuY3Rpb24gZ2V0TG9jYWxEYXRhKGRhdGFUeXBlLCBpZCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJoZGhyIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgaWYgKGlkID09IC0xKSB7CiAgICAgICAgICAgICAgICBkYXRhWyJhY3RpdmUiXSA9IHRydWU7CiAgICAgICAgICAgICAgICBkYXRhWyJjYXNlU2Vuc2l0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGRhdGFbImRlc2NyaXB0aW9uIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImV4Y2x1ZGUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsiZmlsdGVyIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImluY2x1ZGUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsibmFtZSJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICAgICAgZGF0YVsieC1jYXRlZ29yeSJdID0gIiI7CiAgICAgICAgICAgICAgICBTRVJWRVJbInNldHRpbmdzIl1bImZpbHRlciJdW2lkXSA9IGRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsdGVyIl1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJ1c2VycyJdW2lkXVsiZGF0YSJdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtM3VHcm91cHMiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJkYXRhIl1bInBsYXlsaXN0Il1bIm0zdSJdWyJncm91cHMiXTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKfQpmdW5jdGlvbiBnZXRPYmpLZXlzKG9iaikgewogICAgdmFyIGtleXMgPSBuZXcgQXJyYXkoKTsKICAgIGZvciAodmFyIGkgaW4gb2JqKSB7CiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkgewogICAgICAgICAgICBrZXlzLnB1c2goaSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGtleXM7Cn0KZnVuY3Rpb24gZ2V0T3duT2JqUHJvcHMob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSA6IFtdOwp9CmZ1bmN0aW9uIGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKSB7CiAgICB2YXIgY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTsKICAgIGlmIChCVUxLX0VESVQgPT0gZmFsc2UpIHsKICAgICAgICByZXR1cm4gY2hhbm5lbHM7CiAgICB9CiAgICB2YXIgdHJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRUYWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodHJzW2ldLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKSB7CiAgICAgICAgICAgIGlmICh0cnNbaV0uZmlyc3RDaGlsZC5maXJzdENoaWxkLmNoZWNrZWQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgY2hhbm5lbHMucHVzaCh0cnNbaV0uaWQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdmFyIHRyc19pbmFjdGl2ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbmFjdGl2ZUNvbnRlbnRUYWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnNfaW5hY3RpdmUubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodHJzX2luYWN0aXZlW2ldLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKSB7CiAgICAgICAgICAgIGlmICh0cnNfaW5hY3RpdmVbaV0uZmlyc3RDaGlsZC5maXJzdENoaWxkLmNoZWNrZWQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgY2hhbm5lbHMucHVzaCh0cnNfaW5hY3RpdmVbaV0uaWQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGNoYW5uZWxzOwp9CmZ1bmN0aW9uIHNlbGVjdEFsbENoYW5uZWxzKHRhYmxlX25hbWUgPSAiY29udGVudFRhYmxlIikgewogICAgdmFyIGJ1bGsgPSBmYWxzZTsKICAgIHZhciB0cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZV9uYW1lKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGlmICh0cnNbMF0uZmlyc3RDaGlsZC5maXJzdENoaWxkLmNoZWNrZWQgPT0gdHJ1ZSkgewogICAgICAgIGJ1bGsgPSB0cnVlOwogICAgfQogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodHJzW2ldLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKSB7CiAgICAgICAgICAgIHN3aXRjaCAoYnVsaykgewogICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgIHRyc1tpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgIHRyc1tpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGJ1bGtFZGl0KCkgewogICAgQlVMS19FRElUID0gIUJVTEtfRURJVDsKICAgIHZhciBjbGFzc05hbWU7CiAgICB2YXIgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImJ1bGsiKTsKICAgIHN3aXRjaCAoQlVMS19FRElUKSB7CiAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICBjbGFzc05hbWUgPSAiYnVsayBzaG93QnVsayI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJidWxrIGhpZGVCdWxrIjsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICByb3dzW2ldLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgICAgICByb3dzW2ldLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBzb3J0VGFibGUoY29sdW1uLCB0YWJsZV9uYW1lID0gImNvbnRlbnRUYWJsZSIpIHsKICAgIC8vIGNvbnNvbGUubG9nKCJDT0xVTU46ICIgKyBjb2x1bW4pOwogICAgaWYgKChjb2x1bW4gPT0gQ09MVU1OX1RPX1NPUlQgJiYgdGFibGVfbmFtZSA9PSAiY29udGVudFRhYmxlIikgfHwgKGNvbHVtbiA9PSBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCAmJiB0YWJsZV9uYW1lID09ICJpbmFjdGl2ZUNvbnRlbnRUYWJsZSIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVfbmFtZSk7CiAgICB2YXIgdGFibGVIZWFkID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRSIilbMF07CiAgICB2YXIgdGFibGVJdGVtcyA9IHRhYmxlSGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKTsKICAgIHZhciBzb3J0T2JqID0gbmV3IE9iamVjdCgpOwogICAgdmFyIHgsIHhWYWx1ZTsKICAgIHZhciB0YWJsZUhlYWRlcjsKICAgIHZhciBzb3J0QnlTdHJpbmcgPSBmYWxzZTsKICAgIGlmIChjb2x1bW4gPiAwICYmIENPTFVNTl9UT19TT1JUID4gMCAmJiB0YWJsZV9uYW1lID09ICJjb250ZW50VGFibGUiKSB7CiAgICAgICAgdGFibGVJdGVtc1tDT0xVTU5fVE9fU09SVF0uY2xhc3NOYW1lID0gInBvaW50ZXIiOwogICAgICAgIHRhYmxlSXRlbXNbY29sdW1uXS5jbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgfQogICAgZWxzZSBpZiAoY29sdW1uID4gMCAmJiBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA+IDAgJiYgdGFibGVfbmFtZSA9PSAiaW5hY3RpdmVDb250ZW50VGFibGUiKSB7CiAgICAgICAgdGFibGVJdGVtc1tJTkFDVElWRV9DT0xVTU5fVE9fU09SVF0uY2xhc3NOYW1lID0gInBvaW50ZXIiOwogICAgICAgIHRhYmxlSXRlbXNbY29sdW1uXS5jbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgfQogICAgaWYgKHRhYmxlX25hbWUgPT0gImNvbnRlbnRUYWJsZSIpIHsKICAgICAgICBDT0xVTU5fVE9fU09SVCA9IGNvbHVtbjsKICAgIH0KICAgIGVsc2UgaWYgKHRhYmxlX25hbWUgPT0gImluYWN0aXZlQ29udGVudFRhYmxlIikgewogICAgICAgIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID0gY29sdW1uOwogICAgfQogICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzOwogICAgaWYgKHJvd3NbMV0gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdGFibGVIZWFkZXIgPSByb3dzWzBdOwogICAgICAgIHggPSByb3dzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpW2NvbHVtbl07CiAgICAgICAgZm9yIChpID0gMTsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgeCA9IHJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIilbY29sdW1uXTsKICAgICAgICAgICAgc3dpdGNoICh4LmNoaWxkTm9kZXNbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSU5QVVQiKVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicCI6CiAgICAgICAgICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUCIpWzBdLmlubmVyVGV4dC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDogY29uc29sZS5sb2coeC5jaGlsZE5vZGVzWzBdLnRhZ05hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh4VmFsdWUgPT0gIiIpIHsKICAgICAgICAgICAgICAgIHhWYWx1ZSA9IGk7CiAgICAgICAgICAgICAgICBzb3J0T2JqW2ldID0gcm93c1tpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoaXNOYU4oeFZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHBhcnNlRmxvYXQoeFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9ialt4VmFsdWVdID0gcm93c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgICAgICBzb3J0QnlTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBzb3J0T2JqW3hWYWx1ZS50b0xvd2VyQ2FzZSgpICsgaV0gPSByb3dzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3aGlsZSAodGFibGUuZmlyc3RDaGlsZCkgewogICAgICAgICAgICB0YWJsZS5yZW1vdmVDaGlsZCh0YWJsZS5maXJzdENoaWxkKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNvcnRWYWx1ZXMgPSBnZXRPYmpLZXlzKHNvcnRPYmopOwogICAgICAgIGlmIChzb3J0QnlTdHJpbmcgPT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoY29sdW1uID09IDMpIHsKICAgICAgICAgICAgICAgIHZhciBjb2xsYXRvciA9IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogJ2Jhc2UnIH0pOwogICAgICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KGNvbGxhdG9yLmNvbXBhcmUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZ1bmN0aW9uIHNvcnRGbG9hdChhLCBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYSAtIGI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KHNvcnRGbG9hdCk7CiAgICAgICAgfQogICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRhYmxlSGVhZGVyKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRWYWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoc29ydE9ialtzb3J0VmFsdWVzW2ldXSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaE9iaigpIHsKICAgIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgdmFyIGNoYW5uZWxzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgIHZhciBjaGFubmVsS2V5cyA9IFsieC1hY3RpdmUiLCAieC1jaGFubmVsSUQiLCAieC1uYW1lIiwgIl9maWxlLm0zdS5uYW1lIiwgIngtZ3JvdXAtdGl0bGUiLCAieC14bWx0di1maWxlIl07CiAgICBjaGFubmVscy5mb3JFYWNoKGlkID0+IHsKICAgICAgICBjaGFubmVsS2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgIGlmIChrZXkgPT0gIngtYWN0aXZlIikgewogICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhW2lkXVtrZXldKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSAib25saW5lICI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSF9NQVBQSU5HW2lkXSA9ICJvZmZsaW5lICI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGtleSA9PSAieC14bWx0di1maWxlIikgewogICAgICAgICAgICAgICAgICAgIHZhciB4bWx0dkZpbGUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtpZF1ba2V5XSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoeG1sdHZGaWxlICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSBTRUFSQ0hfTUFQUElOR1tpZF0gKyB4bWx0dkZpbGUgKyAiICI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gU0VBUkNIX01BUFBJTkdbaWRdICsgZGF0YVtpZF1ba2V5XSArICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gZW5hYmxlR3JvdXBTZWxlY3Rpb24oc2VsZWN0b3IpIHsKICAgIHZhciBsYXN0Y2hlY2sgPSBudWxsOyAvLyBubyBjaGVja2JveGVzIGNsaWNrZWQgeWV0CiAgICAvLyBnZXQgZGVzaXJlZCBjaGVja2JveGVzCiAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgLy8gbG9vcCBvdmVyIGNoZWNrYm94ZXMgdG8gYWRkIGV2ZW50IGxpc3RlbmVyCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGNoZWNrYm94ZXMsIGZ1bmN0aW9uIChjYngsIGlkeCkgewogICAgICAgIGNieC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgLy8gdGVzdCBmb3Igc2hpZnQga2V5LCBub3QgZmlyc3QgY2hlY2tib3gsIGFuZCBub3Qgc2FtZSBjaGVja2JveAogICAgICAgICAgICBpZiAoZXZ0LnNoaWZ0S2V5ICYmIG51bGwgIT09IGxhc3RjaGVjayAmJiBpZHggIT09IGxhc3RjaGVjaykgewogICAgICAgICAgICAgICAgLy8gZ2V0IHJhbmdlIG9mIGNoZWNrcyBiZXR3ZWVuIGxhc3QtY2hlY2tib3ggYW5kIHNoaWZ0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAvLyBNYXRoLm1pbi9tYXggZG9lcyBvdXIgc29ydGluZyBmb3IgdXMKICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGNoZWNrYm94ZXMsIE1hdGgubWluKGxhc3RjaGVjaywgaWR4KSwgTWF0aC5tYXgobGFzdGNoZWNrLCBpZHgpKQogICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsb29wIG92ZXIgZWFjaAogICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChjY2J4KSB7CiAgICAgICAgICAgICAgICAgICAgY2NieC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhc3RjaGVjayA9IGlkeDsgLy8gc2V0IHRoaXMgY2hlY2tib3ggYXMgbGFzdC1jaGVja2VkIGZvciBsYXRlcgogICAgICAgIH0pOwogICAgfSk7Cn0KZnVuY3Rpb24gc2VhcmNoSW5NYXBwaW5nKCkgewogICAgdmFyIHNlYXJjaFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaE1hcHBpbmciKS52YWx1ZTsKICAgIHZhciB0cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudFRhYmxlIikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRSIik7CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRycy5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBpZCA9IHRyc1tpXS5nZXRBdHRyaWJ1dGUoImlkIik7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBTRUFSQ0hfTUFQUElOR1tpZF07CiAgICAgICAgc3dpdGNoIChlbGVtZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gY2hhbmdlQ2hhbm5lbE51bWJlcnMoZWxlbWVudHMpIHsKICAgIHZhciBzdGFydGluZ19udW1iZXJfZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJ4LWNoYW5uZWxzLXN0YXJ0IilbMF07CiAgICB2YXIgZWxlbXMgPSBlbGVtZW50cy5zcGxpdCgiLCIpOwogICAgdmFyIHN0YXJ0aW5nX251bWJlciA9IHBhcnNlRmxvYXQoc3RhcnRpbmdfbnVtYmVyX2VsZW1lbnQudmFsdWUpOwogICAgdmFyIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgZWxlbXMuZm9yRWFjaChlbGVtZW50ID0+IHsKICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQpOwogICAgICAgIHZhciBpbnB1dCA9IGVsZW0uY2hpbGROb2Rlc1sxXS5maXJzdENoaWxkOwogICAgICAgIGlucHV0LnZhbHVlID0gc3RhcnRpbmdfbnVtYmVyLnRvU3RyaW5nKCk7CiAgICAgICAgZGF0YVtlbGVtZW50XVsieC1jaGFubmVsSUQiXSA9IHN0YXJ0aW5nX251bWJlci50b1N0cmluZygpOwogICAgICAgIHN0YXJ0aW5nX251bWJlcisrOwogICAgfSk7CiAgICBpZiAoQ09MVU1OX1RPX1NPUlQgPT0gMSkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgc29ydFRhYmxlKDEpOwogICAgfQogICAgaWYgKElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxLCAiaW5hY3RpdmVfY29udGVudF9wYWdlIik7CiAgICB9Cn0KZnVuY3Rpb24gY2hhbmdlQ2hhbm5lbE51bWJlcihlbGVtZW50KSB7CiAgICB2YXIgZGJJRCA9IGVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkOwogICAgdmFyIG5ld051bWJlciA9IHBhcnNlRmxvYXQoZWxlbWVudC52YWx1ZSk7CiAgICB2YXIgY2hhbm5lbE51bWJlcnMgPSBbXTsKICAgIHZhciBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgIHZhciBjaGFubmVscyA9IGdldE9iaktleXMoZGF0YSk7CiAgICBpZiAoaXNOYU4obmV3TnVtYmVyKSkgewogICAgICAgIGFsZXJ0KCJ7ey5hbGVydC5pbnZhbGlkQ2hhbm5lbE51bWJlcn19Iik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgY2hhbm5lbHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgdmFyIGNoYW5uZWxOdW1iZXIgPSBwYXJzZUZsb2F0KGRhdGFbaWRdWyJ4LWNoYW5uZWxJRCJdKTsKICAgICAgICBjaGFubmVsTnVtYmVycy5wdXNoKGNoYW5uZWxOdW1iZXIpOwogICAgfSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxOdW1iZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGNoYW5uZWxOdW1iZXJzLmluZGV4T2YobmV3TnVtYmVyKSA9PSAtMSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKE1hdGguZmxvb3IobmV3TnVtYmVyKSA9PSBuZXdOdW1iZXIpIHsKICAgICAgICAgICAgbmV3TnVtYmVyID0gbmV3TnVtYmVyICsgMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG5ld051bWJlciA9IG5ld051bWJlciArIDAuMTsKICAgICAgICAgICAgbmV3TnVtYmVyLnRvRml4ZWQoMSk7CiAgICAgICAgICAgIG5ld051bWJlciA9IE1hdGgucm91bmQobmV3TnVtYmVyICogMTApIC8gMTA7CiAgICAgICAgfQogICAgfQogICAgZGF0YVtkYklEXVsieC1jaGFubmVsSUQiXSA9IG5ld051bWJlci50b1N0cmluZygpOwogICAgZWxlbWVudC52YWx1ZSA9IG5ld051bWJlcjsKICAgIGlmIChDT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSk7CiAgICB9CiAgICBpZiAoSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPT0gMSkgewogICAgICAgIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgc29ydFRhYmxlKDEsICJpbmFjdGl2ZV9jb250ZW50X3BhZ2UiKTsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBiYWNrdXAoKSB7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIGNvbnNvbGUubG9nKCJCYWNrdXAgZGF0YSIpOwogICAgdmFyIGNtZCA9ICJUaHJlYWRmaW5CYWNrdXAiOwogICAgY29uc29sZS5sb2coIlNFTkQgVE8gU0VSVkVSIik7CiAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgIHJldHVybjsKfQpmdW5jdGlvbiB0b2dnbGVDaGFubmVsU3RhdHVzKGlkKSB7CiAgICB2YXIgZWxlbWVudDsKICAgIHZhciBzdGF0dXM7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZSIpKSB7CiAgICAgICAgdmFyIGNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZSIpOwogICAgICAgIHN0YXR1cyA9IChjaGVja2JveCkuY2hlY2tlZDsKICAgIH0KICAgIHZhciBpZHMgPSBnZXRBbGxTZWxlY3RlZENoYW5uZWxzKCk7CiAgICBpZiAoaWRzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgaWRzLnB1c2goaWQpOwogICAgfQogICAgaWRzLmZvckVhY2goaWQgPT4gewogICAgICAgIHZhciBjaGFubmVsID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtpZF07CiAgICAgICAgY2hhbm5lbFsieC1hY3RpdmUiXSA9IHN0YXR1czsKICAgICAgICBzd2l0Y2ggKGNoYW5uZWxbIngtYWN0aXZlIl0pIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxbIngteG1sdHYtZmlsZSJdID09ICItIiB8fCBjaGFubmVsWyJ4LW1hcHBpbmciXSA9PSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoQlVMS19FRElUID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsZXJ0KGNoYW5uZWxbIngtbmFtZSJdICsgIjogTWlzc2luZyBYTUxUViBmaWxlIC8gY2hhbm5lbCIpCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjaGFubmVsWyJ4LWFjdGl2ZSJdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgLy8gY29kZS4uLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFubmVsWyJ4LWFjdGl2ZSJdID09IGZhbHNlKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc05hbWUgPSAibm90QWN0aXZlRVBHIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsKICAgICAgICB9CiAgICB9KTsKfQpmdW5jdGlvbiByZXN0b3JlKCkgewogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWQnKSkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWQnKS5yZW1vdmUoKTsKICAgIH0KICAgIHZhciByZXN0b3JlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgIHJlc3RvcmUuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImZpbGUiKTsKICAgIHJlc3RvcmUuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJub3RWaXNpYmxlIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgibmFtZSIsICIiKTsKICAgIHJlc3RvcmUuaWQgPSAidXBsb2FkIjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVzdG9yZSk7CiAgICByZXN0b3JlLmNsaWNrKCk7CiAgICByZXN0b3JlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBmaWxlbmFtZSA9IHJlc3RvcmUuZmlsZXNbMF0ubmFtZTsKICAgICAgICB2YXIgY2hlY2sgPSBjb25maXJtKCJGaWxlOiAiICsgZmlsZW5hbWUgKyAiXG57ey5jb25maXJtLnJlc3RvcmV9fSIpOwogICAgICAgIGlmIChjaGVjayA9PSB0cnVlKSB7CiAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgICAgICB2YXIgZmlsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ZmlsZV0nKS5maWxlc1swXTsKICAgICAgICAgICAgaWYgKGZpbGUpIHsKICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZWFkZXIucmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICB2YXIgY21kID0gIlRocmVhZGZpblJlc3RvcmUiOwogICAgICAgICAgICAgICAgICAgIGRhdGFbImJhc2U2NCJdID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgICAgICAgICAgICAgICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCJGaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN0b3JlLnJlbW92ZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybjsKfQpmdW5jdGlvbiB1cGxvYWRMb2dvKCkgewogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWQnKSkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWQnKS5yZW1vdmUoKTsKICAgIH0KICAgIHZhciB1cGxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgidHlwZSIsICJmaWxlIik7CiAgICB1cGxvYWQuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJub3RWaXNpYmxlIik7CiAgICB1cGxvYWQuc2V0QXR0cmlidXRlKCJuYW1lIiwgIiIpOwogICAgdXBsb2FkLmlkID0gInVwbG9hZCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVwbG9hZCk7CiAgICB1cGxvYWQuY2xpY2soKTsKICAgIHVwbG9hZC5vbmJsdXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgYWxlcnQoKTsKICAgIH07CiAgICB1cGxvYWQub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGZpbGVuYW1lID0gdXBsb2FkLmZpbGVzWzBdLm5hbWU7CiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgdmFyIGZpbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPWZpbGVdJykuZmlsZXNbMF07CiAgICAgICAgaWYgKGZpbGUpIHsKICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZWFkZXIucmVzdWx0KTsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgdmFyIGNtZCA9ICJ1cGxvYWRMb2dvIjsKICAgICAgICAgICAgICAgIGRhdGFbImJhc2U2NCJdID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgICAgICAgIGRhdGFbImZpbGVuYW1lIl0gPSBmaWxlLm5hbWU7CiAgICAgICAgICAgICAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgICAgICAgICAgICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICAgICAgICAgICAgICB2YXIgdXBkYXRlTG9nbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGRhdGUtaWNvbicpOwogICAgICAgICAgICAgICAgdXBkYXRlTG9nby5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICB1cGRhdGVMb2dvLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCJGaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQiKTsKICAgICAgICB9CiAgICAgICAgdXBsb2FkLnJlbW92ZSgpOwogICAgICAgIHJldHVybjsKICAgIH07Cn0KZnVuY3Rpb24gY2hlY2tVbmRvKGtleSkgewogICAgc3dpdGNoIChrZXkpIHsKICAgICAgICBjYXNlICJlcGdNYXBwaW5nIjoKICAgICAgICAgICAgaWYgKFVORE8uaGFzT3duUHJvcGVydHkoa2V5KSkgewogICAgICAgICAgICAgICAgU0VSVkVSWyJ4ZXBnIl1ba2V5XSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoVU5ET1trZXldKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBVTkRPW2tleV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFNFUlZFUlsieGVwZyJdW2tleV0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBzb3J0U2VsZWN0KGVsZW0pIHsKICAgIHZhciB0bXBBcnkgPSBbXTsKICAgIHZhciBzZWxlY3RlZFZhbHVlID0gZWxlbVtlbGVtLnNlbGVjdGVkSW5kZXhdLnZhbHVlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspCiAgICAgICAgdG1wQXJ5LnB1c2goZWxlbS5vcHRpb25zW2ldKTsKICAgIHRtcEFyeS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiAoYS50ZXh0IDwgYi50ZXh0KSA/IC0xIDogMTsgfSk7CiAgICB3aGlsZSAoZWxlbS5vcHRpb25zLmxlbmd0aCA+IDApCiAgICAgICAgZWxlbS5vcHRpb25zWzBdID0gbnVsbDsKICAgIHZhciBuZXdTZWxlY3RlZEluZGV4ID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG1wQXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZWxlbS5vcHRpb25zW2ldID0gdG1wQXJ5W2ldOwogICAgICAgIGlmIChlbGVtLm9wdGlvbnNbaV0udmFsdWUgPT0gc2VsZWN0ZWRWYWx1ZSkKICAgICAgICAgICAgbmV3U2VsZWN0ZWRJbmRleCA9IGk7CiAgICB9CiAgICBlbGVtLnNlbGVjdGVkSW5kZXggPSBuZXdTZWxlY3RlZEluZGV4OyAvLyBTZXQgbmV3IHNlbGVjdGVkIGluZGV4IGFmdGVyIHNvcnRpbmcKICAgIHJldHVybjsKfQpmdW5jdGlvbiB1cGRhdGVMb2coKSB7CiAgICBjb25zb2xlLmxvZygiVE9LRU4iKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCJ1cGRhdGVMb2ciKTsKICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7Cn0KLy8gR2V0IHRoZSBidXR0b246CmxldCBiYWNrVG9Ub3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmFja1RvVG9wIik7CmJhY2tUb1RvcC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgInt7LmJ1dHRvbi5iYWNrVG9Ub3B9fSIpOwovLyBXaGVuIHRoZSB1c2VyIHNjcm9sbHMgZG93biAyMHB4IGZyb20gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQsIHNob3cgdGhlIGJ1dHRvbgp3aW5kb3cub25zY3JvbGwgPSBmdW5jdGlvbiAoKSB7IHNjcm9sbEZ1bmN0aW9uKCk7IH07CmZ1bmN0aW9uIHNjcm9sbEZ1bmN0aW9uKCkgewogICAgaWYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID4gMjAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA+IDIwKSB7CiAgICAgICAgYmFja1RvVG9wLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgYmFja1RvVG9wLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB9Cn0KLy8gV2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIGJ1dHRvbiwgc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50CmZ1bmN0aW9uIHRvcEZ1bmN0aW9uKCkgewogICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSAwOyAvLyBGb3IgU2FmYXJpCiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gMDsgLy8gRm9yIENocm9tZSwgRmlyZWZveCwgSUUgYW5kIE9wZXJhCn0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFzZS5qcy5tYXA=" + webUI["web/public/js/base.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksTUFBYyxDQUFBO0FBQ2xCLElBQUksU0FBUyxHQUFZLEtBQUssQ0FBQTtBQUM5QixJQUFJLGNBQXNCLENBQUE7QUFDMUIsSUFBSSx1QkFBK0IsQ0FBQTtBQUNuQyxJQUFJLGNBQWMsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0FBQ2pDLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7QUFDdkIsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUE7QUFDN0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFBO0FBSXhCLElBQUksa0JBQXVDLENBQUM7QUFDNUMsSUFBSSxXQUFrQixDQUFDO0FBRXZCLE1BQU0sU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9DLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBc0IsQ0FBQyxDQUFDO0lBQ3hFLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMxQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHlD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" webUI["web/public/js/configuration.js"] = "Y2xhc3MgV2l6YXJkQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDQiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQp9CmNsYXNzIFdpemFyZEl0ZW0gZXh0ZW5kcyBXaXphcmRDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihrZXksIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICB9CiAgICBjcmVhdGVXaXphcmQoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBrZXkgPSB0aGlzLmtleTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGVzY3JpcHRpb247CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChoZWFkbGluZSk7CiAgICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIjEiLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIlhFUEciLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBrZXksICIiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sud2l6YXJkLm0zdS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLm0zdS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0Iiwga2V5LCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LndpemFyZC54bWx0di5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLnhtbHR2LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhrZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBwcmUuaW5uZXJIVE1MID0gZGVzY3JpcHRpb247CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHByZSk7CiAgICAgICAgY29uc29sZS5sb2coaGVhZGxpbmUsIGtleSk7CiAgICB9Cn0KZnVuY3Rpb24gcmVhZHlGb3JDb25maWd1cmF0aW9uKHdpemFyZCkgewogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoImdldFNlcnZlckNvbmZpZyIpOwogICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgY29uZmlndXJhdGlvbldpemFyZFt3aXphcmRdLmNyZWF0ZVdpemFyZCgpOwp9CmZ1bmN0aW9uIHNhdmVXaXphcmQoKSB7CiAgICB2YXIgY21kID0gInNhdmVXaXphcmQiOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgICB2YXIgY29uZmlnID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndpemFyZCIpOwogICAgdmFyIHdpemFyZCA9IG5ldyBPYmplY3QoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBjb25maWdbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gY29uZmlnW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2l6YXJkW25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNvbmZpZ1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbmZpZ1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gbmFtZS50b1VwcGVyQ2FzZSgpICsgIjogIiArICJ7ey5hbGVydC5taXNzaW5nSW5wdXR9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gY29kZS4uLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBkYXRhWyJ3aXphcmQiXSA9IHdpemFyZDsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwp9Ci8vIFdpemFyZAp2YXIgY29uZmlndXJhdGlvbldpemFyZCA9IG5ldyBBcnJheSgpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oInR1bmVyIiwgInt7LndpemFyZC50dW5lci50aXRsZX19IikpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oImVwZ1NvdXJjZSIsICJ7ey53aXphcmQuZXBnU291cmNlLnRpdGxlfX0iKSk7CmNvbmZpZ3VyYXRpb25XaXphcmQucHVzaChuZXcgV2l6YXJkSXRlbSgibTN1IiwgInt7LndpemFyZC5tM3UudGl0bGV9fSIpKTsKY29uZmlndXJhdGlvbldpemFyZC5wdXNoKG5ldyBXaXphcmRJdGVtKCJ4bWx0diIsICJ7ey53aXphcmQueG1sdHYudGl0bGV9fSIpKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlndXJhdGlvbi5qcy5tYXA=" webUI["web/public/js/configuration.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sY0FBYztJQUFwQjtRQUNFLGVBQVUsR0FBRyxTQUFTLENBQUE7SUFPeEIsQ0FBQztJQUxDLHNCQUFzQixDQUFDLEtBQVk7UUFDakMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVcsU0FBUSxjQUFjO0lBSXJDLFlBQVksR0FBVSxFQUFFLFFBQWU7UUFDckMsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNoQixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDekQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQTtRQUNsQixJQUFJLE9BQU8sR0FBZ0IsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUM3QyxJQUFJLFdBQWtCLENBQUE7UUFFdEIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDbEQsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFDbEIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV6QixRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ1osS0FBSyxPQUFPO2dCQUNWLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7Z0JBQ3RCLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7Z0JBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDWixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNoQixDQUFDO2dCQUVELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQ3pELE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUN0QyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQTtnQkFDZixHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUV2QixXQUFXLEdBQUcsK0JBQStCLENBQUE7Z0JBRTdDLE1BQU07WUFFUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxJQUFJLEdBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7Z0JBQ2hDLElBQUksTUFBTSxHQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO2dCQUVsQyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUM1RCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFDdEMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUE7Z0JBQ2YsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFFdkIsV0FBVyxHQUFHLG1DQUFtQyxDQUFBO2dCQUVqRCxNQUFLO1lBRVAsS0FBSyxLQUFLO2dCQUNSLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDaEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsNkJBQTZCLENBQUMsQ0FBQTtnQkFDaEUsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUE7Z0JBQ3JDLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFBO2dCQUNkLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRXRCLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQTtnQkFFM0MsTUFBSztZQUVQLEtBQUssT0FBTztnQkFDVixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUE7Z0JBQ2hELEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLCtCQUErQixDQUFDLENBQUE7Z0JBQ2xFLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUNyQyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQTtnQkFDZCxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUV0QixXQUFXLEdBQUcsK0JBQStCLENBQUE7Z0JBRS9DLE1BQUs7WUFFTDtnQkFDRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNoQixNQUFNO1FBQ1YsQ0FBQztRQUVELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdkMsR0FBRyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUE7UUFDM0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVwQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM1QixDQUFDO0NBR0Y7QUFHRCxTQUFTLHFCQUFxQixDQUFDLE1BQWE7SUFFMUMsSUFBSSxNQUFNLEdBQVUsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUNqRCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUU1QixXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRTdCLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFBO0FBRTVDLENBQUM7QUFFRCxTQUFTLFVBQVU7SUFFakIsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFBO0lBQ3RCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDNUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRWpELElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7SUFFekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV2QyxJQUFJLElBQVcsQ0FBQTtRQUNmLElBQUksS0FBUyxDQUFBO1FBRWIsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsS0FBSyxRQUFRO2dCQUNYLElBQUksR0FBSSxNQUFNLENBQUMsQ0FBQyxDQUF1QixDQUFDLElBQUksQ0FBQTtnQkFDNUMsS0FBSyxHQUFJLE1BQU0sQ0FBQyxDQUFDLENBQXVCLENBQUMsS0FBSyxDQUFBO2dCQUU5QyxnRUFBZ0U7Z0JBQ2hFLElBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7b0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQTtnQkFDdEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ2hDLENBQUM7Z0JBRUQsTUFBSztZQUVQLEtBQUssT0FBTztnQkFDVixRQUFTLE1BQU0sQ0FBQyxDQUFDLENBQXNCLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzdDLEtBQUssTUFBTTt3QkFDVCxJQUFJLEdBQUksTUFBTSxDQUFDLENBQUMsQ0FBc0IsQ0FBQyxJQUFJLENBQUE7d0JBQzNDLEtBQUssR0FBSSxNQUFNLENBQUMsQ0FBQyxDQUFzQixDQUFDLEtBQUssQ0FBQTt3QkFFN0MsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxHQUFHLHlCQUF5QixDQUFBOzRCQUMvRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7NEJBQ1YsT0FBTTt3QkFDUixDQUFDO3dCQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUE7d0JBQ3BCLE1BQUs7Z0JBQ1QsQ0FBQztnQkFDRCxNQUFLO1lBRVA7Z0JBQ0UsVUFBVTtnQkFDVixNQUFNO1FBQ1YsQ0FBQztJQUVILENBQUM7SUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUE7SUFFdkIsSUFBSSxNQUFNLEdBQVUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVwQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ25CLENBQUM7QUFFRCxTQUFTO0FBQ1QsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO0FBQ3JDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFBO0FBQzVFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxDQUFBO0FBQ3BGLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFBO0FBQ3hFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFBIn0=" webUI["web/public/js/logs.js"] = "Y2xhc3MgTG9nIHsKICAgIGNyZWF0ZUxvZyhlbnRyeSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIldBUk5JTkciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJ3YXJuaW5nTXNnIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIkVSUk9SIikgIT0gLTEpIHsKICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiZXJyb3JNc2ciOwogICAgICAgIH0KICAgICAgICBpZiAoZW50cnkuaW5kZXhPZigiREVCVUciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJkZWJ1Z01zZyI7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZW50cnk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KZnVuY3Rpb24gc2hvd0xvZ3MoYm90dG9tKSB7CiAgICB2YXIgbG9nID0gbmV3IExvZygpOwogICAgdmFyIGxvZ3MgPSBTRVJWRVJbImxvZyJdWyJsb2ciXTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKTsKICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhsb2dzKTsKICAgIGtleXMuZm9yRWFjaChsb2dJRCA9PiB7CiAgICAgICAgdmFyIGVudHJ5ID0gbG9nLmNyZWF0ZUxvZyhsb2dzW2xvZ0lEXSk7CiAgICAgICAgZGl2LmFwcGVuZChlbnRyeSk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChib3R0b20gPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpOwogICAgICAgICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IHdyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgIH0KICAgIH0sIDEwKTsKfQpmdW5jdGlvbiByZXNldExvZ3MoKSB7CiAgICB2YXIgY21kID0gInJlc2V0TG9ncyI7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1sb2dzLmpzLm1hcA==" webUI["web/public/js/logs.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sR0FBRztJQUVQLFNBQVMsQ0FBQyxLQUFZO1FBRXBCLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUE7UUFDbEMsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFBO1FBQ2hDLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQTtRQUNoQyxDQUFDO1FBRUQsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7UUFFekIsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztDQUVGO0FBRUQsU0FBUyxRQUFRLENBQUMsTUFBYztJQUU5QixJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRW5CLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMvQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRWhELEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBRWxCLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUzQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBRW5CLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFFdEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVuQixDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQztRQUVULElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBRW5CLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckQsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBRTNDLENBQUM7SUFFSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFVCxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBRWhCLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQTtJQUNyQixJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0lBQ3ZCLElBQUksTUFBTSxHQUFVLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7QUFFdEIsQ0FBQyJ9" - webUI["web/public/js/menu.js"] = "dmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0KICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH0KICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9CiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH0KICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7CiAgICB9KTsKfTsKY2xhc3MgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gIm1haW4tbWVudSI7CiAgICAgICAgdGhpcy5IVE1MVGFnID0gIkxJIjsKICAgICAgICB0aGlzLkltYWdlUGF0aCA9ICJpbWcvIjsKICAgIH0KICAgIGNyZWF0ZUlNRyhzcmMsIGFsdCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU1HIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInNyYyIsIHRoaXMuSW1hZ2VQYXRoICsgc3JjKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiYWx0IiwgYWx0KTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVZhbHVlKHZhbHVlKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7CiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KfQpjbGFzcyBNYWluTWVudUl0ZW0gZXh0ZW5kcyBNYWluTWVudSB7CiAgICBjb25zdHJ1Y3RvcihtZW51S2V5LCB2YWx1ZSwgaW1hZ2UsIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLm1lbnVLZXkgPSBtZW51S2V5OwogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAgICB0aGlzLmltZ1NyYyA9IGltYWdlOwogICAgICAgIHRoaXMuaGVhZGxpbmUgPSBoZWFkbGluZTsKICAgIH0KICAgIGNyZWF0ZUl0ZW0oKSB7CiAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJMSSIpOwogICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IG9wZW5UaGlzTWVudSh0aGlzKSIpOwogICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCJpZCIsIHRoaXMuaWQpOwogICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJuYXYtaXRlbSIpOwogICAgICAgIHZhciBpbWcgPSB0aGlzLmNyZWF0ZUlNRyh0aGlzLmltZ1NyYywgdGhpcy52YWx1ZSk7CiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5jcmVhdGVWYWx1ZSh0aGlzLnZhbHVlKTsKICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGltZyk7CiAgICAgICAgaXRlbS5hcHBlbmRDaGlsZCh2YWx1ZSk7CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgICAgIHN3aXRjaCAodGhpcy5tZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgICAgIHRoaXMudGFibGVIZWFkZXIgPSBbInt7LnBsYXlsaXN0LnRhYmxlLnBsYXlsaXN0fX0iLCAie3sucGxheWxpc3QudGFibGUudHVuZXJ9fSIsICJ7ey5wbGF5bGlzdC50YWJsZS5sYXN0VXBkYXRlfX0iLCAie3sucGxheWxpc3QudGFibGUuYXZhaWxhYmlsaXR5fX0gJSIsICJ7ey5wbGF5bGlzdC50YWJsZS50eXBlfX0iLCAie3sucGxheWxpc3QudGFibGUuc3RyZWFtc319IiwgInt7LnBsYXlsaXN0LnRhYmxlLmdyb3VwVGl0bGV9fSAlIiwgInt7LnBsYXlsaXN0LnRhYmxlLnR2Z0lEfX0gJSIsICJ7ey5wbGF5bGlzdC50YWJsZS51bmlxdWVJRH19ICUiXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJ7ey54bWx0di50YWJsZS5ndWlkZX19IiwgInt7LnhtbHR2LnRhYmxlLmxhc3RVcGRhdGV9fSIsICJ7ey54bWx0di50YWJsZS5hdmFpbGFiaWxpdHl9fSAlIiwgInt7LnhtbHR2LnRhYmxlLmNoYW5uZWxzfX0iLCAie3sueG1sdHYudGFibGUucHJvZ3JhbXN9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJ7ey5maWx0ZXIudGFibGUubmFtZX19IiwgInt7LmZpbHRlci50YWJsZS50eXBlfX0iLCAie3suZmlsdGVyLnRhYmxlLmZpbHRlcn19Il07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3sudXNlcnMudGFibGUudXNlcm5hbWV9fSIsICJ7ey51c2Vycy50YWJsZS5wYXNzd29yZH19IiwgInt7LnVzZXJzLnRhYmxlLndlYn19IiwgInt7LnVzZXJzLnRhYmxlLnBtc319IiwgInt7LnVzZXJzLnRhYmxlLm0zdX19IiwgInt7LnVzZXJzLnRhYmxlLnhtbH19IiwgInt7LnVzZXJzLnRhYmxlLmFwaX19Il07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJCVUxLIiwgInt7Lm1hcHBpbmcudGFibGUuY2hOb319IiwgInt7Lm1hcHBpbmcudGFibGUubG9nb319IiwgInt7Lm1hcHBpbmcudGFibGUuY2hhbm5lbE5hbWV9fSIsICJ7ey5tYXBwaW5nLnRhYmxlLnBsYXlsaXN0fX0iLCAie3subWFwcGluZy50YWJsZS5ncm91cFRpdGxlfX0iLCAie3subWFwcGluZy50YWJsZS54bWx0dkZpbGV9fSIsICJ7ey5tYXBwaW5nLnRhYmxlLnhtbHR2SUR9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CmNsYXNzIENvbnRlbnQgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgICAgIHRoaXMuSGVhZGVySUQgPSAicG9wdXBIZWFkZXIiOwogICAgICAgIHRoaXMuVGFibGVJRCA9ICJjb250ZW50VGFibGUiOwogICAgICAgIHRoaXMuSW5hY3RpdmVUYWJsZUlEID0gImluYWN0aXZlQ29udGVudFRhYmxlIjsKICAgICAgICB0aGlzLmhlYWRlckNsYXNzID0gImNvbnRlbnRUYWJsZUhlYWRlciI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzc0luYWN0aXZlID0gImluYWN0aXZlQ29udGVudFRhYmxlSGVhZGVyIjsKICAgICAgICB0aGlzLmludGVyYWN0aW9uSUQgPSAiY29udGVudC1pbnRlcmFjdGlvbiI7CiAgICB9CiAgICBjcmVhdGVIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDMiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSFIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlQlIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmludGVyYWN0aW9uSUQpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlRElWKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuRGl2SUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVUQUJMRSgpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3RhYmxlJyk7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuVGFibGVJRDsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3M7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRBQkxFKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKTsKICAgICAgICBlbGVtZW50LmlkID0gdGhpcy5JbmFjdGl2ZVRhYmxlSUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3NJbmFjdGl2ZTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgibTN1IiwgImhkaHIiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ0dW5lciJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJsYXN0LnVwZGF0ZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJwcm92aWRlci5hdmFpbGFiaWxpdHkiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsidHlwZSJdLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bImdyb3VwLnRpdGxlIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsidHZnLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICBkZWxldGUgU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXVstMV07CiAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXTsKICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgdHIuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiJyArIGRhdGFba2V5XVsidHlwZSJdICsgJyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtrZXldWyJ0eXBlIl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gInt7LmZpbHRlci5jdXN0b219fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICJ7ey5maWx0ZXIuZ3JvdXB9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImZpbHRlciJdOwogICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgieG1sdHYiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsibGFzdC51cGRhdGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsicHJvdmlkZXIuYXZhaWxhYmlsaXR5Il07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsieG1sdHYuY2hhbm5lbHMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiY29tcGF0aWJpbGl0eSJdWyJ4bWx0di5wcm9ncmFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0cik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGVzID0gbmV3IEFycmF5KCJ1c2VycyIpOwogICAgICAgICAgICAgICAgZmlsZVR5cGVzLmZvckVhY2goZmlsZVR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbZmlsZVR5cGVdOwogICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIicgKyBmaWxlVHlwZSArICciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiZGF0YSJdWyJ1c2VybmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIioqKioqKiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ud2ViIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLnBtcyJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsiZGF0YSJdWyJhdXRoZW50aWNhdGlvbi5tM3UiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIuKckyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIi0iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ueG1sIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLmFwaSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVsawogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJCVUxLIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbnVtbWVyCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIklOUFVUQ0hBTk5FTCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IGNoYW5nZUNoYW5uZWxOdW1iZXIoIicgKyBrZXkgKyAnIiwgdGhpcyknKQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvZ28KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiSU1HIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pbWFnZVVSTCA9IGRhdGFba2V5XVsidHZnLWxvZ28iXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0cyA9IGRhdGFba2V5XVsieC1jYXRlZ29yeSJdLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAiY2F0ZWdvcnkiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0Q29sb3JTZXR0aW5ncyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllc0NvbG9ycyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzX3NwbGl0ID0gY2F0Q29sb3JTZXR0aW5ncy5zcGxpdCgifCIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yc19zcGxpdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHNDb2xvcl9zcGxpdCA9IGNvbG9yc19zcGxpdFtpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdHNDb2xvcl9zcGxpdFswXSA9PSBjYXRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0NvbG9yID0gY2F0c0NvbG9yX3NwbGl0WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtbmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXlsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL2NlbGwudmFsdWUgPSBkYXRhW2tleV1bIl9maWxlLm0zdS5uYW1lIl0gCiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJfZmlsZS5tM3UuaWQiXSwgIm0zdSIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3J1cHBlIChncm91cC10aXRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtZ3JvdXAtdGl0bGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIEthbmFsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB2YWx1ZSA9IHN0ci5zdWJzdHJpbmcoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV1bIngtbWFwcGluZyJdLnN1YnN0cmluZygwLCAyMCkgKyAiLi4uIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICBhbGVydCgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGFibGUgY29udGVudCAobWVudUtleSk6IiwgbWVudUtleSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvd3M7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1bGsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMSyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG51bW1lcgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTlBVVENIQU5ORUwiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LWNoYW5uZWxJRCJdICogMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy90ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogY2hhbmdlQ2hhbm5lbE51bWJlcigiJyArIGtleSArICciLCB0aGlzKScpCiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9nbwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTUciOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmltYWdlVVJMID0gZGF0YVtrZXldWyJ0dmctbG9nbyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbmFtZQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzID0gZGF0YVtrZXldWyJ4LWNhdGVnb3J5Il0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9ICJjYXRlZ29yeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRDb2xvclNldHRpbmdzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzQ29sb3JzIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNfc3BsaXQgPSBjYXRDb2xvclNldHRpbmdzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzX3NwbGl0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0c0NvbG9yX3NwbGl0ID0gY29sb3JzX3NwbGl0W2ldLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0c0NvbG9yX3NwbGl0WzBdID09IGNhdHNbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzQ29sb3IgPSBjYXRzQ29sb3Jfc3BsaXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1uYW1lIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGxheWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiX2ZpbGUubTN1Lm5hbWUiXSAKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShkYXRhW2tleV1bIl9maWxlLm0zdS5pZCJdLCAibTN1IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBHcnVwcGUgKGdyb3VwLXRpdGxlKQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1ncm91cC10aXRsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIERhdGVpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngteG1sdHYtZmlsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MVFYgS2FuYWwKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHZhbHVlID0gc3RyLnN1YnN0cmluZygxLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtrZXldWyJ4LW1hcHBpbmciXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl0uc3Vic3RyaW5nKDAsIDIwKSArICIuLi4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNldHRpbmdzIjoKICAgICAgICAgICAgICAgIGFsZXJ0KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJUYWJsZSBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcm93czsKICAgIH0KfQpjbGFzcyBDZWxsIHsKICAgIGNyZWF0ZUNlbGwoKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICBpZiAodGhpcy5jaGlsZCA9PSB0cnVlKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50OwogICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY2hpbGRUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJQIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5jbGFzc0NvbG9yOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVRDSEFOTkVMIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2c2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVyKHRoaXMpIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMSyI6CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAiY2hlY2tib3giOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMS19IRUFEIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiYnVsayBoaWRlQnVsayI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCkiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCdpbmFjdGl2ZUNvbnRlbnRUYWJsZScpIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiSU1HIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInNyYyIsIHRoaXMuaW1hZ2VVUkwpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlVVJMICE9ICIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmVycm9yIiwgImphdmFzY3JpcHQ6IHRoaXMub25lcnJvcj1udWxsO3RoaXMuc3JjPScnIik7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vb25lcnJvcj0idGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9J21pc3NpbmcuZ2lmJzsiCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub25jbGljayA9PSB0cnVlKSB7CiAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgib25jbGljayIsIHRoaXMub25jbGlja0Z1bmt0aW9uKTsKICAgICAgICAgICAgdGQuY2xhc3NOYW1lID0gInBvaW50ZXIiOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy50ZENsYXNzTmFtZSAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgdGQuY2xhc3NOYW1lID0gdGhpcy50ZENsYXNzTmFtZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRkOwogICAgfQp9CmNsYXNzIFNob3dDb250ZW50IGV4dGVuZHMgQ29udGVudCB7CiAgICBjb25zdHJ1Y3RvcihtZW51SUQpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIHRoaXMubWVudUlEID0gbWVudUlEOwogICAgfQogICAgY3JlYXRlSW5wdXQodHlwZSwgbmFtZSwgdmFsdWUpIHsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsIHR5cGUpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIG5hbWUpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgc2hvdygpIHsKICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIC8vIEFsdGVuIEluaGFsdCBsw7ZzY2hlbgogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRvY3VtZW50SUQpOwogICAgICAgIGRvYy5pbm5lckhUTUwgPSAiIjsKICAgICAgICBzaG93UHJldmlldyhmYWxzZSk7CiAgICAgICAgLy8gw5xiZXJzY2hyaWZ0CiAgICAgICAgdmFyIHBvcHVwSGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5IZWFkZXJJRCk7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gbWVudUl0ZW1zW3RoaXMubWVudUlEXS5oZWFkbGluZTsKICAgICAgICB2YXIgbWVudUtleSA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0ubWVudUtleTsKICAgICAgICB2YXIgaCA9IHRoaXMuY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpOwogICAgICAgIHZhciBleGlzdGluZ0hlYWRlciA9IHBvcHVwSGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJ2gzJyk7CiAgICAgICAgaWYgKGV4aXN0aW5nSGVhZGVyKSB7CiAgICAgICAgICAgIHBvcHVwSGVhZGVyLnJlcGxhY2VDaGlsZChoLCBleGlzdGluZ0hlYWRlcik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwb3B1cEhlYWRlci5hcHBlbmRDaGlsZChoKTsKICAgICAgICB9CiAgICAgICAgdmFyIGhyID0gdGhpcy5jcmVhdGVIUigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChocik7CiAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICB2YXIgZGl2ID0gdGhpcy5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgIHZhciBpbnRlcmFjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaW50ZXJhY3Rpb25JRCk7CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiLSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgicGxheWxpc3QiKScpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLm5ld319Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgLTEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiZmlsdGVyIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLm5ld319Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInhtbHR2Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJ4bWx0diIpJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJ1c2VycyIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgidXNlcnMiKScpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgLy8gc2hvd0VsZW1lbnQoImxvYWRpbmciLCB0cnVlKQogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJtYXBwaW5nIiwgIiIsICIiKScpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5idWxrRWRpdH19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogYnVsa0VkaXQoKScpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgic2VhcmNoIiwgInNlYXJjaCIsICIiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAic2VhcmNoTWFwcGluZyIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5idXR0b24uc2VhcmNofX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LmNsYXNzTmFtZSA9ICJzZWFyY2giOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICdqYXZhc2NyaXB0OiBzZWFyY2hJbk1hcHBpbmcoKScpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNldHRpbmdzIjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVNldHRpbmdzKCk7Jyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLmJhY2t1cH19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogYmFja3VwKCk7Jyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLnJlc3RvcmV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHJlc3RvcmUoKTsnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgICAgIGRvYy5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKICAgICAgICAgICAgICAgIHRoaXMuRGl2SUQgPSAiY29udGVudF9zZXR0aW5ncyI7CiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURJVigpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChzZXR0aW5ncyk7CiAgICAgICAgICAgICAgICBzaG93U2V0dGluZ3MoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJsb2ciOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5yZXNldExvZ3N9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHJlc2V0TG9ncygpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICAgICAgICAgIHdyYXBwZXIuc2V0QXR0cmlidXRlKCJpZCIsICJib3gtd3JhcHBlciIpOwogICAgICAgICAgICAgICAgZG9jLmFwcGVuZENoaWxkKHdyYXBwZXIpOwogICAgICAgICAgICAgICAgdGhpcy5EaXZJRCA9ICJjb250ZW50X2xvZyI7CiAgICAgICAgICAgICAgICB2YXIgbG9ncyA9IHRoaXMuY3JlYXRlRElWKCk7CiAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGxvZ3MpOwogICAgICAgICAgICAgICAgc2hvd0xvZ3ModHJ1ZSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibG9nb3V0IjoKICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gIlRva2VuPSA7IGV4cGlyZXMgPSBUaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaG93IGNvbnRlbnQgKG1lbnVLZXkpOiIsIG1lbnVLZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIFRhYmVsbGUgZXJzdGVsbGVuIChmYWxscyBiZW7DtnRpZ3QpCiAgICAgICAgdmFyIHRhYmxlSGVhZGVyID0gbWVudUl0ZW1zW3RoaXMubWVudUlEXS50YWJsZUhlYWRlcjsKICAgICAgICBpZiAodGFibGVIZWFkZXIubGVuZ3RoID4gMCkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpOwogICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQod3JhcHBlcik7CiAgICAgICAgICAgIHdyYXBwZXIuc2V0QXR0cmlidXRlKCJpZCIsICJib3gtd3JhcHBlciIpOwogICAgICAgICAgICB2YXIgdGFibGUgPSB0aGlzLmNyZWF0ZVRBQkxFKCk7CiAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQodGFibGUpOwogICAgICAgICAgICB2YXIgaGVhZGVyID0gdGhpcy5jcmVhdGVUYWJsZVJvdygpOwogICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChoZWFkZXIpOwogICAgICAgICAgICAvLyBLb3BmemVpbGUgZGVyIFRhYmxsZQogICAgICAgICAgICB0YWJsZUhlYWRlci5mb3JFYWNoKGVsZW1lbnQgPT4gewogICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBlbGVtZW50OwogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gIkJVTEsiKSB7CiAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMS19IRUFEIjsKICAgICAgICAgICAgICAgICAgICBjZWxsLmFjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG1lbnVLZXkgPT0gIm1hcHBpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUuY2hOb319IikgewogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoMSk7IjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC50ZENsYXNzTmFtZSA9ICJzb3J0VGhpcyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmNoYW5uZWxOYW1lfX0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgzKTsiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5wbGF5bGlzdH19IikgewogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNCk7IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUuZ3JvdXBUaXRsZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNSk7IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgLy8gSW5oYWx0IGRlciBUYWJlbGxlCiAgICAgICAgICAgIHZhciByb3dzID0gdGhpcy5jcmVhdGVUYWJsZUNvbnRlbnQobWVudUtleSk7CiAgICAgICAgICAgIHJvd3MuZm9yRWFjaCh0ciA9PiB7CiAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgYnIgPSB0aGlzLmNyZWF0ZUJSKCk7CiAgICAgICAgICAgIGRvYy5hcHBlbmRDaGlsZChicik7CiAgICAgICAgICAgIC8vIENyZWF0ZSBpbmFjdGl2ZSBjaGFubmVscyBmb3IgbWFwcGluZwogICAgICAgICAgICBpZiAobWVudUtleSA9PSAibWFwcGluZyIpIHsKICAgICAgICAgICAgICAgIHZhciBpbmFjdGl2ZXRhYmxlID0gdGhpcy5jcmVhdGVJbmFjdGl2ZVRBQkxFKCk7CiAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGluYWN0aXZldGFibGUpOwogICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMuY3JlYXRlSW5hY3RpdmVUYWJsZVJvdygpOwogICAgICAgICAgICAgICAgaW5hY3RpdmV0YWJsZS5hcHBlbmRDaGlsZChoZWFkZXIpOwogICAgICAgICAgICAgICAgLy8gS29wZnplaWxlIGRlciBUYWJsbGUKICAgICAgICAgICAgICAgIHRhYmxlSGVhZGVyLmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBlbGVtZW50OwogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJCVUxLIikgewogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJCVUxLX0hFQUQiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChtZW51S2V5ID09ICJtYXBwaW5nIikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaE5vfX0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDEsICdpbmFjdGl2ZUNvbnRlbnRUYWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnRkQ2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgzLCAnaW5hY3RpdmVDb250ZW50VGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLnBsYXlsaXN0fX0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDQsICdpbmFjdGl2ZUNvbnRlbnRUYWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUuZ3JvdXBUaXRsZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSg1LCAnaW5hY3RpdmVDb250ZW50VGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICAgICAgcm93cy5mb3JFYWNoKHRyID0+IHsKICAgICAgICAgICAgICAgICAgICBpbmFjdGl2ZXRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCBmYWxzZSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEsICJpbmFjdGl2ZUNvbnRlbnRUYWJsZSIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICBzaG93UHJldmlldyh0cnVlKTsKICAgICAgICAgICAgICAgIHNvcnRUYWJsZSgwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICAgICAgICAgIHNvcnRUYWJsZSgwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKICAgIH0KfQpmdW5jdGlvbiBQYWdlUmVhZHkoKSB7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcigiZ2V0U2VydmVyQ29uZmlnIik7CiAgICBzZXJ2ZXIucmVxdWVzdChuZXcgT2JqZWN0KCkpOwogICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgIHVwZGF0ZUxvZygpOwogICAgfSwgMTAwMDApOwogICAgZ2V0TmV3ZXN0UmVsZWFzZUZyb21HaXRodWIoKTsKICAgIHJldHVybjsKfQp2YXIgY2hlY2tib3hlc0luaXRpYWxTdGF0ZSA9IFtdOwpmdW5jdGlvbiBzZXRDaGVja2JveGVzKCkgewogICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsKICAgICAgICBjb25zdCBjb250ZW50ID0gbmV3IFBvcHVwQ29udGVudCgpOwogICAgICAgIGNvbnN0IHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoZWNrYm94VGFibGUiKTsKICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZShmID0+IHNldFRpbWVvdXQoZiwgMTAwMCkpOwogICAgICAgIGlmICgiY2xpZW50SW5mbyIgaW4gU0VSVkVSKSB7CiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmdJUHMgPSBTRVJWRVJbJ3NldHRpbmdzJ11bJ2JpbmRpbmdJUHMnXTsKICAgICAgICAgICAgY29uc3QgYmluZGluZ0lQc3BBcnJheSA9IGJpbmRpbmdJUHMuc3BsaXQoIjsiKTsKICAgICAgICAgICAgY29uc3Qgc3lzdGVtbklQcyA9IFNFUlZFUlsiY2xpZW50SW5mbyJdWyJzeXN0ZW1JUHMiXTsKICAgICAgICAgICAgc3lzdGVtbklQcy5mb3JFYWNoKChpcEFkZHJlc3MsIGluZGV4KSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoIWlwQWRkcmVzcy5pbmNsdWRlcygnMTY5LjI1NCcpKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tib3ggPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGlwQWRkcmVzcywgJ2lwQ2hlY2tib3gnICsgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSBiaW5kaW5nSVBzcEFycmF5LmluY2x1ZGVzKGlwQWRkcmVzcyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgICAgICAgICAgICAgIGxhYmVsLnNldEF0dHJpYnV0ZSgiZm9yIiwgImlwQ2hlY2tib3giICsgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIGxhYmVsLmlubmVySFRNTCA9IGlwQWRkcmVzczsKICAgICAgICAgICAgICAgICAgICB0ZExlZnQuYXBwZW5kQ2hpbGQoY2hlY2tib3gpOwogICAgICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQobGFiZWwpOwogICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3QgY2hlY2tib3hfY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoZWNrYm94X2NvbnRhaW5lciIpOwogICAgICAgICAgICBjb25zdCBzYXZlQnV0dG9uID0gY3JlYXRlQnV0dG9uKGNvbnRlbnQsICJidXR0b25VcGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19IiwgJ2phdnNyY2lwdDogdXBkYXRlQmluZGluZ0lQcygpJyk7CiAgICAgICAgICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbihjb250ZW50LCAiYnV0dG9uQ2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBjaGVja2JveF9jb250YWluZXIuYXBwZW5kQ2hpbGQoc2F2ZUJ1dHRvbik7CiAgICAgICAgICAgIGNoZWNrYm94X2NvbnRhaW5lci5hcHBlbmRDaGlsZChjYW5jZWxCdXR0b24pOwogICAgICAgICAgICBjb25zdCBjaGVja2JveGVzID0gY2hlY2tib3hfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKTsKICAgICAgICAgICAgY2hlY2tib3hlc0luaXRpYWxTdGF0ZSA9IEFycmF5LmZyb20oY2hlY2tib3hlcykubWFwKGNoZWNrYm94ID0+IGNoZWNrYm94LmNoZWNrZWQpOwogICAgICAgICAgICBjb25zdCBpcFNlbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpcF9zZWxlY3Rpb24nKTsKICAgICAgICAgICAgY29uc3QgY2xvc2VCdXR0b24gPSBpcFNlbGVjdGlvbi5xdWVyeVNlbGVjdG9yKCdidXR0b24uYnRuLWNsb3NlJyk7CiAgICAgICAgICAgIGNsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gcmVzZXRDaGVja2JveGVzKGNoZWNrYm94ZXMsIGNoZWNrYm94ZXNJbml0aWFsU3RhdGUpKTsKICAgICAgICAgICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gcmVzZXRDaGVja2JveGVzKGNoZWNrYm94ZXMsIGNoZWNrYm94ZXNJbml0aWFsU3RhdGUpKTsKICAgICAgICB9CiAgICB9KTsKfQpmdW5jdGlvbiByZXNldENoZWNrYm94ZXMoY2hlY2tib3hlcywgaW5pdGlhbFN0YXRlcykgewogICAgY2hlY2tib3hlcy5mb3JFYWNoKChjaGVja2JveCwgaW5kZXgpID0+IHsKICAgICAgICBjaGVja2JveC5jaGVja2VkID0gaW5pdGlhbFN0YXRlc1tpbmRleF07CiAgICB9KTsKfQpmdW5jdGlvbiBjcmVhdGVMYXlvdXQoKSB7CiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLW1lbnUiKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIE1lbsO8IGVyc3RlbGxlbgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tbWVudSIpLmlubmVySFRNTCA9ICIiOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW51SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBtZW51SXRlbXNbaV0uaWQgPSBpOwogICAgICAgIHN3aXRjaCAobWVudUl0ZW1zW2ldWyJtZW51S2V5Il0pIHsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBjYXNlICJsb2dvdXQiOgogICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYXV0aGVudGljYXRpb24ud2ViIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtc1tpXS5jcmVhdGVJdGVtKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIG1lbnVJdGVtc1tpXS5jcmVhdGVJdGVtKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICAvLyBDcmVhdGUgc2VydmVyIGluZm9ybWF0aW9uCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VydmVyX2luZm9ybWF0aW9uIikuaW5uZXJIVE1MID0gIiI7CiAgICBjb25zdCBzZXJ2ZXJJbmZvID0gbmV3IFNlcnZlckluZm9ybWF0aW9uKCk7CiAgICBzZXJ2ZXJJbmZvLmFkZENvbnRlbnQoc2VydmVySW5mb3JtYXRpb24pOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZlcl9pbmZvcm1hdGlvbiIpLnJlcGxhY2VXaXRoKHNlcnZlckluZm8uY29udGFpbmVyKTsKICAgIC8vIGluaXRpYWxpemUgdG9vbCB0aXBzCiAgICB0b29sdGlwVHJpZ2dlckxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1icy10b2dnbGU9InRvb2x0aXAiXScpOwogICAgdG9vbHRpcExpc3QgPSBBcnJheS5mcm9tKHRvb2x0aXBUcmlnZ2VyTGlzdCkubWFwKHRvb2x0aXBUcmlnZ2VyRWwgPT4gbmV3IGJvb3RzdHJhcC5Ub29sdGlwKHRvb2x0aXBUcmlnZ2VyRWwpKTsKICAgIC8vIENsaWVudCBJbmZvIChTZXJ2ZXIgSW5mb3JtYXRpb24pCiAgICB2YXIgb2JqID0gU0VSVkVSWyJjbGllbnRJbmZvIl07CiAgICB2YXIga2V5cyA9IGdldE9iaktleXMob2JqKTsKICAgIGNvbnN0IGNoYW5nZVZlcnNpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlVmVyc2lvbiIpOwogICAgY2hhbmdlVmVyc2lvbi52YWx1ZSA9ICJ7ey5zZXJ2ZXJJbmZvLmNoYW5nZVZlcnNpb24uY2hhbmdlVG9CZXRhfX0iOwogICAgY2hhbmdlVmVyc2lvbi5vbmNsaWNrID0gKCkgPT4gewogICAgICAgIGNoYW5nZVZlcnNpb24udmFsdWUgPSAie3suc2VydmVySW5mby5jaGFuZ2VWZXJzaW9uLmNoYW5naW5nfX0iOwogICAgICAgIGNvbnN0IHNlcnZlciA9IG5ldyBTZXJ2ZXIoImNoYW5nZVZlcnNpb24iKTsKICAgICAgICBzZXJ2ZXIucmVxdWVzdChuZXcgT2JqZWN0KCkpOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICB9LCAyMDAwMCk7CiAgICB9OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pLnZhbHVlID0gb2JqW2tleXNbaV1dOwogICAgICAgICAgICBpZiAoa2V5c1tpXSA9PT0gInZlcnNpb24iKSB7CiAgICAgICAgICAgICAgICBpZiAob2JqWyJiZXRhIl0pIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoa2V5c1tpXSk7CiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi52YWx1ZSArPSAiIEJldGEiOwogICAgICAgICAgICAgICAgICAgIGNoYW5nZVZlcnNpb24udmFsdWUgPSAie3suc2VydmVySW5mby5jaGFuZ2VWZXJzaW9uLmNoYW5nZVRvUmVsZWFzZX19IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBvcGVuVGhpc01lbnUoZWxlbWVudCkgewogICAgdmFyIGlkID0gZWxlbWVudC5pZDsKICAgIHZhciBjb250ZW50ID0gbmV3IFNob3dDb250ZW50KGlkKTsKICAgIGNvbnRlbnQuc2hvdygpOwogICAgZW5hYmxlR3JvdXBTZWxlY3Rpb24oIi5idWxrIik7CiAgICByZXR1cm47Cn0KY2xhc3MgUG9wdXBXaW5kb3cgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gInBvcHVwQ3VzdG9tIjsKICAgICAgICB0aGlzLkludGVyYWN0aW9uSUQgPSAiaW50ZXJhY3Rpb24iOwogICAgICAgIHRoaXMuZG9jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5Eb2N1bWVudElEKTsKICAgIH0KICAgIGNyZWF0ZVRpdGxlKHRpdGxlKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICB0ZC5jbGFzc05hbWUgPSAibGVmdCI7CiAgICAgICAgdGQuaW5uZXJIVE1MID0gdGl0bGUgKyAiOiI7CiAgICAgICAgcmV0dXJuIHRkOwogICAgfQogICAgY3JlYXRlQ29udGVudChlbGVtZW50KSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICB0ZC5hcHBlbmRDaGlsZChlbGVtZW50KTsKICAgICAgICByZXR1cm4gdGQ7CiAgICB9CiAgICBjcmVhdGVJbnRlcmFjdGlvbigpIHsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgiaWQiLCAicG9wdXBJbnRlcmFjdGlvbiIpOwogICAgICAgIGRpdi5jbGFzc05hbWUgPSAiaW50ZXJhY3Rpb24iOwogICAgICAgIHRoaXMuZG9jLmFwcGVuZENoaWxkKGRpdik7CiAgICB9Cn0KY2xhc3MgUG9wdXBDb250ZW50IGV4dGVuZHMgUG9wdXBXaW5kb3cgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICB0aGlzLnRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKTsKICAgIH0KICAgIGNyZWF0ZUhlYWRsaW5lKGhlYWRsaW5lKSB7CiAgICAgICAgdGhpcy5kb2MuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIMyIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaGVhZGxpbmUudG9VcHBlckNhc2UoKTsKICAgICAgICB0aGlzLmRvYy5hcHBlbmRDaGlsZChlbGVtZW50KTsKICAgICAgICAvLyBUYWJlbGxlIGVyc3RlbGxlbgogICAgICAgIHRoaXMudGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQUJMRSIpOwogICAgICAgIHRoaXMuZG9jLmFwcGVuZENoaWxkKHRoaXMudGFibGUpOwogICAgfQogICAgYXBwZW5kUm93KHRpdGxlLCBlbGVtZW50KSB7CiAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAvLyBCZXplaWNobnVuZwogICAgICAgIGlmICh0aXRsZS5sZW5ndGggIT0gMCkgewogICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVRpdGxlKHRpdGxlKSk7CiAgICAgICAgfQogICAgICAgIC8vIENvbnRlbnQKICAgICAgICB0ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbnRlbnQoZWxlbWVudCkpOwogICAgICAgIHRoaXMudGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgfQogICAgY3JlYXRlSW5wdXQodHlwZSwgbmFtZSwgdmFsdWUpIHsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgdmFsdWUgPSAiIjsKICAgICAgICB9CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdHlwZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBjcmVhdGVDaGVja2JveChuYW1lLCBpZCA9ICcnKSB7CiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiY2hlY2tib3giKTsKICAgICAgICBpZiAoaWQgIT0gJycpIHsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsIGlkKTsKICAgICAgICB9CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgc2V0LCBkYktleSkgewogICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTRUxFQ1QiKTsKICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgZGJLZXkpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7CiAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWVzW2ldKTsKICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IHRleHRbaV07CiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoc2V0ICE9ICIiKSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9IHNldDsKICAgICAgICB9CiAgICAgICAgaWYgKHNldCA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gdmFsdWVzWzBdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZWN0OwogICAgfQogICAgc2VsZWN0T3B0aW9uKHNlbGVjdCwgdmFsdWUpIHsKICAgICAgICAvL3NlbGVjdC5zZWxlY3RlZE9wdGlvbnMgPSB2YWx1ZQogICAgICAgIHZhciBzID0gc2VsZWN0OwogICAgICAgIHMub3B0aW9uc1tzLnNlbGVjdGVkSW5kZXhdLnZhbHVlID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIHNlbGVjdDsKICAgIH0KICAgIGRlc2NyaXB0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7CiAgICAgICAgc3Bhbi5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb250ZW50KHNwYW4pKTsKICAgICAgICB0aGlzLnRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgIH0KICAgIC8vIEludGVyYWt0aW9uCiAgICBhZGRJbnRlcmFjdGlvbihlbGVtZW50KSB7CiAgICAgICAgdmFyIGludGVyYWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvcHVwSW50ZXJhY3Rpb24iKTsKICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChlbGVtZW50KTsKICAgIH0KfQpmdW5jdGlvbiBvcGVuUG9wVXAoZGF0YVR5cGUsIGVsZW1lbnQpIHsKICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGlkOwogICAgc3dpdGNoIChlbGVtZW50KSB7CiAgICAgICAgY2FzZSB1bmRlZmluZWQ6CiAgICAgICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbERhdGEoImZpbHRlciIsIGlkKTsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgaWYgKGlkID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IC0xOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxEYXRhKCJmaWx0ZXIiLCBpZCk7CiAgICAgICAgICAgICAgICAgICAgZGF0YVsidHlwZSJdID0gImN1c3RvbS1maWx0ZXIiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBkYXRhWyJpZC5wcm92aWRlciJdID0gIi0iOwogICAgICAgICAgICAgICAgICAgIGRhdGFbInR5cGUiXSA9IGRhdGFUeXBlOwogICAgICAgICAgICAgICAgICAgIGlkID0gIi0iOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGlkID0gZWxlbWVudC5pZDsKICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsRGF0YShkYXRhVHlwZSwgaWQpOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHZhciBjb250ZW50ID0gbmV3IFBvcHVwQ29udGVudCgpOwogICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3sucGxheWxpc3QucGxheWxpc3RUeXBlLnRpdGxlfX0iKTsKICAgICAgICAgICAgLy8gVHlwZQogICAgICAgICAgICB2YXIgdGV4dCA9IFsiTTNVIiwgIkhESG9tZVJ1biJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJqYXZhc2NyaXB0OiBvcGVuUG9wVXAoJ20zdScpIiwgImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnaGRocicpIl07CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsICIiLCAidHlwZSIpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJ0eXBlIik7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgJ2phdmFzY3JpcHQ6IGNoYW5nZUJ1dHRvbkFjdGlvbih0aGlzLCAibmV4dCIsICJvbmNsaWNrIiknKTsgLy8gY2hhbmdlQnV0dG9uQWN0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50eXBlLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gV2VpdGVyCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJuZXh0IiwgInt7LmJ1dHRvbi5uZXh0fX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibTN1IiknKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICduZXh0Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtM3UiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gTmFtZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0Lm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZGVzY3JpcHRpb24udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVVJMCiAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWxlLnNvdXJjZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0LmZpbGVNM1UucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZmlsZU0zVS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBUdW5lcgogICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJidWZmZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDA7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uZm9jdXMiLCAiamF2YXNjcmlwdDogcmV0dXJuOyIpOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR1bmVyLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR1bmVyIjsKICAgICAgICAgICAgICAgIGlmIChkYXRhW2RiS2V5XSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBkYXRhW2RiS2V5XSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCAidHJ1ZSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gIm5vdEF2YWlsYWJsZSI7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5wbGF5bGlzdC50dW5lci5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJodHRwX3Byb3h5LmlwIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuaHR0cF9wcm94eV9pcC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X2lwLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfaXAuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiaHR0cF9wcm94eS5wb3J0IjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuaHR0cF9wcm94eV9wb3J0LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfcG9ydC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X3BvcnQuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEzDtnNjaGVuCiAgICAgICAgICAgIGlmIChkYXRhWyJpZC5wcm92aWRlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImRlbGV0ZSIsICJ7ey5idXR0b24uZGVsZXRlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LmNsYXNzTmFtZSA9ICJkZWxldGUiOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoIm0zdSIsICInICsgaWQgKyAnIiwgdHJ1ZSwgMCknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImJhY2siLCAie3suYnV0dG9uLmJhY2t9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgicGxheWxpc3QiKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBBa3R1YWxpc2llcmVuCiAgICAgICAgICAgIGlmIChkYXRhWyJpZC5wcm92aWRlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInVwZGF0ZSIsICJ7ey5idXR0b24udXBkYXRlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJtM3UiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAxKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoIm0zdSIsICInICsgaWQgKyAnIiwgZmFsc2UsIDApJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJoZGhyIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZShkYXRhVHlwZSk7CiAgICAgICAgICAgIC8vIE5hbWUKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIm5hbWUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5uYW1lLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0Lm5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVzY2hyZWlidW5nCiAgICAgICAgICAgIHZhciBkYktleSA9ICJkZXNjcmlwdGlvbiI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0LmRlc2NyaXB0aW9uLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LmRlc2NyaXB0aW9uLnBsYWNlaG9sZGVyfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFVSTAogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZmlsZS5zb3VyY2UiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5maWxlSERIUi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5maWxlSERIUi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBUdW5lcgogICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJidWZmZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDA7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uZm9jdXMiLCAiamF2YXNjcmlwdDogcmV0dXJuOyIpOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR1bmVyLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR1bmVyIjsKICAgICAgICAgICAgICAgIGlmIChkYXRhW2RiS2V5XSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBkYXRhW2RiS2V5XSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCAidHJ1ZSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gIm5vdEF2YWlsYWJsZSI7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5wbGF5bGlzdC50dW5lci5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJodHRwX3Byb3h5LmlwIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuaHR0cF9wcm94eV9pcC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X2lwLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfaXAuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiaHR0cF9wcm94eS5wb3J0IjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuaHR0cF9wcm94eV9wb3J0LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfcG9ydC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X3BvcnQuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEzDtnNjaGVuCiAgICAgICAgICAgIGlmIChkYXRhWyJpZC5wcm92aWRlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImRlbGV0ZSIsICJ7ey5idXR0b24uZGVsZXRlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJoZGhyIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJiYWNrIiwgInt7LmJ1dHRvbi5iYWNrfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInBsYXlsaXN0IiknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiaGRociIsICInICsgaWQgKyAnIiwgZmFsc2UsIDEpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiaGRociIsICInICsgaWQgKyAnIiwgZmFsc2UsIDApJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gVHlwZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAidHlwZSI7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJNM1U6ICIgKyAie3suZmlsdGVyLnR5cGUuZ3JvdXBUaXRsZX19IiwgIlRocmVhZGZpbjogIiArICJ7ey5maWx0ZXIudHlwZS5jdXN0b21GaWx0ZXJ9fSJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJqYXZhc2NyaXB0OiBvcGVuUG9wVXAoJ2dyb3VwLXRpdGxlJykiLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdjdXN0b20tZmlsdGVyJykiXTsKICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnZ3JvdXAtdGl0bGUnKSIsIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgJ2phdmFzY3JpcHQ6IGNoYW5nZUJ1dHRvbkFjdGlvbih0aGlzLCAibmV4dCIsICJvbmNsaWNrIik7Jyk7IC8vIGNoYW5nZUJ1dHRvbkFjdGlvbgogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLnR5cGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBXZWl0ZXIKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgIm5leHQiLCAie3suYnV0dG9uLm5leHR9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJncm91cC10aXRsZSIpJyk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAnbmV4dCcpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5maWx0ZXIuY3VzdG9tfX0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5maWx0ZXIuZ3JvdXB9fSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIE5hbWUgICAgICAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIm5hbWUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmRlc2NyaXB0aW9uLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBUeXAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR5cGUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJoaWRkZW4iLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygiIiwgaW5wdXQpOwogICAgICAgICAgICB2YXIgZmlsdGVyVHlwZSA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgICAgICAgICAgICAgIC8vIEdyb8OfLSBLbGVpbnNjaHJlaWJ1bmcgYmVhY2h0ZW4KICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiY2FzZVNlbnNpdGl2ZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2FzZVNlbnNpdGl2ZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlcnJlZ2VsIChCZW51dHplcmRlZmluaWVydCkKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiZmlsdGVyIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5maWx0ZXJSdWxlLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmZpbHRlclJ1bGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KGRiS2V5ICsgIiAiICsgZmlsdGVyVHlwZSkKICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgYmFzaWVyZW5kIGF1ZiBkZW4gR3J1cHBlbiBpbiBkZXIgTTNVCiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbHRlciI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3Vwc00zVSA9IGdldExvY2FsRGF0YSgibTN1R3JvdXBzIiwgIiIpOwogICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gZ3JvdXBzTTNVWyJ0ZXh0Il07CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGdyb3Vwc00zVVsidmFsdWUiXTsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5maWx0ZXJHcm91cC50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5maWx0ZXIuZmlsdGVyR3JvdXAuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAgICAgICAgIC8vIEdyb8OfLSBLbGVpbnNjaHJlaWJ1bmcgYmVhY2h0ZW4KICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiY2FzZVNlbnNpdGl2ZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2FzZVNlbnNpdGl2ZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJpbmNsdWRlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5pbmNsdWRlLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmluY2x1ZGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5maWx0ZXIuaW5jbHVkZS5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImV4Y2x1ZGUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmV4Y2x1ZGUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuZXhjbHVkZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5leGNsdWRlLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTmFtZSAgICAgIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAic3RhcnRpbmdOdW1iZXIiOwogICAgICAgICAgICBpZiAoZGF0YVtkYktleV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksICIxMDAwIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuc3RhcnRpbmdudW1iZXIucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLnN0YXJ0aW5nbnVtYmVyLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5zdGFydGluZ251bWJlci5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWNhdGVnb3J5IjsKICAgICAgICAgICAgdmFyIHRleHQgPSBbIi0iXTsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiIl07CiAgICAgICAgICAgIHZhciBlcGdDYXRlZ29yaWVzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzIl07CiAgICAgICAgICAgIHZhciBjYXRlZ29yaWVzID0gZXBnQ2F0ZWdvcmllcy5zcGxpdCgifCIpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBjYXQgPSBjYXRlZ29yaWVzW2ldOwogICAgICAgICAgICAgICAgaWYgKGNhdCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjYXRfc3BsaXQgPSBjYXQuc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goY2F0X3NwbGl0WzBdKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChjYXRfc3BsaXRbMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGFbZGJLZXldLCBkYktleSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2F0ZWdvcnkudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImRlbGV0ZSIsICJ7ey5idXR0b24uZGVsZXRlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImZpbHRlciIsICInICsgaWQgKyAnIiwgdHJ1ZSwgMCknKTsKICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJmaWx0ZXIiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAwKScpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gTmFtZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2Lm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sueG1sdHYuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYuZGVzY3JpcHRpb24udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVVJMCiAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWxlLnNvdXJjZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2LmZpbGVYTUxUVi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5maWxlWE1MVFYudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImh0dHBfcHJveHkuaXAiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey54bWx0di5odHRwX3Byb3h5X2lwLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnhtbHR2Lmh0dHBfcHJveHlfaXAudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sueG1sdHYuaHR0cF9wcm94eV9pcC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJodHRwX3Byb3h5LnBvcnQiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey54bWx0di5odHRwX3Byb3h5X3BvcnQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYuaHR0cF9wcm94eV9wb3J0LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnhtbHR2Lmh0dHBfcHJveHlfcG9ydC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoInhtbHR2IiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVyZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAidXBkYXRlIiwgInt7LmJ1dHRvbi51cGRhdGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoInhtbHR2IiwgIicgKyBpZCArICciLCBmYWxzZSwgMSknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJ4bWx0diIsICInICsgaWQgKyAnIiwgZmFsc2UsIDApJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoInt7Lm1haW5NZW51Lml0ZW0udXNlcnN9fSIpOwogICAgICAgICAgICAvLyBCZW51dHplcm5hbWUgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ1c2VybmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnVzZXJzLnVzZXJuYW1lLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLnVzZXJuYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIE5ldWVzIFBhc3N3b3J0IAogICAgICAgICAgICB2YXIgZGJLZXkgPSAicGFzc3dvcmQiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJwYXNzd29yZCIsIGRiS2V5LCAiIik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sudXNlcnMucGFzc3dvcmQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMucGFzc3dvcmQudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVzdMOkdGlndW5nIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAiY29uZmlybSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInBhc3N3b3JkIiwgZGJLZXksICIiKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey51c2Vycy5jb25maXJtLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLmNvbmZpcm0udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIFdFQgogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24ud2ViIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaWYgKGRhdGFbImRlZmF1bHRVc2VyIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHJldHVybiBmYWxzZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy53ZWIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIFBNUwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24ucG1zIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLnBtcy50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgTTNVCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5tM3UiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMubTN1LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlcmVjaHRpZ3VuZyBYTUwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImF1dGhlbnRpY2F0aW9uLnhtbCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy54bWwudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIEFQSQogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24uYXBpIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLmFwaS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEzDtnNjaGVuCiAgICAgICAgICAgIGlmIChkYXRhWyJkZWZhdWx0VXNlciJdICE9IHRydWUgJiYgaWQgIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiJyArIGRhdGFUeXBlICsgJyIsICInICsgaWQgKyAnIiwgdHJ1ZSwgMCknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoIicgKyBkYXRhVHlwZSArICciLCAiJyArIGlkICsgJyIsICJmYWxzZSIpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoInt7Lm1haW5NZW51Lml0ZW0ubWFwcGluZ319Iik7CiAgICAgICAgICAgIGlmIChCVUxLX0VESVQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtY2hhbm5lbHMtc3RhcnQiOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHZhbHVlIHRvIHRoZSBmaXJzdCBzZWxlY3RlZCBjaGFubmVsCiAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBnZXRBbGxTZWxlY3RlZENoYW5uZWxzKCk7CiAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1bY2hhbm5lbHNbMF1dOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFubmVsICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidmFsdWUiLCBjaGFubmVsWyJ4LWNoYW5uZWxJRCJdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogY2hhbmdlQ2hhbm5lbE51bWJlcnMoIicgKyBjaGFubmVscyArICciKTsnKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmNoYW5uZWxHcm91cFN0YXJ0LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWt0aXYgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWFjdGl2ZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGlucHV0LmlkID0gImFjdGl2ZSI7CiAgICAgICAgICAgIC8vaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpCiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdG9nZ2xlQ2hhbm5lbFN0YXR1cygnIiArIGlkICsgIicsIHRoaXMpIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmFjdGl2ZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBLYW5hbG5hbWUgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LW5hbWUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBpZiAoQlVMS19FRElUID09IHRydWUpIHsKICAgICAgICAgICAgICAgIGlucHV0LnN0eWxlLmJvcmRlciA9ICJzb2xpZCAxcHggcmVkIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCAidHJ1ZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmNoYW5uZWxOYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICI8c3BhbiBjbGFzcz0ndGV4dC1kYW5nZXInPiIgKyBkYXRhWyJ0dmctaWQiXSArICI8L3NwYW4+IDxzcGFuIGNsYXNzPSd0ZXh0LXByaW1hcnknPigiICsgZGF0YVsieC1lcGciXSArICIpPC9zcGFuPiI7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZyAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5tYXBwaW5nLmRlc2NyaXB0aW9uLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBBa3R1YWxpc2llcnVuZyBkZXMgS2FuYWxuYW1lbnMKICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoIl91dWlkLmtleSIpKSB7CiAgICAgICAgICAgICAgICBpZiAoZGF0YVsiX3V1aWQua2V5Il0gIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAieC11cGRhdGUtY2hhbm5lbC1uYW1lIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLnVwZGF0ZUNoYW5uZWxOYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTG9nbyBVUkwgKEthbmFsKSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR2Zy1sb2dvIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJjaGFubmVsLWljb24iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbExvZ28udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJ1bmcgZGVzIEthbmFsbG9nb3MKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtdXBkYXRlLWNoYW5uZWwtaWNvbiI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAidXBkYXRlLWljb24iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hhbmdlQ2hhbm5lbExvZ28oJyIgKyBpZCArICInKTsiKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcudXBkYXRlQ2hhbm5lbExvZ28udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gRXJ3ZWl0ZXJuIGRlciBFUEcgS2F0ZWdvcmllCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWNhdGVnb3J5IjsKICAgICAgICAgICAgdmFyIHRleHQgPSBbIi0iXTsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiIl07CiAgICAgICAgICAgIHZhciBlcGdDYXRlZ29yaWVzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzIl07CiAgICAgICAgICAgIHZhciBjYXRlZ29yaWVzID0gZXBnQ2F0ZWdvcmllcy5zcGxpdCgifCIpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBjYXQgPSBjYXRlZ29yaWVzW2ldOwogICAgICAgICAgICAgICAgaWYgKGNhdCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjYXRfc3BsaXQgPSBjYXQuc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goY2F0X3NwbGl0WzBdKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChjYXRfc3BsaXRbMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGFbZGJLZXldLCBkYktleSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmVwZ0NhdGVnb3J5LnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICAvLyBNM1UgR3J1cHBlbnRpdGVsCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWdyb3VwLXRpdGxlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcubTN1R3JvdXBUaXRsZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICBpZiAoZGF0YVsiZ3JvdXAtdGl0bGUiXSAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oZGF0YVsiZ3JvdXAtdGl0bGUiXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gWE1MVFYgRGF0ZWkKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngteG1sdHYtZmlsZSI7CiAgICAgICAgICAgIHZhciB4bWxGaWxlID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIHZhciB4bWx0diA9IG5ldyBYTUxUVkZpbGUoKTsKICAgICAgICAgICAgdmFyIHNlbGVjdCA9IHhtbHR2LmdldEZpbGVzKGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgibmFtZSIsIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiaWQiLCAicG9wdXAteG1sdHYiKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IHNldFhtbHR2Q2hhbm5lbCgnIiArIGlkICsgIicsdGhpcywgJyIgKyBkYXRhWyJ4LW1hcHBpbmciXSArICInKTsiKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcueG1sdHZGaWxlLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICB2YXIgZmlsZSA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAvLyBYTUxUViBNYXBwaW5nCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LW1hcHBpbmciOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdklkQ29udGFpbmVyLCB4bWxUdklkSW5wdXQsIHhtbFR2SWREYXRhbGlzdF0gPSB4bWx0di5uZXdYbWxUdklkUGlja2VyKHhtbEZpbGUsIGN1cnJlbnRYbWxUdklkKTsKICAgICAgICAgICAgeG1sVHZJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXInKTsKICAgICAgICAgICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnbGlzdCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgICAgICAgICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsICd4LW1hcHBpbmcnKTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItaW5wdXQnKTsKICAgICAgICAgICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2lkfScsIHRoaXMsICcke3htbEZpbGV9Jyk7YCk7CiAgICAgICAgICAgIHhtbFR2SWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICAvLyBzb3J0U2VsZWN0KHhtbFR2SWREYXRhbGlzdCk7IC8vIFRPRE86IEJldHRlciBzb3J0IGJlZm9yZSBhZGRpbmcKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coJ3t7Lm1hcHBpbmcueG1sdHZDaGFubmVsLnRpdGxlfX0nLCB4bWxUdklkQ29udGFpbmVyKTsKICAgICAgICAgICAgLy8gRXh0cmEgUFBWIERhdGEKICAgICAgICAgICAgaWYgKGN1cnJlbnRYbWxUdklkID09ICJQUFYiKSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1wcHYtZXh0cmEiOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInBwdi1leHRyYSIpOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcucHB2ZXh0cmEudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1iYWNrdXAtY2hhbm5lbC0xIjsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICBjb25zdCBiYWNrdXAxWG1sVHZJZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb25zdCBbeG1sVHZCYWNrdXAxSWRDb250YWluZXIsIHhtbFR2QmFja3VwMUlkSW5wdXQsIHhtbFR2QmFja3VwMUlkRGF0YWxpc3RdID0geG1sdHYubmV3WG1sVHZJZFBpY2tlcih4bWxGaWxlLCBiYWNrdXAxWG1sVHZJZCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lci0xJyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGRiS2V5KTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZElucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFja3VwLWNoYW5uZWwtMSIpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2lkfScsIHRoaXMsICcke3htbEZpbGV9Jyk7YCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QtYmFja3VwMScpOwogICAgICAgICAgICAvLyBzb3J0U2VsZWN0KHhtbFR2SWREYXRhbGlzdCk7IC8vIFRPRE86IEJldHRlciBzb3J0IGJlZm9yZSBhZGRpbmcKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coJ3t7Lm1hcHBpbmcuYmFja3VwQ2hhbm5lbDEudGl0bGV9fScsIHhtbFR2QmFja3VwMUlkQ29udGFpbmVyKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtYmFja3VwLWNoYW5uZWwtMiI7CiAgICAgICAgICAgIHZhciB4bWx0diA9IG5ldyBYTUxUVkZpbGUoKTsKICAgICAgICAgICAgY29uc3QgYmFja3VwMlhtbFR2SWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29uc3QgW3htbFR2QmFja3VwMklkQ29udGFpbmVyLCB4bWxUdkJhY2t1cDJJZElucHV0LCB4bWxUdkJhY2t1cDJJZERhdGFsaXN0XSA9IHhtbHR2Lm5ld1htbFR2SWRQaWNrZXIoeG1sRmlsZSwgYmFja3VwMlhtbFR2SWQpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXItMicpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgnbGlzdCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYktleSk7IC8vIFNob3VsZCBzdGF5IHgtbWFwcGluZyBhcyBpdCB3aWxsIGJlIHVzZWQgaW4gZG9uZVBvcHVwRGF0YSB0byBtYWtlIGEgc2VydmVyIHJlcXVlc3QKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRJbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgImJhY2t1cC1jaGFubmVsLTIiKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgYGphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGVja1htbHR2Q2hhbm5lbCgnJHtpZH0nLCB0aGlzLCAnJHt4bWxGaWxlfScpO2ApOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0LWJhY2t1cDInKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuYmFja3VwQ2hhbm5lbDIudGl0bGV9fSIsIHhtbFR2QmFja3VwMklkQ29udGFpbmVyKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtYmFja3VwLWNoYW5uZWwtMyI7CiAgICAgICAgICAgIHZhciB4bWx0diA9IG5ldyBYTUxUVkZpbGUoKTsKICAgICAgICAgICAgY29uc3QgYmFja3VwM1htbFR2SWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29uc3QgW3htbFR2QmFja3VwM0lkQ29udGFpbmVyLCB4bWxUdkJhY2t1cDNJZElucHV0LCB4bWxUdkJhY2t1cDNJZERhdGFsaXN0XSA9IHhtbHR2Lm5ld1htbFR2SWRQaWNrZXIoeG1sRmlsZSwgYmFja3VwM1htbFR2SWQpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXItMycpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZElucHV0LnNldEF0dHJpYnV0ZSgnbGlzdCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYktleSk7IC8vIFNob3VsZCBzdGF5IHgtbWFwcGluZyBhcyBpdCB3aWxsIGJlIHVzZWQgaW4gZG9uZVBvcHVwRGF0YSB0byBtYWtlIGEgc2VydmVyIHJlcXVlc3QKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWRJbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgImJhY2t1cC1jaGFubmVsLTMiKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgYGphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGVja1htbHR2Q2hhbm5lbCgnJHtpZH0nLCB0aGlzLCAnJHt4bWxGaWxlfScpO2ApOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0LWJhY2t1cDMnKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuYmFja3VwQ2hhbm5lbDMudGl0bGV9fSIsIHhtbFR2QmFja3VwM0lkQ29udGFpbmVyKTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMb2dvIGhvY2hsYWRlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAidXBsb2FkIiwgInt7LmJ1dHRvbi51cGxvYWRMb2dvfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHVwbG9hZExvZ28oKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gRmVydGlnCiAgICAgICAgICAgIHZhciBpZHMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgaWRzID0gZ2V0QWxsU2VsZWN0ZWRDaGFubmVscygpOwogICAgICAgICAgICBpZiAoaWRzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICBpZHMucHVzaChpZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLmRvbmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogZG9uZVBvcHVwRGF0YSgiJyArIGRhdGFUeXBlICsgJyIsICInICsgaWRzICsgJyIsICJmYWxzZSIpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzaG93RWxlbWVudCgncG9wdXBDdXN0b20nLCB0cnVlKTsKfQpjbGFzcyBYTUxUVkZpbGUgewogICAgZ2V0RmlsZXMoc2V0KSB7CiAgICAgICAgdmFyIGZpbGVJRHMgPSBnZXRPYmpLZXlzKFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdKTsKICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCItIik7CiAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoIi0iKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVJRHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZpbGVJRHNbaV0gIT0gIlRocmVhZGZpbiBEdW1teSIpIHsKICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShmaWxlSURzW2ldLCAieG1sdHYiLCAiZmlsZS50aHJlYWRmaW4iKSk7CiAgICAgICAgICAgICAgICB0ZXh0LnB1c2goZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGZpbGVJRHNbaV0sICJ4bWx0diIsICJuYW1lIikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goZmlsZUlEc1tpXSk7CiAgICAgICAgICAgICAgICB0ZXh0LnB1c2goZmlsZUlEc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNFTEVDVCIpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7CiAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWVzW2ldKTsKICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IHRleHRbaV07CiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoc2V0ICE9ICIiKSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9IHNldDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGVjdDsKICAgIH0KICAgIC8qKgogICAqIEBwYXJhbSB4bWxUdkZpbGUgWE1MIGZpbGUgcGF0aCB0byBnZXQgRVBHIGZyb20uCiAgICogQHBhcmFtIGN1cnJlbnRYbWxUdklkIEN1cnJlbnQgWE1MVFYgSUQgdG8gc2V0IGluaXRpYWwgaW5wdXQgdmFsdWUgdG8uCiAgICogQHJldHVybnMgQXJyYXkgb2YsIHNlcXVlbnRpYWxseToKICAgKiAxKSBDb250YWluZXIgb2YgdGhlIHBpY2tlci4KICAgKiAyKSBJbnB1dCBmaWVsZCB0byB0eXBlIGF0IGFuZCBnZXQgY2hvaWNlIGZyb20uCiAgICogMykgRGF0YWxpc3QgY29udGFpbmluZyBldmVyeSBvcHRpb24uCiAgICovCiAgICBuZXdYbWxUdklkUGlja2VyKHhtbFR2RmlsZSwgY3VycmVudFhtbFR2SWQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQnKTsKICAgICAgICAvLyBJbml0aWFsbHksIHNldCB2YWx1ZSB0byAnLScgaWYgaW5wdXQgaXMgZW1wdHkKICAgICAgICBpbnB1dC52YWx1ZSA9IChjdXJyZW50WG1sVHZJZCkgPyBjdXJyZW50WG1sVHZJZCA6ICctJzsKICAgICAgICAvLyBXaGVuIGlucHV0IGlzIGZvY3VzZWQsIHJlbW92ZSAnLScgZnJvbSBpdAogICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2dCkgPT4gewogICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0OwogICAgICAgICAgICB0YXJnZXQudmFsdWUgPSAodGFyZ2V0LnZhbHVlID09PSAnLScpID8gJycgOiB0YXJnZXQudmFsdWU7CiAgICAgICAgfSk7CiAgICAgICAgLy8gV2hlbiBpbnB1dCBsb3NlIGZvY3VzIG9yIHRha2UgYSB2YWx1ZSwgaWYgaXQncyBlbXB0eSwgc2V0IHZhbHVlIHRvICctJwogICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBzZXRGYWxsYmFja1ZhbHVlKTsKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZXRGYWxsYmFja1ZhbHVlKTsKICAgICAgICBmdW5jdGlvbiBzZXRGYWxsYmFja1ZhbHVlKGV2dCkgewogICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0OwogICAgICAgICAgICB0YXJnZXQudmFsdWUgPSAodGFyZ2V0LnZhbHVlKSA/IHRhcmdldC52YWx1ZSA6ICctJzsKICAgICAgICB9CiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICBjb25zdCBkYXRhbGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RhdGFsaXN0Jyk7CiAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnLScpOwogICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSAnLSc7CiAgICAgICAgZGF0YWxpc3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICBjb25zdCBlcGcgPSBTRVJWRVJbJ3hlcGcnXVsneG1sdHZNYXAnXVt4bWxUdkZpbGVdOwogICAgICAgIGlmIChlcGcpIHsKICAgICAgICAgICAgY29uc3QgcHJvZ3JhbUlkcyA9IGdldE93bk9ialByb3BzKGVwZyk7CiAgICAgICAgICAgIHByb2dyYW1JZHMuZm9yRWFjaCgocHJvZ3JhbUlkKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmFtID0gZXBnW3Byb2dyYW1JZF07CiAgICAgICAgICAgICAgICBpZiAocHJvZ3JhbS5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheS1uYW1lJykpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIHByb2dyYW1JZCk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IHByb2dyYW1bImRpc3BsYXktbmFtZSJdOwogICAgICAgICAgICAgICAgICAgIGRhdGFsaXN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIHByb2dyYW1JZCk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9ICctJzsKICAgICAgICAgICAgICAgICAgICBkYXRhbGlzdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRhdGFsaXN0KTsKICAgICAgICByZXR1cm4gW2NvbnRhaW5lciwgaW5wdXQsIGRhdGFsaXN0XTsKICAgIH0KICAgIGdldFByb2dyYW1zKGZpbGUsIHNldCwgYWN0aXZlKSB7CiAgICAgICAgLy92YXIgZmlsZUlEczpzdHJpbmdbXSA9IGdldE9iaktleXMoU0VSVkVSWyJ4ZXBnIl1bInhtbHR2TWFwIl0pCiAgICAgICAgdmFyIHZhbHVlcyA9IGdldE9iaktleXMoU0VSVkVSWyJ4ZXBnIl1bInhtbHR2TWFwIl1bZmlsZV0pOwogICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCk7CiAgICAgICAgdmFyIGRpc3BsYXlOYW1lOwogICAgICAgIHZhciBhY3RpdmVzID0gZ2V0T2JqS2V5cyhTRVJWRVJbImRhdGEiXVsiU3RyZWFtUHJldmlld1VJIl1bImFjdGl2ZVN0cmVhbXMiXSk7CiAgICAgICAgdmFyIGFjdGl2ZV9saXN0ID0gbmV3IEFycmF5KCk7CiAgICAgICAgaWYgKGFjdGl2ZSA9PSB0cnVlKSB7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIG5hbWVzX3NwbGl0ID0gU0VSVkVSWyJkYXRhIl1bIlN0cmVhbVByZXZpZXdVSSJdWyJhY3RpdmVTdHJlYW1zIl1bYWN0aXZlc1tpXV0uc3BsaXQoIlsiKTsKICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gbmFtZXNfc3BsaXRbMF0udHJpbSgpOwogICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlOYW1lICE9ICIiKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHsgInZhbHVlIjogZGlzcGxheU5hbWUsICJkaXNwbGF5IjogZGlzcGxheU5hbWUgfTsKICAgICAgICAgICAgICAgICAgICBhY3RpdmVfbGlzdC5wdXNoKG9iamVjdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJ4ZXBnIl1bInhtbHR2TWFwIl1bZmlsZV1bdmFsdWVzW2ldXS5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheS1uYW1lJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gU0VSVkVSWyJ4ZXBnIl1bInhtbHR2TWFwIl1bZmlsZV1bdmFsdWVzW2ldXVsiZGlzcGxheS1uYW1lIl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZSA9ICItIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRleHRbaV0gPSBkaXNwbGF5TmFtZSArICIgKCIgKyB2YWx1ZXNbaV0gKyAiKSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGV4dC51bnNoaWZ0KCItIik7CiAgICAgICAgdmFsdWVzLnVuc2hpZnQoIi0iKTsKICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIik7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTsKICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZXNbaV0pOwogICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gdGV4dFtpXTsKICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlX2xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIGFjdGl2ZV9saXN0W2ldWyJ2YWx1ZSJdKTsKICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFjdGl2ZV9saXN0W2ldWyJkaXNwbGF5Il07CiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoc2V0ICE9ICIiKSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9IHNldDsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGVjdC52YWx1ZSAhPSBzZXQpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gIi0iOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZWN0OwogICAgfQp9CmZ1bmN0aW9uIGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShmaWxlLCBmaWxlVHlwZSwga2V5KSB7CiAgICBpZiAoZmlsZSA9PSAiVGhyZWFkZmluIER1bW15IikgewogICAgICAgIHJldHVybiBmaWxlOwogICAgfQogICAgdmFyIGZpbGVJRDsKICAgIHZhciBpbmRpY2F0b3IgPSBmaWxlLmNoYXJBdCgwKTsKICAgIHN3aXRjaCAoaW5kaWNhdG9yKSB7CiAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICAgIGZpbGVUeXBlID0gIm0zdSI7CiAgICAgICAgICAgIGZpbGVJRCA9IGZpbGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICBmaWxlVHlwZSA9ICJoZGhyIjsKICAgICAgICAgICAgZmlsZUlEID0gZmlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiWCI6CiAgICAgICAgICAgIGZpbGVUeXBlID0gInhtbHR2IjsKICAgICAgICAgICAgZmlsZUlEID0gZmlsZS5zdWJzdHJpbmcoMCwgZmlsZS5sYXN0SW5kZXhPZignLicpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXS5oYXNPd25Qcm9wZXJ0eShmaWxlSUQpID09IHRydWUpIHsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtmaWxlVHlwZV1bZmlsZUlEXTsKICAgICAgICByZXR1cm4gZGF0YVtrZXldOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHNldFhtbHR2Q2hhbm5lbChlcGdNYXBJZCwgeG1sVHZGaWxlU2VsZWN0KSB7CiAgICBjb25zdCB4bWxUdiA9IG5ldyBYTUxUVkZpbGUoKTsKICAgIGNvbnN0IG5ld1htbFR2RmlsZSA9IHhtbFR2RmlsZVNlbGVjdC52YWx1ZTsKICAgIC8vIFJlbW92ZSBvbGQgWE1MVFYgSUQgc2VsZWN0aW9uIGJveAogICAgY29uc3QgeG1sVHZJZFBpY2tlclBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd4bWx0di1pZC1waWNrZXItY29udGFpbmVyJykucGFyZW50RWxlbWVudDsKICAgIHhtbFR2SWRQaWNrZXJQYXJlbnQuaW5uZXJIVE1MID0gJyc7CiAgICAvLyBDcmVhdGUgbmV3IFhNTFRWIElEIHNlbGVjdGlvbiBib3gKICAgIGNvbnN0IHR2Z0lkID0gU0VSVkVSWyd4ZXBnJ11bJ2VwZ01hcHBpbmcnXVtlcGdNYXBJZF1bJ3R2Zy1pZCddOwogICAgY29uc3QgW3htbFR2SWRDb250YWluZXIsIHhtbFR2SWRJbnB1dCwgeG1sVHZJZERhdGFsaXN0XSA9IHhtbFR2Lm5ld1htbFR2SWRQaWNrZXIobmV3WG1sVHZGaWxlLCB0dmdJZCk7CiAgICB4bWxUdklkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lcicpOwogICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnbGlzdCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAneC1tYXBwaW5nJyk7IC8vIFNob3VsZCBzdGF5IHgtbWFwcGluZyBhcyBpdCB3aWxsIGJlIHVzZWQgaW4gZG9uZVBvcHVwRGF0YSB0byBtYWtlIGEgc2VydmVyIHJlcXVlc3QKICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1pbnB1dCcpOwogICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2VwZ01hcElkfScsIHRoaXMudmFsdWUsICcke25ld1htbFR2RmlsZX0nKTtgKTsKICAgIHhtbFR2SWRJbnB1dC5jbGFzc0xpc3QuYWRkKCdjaGFuZ2VkJyk7CiAgICB4bWxUdklkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgIC8vIEFkZCBuZXcgWE1MVFYgSUQgc2VsZWN0aW9uIGJveCB0byBpdCdzIHBhcmVudAogICAgeG1sVHZJZFBpY2tlclBhcmVudC5hcHBlbmRDaGlsZCh4bWxUdklkQ29udGFpbmVyKTsKICAgIGNoZWNrWG1sdHZDaGFubmVsKGVwZ01hcElkLCB4bWxUdklkSW5wdXQudmFsdWUsIG5ld1htbFR2RmlsZSk7Cn0KZnVuY3Rpb24gY2hlY2tQUFYodGl0bGUsIGVsZW1lbnQpIHsKICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7CiAgICBjb25zb2xlLmxvZygiRFVNTVkgVFlQRTogIiArIHZhbHVlKTsKICAgIGlmICh2YWx1ZSA9PSAiUFBWIikgewogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4LXBwdi1leHRyYSIpLnBhcmVudEVsZW1lbnQ7CiAgICAgICAgdGQuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdmFyIGRiS2V5ID0gIngtcHB2LWV4dHJhIjsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0Iik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgZGJLZXkpOwogICAgICAgIC8vIGlucHV0LnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZSkKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJwcHYtZXh0cmEiKTsKICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIC8vIEJlemVpY2hudW5nCiAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgIHRkLmNsYXNzTmFtZSA9ICJsZWZ0IjsKICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gdGl0bGUgKyAiOiI7CiAgICAgICAgfQogICAgICAgIC8vIENvbnRlbnQKICAgICAgICB0ZC5hcHBlbmRDaGlsZChlbGVtZW50KTsKICAgICAgICB0aGlzLnRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgIH0KfQpmdW5jdGlvbiBjaGVja1htbHR2Q2hhbm5lbChpZCwgZWxlbWVudCwgeG1sRmlsZSkgewogICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTsKICAgIHZhciBib29sOwogICAgdmFyIGNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGl2ZScpOwogICAgdmFyIGNoYW5uZWwgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdW2lkXTsKICAgIHZhciB1cGRhdGVMb2dvOwogICAgaWYgKHZhbHVlID09ICItIikgewogICAgICAgIGJvb2wgPSBmYWxzZTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGJvb2wgPSB0cnVlOwogICAgfQogICAgY2hlY2tib3guY2hlY2tlZCA9IGJvb2w7CiAgICBjaGVja2JveC5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICBjb25zb2xlLmxvZyh4bWxGaWxlKTsKICAgIC8vIEthbmFsbG9nbyBha3R1YWxpc2llcmVuCiAgICAvKgogICAgdXBkYXRlTG9nbyA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXBkYXRlLWljb24iKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkCiAgICBjb25zb2xlLmxvZyh1cGRhdGVMb2dvKTsKICAgICovCiAgICBpZiAoeG1sRmlsZSAhPSAiVGhyZWFkZmluIER1bW15IiAmJiBib29sID09IHRydWUpIHsKICAgICAgICAvLyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXBkYXRlLWljb24iKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAvLyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXBkYXRlLWljb24iKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICAgICAgY29uc29sZS5sb2coIklEIiwgaWQpOwogICAgICAgIGNoYW5nZUNoYW5uZWxMb2dvKGlkKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoeG1sRmlsZSA9PSAiVGhyZWFkZmluIER1bW15IikgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXBkYXRlLWljb24iKS5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gY2hhbmdlQ2hhbm5lbExvZ28oZXBnTWFwSWQpIHsKICAgIGNvbnN0IGNoYW5uZWwgPSBTRVJWRVJbJ3hlcGcnXVsnZXBnTWFwcGluZyddW2VwZ01hcElkXTsKICAgIGNvbnN0IHhtbFR2RmlsZVNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3B1cC14bWx0dicpOwogICAgY29uc3QgeG1sVHZGaWxlID0geG1sVHZGaWxlU2VsZWN0Lm9wdGlvbnNbeG1sVHZGaWxlU2VsZWN0LnNlbGVjdGVkSW5kZXhdLnZhbHVlOwogICAgY29uc3QgeG1sVHZJZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3htbHR2LWlkLXBpY2tlci1pbnB1dCcpOwogICAgY29uc3QgbmV3WG1sVHZJZCA9IHhtbFR2SWRJbnB1dC52YWx1ZTsKICAgIGNvbnN0IHVwZGF0ZUxvZ28gPSAhQlVMS19FRElUIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGRhdGUtaWNvbicpLmNoZWNrZWQ7CiAgICBsZXQgbG9nbzsKICAgIGlmICh1cGRhdGVMb2dvID09IHRydWUgJiYgeG1sVHZGaWxlICE9ICdUaHJlYWRmaW4gRHVtbXknKSB7CiAgICAgICAgaWYgKFNFUlZFUlsneGVwZyddWyd4bWx0dk1hcCddW3htbFR2RmlsZV0uaGFzT3duUHJvcGVydHkobmV3WG1sVHZJZCkpIHsKICAgICAgICAgICAgbG9nbyA9IFNFUlZFUlsneGVwZyddWyd4bWx0dk1hcCddW3htbFR2RmlsZV1bbmV3WG1sVHZJZF1bJ2ljb24nXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGxvZ28gPSBjaGFubmVsWyd0dmctbG9nbyddOwogICAgICAgIH0KICAgIH0KfQpmdW5jdGlvbiBzYXZlUG9wdXBEYXRhKGRhdGFUeXBlLCBpZCwgcmVtb3ZlLCBvcHRpb24pIHsKICAgIHNob3dFbGVtZW50KCdwb3B1cCcsIGZhbHNlKTsKICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSk7CiAgICBpZiAoZGF0YVR5cGUgPT0gIm1hcHBpbmciKSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgY29uc29sZS5sb2coIlNhdmUgbWFwcGluZyBkYXRhIik7CiAgICAgICAgY21kID0gInNhdmVFcGdNYXBwaW5nIjsKICAgICAgICBkYXRhWyJlcGdNYXBwaW5nIl0gPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgICAgIGNvbnNvbGUubG9nKCJTRU5EIFRPIFNFUlZFUiIpOwogICAgICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICAgICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICAgICAgZGVsZXRlIFVORE9bImVwZ01hcHBpbmciXTsKICAgICAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBjb25zb2xlLmxvZygiU2F2ZSBwb3B1cCBkYXRhIik7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvcHVwQ3VzdG9tIik7CiAgICB2YXIgaW5wdXRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQUJMRSIpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwogICAgdmFyIHNlbGVjdHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRBQkxFIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlNFTEVDVCIpOwogICAgdmFyIGlucHV0ID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGNvbmZpcm1Nc2c7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgbmFtZTsKICAgICAgICBuYW1lID0gc2VsZWN0c1tpXS5uYW1lOwogICAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdHNbaV0udmFsdWU7CiAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgIGNhc2UgInR1bmVyIjoKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBzd2l0Y2ggKGlucHV0c1tpXS50eXBlKSB7CiAgICAgICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gaW5wdXRzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgIGNhc2UgImhpZGRlbiI6CiAgICAgICAgICAgIGNhc2UgInBhc3N3b3JkIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgInR1bmVyIjoKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBwYXJzZUludChpbnB1dHNbaV0udmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBjbWQ7CiAgICBpZiAocmVtb3ZlID09IHRydWUpIHsKICAgICAgICBpbnB1dFsiZGVsZXRlIl0gPSB0cnVlOwogICAgfQogICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyB1c2VyPyI7CiAgICAgICAgICAgIGlmIChpZCA9PSAiLSIpIHsKICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlTmV3VXNlciI7CiAgICAgICAgICAgICAgICBkYXRhWyJ1c2VyRGF0YSJdID0gaW5wdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZVVzZXJEYXRhIjsKICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgZFtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgICAgIGRhdGFbInVzZXJEYXRhIl0gPSBkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGNvbmZpcm1Nc2cgPSAiRGVsZXRlIHRoaXMgcGxheWxpc3Q/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc00zVSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVNM1UiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdW2lkXSA9IGlucHV0OwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJoZGhyIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBIREhvbWVSdW4gdHVuZXI/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc0hESFIiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFVwZGF0ZQogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGNtZCA9ICJ1cGRhdGVGaWxlSERIUiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBYTUxUViBmaWxlPyI7CiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKSB7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogU2F2ZQogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlRmlsZXNYTUxUViI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVYTUxUViI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgIGNvbmZpcm1Nc2cgPSAiRGVsZXRlIHRoaXMgZmlsdGVyPyI7CiAgICAgICAgICAgIGNtZCA9ICJzYXZlRmlsdGVyIjsKICAgICAgICAgICAgZGF0YVsiZmlsdGVyIl0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWx0ZXIiXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YVR5cGUsIGlkKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChyZW1vdmUgPT0gdHJ1ZSkgewogICAgICAgIGlmICghY29uZmlybShjb25maXJtTXNnKSkgewogICAgICAgICAgICBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBjb25zb2xlLmxvZygiU0VORCBUTyBTRVJWRVIiKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSk7Cn0KZnVuY3Rpb24gZG9uZVBvcHVwRGF0YShkYXRhVHlwZSwgaWRzU3RyKSB7CiAgICB2YXIgaWRzID0gaWRzU3RyLnNwbGl0KCcsJyk7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvcHVwQ3VzdG9tIik7CiAgICB2YXIgaW5wdXRzID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImNoYW5nZWQiKTsKICAgIGlkcy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgaW5wdXQgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgaW5wdXQgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdW2lkXTsKICAgICAgICBjb25zb2xlLmxvZygiSU5QVVQ6ICIgKyBpbnB1dCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgICAgIHZhciB2YWx1ZTsKICAgICAgICAgICAgc3dpdGNoIChpbnB1dHNbaV0udGFnTmFtZSkgewogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVQiOgogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0uY2hlY2tlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gaW5wdXRzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgY2FzZSAidHZnLWxvZ28iOgogICAgICAgICAgICAgICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzJdLmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLnNldEF0dHJpYnV0ZSgic3JjIiwgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWNoYW5uZWwtc3RhcnQiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzNdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LW5hbWUiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzNdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWNhdGVnb3J5IjoKICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSAid2hpdGUiOwogICAgICAgICAgICAgICAgICAgIHZhciBjYXRDb2xvclNldHRpbmdzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzQ29sb3JzIl07CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yc19zcGxpdCA9IGNhdENvbG9yU2V0dGluZ3Muc3BsaXQoInwiKTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JzX3NwbGl0Lmxlbmd0aDsgaWkrKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0c0NvbG9yX3NwbGl0ID0gY29sb3JzX3NwbGl0W2lpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0c0NvbG9yX3NwbGl0WzBdID09IHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNhdHNDb2xvcl9zcGxpdFsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1szXS5maXJzdENoaWxkLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s1XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC14bWx0di1maWxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gIlRocmVhZGZpbiBEdW1teSIgJiYgdmFsdWUgIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKHZhbHVlLCAieG1sdHYiLCAibmFtZSIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0WyJ4LWFjdGl2ZSJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzZdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LW1hcHBpbmciOgogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbIngtYWN0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbN10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtYmFja3VwLWNoYW5uZWwiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzddLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWhpZGUtY2hhbm5lbCI6CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbN10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3JlYXRlU2VhcmNoT2JqKCk7CiAgICAgICAgICAgIHNlYXJjaEluTWFwcGluZygpOwogICAgICAgIH0KICAgICAgICBpZiAoaW5wdXRbIngtYWN0aXZlIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJub3RBY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBjb25zb2xlLmxvZyhpbnB1dFsidHZnLWxvZ28iXSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbMl0uZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInNyYyIsIGlucHV0WyJ0dmctbG9nbyJdKTsKICAgIH0pOwogICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHNob3dQcmV2aWV3KGVsZW1lbnQpIHsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlTdHJlYW1zQm94Iik7CiAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICBkaXYuY2xhc3NOYW1lID0gIm5vdFZpc2libGUiOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgdmFyIHN0cmVhbXMgPSBbImFjdGl2ZVN0cmVhbXMiLCAiaW5hY3RpdmVTdHJlYW1zIl07CiAgICBzdHJlYW1zLmZvckVhY2gocHJldmlldyA9PiB7CiAgICAgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJldmlldyk7CiAgICAgICAgdGFibGUuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdmFyIG9iaiA9IFNFUlZFUlsiZGF0YSJdWyJTdHJlYW1QcmV2aWV3VUkiXVtwcmV2aWV3XTsKICAgICAgICB2YXIgY2FwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkNBUFRJT04iKTsKICAgICAgICB2YXIgcmVzdWx0ID0gcHJldmlldy5yZXBsYWNlKC8oW0EtWl0pL2csICIgJDEiKTsKICAgICAgICB2YXIgZmluYWxSZXN1bHQgPSByZXN1bHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN1bHQuc2xpY2UoMSk7CiAgICAgICAgY2FwdGlvbi5pbm5lckhUTUwgPSBmaW5hbFJlc3VsdDsKICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChjYXB0aW9uKTsKICAgICAgICB2YXIgdGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQk9EWSIpOwogICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRib2R5KTsKICAgICAgICBvYmouc2xpY2UoMCwgMTAwMCkuZm9yRWFjaChjaGFubmVsID0+IHsKICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgdmFyIHRkS2V5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdmFyIHRkVmFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdGRLZXkuY2xhc3NOYW1lID0gInRkS2V5IjsKICAgICAgICAgICAgdGRWYWwuY2xhc3NOYW1lID0gInRkVmFsIjsKICAgICAgICAgICAgc3dpdGNoIChwcmV2aWV3KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhY3RpdmVTdHJlYW1zIjoKICAgICAgICAgICAgICAgICAgICB0ZEtleS5pbm5lclRleHQgPSAiQ2hhbm5lbDogKCspIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImluYWN0aXZlU3RyZWFtcyI6CiAgICAgICAgICAgICAgICAgICAgdGRLZXkuaW5uZXJUZXh0ID0gIkNoYW5uZWw6ICgtKSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGRWYWwuaW5uZXJUZXh0ID0gY2hhbm5lbDsKICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRLZXkpOwogICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZFZhbCk7CiAgICAgICAgICAgIHRib2R5LmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgIH0pOwogICAgfSk7CiAgICAvLyBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKQogICAgZGl2LmNsYXNzTmFtZSA9ICJ2aXNpYmxlIjsKICAgIHJldHVybjsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1tZW51LmpzLm1hcA==" - webUI["web/public/js/menu.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy9tZW51LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE1BQU0sUUFBUTtJQUFkO1FBQ0UsZUFBVSxHQUFXLFdBQVcsQ0FBQTtRQUNoQyxZQUFPLEdBQVcsSUFBSSxDQUFBO1FBQ3RCLGNBQVMsR0FBVyxNQUFNLENBQUE7SUFjNUIsQ0FBQztJQVpDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRztRQUNoQixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDakQsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDaEMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFlBQWEsU0FBUSxRQUFRO0lBUWpDLFlBQVksT0FBZSxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsUUFBZ0I7UUFDekUsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUMxQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFh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Q0FBQTt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDN0MsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTt3QkFFakMsSUFBSSxJQUFJLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQTt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTt3QkFDbEQsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTt3QkFFakMsSUFBSSxJQUFJLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQTt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQTt3QkFDdEQsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTt3QkFFakMsSUFBSSxJQUFJLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQTt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFl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" + webUI["web/public/js/menu.js"] = "dmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0KICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH0KICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9CiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH0KICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7CiAgICB9KTsKfTsKY2xhc3MgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gIm1haW4tbWVudSI7CiAgICAgICAgdGhpcy5IVE1MVGFnID0gIkxJIjsKICAgICAgICB0aGlzLkltYWdlUGF0aCA9ICJpbWcvIjsKICAgIH0KICAgIGNyZWF0ZUlNRyhzcmMsIGFsdCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU1HIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInNyYyIsIHRoaXMuSW1hZ2VQYXRoICsgc3JjKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiYWx0IiwgYWx0KTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVZhbHVlKHZhbHVlKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7CiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KfQpjbGFzcyBNYWluTWVudUl0ZW0gZXh0ZW5kcyBNYWluTWVudSB7CiAgICBjb25zdHJ1Y3RvcihtZW51S2V5LCB2YWx1ZSwgaW1hZ2UsIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLm1lbnVLZXkgPSBtZW51S2V5OwogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAgICB0aGlzLmltZ1NyYyA9IGltYWdlOwogICAgICAgIHRoaXMuaGVhZGxpbmUgPSBoZWFkbGluZTsKICAgIH0KICAgIGNyZWF0ZUl0ZW0oKSB7CiAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJMSSIpOwogICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IG9wZW5UaGlzTWVudSh0aGlzKSIpOwogICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCJpZCIsIHRoaXMuaWQpOwogICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJuYXYtaXRlbSIpOwogICAgICAgIHZhciBpbWcgPSB0aGlzLmNyZWF0ZUlNRyh0aGlzLmltZ1NyYywgdGhpcy52YWx1ZSk7CiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5jcmVhdGVWYWx1ZSh0aGlzLnZhbHVlKTsKICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGltZyk7CiAgICAgICAgaXRlbS5hcHBlbmRDaGlsZCh2YWx1ZSk7CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgICAgIHN3aXRjaCAodGhpcy5tZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgICAgIHRoaXMudGFibGVIZWFkZXIgPSBbInt7LnBsYXlsaXN0LnRhYmxlLnBsYXlsaXN0fX0iLCAie3sucGxheWxpc3QudGFibGUudHVuZXJ9fSIsICJ7ey5wbGF5bGlzdC50YWJsZS5sYXN0VXBkYXRlfX0iLCAie3sucGxheWxpc3QudGFibGUuYXZhaWxhYmlsaXR5fX0gJSIsICJ7ey5wbGF5bGlzdC50YWJsZS50eXBlfX0iLCAie3sucGxheWxpc3QudGFibGUuc3RyZWFtc319IiwgInt7LnBsYXlsaXN0LnRhYmxlLmdyb3VwVGl0bGV9fSAlIiwgInt7LnBsYXlsaXN0LnRhYmxlLnR2Z0lEfX0gJSIsICJ7ey5wbGF5bGlzdC50YWJsZS51bmlxdWVJRH19ICUiXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJ7ey54bWx0di50YWJsZS5ndWlkZX19IiwgInt7LnhtbHR2LnRhYmxlLmxhc3RVcGRhdGV9fSIsICJ7ey54bWx0di50YWJsZS5hdmFpbGFiaWxpdHl9fSAlIiwgInt7LnhtbHR2LnRhYmxlLmNoYW5uZWxzfX0iLCAie3sueG1sdHYudGFibGUucHJvZ3JhbXN9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJ7ey5maWx0ZXIudGFibGUubmFtZX19IiwgInt7LmZpbHRlci50YWJsZS50eXBlfX0iLCAie3suZmlsdGVyLnRhYmxlLmZpbHRlcn19Il07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3sudXNlcnMudGFibGUudXNlcm5hbWV9fSIsICJ7ey51c2Vycy50YWJsZS5wYXNzd29yZH19IiwgInt7LnVzZXJzLnRhYmxlLndlYn19IiwgInt7LnVzZXJzLnRhYmxlLnBtc319IiwgInt7LnVzZXJzLnRhYmxlLm0zdX19IiwgInt7LnVzZXJzLnRhYmxlLnhtbH19IiwgInt7LnVzZXJzLnRhYmxlLmFwaX19Il07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJCVUxLIiwgInt7Lm1hcHBpbmcudGFibGUuY2hOb319IiwgInt7Lm1hcHBpbmcudGFibGUubG9nb319IiwgInt7Lm1hcHBpbmcudGFibGUuY2hhbm5lbE5hbWV9fSIsICJ7ey5tYXBwaW5nLnRhYmxlLnBsYXlsaXN0fX0iLCAie3subWFwcGluZy50YWJsZS5ncm91cFRpdGxlfX0iLCAie3subWFwcGluZy50YWJsZS54bWx0dkZpbGV9fSIsICJ7ey5tYXBwaW5nLnRhYmxlLnhtbHR2SUR9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CmNsYXNzIENvbnRlbnQgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgICAgIHRoaXMuSGVhZGVySUQgPSAicG9wdXBIZWFkZXIiOwogICAgICAgIHRoaXMuVGFibGVJRCA9ICJjb250ZW50VGFibGUiOwogICAgICAgIHRoaXMuSW5hY3RpdmVUYWJsZUlEID0gImluYWN0aXZlQ29udGVudFRhYmxlIjsKICAgICAgICB0aGlzLmhlYWRlckNsYXNzID0gImNvbnRlbnRUYWJsZUhlYWRlciI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzc0luYWN0aXZlID0gImluYWN0aXZlQ29udGVudFRhYmxlSGVhZGVyIjsKICAgICAgICB0aGlzLmludGVyYWN0aW9uSUQgPSAiY29udGVudC1pbnRlcmFjdGlvbiI7CiAgICB9CiAgICBjcmVhdGVIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDMiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSFIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlQlIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmludGVyYWN0aW9uSUQpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlRElWKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuRGl2SUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVUQUJMRSgpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2NvbnRlbnRUYWJsZScpOwogICAgICAgIGVsZW1lbnQuaWQgPSB0aGlzLlRhYmxlSUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVUYWJsZVJvdygpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLmhlYWRlckNsYXNzOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSW5hY3RpdmVUQUJMRSgpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuSW5hY3RpdmVUYWJsZUlEOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSW5hY3RpdmVUYWJsZVJvdygpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLmhlYWRlckNsYXNzSW5hY3RpdmU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVUYWJsZUNvbnRlbnQobWVudUtleSkgewogICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgIHZhciByb3dzID0gbmV3IEFycmF5KCk7CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgICAgIHZhciBmaWxlVHlwZXMgPSBuZXcgQXJyYXkoIm0zdSIsICJoZGhyIik7CiAgICAgICAgICAgICAgICBmaWxlVHlwZXMuZm9yRWFjaChmaWxlVHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtmaWxlVHlwZV07CiAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKGRhdGEpOwogICAgICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiJyArIGZpbGVUeXBlICsgJyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJuYW1lIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImJ1ZmZlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsidHVuZXIiXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsibGFzdC51cGRhdGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsicHJvdmlkZXIuYXZhaWxhYmlsaXR5Il07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bInR5cGUiXS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bInN0cmVhbXMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiY29tcGF0aWJpbGl0eSJdWyJncm91cC50aXRsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bInR2Zy5pZCJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bInN0cmVhbS5pZCJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0cik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgZGVsZXRlIFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsdGVyIl1bLTFdOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsdGVyIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgIHRyLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIicgKyBkYXRhW2tleV1bInR5cGUiXSArICciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJuYW1lIl07CiAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGFba2V5XVsidHlwZSJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICJ7ey5maWx0ZXIuY3VzdG9tfX0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAie3suZmlsdGVyLmdyb3VwfX0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJmaWx0ZXIiXTsKICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgICAgIHZhciBmaWxlVHlwZXMgPSBuZXcgQXJyYXkoInhtbHR2Iik7CiAgICAgICAgICAgICAgICBmaWxlVHlwZXMuZm9yRWFjaChmaWxlVHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtmaWxlVHlwZV07CiAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKGRhdGEpOwogICAgICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiJyArIGZpbGVUeXBlICsgJyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJuYW1lIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImxhc3QudXBkYXRlIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bInByb3ZpZGVyLmF2YWlsYWJpbGl0eSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bInhtbHR2LmNoYW5uZWxzIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsieG1sdHYucHJvZ3JhbXMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgidXNlcnMiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImRhdGEiXVsidXNlcm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICIqKioqKioiOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsiZGF0YSJdWyJhdXRoZW50aWNhdGlvbi5wbXMiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIuKckyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIi0iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ubTN1Il0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLnhtbCJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsiZGF0YSJdWyJhdXRoZW50aWNhdGlvbi5hcGkiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIuKckyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIi0iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgQlVMS19FRElUID0gZmFsc2U7CiAgICAgICAgICAgICAgICBjcmVhdGVTZWFyY2hPYmooKTsKICAgICAgICAgICAgICAgIGNoZWNrVW5kbygiZXBnTWFwcGluZyIpOwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIk1BUFBJTkciKTsKICAgICAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKGRhdGEpOwogICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC1hY3RpdmUiXSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuY2xhc3NOYW1lID0gImFjdGl2ZUVQRyI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1bGsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMSyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG51bW1lcgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTlBVVENIQU5ORUwiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LWNoYW5uZWxJRCJdOwogICAgICAgICAgICAgICAgICAgICAgICAvL3RkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVyKCInICsga2V5ICsgJyIsIHRoaXMpJykKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2dvCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIklNRyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuaW1hZ2VVUkwgPSBkYXRhW2tleV1bInR2Zy1sb2dvIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2FuYWxuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHMgPSBkYXRhW2tleV1bIngtY2F0ZWdvcnkiXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NOYW1lID0gImNhdGVnb3J5IjsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdENvbG9yU2V0dGluZ3MgPSBTRVJWRVJbInNldHRpbmdzIl1bImVwZ0NhdGVnb3JpZXNDb2xvcnMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yc19zcGxpdCA9IGNhdENvbG9yU2V0dGluZ3Muc3BsaXQoInwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcnNfc3BsaXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzQ29sb3Jfc3BsaXQgPSBjb2xvcnNfc3BsaXRbaV0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXRzQ29sb3Jfc3BsaXRbMF0gPT0gY2F0c1swXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NDb2xvciA9IGNhdHNDb2xvcl9zcGxpdFsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LW5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBQbGF5bGlzdAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgLy9jZWxsLnZhbHVlID0gZGF0YVtrZXldWyJfZmlsZS5tM3UubmFtZSJdIAogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFba2V5XVsiX2ZpbGUubTN1LmlkIl0sICJtM3UiLCAibmFtZSIpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdydXBwZSAoZ3JvdXAtdGl0bGUpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LWdyb3VwLXRpdGxlIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MVFYgRGF0ZWkKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bIngteG1sdHYtZmlsZSJdICE9ICItIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShkYXRhW2tleV1bIngteG1sdHYtZmlsZSJdLCAieG1sdHYiLCAibmFtZSIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC14bWx0di1maWxlIl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxUViBLYW5hbAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgdmFsdWUgPSBzdHIuc3Vic3RyaW5nKDEsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhW2tleV1bIngtbWFwcGluZyJdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGF0YVtrZXldWyJ4LW1hcHBpbmciXS5zdWJzdHJpbmcoMCwgMjApICsgIi4uLiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0cik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic2V0dGluZ3MiOgogICAgICAgICAgICAgICAgYWxlcnQoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlRhYmxlIGNvbnRlbnQgKG1lbnVLZXkpOiIsIG1lbnVLZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiByb3dzOwogICAgfQogICAgY3JlYXRlSW5hY3RpdmVUYWJsZUNvbnRlbnQobWVudUtleSkgewogICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgIHZhciByb3dzID0gbmV3IEFycmF5KCk7CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgQlVMS19FRElUID0gZmFsc2U7CiAgICAgICAgICAgICAgICBjcmVhdGVTZWFyY2hPYmooKTsKICAgICAgICAgICAgICAgIGNoZWNrVW5kbygiZXBnTWFwcGluZyIpOwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIk1BUFBJTkciKTsKICAgICAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRPYmpLZXlzKGRhdGEpOwogICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC1hY3RpdmUiXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmNsYXNzTmFtZSA9ICJub3RBY3RpdmVFUEciOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBCdWxrCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIkJVTEsiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2FuYWxudW1tZXIKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiSU5QVVRDSEFOTkVMIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC1hY3RpdmUiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LWNoYW5uZWxJRCJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1jaGFubmVsSUQiXSAqIDEwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IGNoYW5nZUNoYW5uZWxOdW1iZXIoIicgKyBrZXkgKyAnIiwgdGhpcyknKQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvZ28KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiSU1HIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pbWFnZVVSTCA9IGRhdGFba2V5XVsidHZnLWxvZ28iXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0cyA9IGRhdGFba2V5XVsieC1jYXRlZ29yeSJdLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAiY2F0ZWdvcnkiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0Q29sb3JTZXR0aW5ncyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllc0NvbG9ycyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzX3NwbGl0ID0gY2F0Q29sb3JTZXR0aW5ncy5zcGxpdCgifCIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yc19zcGxpdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHNDb2xvcl9zcGxpdCA9IGNvbG9yc19zcGxpdFtpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdHNDb2xvcl9zcGxpdFswXSA9PSBjYXRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0NvbG9yID0gY2F0c0NvbG9yX3NwbGl0WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtbmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXlsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL2NlbGwudmFsdWUgPSBkYXRhW2tleV1bIl9maWxlLm0zdS5uYW1lIl0gCiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJfZmlsZS5tM3UuaWQiXSwgIm0zdSIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3J1cHBlIChncm91cC10aXRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtZ3JvdXAtdGl0bGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIEthbmFsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB2YWx1ZSA9IHN0ci5zdWJzdHJpbmcoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV1bIngtbWFwcGluZyJdLnN1YnN0cmluZygwLCAyMCkgKyAiLi4uIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICBhbGVydCgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGFibGUgY29udGVudCAobWVudUtleSk6IiwgbWVudUtleSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvd3M7CiAgICB9Cn0KY2xhc3MgQ2VsbCB7CiAgICBjcmVhdGVDZWxsKCkgewogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgaWYgKHRoaXMuY2hpbGQgPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgZWxlbWVudDsKICAgICAgICAgICAgc3dpdGNoICh0aGlzLmNoaWxkVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAiUCI6CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5jaGlsZFR5cGUpOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc0NvbG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuYm9yZGVyQ29sb3IgPSB0aGlzLmNsYXNzQ29sb3I7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVQiOgogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY2hpbGRUeXBlKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAidGV4dCI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJJTlBVVENIQU5ORUwiOgogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZzY3JpcHQ6IGNoYW5nZUNoYW5uZWxOdW1iZXIodGhpcykiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAidGV4dCI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJCVUxLIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiYnVsayBoaWRlQnVsayI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJCVUxLX0hFQUQiOgogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJidWxrIGhpZGVCdWxrIjsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAiamF2YXNjcmlwdDogc2VsZWN0QWxsQ2hhbm5lbHMoKSIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAiamF2YXNjcmlwdDogc2VsZWN0QWxsQ2hhbm5lbHMoJ2luYWN0aXZlQ29udGVudFRhYmxlJykiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJJTUciOgogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY2hpbGRUeXBlKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgdGhpcy5pbWFnZVVSTCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VVUkwgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm9uZXJyb3IiLCAiamF2YXNjcmlwdDogdGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9JyciKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmVycm9yPSJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nbWlzc2luZy5naWYnOyIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vbmNsaWNrID09IHRydWUpIHsKICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgdGhpcy5vbmNsaWNrRnVua3Rpb24pOwogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSAicG9pbnRlciI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRkQ2xhc3NOYW1lICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSB0aGlzLnRkQ2xhc3NOYW1lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGQ7CiAgICB9Cn0KY2xhc3MgU2hvd0NvbnRlbnQgZXh0ZW5kcyBDb250ZW50IHsKICAgIGNvbnN0cnVjdG9yKG1lbnVJRCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51SUQgPSBtZW51SUQ7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdHlwZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBzaG93KCkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgLy8gQWx0ZW4gSW5oYWx0IGzDtnNjaGVuCiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIHNob3dQcmV2aWV3KGZhbHNlKTsKICAgICAgICAvLyDDnGJlcnNjaHJpZnQKICAgICAgICB2YXIgcG9wdXBIZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkhlYWRlcklEKTsKICAgICAgICB2YXIgaGVhZGxpbmUgPSBtZW51SXRlbXNbdGhpcy5tZW51SURdLmhlYWRsaW5lOwogICAgICAgIHZhciBtZW51S2V5ID0gbWVudUl0ZW1zW3RoaXMubWVudUlEXS5tZW51S2V5OwogICAgICAgIHZhciBoID0gdGhpcy5jcmVhdGVIZWFkbGluZShoZWFkbGluZSk7CiAgICAgICAgdmFyIGV4aXN0aW5nSGVhZGVyID0gcG9wdXBIZWFkZXIucXVlcnlTZWxlY3RvcignaDMnKTsKICAgICAgICBpZiAoZXhpc3RpbmdIZWFkZXIpIHsKICAgICAgICAgICAgcG9wdXBIZWFkZXIucmVwbGFjZUNoaWxkKGgsIGV4aXN0aW5nSGVhZGVyKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcHVwSGVhZGVyLmFwcGVuZENoaWxkKGgpOwogICAgICAgIH0KICAgICAgICB2YXIgaHIgPSB0aGlzLmNyZWF0ZUhSKCk7CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKGhyKTsKICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgIHZhciBkaXYgPSB0aGlzLmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKGRpdik7CiAgICAgICAgdmFyIGludGVyYWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pbnRlcmFjdGlvbklEKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICItIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJwbGF5bGlzdCIpJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAtMSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJmaWx0ZXIiLCB0aGlzKScpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAieG1sdHYiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInhtbHR2IiknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLm5ld319Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInVzZXJzIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJ1c2VycyIpJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICAvLyBzaG93RWxlbWVudCgibG9hZGluZyIsIHRydWUpCiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoIm1hcHBpbmciLCAiIiwgIiIpJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLmJ1bGtFZGl0fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBidWxrRWRpdCgpJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJzZWFyY2giLCAic2VhcmNoIiwgIiIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJzZWFyY2hNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmJ1dHRvbi5zZWFyY2h9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gInNlYXJjaCI7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgJ2phdmFzY3JpcHQ6IHNlYXJjaEluTWFwcGluZygpJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic2V0dGluZ3MiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzYXZlU2V0dGluZ3MoKTsnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uYmFja3VwfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBiYWNrdXAoKTsnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ucmVzdG9yZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogcmVzdG9yZSgpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICAgICAgICAgIHdyYXBwZXIuc2V0QXR0cmlidXRlKCJpZCIsICJib3gtd3JhcHBlciIpOwogICAgICAgICAgICAgICAgZG9jLmFwcGVuZENoaWxkKHdyYXBwZXIpOwogICAgICAgICAgICAgICAgdGhpcy5EaXZJRCA9ICJjb250ZW50X3NldHRpbmdzIjsKICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IHRoaXMuY3JlYXRlRElWKCk7CiAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNldHRpbmdzKTsKICAgICAgICAgICAgICAgIHNob3dTZXR0aW5ncygpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxvZyI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLnJlc2V0TG9nc319Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogcmVzZXRMb2dzKCk7Jyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpOwogICAgICAgICAgICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImlkIiwgImJveC13cmFwcGVyIik7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQod3JhcHBlcik7CiAgICAgICAgICAgICAgICB0aGlzLkRpdklEID0gImNvbnRlbnRfbG9nIjsKICAgICAgICAgICAgICAgIHZhciBsb2dzID0gdGhpcy5jcmVhdGVESVYoKTsKICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobG9ncyk7CiAgICAgICAgICAgICAgICBzaG93TG9ncyh0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJsb2dvdXQiOgogICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiVG9rZW49IDsgZXhwaXJlcyA9IFRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlNob3cgY29udGVudCAobWVudUtleSk6IiwgbWVudUtleSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gVGFiZWxsZSBlcnN0ZWxsZW4gKGZhbGxzIGJlbsO2dGlndCkKICAgICAgICB2YXIgdGFibGVIZWFkZXIgPSBtZW51SXRlbXNbdGhpcy5tZW51SURdLnRhYmxlSGVhZGVyOwogICAgICAgIGlmICh0YWJsZUhlYWRlci5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgICAgIGRvYy5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKICAgICAgICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImlkIiwgImJveC13cmFwcGVyIik7CiAgICAgICAgICAgIHZhciB0YWJsZSA9IHRoaXMuY3JlYXRlVEFCTEUoKTsKICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0YWJsZSk7CiAgICAgICAgICAgIHZhciBoZWFkZXIgPSB0aGlzLmNyZWF0ZVRhYmxlUm93KCk7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKGhlYWRlcik7CiAgICAgICAgICAgIC8vIEtvcGZ6ZWlsZSBkZXIgVGFibGxlCiAgICAgICAgICAgIHRhYmxlSGVhZGVyLmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGVsZW1lbnQ7CiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAiQlVMSyIpIHsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJCVUxLX0hFQUQiOwogICAgICAgICAgICAgICAgICAgIGNlbGwuYWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobWVudUtleSA9PSAibWFwcGluZyIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaE5vfX0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgxKTsiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnRkQ2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUuY2hhbm5lbE5hbWV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDMpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLnBsYXlsaXN0fX0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSg0KTsiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5ncm91cFRpdGxlfX0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSg1KTsiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChoZWFkZXIpOwogICAgICAgICAgICAvLyBJbmhhbHQgZGVyIFRhYmVsbGUKICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmNyZWF0ZVRhYmxlQ29udGVudChtZW51S2V5KTsKICAgICAgICAgICAgcm93cy5mb3JFYWNoKHRyID0+IHsKICAgICAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBiciA9IHRoaXMuY3JlYXRlQlIoKTsKICAgICAgICAgICAgZG9jLmFwcGVuZENoaWxkKGJyKTsKICAgICAgICAgICAgLy8gQ3JlYXRlIGluYWN0aXZlIGNoYW5uZWxzIGZvciBtYXBwaW5nCiAgICAgICAgICAgIGlmIChtZW51S2V5ID09ICJtYXBwaW5nIikgewogICAgICAgICAgICAgICAgdmFyIGluYWN0aXZldGFibGUgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVEFCTEUoKTsKICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW5hY3RpdmV0YWJsZSk7CiAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gdGhpcy5jcmVhdGVJbmFjdGl2ZVRhYmxlUm93KCk7CiAgICAgICAgICAgICAgICBpbmFjdGl2ZXRhYmxlLmFwcGVuZENoaWxkKGhlYWRlcik7CiAgICAgICAgICAgICAgICAvLyBLb3BmemVpbGUgZGVyIFRhYmxsZQogICAgICAgICAgICAgICAgdGFibGVIZWFkZXIuZm9yRWFjaChlbGVtZW50ID0+IHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gIkJVTEsiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIkJVTEtfSEVBRCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKG1lbnVLZXkgPT0gIm1hcHBpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoMSwgJ2luYWN0aXZlQ29udGVudFRhYmxlJyk7IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudGRDbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmNoYW5uZWxOYW1lfX0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDMsICdpbmFjdGl2ZUNvbnRlbnRUYWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNCwgJ2luYWN0aXZlQ29udGVudFRhYmxlJyk7IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5ncm91cFRpdGxlfX0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDUsICdpbmFjdGl2ZUNvbnRlbnRUYWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaW5hY3RpdmV0YWJsZS5hcHBlbmRDaGlsZChoZWFkZXIpOwogICAgICAgICAgICAgICAgLy8gSW5oYWx0IGRlciBUYWJlbGxlCiAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuY3JlYXRlSW5hY3RpdmVUYWJsZUNvbnRlbnQobWVudUtleSk7CiAgICAgICAgICAgICAgICByb3dzLmZvckVhY2godHIgPT4gewogICAgICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBzYXZlUG9wdXBEYXRhKCJtYXBwaW5nIiwgIiIsIGZhbHNlLCAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBzb3J0VGFibGUoMSk7CiAgICAgICAgICAgICAgICBzb3J0VGFibGUoMSwgImluYWN0aXZlQ29udGVudFRhYmxlIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgICAgIHNob3dQcmV2aWV3KHRydWUpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgfQp9CmZ1bmN0aW9uIFBhZ2VSZWFkeSgpIHsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCJnZXRTZXJ2ZXJDb25maWciKTsKICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7CiAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgdXBkYXRlTG9nKCk7CiAgICB9LCAxMDAwMCk7CiAgICBnZXROZXdlc3RSZWxlYXNlRnJvbUdpdGh1YigpOwogICAgcmV0dXJuOwp9CnZhciBjaGVja2JveGVzSW5pdGlhbFN0YXRlID0gW107CmZ1bmN0aW9uIHNldENoZWNrYm94ZXMoKSB7CiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgewogICAgICAgIGNvbnN0IGNvbnRlbnQgPSBuZXcgUG9wdXBDb250ZW50KCk7CiAgICAgICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hlY2tib3hUYWJsZSIpOwogICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKGYgPT4gc2V0VGltZW91dChmLCAxMDAwKSk7CiAgICAgICAgaWYgKCJjbGllbnRJbmZvIiBpbiBTRVJWRVIpIHsKICAgICAgICAgICAgY29uc3QgYmluZGluZ0lQcyA9IFNFUlZFUlsnc2V0dGluZ3MnXVsnYmluZGluZ0lQcyddOwogICAgICAgICAgICBjb25zdCBiaW5kaW5nSVBzcEFycmF5ID0gYmluZGluZ0lQcy5zcGxpdCgiOyIpOwogICAgICAgICAgICBjb25zdCBzeXN0ZW1uSVBzID0gU0VSVkVSWyJjbGllbnRJbmZvIl1bInN5c3RlbUlQcyJdOwogICAgICAgICAgICBzeXN0ZW1uSVBzLmZvckVhY2goKGlwQWRkcmVzcywgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgIGlmICghaXBBZGRyZXNzLmluY2x1ZGVzKCcxNjkuMjU0JykpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2JveCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goaXBBZGRyZXNzLCAnaXBDaGVja2JveCcgKyBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IGJpbmRpbmdJUHNwQXJyYXkuaW5jbHVkZXMoaXBBZGRyZXNzKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgICAgICAgICAgICAgbGFiZWwuc2V0QXR0cmlidXRlKCJmb3IiLCAiaXBDaGVja2JveCIgKyBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgbGFiZWwuaW5uZXJIVE1MID0gaXBBZGRyZXNzOwogICAgICAgICAgICAgICAgICAgIHRkTGVmdC5hcHBlbmRDaGlsZChjaGVja2JveCk7CiAgICAgICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBjaGVja2JveF9jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hlY2tib3hfY29udGFpbmVyIik7CiAgICAgICAgICAgIGNvbnN0IHNhdmVCdXR0b24gPSBjcmVhdGVCdXR0b24oY29udGVudCwgImJ1dHRvblVwZGF0ZSIsICJ7ey5idXR0b24udXBkYXRlfX0iLCAnamF2c3JjaXB0OiB1cGRhdGVCaW5kaW5nSVBzKCknKTsKICAgICAgICAgICAgY29uc3QgY2FuY2VsQnV0dG9uID0gY3JlYXRlQnV0dG9uKGNvbnRlbnQsICJidXR0b25DYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGNoZWNrYm94X2NvbnRhaW5lci5hcHBlbmRDaGlsZChzYXZlQnV0dG9uKTsKICAgICAgICAgICAgY2hlY2tib3hfY29udGFpbmVyLmFwcGVuZENoaWxkKGNhbmNlbEJ1dHRvbik7CiAgICAgICAgICAgIGNvbnN0IGNoZWNrYm94ZXMgPSBjaGVja2JveF9jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT0iY2hlY2tib3giXScpOwogICAgICAgICAgICBjaGVja2JveGVzSW5pdGlhbFN0YXRlID0gQXJyYXkuZnJvbShjaGVja2JveGVzKS5tYXAoY2hlY2tib3ggPT4gY2hlY2tib3guY2hlY2tlZCk7CiAgICAgICAgICAgIGNvbnN0IGlwU2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lwX3NlbGVjdGlvbicpOwogICAgICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGlwU2VsZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5idG4tY2xvc2UnKTsKICAgICAgICAgICAgY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiByZXNldENoZWNrYm94ZXMoY2hlY2tib3hlcywgY2hlY2tib3hlc0luaXRpYWxTdGF0ZSkpOwogICAgICAgICAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiByZXNldENoZWNrYm94ZXMoY2hlY2tib3hlcywgY2hlY2tib3hlc0luaXRpYWxTdGF0ZSkpOwogICAgICAgIH0KICAgIH0pOwp9CmZ1bmN0aW9uIHJlc2V0Q2hlY2tib3hlcyhjaGVja2JveGVzLCBpbml0aWFsU3RhdGVzKSB7CiAgICBjaGVja2JveGVzLmZvckVhY2goKGNoZWNrYm94LCBpbmRleCkgPT4gewogICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSBpbml0aWFsU3RhdGVzW2luZGV4XTsKICAgIH0pOwp9CmZ1bmN0aW9uIGNyZWF0ZUxheW91dCgpIHsKICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tbWVudSIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gTWVuw7wgZXJzdGVsbGVuCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1tZW51IikuaW5uZXJIVE1MID0gIiI7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgIG1lbnVJdGVtc1tpXS5pZCA9IGk7CiAgICAgICAgc3dpdGNoIChtZW51SXRlbXNbaV1bIm1lbnVLZXkiXSkgewogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgIGNhc2UgImxvZ291dCI6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIC8vIENyZWF0ZSBzZXJ2ZXIgaW5mb3JtYXRpb24KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXJ2ZXJfaW5mb3JtYXRpb24iKS5pbm5lckhUTUwgPSAiIjsKICAgIGNvbnN0IHNlcnZlckluZm8gPSBuZXcgU2VydmVySW5mb3JtYXRpb24oKTsKICAgIHNlcnZlckluZm8uYWRkQ29udGVudChzZXJ2ZXJJbmZvcm1hdGlvbik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VydmVyX2luZm9ybWF0aW9uIikucmVwbGFjZVdpdGgoc2VydmVySW5mby5jb250YWluZXIpOwogICAgLy8gaW5pdGlhbGl6ZSB0b29sIHRpcHMKICAgIHRvb2x0aXBUcmlnZ2VyTGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWJzLXRvZ2dsZT0idG9vbHRpcCJdJyk7CiAgICB0b29sdGlwTGlzdCA9IEFycmF5LmZyb20odG9vbHRpcFRyaWdnZXJMaXN0KS5tYXAodG9vbHRpcFRyaWdnZXJFbCA9PiBuZXcgYm9vdHN0cmFwLlRvb2x0aXAodG9vbHRpcFRyaWdnZXJFbCkpOwogICAgLy8gQ2xpZW50IEluZm8gKFNlcnZlciBJbmZvcm1hdGlvbikKICAgIHZhciBvYmogPSBTRVJWRVJbImNsaWVudEluZm8iXTsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhvYmopOwogICAgY29uc3QgY2hhbmdlVmVyc2lvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VWZXJzaW9uIik7CiAgICBjaGFuZ2VWZXJzaW9uLnZhbHVlID0gInt7LnNlcnZlckluZm8uY2hhbmdlVmVyc2lvbi5jaGFuZ2VUb0JldGF9fSI7CiAgICBjaGFuZ2VWZXJzaW9uLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgY2hhbmdlVmVyc2lvbi52YWx1ZSA9ICJ7ey5zZXJ2ZXJJbmZvLmNoYW5nZVZlcnNpb24uY2hhbmdpbmd9fSI7CiAgICAgICAgY29uc3Qgc2VydmVyID0gbmV3IFNlcnZlcigiY2hhbmdlVmVyc2lvbiIpOwogICAgICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0sIDIwMDAwKTsKICAgIH07CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoa2V5c1tpXSkpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoa2V5c1tpXSkudmFsdWUgPSBvYmpba2V5c1tpXV07CiAgICAgICAgICAgIGlmIChrZXlzW2ldID09PSAidmVyc2lvbiIpIHsKICAgICAgICAgICAgICAgIGlmIChvYmpbImJldGEiXSkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKTsKICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLnZhbHVlICs9ICIgQmV0YSI7CiAgICAgICAgICAgICAgICAgICAgY2hhbmdlVmVyc2lvbi52YWx1ZSA9ICJ7ey5zZXJ2ZXJJbmZvLmNoYW5nZVZlcnNpb24uY2hhbmdlVG9SZWxlYXNlfX0iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIG9wZW5UaGlzTWVudShlbGVtZW50KSB7CiAgICB2YXIgaWQgPSBlbGVtZW50LmlkOwogICAgdmFyIGNvbnRlbnQgPSBuZXcgU2hvd0NvbnRlbnQoaWQpOwogICAgY29udGVudC5zaG93KCk7CiAgICBlbmFibGVHcm91cFNlbGVjdGlvbigiLmJ1bGsiKTsKICAgIHJldHVybjsKfQpjbGFzcyBQb3B1cFdpbmRvdyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAicG9wdXBDdXN0b20iOwogICAgICAgIHRoaXMuSW50ZXJhY3Rpb25JRCA9ICJpbnRlcmFjdGlvbiI7CiAgICAgICAgdGhpcy5kb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRvY3VtZW50SUQpOwogICAgfQogICAgY3JlYXRlVGl0bGUodGl0bGUpIHsKICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkLmNsYXNzTmFtZSA9ICJsZWZ0IjsKICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aXRsZSArICI6IjsKICAgICAgICByZXR1cm4gdGQ7CiAgICB9CiAgICBjcmVhdGVDb250ZW50KGVsZW1lbnQpIHsKICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIHJldHVybiB0ZDsKICAgIH0KICAgIGNyZWF0ZUludGVyYWN0aW9uKCkgewogICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCJpZCIsICJwb3B1cEludGVyYWN0aW9uIik7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJpbnRlcmFjdGlvbiI7CiAgICAgICAgdGhpcy5kb2MuYXBwZW5kQ2hpbGQoZGl2KTsKICAgIH0KfQpjbGFzcyBQb3B1cENvbnRlbnQgZXh0ZW5kcyBQb3B1cFdpbmRvdyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgIHRoaXMudGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQUJMRSIpOwogICAgfQogICAgY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpIHsKICAgICAgICB0aGlzLmRvYy5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkgzIik7CiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBoZWFkbGluZS50b1VwcGVyQ2FzZSgpOwogICAgICAgIHRoaXMuZG9jLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIC8vIFRhYmVsbGUgZXJzdGVsbGVuCiAgICAgICAgdGhpcy50YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdGhpcy5kb2MuYXBwZW5kQ2hpbGQodGhpcy50YWJsZSk7CiAgICB9CiAgICBhcHBlbmRSb3codGl0bGUsIGVsZW1lbnQpIHsKICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIC8vIEJlemVpY2hudW5nCiAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlVGl0bGUodGl0bGUpKTsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGVudAogICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29udGVudChlbGVtZW50KSk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB2YWx1ZSA9ICIiOwogICAgICAgIH0KICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCB0eXBlKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOwogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIGNyZWF0ZUNoZWNrYm94KG5hbWUsIGlkID0gJycpIHsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJjaGVja2JveCIpOwogICAgICAgIGlmIChpZCAhPSAnJykgewogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOwogICAgICAgIH0KICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBjcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBzZXQsIGRiS2V5KSB7CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNFTEVDVCIpOwogICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBkYktleSk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTsKICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZXNbaV0pOwogICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gdGV4dFtpXTsKICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgIT0gIiIpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gc2V0OwogICAgICAgIH0KICAgICAgICBpZiAoc2V0ID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSB2YWx1ZXNbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9CiAgICBzZWxlY3RPcHRpb24oc2VsZWN0LCB2YWx1ZSkgewogICAgICAgIC8vc2VsZWN0LnNlbGVjdGVkT3B0aW9ucyA9IHZhbHVlCiAgICAgICAgdmFyIHMgPSBzZWxlY3Q7CiAgICAgICAgcy5vcHRpb25zW3Muc2VsZWN0ZWRJbmRleF0udmFsdWUgPSB2YWx1ZTsKICAgICAgICByZXR1cm4gc2VsZWN0OwogICAgfQogICAgZGVzY3JpcHRpb24odmFsdWUpIHsKICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBzcGFuLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICB0ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbnRlbnQoc3BhbikpOwogICAgICAgIHRoaXMudGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgfQogICAgLy8gSW50ZXJha3Rpb24KICAgIGFkZEludGVyYWN0aW9uKGVsZW1lbnQpIHsKICAgICAgICB2YXIgaW50ZXJhY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXBJbnRlcmFjdGlvbiIpOwogICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgfQp9CmZ1bmN0aW9uIG9wZW5Qb3BVcChkYXRhVHlwZSwgZWxlbWVudCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgaWQ7CiAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKICAgICAgICBjYXNlIHVuZGVmaW5lZDoKICAgICAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsRGF0YSgiZmlsdGVyIiwgaWQpOwogICAgICAgICAgICAgICAgICAgIGRhdGFbInR5cGUiXSA9ICJncm91cC10aXRsZSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbERhdGEoImZpbHRlciIsIGlkKTsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiY3VzdG9tLWZpbHRlciI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGRhdGFbImlkLnByb3ZpZGVyIl0gPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgZGF0YVsidHlwZSJdID0gZGF0YVR5cGU7CiAgICAgICAgICAgICAgICAgICAgaWQgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgaWQgPSBlbGVtZW50LmlkOwogICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxEYXRhKGRhdGFUeXBlLCBpZCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgdmFyIGNvbnRlbnQgPSBuZXcgUG9wdXBDb250ZW50KCk7CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5wbGF5bGlzdC5wbGF5bGlzdFR5cGUudGl0bGV9fSIpOwogICAgICAgICAgICAvLyBUeXBlCiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJNM1UiLCAiSERIb21lUnVuIl07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnbTN1JykiLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdoZGhyJykiXTsKICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIiIsICJ0eXBlIik7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoImlkIiwgInR5cGUiKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogY2hhbmdlQnV0dG9uQWN0aW9uKHRoaXMsICJuZXh0IiwgIm9uY2xpY2siKScpOyAvLyBjaGFuZ2VCdXR0b25BY3Rpb24KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR5cGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBXZWl0ZXIKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgIm5leHQiLCAie3suYnV0dG9uLm5leHR9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtM3UiKScpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgJ25leHQnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBOYW1lCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBVUkwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbGUuc291cmNlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZmlsZU0zVS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5maWxlTTNVLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFR1bmVyCiAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImJ1ZmZlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25mb2N1cyIsICJqYXZhc2NyaXB0OiByZXR1cm47Iik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgaWYgKGRhdGFbZGJLZXldID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGFbZGJLZXldID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAibm90QXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0LnR1bmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImh0dHBfcHJveHkuaXAiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X2lwLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfaXAudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sucGxheWxpc3QuaHR0cF9wcm94eV9pcC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJodHRwX3Byb3h5LnBvcnQiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X3BvcnQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuaHR0cF9wcm94eV9wb3J0LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfcG9ydC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibTN1IiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiYmFjayIsICJ7ey5idXR0b24uYmFja319Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJwbGF5bGlzdCIpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVyZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAidXBkYXRlIiwgInt7LmJ1dHRvbi51cGRhdGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoIm0zdSIsICInICsgaWQgKyAnIiwgZmFsc2UsIDEpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibTN1IiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImhkaHIiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gTmFtZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0Lm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVVJMCiAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWxlLnNvdXJjZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0LmZpbGVIREhSLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LmZpbGVIREhSLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFR1bmVyCiAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImJ1ZmZlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25mb2N1cyIsICJqYXZhc2NyaXB0OiByZXR1cm47Iik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgaWYgKGRhdGFbZGJLZXldID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGFbZGJLZXldID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAibm90QXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0LnR1bmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImh0dHBfcHJveHkuaXAiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X2lwLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfaXAudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sucGxheWxpc3QuaHR0cF9wcm94eV9pcC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJodHRwX3Byb3h5LnBvcnQiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5odHRwX3Byb3h5X3BvcnQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuaHR0cF9wcm94eV9wb3J0LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0Lmh0dHBfcHJveHlfcG9ydC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImhkaHIiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImJhY2siLCAie3suYnV0dG9uLmJhY2t9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgicGxheWxpc3QiKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBBa3R1YWxpc2llcmVuCiAgICAgICAgICAgIGlmIChkYXRhWyJpZC5wcm92aWRlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInVwZGF0ZSIsICJ7ey5idXR0b24udXBkYXRlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJoZGhyIiwgIicgKyBpZCArICciLCBmYWxzZSwgMSknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJoZGhyIiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBUeXBlCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ0eXBlIjsKICAgICAgICAgICAgdmFyIHRleHQgPSBbIk0zVTogIiArICJ7ey5maWx0ZXIudHlwZS5ncm91cFRpdGxlfX0iLCAiVGhyZWFkZmluOiAiICsgInt7LmZpbHRlci50eXBlLmN1c3RvbUZpbHRlcn19Il07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnZ3JvdXAtdGl0bGUnKSIsICJqYXZhc2NyaXB0OiBvcGVuUG9wVXAoJ2N1c3RvbS1maWx0ZXInKSJdOwogICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdncm91cC10aXRsZScpIiwgZGJLZXkpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJpZCIsIGlkKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogY2hhbmdlQnV0dG9uQWN0aW9uKHRoaXMsICJuZXh0IiwgIm9uY2xpY2siKTsnKTsgLy8gY2hhbmdlQnV0dG9uQWN0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIudHlwZS50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIFdlaXRlcgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAibmV4dCIsICJ7ey5idXR0b24ubmV4dH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoImdyb3VwLXRpdGxlIiknKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICduZXh0Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICBjYXNlICJncm91cC10aXRsZSI6CiAgICAgICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoInt7LmZpbHRlci5jdXN0b219fSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoInt7LmZpbHRlci5ncm91cH19Iik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTmFtZSAgICAgIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5uYW1lLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmRlc2NyaXB0aW9uLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFR5cAogICAgICAgICAgICB2YXIgZGJLZXkgPSAidHlwZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImhpZGRlbiIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCIiLCBpbnB1dCk7CiAgICAgICAgICAgIHZhciBmaWx0ZXJUeXBlID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgLy8gR3Jvw58tIEtsZWluc2NocmVpYnVuZyBiZWFjaHRlbgogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJjYXNlU2Vuc2l0aXZlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5jYXNlU2Vuc2l0aXZlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgLy8gRmlsdGVycmVnZWwgKEJlbnV0emVyZGVmaW5pZXJ0KQogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWx0ZXIiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmZpbHRlclJ1bGUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuZmlsdGVyUnVsZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIC8vYWxlcnQoZGJLZXkgKyAiICIgKyBmaWx0ZXJUeXBlKQogICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBiYXNpZXJlbmQgYXVmIGRlbiBHcnVwcGVuIGluIGRlciBNM1UKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiZmlsdGVyIjsKICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBzTTNVID0gZ2V0TG9jYWxEYXRhKCJtM3VHcm91cHMiLCAiIik7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSBncm91cHNNM1VbInRleHQiXTsKICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gZ3JvdXBzTTNVWyJ2YWx1ZSJdOwogICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGFbZGJLZXldLCBkYktleSk7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmZpbHRlckdyb3VwLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5maWx0ZXJHcm91cC5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgICAgICAgICAgLy8gR3Jvw58tIEtsZWluc2NocmVpYnVuZyBiZWFjaHRlbgogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJjYXNlU2Vuc2l0aXZlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5jYXNlU2Vuc2l0aXZlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImluY2x1ZGUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmluY2x1ZGUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuaW5jbHVkZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5pbmNsdWRlLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiZXhjbHVkZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuZXhjbHVkZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5leGNsdWRlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3suZmlsdGVyLmV4Y2x1ZGUuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBOYW1lICAgICAgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJzdGFydGluZ051bWJlciI7CiAgICAgICAgICAgIGlmIChkYXRhW2RiS2V5XSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgIjEwMDAiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5zdGFydGluZ251bWJlci5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuc3RhcnRpbmdudW1iZXIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3suZmlsdGVyLnN0YXJ0aW5nbnVtYmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtY2F0ZWdvcnkiOwogICAgICAgICAgICB2YXIgdGV4dCA9IFsiLSJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyIiXTsKICAgICAgICAgICAgdmFyIGVwZ0NhdGVnb3JpZXMgPSBTRVJWRVJbInNldHRpbmdzIl1bImVwZ0NhdGVnb3JpZXMiXTsKICAgICAgICAgICAgdmFyIGNhdGVnb3JpZXMgPSBlcGdDYXRlZ29yaWVzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGNhdCA9IGNhdGVnb3JpZXNbaV07CiAgICAgICAgICAgICAgICBpZiAoY2F0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNhdF9zcGxpdCA9IGNhdC5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChjYXRfc3BsaXRbMF0pOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGNhdF9zcGxpdFsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5jYXRlZ29yeS50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiZmlsdGVyIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImZpbHRlciIsICInICsgaWQgKyAnIiwgZmFsc2UsIDApJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBOYW1lCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sueG1sdHYubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey54bWx0di5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBVUkwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbGUuc291cmNlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sueG1sdHYuZmlsZVhNTFRWLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnhtbHR2LmZpbGVYTUxUVi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiaHR0cF9wcm94eS5pcCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2Lmh0dHBfcHJveHlfaXAucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYuaHR0cF9wcm94eV9pcC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey54bWx0di5odHRwX3Byb3h5X2lwLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImh0dHBfcHJveHkucG9ydCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2Lmh0dHBfcHJveHlfcG9ydC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5odHRwX3Byb3h5X3BvcnQudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sueG1sdHYuaHR0cF9wcm94eV9wb3J0LmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgieG1sdHYiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgieG1sdHYiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAxKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoInhtbHR2IiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3subWFpbk1lbnUuaXRlbS51c2Vyc319Iik7CiAgICAgICAgICAgIC8vIEJlbnV0emVybmFtZSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInVzZXJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sudXNlcnMudXNlcm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMudXNlcm5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gTmV1ZXMgUGFzc3dvcnQgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJwYXNzd29yZCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInBhc3N3b3JkIiwgZGJLZXksICIiKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey51c2Vycy5wYXNzd29yZC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy5wYXNzd29yZC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXN0w6R0aWd1bmcgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJjb25maXJtIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgicGFzc3dvcmQiLCBkYktleSwgIiIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnVzZXJzLmNvbmZpcm0ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMuY29uZmlybS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgV0VCCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi53ZWIiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBpZiAoZGF0YVsiZGVmYXVsdFVzZXIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAiamF2YXNjcmlwdDogcmV0dXJuIGZhbHNlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLndlYi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgUE1TCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5wbXMiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMucG1zLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlcmVjaHRpZ3VuZyBNM1UKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImF1dGhlbnRpY2F0aW9uLm0zdSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy5tM3UudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIFhNTAogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24ueG1sIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLnhtbC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgQVBJCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5hcGkiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMuYXBpLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImRlZmF1bHRVc2VyIl0gIT0gdHJ1ZSAmJiBpZCAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCInICsgZGF0YVR5cGUgKyAnIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiJyArIGRhdGFUeXBlICsgJyIsICInICsgaWQgKyAnIiwgImZhbHNlIik7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iKTsKICAgICAgICAgICAgaWYgKEJVTEtfRURJVCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1jaGFubmVscy1zdGFydCI7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgdmFsdWUgdG8gdGhlIGZpcnN0IHNlbGVjdGVkIGNoYW5uZWwKICAgICAgICAgICAgICAgIHZhciBjaGFubmVscyA9IGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKTsKICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtjaGFubmVsc1swXV07CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNoYW5uZWwgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIGNoYW5uZWxbIngtY2hhbm5lbElEIl0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICdqYXZhc2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVycygiJyArIGNoYW5uZWxzICsgJyIpOycpOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbEdyb3VwU3RhcnQudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBa3RpdiAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtYWN0aXZlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaW5wdXQuaWQgPSAiYWN0aXZlIjsKICAgICAgICAgICAgLy9pbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIikKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0b2dnbGVDaGFubmVsU3RhdHVzKCciICsgaWQgKyAiJywgdGhpcykiKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuYWN0aXZlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEthbmFsbmFtZSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtbmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGlmIChCVUxLX0VESVQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgaW5wdXQuc3R5bGUuYm9yZGVyID0gInNvbGlkIDFweCByZWQiOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbE5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgIjxzcGFuIGNsYXNzPSd0ZXh0LWRhbmdlcic+IiArIGRhdGFbInR2Zy1pZCJdICsgIjwvc3Bhbj4gPHNwYW4gY2xhc3M9J3RleHQtcHJpbWFyeSc+KCIgKyBkYXRhWyJ4LWVwZyJdICsgIik8L3NwYW4+IjsKICAgICAgICAgICAgLy8gQmVzY2hyZWlidW5nIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1kZXNjcmlwdGlvbiI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7Lm1hcHBpbmcuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmRlc2NyaXB0aW9uLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVydW5nIGRlcyBLYW5hbG5hbWVucwogICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgiX3V1aWQua2V5IikpIHsKICAgICAgICAgICAgICAgIGlmIChkYXRhWyJfdXVpZC5rZXkiXSAhPSAiIikgewogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXVwZGF0ZS1jaGFubmVsLW5hbWUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcudXBkYXRlQ2hhbm5lbE5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBMb2dvIFVSTCAoS2FuYWwpIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAidHZnLWxvZ28iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgImNoYW5uZWwtaWNvbiIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5jaGFubmVsTG9nby50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBBa3R1YWxpc2llcnVuZyBkZXMgS2FuYWxsb2dvcwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC11cGRhdGUtY2hhbm5lbC1pY29uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJ1cGRhdGUtaWNvbiIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGFuZ2VDaGFubmVsTG9nbygnIiArIGlkICsgIicpOyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy51cGRhdGVDaGFubmVsTG9nby50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBFcndlaXRlcm4gZGVyIEVQRyBLYXRlZ29yaWUKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtY2F0ZWdvcnkiOwogICAgICAgICAgICB2YXIgdGV4dCA9IFsiLSJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyIiXTsKICAgICAgICAgICAgdmFyIGVwZ0NhdGVnb3JpZXMgPSBTRVJWRVJbInNldHRpbmdzIl1bImVwZ0NhdGVnb3JpZXMiXTsKICAgICAgICAgICAgdmFyIGNhdGVnb3JpZXMgPSBlcGdDYXRlZ29yaWVzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGNhdCA9IGNhdGVnb3JpZXNbaV07CiAgICAgICAgICAgICAgICBpZiAoY2F0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNhdF9zcGxpdCA9IGNhdC5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChjYXRfc3BsaXRbMF0pOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGNhdF9zcGxpdFsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuZXBnQ2F0ZWdvcnkudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIE0zVSBHcnVwcGVudGl0ZWwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5tM3VHcm91cFRpdGxlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGlmIChkYXRhWyJncm91cC10aXRsZSJdICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbihkYXRhWyJncm91cC10aXRsZSJdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC14bWx0di1maWxlIjsKICAgICAgICAgICAgdmFyIHhtbEZpbGUgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICB2YXIgc2VsZWN0ID0geG1sdHYuZ2V0RmlsZXMoZGF0YVtkYktleV0pOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgZGJLZXkpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJwb3B1cC14bWx0diIpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgc2V0WG1sdHZDaGFubmVsKCciICsgaWQgKyAiJyx0aGlzLCAnIiArIGRhdGFbIngtbWFwcGluZyJdICsgIicpOyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy54bWx0dkZpbGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIHZhciBmaWxlID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIC8vIFhNTFRWIE1hcHBpbmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtbWFwcGluZyI7CiAgICAgICAgICAgIHZhciB4bWx0diA9IG5ldyBYTUxUVkZpbGUoKTsKICAgICAgICAgICAgY29uc3QgY3VycmVudFhtbFR2SWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29uc3QgW3htbFR2SWRDb250YWluZXIsIHhtbFR2SWRJbnB1dCwgeG1sVHZJZERhdGFsaXN0XSA9IHhtbHR2Lm5ld1htbFR2SWRQaWNrZXIoeG1sRmlsZSwgY3VycmVudFhtbFR2SWQpOwogICAgICAgICAgICB4bWxUdklkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lcicpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ3gtbWFwcGluZycpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1pbnB1dCcpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIC8vIHNvcnRTZWxlY3QoeG1sVHZJZERhdGFsaXN0KTsgLy8gVE9ETzogQmV0dGVyIHNvcnQgYmVmb3JlIGFkZGluZwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygne3subWFwcGluZy54bWx0dkNoYW5uZWwudGl0bGV9fScsIHhtbFR2SWRDb250YWluZXIpOwogICAgICAgICAgICAvLyBFeHRyYSBQUFYgRGF0YQogICAgICAgICAgICBpZiAoY3VycmVudFhtbFR2SWQgPT0gIlBQViIpIHsKICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXBwdi1leHRyYSI7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAicHB2LWV4dHJhIik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5wcHZleHRyYS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWJhY2t1cC1jaGFubmVsLTEiOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGJhY2t1cDFYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdkJhY2t1cDFJZENvbnRhaW5lciwgeG1sVHZCYWNrdXAxSWRJbnB1dCwgeG1sVHZCYWNrdXAxSWREYXRhbGlzdF0gPSB4bWx0di5uZXdYbWxUdklkUGlja2VyKHhtbEZpbGUsIGJhY2t1cDFYbWxUdklkKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyLTEnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgZGJLZXkpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkSW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJiYWNrdXAtY2hhbm5lbC0xIik7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdC1iYWNrdXAxJyk7CiAgICAgICAgICAgIC8vIHNvcnRTZWxlY3QoeG1sVHZJZERhdGFsaXN0KTsgLy8gVE9ETzogQmV0dGVyIHNvcnQgYmVmb3JlIGFkZGluZwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygne3subWFwcGluZy5iYWNrdXBDaGFubmVsMS50aXRsZX19JywgeG1sVHZCYWNrdXAxSWRDb250YWluZXIpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1iYWNrdXAtY2hhbm5lbC0yIjsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICBjb25zdCBiYWNrdXAyWG1sVHZJZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb25zdCBbeG1sVHZCYWNrdXAySWRDb250YWluZXIsIHhtbFR2QmFja3VwMklkSW5wdXQsIHhtbFR2QmFja3VwMklkRGF0YWxpc3RdID0geG1sdHYubmV3WG1sVHZJZFBpY2tlcih4bWxGaWxlLCBiYWNrdXAyWG1sVHZJZCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lci0yJyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGRiS2V5KTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFja3VwLWNoYW5uZWwtMiIpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2lkfScsIHRoaXMsICcke3htbEZpbGV9Jyk7YCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QtYmFja3VwMicpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5iYWNrdXBDaGFubmVsMi50aXRsZX19IiwgeG1sVHZCYWNrdXAySWRDb250YWluZXIpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1iYWNrdXAtY2hhbm5lbC0zIjsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICBjb25zdCBiYWNrdXAzWG1sVHZJZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb25zdCBbeG1sVHZCYWNrdXAzSWRDb250YWluZXIsIHhtbFR2QmFja3VwM0lkSW5wdXQsIHhtbFR2QmFja3VwM0lkRGF0YWxpc3RdID0geG1sdHYubmV3WG1sVHZJZFBpY2tlcih4bWxGaWxlLCBiYWNrdXAzWG1sVHZJZCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lci0zJyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGRiS2V5KTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZElucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFja3VwLWNoYW5uZWwtMyIpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2lkfScsIHRoaXMsICcke3htbEZpbGV9Jyk7YCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QtYmFja3VwMycpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5iYWNrdXBDaGFubmVsMy50aXRsZX19IiwgeG1sVHZCYWNrdXAzSWRDb250YWluZXIpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIExvZ28gaG9jaGxhZGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGxvYWQiLCAie3suYnV0dG9uLnVwbG9hZExvZ299fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogdXBsb2FkTG9nbygpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBGZXJ0aWcKICAgICAgICAgICAgdmFyIGlkcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICBpZHMgPSBnZXRBbGxTZWxlY3RlZENoYW5uZWxzKCk7CiAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgIGlkcy5wdXNoKGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uZG9uZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBkb25lUG9wdXBEYXRhKCInICsgZGF0YVR5cGUgKyAnIiwgIicgKyBpZHMgKyAnIiwgImZhbHNlIik7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHNob3dFbGVtZW50KCdwb3B1cEN1c3RvbScsIHRydWUpOwp9CmNsYXNzIFhNTFRWRmlsZSB7CiAgICBnZXRGaWxlcyhzZXQpIHsKICAgICAgICB2YXIgZmlsZUlEcyA9IGdldE9iaktleXMoU0VSVkVSWyJ4ZXBnIl1bInhtbHR2TWFwIl0pOwogICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoIi0iKTsKICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgiLSIpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZUlEcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZmlsZUlEc1tpXSAhPSAiVGhyZWFkZmluIER1bW15IikgewogICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGZpbGVJRHNbaV0sICJ4bWx0diIsICJmaWxlLnRocmVhZGZpbiIpKTsKICAgICAgICAgICAgICAgIHRleHQucHVzaChnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZmlsZUlEc1tpXSwgInhtbHR2IiwgIm5hbWUiKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChmaWxlSURzW2ldKTsKICAgICAgICAgICAgICAgIHRleHQucHVzaChmaWxlSURzW2ldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIik7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTsKICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZXNbaV0pOwogICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gdGV4dFtpXTsKICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgIT0gIiIpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gc2V0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZWN0OwogICAgfQogICAgLyoqCiAgICogQHBhcmFtIHhtbFR2RmlsZSBYTUwgZmlsZSBwYXRoIHRvIGdldCBFUEcgZnJvbS4KICAgKiBAcGFyYW0gY3VycmVudFhtbFR2SWQgQ3VycmVudCBYTUxUViBJRCB0byBzZXQgaW5pdGlhbCBpbnB1dCB2YWx1ZSB0by4KICAgKiBAcmV0dXJucyBBcnJheSBvZiwgc2VxdWVudGlhbGx5OgogICAqIDEpIENvbnRhaW5lciBvZiB0aGUgcGlja2VyLgogICAqIDIpIElucHV0IGZpZWxkIHRvIHR5cGUgYXQgYW5kIGdldCBjaG9pY2UgZnJvbS4KICAgKiAzKSBEYXRhbGlzdCBjb250YWluaW5nIGV2ZXJ5IG9wdGlvbi4KICAgKi8KICAgIG5ld1htbFR2SWRQaWNrZXIoeG1sVHZGaWxlLCBjdXJyZW50WG1sVHZJZCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpOwogICAgICAgIC8vIEluaXRpYWxseSwgc2V0IHZhbHVlIHRvICctJyBpZiBpbnB1dCBpcyBlbXB0eQogICAgICAgIGlucHV0LnZhbHVlID0gKGN1cnJlbnRYbWxUdklkKSA/IGN1cnJlbnRYbWxUdklkIDogJy0nOwogICAgICAgIC8vIFdoZW4gaW5wdXQgaXMgZm9jdXNlZCwgcmVtb3ZlICctJyBmcm9tIGl0CiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoZXZ0KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXQ7CiAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9ICh0YXJnZXQudmFsdWUgPT09ICctJykgPyAnJyA6IHRhcmdldC52YWx1ZTsKICAgICAgICB9KTsKICAgICAgICAvLyBXaGVuIGlucHV0IGxvc2UgZm9jdXMgb3IgdGFrZSBhIHZhbHVlLCBpZiBpdCdzIGVtcHR5LCBzZXQgdmFsdWUgdG8gJy0nCiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHNldEZhbGxiYWNrVmFsdWUpOwogICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNldEZhbGxiYWNrVmFsdWUpOwogICAgICAgIGZ1bmN0aW9uIHNldEZhbGxiYWNrVmFsdWUoZXZ0KSB7CiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXQ7CiAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9ICh0YXJnZXQudmFsdWUpID8gdGFyZ2V0LnZhbHVlIDogJy0nOwogICAgICAgIH0KICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgIGNvbnN0IGRhdGFsaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGF0YWxpc3QnKTsKICAgICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsICctJyk7CiAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9ICctJzsKICAgICAgICBkYXRhbGlzdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgIGNvbnN0IGVwZyA9IFNFUlZFUlsneGVwZyddWyd4bWx0dk1hcCddW3htbFR2RmlsZV07CiAgICAgICAgaWYgKGVwZykgewogICAgICAgICAgICBjb25zdCBwcm9ncmFtSWRzID0gZ2V0T3duT2JqUHJvcHMoZXBnKTsKICAgICAgICAgICAgcHJvZ3JhbUlkcy5mb3JFYWNoKChwcm9ncmFtSWQpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyYW0gPSBlcGdbcHJvZ3JhbUlkXTsKICAgICAgICAgICAgICAgIGlmIChwcm9ncmFtLmhhc093blByb3BlcnR5KCdkaXNwbGF5LW5hbWUnKSkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgcHJvZ3JhbUlkKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gcHJvZ3JhbVsiZGlzcGxheS1uYW1lIl07CiAgICAgICAgICAgICAgICAgICAgZGF0YWxpc3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgcHJvZ3JhbUlkKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gJy0nOwogICAgICAgICAgICAgICAgICAgIGRhdGFsaXN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGF0YWxpc3QpOwogICAgICAgIHJldHVybiBbY29udGFpbmVyLCBpbnB1dCwgZGF0YWxpc3RdOwogICAgfQogICAgZ2V0UHJvZ3JhbXMoZmlsZSwgc2V0LCBhY3RpdmUpIHsKICAgICAgICAvL3ZhciBmaWxlSURzOnN0cmluZ1tdID0gZ2V0T2JqS2V5cyhTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXSkKICAgICAgICB2YXIgdmFsdWVzID0gZ2V0T2JqS2V5cyhTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXSk7CiAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICB2YXIgZGlzcGxheU5hbWU7CiAgICAgICAgdmFyIGFjdGl2ZXMgPSBnZXRPYmpLZXlzKFNFUlZFUlsiZGF0YSJdWyJTdHJlYW1QcmV2aWV3VUkiXVsiYWN0aXZlU3RyZWFtcyJdKTsKICAgICAgICB2YXIgYWN0aXZlX2xpc3QgPSBuZXcgQXJyYXkoKTsKICAgICAgICBpZiAoYWN0aXZlID09IHRydWUpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbmFtZXNfc3BsaXQgPSBTRVJWRVJbImRhdGEiXVsiU3RyZWFtUHJldmlld1VJIl1bImFjdGl2ZVN0cmVhbXMiXVthY3RpdmVzW2ldXS5zcGxpdCgiWyIpOwogICAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSBuYW1lc19zcGxpdFswXS50cmltKCk7CiAgICAgICAgICAgICAgICBpZiAoZGlzcGxheU5hbWUgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0geyAidmFsdWUiOiBkaXNwbGF5TmFtZSwgImRpc3BsYXkiOiBkaXNwbGF5TmFtZSB9OwogICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9saXN0LnB1c2gob2JqZWN0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXVt2YWx1ZXNbaV1dLmhhc093blByb3BlcnR5KCdkaXNwbGF5LW5hbWUnKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSBTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXVt2YWx1ZXNbaV1dWyJkaXNwbGF5LW5hbWUiXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gIi0iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGV4dFtpXSA9IGRpc3BsYXlOYW1lICsgIiAoIiArIHZhbHVlc1tpXSArICIpIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0ZXh0LnVuc2hpZnQoIi0iKTsKICAgICAgICB2YWx1ZXMudW5zaGlmdCgiLSIpOwogICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTRUxFQ1QiKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlc1tpXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0W2ldOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVfbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7CiAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgYWN0aXZlX2xpc3RbaV1bInZhbHVlIl0pOwogICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gYWN0aXZlX2xpc3RbaV1bImRpc3BsYXkiXTsKICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgIT0gIiIpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gc2V0OwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZWN0LnZhbHVlICE9IHNldCkgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSAiLSI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9Cn0KZnVuY3Rpb24gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGZpbGUsIGZpbGVUeXBlLCBrZXkpIHsKICAgIGlmIChmaWxlID09ICJUaHJlYWRmaW4gRHVtbXkiKSB7CiAgICAgICAgcmV0dXJuIGZpbGU7CiAgICB9CiAgICB2YXIgZmlsZUlEOwogICAgdmFyIGluZGljYXRvciA9IGZpbGUuY2hhckF0KDApOwogICAgc3dpdGNoIChpbmRpY2F0b3IpIHsKICAgICAgICBjYXNlICJNIjoKICAgICAgICAgICAgZmlsZVR5cGUgPSAibTN1IjsKICAgICAgICAgICAgZmlsZUlEID0gZmlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiSCI6CiAgICAgICAgICAgIGZpbGVUeXBlID0gImhkaHIiOwogICAgICAgICAgICBmaWxlSUQgPSBmaWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgZmlsZVR5cGUgPSAieG1sdHYiOwogICAgICAgICAgICBmaWxlSUQgPSBmaWxlLnN1YnN0cmluZygwLCBmaWxlLmxhc3RJbmRleE9mKCcuJykpOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZmlsZVR5cGVdLmhhc093blByb3BlcnR5KGZpbGVJRCkgPT0gdHJ1ZSkgewogICAgICAgIHZhciBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXVtmaWxlSURdOwogICAgICAgIHJldHVybiBkYXRhW2tleV07CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc2V0WG1sdHZDaGFubmVsKGVwZ01hcElkLCB4bWxUdkZpbGVTZWxlY3QpIHsKICAgIGNvbnN0IHhtbFR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgY29uc3QgbmV3WG1sVHZGaWxlID0geG1sVHZGaWxlU2VsZWN0LnZhbHVlOwogICAgLy8gUmVtb3ZlIG9sZCBYTUxUViBJRCBzZWxlY3Rpb24gYm94CiAgICBjb25zdCB4bWxUdklkUGlja2VyUGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXInKS5wYXJlbnRFbGVtZW50OwogICAgeG1sVHZJZFBpY2tlclBhcmVudC5pbm5lckhUTUwgPSAnJzsKICAgIC8vIENyZWF0ZSBuZXcgWE1MVFYgSUQgc2VsZWN0aW9uIGJveAogICAgY29uc3QgdHZnSWQgPSBTRVJWRVJbJ3hlcGcnXVsnZXBnTWFwcGluZyddW2VwZ01hcElkXVsndHZnLWlkJ107CiAgICBjb25zdCBbeG1sVHZJZENvbnRhaW5lciwgeG1sVHZJZElucHV0LCB4bWxUdklkRGF0YWxpc3RdID0geG1sVHYubmV3WG1sVHZJZFBpY2tlcihuZXdYbWxUdkZpbGUsIHR2Z0lkKTsKICAgIHhtbFR2SWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyJyk7CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsICd4LW1hcHBpbmcnKTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWlucHV0Jyk7CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7ZXBnTWFwSWR9JywgdGhpcy52YWx1ZSwgJyR7bmV3WG1sVHZGaWxlfScpO2ApOwogICAgeG1sVHZJZElucHV0LmNsYXNzTGlzdC5hZGQoJ2NoYW5nZWQnKTsKICAgIHhtbFR2SWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgLy8gQWRkIG5ldyBYTUxUViBJRCBzZWxlY3Rpb24gYm94IHRvIGl0J3MgcGFyZW50CiAgICB4bWxUdklkUGlja2VyUGFyZW50LmFwcGVuZENoaWxkKHhtbFR2SWRDb250YWluZXIpOwogICAgY2hlY2tYbWx0dkNoYW5uZWwoZXBnTWFwSWQsIHhtbFR2SWRJbnB1dC52YWx1ZSwgbmV3WG1sVHZGaWxlKTsKfQpmdW5jdGlvbiBjaGVja1BQVih0aXRsZSwgZWxlbWVudCkgewogICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTsKICAgIGNvbnNvbGUubG9nKCJEVU1NWSBUWVBFOiAiICsgdmFsdWUpOwogICAgaWYgKHZhbHVlID09ICJQUFYiKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIngtcHB2LWV4dHJhIikucGFyZW50RWxlbWVudDsKICAgICAgICB0ZC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgZGJLZXkgPSAieC1wcHYtZXh0cmEiOwogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQiKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBkYktleSk7CiAgICAgICAgLy8gaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKQogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInBwdi1leHRyYSIpOwogICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgLy8gQmV6ZWljaG51bmcKICAgICAgICBpZiAodGl0bGUubGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdGQuY2xhc3NOYW1lID0gImxlZnQiOwogICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aXRsZSArICI6IjsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGVudAogICAgICAgIHRkLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIHRoaXMudGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgfQp9CmZ1bmN0aW9uIGNoZWNrWG1sdHZDaGFubmVsKGlkLCBlbGVtZW50LCB4bWxGaWxlKSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwogICAgdmFyIGJvb2w7CiAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0aXZlJyk7CiAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgdmFyIHVwZGF0ZUxvZ287CiAgICBpZiAodmFsdWUgPT0gIi0iKSB7CiAgICAgICAgYm9vbCA9IGZhbHNlOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgYm9vbCA9IHRydWU7CiAgICB9CiAgICBjaGVja2JveC5jaGVja2VkID0gYm9vbDsKICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgIGNvbnNvbGUubG9nKHhtbEZpbGUpOwogICAgLy8gS2FuYWxsb2dvIGFrdHVhbGlzaWVyZW4KICAgIC8qCiAgICB1cGRhdGVMb2dvID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQKICAgIGNvbnNvbGUubG9nKHVwZGF0ZUxvZ28pOwogICAgKi8KICAgIGlmICh4bWxGaWxlICE9ICJUaHJlYWRmaW4gRHVtbXkiICYmIGJvb2wgPT0gdHJ1ZSkgewogICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgICAgICBjb25zb2xlLmxvZygiSUQiLCBpZCk7CiAgICAgICAgY2hhbmdlQ2hhbm5lbExvZ28oaWQpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh4bWxGaWxlID09ICJUaHJlYWRmaW4gRHVtbXkiKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBjaGFuZ2VDaGFubmVsTG9nbyhlcGdNYXBJZCkgewogICAgY29uc3QgY2hhbm5lbCA9IFNFUlZFUlsneGVwZyddWydlcGdNYXBwaW5nJ11bZXBnTWFwSWRdOwogICAgY29uc3QgeG1sVHZGaWxlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcHVwLXhtbHR2Jyk7CiAgICBjb25zdCB4bWxUdkZpbGUgPSB4bWxUdkZpbGVTZWxlY3Qub3B0aW9uc1t4bWxUdkZpbGVTZWxlY3Quc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBjb25zdCB4bWxUdklkSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneG1sdHYtaWQtcGlja2VyLWlucHV0Jyk7CiAgICBjb25zdCBuZXdYbWxUdklkID0geG1sVHZJZElucHV0LnZhbHVlOwogICAgY29uc3QgdXBkYXRlTG9nbyA9ICFCVUxLX0VESVQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1pY29uJykuY2hlY2tlZDsKICAgIGxldCBsb2dvOwogICAgaWYgKHVwZGF0ZUxvZ28gPT0gdHJ1ZSAmJiB4bWxUdkZpbGUgIT0gJ1RocmVhZGZpbiBEdW1teScpIHsKICAgICAgICBpZiAoU0VSVkVSWyd4ZXBnJ11bJ3htbHR2TWFwJ11beG1sVHZGaWxlXS5oYXNPd25Qcm9wZXJ0eShuZXdYbWxUdklkKSkgewogICAgICAgICAgICBsb2dvID0gU0VSVkVSWyd4ZXBnJ11bJ3htbHR2TWFwJ11beG1sVHZGaWxlXVtuZXdYbWxUdklkXVsnaWNvbiddOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbG9nbyA9IGNoYW5uZWxbJ3R2Zy1sb2dvJ107CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIHNhdmVQb3B1cERhdGEoZGF0YVR5cGUsIGlkLCByZW1vdmUsIG9wdGlvbikgewogICAgc2hvd0VsZW1lbnQoJ3BvcHVwJywgZmFsc2UpOwogICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCB0cnVlKTsKICAgIGlmIChkYXRhVHlwZSA9PSAibWFwcGluZyIpIHsKICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICBjb25zb2xlLmxvZygiU2F2ZSBtYXBwaW5nIGRhdGEiKTsKICAgICAgICBjbWQgPSAic2F2ZUVwZ01hcHBpbmciOwogICAgICAgIGRhdGFbImVwZ01hcHBpbmciXSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgY29uc29sZS5sb2coIlNFTkQgVE8gU0VSVkVSIik7CiAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICBkZWxldGUgVU5ET1siZXBnTWFwcGluZyJdOwogICAgICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnNvbGUubG9nKCJTYXZlIHBvcHVwIGRhdGEiKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXBDdXN0b20iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRBQkxFIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICB2YXIgc2VsZWN0cyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEFCTEUiKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VMRUNUIik7CiAgICB2YXIgaW5wdXQgPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgY29uZmlybU1zZzsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuYW1lOwogICAgICAgIG5hbWUgPSBzZWxlY3RzW2ldLm5hbWU7CiAgICAgICAgdmFyIHZhbHVlID0gc2VsZWN0c1tpXS52YWx1ZTsKICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBwYXJzZUludCh2YWx1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBpbnB1dHNbaV0uY2hlY2tlZDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgY2FzZSAiaGlkZGVuIjoKICAgICAgICAgICAgY2FzZSAicGFzc3dvcmQiOgogICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHBhcnNlSW50KGlucHV0c1tpXS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGNtZDsKICAgIGlmIChyZW1vdmUgPT0gdHJ1ZSkgewogICAgICAgIGlucHV0WyJkZWxldGUiXSA9IHRydWU7CiAgICB9CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIHVzZXI/IjsKICAgICAgICAgICAgaWYgKGlkID09ICItIikgewogICAgICAgICAgICAgICAgY21kID0gInNhdmVOZXdVc2VyIjsKICAgICAgICAgICAgICAgIGRhdGFbInVzZXJEYXRhIl0gPSBpbnB1dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlVXNlckRhdGEiOwogICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICBkW2lkXSA9IGlucHV0OwogICAgICAgICAgICAgICAgZGF0YVsidXNlckRhdGEiXSA9IGQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBwbGF5bGlzdD8iOwogICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikgewogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFNhdmUKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZUZpbGVzTTNVIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBVcGRhdGUKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICBjbWQgPSAidXBkYXRlRmlsZU0zVSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImhkaHIiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIEhESG9tZVJ1biB0dW5lcj8iOwogICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikgewogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFNhdmUKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZUZpbGVzSERIUiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVIREhSIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhWyJmaWxlcyJdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIFhNTFRWIGZpbGU/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc1hNTFRWIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBVcGRhdGUKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICBjbWQgPSAidXBkYXRlRmlsZVhNTFRWIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhWyJmaWxlcyJdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBmaWx0ZXI/IjsKICAgICAgICAgICAgY21kID0gInNhdmVGaWx0ZXIiOwogICAgICAgICAgICBkYXRhWyJmaWx0ZXIiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbHRlciJdW2lkXSA9IGlucHV0OwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhVHlwZSwgaWQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHJlbW92ZSA9PSB0cnVlKSB7CiAgICAgICAgaWYgKCFjb25maXJtKGNvbmZpcm1Nc2cpKSB7CiAgICAgICAgICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKCJTRU5EIFRPIFNFUlZFUiIpOwogICAgY29uc29sZS5sb2coZGF0YSk7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKfQpmdW5jdGlvbiBkb25lUG9wdXBEYXRhKGRhdGFUeXBlLCBpZHNTdHIpIHsKICAgIHZhciBpZHMgPSBpZHNTdHIuc3BsaXQoJywnKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXBDdXN0b20iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiY2hhbmdlZCIpOwogICAgaWRzLmZvckVhY2goaWQgPT4gewogICAgICAgIHZhciBpbnB1dCA9IG5ldyBPYmplY3QoKTsKICAgICAgICBpbnB1dCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgIGNvbnNvbGUubG9nKCJJTlBVVDogIiArIGlucHV0KTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgbmFtZTsKICAgICAgICAgICAgdmFyIHZhbHVlOwogICAgICAgICAgICBzd2l0Y2ggKGlucHV0c1tpXS50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICBjYXNlICJJTlBVVCI6CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dHNbaV0udHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gaW5wdXRzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlucHV0c1tpXS5jaGVja2VkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIlNFTEVDVCI6CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICBjYXNlICJ0dmctbG9nbyI6CiAgICAgICAgICAgICAgICAgICAgLy8oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbMl0uZmlyc3RDaGlsZCBhcyBIVE1MRWxlbWVudCkuc2V0QXR0cmlidXRlKCJzcmMiLCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtY2hhbm5lbC1zdGFydCI6CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbM10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtbmFtZSI6CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbM10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtY2F0ZWdvcnkiOgogICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9ICJ3aGl0ZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNhdENvbG9yU2V0dGluZ3MgPSBTRVJWRVJbInNldHRpbmdzIl1bImVwZ0NhdGVnb3JpZXNDb2xvcnMiXTsKICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzX3NwbGl0ID0gY2F0Q29sb3JTZXR0aW5ncy5zcGxpdCgifCIpOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBjb2xvcnNfc3BsaXQubGVuZ3RoOyBpaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzQ29sb3Jfc3BsaXQgPSBjb2xvcnNfc3BsaXRbaWldLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXRzQ29sb3Jfc3BsaXRbMF0gPT0gdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gY2F0c0NvbG9yX3NwbGl0WzFdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzNdLmZpcnN0Q2hpbGQuc3R5bGUuYm9yZGVyQ29sb3IgPSBjb2xvcjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzVdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LXhtbHR2LWZpbGUiOgogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSAiVGhyZWFkZmluIER1bW15IiAmJiB2YWx1ZSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUodmFsdWUsICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbIngtYWN0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbNl0uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtbWFwcGluZyI6CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09ICItIikgewogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFsieC1hY3RpdmUiXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s3XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1iYWNrdXAtY2hhbm5lbCI6CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbN10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtaGlkZS1jaGFubmVsIjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s3XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgfQogICAgICAgICAgICBjcmVhdGVTZWFyY2hPYmooKTsKICAgICAgICAgICAgc2VhcmNoSW5NYXBwaW5nKCk7CiAgICAgICAgfQogICAgICAgIGlmIChpbnB1dFsieC1hY3RpdmUiXSA9PSBmYWxzZSkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gImFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUubG9nKGlucHV0WyJ0dmctbG9nbyJdKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1syXS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgic3JjIiwgaW5wdXRbInR2Zy1sb2dvIl0pOwogICAgfSk7CiAgICBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc2hvd1ByZXZpZXcoZWxlbWVudCkgewogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteVN0cmVhbXNCb3giKTsKICAgIHN3aXRjaCAoZWxlbWVudCkgewogICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgIGRpdi5jbGFzc05hbWUgPSAibm90VmlzaWJsZSI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICB2YXIgc3RyZWFtcyA9IFsiYWN0aXZlU3RyZWFtcyIsICJpbmFjdGl2ZVN0cmVhbXMiXTsKICAgIHN0cmVhbXMuZm9yRWFjaChwcmV2aWV3ID0+IHsKICAgICAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmV2aWV3KTsKICAgICAgICB0YWJsZS5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgb2JqID0gU0VSVkVSWyJkYXRhIl1bIlN0cmVhbVByZXZpZXdVSSJdW3ByZXZpZXddOwogICAgICAgIHZhciBjYXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQ0FQVElPTiIpOwogICAgICAgIHZhciByZXN1bHQgPSBwcmV2aWV3LnJlcGxhY2UoLyhbQS1aXSkvZywgIiAkMSIpOwogICAgICAgIHZhciBmaW5hbFJlc3VsdCA9IHJlc3VsdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlc3VsdC5zbGljZSgxKTsKICAgICAgICBjYXB0aW9uLmlubmVySFRNTCA9IGZpbmFsUmVzdWx0OwogICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKGNhcHRpb24pOwogICAgICAgIHZhciB0Ym9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRCT0RZIik7CiAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGJvZHkpOwogICAgICAgIG9iai5zbGljZSgwLCAxMDAwKS5mb3JFYWNoKGNoYW5uZWwgPT4gewogICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICB2YXIgdGRLZXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICB2YXIgdGRWYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICB0ZEtleS5jbGFzc05hbWUgPSAidGRLZXkiOwogICAgICAgICAgICB0ZFZhbC5jbGFzc05hbWUgPSAidGRWYWwiOwogICAgICAgICAgICBzd2l0Y2ggKHByZXZpZXcpIHsKICAgICAgICAgICAgICAgIGNhc2UgImFjdGl2ZVN0cmVhbXMiOgogICAgICAgICAgICAgICAgICAgIHRkS2V5LmlubmVyVGV4dCA9ICJDaGFubmVsOiAoKykiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiaW5hY3RpdmVTdHJlYW1zIjoKICAgICAgICAgICAgICAgICAgICB0ZEtleS5pbm5lclRleHQgPSAiQ2hhbm5lbDogKC0pIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB0ZFZhbC5pbm5lclRleHQgPSBjaGFubmVsOwogICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZEtleSk7CiAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkVmFsKTsKICAgICAgICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICAgICAgfSk7CiAgICB9KTsKICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpCiAgICBkaXYuY2xhc3NOYW1lID0gInZpc2libGUiOwogICAgcmV0dXJuOwp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lbnUuanMubWFw" + webUI["web/public/js/menu.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy9tZW51LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE1BQU0sUUFBUTtJQUFkO1FBQ0UsZUFBVSxHQUFXLFdBQVcsQ0FBQTtRQUNoQyxZQUFPLEdBQVcsSUFBSSxDQUFBO1FBQ3RCLGNBQVMsR0FBVyxNQUFNLENBQUE7SUFjNUIsQ0FBQztJQVpDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRztRQUNoQixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDakQsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDaEMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFlBQWEsU0FBUSxRQUFRO0lBUWpDLFlBQVksT0FBZSxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsUUFBZ0I7UUFDekUsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUMxQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFh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Q0FBQTt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDN0MsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTt3QkFFakMsSUFBSSxJQUFJLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQTt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTt3QkFDbEQsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTt3QkFFakMsSUFBSSxJQUFJLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQTt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQTt3QkFDdEQsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTt3QkFFakMsSUFBSSxJQUFJLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQTt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFl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" webUI["web/public/js/network.js"] = "Y2xhc3MgU2VydmVyIHsKICAgIGNvbnN0cnVjdG9yKGNtZCkgewogICAgICAgIHRoaXMuY21kID0gY21kOwogICAgfQogICAgcmVxdWVzdChkYXRhKSB7CiAgICAgICAgLy9pZiAoU0VSVkVSX0NPTk5FQ1RJT04gPT0gdHJ1ZSkgewogICAgICAgIC8vICByZXR1cm4KICAgICAgICAvL30KICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IHRydWU7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgaWYgKHRoaXMuY21kICE9ICJ1cGRhdGVMb2ciKSB7CiAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgVU5ETyA9IG5ldyBPYmplY3QoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgICAgICAgICAgY2FzZSAiaHR0cDoiOgogICAgICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9ICJ3czovLyI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHM6IjoKICAgICAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSAid3NzOi8vIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdXJsID0gdGhpcy5wcm90b2NvbCArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICI6IiArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgIi93cy8iICsgIj9Ub2tlbj0iICsgZ2V0Q29va2llKCJUb2tlbiIpOwogICAgICAgIGRhdGFbImNtZCJdID0gdGhpcy5jbWQ7CiAgICAgICAgdmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOwogICAgICAgIHdzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgV1NfQVZBSUxBQkxFID0gdHJ1ZTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFUVVFU1QgKEpTKToiKTsKICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJSRVFVRVNUOiAoSlNPTikiKTsKICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgICAgICB0aGlzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgIH07CiAgICAgICAgd3Mub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJObyB3ZWJzb2NrZXQgY29ubmVjdGlvbiB0byBUaHJlYWRmaW4gY291bGQgYmUgZXN0YWJsaXNoZWQuIENoZWNrIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLiIpOwogICAgICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IGZhbHNlOwogICAgICAgICAgICBpZiAoV1NfQVZBSUxBQkxFID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBhbGVydCgiTm8gd2Vic29ja2V0IGNvbm5lY3Rpb24gdG8gVGhyZWFkZmluIGNvdWxkIGJlIGVzdGFibGlzaGVkLiBDaGVjayB5b3VyIG5ldHdvcmsgY29uZmlndXJhdGlvbi4iKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgd3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgU0VSVkVSX0NPTk5FQ1RJT04gPSBmYWxzZTsKICAgICAgICAgICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJSRVNQT05TRToiKTsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShlLmRhdGEpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgidG9rZW4iKSkgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gIlRva2VuPSIgKyByZXNwb25zZVsidG9rZW4iXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHsKICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoImxvZ29VUkwiKSkgewogICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFubmVsLWljb24iKTsKICAgICAgICAgICAgICAgIGRpdi52YWx1ZSA9IHJlc3BvbnNlWyJsb2dvVVJMIl07CiAgICAgICAgICAgICAgICBkaXYuY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN3aXRjaCAoZGF0YVsiY21kIl0pIHsKICAgICAgICAgICAgICAgIGNhc2UgInVwZGF0ZUxvZyI6CiAgICAgICAgICAgICAgICAgICAgU0VSVkVSLmxvZyA9IHJlc3BvbnNlWyJsb2ciXTsKICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfbG9nIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xvZ3MoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIFNFUlZFUjogU2VydmVyOwogICAgICAgICAgICAgICAgICAgIFNFUlZFUiA9IHJlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgib3Blbk1lbnUiKSkgewogICAgICAgICAgICAgICAgdmFyIG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyZXNwb25zZVsib3Blbk1lbnUiXSk7CiAgICAgICAgICAgICAgICBtZW51LmNsaWNrKCk7CiAgICAgICAgICAgICAgICBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJvcGVuTGluayIpKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSByZXNwb25zZVsib3BlbkxpbmsiXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoImFsZXJ0IikpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJhbGVydCJdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoIndpemFyZCIpKSB7CiAgICAgICAgICAgICAgICBjcmVhdGVMYXlvdXQoKTsKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25XaXphcmRbcmVzcG9uc2VbIndpemFyZCJdXS5jcmVhdGVXaXphcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjcmVhdGVMYXlvdXQoKTsKICAgICAgICB9OwogICAgfQp9CmZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7CiAgICB2YXIgdmFsdWUgPSAiOyAiICsgZG9jdW1lbnQuY29va2llOwogICAgdmFyIHBhcnRzID0gdmFsdWUuc3BsaXQoIjsgIiArIG5hbWUgKyAiPSIpOwogICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAyKQogICAgICAgIHJldHVybiBwYXJ0cy5wb3AoKS5zcGxpdCgiOyIpLnNoaWZ0KCk7Cn0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmV0d29yay5qcy5tYXA=" webUI["web/public/js/network.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy9uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sTUFBTTtJQUlWLFlBQVksR0FBVztRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNoQixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFFbEIsa0NBQWtDO1FBQ2xDLFVBQVU7UUFDVixHQUFHO1FBRUgsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRXpCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzVCLCtCQUErQjtZQUMvQixJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDekIsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxSCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixFQUFFLENBQUMsTUFBTSxHQUFHO1lBRVYsWUFBWSxHQUFHLElBQUks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" webUI["web/public/js/option_dialogue.js"] = "Ly8gRnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBvcHRpb24gRGlhbG9ndWUKZnVuY3Rpb24gc2hvd0lQQmluZGluZ0RpYWxvZ3VlKCkgewogICAgdmFyIG15TW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3B1cCcpKTsKICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgY29uc3QgcG9wdXBNb2RhbENvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9wdXBNb2RhbENvbnRlbnQnKTsKICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHBvcHVwTW9kYWxDb250ZW50KTsKICAgIGVkaXRDdXN0b21Qb3BVcENvbnRhaW5lcihmcmFnbWVudCk7CiAgICBhZGRDdXN0b21Qb3BVcENvbnRlbnQoZnJhZ21lbnQpOwogICAgY29uc3QgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcHVwJyk7CiAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5jaGlsZHJlblswXS5hcHBlbmRDaGlsZChmcmFnbWVudCk7CiAgICBzaG93RWxlbWVudCgicG9wdXAiLCB0cnVlKTsKfQpmdW5jdGlvbiBlZGl0Q3VzdG9tUG9wVXBDb250YWluZXIoZnJhZ21lbnQpIHsKICAgIGNvbnN0IHBvcHVwSGVhZGVyID0gZnJhZ21lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcHVwSGVhZGVyJyk7CiAgICBjb25zdCBwb3B1cFJvdyA9IGZyYWdtZW50LmdldEVsZW1lbnRCeUlkKCdwb3B1cFJvdycpOwogICAgY29uc3QgcG9wdXBDdXN0b20gPSBmcmFnbWVudC5nZXRFbGVtZW50QnlJZCgncG9wdXBDdXN0b20nKTsKICAgIC8vIFJlbW92ZSBmb3JtZXIgaGVhZGVyIGFuZCBhZGQgYSBjdXN0b20gb25lCiAgICBjb25zdCBoMyA9IHBvcHVwSGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJ2gzJyk7CiAgICBpZiAoaDMpIHsKICAgICAgICBwb3B1cEhlYWRlci5yZW1vdmVDaGlsZChoMyk7CiAgICB9CiAgICBjb25zdCBoZWFkbGluZSA9IGNyZWF0ZUVsZW1lbnRXaXRoQXR0cmlidXRlcygnaDMnLCB7CiAgICAgICAgY2xhc3M6ICdtb2RhbC10aXRsZScsCiAgICAgICAgaWQ6ICdtb2RhbEhlYWRsaW5lJwogICAgfSk7CiAgICBoZWFkbGluZS50ZXh0Q29udGVudCA9ICdJUCBzZWxlY3Rpb24nOwogICAgcG9wdXBIZWFkZXIuYXBwZW5kQ2hpbGQoaGVhZGxpbmUpOwogICAgY29uc3QgeEJ1dHRvbiA9IGNyZWF0ZUVsZW1lbnRXaXRoQXR0cmlidXRlcygnYnV0dG9uJywgewogICAgICAgIHR5cGU6ICdidXR0b24nLAogICAgICAgIGNsYXNzOiAnYnRuLWNsb3NlJwogICAgfSk7CiAgICBwb3B1cEhlYWRlci5hcHBlbmRDaGlsZCh4QnV0dG9uKTsKICAgIC8vIERlbGV0ZSBhbmQgcmVuZXcgcG9wdXBDdXN0b20KICAgIHBvcHVwQ3VzdG9tLnJlbW92ZSgpOwogICAgY29uc3QgbmV3UG9wdXBDdXN0b20gPSBjcmVhdGVFbGVtZW50V2l0aEF0dHJpYnV0ZXMoJ2RpdicsIHsgaWQ6ICdwb3B1cEN1c3RvbScgfSk7CiAgICBwb3B1cFJvdy5hcHBlbmRDaGlsZChuZXdQb3B1cEN1c3RvbSk7CiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZUVsZW1lbnRXaXRoQXR0cmlidXRlcygndGFibGUnLCB7CiAgICAgICAgaWQ6ICdvcHRpb25UYWJsZScKICAgIH0pOwogICAgbmV3UG9wdXBDdXN0b20uYXBwZW5kQ2hpbGQodGFibGUpOwp9CmZ1bmN0aW9uIGFkZEN1c3RvbVBvcFVwQ29udGVudChmcmFnbWVudCkgewogICAgY29uc3QgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgIGlmICgiY2xpZW50SW5mbyIgaW4gU0VSVkVSKSB7CiAgICAgICAgY29uc3QgYmluZGluZ0lQc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmluZGluZ0lQcycpOwogICAgICAgIGNvbnN0IGJpbmRpbmdJUHMgPSBiaW5kaW5nSVBzRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7CiAgICAgICAgY29uc3QgYmluZGluZ0lQc3BBcnJheSA9IGJpbmRpbmdJUHMuc3BsaXQoIjsiKTsKICAgICAgICBjb25zdCBzeXN0ZW1uSVBzID0gU0VSVkVSWyJjbGllbnRJbmZvIl1bInN5c3RlbUlQcyJdOwogICAgICAgIGNvbnN0IG9wdGlvblRhYmxlID0gZnJhZ21lbnQuZ2V0RWxlbWVudEJ5SWQoJ29wdGlvblRhYmxlJyk7CiAgICAgICAgc3lzdGVtbklQcy5mb3JFYWNoKChpcEFkZHJlc3MsIGluZGV4KSA9PiB7CiAgICAgICAgICAgIGlmICghaXBBZGRyZXNzLmluY2x1ZGVzKCcxNjkuMjU0JykpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKICAgICAgICAgICAgICAgIGNvbnN0IHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CiAgICAgICAgICAgICAgICBjb25zdCB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrYm94ID0gY3JlYXRlQ2hlY2tib3goaXBBZGRyZXNzLCAnaXBDaGVja2JveCcgKyBpbmRleCk7CiAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gYmluZGluZ0lQc3BBcnJheS5pbmNsdWRlcyhpcEFkZHJlc3MpOwogICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgICAgICAgICAgbGFiZWwuc2V0QXR0cmlidXRlKCJmb3IiLCAiaXBDaGVja2JveCIgKyBpbmRleCk7CiAgICAgICAgICAgICAgICBsYWJlbC5pbm5lckhUTUwgPSBpcEFkZHJlc3M7CiAgICAgICAgICAgICAgICB0ZExlZnQuYXBwZW5kQ2hpbGQoY2hlY2tib3gpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBvcHRpb25UYWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb25zdCBjaGVja2JveF9jb250YWluZXIgPSBmcmFnbWVudC5nZXRFbGVtZW50QnlJZCgncG9wdXBDdXN0b20nKTsKICAgICAgICBjaGVja2JveF9jb250YWluZXIudGV4dENvbnRlbnQgPSAnU2VsZWN0IG9uZSBvciBtb3JlIElQKHMpLiBJZiBub25lIGhhcyBiZWVuIHNlbGVjdGVkIHRoZW4gVGhyZWFkZmluIHdpbGwgYmluZCB0byBhbGwgb2YgdGhlbSEnOyAvLyBUaGlzIGRlbGV0ZXMgYWxsIG5vZGVzIGFuZCByZXBsYWNlIHdpdGggdGV4dCEKICAgICAgICBjaGVja2JveF9jb250YWluZXIuYXBwZW5kQ2hpbGQob3B0aW9uVGFibGUpOyAvLyBSZWFwcGVuZCB0aGUgdGFibGUKICAgICAgICBjb25zdCBzYXZlQnV0dG9uID0gY3JlYXRlQnV0dG9uKGNvbnRlbnQsICJidXR0b25VcGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19IiwgJ2phdmFzY3JpcHQ6IHVwZGF0ZUJpbmRpbmdJUHMoKScpOwogICAgICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbihjb250ZW50LCAiYnV0dG9uQ2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIsICdqYXZhc2NyaXB0OiByZXNldFBvcHVwKCknKTsKICAgICAgICBjaGVja2JveF9jb250YWluZXIuYXBwZW5kQ2hpbGQoc2F2ZUJ1dHRvbik7CiAgICAgICAgY2hlY2tib3hfY29udGFpbmVyLmFwcGVuZENoaWxkKGNhbmNlbEJ1dHRvbik7CiAgICAgICAgY29uc3QgaXBTZWxlY3Rpb24gPSBmcmFnbWVudC5nZXRFbGVtZW50QnlJZCgncG9wdXBIZWFkZXInKTsKICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGlwU2VsZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5idG4tY2xvc2UnKTsKICAgICAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHJlc2V0UG9wdXAoKSk7CiAgICB9Cn0KZnVuY3Rpb24gY3JlYXRlQnV0dG9uKGNvbnRlbnQsIGlkLCB0ZXh0LCBvbkNsaWNrKSB7CiAgICByZXR1cm4gY3JlYXRlSW5wdXQoJ2J1dHRvbicsIGlkLCB0ZXh0LCB7ICdvbmNsaWNrJzogb25DbGljayB9KTsKfQpmdW5jdGlvbiBjcmVhdGVDaGVja2JveChuYW1lLCBpZCA9ICcnKSB7CiAgICByZXR1cm4gY3JlYXRlSW5wdXQoJ2NoZWNrYm94JywgbmFtZSwge30sIHsgaWQ6IGlkIH0pOwp9CmZ1bmN0aW9uIHJlc2V0UG9wdXAoKSB7CiAgICAvLyByZW1vdmUgY2FuY2VsIHgtYnV0dG9uIGFuZCBoZWFkbGluZSBmcm9tIHBvcHVwSGVhZGVyCiAgICBjb25zdCBwb3B1cEhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3B1cEhlYWRlcicpOwogICAgcG9wdXBIZWFkZXIucmVtb3ZlQ2hpbGQocG9wdXBIZWFkZXIucXVlcnlTZWxlY3RvcignYnV0dG9uJykpOwogICAgcG9wdXBIZWFkZXIucmVtb3ZlQ2hpbGQocG9wdXBIZWFkZXIucXVlcnlTZWxlY3RvcignaDMnKSk7CiAgICAvLyByZW1vdmUgZXhpc3RpbmcgcG9wdXBDdXN0b20KICAgIGNvbnN0IG9wdGlvbnNEaWFsb2d1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3B1cEN1c3RvbScpOwogICAgb3B0aW9uc0RpYWxvZ3VlLnJlbW92ZSgpOwogICAgLy8gYWRkIG5ldyBwb3B1cAogICAgY29uc3QgcG9wdXBSb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9wdXBSb3cnKTsKICAgIGNvbnN0IG5ld1BvcHVwQ3VzdG9tID0gY3JlYXRlRWxlbWVudFdpdGhBdHRyaWJ1dGVzKCdkaXYnLCB7CiAgICAgICAgaWQ6ICdwb3B1cEN1c3RvbScKICAgIH0pOwogICAgcG9wdXBSb3cuYXBwZW5kQ2hpbGQobmV3UG9wdXBDdXN0b20pOwogICAgLy8gZG9uJ3Qgc2hvdyB0aGUgcG9wdXAgYW55bW9yZQogICAgc2hvd0VsZW1lbnQoJ3BvcHVwJywgZmFsc2UpOwp9CmZ1bmN0aW9uIHVwZGF0ZUJpbmRpbmdJUHMoKSB7CiAgICBjb25zdCBjaGVja2JveFRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29wdGlvblRhYmxlJyk7CiAgICBjb25zdCBjaGVja2JveExpc3QgPSBjaGVja2JveFRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKTsKICAgIC8vIGdldCBjaGVja2VkIGJveGVzIGFuZCBjcmVhdGUgYXJyYXkKICAgIHZhciBiaW5kaW5nSVBzID0gQXJyYXkuZnJvbShjaGVja2JveExpc3QpCiAgICAgICAgLmZpbHRlcihjaGVja2JveCA9PiBjaGVja2JveC5jaGVja2VkKQogICAgICAgIC5tYXAoY2hlY2tib3ggPT4gY2hlY2tib3gubmFtZSk7CiAgICBjb25zdCBiaW5kaW5nSVBzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaW5kaW5nSVBzJyk7CiAgICBpZiAoYmluZGluZ0lQcy5sZW5ndGggPT09IDApIHsKICAgICAgICAvLyBzZXQgdmFsdWUgdG8gbm9uZQogICAgICAgIGJpbmRpbmdJUHNFbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnJyk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAvLyBpbnNlcnQgdGhlIHZhbHVlcyBmcm9tIHRoZSBhcnJheQogICAgICAgIGJpbmRpbmdJUHNFbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCBiaW5kaW5nSVBzLmpvaW4oJzsnKSArICI7Iik7CiAgICB9CiAgICAvLyB0ZWxsIGFib3V0IHRoZSBjaGFuZ2UKICAgIGJpbmRpbmdJUHNFbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnY2hhbmdlZCcpOwogICAgLy8gcmVzZXRQb3B1cCBmb3IgdGhlIG5leHQgcnVuCiAgICByZXNldFBvcHVwKCk7Cn0KZnVuY3Rpb24gY3JlYXRlSW5wdXQodHlwZSwgbmFtZSwgdmFsdWUsIGF0dHJpYnV0ZSA9IHt9KSB7CiAgICByZXR1cm4gY3JlYXRlRWxlbWVudFdpdGhBdHRyaWJ1dGVzKCdpbnB1dCcsIE9iamVjdC5hc3NpZ24oeyB0eXBlLCBuYW1lLCB2YWx1ZSB9LCBhdHRyaWJ1dGUpKTsKfQpmdW5jdGlvbiBjcmVhdGVFbGVtZW50V2l0aEF0dHJpYnV0ZXModGFnLCBhdHRyaWJ1dGVzKSB7CiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykgewogICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTsKICAgIH0KICAgIHJldHVybiBlbGVtZW50Owp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wdGlvbl9kaWFsb2d1ZS5qcy5tYXA=" webUI["web/public/js/option_dialogue.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uX2RpYWxvZ3VlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RzL29wdGlvbl9kaWFsb2d1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsU0FBUyxxQkFBcUI7SUFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNuRCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2RSxRQUFRLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFaEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLFFBQTBCO0lBQzFELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNwRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTNELDRDQUE0QztJQUM1QyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDUCxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRywyQkFBMkIsQ0FBQyxJQUFJLEVBQUU7UUFDakQsS0FBSyxFQUFFLGFBQWE7UUFDcEIsRUFBRSxFQUFFLGVBQWU7S0FDcEIsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFDdEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVsQyxNQUFNLE9BQU8sR0FBRywyQkFBMkIsQ0FBQyxRQUFRLEVBQUU7UUFDcEQsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsV0FBVztLQUNuQixDQUFDLENBQUM7SUFDSCxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWpDLCtCQUErQjtJQUMvQixXQUFXLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDcEIsTUFBTSxjQUFjLEdBQUcsMkJBQTJCLENBQUMsS0FBSyxFQUFFLEVBQUMsRUFBRSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUM7SUFFL0UsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBRywyQkFBMkIsQ0FBQyxPQUFPLEVBQUU7UUFDakQsRUFBRSxFQUFFLGFBQWE7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUVwQyxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxRQUEwQjtJQUN2RCxNQUFNLE9BQU8sR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVqRCxJQUFJLFlBQVksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFxQixDQUFDO1FBQ3BGLE1BQU0sVUFBVSxHQUFXLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsTUFBTSxVQUFVLEdBQWtCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTNELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFN0MsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLFNBQVMsRUFBRSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ2pFLFFBQVEsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUV4RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUU1QixNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QixFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QixXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRSxrQkFBa0IsQ0FBQyxXQUFXLEdBQUcsOEZBQThGLENBQUMsQ0FBQyxnREFBZ0Q7UUFDakwsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMscUJBQXFCO1FBRWxFLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDakgsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUM3RyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0Msa0JBQWtCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTdDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xFLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE9BQXFCLEVBQUUsRUFBVSxFQUFFLElBQVksRUFBRSxPQUFnQjtJQUNyRixPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsQ0FBcUIsQ0FBQTtBQUNsRixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRTtJQUNuRCxPQUFPLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUMsQ0FBcUIsQ0FBQTtBQUN4RSxDQUFDO0FBRUQsU0FBUyxVQUFVO0lBRWpCLHVEQUF1RDtJQUN2RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzVELFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRXhELDhCQUE4QjtJQUM5QixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9ELGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUV6QixnQkFBZ0I7SUFDaEIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRywyQkFBMkIsQ0FBQyxLQUFLLEVBQUU7UUFDeEQsRUFBRSxFQUFFLGFBQWE7S0FDbEIsQ0FBQyxDQUFBO0lBQ0YsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUVwQywrQkFBK0I7SUFDL0IsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUM3QixDQUFDO0FBRUQsU0FBUyxnQkFBZ0I7SUFDdkIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3RCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM5RSxxQ0FBcUM7SUFDckMsSUFBSSxVQUFVLEdBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUUsUUFBNkIsQ0FBQyxPQUFPLENBQUM7U0FDMUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUUsUUFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLG9CQUFvQjtRQUNwQixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzdDLENBQUM7U0FBTSxDQUFDO1FBQ04sbUNBQW1DO1FBQ25DLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0Qsd0JBQXdCO0lBQ3hCLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsOEJBQThCO0lBQzlCLFVBQVUsRUFBRSxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxFQUFFO0lBQ3BELE9BQU8sMkJBQTJCLENBQUMsT0FBTyxrQkFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSyxTQUFTLEVBQUcsQ0FBQztBQUNuRixDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxHQUFXLEVBQUUsVUFBa0I7SUFDbEUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIn0=" webUI["web/public/js/server_information.js"] = "Y2xhc3MgU2VydmVySW5mb3JtYXRpb24gewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VydmVyX2luZm9ybWF0aW9uJyk7CiAgICAgICAgY29uc3QgbW9kYWxEaWFsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIG1vZGFsRGlhbG9ndWUuY2xhc3NOYW1lID0gJ21vZGFsLWRpYWxvZyBtb2RhbC14bCc7CiAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobW9kYWxEaWFsb2d1ZSk7CiAgICAgICAgY29uc3QgbW9kYWxDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgbW9kYWxDb250ZW50LmNsYXNzTmFtZSA9ICdtb2RhbC1jb250ZW50JzsKICAgICAgICBtb2RhbERpYWxvZ3VlLmFwcGVuZENoaWxkKG1vZGFsQ29udGVudCk7CiAgICAgICAgY29uc3QgbW9kYWxIZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBtb2RhbEhlYWRlci5jbGFzc05hbWUgPSAnbW9kYWwtaGVhZGVyJzsKICAgICAgICBtb2RhbENvbnRlbnQuYXBwZW5kQ2hpbGQobW9kYWxIZWFkZXIpOwogICAgICAgIGNvbnN0IG1vZGFsVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpOwogICAgICAgIG1vZGFsVGl0bGUuY2xhc3NOYW1lID0gJ21vZGFsLXRpdGxlJzsKICAgICAgICBtb2RhbFRpdGxlLmlubmVySFRNTCA9ICd7ey5zZXJ2ZXJJbmZvLnRpdGxlfX0nOwogICAgICAgIG1vZGFsSGVhZGVyLmFwcGVuZENoaWxkKG1vZGFsVGl0bGUpOwogICAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgY2xvc2VCdXR0b24uY2xhc3NOYW1lID0gJ2J0bi1jbG9zZSBidG4tY2xvc2Utd2hpdGUnOwogICAgICAgIGNsb3NlQnV0dG9uLnR5cGUgPSAnYnV0dG9uJzsKICAgICAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICdmYWxzZScpOwogICAgICAgIH0pOwogICAgICAgIGNsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGF0YS1icy1kaXNtaXNzJywgJ21vZGFsJyk7CiAgICAgICAgLy9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnQ2xvc2UnKTsKICAgICAgICBtb2RhbEhlYWRlci5hcHBlbmRDaGlsZChjbG9zZUJ1dHRvbik7CiAgICAgICAgY29uc3QgbW9kYWxCb2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgbW9kYWxCb2R5LmNsYXNzTmFtZSA9ICdtb2RhbC1ib2R5JzsKICAgICAgICBjb25zdCBjb250YWluZXJGbHVpZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGNvbnRhaW5lckZsdWlkLmNsYXNzTmFtZSA9ICdjb250YWluZXItZmx1aWQnOwogICAgICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIHJvdy5jbGFzc05hbWUgPSAncm93JzsKICAgICAgICBjb250YWluZXJGbHVpZC5hcHBlbmRDaGlsZChyb3cpOwogICAgICAgIG1vZGFsQm9keS5hcHBlbmRDaGlsZChjb250YWluZXJGbHVpZCk7CiAgICAgICAgbW9kYWxDb250ZW50LmFwcGVuZENoaWxkKG1vZGFsQm9keSk7CiAgICB9CiAgICBhZGRDb250ZW50KGNvbnRlbnQpIHsKICAgICAgICBjb25zdCByb3cgPSB0aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyb3cnKVswXTsKICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGNvbnRlbnQpIHsKICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGdyb3VwLkdyb3VwSFRNTEVsZW1lbnQpOwogICAgICAgIH0KICAgIH0KfQpjbGFzcyBTZXJ2ZXJJbmZvcm1hdGlvbkdyb3VwIHsKICAgIGNvbnN0cnVjdG9yKHRpdGxlKSB7CiAgICAgICAgY29uc3QgZ3JvdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBncm91cC5jbGFzc05hbWUgPSAnY2FyZCB0ZXh0LWJnLWRhcmsgbWItMyc7CiAgICAgICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgaGVhZGVyLmNsYXNzTmFtZSA9ICdjYXJkLWhlYWRlcic7CiAgICAgICAgaGVhZGVyLmlubmVySFRNTCA9IHRpdGxlOwogICAgICAgIHRoaXMuSGVhZGVyID0gaGVhZGVyOwogICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBib2R5LmNsYXNzTmFtZSA9ICdjYXJkLWJvZHknOwogICAgICAgIHRoaXMuQm9keSA9IGJvZHk7CiAgICAgICAgZ3JvdXAuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICBncm91cC5hcHBlbmRDaGlsZCh0aGlzLkJvZHkpOwogICAgICAgIHRoaXMuR3JvdXBIVE1MRWxlbWVudCA9IGdyb3VwOwogICAgfQogICAgYWRkQm9keUNvbnRlbnQoaXRlbSkgewogICAgICAgIHN3aXRjaCAoaXRlbSkgewogICAgICAgICAgICBjYXNlICd2ZXJzaW9uJzoKICAgICAgICAgICAgICAgIHRoaXMuQm9keS5hcHBlbmRDaGlsZCh0aGlzLmFkZExhYmVsKGl0ZW0sICd7ey5zZXJ2ZXJJbmZvLmxhYmVsLnZlcnNpb259fScpKTsKICAgICAgICAgICAgICAgIHRoaXMuQm9keS5hcHBlbmRDaGlsZCh0aGlzLmFkZFRleHRJbnB1dChpdGVtLCB0cnVlKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZXJyb3JzJzoKICAgICAgICAgICAgICAgIHRoaXMuQm9keS5hcHBlbmRDaGlsZCh0aGlzLmFkZExhYmVsKGl0ZW0sICd7ey5zZXJ2ZXJJbmZvLmxhYmVsLmVycm9yc319JykpOwogICAgICAgICAgICAgICAgdGhpcy5Cb2R5LmFwcGVuZENoaWxkKHRoaXMuYWRkVGV4dElucHV0KGl0ZW0sIHRydWUpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd3YXJuaW5ncyc6CiAgICAgICAgICAgICAgICB0aGlzLkJvZHkuYXBwZW5kQ2hpbGQodGhpcy5hZGRMYWJlbChpdGVtLCAne3suc2VydmVySW5mby5sYWJlbC53YXJuaW5nc319JykpOwogICAgICAgICAgICAgICAgdGhpcy5Cb2R5LmFwcGVuZENoaWxkKHRoaXMuYWRkVGV4dElucHV0KGl0ZW0sIHRydWUpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkdnInOgogICAgICAgICAgICAgICAgdGhpcy5Cb2R5LmFwcGVuZENoaWxkKHRoaXMuYWRkTGFiZWwoaXRlbSwgJ3t7LnNlcnZlckluZm8ubGFiZWwuZHZyfX0nKSk7CiAgICAgICAgICAgICAgICB0aGlzLkJvZHkuYXBwZW5kQ2hpbGQodGhpcy5hZGRUZXh0SW5wdXQoaXRlbSwgdHJ1ZSkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3N0cmVhbXMnOgogICAgICAgICAgICAgICAgdGhpcy5Cb2R5LmFwcGVuZENoaWxkKHRoaXMuYWRkTGFiZWwoaXRlbSwgJ3t7LnNlcnZlckluZm8ubGFiZWwuc3RyZWFtc319JykpOwogICAgICAgICAgICAgICAgdGhpcy5Cb2R5LmFwcGVuZENoaWxkKHRoaXMuYWRkVGV4dElucHV0KGl0ZW0sIHRydWUpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd4ZXBnJzoKICAgICAgICAgICAgICAgIHRoaXMuQm9keS5hcHBlbmRDaGlsZCh0aGlzLmFkZExhYmVsKGl0ZW0sICd7ey5zZXJ2ZXJJbmZvLmxhYmVsLnhlcGd9fScpKTsKICAgICAgICAgICAgICAgIHRoaXMuQm9keS5hcHBlbmRDaGlsZCh0aGlzLmFkZFRleHRJbnB1dChpdGVtLCB0cnVlKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnbTN1VXJsJzoKICAgICAgICAgICAgICAgIHRoaXMuQm9keS5hcHBlbmRDaGlsZCh0aGlzLmFkZExhYmVsKGl0ZW0sICd7ey5zZXJ2ZXJJbmZvLmxhYmVsLm0zdVVybH19JykpOwogICAgICAgICAgICAgICAgdGhpcy5Cb2R5LmFwcGVuZENoaWxkKHRoaXMuYWRkQ29udGFpbmVyKGl0ZW0pKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd4ZXBnVXJsJzoKICAgICAgICAgICAgICAgIHRoaXMuQm9keS5hcHBlbmRDaGlsZCh0aGlzLmFkZExhYmVsKGl0ZW0sICd7ey5zZXJ2ZXJJbmZvLmxhYmVsLnhlcGdVcmx9fScpKTsKICAgICAgICAgICAgICAgIHRoaXMuQm9keS5hcHBlbmRDaGlsZCh0aGlzLmFkZENvbnRhaW5lcihpdGVtKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnY2hhbmdlVmVyc2lvbic6CiAgICAgICAgICAgICAgICB0aGlzLkJvZHkuYXBwZW5kQ2hpbGQodGhpcy5hZGRCdXR0b25JbnB1dChpdGVtKSk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVW5rbm93biBpdGVtOiAnLCBpdGVtKTsKICAgICAgICB9CiAgICB9CiAgICBhZGRMYWJlbChmb3JWYWx1ZSwgdGV4dCkgewogICAgICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTsKICAgICAgICBsYWJlbC5jbGFzc05hbWUgPSAnZm9ybS1sYWJlbCc7CiAgICAgICAgbGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCBmb3JWYWx1ZSk7CiAgICAgICAgbGFiZWwuaW5uZXJIVE1MID0gdGV4dDsKICAgICAgICByZXR1cm4gbGFiZWw7CiAgICB9CiAgICBhZGRUZXh0SW5wdXQoaWQsIGRpc2FibGVkID0gZmFsc2UpIHsKICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgaW5wdXQudHlwZSA9ICd0ZXh0JzsKICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAnZm9ybS1jb250cm9sJzsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsICdiYXNpYy1hZGRvbjMnKTsKICAgICAgICBpbnB1dC5yZWFkT25seSA9IHRydWU7CiAgICAgICAgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgICAgIGlucHV0LmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgYWRkQnV0dG9uSW5wdXQoaWQpIHsKICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgaW5wdXQudHlwZSA9ICdidXR0b24nOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7CiAgICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgYWRkQ29udGFpbmVyKGlkKSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICdpbnB1dC1ncm91cCc7CiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuYWRkVGV4dElucHV0KGlkKSk7CiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuYWRkQnV0dG9uKGlkKSk7CiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjsKICAgIH0KICAgIGFkZEJ1dHRvbihpZCkgewogICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgICAgIGJ1dHRvbi50eXBlID0gJ2J1dHRvbic7CiAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdpbnB1dC1ncm91cC10ZXh0IGNvcHktYnRuJzsKICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWNsaXBib2FyZC10YXJnZXQnLCAnIycgKyBpZCk7CiAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnZGF0YS1icy10b2dnbGUnLCAndG9vbHRpcCcpOwogICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtcGxhY2VtZW50JywgJ2JvdHRvbScpOwogICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGl0bGUnLCAnQ29weSB0byBjbGlwYm9hcmQnKTsKICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdhbHQnLCAnJyk7CiAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjMzMzJzsKICAgICAgICBidXR0b24uc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzQ0NCc7CiAgICAgICAgYnV0dG9uLmlubmVySFRNTCA9ICc8aSBjbGFzcz0iZmFyIGZhLWNsaXBib2FyZCBmYS1zdHlsZSI+PC9pPic7CiAgICAgICAgcmV0dXJuIGJ1dHRvbjsKICAgIH0KfQpjbGFzcyBTZXJ2ZXJJbmZvcm1hdGlvbkl0ZW0gZXh0ZW5kcyBTZXJ2ZXJJbmZvcm1hdGlvbkdyb3VwIHsKICAgIGNvbnN0cnVjdG9yKGdyb3VwVGl0bGUsIGl0ZW1zKSB7CiAgICAgICAgc3VwZXIoZ3JvdXBUaXRsZSk7CiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zLnNwbGl0KCcsJykpIHsKICAgICAgICAgICAgdGhpcy5hZGRCb2R5Q29udGVudChpdGVtKTsKICAgICAgICB9CiAgICB9Cn0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VydmVyX2luZm9ybWF0aW9uLmpzLm1hcA==" webUI["web/public/js/server_information.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyX2luZm9ybWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RzL3NlcnZlcl9pbmZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGlCQUFpQjtJQUduQjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsYUFBYSxDQUFDLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUV6QyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELFlBQVksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDO1FBQ3pDLGFBQWEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFdkMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxXQUFXLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUN2QyxZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBR3JDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsVUFBVSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7UUFDckMsVUFBVSxDQUFDLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQztRQUMvQyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsV0FBVyxDQUFDLFNBQVMsR0FBRywyQkFBMkIsQ0FBQztRQUNwRCxX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" - webUI["web/public/js/settings.js"] = "Y2xhc3MgU2V0dGluZ3NDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihoZWFkbGluZSwgc2V0dGluZ3NLZXlzKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gJ2NvbnRlbnRfc2V0dGluZ3MnOwogICAgICAgIHRoaXMuQ29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5zZXR0aW5nc0tleXMgPSBzZXR0aW5nc0tleXM7CiAgICB9CiAgICBjcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCB0aXRsZSkgewogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsnc2V0dGluZ3MnXVtzZXR0aW5nc0tleV07CiAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1REJyk7CiAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9IHRpdGxlICsgJzonOwogICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEQnKTsKICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLkNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCAnamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAiY2hhbmdlZCInKTsKICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgdGl0bGUsIHBsYWNlaG9sZGVyLCBzZXRJRCA9IGZhbHNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSBTRVJWRVJbJ3NldHRpbmdzJ11bc2V0dGluZ3NLZXldOwogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEQnKTsKICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gdGl0bGUgKyAnOic7CiAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgIHZhciBpbnB1dCA9IHRoaXMuQ29udGVudC5jcmVhdGVJbnB1dCgndGV4dCcsIHNldHRpbmdzS2V5LCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCBwbGFjZWhvbGRlcik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIicpOwogICAgICAgIGlmIChzZXRJRCkgewogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2V0dGluZ3NLZXkpOwogICAgICAgIH0KICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZVNlbGVjdElucHV0KHNldHRpbmdzS2V5LCB0aXRsZSwgdGV4dCwgdmFsdWVzKSB7CiAgICAgICAgdmFyIGRhdGEgPSBTRVJWRVJbJ3NldHRpbmdzJ11bc2V0dGluZ3NLZXldOwogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEQnKTsKICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gdGl0bGUgKyAnOic7CiAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgIHZhciBzZWxlY3QgPSB0aGlzLkNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgJ2phdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gImNoYW5nZWQiJyk7CiAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBzZXR0aW5nOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnSDQnKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSFIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdIUicpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlU2V0dGluZ3Moc2V0dGluZ3NLZXkpIHsKICAgICAgICB2YXIgc2V0dGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1RSJyk7CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAvLyBUZXh0IGlucHV0cwogICAgICAgICAgICBjYXNlICd1cGRhdGUnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MudXBkYXRlLnRpdGxlfX0nLCAne3suc2V0dGluZ3MudXBkYXRlLnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdiYWNrdXAucGF0aCc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5iYWNrdXBQYXRoLnRpdGxlfX0nLCAne3suc2V0dGluZ3MuYmFja3VwUGF0aC5wbGFjZWhvbGRlcn19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndGVtcC5wYXRoJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLnRlbXBQYXRoLnRpdGxlfX0nLCAne3suc2V0dGluZ3MudG1wUGF0aC5wbGFjZWhvbGRlcn19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndXNlci5hZ2VudCc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy51c2VyQWdlbnQudGl0bGV9fScsICd7ey5zZXR0aW5ncy51c2VyQWdlbnQucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2J1ZmZlci50aW1lb3V0JzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmJ1ZmZlclRpbWVvdXQudGl0bGV9fScsICd7ey5zZXR0aW5ncy5idWZmZXJUaW1lb3V0LnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdmZm1wZWcucGF0aCc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5mZm1wZWdQYXRoLnRpdGxlfX0nLCAne3suc2V0dGluZ3MuZmZtcGVnUGF0aC5wbGFjZWhvbGRlcn19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZmZtcGVnLm9wdGlvbnMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuZmZtcGVnT3B0aW9ucy50aXRsZX19JywgJ3t7LnNldHRpbmdzLmZmbXBlZ09wdGlvbnMucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3ZsYy5wYXRoJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLnZsY1BhdGgudGl0bGV9fScsICd7ey5zZXR0aW5ncy52bGNQYXRoLnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd2bGMub3B0aW9ucyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy52bGNPcHRpb25zLnRpdGxlfX0nLCAne3suc2V0dGluZ3MudmxjT3B0aW9ucy5wbGFjZWhvbGRlcn19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYmluZGluZ0lQcyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5iaW5kaW5nSVBzLnRpdGxlfX0nLCAne3suc2V0dGluZ3MuYmluZGluZ0lQcy5wbGFjZWhvbGRlcn19JywgdHJ1ZSk7CiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHNldHRpbmcucXVlcnlTZWxlY3RvcignaW5wdXRbaWQ9JyArIHNldHRpbmdzS2V5ICsgJ10nKTsKICAgICAgICAgICAgICAgIGlmIChudWxsICE9IGlucHV0KSB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJUEJpbmRpbmdEaWFsb2d1ZSgpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2VwZ0NhdGVnb3JpZXMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllcy50aXRsZX19JywgJ3t7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2VwZ0NhdGVnb3JpZXNDb2xvcnMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllc0NvbG9ycy50aXRsZX19JywgJ3t7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXNDb2xvcnMucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3RocmVhZGZpbkRvbWFpbic6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy50aHJlYWRmaW5Eb21haW4udGl0bGV9fScsICd7ey5zZXR0aW5ncy50aHJlYWRmaW5Eb21haW4ucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3VkcHh5JzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLnVkcHh5LnRpdGxlfX0nLCAne3suc2V0dGluZ3MudWRweHkucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIENoZWNrYm94ZW4KICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24ud2ViJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbldFQi50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24ucG1zJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblBNUy50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24ubTN1JzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbk0zVS50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24ueG1sJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblhNTC50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24uYXBpJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZmlsZXMudXBkYXRlJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5maWxlc1VwZGF0ZS50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnY2FjaGUuaW1hZ2VzJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5jYWNoZUltYWdlcy50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAneGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5yZXBsYWNlRW1wdHlJbWFnZXMudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3hlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5yZXBsYWNlQ2hhbm5lbFRpdGxlLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzdG9yZUJ1ZmZlckluUkFNJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5zdG9yZUJ1ZmZlckluUkFNLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdidWZmZXIuYXV0b1JlY29ubmVjdCc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuYXV0b1JlY29ubmVjdC50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnb21pdFBvcnRzJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5vbWl0UG9ydHMudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZvcmNlSHR0cHMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2V0dGluZ3NDaGVja2JveChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmZvcmNlSHR0cHMudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3VzZUh0dHBzJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy51c2VIdHRwcy50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZm9yY2VDbGllbnRIdHRwcyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuZm9yY2VDbGllbnRIdHRwcy50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZG9tYWluVXNlSHR0cHMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2V0dGluZ3NDaGVja2JveChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmRvbWFpblVzZUh0dHBzLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdlbmFibGVOb25Bc2NpaSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuZW5hYmxlTm9uQXNjaWkudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ1RocmVhZGZpbkF1dG9VcGRhdGUnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2V0dGluZ3NDaGVja2JveChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLlRocmVhZGZpbkF1dG9VcGRhdGUudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NzZHAnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2V0dGluZ3NDaGVja2JveChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLnNzZHAudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2R1bW15JzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5kdW1teS50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaWdub3JlRmlsdGVycyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuaWdub3JlRmlsdGVycy50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYXBpJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5hcGkudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIFNlbGVjdAogICAgICAgICAgICBjYXNlICdkdW1teUNoYW5uZWwnOgogICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ3t7LnNldHRpbmdzLmR1bW15Q2hhbm5lbC50aXRsZX19JzsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWydQUFYnLCAnMzAgTWludXRlcycsICc2MCBNaW51dGVzJywgJzkwIE1pbnV0ZXMnLCAnMTIwIE1pbnV0ZXMnLCAnMTgwIE1pbnV0ZXMnLCAnMjQwIE1pbnV0ZXMnLCAnMzYwIE1pbnV0ZXMnXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbJ1BQVicsICczMF9NaW51dGVzJywgJzYwX01pbnV0ZXMnLCAnOTBfTWludXRlcycsICcxMjBfTWludXRlcycsICcxODBfTWludXRlcycsICcyNDBfTWludXRlcycsICczNjBfTWludXRlcyddOwogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2VsZWN0SW5wdXQoc2V0dGluZ3NLZXksIHRpdGxlLCB0ZXh0LCB2YWx1ZXMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3R1bmVyJzoKICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICd7ey5zZXR0aW5ncy50dW5lci50aXRsZX19JzsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDA7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChpKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNlbGVjdElucHV0KHNldHRpbmdzS2V5LCB0aXRsZSwgdGV4dCwgdmFsdWVzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdlcGdTb3VyY2UnOgogICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ3t7LnNldHRpbmdzLmVwZ1NvdXJjZS50aXRsZX19JzsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWydQTVMnLCAnWEVQRyddOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsnUE1TJywgJ1hFUEcnXTsKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNlbGVjdElucHV0KHNldHRpbmdzS2V5LCB0aXRsZSwgdGV4dCwgdmFsdWVzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdiYWNrdXAua2VlcCc6CiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAne3suc2V0dGluZ3MuYmFja3VwS2VlcC50aXRsZX19JzsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyc1JywgJzEwJywgJzIwJywgJzMwJywgJzQwJywgJzUwJ107CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyc1JywgJzEwJywgJzIwJywgJzMwJywgJzQwJywgJzUwJ107CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZWxlY3RJbnB1dChzZXR0aW5nc0tleSwgdGl0bGUsIHRleHQsIHZhbHVlcyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYnVmZmVyLnNpemUua2InOgogICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ3t7LnNldHRpbmdzLmJ1ZmZlclNpemUudGl0bGV9fSc7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsnMC41IE1CJywgJzEgTUInLCAnMiBNQicsICczIE1CJywgJzQgTUInLCAnNSBNQicsICc2IE1CJywgJzcgTUInLCAnOCBNQiddOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsnNTEyJywgJzEwMjQnLCAnMjA0OCcsICczMDcyJywgJzQwOTYnLCAnNTEyMCcsICc2MTQ0JywgJzcxNjgnLCAnODE5MiddOwogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2VsZWN0SW5wdXQoc2V0dGluZ3NLZXksIHRpdGxlLCB0ZXh0LCB2YWx1ZXMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2J1ZmZlcic6CiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAne3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLnRpdGxlfX0nOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbJ3t7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX2ZhbHNlfX0nLCAnRkZtcGVnOiAoe3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fZmZtcGVnfX0pJywgJ1ZMQzogKHt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX3ZsY319KScsICdUaHJlYWRmaW46ICh7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcuaW5mb190aHJlYWRmaW59fSknXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbJy0nLCAnZmZtcGVnJywgJ3ZsYycsICd0aHJlYWRmaW4nXTsKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNlbGVjdElucHV0KHNldHRpbmdzS2V5LCB0aXRsZSwgdGV4dCwgdmFsdWVzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd3ZWJjbGllbnQubGFuZ3VhZ2UnOgogICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ3t7LnNldHRpbmdzLndlYmNsaWVudC5sYW5ndWFnZS50aXRsZX19JzsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWydFbmdsaXNoJywgJ0RldXRzY2gnXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbJ2VuJywgJ2RlJ107CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZWxlY3RJbnB1dChzZXR0aW5nc0tleSwgdGl0bGUsIHRleHQsIHZhbHVlcyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgLy8gQnV0dG9uCiAgICAgICAgICAgIGNhc2UgJ3VwbG9hZEN1c3RvbUltYWdlJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdUUicpOwogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1REJyk7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gJ3t7LnNldHRpbmdzLnVwbG9hZEN1c3RvbUltYWdlLnRpdGxlfX0nICsgJzonOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IHRoaXMuQ29udGVudC5jcmVhdGVJbnB1dCgnYnV0dG9uJywgJ3VwbG9hZCcsICd7ey5idXR0b24udXBsb2FkQ3VzdG9tSW1hZ2V9fScpOwogICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiB1cGxvYWRDdXN0b21JbWFnZSgpOycpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChidXR0b24pOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KSB7CiAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICB2YXIgdGV4dDsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLndlYic6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uV0VCLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLm0zdSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uTTNVLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLnBtcyc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uUE1TLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLnhtbCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uWE1MLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLmFwaSc6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWydzZXR0aW5ncyddWydhdXRoZW50aWNhdGlvbi53ZWInXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd1cGxvYWRDdXN0b21JbWFnZSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnVwbG9hZEN1c3RvbUltYWdlLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ1RocmVhZGZpbkF1dG9VcGRhdGUnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5UaHJlYWRmaW5BdXRvVXBkYXRlLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2JpbmRpbmdJUHMnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5iaW5kaW5nSVBzLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2JhY2t1cC5rZWVwJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuYmFja3VwS2VlcC5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdiYWNrdXAucGF0aCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmJhY2t1cFBhdGguZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndGVtcC5wYXRoJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MudGVtcFBhdGguZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYnVmZmVyJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2J1ZmZlci5zaXplLmtiJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuYnVmZmVyU2l6ZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdidWZmZXIuYXV0b1JlY29ubmVjdCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmF1dG9SZWNvbm5lY3QuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc3RvcmVCdWZmZXJJblJBTSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnN0b3JlQnVmZmVySW5SQU0uZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnb21pdFBvcnRzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3Mub21pdFBvcnRzLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZvcmNlSHR0cHMnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5mb3JjZUh0dHBzLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3VzZUh0dHBzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MudXNlSHR0cHMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZm9yY2VDbGllbnRIdHRwcyc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmZvcmNlQ2xpZW50SHR0cHMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndGhyZWFkZmluRG9tYWluJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MudGhyZWFkZmluRG9tYWluLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2VuYWJsZU5vbkFzY2lpJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuZW5hYmxlTm9uQXNjaWkuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZXBnQ2F0ZWdvcmllcyc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZXBnQ2F0ZWdvcmllc0NvbG9ycyc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXNDb2xvcnMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYnVmZmVyLnRpbWVvdXQnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5idWZmZXJUaW1lb3V0LmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3VzZXIuYWdlbnQnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy51c2VyQWdlbnQuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZmZtcGVnLnBhdGgnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5mZm1wZWdQYXRoLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZmbXBlZy5vcHRpb25zJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuZmZtcGVnT3B0aW9ucy5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd2bGMucGF0aCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnZsY1BhdGguZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndmxjLm9wdGlvbnMnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy52bGNPcHRpb25zLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2VwZ1NvdXJjZSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmVwZ1NvdXJjZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0dW5lcic6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnR1bmVyLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3VwZGF0ZSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnVwZGF0ZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdhcGknOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5hcGkuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc3NkcCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnNzZHAuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZmlsZXMudXBkYXRlJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuZmlsZXNVcGRhdGUuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnY2FjaGUuaW1hZ2VzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuY2FjaGVJbWFnZXMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAneGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MucmVwbGFjZUVtcHR5SW1hZ2VzLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3hlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MucmVwbGFjZUNoYW5uZWxUaXRsZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd1ZHB4eSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnVkcHh5LmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3dlYmNsaWVudC5sYW5ndWFnZSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLndlYmNsaWVudC5sYW5ndWFnZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGV4dCA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAnJzsKICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1REJyk7CiAgICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1BSRScpOwogICAgICAgIHByZS5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQocHJlKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KfQpjbGFzcyBTZXR0aW5nc0NhdGVnb3J5SXRlbSBleHRlbmRzIFNldHRpbmdzQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoaGVhZGxpbmUsIHNldHRpbmdzS2V5cykgewogICAgICAgIHN1cGVyKGhlYWRsaW5lLCBzZXR0aW5nc0tleXMpOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh0aGlzLmhlYWRsaW5lKSk7CiAgICAgICAgLy8gVGFiZWxsZSBmw7xyIGRpZSBLYXRlZ29yaWUgZXJzdGVsbGVuCiAgICAgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEFCTEUnKTsKICAgICAgICB2YXIga2V5cyA9IHRoaXMuc2V0dGluZ3NLZXlzLnNwbGl0KCcsJyk7CiAgICAgICAga2V5cy5mb3JFYWNoKHNldHRpbmdzS2V5ID0+IHsKICAgICAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24ucG1zJzoKICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLm0zdSc6CiAgICAgICAgICAgICAgICBjYXNlICdhdXRoZW50aWNhdGlvbi54bWwnOgogICAgICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24uYXBpJzoKICAgICAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWydzZXR0aW5ncyddWydhdXRoZW50aWNhdGlvbi53ZWInXSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5jcmVhdGVTZXR0aW5ncyhzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gdGhpcy5jcmVhdGVEZXNjcmlwdGlvbihzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoZGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHRhYmxlKTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVIUigpKTsKICAgIH0KfQpmdW5jdGlvbiBzaG93U2V0dGluZ3MoKSB7CiAgICBjb25zb2xlLmxvZygnU0VUVElOR1MnKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3NDYXRlZ29yeS5sZW5ndGg7IGkrKykgewogICAgICAgIHNldHRpbmdzQ2F0ZWdvcnlbaV0uY3JlYXRlQ2F0ZWdvcnkoKTsKICAgIH0KfQpmdW5jdGlvbiBzYXZlU2V0dGluZ3MoKSB7CiAgICBjb25zb2xlLmxvZygnU2F2ZSBTZXR0aW5ncycpOwogICAgdmFyIGNtZCA9ICdzYXZlU2V0dGluZ3MnOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50X3NldHRpbmdzJyk7CiAgICB2YXIgc2V0dGluZ3MgPSBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2hhbmdlZCcpOwogICAgdmFyIG5ld1NldHRpbmdzID0gbmV3IE9iamVjdCgpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5ncy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuYW1lOwogICAgICAgIHZhciB2YWx1ZTsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAnSU5QVVQnOgogICAgICAgICAgICAgICAgc3dpdGNoIChzZXR0aW5nc1tpXS50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2V0dGluZ3NbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS5jaGVja2VkOwogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VzZUh0dHBzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5wcm90b2NvbCA9ICdodHRwcyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5wcm90b2NvbCA9ICdodHRwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAzMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0JzoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2V0dGluZ3NbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndXBkYXRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGU7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnVmZmVyLnRpbWVvdXQnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiaW5kaW5nSVBzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzTG9jYWxob3N0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBob3N0bmFtZSA9IFN0cmluZyhsb2NhdGlvbi5ob3N0bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3N0bmFtZSA9PT0gJ2xvY2FsaG9zdCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lID0gJzEyNy4wLjAuMSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZS5pbmNsdWRlcyhob3N0bmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0hvc3RuYW1lID0gbmV3VmFsdWUuc3BsaXQoJzsnKVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdIb3N0bmFtZSA9PT0gJzEyNy4wLjAuMScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKGhvc3RuYW1lLCAnbG9jYWxob3N0Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKGhvc3RuYW1lLCBuZXdIb3N0bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0dGluZ3NbbmFtZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnU0VMRUNUJzoKICAgICAgICAgICAgICAgIG5hbWUgPSBzZXR0aW5nc1tpXS5uYW1lOwogICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgIC8vIFdlbm4gZGVyIFdlcnQgZWluZSBaYWhsIGlzdCwgd2lyZCBkaWVzZXIgYWxzIFphaGwgZ2VzcGVpY2hlcnQKICAgICAgICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbmV3U2V0dGluZ3NbbmFtZV0gPSBwYXJzZUludCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3dlYmNsaWVudC5sYW5ndWFnZScpIHsKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIGRhdGFbJ3NldHRpbmdzJ10gPSBuZXdTZXR0aW5nczsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKfQpmdW5jdGlvbiB1cGxvYWRDdXN0b21JbWFnZSgpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgdXBsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnSU5QVVQnKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnZmlsZScpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgJy5qcGcsLnBuZycpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnbm90VmlzaWJsZScpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgnbmFtZScsICcnKTsKICAgIHVwbG9hZC5pZCA9ICd1cGxvYWQnOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1cGxvYWQpOwogICAgdXBsb2FkLmNsaWNrKCk7CiAgICB1cGxvYWQub25ibHVyID0gZnVuY3Rpb24gKCkgewogICAgICAgIGFsZXJ0KCk7CiAgICB9OwogICAgdXBsb2FkLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBmaWxlbmFtZSA9IHVwbG9hZC5maWxlc1swXS5uYW1lOwogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgIHZhciBmaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzWzBdOwogICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICAgIHZhciBjbWQgPSAndXBsb2FkQ3VzdG9tSW1hZ2UnOwogICAgICAgICAgICAgICAgZGF0YVsnYmFzZTY0J10gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgICAgICAgZGF0YVsnZmlsZW5hbWUnXSA9IGZpbGUubmFtZTsKICAgICAgICAgICAgICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICAgICAgICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICAgICAgICAgIHZhciB1cGRhdGVMb2dvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1pY29uJyk7CiAgICAgICAgICAgICAgICB1cGRhdGVMb2dvLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ28uY2xhc3NOYW1lID0gJ2NoYW5nZWQnOwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ0ZpbGUgY291bGQgbm90IGJlIGxvYWRlZCcpOwogICAgICAgIH0KICAgICAgICB1cGxvYWQucmVtb3ZlKCk7CiAgICAgICAgcmV0dXJuOwogICAgfTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1zZXR0aW5ncy5qcy5tYXA=" - webUI["web/public/js/settings.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHMvc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxnQkFBZ0I7SUFNcEIsWUFBWSxRQUFnQixFQUFFLFlBQW9CO1FBTGxELGVBQVUsR0FBVyxrQkFBa0IsQ0FBQztRQUN4QyxZQUFPLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFLekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQW1CLEVBQUUsS0FBYTtRQUN2RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUUvQixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsT0FB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" - webUI["web/public/js/version_check.js"] = "dmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0KICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH0KICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9CiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH0KICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7CiAgICB9KTsKfTsKZnVuY3Rpb24gZ2V0TmV3ZXN0UmVsZWFzZUZyb21HaXRodWIoKSB7CiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgewogICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7CiAgICAgICAgaWYgKFNFUlZFUi5jbGllbnRJbmZvKSB7CiAgICAgICAgICAgIC8qaWYgKFNFUlZFUi5jbGllbnRJbmZvLmJldGEpIHsKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICB9Ki8KICAgICAgICAgICAgY29uc3QgcmVsZWFzZXNEYXRhID0geWllbGQgZ2V0UmVsZWFzZXMoKTsKICAgICAgICAgICAgaWYgKHJlbGVhc2VzRGF0YSkgewogICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZXMgPSByZWxlYXNlc0RhdGEubWFwKChyZWxlYXNlKSA9PiAoewogICAgICAgICAgICAgICAgICAgIHRhZ19uYW1lOiByZWxlYXNlLnRhZ19uYW1lLAogICAgICAgICAgICAgICAgICAgIHByZXJlbGVhc2U6IHJlbGVhc2UucHJlcmVsZWFzZSwKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gcGFyc2VWZXJzaW9uKFNFUlZFUi5jbGllbnRJbmZvLnZlcnNpb24pOwogICAgICAgICAgICAgICAgdmFyIGxhdGVzdEF2YWlsYWJsZVZlcnNpb247CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSLmNsaWVudEluZm8uYmV0YSkgewogICAgICAgICAgICAgICAgICAgIGxhdGVzdEF2YWlsYWJsZVZlcnNpb24gPSByZWxlYXNlcy5maW5kKHJlbGVhc2UgPT4gcmVsZWFzZS5wcmVyZWxlYXNlID09IHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbGF0ZXN0QXZhaWxhYmxlVmVyc2lvbiA9IHJlbGVhc2VzLmZpbmQocmVsZWFzZSA9PiByZWxlYXNlLnByZXJlbGVhc2UgPT0gZmFsc2UpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29uc3QgbGF0ZXN0UmVsZWFzZVZlcnNpb24gPSBwYXJzZVZlcnNpb24obGF0ZXN0QXZhaWxhYmxlVmVyc2lvbi50YWdfbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAoaXNOZXdlclZlcnNpb24obGF0ZXN0UmVsZWFzZVZlcnNpb24sIGN1cnJlbnRWZXJzaW9uKSkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbl9jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm90aWZpY2F0aW9uX2NvbnRhaW50ZXInKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25UaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub3RpZmljYXRpb25fdGl0bGUnKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RpZmljYWl0b25UZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vdGlmaWNhdGlvbl90ZXh0Jyk7CiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uVGl0bGUuaW5uZXJIVE1MID0gJ3t7Lm5vdGlmaWNhdGlvbi51cGRhdGUudGl0bGV9fSc7CiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2FpdG9uVGV4dC5pbm5lckhUTUwgPSAne3subm90aWZpY2F0aW9uLnVwZGF0ZS5jb250ZW50fX0nOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb3NlTm90aWZpY2F0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZU5vd0J1dHRvbicpOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJ1dHRvbi52YWx1ZSA9ICd7ey5idXR0b24udXBkYXRlfX0nOwogICAgICAgICAgICAgICAgICAgIGNsb3NlQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbl9jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVCdXR0b24udmFsdWUgPSAne3suYnV0dG9uLnVwZGF0aW5nfX0nOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKCJ1cGRhdGVUaHJlYWRmaW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwMDApOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBmZXRjaGluZyByZWxlYXNlcyBvciBubyByZWxlYXNlcyBmb3VuZC4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwp9CmZ1bmN0aW9uIHBhcnNlVmVyc2lvbih2ZXJzaW9uKSB7CiAgICAvLyBUT0RPOiBJbXByb3ZlIHZlcnNpb24gcGFyc2luZwogICAgY29uc3QgcmVnZXggPSAvXnY/KFxkKylcLihcZCspKD86XC4oXGQrKSk/KD86XC4oXGQrKSk/KD86IFwoKFxkKykoPzotKFx3KykpP1wpKT8oPzotKFx3KykpPyQvOwogICAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKHJlZ2V4KTsKICAgIGlmIChtYXRjaCkgewogICAgICAgIGNvbnN0IG1ham9yID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsKICAgICAgICBjb25zdCBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7CiAgICAgICAgY29uc3QgcGF0Y2ggPSBtYXRjaFszXSA/IHBhcnNlSW50KG1hdGNoWzNdLCAxMCkgOiAobWF0Y2hbNF0gPyBwYXJzZUludChtYXRjaFs0XSwgMTApIDogMCk7IC8vIERlZmF1bHQgdG8gMCBpZiBwYXRjaCBpcyBub3QgcHJlc2VudAogICAgICAgIGNvbnN0IGJ1aWxkID0gbWF0Y2hbNF0gPyBwYXJzZUludChtYXRjaFs0XSwgMTApIDogKG1hdGNoWzVdID8gcGFyc2VJbnQobWF0Y2hbNV0sIDEwKSA6IDApOyAvLyBEZWZhdWx0IHRvIDAgaWYgcGF0Y2ggaXMgbm90IHByZXNlbnQKICAgICAgICByZXR1cm4gW21ham9yLCBtaW5vciwgcGF0Y2gsIGJ1aWxkXTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2ZXJzaW9uIGZvcm1hdCIpOwogICAgfQp9CmZ1bmN0aW9uIGlzTmV3ZXJWZXJzaW9uKGxhdGVzdCwgY3VycmVudCkgewogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXRlc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobGF0ZXN0W2ldID4gY3VycmVudFtpXSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKGxhdGVzdFtpXSA8IGN1cnJlbnRbaV0pCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBnZXRSZWxlYXNlcygpIHsKICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9tYXJjZWxHb2VyZW50ei9UaHJlYWRmaW4vcmVsZWFzZXMnKTsKICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBmZXRjaGluZyByZWxlYXNlcy4gU3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCByZWxlYXNlcyA9IHlpZWxkIHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2VzOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcmVsZWFzZXM6JywgZXJyb3IpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9KTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uX2NoZWNrLmpzLm1hcA==" - webUI["web/public/js/version_check.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbl9jaGVjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy92ZXJzaW9uX2NoZWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQWUsMEJBQTBCOztRQUVyQyxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCOztlQUVHO1lBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxXQUFXLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNmLE1BQU0sUUFBUSxHQUFjLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzVELFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtvQkFDMUIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2lCQUNqQyxDQUFDLENBQUMsQ0FBQztnQkFFSixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxzQkFBK0IsQ0FBQztnQkFDcEMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN6QixzQkFBc0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQztnQkFDbEYsQ0FBQztxQkFBTSxDQUFDO29CQUNKLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDO2dCQUNuRixDQUFDO2dCQUNELE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLHNC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" - webUI["web/public/lang/de.json"] = "ew0KICAibWFpbk1lbnUiOiB7DQogICAgIml0ZW0iOiB7DQogICAgICAicGxheWxpc3QiOiAiV2llZGVyZ2FiZWxpc3RlIiwNCiAgICAgICJwbXNJRCI6ICJQTVMgSUQiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIiLA0KICAgICAgInhtbHR2IjogIlhNTFRWIiwNCiAgICAgICJtYXBwaW5nIjogIlp1b3JkbnVuZyIsDQogICAgICAidXNlcnMiOiAiQmVudXR6ZXIiLA0KICAgICAgInNldHRpbmdzIjogIkVpbnN0ZWxsdW5nZW4iLA0KICAgICAgImxvZyI6ICJQcm90b2tvbGwiLA0KICAgICAgImxvZ291dCI6ICJBYm1lbGRlbiINCiAgICB9LA0KICAgICJoZWFkbGluZSI6IHsNCiAgICAgICJwbGF5bGlzdCI6ICJMb2thbGUgb2RlciBlbnRmZXJudGUgV2llZGVyZ2FiZWxpc3RlbiIsDQogICAgICAiZmlsdGVyIjogIldpZWRlcmdhYmVsaXN0ZSBmaWx0ZXJuIiwNCiAgICAgICJ4bWx0diI6ICJMb2thbGUgb2RlciBlbnRmZXJudGUgWE1MVFYtRGF0ZWllbiIsDQogICAgICAibWFwcGluZyI6ICJadW9yZG51bmcgZGVyIFdpZWRlcmdhYmVsaXN0ZW5rYW7DpGxlIHp1IEVQRy1LYW7DpGxlbiIsDQogICAgICAidXNlcnMiOiAiQmVudXR6ZXJ2ZXJ3YWx0dW5nIiwNCiAgICAgICJzZXR0aW5ncyI6ICJFaW5zdGVsbHVuZ2VuIiwNCiAgICAgICJsb2ciOiAiUHJvdG9rb2xsIiwNCiAgICAgICJsb2dvdXQiOiAiQWJtZWxkZW4iDQogICAgfQ0KICB9LA0KICAiY29uZmlybSI6IHsNCiAgICAicmVzdG9yZSI6ICJBbGxlIERhdGVuIHdlcmRlbiBkdXJjaCBkaWUgYXVzIGRlbSBCYWNrdXAgZXJzZXR6dC4gU29sbGVuIGRpZSBEYXRlaWVuIHdpZWRlcmhlcmdlc3RlbGx0IHdlcmRlbj8iDQogIH0sDQogICJhbGVydCI6IHsNCiAgICAiZmlsZUxvYWRpbmdFcnJvciI6ICJEYXRlaSBrb25udGUgbmljaHQgZ2VsYWRlbiB3ZXJkZW4iLA0KICAgICJpbnZhbGlkQ2hhbm5lbE51bWJlciI6ICJVbmfDvGx0aWdlIEthbmFsbnVtbWVyIiwNCiAgICAibWlzc2luZ0lucHV0IjogIkZlaGxlbmRlIEVpbmdhYmUiDQogIH0sDQogICJidXR0b24iOiB7DQogICAgImJhY2siOiAiWnVyw7xjayIsDQogICAgImJhY2t1cCI6ICJCYWNrdXAiLA0KICAgICJidWxrRWRpdCI6ICJNYXNzZW5iZWFyYmVpdHVuZyIsDQogICAgImNhbmNlbCI6ICJBYmJyZWNoZW4iLA0KICAgICJkZWxldGUiOiAiTMO2c2NoZW4iLA0KICAgICJkb25lIjogIkZlcnRpZyIsDQogICAgImxvZ2luIjogIkFubWVsZGVuIiwNCiAgICAibmV3IjogIk5ldSIsDQogICAgIm5leHQiOiAiV2VpdGVyIiwNCiAgICAicmVzdG9yZSI6ICJXaWVkZXJoZXJzdGVsbGVuIiwNCiAgICAic2F2ZSI6ICJTcGVpY2hlcm4iLA0KICAgICJzZWFyY2giOiAiU3VjaGVuIiwNCiAgICAidXBkYXRlIjogIkFrdHVhbGlzaWVyZW4iLA0KICAgICJ1cGRhdGluZyI6ICJBa3R1YWxpc2llcmUuLi4iLA0KICAgICJjcmFldGVBY2NvdW50IjogIktvbnRvIGVyc3RlbGxlbiIsDQogICAgInJlc2V0TG9ncyI6ICJQcm90b2tvbGxlIHp1csO8Y2tzZXR6ZW4iLA0KICAgICJ1cGxvYWRMb2dvIjogIkxvZ28gaG9jaGxhZGVuIiwNCiAgICAidXBsb2FkQ3VzdG9tSW1hZ2UiOiAiQmVudXR6ZXJkZWZpbmllcnRlcyBCaWxkIGhvY2hsYWRlbiIsDQogICAgInNvcnRDaGFubmVsc0FscGhhIjogIkthbsOkbGUgYWxwaGFiZXRpc2NoIHNvcnRpZXJlbiIsDQogICAgInNvcnRDaGFubmVsTnVtYmVycyI6ICJLYW7DpGxlIHNvcnRpZXJlbiIsDQogICAgImJhY2tUb1RvcCI6ICJHZWhlIG5hY2ggb2JlbiIsDQogICAgInNlcnZlckluZm9ybWF0aW9uIjogIlNlcnZlciBJbmZvcm1hdGlvbmVuIg0KICB9LA0KICAiZmlsdGVyIjogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJuYW1lIjogIkZpbHRlcm5hbWUiLA0KICAgICAgInR5cGUiOiAiRmlsdGVydHlwIiwNCiAgICAgICJmaWx0ZXIiOiAiRmlsdGVyIg0KICAgIH0sDQogICAgImN1c3RvbSI6ICJCZW51dHplcmRlZmluaWVydCIsDQogICAgImdyb3VwIjogIkdydXBwZSIsDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVybmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVybmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInN0YXJ0aW5nbnVtYmVyIjogew0KICAgICAgInRpdGxlIjogIkZpbHRlci1TdGFydG51bW1lciIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyLVN0YXJ0bnVtbWVyIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydGthbmFsbnVtbWVyIGbDvHIgZGllc2VuIEdydXBwZW5maWx0ZXIgKFN0YW5kYXJkIGlzdCAxMDAwKSINCiAgICB9LA0KICAgICJjYXRlZ29yeSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXJrYXRlZ29yaWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlcmthdGVnb3JpZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRmlsdGVya2F0ZWdvcmllIHNldHp0IGFsbGUgS2Fuw6RsZSBpbSBGaWx0ZXIgYXVmIGVpbmUgYmVzdGltbXRlIEthdGVnb3JpZSAoTmFjaHJpY2h0ZW4sIFNwb3J0IHVzdy4pIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkJlc2NocmVpYnVuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiQmVzY2hyZWlidW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJUeXAiLA0KICAgICAgImdyb3VwVGl0bGUiOiAiR3J1cHBlbnRpdGVsIiwNCiAgICAgICJjdXN0b21GaWx0ZXIiOiAiQmVudXR6ZXJkZWZpbmllcnRlciBGaWx0ZXIiDQogICAgfSwNCiAgICAiY2FzZVNlbnNpdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJHcm/Dny0vS2xlaW5zY2hyZWlidW5nIGJlYWNodGVuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWx0ZXJSdWxlIjogew0KICAgICAgInRpdGxlIjogIkZpbHRlcnJlZ2VsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJTcG9ydCB7SER9ICF7RVMsSVR9IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsdGVyR3JvdXAiOiB7DQogICAgICAidGl0bGUiOiAiR3J1cHBlbnRpdGVsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlfDpGhsZW4gU2llIGVpbmUgTTNVLUdydXBwZS4gKFrDpGhsZXIpPGJyPkRhcyDDhG5kZXJuIGRlcyBHcnVwcGVudGl0ZWxzIGluIGRlciBNM1UgbWFjaHQgZGVuIEZpbHRlciB1bmfDvGx0aWcuIg0KICAgIH0sDQogICAgImluY2x1ZGUiOiB7DQogICAgICAidGl0bGUiOiAiRWluc2NobGllw59lbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRkhELFVIRCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiS2FuYWxuYW1lIG11c3MgZW50aGFsdGVuLjxicj4oS29tbWFnZXRyZW5udCkgS29tbWEgYmVkZXV0ZXQgb2RlciINCiAgICB9LA0KICAgICJleGNsdWRlIjogew0KICAgICAgInRpdGxlIjogIkF1c3NjaGxpZcOfZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkVTLElUIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJLYW5hbG5hbWUgZGFyZiBuaWNodCBlbnRoYWx0ZW4uPGJyPihLb21tYWdldHJlbm50KSBLb21tYSBiZWRldXRldCBvZGVyIg0KICAgIH0NCiAgfSwNCiAgInBsYXlsaXN0Ijogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJwbGF5bGlzdCI6ICJXaWVkZXJnYWJlbGlzdGUiLA0KICAgICAgInR1bmVyIjogIlR1bmVyIiwNCiAgICAgICJsYXN0VXBkYXRlIjogIkxldHp0ZSBBa3R1YWxpc2llcnVuZyIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIlZlcmbDvGdiYXJrZWl0IiwNCiAgICAgICJ0eXBlIjogIlR5cCIsDQogICAgICAic3RyZWFtcyI6ICJTdHJlYW1zIiwNCiAgICAgICJncm91cFRpdGxlIjogIkdydXBwZW50aXRlbCIsDQogICAgICAidHZnSUQiOiAidHZnLWlkIiwNCiAgICAgICJ1bmlxdWVJRCI6ICJFaW5kZXV0aWdlIElEIg0KICAgIH0sDQogICAgInBsYXlsaXN0VHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJXaWVkZXJnYWJlbGlzdGVudHlwIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ0eXBlIjogew0KICAgICAgInRpdGxlIjogIlR5cCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAibmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJXaWVkZXJnYWJlbGlzdGVubmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkJlc2NocmVpYnVuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiQmVzY2hyZWlidW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsZU0zVSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UtRGF0ZWkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkRhdGVpcGZhZCBvZGVyIFVSTCBkZXIgTTNVIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsZUhESFIiOiB7DQogICAgICAidGl0bGUiOiAiSERIb21lUnVuIElQIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJJUC1BZHJlc3NlIHVuZCBQb3J0ICgxOTIuMTY4LjEuMTA6NTAwNCkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJUdW5lciAvIFN0cmVhbXMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQW56YWhsIGRlciBwYXJhbGxlbGVuIFZlcmJpbmR1bmdlbiwgZGllIHp1bSBBbmJpZXRlciBoZXJnZXN0ZWxsdCB3ZXJkZW4ga8O2bm5lbi4gPGJyPk51ciB2ZXJmw7xnYmFyIG1pdCBha3RpdmllcnRlbSBQdWZmZXIuPGJyPk5ldWUgRWluc3RlbGx1bmdlbiB3ZXJkZW4gZXJzdCBuYWNoIEJlZW5kZW4gYWxsZXIgU3RyZWFtcyBhbmdld2VuZGV0LiINCiAgICB9LA0KICAgICJodHRwX3Byb3h5X2lwIjogew0KICAgICAgInRpdGxlIjogIkhUVFAtUHJveHktSVAiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIjE5Mi4xNjguMC4yIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJUC1BZHJlc3NlLCBkaWUgdm9tIEhUVFAtUHJveHkgdmVyd2VuZGV0IHdlcmRlbiBzb2xsIg0KICAgIH0sDQogICAgImh0dHBfcHJveHlfcG9ydCI6IHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQLVByb3h5LVBvcnQiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIjg4ODgiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBvcnQsIGRlciB2b20gSFRUUC1Qcm94eSB2ZXJ3ZW5kZXQgd2VyZGVuIHNvbGwiDQogICAgfQ0KICB9LA0KICAieG1sdHYiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgImd1aWRlIjogIkd1aWRlIiwNCiAgICAgICJsYXN0VXBkYXRlIjogIkxldHp0ZSBBa3R1YWxpc2llcnVuZyIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIlZlcmbDvGdiYXJrZWl0IiwNCiAgICAgICJjaGFubmVscyI6ICJLYW7DpGxlIiwNCiAgICAgICJwcm9ncmFtcyI6ICJQcm9ncmFtbWUiDQogICAgfSwNCiAgICAibmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJHdWlkZW5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJCZXNjaHJlaWJ1bmciLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkJlc2NocmVpYnVuZyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVYTUxUViI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUVi1EYXRlaSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRGF0ZWlwZmFkIG9kZXIgVVJMIGRlciBYTUxUViIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImh0dHBfcHJveHlfaXAiOiB7DQogICAgICAidGl0bGUiOiAiSFRUUC1Qcm94eS1JUCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiMTkyLjE2OC4wLjIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklQLUFkcmVzc2UsIGRpZSB2b20gSFRUUC1Qcm94eSB2ZXJ3ZW5kZXQgd2VyZGVuIHNvbGwiDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9wb3J0Ijogew0KICAgICAgInRpdGxlIjogIkhUVFAtUHJveHktUG9ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiODg4OCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUG9ydCwgZGVyIHZvbSBIVFRQLVByb3h5IHZlcndlbmRldCB3ZXJkZW4gc29sbCINCiAgICB9DQogIH0sDQogICJtYXBwaW5nIjogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJjaE5vIjogIkthbmFsbnIuIiwNCiAgICAgICJsb2dvIjogIkxvZ28iLA0KICAgICAgImNoYW5uZWxOYW1lIjogIkthbmFsbmFtZSIsDQogICAgICAicGxheWxpc3QiOiAiV2llZGVyZ2FiZWxpc3RlIiwNCiAgICAgICJncm91cFRpdGxlIjogIkdydXBwZW50aXRlbCIsDQogICAgICAieG1sdHZGaWxlIjogIlhNTFRWLURhdGVpIiwNCiAgICAgICJ4bWx0dklEIjogIlhNTFRWLUlEIg0KICAgIH0sDQogICAgImFjdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBa3RpdiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiY2hhbm5lbE5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiS2FuYWxuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjaGFubmVsR3JvdXBTdGFydCI6IHsNCiAgICAgICJ0aXRsZSI6ICJLYW5hbGdydXBwZW5zdGFydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiB7DQogICAgICAidGl0bGUiOiAiQWxwaGFiZXRpc2NoIHNvcnRpZXJlbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic29ydENoYW5uZWxzIjogew0KICAgICAgInRpdGxlIjogIkthbsOkbGUgc29ydGllcmVuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJLYW5hbGJlc2NocmVpYnVuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiV2lyZCB2b20gRHVtbXkgYWxzIFhNTC1CZXNjaHJlaWJ1bmcgdmVyd2VuZGV0IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidXBkYXRlQ2hhbm5lbE5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiS2FuYWxuYW1lIGFrdHVhbGlzaWVyZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxMb2dvIjogew0KICAgICAgInRpdGxlIjogIkxvZ28tVVJMIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ1cGRhdGVDaGFubmVsTG9nbyI6IHsNCiAgICAgICJ0aXRsZSI6ICJLYW5hbC1Mb2dvIGFrdHVhbGlzaWVyZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImVwZ0NhdGVnb3J5Ijogew0KICAgICAgInRpdGxlIjogIkVQRy1LYXRlZ29yaWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm0zdUdyb3VwVGl0bGUiOiB7DQogICAgICAidGl0bGUiOiAiR3J1cHBlbnRpdGVsICh0aHJlYWRmaW4ubTN1KSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAieG1sdHZGaWxlIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWLURhdGVpIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ4bWx0dkNoYW5uZWwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MVFYtS2FuYWwiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInBwdmV4dHJhIjogew0KICAgICAgInRpdGxlIjogIlBQVi1adXNhdHp0aXRlbCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEaWVzIGbDvGd0IGRlbSBQcm9ncmFtbWRhdGVuIGJlbnV0emVyZGVmaW5pZXJ0ZW4gVGV4dCBoaW56dSINCiAgICB9LA0KICAgICJiYWNrdXBDaGFubmVsMSI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAtS2FuYWwgMSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDIiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwLUthbmFsIDIiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImJhY2t1cENoYW5uZWwzIjogew0KICAgICAgInRpdGxlIjogIkJhY2t1cC1LYW5hbCAzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJoaWRlQ2hhbm5lbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAtS2FuYWwgYXVzYmxlbmRlbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAidXNlcnMiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgInVzZXJuYW1lIjogIkJlbnV0emVybmFtZSIsDQogICAgICAicGFzc3dvcmQiOiAiUGFzc3dvcnQiLA0KICAgICAgIndlYiI6ICJXRUIiLA0KICAgICAgInBtcyI6ICJQTVMiLA0KICAgICAgIm0zdSI6ICJNM1UiLA0KICAgICAgInhtbCI6ICJYTUwiLA0KICAgICAgImFwaSI6ICJBUEkiDQogICAgfSwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiQmVudXR6ZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJCZW51dHplcm5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjb25maXJtIjogew0KICAgICAgInRpdGxlIjogIkJlc3TDpHRpZ2VuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29ydCBiZXN0w6R0aWdlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIndlYiI6IHsNCiAgICAgICJ0aXRsZSI6ICJXZWItWnVnYW5nIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwbXMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TLVp1Z2FuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAibTN1Ijogew0KICAgICAgInRpdGxlIjogIk0zVS1adWdhbmciLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInhtbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUwtWnVnYW5nIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJhcGkiOiB7DQogICAgICAidGl0bGUiOiAiQVBJLVp1Z2FuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAic2V0dGluZ3MiOiB7DQogICAgImNhdGVnb3J5Ijogew0KICAgICAgImdlbmVyYWwiOiAiQWxsZ2VtZWluIiwNCiAgICAgICJjdXN0b21pemF0aW9uIjogIkFucGFzc3VuZyIsDQogICAgICAiZmlsZXMiOiAiRGF0ZWllbiIsDQogICAgICAibmV0d29yayI6ICJOZXR6d2VyayIsDQogICAgICAic3RyZWFtaW5nIjogIlN0cmVhbWluZyIsDQogICAgICAiYmFja3VwIjogIlNpY2hlcnVuZyIsDQogICAgICAiYXV0aGVudGljYXRpb24iOiAiQXV0aGVudGlmaXppZXJ1bmciLA0KICAgICAgIndlYmNsaWVudCI6ICJXZWIgY2xpZW50Ig0KICAgIH0sDQogICAgInVwbG9hZEN1c3RvbUltYWdlIjogew0KICAgICAgInRpdGxlIjogIkJlbnV0emVyZGVmaW5pZXJ0ZXMgQmlsZCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSGllciBrw7ZubmVuIFNpZSBlaW4gQmlsZCBob2NobGFkZW4sIGRhcyBkZW4gQmVudXR6ZXJuIGFuZ2V6ZWlndCB3aXJkLCB3ZW5uIGtlaW5lIHdlaXRlcmVuIFR1bmVyIGluIGRlciBXaWVkZXJnYWJlbGlzdGUgdmVyZsO8Z2JhciBzaW5kISINCiAgICB9LA0KICAgICJ1cGRhdGUiOiB7DQogICAgICAidGl0bGUiOiAiWmVpdHBsYW4gZsO8ciBVcGRhdGVzIChXaWVkZXJnYWJlbGlzdGUsIFhNTFRWLCBTaWNoZXJ1bmcpIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIwMDAwLDEwMDAsMjAwMCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiWmVpdCBpbSAyNC1TdHVuZGVuLUZvcm1hdCAoMDgwMCA9IDg6MDAgVWhyKS4gTWVocmVyZSBaZWl0ZW4ga8O2bm5lbiBkdXJjaCBLb21tYXMgZ2V0cmVubnQgZWluZ2VnZWJlbiB3ZXJkZW4uIExhc3NlbiBTaWUgZGllc2VzIEZlbGQgbGVlciwgd2VubiBrZWluZSBVcGRhdGVzIGR1cmNoZ2Vmw7xocnQgd2VyZGVuIHNvbGxlbi4iDQogICAgfSwNCiAgICAiYXBpIjogew0KICAgICAgInRpdGxlIjogIkFQSS1TY2huaXR0c3RlbGxlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICLDnGJlciBkaWUgQVBJLVNjaG5pdHRzdGVsbGUga8O2bm5lbiBCZWZlaGxlIGFuIFRocmVhZGZpbiBnZXNlbmRldCB3ZXJkZW4uIEFQSS1Eb2t1bWVudGF0aW9uIGlzdCA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL21hcmNlbEdvZXJlbnR6L1RocmVhZGZpbi93aWtpL0FQSVwiPmhpZXI8L2E+Ig0KICAgIH0sDQogICAgInNzZHAiOiB7DQogICAgICAidGl0bGUiOiAiU1NEUCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU1NEUCBpc3QgZWluIE5ldHp3ZXJrcHJvdG9rb2xsIHp1ciBEaWVuc3Rlcmtlbm51bmcuIEVzIHdpcmQgenVyIGF1dG9tYXRpc2NoZW4gRXJrZW5udW5nIHZvbiBUaHJlYWRmaW4gaW0gTmV0endlcmsgdmVyd2VuZGV0LiINCiAgICB9LA0KICAgICJkdW1teSI6IHsNCiAgICAgICJ0aXRsZSI6ICJTdGFuZGFyZC1EdW1teS1EYXRlbiBha3RpdmllcmVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXZW5uIGFrdGl2aWVydCwgd2VyZGVuIGluYWt0aXZlIEthbsOkbGUgYXV0b21hdGlzY2ggZGVtIHVudGVuIGFuZ2VnZWJlbmVuIER1bW15LUthbmFsIHp1Z2VvcmRuZXQuIFZlcndlbmRlbiBTaWUgZGllcywgdW0gTGl2ZS1FdmVudC1LYW7DpGxlIGFrdGl2IHp1IGhhbHRlbi4iDQogICAgfSwNCiAgICAiZHVtbXlDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIkR1bW15LUthbmFsIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXw6RobGVuIFNpZSBkZW4gU3RhbmRhcmRrYW5hbCBhdXMsIGRlciB2ZXJ3ZW5kZXQgd2VyZGVuIHNvbGwsIHdlbm4gaW5ha3RpdmUgS2Fuw6RsZSBkZW4gRHVtbXktRGF0ZW4genVnZW9yZG5ldCB3ZXJkZW4uIg0KICAgIH0sDQogICAgImlnbm9yZUZpbHRlcnMiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVyIGlnbm9yaWVyZW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gYWt0aXZpZXJ0LCB3ZXJkZW4gRmlsdGVyIHZvbGxzdMOkbmRpZyBpZ25vcmllcnQuIg0KICAgIH0sDQogICAgImVwZ1NvdXJjZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJFUEctUXVlbGxlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQTVM6PGJyPi0gVmVyd2VuZGVuIFNpZSBFUEctRGF0ZW4gdm9uIFBsZXgsIEVtYnkgb2RlciBKZWxseWZpbiA8YnI+PGJyPlhFUEc6PGJyPi0gVmVyd2VuZHVuZyBlaW5lciBvZGVyIG1laHJlcmVyIFhNTFRWLURhdGVpZW48YnI+LSBLYW5hbHZlcndhbHR1bmc8YnI+LSBNM1UgLyBYTUxUVi1FeHBvcnQgKEhUVFAtTGluayBmw7xyIElQVFYtQXBwcykiDQogICAgfSwNCiAgICAidHVuZXIiOiB7DQogICAgICAidGl0bGUiOiAiQW56YWhsIGRlciBUdW5lciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQW56YWhsIGRlciBwYXJhbGxlbGVuIFZlcmJpbmR1bmdlbiwgZGllIHp1bSBBbmJpZXRlciBoZXJnZXN0ZWxsdCB3ZXJkZW4ga8O2bm5lbi48YnI+VmVyZsO8Z2JhciBmw7xyOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVIChtaXQgYWt0aXZlbSBQdWZmZXIpLjxicj5OYWNoIGVpbmVyIMOEbmRlcnVuZyBtdXNzIFRocmVhZGZpbiBpbiBkZW4gRFZSLUVpbnN0ZWxsdW5nZW4gdm9uIFBsZXggLyBFbWJ5IC8gSmVsbHlmaW4gZ2Vsw7ZzY2h0IHVuZCBlcm5ldXQgZWluZ2VyaWNodGV0IHdlcmRlbi4iDQogICAgfSwNCiAgICAiZmlsZXNVcGRhdGUiOiB7DQogICAgICAidGl0bGUiOiAiQWt0dWFsaXNpZXJ0IGFsbGUgRGF0ZWllbiBiZWltIFN0YXJ0IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBa3R1YWxpc2llcnQgYWxsZSBXaWVkZXJnYWJlbGlzdGVuLCBUdW5lciB1bmQgWE1MVFYtRGF0ZWllbiBiZWltIFN0YXJ0LiINCiAgICB9LA0KICAgICJjYWNoZUltYWdlcyI6IHsNCiAgICAgICJ0aXRsZSI6ICJCaWxkLUNhY2hpbmciLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkRpZXNlIE9wdGlvbiBzY2hyZWlidCBkaWUgbTN1LURhdGVpIGluIGRlbiBsb2thbGVuIEJpbGQtQ2FjaGUgZsO8ciBUVi1Mb2dvcyB1bS48YnI+QWxsZSBCaWxkZXIgYXVzIGRlciBYTUxUVi1EYXRlaSB3ZXJkZW4gendpc2NoZW5nZXNwZWljaGVydCwgd2FzIGVpbmUgc2NobmVsbGVyZSBEYXJzdGVsbHVuZyBkZXMgUmFzdGVycyBpbSBDbGllbnQgZXJtw7ZnbGljaHQuPGJyPkRhcyBIZXJ1bnRlcmxhZGVuIGRlciBCaWxkZXIga2FubiBlaW5lIFdlaWxlIGRhdWVybiB1bmQgd2lyZCBpbSBIaW50ZXJncnVuZCBkdXJjaGdlZsO8aHJ0Ljxicj4iDQogICAgfSwNCiAgICAicmVwbGFjZUVtcHR5SW1hZ2VzIjogew0KICAgICAgInRpdGxlIjogIkZlaGxlbmRlIFByb2dyYW1tYmlsZGVyIGVyc2V0emVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXZW5uIGRhcyBQb3N0ZXIgaW0gWE1MVFYtUHJvZ3JhbW0gZmVobHQsIHdpcmQgZGFzIEthbmFsbG9nbyB2ZXJ3ZW5kZXQuIg0KICAgIH0sDQogICAgInJlcGxhY2VDaGFubmVsVGl0bGUiOiB7DQogICAgICAidGl0bGUiOiAiUFBWLUthbmFsdGl0ZWwvQmVzY2hyZWlidW5nIGVyc2V0emVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWZXJ3ZW5kZW4gU2llIGRpZXMsIHdlbm4gSWhyIEFuYmlldGVyIGRlbiBQUFYtRXJlaWduaXNuYW1lbiBkZW0gS2FuYWxuYW1lbiB6dW9yZG5ldCINCiAgICB9LA0KICAgICJUaHJlYWRmaW5BdXRvVXBkYXRlIjogew0KICAgICAgInRpdGxlIjogIkF1dG9tYXRpc2NoZXMgVXBkYXRlIHZvbiBUaHJlYWRmaW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gZWluZSBuZXVlIFZlcnNpb24gdm9uIFRocmVhZGZpbiB2ZXJmw7xnYmFyIGlzdCwgd2lyZCBzaWUgYXV0b21hdGlzY2ggaW5zdGFsbGllcnQuIERpZSBVcGRhdGVzIHdlcmRlbiB2b24gR2l0SHViIGhlcnVudGVyZ2VsYWRlbi4iDQogICAgfSwNCiAgICAic3RyZWFtQnVmZmVyaW5nIjogew0KICAgICAgInRpdGxlIjogIlN0cmVhbS1QdWZmZXIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkZ1bmt0aW9uZW4gZGVzIFB1ZmZlcnM6PGJyPi0gRGVyIFN0cmVhbSB3aXJkIHZvbiBGRm1wZWcsIFZMQyBvZGVyIFRocmVhZGZpbiBhbiBQbGV4LCBFbWJ5LCBKZWxseWZpbiBvZGVyIE0zVSBQbGF5ZXIgd2VpdGVyZ2VsZWl0ZXQ8YnI+LSBLbGVpbmUgUnVja2xlciBkZXIgU3RyZWFtcyBrw7ZubmVuIGF1c2dlZ2xpY2hlbiB3ZXJkZW48YnI+LSBITFMgLyBNM1U4LVVudGVyc3TDvHR6dW5nPGJyPi0gUlRQIC8gUlRQUy1VbnRlcnN0w7x0enVuZzxicj4tIFJlLVN0cmVhbWluZzxicj4tIFNlcGFyYXRlcyBUdW5lci1MaW1pdCBmw7xyIGplZGUgV2llZGVyZ2FiZWxpc3RlIiwNCiAgICAgICJpbmZvX2ZhbHNlIjogIktlaW4gUHVmZmVyIChDbGllbnQgdmVyYmluZGV0IHNpY2ggZGlyZWt0IG1pdCBkZW0gU3RyZWFtaW5nLVNlcnZlcikiLA0KICAgICAgImluZm9fZmZtcGVnIjogIkZGbXBlZyB2ZXJiaW5kZXQgc2ljaCBtaXQgZGVtIFN0cmVhbWluZy1TZXJ2ZXIiLA0KICAgICAgImluZm9fdmxjIjogIlZMQyB2ZXJiaW5kZXQgc2ljaCBtaXQgZGVtIFN0cmVhbWluZy1TZXJ2ZXIiLA0KICAgICAgImluZm9fdGhyZWFkZmluIjogIlRocmVhZGZpbiB2ZXJiaW5kZXQgc2ljaCBtaXQgZGVtIFN0cmVhbWluZy1TZXJ2ZXIiDQogICAgfSwNCiAgICAidWRweHkiOiB7DQogICAgICAidGl0bGUiOiAiVURQeHktQWRyZXNzZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRGllIEFkcmVzc2UgSWhyZXMgVURQeHktU2VydmVycy4gV2VubiBnZXNldHp0IHVuZCBkaWUgS2FuYWwtVVJMcyBpbiBkZXIgbTN1IE11bHRpY2FzdCBzaW5kLCB3aXJkIFRocmVhZGZpbiBzaWUgc28gdW1zY2hyZWliZW4sIGRhc3Mgc2llIMO8YmVyIGRlbiBVRFB4eS1EaWVuc3QgYXVmZ2VydWZlbiB3ZXJkZW4uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJob3N0OnBvcnQiDQogICAgfSwNCiAgICAiZmZtcGVnUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQZmFkIHp1ciBGRm1wZWctQmluw6RyZGF0ZWkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBmYWQgenVyIEZGbXBlZy1CaW7DpHJkYXRlaS4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2ZmbXBlZyINCiAgICB9LA0KICAgICJmZm1wZWdPcHRpb25zIjogew0KICAgICAgInRpdGxlIjogIkZGbXBlZy1PcHRpb25lbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRkZtcGVnLU9wdGlvbmVuLjxicj7DhG5kZXJuIFNpZSBkaWVzZSBudXIsIHdlbm4gU2llIHdpc3Nlbiwgd2FzIFNpZSB0dW4uPGJyPkxhc3NlbiBTaWUgZGFzIEZlbGQgbGVlciwgdW0gZGllIFN0YW5kYXJkZWluc3RlbGx1bmdlbiB6dSB2ZXJ3ZW5kZW4uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMYXNzZW4gU2llIGRhcyBGZWxkIGxlZXIsIHVtIGRpZSBTdGFuZGFyZGVpbnN0ZWxsdW5nZW4genUgdmVyd2VuZGVuIg0KICAgIH0sDQogICAgInZsY1BhdGgiOiB7DQogICAgICAidGl0bGUiOiAiUGZhZCB6dXIgVkxDIC8gQ1ZMQy1CaW7DpHJkYXRlaSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUGZhZCB6dXIgVkxDIC8gQ1ZMQy1CaW7DpHJkYXRlaS4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2N2bGMiDQogICAgfSwNCiAgICAidmxjT3B0aW9ucyI6IHsNCiAgICAgICJ0aXRsZSI6ICJWTEMgLyBDVkxDLU9wdGlvbmVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWTEMgLyBDVkxDLU9wdGlvbmVuLjxicj7DhG5kZXJuIFNpZSBkaWVzZSBudXIsIHdlbm4gU2llIHdpc3Nlbiwgd2FzIFNpZSB0dW4uPGJyPkxhc3NlbiBTaWUgZGFzIEZlbGQgbGVlciwgdW0gZGllIFN0YW5kYXJkZWluc3RlbGx1bmdlbiB6dSB2ZXJ3ZW5kZW4uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMYXNzZW4gU2llIGRhcyBGZWxkIGxlZXIsIHVtIGRpZSBTdGFuZGFyZGVpbnN0ZWxsdW5nZW4genUgdmVyd2VuZGVuIg0KICAgIH0sDQogICAgImJ1ZmZlclNpemUiOiB7DQogICAgICAidGl0bGUiOiAiUHVmZmVyZ3LDtsOfZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUHVmZmVyZ3LDtsOfZSBpbiBNQi48YnI+TTNVODogV2VubiBkYXMgVFMtU2VnbWVudCBrbGVpbmVyIGFscyBkaWUgUHVmZmVyZ3LDtsOfZSBpc3QsIHdpcmQgZGllIERhdGVpZ3LDtsOfZSBkZXMgU2VnbWVudHMgdmVyd2VuZGV0LiINCiAgICB9LA0KICAgICJzdG9yZUJ1ZmZlckluUkFNIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiUHVmZmVyIGltIFJBTSBzcGVpY2hlcm4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gYWt0aXZpZXJ0LCB3aXJkIGRlciBQdWZmZXIgaW0gUkFNIGFuc3RlbGxlIGF1ZiBkZXIgRmVzdHBsYXR0ZSBnZXNwZWljaGVydCINCiAgICB9LA0KICAgICJhdXRvUmVjb25uZWN0Ijp7DQogICAgICAidGl0bGUiOiAiQXV0b21hdGlzY2ggbWl0IFN0cmVhbSBuZXV2ZXJiaW5kZW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gYWt0aXZpZXJ0LCB2ZXJiaW5kZXQgc2ljaCBkZXIgUHVmZmVyIGF1dG9tYXRpc2NoIHdpZWRlciBtaXQgZGVtIFN0cmVhbSINCiAgICB9LA0KICAgICJvbWl0UG9ydHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJQb3J0IHdlZ2xhc3NlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRHVyY2ggQWt0aXZpZXJlbiBkaWVzZXMgS29udHJvbGxrw6RzdGNoZW5zIHdpcmQgZGllIG0zdS1EYXRlaSBrZWluZSBQb3J0cyBpbiBkZXIgVVJMIGVudGhhbHRlbiINCiAgICB9LA0KICAgICJiaW5kaW5nSVBzIiA6DQogICAgew0KICAgICAgInRpdGxlIjogIklQKHMpIGJpbmRlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRHVyY2ggS2xpY2tlbiBhdWYgZGFzIEVpbmdhYmVmZWxkIMO2ZmZuZXQgc2ljaCBlaW4gRGlhbG9nLCBpbiBkZW0gU2llIGRpZSBJUChzKSBhdXN3w6RobGVuIGvDtm5uZW48YnI+Qml0dGUgYmVhY2h0ZW4gU2llLCBkYXNzIGRpZXMgYXVjaCBkaWUgRFZSLUlQcyBzaW5kPGJyPkRhcyDDhG5kZXJuIGRpZXNlciBPcHRpb24gdW5kIGRhcyBTcGVpY2hlcm4gZGVyIEVpbnN0ZWxsdW5nZW4gYmVlbmRldCBkYXMgUHJvZ3JhbW0hPGJyPlNpZSBtw7xzc2VuIGVzIG5ldSBzdGFydGVuLCB3ZW5uIFNpZSBrZWluZW4gYXV0b21hdGlzY2hlbiBOZXVzdGFydCBrb25maWd1cmllcnQgaGFiZW4hIg0KICAgIH0sDQogICAgImZvcmNlSHR0cHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQUyB6dW0gVXBzdHJlYW0tU2VydmVyIGVyendpbmdlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2VubiBkaWVzZXMgS29udHJvbGxrw6RzdGNoZW4gYWt0aXZpZXJ0IGlzdCwgd2lyZCBUaHJlYWRmaW4gZ2V6d3VuZ2VuLCBlaW5lIEhUVFBTLVZlcmJpbmR1bmcgenVtIFVwc3RyZWFtLVNlcnZlciB6dSB2ZXJ3ZW5kZW4gPGJyPkRpZXMgd2lyZCBuaWNodCBlbXBmb2hsZW4sIGRhIGRpZSBhbmdlZ2ViZW5lbiBVUkxzIGluIEhUVFBTLVVSTHMgdW1nZXNjaHJpZWJlbiB3ZXJkZW4sIHdhcyB6dSA0MDQtSFRUUC1GZWhsZXJjb2RlcyBmw7xocmVuIGthbm48L2JyPiINCiAgICB9LA0KICAgICJ1c2VIdHRwcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkhUVFBTIHZlcndlbmRlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSFRUUFMtUHJvdG9rb2xsIGbDvHIgVGhyZWFkZmluIGFrdGl2aWVyZW4sIEhUVFBTLVBvcnQgbXVzcyBnZXNldHp0IHdlcmRlbiwgYW5zb25zdGVuIHdpcmQgNDQzIHZlcndlbmRldCE8YnI+U3RlbGxlbiBTaWUgYXXDn2VyZGVtIHNpY2hlciwgZGFzcyBzZXJ2ZXIuY3J0IHVuZCBzZXJ2ZXIua2V5IGltIEtvbmZpZ3VyYXRpb25zb3JkbmVyIGFiZ2VsZWd0IHNpbmQhPGJyPkRpZSBTY2hsw7xzc2VsZGF0ZWkgbXVzcyB1bnZlcnNjaGzDvHNzZWx0IHNlaW4hIg0KICAgIH0sDQogICAgImZvcmNlQ2xpZW50SHR0cHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJDbGllbnQgenVyIFZlcndlbmR1bmcgdm9uIEhUVFBTIHp3aW5nZW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkFsbGUgVVJMcyB6dSBkaWVzZXIgVGhyZWFkZmluLUluc3RhbnogYmVnaW5uZW4gbWl0IEhUVFBTIg0KICAgIH0sDQogICAgInRocmVhZGZpbkRvbWFpbiI6DQogICAgew0KICAgICAgInRpdGxlIjogIlRocmVhZGZpbi1Eb21haW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gbmljaHQgbGVlciwgd2VyZGVuIGRpZSBVUkxzIGluIGRlciBuZXVlbiBtM3UgaW4gZWluZW4gRlFETiB1bWdlc2NocmllYmVuLjxicj5FcyB3aXJkIGF1Y2ggZGllIGFuZ2V6ZWlndGUgRFZSLUlQIGltIFNlcnZlcmluZm8tRGlhbG9nIHVtc2NocmVpYmVuLjxicj5TY2hsaWXDn2VuIFNpZSBodHRwIG5pY2h0IGVpbiAoei5CLjogc29tZWRvbWFpbi5jb20pPC9icj4iDQogICAgfSwNCiAgICAiZW5hYmxlTm9uQXNjaWkiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJOaWNodC1BU0NJSSBha3RpdmllcmVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXZW5uIGFrdGl2aWVydCwgd2VyZGVuIHNwZXppZWxsZSBOaWNodC1BU0NJSS1aZWljaGVuIGluIGRlciBNM1UgdW5kIEVQRyBlcmxhdWJ0LiBTdGFuZGFyZG3DpMOfaWcgZGVha3RpdmllcnQiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRy1LYXRlZ29yaWVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXNzZW4gU2llIGRpZSBFUEctS2F0ZWdvcmllbiBhbi4gRGFzIEZvcm1hdCBpc3QgU2NobMO8c3NlbDpXZXJ0fFNjaGzDvHNzZWw6V2VydCwgYWxzbyBOYWNocmljaHRlbjpuZXdzfFNwb3J0OnNwb3J0c3xGaWxtZTptb3ZpZXMiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllc0NvbG9ycyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRy1LYXRlZ29yaWVuLUZhcmJlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUGFzc2VuIFNpZSBkaWUgRmFyYmVuIGRlciBFUEctS2F0ZWdvcmllbiBhbi4gRGFzIEZvcm1hdCBpc3QgV2VydDpmYXJiZXxXZXJ0OmZhcmJlLCBhbHNvIG5ld3M6dG9tYXRvfHNwb3J0czp5ZWxsb3dncmVlbnxtb3ZpZXM6cm95YWxibHVlIg0KICAgIH0sDQogICAgImJ1ZmZlclRpbWVvdXQiOiB7DQogICAgICAidGl0bGUiOiAiVGltZW91dCBmw7xyIG5ldWUgQ2xpZW50LVZlcmJpbmR1bmdlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRGVyIFRocmVhZGZpbi1QdWZmZXIgd2FydGV0LCBiaXMgbmV1ZSBDbGllbnQtVmVyYmluZHVuZ2VuIGhlcmdlc3RlbGx0IHNpbmQuIEhpbGZyZWljaCBmw7xyIHNjaG5lbGxlcyBVbXNjaGFsdGVuIGRlciBLYW7DpGxlLiBXZXJ0IGluIE1pbGxpc2VrdW5kZW4uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiDQogICAgfSwNCiAgICAidXNlckFnZW50Ijogew0KICAgICAgInRpdGxlIjogIlVzZXItQWdlbnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZXItQWdlbnQgZsO8ciBIVFRQLUFuZnJhZ2VuLiBGw7xyIGplZGUgSFRUUC1WZXJiaW5kdW5nIHdpcmQgZGllc2VyIFdlcnQgYWxzIFVzZXItQWdlbnQgdmVyd2VuZGV0LiBTb2xsdGUgbnVyIGdlw6RuZGVydCB3ZXJkZW4sIHdlbm4gVGhyZWFkZmluIGJsb2NraWVydCB3aXJkLiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiVGhyZWFkZmluIg0KICAgIH0sDQogICAgImJhY2t1cFBhdGgiOiB7DQogICAgICAidGl0bGUiOiAiU3BlaWNoZXJvcnQgZsO8ciBhdXRvbWF0aXNjaGUgU2ljaGVydW5nZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiVm9yIGplZGVtIFVwZGF0ZSBkZXIgQW5iaWV0ZXJkYXRlbiBkdXJjaCBkZW4gWmVpdHBsYW4gZXJzdGVsbHQgVGhyZWFkZmluIGVpbmUgU2ljaGVydW5nLiBEZXIgUGZhZCBmw7xyIGRpZSBhdXRvbWF0aXNjaGVuIFNpY2hlcnVuZ2VuIGthbm4gZ2XDpG5kZXJ0IHdlcmRlbi4gVGhyZWFkZmluIGJlbsO2dGlndCBTY2hyZWliYmVyZWNodGlndW5nIGbDvHIgZGllc2VuIE9yZG5lci4iDQogICAgfSwNCiAgICAidGVtcFBhdGgiOiB7DQogICAgICAidGl0bGUiOiAiU3BlaWNoZXJvcnQgZsO8ciB0ZW1wb3LDpHJlIERhdGVpZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi90bXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU3BlaWNoZXJvcnQgZsO8ciBkaWUgUHVmZmVyZGF0ZWllbi4iDQogICAgfSwNCiAgICAiYmFja3VwS2VlcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJBbnphaGwgZGVyIHp1IGJlaGFsdGVuZGVuIFNpY2hlcnVuZ2VuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBbnphaGwgZGVyIHp1IGJlaGFsdGVuZGVuIFNpY2hlcnVuZ2VuLiDDhGx0ZXJlIFNpY2hlcnVuZ2VuIHdlcmRlbiBhdXRvbWF0aXNjaCBnZWzDtnNjaHQuIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogew0KICAgICAgInRpdGxlIjogIldFQi1BdXRoZW50aWZpemllcnVuZyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiWnVncmlmZiBhdWYgZGllIFdlYm9iZXJmbMOkY2hlIG51ciBtaXQgQW5tZWxkZWluZm9ybWF0aW9uZW4gbcO2Z2xpY2guIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uUE1TIjogew0KICAgICAgInRpdGxlIjogIlBNUy1BdXRoZW50aWZpemllcnVuZyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUGxleC1BbmZyYWdlbiBzaW5kIG51ciBtaXQgQXV0aGVudGlmaXppZXJ1bmcgbcO2Z2xpY2guIDxicj48Yj5XYXJudW5nISEhPC9iPiBOYWNoIEFrdGl2aWVydW5nIGRpZXNlciBGdW5rdGlvbiBtdXNzIFRocmVhZGZpbiBpbiBkZW4gRFZSLUVpbnN0ZWxsdW5nZW4gdm9uIFBNUyBnZWzDtnNjaHQgdW5kIGVybmV1dCBlaW5nZXJpY2h0ZXQgd2VyZGVuLiINCiAgICB9LA0KICAgICJhdXRoZW50aWNhdGlvbk0zVSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UtQXV0aGVudGlmaXppZXJ1bmciLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkRhcyBIZXJ1bnRlcmxhZGVuIGRlciB0aHJlYWRmaW4ubTN1LURhdGVpIMO8YmVyIGVpbmUgSFRUUC1BbmZyYWdlIGlzdCBudXIgbWl0IEF1dGhlbnRpZml6aWVydW5nIG3DtmdsaWNoLiINCiAgICB9LA0KICAgICJhdXRoZW50aWNhdGlvblhNTCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUwtQXV0aGVudGlmaXppZXJ1bmciLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkRhcyBIZXJ1bnRlcmxhZGVuIGRlciB0aHJlYWRmaW4ueG1sLURhdGVpIMO8YmVyIGVpbmUgSFRUUC1BbmZyYWdlIGlzdCBudXIgbWl0IEF1dGhlbnRpZml6aWVydW5nIG3DtmdsaWNoIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uQVBJIjogew0KICAgICAgInRpdGxlIjogIkFQSS1BdXRoZW50aWZpemllcnVuZyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiWnVncmlmZiBhdWYgZGllIEFQSS1TY2huaXR0c3RlbGxlIG51ciBtaXQgQXV0aGVudGlmaXppZXJ1bmcgbcO2Z2xpY2guIg0KICAgIH0sDQogICAgIndlYmNsaWVudCI6IHsNCiAgICAgICJsYW5ndWFnZSI6IHsNCiAgICAgICAgInRpdGxlIjogIldlYiBjbGllbnQgU3ByYWNoZSIsDQogICAgICAgICJkZXNjcmlwdGlvbiI6ICLDhG5kZXJuIGRlciBTcHJhY2hlIGRlcyBXZWIgQ2xpZW50cyINCg0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgIndpemFyZCI6IHsNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRy1RdWVsbGUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBWZXJ3ZW5kZW4gU2llIEVQRy1EYXRlbiB2b24gUGxleCwgRW1ieSBvZGVyIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBWZXJ3ZW5kdW5nIGVpbmVyIG9kZXIgbWVocmVyZXIgWE1MVFYtRGF0ZWllbjxicj4tIEthbmFsdmVyd2FsdHVuZzxicj4tIE0zVSAvIFhNTFRWLUV4cG9ydCAoSFRUUC1MaW5rIGbDvHIgSVBUVi1BcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJBbnphaGwgZGVyIFR1bmVyIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBbnphaGwgZGVyIHBhcmFsbGVsZW4gVmVyYmluZHVuZ2VuLCBkaWUgenVtIEFuYmlldGVyIGhlcmdlc3RlbGx0IHdlcmRlbiBrw7ZubmVuLjxicj5WZXJmw7xnYmFyIGbDvHI6IFBsZXgsIEVtYnksIEplbGx5ZmluLCBNM1UgKG1pdCBha3RpdmVtIFB1ZmZlcikuPGJyPk5hY2ggZWluZXIgw4RuZGVydW5nIG11c3MgVGhyZWFkZmluIGluIGRlbiBEVlItRWluc3RlbGx1bmdlbiB2b24gUGxleCAvIEVtYnkgLyBKZWxseWZpbiBnZWzDtnNjaHQgdW5kIGVybmV1dCBlaW5nZXJpY2h0ZXQgd2VyZGVuLiINCiAgICB9LA0KICAgICJtM3UiOiB7DQogICAgICAidGl0bGUiOiAiTTNVLVdpZWRlcmdhYmVsaXN0ZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRGF0ZWlwZmFkIG9kZXIgVVJMIGRlciBNM1UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkxva2FsZSBvZGVyIGVudGZlcm50ZSBXaWVkZXJnYWJlbGlzdGVuIg0KICAgIH0sDQogICAgInhtbHR2Ijogew0KICAgICAgInRpdGxlIjogIlhNTFRWLURhdGVpIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEYXRlaXBmYWQgb2RlciBVUkwgZGVyIFhNTFRWIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2thbGUgb2RlciBlbnRmZXJudGUgWE1MVFYtRGF0ZWkiDQogICAgfQ0KICB9LA0KICAibG9naW4iOiB7DQogICAgImZhaWxlZCI6ICJCZW51dHplcmF1dGhlbnRpZml6aWVydW5nIGZlaGxnZXNjaGxhZ2VuIiwNCiAgICAiaGVhZGxpbmUiOiAiQW5tZWxkZW4iLA0KICAgICJ1c2VybmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJCZW51dHplcm5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkJlbnV0emVybmFtZSINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcnQiDQogICAgfQ0KICB9LA0KICAiYWNjb3VudCI6IHsNCiAgICAiZmFpbGVkIjogIlBhc3N3b3J0IHN0aW1tdCBuaWNodCDDvGJlcmVpbiIsDQogICAgImhlYWRsaW5lIjogIkJlbnV0emVya29udG8gZXJzdGVsbGVuIiwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiQmVudXR6ZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJCZW51dHplcm5hbWUiDQogICAgfSwNCiAgICAicGFzc3dvcmQiOiB7DQogICAgICAidGl0bGUiOiAiUGFzc3dvcnQiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlBhc3N3b3J0Ig0KICAgIH0sDQogICAgImNvbmZpcm0iOiB7DQogICAgICAidGl0bGUiOiAiQmVzdMOkdGlnZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkJlc3TDpHRpZ2VuIg0KICAgIH0NCiAgfSwNCiAgIm5vdGlmaWNhdGlvbiIgOiB7DQogICAgInVwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgdmVyZsO8Z2JhciIsDQogICAgICAiY29udGVudCI6ICJFaW5lIG5ldWVyZSBWZXJzaW9uIHZvbiBUaHJlYWRmaW4gaXN0IHZlcmbDvGdiYXJlLiBCaXR0ZSBhdWYgZGllIG5ldXN0ZSBWZXJzaW9uIGFrdHVhbGlzaWVyZW4uIg0KICAgIH0NCiAgfSwNCiAgInNlcnZlckluZm8iOiB7DQogICAgInRpdGxlIjogIlNlcnZlciBJbmZvcm1hdGlvbmVuIiwNCiAgICAiaGVhZGVyIjogew0KICAgICAgInNlcnZlckluZm8iOiAiU2VydmVyIEluZm9ybWF0aW9uZW4iLA0KICAgICAgInN0cmVhbUluZm8iOiAiU3RyZWFtIEluZm9ybWF0aW9uZW4iLA0KICAgICAgImNoYW5nZVZlcnNpb24iOiAiV2VjaHNlbCBUaHJlYWRmaW4gVmVyc2lvbiINCiAgICB9LA0KICAgICJsYWJlbCI6IHsNCiAgICAgICJ2ZXJzaW9uIjogIlRocmVhZGZpbiBWZXJzaW9uIiwNCiAgICAgICJlcnJvcnMiOiAiRmVobGVyIiwNCiAgICAgICJ3YXJuaW5ncyI6ICJXYXJudW5nZW4iLA0KICAgICAgImR2ciI6ICJEVlIgSVAiLA0KICAgICAgIm0zdVVybCI6ICJNM1UgVVJMIChTcGVjaWZjIGdyb3VwczogW2h0dHA6Ly8uLi4/Z3JvdXAtdGl0bGU9Zm9vLGJhcl0pIiwNCiAgICAgICJ4ZXBnVXJsIjogIlhNTFRWIFVSTCIsDQogICAgICAic3RyZWFtcyI6ICJHZWZpbHRlcnRlIEthbsOkbGUiLA0KICAgICAgInhlcGciOiAiWnVnZW9yZG5ldGUgS2Fuw6RsZSINCiAgICB9LA0KICAgICJjaGFuZ2VWZXJzaW9uIjogew0KICAgICAgImNoYW5nZVRvQmV0YSI6ICJXZWNoc2VsIHp1ciBCZXRhIFZlcnNpb24iLA0KICAgICAgImNoYW5nZVRvUmVsZWFzZSI6ICJXZWNoc2VsIHp1ciBvZmZpemllbGxlbiBWZXJzaW9uIiwNCiAgICAgICJjaGFuZ2luZyI6ICJXZWNoc2VsLi4uIg0KICAgIH0NCiAgfQ0KfQ==" - webUI["web/public/lang/en.json"] = "ew0KICAibWFpbk1lbnUiOiB7DQogICAgIml0ZW0iOiB7DQogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLA0KICAgICAgInBtc0lEIjogIlBNUyBJRCIsDQogICAgICAiZmlsdGVyIjogIkZpbHRlciIsDQogICAgICAieG1sdHYiOiAiWE1MVFYiLA0KICAgICAgIm1hcHBpbmciOiAiTWFwcGluZyIsDQogICAgICAidXNlcnMiOiAiVXNlcnMiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0sDQogICAgImhlYWRsaW5lIjogew0KICAgICAgInBsYXlsaXN0IjogIkxvY2FsIG9yIHJlbW90ZSBwbGF5bGlzdHMiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIgcGxheWxpc3QiLA0KICAgICAgInhtbHR2IjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlcyIsDQogICAgICAibWFwcGluZyI6ICJNYXAgcGxheWxpc3QgY2hhbm5lbHMgdG8gRVBHIGNoYW5uZWxzIiwNCiAgICAgICJ1c2VycyI6ICJVc2VyIG1hbmFnZW1lbnQiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0NCiAgfSwNCiAgImNvbmZpcm0iOiB7DQogICAgInJlc3RvcmUiOiAiQWxsIGRhdGEgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRob3NlIGZyb20gdGhlIGJhY2t1cC4gU2hvdWxkIHRoZSBmaWxlcyBiZSByZXN0b3JlZD8iDQogIH0sDQogICJhbGVydCI6IHsNCiAgICAiZmlsZUxvYWRpbmdFcnJvciI6ICJGaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQiLA0KICAgICJpbnZhbGlkQ2hhbm5lbE51bWJlciI6ICJJbnZhbGlkIGNoYW5uZWwgbnVtYmVyIiwNCiAgICAibWlzc2luZ0lucHV0IjogIk1pc3NpbmcgaW5wdXQiDQogIH0sDQogICJidXR0b24iOiB7DQogICAgImJhY2siOiAiQmFjayIsDQogICAgImJhY2t1cCI6ICJCYWNrdXAiLA0KICAgICJidWxrRWRpdCI6ICJCdWxrIEVkaXQiLA0KICAgICJjYW5jZWwiOiAiQ2FuY2VsIiwNCiAgICAiZGVsZXRlIjogIkRlbGV0ZSIsDQogICAgImRvbmUiOiAiRG9uZSIsDQogICAgImxvZ2luIjogIkxvZ2luIiwNCiAgICAibmV3IjogIk5ldyIsDQogICAgIm5leHQiOiAiTmV4dCIsDQogICAgInJlc3RvcmUiOiAiUmVzdG9yZSIsDQogICAgInNhdmUiOiAiU2F2ZSIsDQogICAgInNlYXJjaCI6ICJTZWFyY2giLA0KICAgICJ1cGRhdGUiOiAiVXBkYXRlIiwNCiAgICAidXBkYXRpbmciOiAiVXBkYXRpbmcuLi4iLA0KICAgICJjcmFldGVBY2NvdW50IjogIkNyZWF0ZSBBY2NvdW50IiwNCiAgICAicmVzZXRMb2dzIjogIlJlc2V0IExvZ3MiLA0KICAgICJ1cGxvYWRMb2dvIjogIlVwbG9hZCBMb2dvIiwNCiAgICAidXBsb2FkQ3VzdG9tSW1hZ2UiOiAiVXBsb2FkIGN1c3RvbSBpbWFnZSIsDQogICAgInNvcnRDaGFubmVsc0FscGhhIjogIlNvcnQgQ2hhbm5lbHMgQWxwaGFiZXRpY2FsbHkiLA0KICAgICJzb3J0Q2hhbm5lbE51bWJlcnMiOiAiU29ydCBDaGFubmVscyIsDQogICAgImJhY2tUb1RvcCI6ICJHbyB0byB0b3AiLA0KICAgICJzZXJ2ZXJJbmZvcm1hdGlvbiI6ICJTZXJ2ZXIgSW5mb3JtYXRpb24iDQogIH0sDQogICJmaWx0ZXIiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgIm5hbWUiOiAiRmlsdGVyIE5hbWUiLA0KICAgICAgInR5cGUiOiAiRmlsdGVyIFR5cGUiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIiDQogICAgfSwNCiAgICAiY3VzdG9tIjogIkN1c3RvbSIsDQogICAgImdyb3VwIjogIkdyb3VwIiwNCiAgICAibmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIG5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJzdGFydGluZ251bWJlciI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgU3RhcnRpbmcgTnVtYmVyIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWx0ZXIgU3RhcnRpbmcgTnVtYmVyIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydGluZyBDaGFubmVsIE51bWJlciB0byB1c2UgZm9yIHRoaXMgR3JvdXAgRmlsdGVyIChEZWZhdWx0IGlzIDEwMDApIg0KICAgIH0sDQogICAgImNhdGVnb3J5Ijogew0KICAgICAgInRpdGxlIjogIkZpbHRlciBDYXRlZ29yeSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIENhdGVnb3J5IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJGaWx0ZXIgQ2F0ZWdvcnkgc2V0cyBhbGwgY2hhbm5lbHMgaW4gdGhlIGZpbHRlciB0byBhIHNwZWNpZmljIGNhdGVnb3J5IChuZXdzLCBzcG9ydHMsIGV0YykiDQogICAgfSwNCiAgICAiZGVzY3JpcHRpb24iOiB7DQogICAgICAidGl0bGUiOiAiRGVzY3JpcHRpb24iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJUeXBlIiwNCiAgICAgICJncm91cFRpdGxlIjogIkdyb3VwIFRpdGxlIiwNCiAgICAgICJjdXN0b21GaWx0ZXIiOiAiQ3VzdG9tIEZpbHRlciINCiAgICB9LA0KICAgICJjYXNlU2Vuc2l0aXZlIjogew0KICAgICAgInRpdGxlIjogIkNhc2UgU2Vuc2l0aXZlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWx0ZXJSdWxlIjogew0KICAgICAgInRpdGxlIjogIkZpbHRlciBSdWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJTcG9ydCB7SER9ICF7RVMsSVR9IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsdGVyR3JvdXAiOiB7DQogICAgICAidGl0bGUiOiAiR3JvdXAgVGl0bGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IGEgTTNVIGdyb3VwLiAoQ291bnRlcik8YnI+Q2hhbmdpbmcgdGhlIGdyb3VwIHRpdGxlIGluIHRoZSBNM1UgaW52YWxpZGF0ZXMgdGhlIGZpbHRlci4iDQogICAgfSwNCiAgICAiaW5jbHVkZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJJbmNsdWRlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGSEQsVUhEIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFubmVsIG5hbWUgbXVzdCBpbmNsdWRlLjxicj4oQ29tbWEgc2VwYXJhdGVkKSBDb21tYSBtZWFucyBvciINCiAgICB9LA0KICAgICJleGNsdWRlIjogew0KICAgICAgInRpdGxlIjogIkV4Y2x1ZGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkVTLElUIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFubmVsIG5hbWUgbXVzdCBub3QgY29udGFpbi48YnI+KENvbW1hIHNlcGFyYXRlZCkgQ29tbWEgbWVhbnMgb3IiDQogICAgfQ0KICB9LA0KICAicGxheWxpc3QiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgInBsYXlsaXN0IjogIlBsYXlsaXN0IiwNCiAgICAgICJ0dW5lciI6ICJUdW5lciIsDQogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIkF2YWlsYWJpbGl0eSIsDQogICAgICAidHlwZSI6ICJUeXBlIiwNCiAgICAgICJzdHJlYW1zIjogIlN0cmVhbXMiLA0KICAgICAgImdyb3VwVGl0bGUiOiAiZ3JvdXAtdGl0bGUiLA0KICAgICAgInR2Z0lEIjogInR2Zy1pZCIsDQogICAgICAidW5pcXVlSUQiOiAiVW5pcXVlIElEIg0KICAgIH0sDQogICAgInBsYXlsaXN0VHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJQbGF5bGlzdCB0eXBlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ0eXBlIjogew0KICAgICAgInRpdGxlIjogIlR5cGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGxheWxpc3QgbmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVNM1UiOiB7DQogICAgICAidGl0bGUiOiAiTTNVIEZpbGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIE0zVSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVIREhSIjogew0KICAgICAgInRpdGxlIjogIkhESG9tZVJ1biBJUCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiSVAgYWRkcmVzcyBhbmQgcG9ydCAoMTkyLjE2OC4xLjEwOjUwMDQpIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHVuZXIiOiB7DQogICAgICAidGl0bGUiOiAiVHVuZXIgLyBTdHJlYW1zIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBwYXJhbGxlbCBjb25uZWN0aW9ucyB0aGF0IGNhbiBiZSBlc3RhYmxpc2hlZCB0byB0aGUgcHJvdmlkZXIuIDxicj5Pbmx5IGF2YWlsYWJsZSB3aXRoIGFjdGl2YXRlZCBidWZmZXIuPGJyPk5ldyBzZXR0aW5ncyB3aWxsIG9ubHkgYmUgYXBwbGllZCBhZnRlciBxdWl0dGluZyBhbGwgc3RyZWFtcy4iDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9pcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQIFByb3h5IElQIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxOTIuMTY4LjAuMiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSVAgYWRkcmVzcyB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9wb3J0Ijogew0KICAgICAgInRpdGxlIjogIkhUVFAgUHJveHkgUG9ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiODg4OCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUG9ydCB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiDQogICAgfQ0KICB9LA0KICAieG1sdHYiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgImd1aWRlIjogIkd1aWRlIiwNCiAgICAgICJsYXN0VXBkYXRlIjogIkxhc3QgVXBkYXRlIiwNCiAgICAgICJhdmFpbGFiaWxpdHkiOiAiQXZhaWxhYmlsaXR5IiwNCiAgICAgICJjaGFubmVscyI6ICJDaGFubmVscyIsDQogICAgICAicHJvZ3JhbXMiOiAiUHJvZ3JhbXMiDQogICAgfSwNCiAgICAibmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJHdWlkZSBuYW1lIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZGVzY3JpcHRpb24iOiB7DQogICAgICAidGl0bGUiOiAiRGVzY3JpcHRpb24iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsZVhNTFRWIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIFhNTFRWIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9pcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQIFByb3h5IElQIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxOTIuMTY4LjAuMiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSVAgYWRkcmVzcyB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9wb3J0Ijogew0KICAgICAgInRpdGxlIjogIkhUVFAgUHJveHkgUG9ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiODg4OCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUG9ydCB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiDQogICAgfQ0KICB9LA0KICAibWFwcGluZyI6IHsNCiAgICAidGFibGUiOiB7DQogICAgICAiY2hObyI6ICJDaC4gTm8uIiwNCiAgICAgICJsb2dvIjogIkxvZ28iLA0KICAgICAgImNoYW5uZWxOYW1lIjogIkNoYW5uZWwgTmFtZSIsDQogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLA0KICAgICAgImdyb3VwVGl0bGUiOiAiR3JvdXAgVGl0bGUiLA0KICAgICAgInhtbHR2RmlsZSI6ICJYTUxUViBGaWxlIiwNCiAgICAgICJ4bWx0dklEIjogIlhNTFRWIElEIg0KICAgIH0sDQogICAgImFjdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBY3RpdmUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxOYW1lIjogew0KICAgICAgInRpdGxlIjogIkNoYW5uZWwgTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiY2hhbm5lbEdyb3VwU3RhcnQiOiB7DQogICAgICAidGl0bGUiOiAiQ2hhbm5lbCBHcm91cCBTdGFydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiB7DQogICAgICAidGl0bGUiOiAiU29ydCBBbHBoYWJldGljYWxseSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic29ydENoYW5uZWxzIjogew0KICAgICAgInRpdGxlIjogIlNvcnQgQ2hhbm5lbHMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkNoYW5uZWwgRGVzY3JpcHRpb24iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlVzZWQgYnkgdGhlIER1bW15IGFzIGFuIFhNTCBkZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInVwZGF0ZUNoYW5uZWxOYW1lIjogew0KICAgICAgInRpdGxlIjogIlVwZGF0ZSBDaGFubmVsIE5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxMb2dvIjogew0KICAgICAgInRpdGxlIjogIkxvZ28gVVJMIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ1cGRhdGVDaGFubmVsTG9nbyI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBMb2dvIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJlcGdDYXRlZ29yeSI6IHsNCiAgICAgICJ0aXRsZSI6ICJFUEcgQ2F0ZWdvcnkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm0zdUdyb3VwVGl0bGUiOiB7DQogICAgICAidGl0bGUiOiAiR3JvdXAgVGl0bGUgKHRocmVhZGZpbi5tM3UpIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ4bWx0dkZpbGUiOiB7DQogICAgICAidGl0bGUiOiAiWE1MVFYgRmlsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAieG1sdHZDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWIENoYW5uZWwiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInBwdmV4dHJhIjogew0KICAgICAgInRpdGxlIjogIlBQViBFeHRyYSBUaXRsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIHdpbGwgYWRkIGN1c3RvbSB0ZXh0IHRvIHRoZSBQcm9ncmFtbWUgZGF0YSINCiAgICB9LA0KICAgICJiYWNrdXBDaGFubmVsMSI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAxIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJiYWNrdXBDaGFubmVsMiI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAyIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJiYWNrdXBDaGFubmVsMyI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJoaWRlQ2hhbm5lbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJIaWRlIEJhY2t1cCBDaGFubmVsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9DQogIH0sDQogICJ1c2VycyI6IHsNCiAgICAidGFibGUiOiB7DQogICAgICAidXNlcm5hbWUiOiAiVXNlcm5hbWUiLA0KICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkIiwNCiAgICAgICJ3ZWIiOiAiV0VCIiwNCiAgICAgICJwbXMiOiAiUE1TIiwNCiAgICAgICJtM3UiOiAiTTNVIiwNCiAgICAgICJ4bWwiOiAiWE1MIiwNCiAgICAgICJhcGkiOiAiQVBJIg0KICAgIH0sDQogICAgInVzZXJuYW1lIjogew0KICAgICAgInRpdGxlIjogIlVzZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VybmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInBhc3N3b3JkIjogew0KICAgICAgInRpdGxlIjogIlBhc3N3b3JkIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNvbmZpcm0iOiB7DQogICAgICAidGl0bGUiOiAiQ29uZmlybSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQgY29uZmlybSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIndlYiI6IHsNCiAgICAgICJ0aXRsZSI6ICJXZWIgQWNjZXNzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwbXMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAibTN1Ijogew0KICAgICAgInRpdGxlIjogIk0zVSBBY2Nlc3MiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInhtbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUwgQWNjZXNzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJhcGkiOiB7DQogICAgICAidGl0bGUiOiAiQVBJIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAic2V0dGluZ3MiOiB7DQogICAgImNhdGVnb3J5Ijogew0KICAgICAgImdlbmVyYWwiOiAiR2VuZXJhbCIsDQogICAgICAiY3VzdG9taXphdGlvbiI6ICJDdXN0b21pemF0aW9uIiwNCiAgICAgICJmaWxlcyI6ICJGaWxlcyIsDQogICAgICAibmV0d29yayI6ICJOZXR3b3JrIiwNCiAgICAgICJzdHJlYW1pbmciOiAiU3RyZWFtaW5nIiwNCiAgICAgICJiYWNrdXAiOiAiQmFja3VwIiwNCiAgICAgICJhdXRoZW50aWNhdGlvbiI6ICJBdXRoZW50aWNhdGlvbiIsDQogICAgICAid2ViY2xpZW50IjogIldlYiBjbGllbnQiDQogICAgfSwNCiAgICAidXBsb2FkQ3VzdG9tSW1hZ2UiOiB7DQogICAgICAidGl0bGUiOiAiQ3VzdG9tIEltYWdlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJIZXJlIHlvdSBjYW4gdXBsb2FkIGFuIGltYWdlIHRoYXQgd2lsbCBiZSBzaG93biB0byB1c2VycyB3aGVuIG5vIG1vcmUgdHVuZXJzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHBsYXlsaXN0ISINCiAgICB9LA0KICAgICJ1cGRhdGUiOiB7DQogICAgICAidGl0bGUiOiAiU2NoZWR1bGUgZm9yIHVwZGF0aW5nIChQbGF5bGlzdCwgWE1MVFYsIEJhY2t1cCkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIjAwMDAsMTAwMCwyMDAwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaW1lIGluIDI0IGhvdXIgZm9ybWF0ICgwODAwID0gODowMCBhbSkuIE1vcmUgdGltZXMgY2FuIGJlIGVudGVyZWQgY29tbWEgc2VwYXJhdGVkLiBMZWF2ZSB0aGlzIGZpZWxkIGVtcHR5IGlmIG5vIHVwZGF0ZXMgYXJlIHRvIGJlIGNhcnJpZWQgb3V0LiINCiAgICB9LA0KICAgICJhcGkiOiB7DQogICAgICAidGl0bGUiOiAiQVBJIEludGVyZmFjZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiVmlhIEFQSSBpbnRlcmZhY2UgaXQgaXMgcG9zc2libGUgdG8gc2VuZCBjb21tYW5kcyB0byBUaHJlYWRmaW4uIEFQSSBkb2N1bWVudGF0aW9uIGlzIDxhIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vbWFyY2VsR29lcmVudHovVGhyZWFkZmluL3dpa2kvQVBJXCI+aGVyZTwvYT4iDQogICAgfSwNCiAgICAic3NkcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJTU0RQIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTU0RQIGlzIGEgbmV0d29yayBwcm90b2NvbCBmb3Igc2VydmljZSBkaXNjb3ZlcnkuIEl0IGlzIHVzZWQgZm9yIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIFRocmVhZGZpbiBpbiB0aGUgbmV0d29yay4iDQogICAgfSwNCiAgICAiZHVtbXkiOiB7DQogICAgICAidGl0bGUiOiAiRW5hYmxlIERlZmF1bHQgRHVtbXkgRGF0YSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiBlbmFibGVkLCB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBtYXAgaW5hY3RpdmUgY2hhbm5lbHMgdG8gdGhlIGR1bW15IGRhdGEgY2hhbm5lbCBiZWxvdy4gVXNlIHRoaXMgdG8ga2VlcCBMaXZlIEV2ZW50IGNoYW5uZWxzIGFjdGl2ZS4iDQogICAgfSwNCiAgICAiZHVtbXlDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIkR1bW15IERhdGEgQ2hhbm5lbCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IHRoZSBkZWZhdWx0IGNoYW5uZWwgdG8gdXNlIHdoZW4gbWFwcGluZyBpbmFjdGl2ZSBjaGFubmVscyB0byB0aGUgZHVtbXkgZGF0YS4iDQogICAgfSwNCiAgICAiaWdub3JlRmlsdGVycyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJZ25vcmUgRmlsdGVycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgZmlsdGVyaW5nIGlzIGNvbXBsZXRlbHkgaWdub3JlZC4iDQogICAgfSwNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4LCBFbWJ5IG9yIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBVc2Ugb2Ygb25lIG9yIG1vcmUgWE1MVFYgZmlsZXM8YnI+LSBDaGFubmVsIG1hbmFnZW1lbnQ8YnI+LSBNM1UgLyBYTUxUViBleHBvcnQgKEhUVFAgbGluayBmb3IgSVBUViBhcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgVHVuZXJzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiINCiAgICB9LA0KICAgICJmaWxlc1VwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGVzIGFsbCBmaWxlcyBhdCBzdGFydHVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJVcGRhdGVzIGFsbCBwbGF5bGlzdHMsIHR1bmVyIGFuZCBYTUxUViBmaWxlcyBhdCBzdGFydHVwLiINCiAgICB9LA0KICAgICJjYWNoZUltYWdlcyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJbWFnZSBDYWNoaW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIG9wdGlvbiB3aWxsIHJld3JpdGUgdGhlIG0zdSBmaWxlIHRvIGxvY2FsIGltYWdlIGNhY2hlIGZvciB0diBsb2dvcy48YnI+QWxsIGltYWdlcyBmcm9tIHRoZSBYTUxUViBmaWxlIGFyZSBjYWNoZWQsIGFsbG93aW5nIGZhc3RlciByZW5kZXJpbmcgb2YgdGhlIGdyaWQgaW4gdGhlIGNsaWVudC48YnI+RG93bmxvYWRpbmcgdGhlIGltYWdlcyBtYXkgdGFrZSBhIHdoaWxlIGFuZCB3aWxsIGJlIGRvbmUgaW4gdGhlIGJhY2tncm91bmQuPGJyPiINCiAgICB9LA0KICAgICJyZXBsYWNlRW1wdHlJbWFnZXMiOiB7DQogICAgICAidGl0bGUiOiAiUmVwbGFjZSBtaXNzaW5nIHByb2dyYW0gaW1hZ2VzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiB0aGUgcG9zdGVyIGluIHRoZSBYTUxUViBwcm9ncmFtIGlzIG1pc3NpbmcsIHRoZSBjaGFubmVsIGxvZ28gd2lsbCBiZSB1c2VkLiINCiAgICB9LA0KICAgICJyZXBsYWNlQ2hhbm5lbFRpdGxlIjogew0KICAgICAgInRpdGxlIjogIlJlcGxhY2UgUFBWIGNoYW5uZWxzIHRpdGxlL2Rlc2MiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZSB0aGlzIGlmIHlvdXIgcHJvdmlkZXIgbWFwcyB0aGUgUFBWIGV2ZW50IG5hbWUgdG8gdGhlIGNoYW5uZWwgbmFtZSINCiAgICB9LA0KICAgICJUaHJlYWRmaW5BdXRvVXBkYXRlIjogew0KICAgICAgInRpdGxlIjogIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiBhIG5ldyB2ZXJzaW9uIG9mIFRocmVhZGZpbiBpcyBhdmFpbGFibGUsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQuIFRoZSB1cGRhdGVzIGFyZSBkb3dubG9hZGVkIGZyb20gR2l0SHViLiINCiAgICB9LA0KICAgICJzdHJlYW1CdWZmZXJpbmciOiB7DQogICAgICAidGl0bGUiOiAiU3RyZWFtIEJ1ZmZlciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb25zIG9mIHRoZSBidWZmZXI6PGJyPi0gVGhlIHN0cmVhbSBpcyBwYXNzZWQgZnJvbSBGRm1wZWcsIFZMQyBvciBUaHJlYWRmaW4gdG8gUGxleCwgRW1ieSwgSmVsbHlmaW4gb3IgTTNVIFBsYXllcjxicj4tIFNtYWxsIGplcmtpbmcgb2YgdGhlIHN0cmVhbXMgY2FuIGJlIGNvbXBlbnNhdGVkPGJyPi0gSExTIC8gTTNVOCBzdXBwb3J0PGJyPi0gUlRQIC8gUlRQUyBzdXBwb3J0PGJyPi0gUmUtc3RyZWFtaW5nPGJyPi0gU2VwYXJhdGUgdHVuZXIgbGltaXQgZm9yIGVhY2ggcGxheWxpc3QiLA0KICAgICAgImluZm9fZmFsc2UiOiAiTm8gQnVmZmVyIChDbGllbnQgY29ubmVjdHMgZGlyZWN0bHkgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIpIiwNCiAgICAgICJpbmZvX2ZmbXBlZyI6ICJGRm1wZWcgY29ubmVjdHMgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIiLA0KICAgICAgImluZm9fdmxjIjogIlZMQyBjb25uZWN0cyB0byB0aGUgc3RyZWFtaW5nIHNlcnZlciIsDQogICAgICAiaW5mb190aHJlYWRmaW4iOiAiVGhyZWFkZmluIGNvbm5lY3RzIHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyIg0KICAgIH0sDQogICAgInVkcHh5Ijogew0KICAgICAgInRpdGxlIjogIlVEUHh5IGFkZHJlc3MiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBhZGRyZXNzIG9mIHlvdXIgVURQeHkgc2VydmVyLiBJZiBzZXQsIGFuZCB0aGUgY2hhbm5lbCBVUkxzIGluIHRoZSBtM3UgaXMgbXVsdGljYXN0LCBUaHJlYWRmaW4gd2lsbCByZXdyaXRlIGl0IHNvIHRoYXQgaXQgaXMgYWNjZXNzZWQgdmlhIHRoZSBVRFB4eSBzZXJ2aWNlLiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiaG9zdDpwb3J0Ig0KICAgIH0sDQogICAgImZmbXBlZ1BhdGgiOiB7DQogICAgICAidGl0bGUiOiAiRkZtcGVnIEJpbmFyeSBQYXRoIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXRoIHRvIEZGbXBlZyBiaW5hcnkuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9mZm1wZWciDQogICAgfSwNCiAgICAiZmZtcGVnT3B0aW9ucyI6IHsNCiAgICAgICJ0aXRsZSI6ICJGRm1wZWcgT3B0aW9ucyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRkZtcGVnIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyINCiAgICB9LA0KICAgICJ2bGNQYXRoIjogew0KICAgICAgInRpdGxlIjogIlZMQyAvIENWTEMgQmluYXJ5IFBhdGgiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBhdGggdG8gVkxDIC8gQ1ZMQyBiaW5hcnkuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9jdmxjIg0KICAgIH0sDQogICAgInZsY09wdGlvbnMiOiB7DQogICAgICAidGl0bGUiOiAiVkxDIC8gQ1ZMQyBPcHRpb25zIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWTEMgLyBDVkxDIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyINCiAgICB9LA0KICAgICJidWZmZXJTaXplIjogew0KICAgICAgInRpdGxlIjogIkJ1ZmZlciBTaXplIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCdWZmZXIgc2l6ZSBpbiBNQi48YnI+TTNVODogSWYgdGhlIFRTIHNlZ21lbnQgc21hbGxlciB0aGVuIHRoZSBidWZmZXIgc2l6ZSwgdGhlIGZpbGUgc2l6ZSBvZiB0aGUgc2VnbWVudCBpcyB1c2VkLiINCiAgICB9LA0KICAgICJzdG9yZUJ1ZmZlckluUkFNIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiU3RvcmUgYnVmZmVyIGluIFJBTSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgd3JpdGUgYnVmZmVyIHRvIFJBTSBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gZGlzayINCiAgICB9LA0KICAgICJhdXRvUmVjb25uZWN0Ijp7DQogICAgICAidGl0bGUiOiAiQXV0b21hdGljIHJlY29ubmVjdCB0byBzdHJlYW0iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHRoZSBidWZmZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHJlY29ubmVjdCB0byBzdHJlYW0iDQogICAgfSwNCiAgICAib21pdFBvcnRzIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiT21pdCBwb3J0IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCeSBhY3RpdmF0aW5nIHRoaXMgY2hlY2tib3ggdGhlIG0zdSBmaWxlIHdpbGwgbm90IGNvbnRhaW4gdGhlIHBvcnQgaW4gdGhlIHVybCINCiAgICB9LA0KICAgICJiaW5kaW5nSVBzIiA6DQogICAgew0KICAgICAgInRpdGxlIjogIkJpbmRpbmcgSVAocykiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkJ5IGNsaWNraW5nIG9uIHRoZSBpbnB1dCBhIGRpYWxvZ3VlIHdpbGwgb3BlbiB3aGVyZSB5b3UgY2FuIHNlbGVjdCB0aGUgSVAocyk8YnI+UGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBhcmUgYWxzbyB0aGUgRFZSIElQczxicj5DaGFuZ2luZyB0aGlzIG9wdGlvbiBhbmQgc2F2aW5nIHRoZSBzZXR0aW5ncyB3aWxsIGV4aXQgdGhlIHByb2dyYW0hPGJyPllvdSBuZWVkIHRvIHJlc3RhcnQgaXQgaWYgeW91IGRpZCBub3QgY29uZmlndXJlZCBhbiBhdXRvbWF0aWNhbCByZXN0YXJ0ISINCiAgICB9LA0KICAgICJmb3JjZUh0dHBzIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiRm9yY2UgSFRUUFMgdG8gVXBzdHJlYW0gc2VydmVyIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaGVuIHRoaXMgY2hlY2tib3ggaXMgYWN0aXZhdGVkIFRocmVhZGZpbiB3aWxsIGJlIGZvcmNlZCB0byB1c2UgSFRUUFMgY29ubmVjdGlvbiB0byB1cHN0cmVhbSBzZXJ2ZXIgPGJyPlRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGFzIHRoZSBnaXZlbiB1cmxzIHdpbGwgYmUgcmV3cml0dGVuIHRvIGh0dHBzIHVybHMsIHRoaXMgY2FuIGxlYWQgdG8gNDA0IEhUVFAgRXJyb3IgQ29kZXM8L2JyPiINCiAgICB9LA0KICAgICJ1c2VIdHRwcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIlVzZSBIVFRQUyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlIEhUVFBTIHByb3RvY29sIGZvciBUaHJlYWRmaW4sIEhUVFBTIFBvcnQgbmVlZHMgdG8gYmUgc2V0LCBvdGhlcndpc2UgdGhlIDQ0MyB3aWxsIGJlIHVzZWQhPGJyPkFsc28gbWFrZSBzdXJlIHRoYXQgc2VydmVyLmNydCBhbmQgc2VydmVyLmtleSBhcmUgcGxhY2VkIGluIHRoZSBjb25maWcgZm9sZGVyITxicj5UaGUga2V5IGZpbGUgbmVlZHMgdG8gYmUgdW5lbmNyeXB0ZWQhIg0KICAgIH0sDQogICAgImZvcmNlQ2xpZW50SHR0cHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJGb3JjZSBjbGllbnQgdG8gdXNlIGh0dHBzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBbGwgVVJMcyB0byB0aGlzIHRocmVhZGZpbiBpbnN0YW5jZSB3aWxsIGJlIHN0YXJ0aW5nIHdpdGggaHR0cHMiDQogICAgfSwNCiAgICAidGhyZWFkZmluRG9tYWluIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiVGhyZWFkZmluIERvbWFpbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiBub3QgZW1wdHksIHRoaXMgd2lsbCByZXdyaXRlIHRoZSBVUkxzIGluIHRoZSBuZXcgbTN1IHRvIGEgRlFETi48YnI+SXQgd2lsbCBhbHNvIHJld3JpdGUgdGhlIHNob3duIERWUiBJUCBpbiB0aGUgc2VydmVyIGluZm8gZGlhbG9ndWUuPGJyPkRvIE5PVCBpbmNsdWRlIGh0dHAgKGV4OiBzb21lZG9tYWluLmNvbSk8L2JyPiINCiAgICB9LA0KICAgICJlbmFibGVOb25Bc2NpaSI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVuYWJsZSBOb24tQVNDSUkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgYWxsb3cgc3BlY2lhbCBub24gYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgTTNVIGFuZCBFUEcuIERlZmF1bHQgaXMgZGlzYWJsZWQiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDdXN0b21pemUgdGhlIEVQRyBDYXRlZ29yaWVzLiBUaGUgZm9ybWF0IGlzIGtleTp2YWx1ZXxrZXk6dmFsdWUsIHNvIE5ld3M6bmV3c3xTcG9ydHM6c3BvcnRzfE1vdmllczptb3ZpZXMiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllc0NvbG9ycyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIENvbG9ycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9taXplIHRoZSBFUEcgQ2F0ZWdvcnkgY29sb3JzLiBUaGUgZm9ybWF0IGlzIHZhbHVlOmNvbG9yfHZhbHVlOmNvbG9yLCBzbyBuZXdzOnRvbWF0b3xzcG9ydHM6eWVsbG93Z3JlZW58bW92aWVzOnJveWFsYmx1ZSINCiAgICB9LA0KICAgICJidWZmZXJUaW1lb3V0Ijogew0KICAgICAgInRpdGxlIjogIlRpbWVvdXQgZm9yIG5ldyBjbGllbnQgY29ubmVjdGlvbnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBUaHJlYWRmaW4gYnVmZmVyIHdhaXRzIHVudGlsIG5ldyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLiBIZWxwZnVsIGZvciBmYXN0IGNoYW5uZWwgc3dpdGNoaW5nLiBWYWx1ZSBpbiBtaWxsaXNlY29uZHMuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiDQogICAgfSwNCiAgICAidXNlckFnZW50Ijogew0KICAgICAgInRpdGxlIjogIlVzZXIgQWdlbnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZXIgQWdlbnQgZm9yIEhUVFAgcmVxdWVzdHMuIEZvciBldmVyeSBIVFRQIGNvbm5lY3Rpb24sIHRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIHVzZXIgYWdlbnQuIFNob3VsZCBvbmx5IGJlIGNoYW5nZWQgaWYgVGhyZWFkZmluIGlzIGJsb2NrZWQuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJUaHJlYWRmaW4iDQogICAgfSwNCiAgICAiYmFja3VwUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgYXV0b21hdGljIGJhY2t1cHMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQmVmb3JlIGFueSB1cGRhdGUgb2YgdGhlIHByb3ZpZGVyIGRhdGEgYnkgdGhlIHNjaGVkdWxlLCBUaHJlYWRmaW4gY3JlYXRlcyBhIGJhY2t1cC4gVGhlIHBhdGggZm9yIHRoZSBhdXRvbWF0aWMgYmFja3VwcyBjYW4gYmUgY2hhbmdlZC4gVGhyZWFkZmluIHJlcXVpcmVzIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoaXMgZm9sZGVyLiINCiAgICB9LA0KICAgICJ0ZW1wUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiL3RtcC90aHJlYWRmaW4vIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiBmb3IgdGhlIGJ1ZmZlciBmaWxlcy4iDQogICAgfSwNCiAgICAiYmFja3VwS2VlcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwLiBPbGRlciBiYWNrdXBzIGFyZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQuIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogew0KICAgICAgInRpdGxlIjogIldFQiBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSB3ZWIgaW50ZXJmYWNlIG9ubHkgcG9zc2libGUgd2l0aCBjcmVkZW50aWFscy4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25QTVMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uIDxicj48Yj5XYXJuaW5nISEhPC9iPiBBZnRlciBhY3RpdmF0aW5nIHRoaXMgZnVuY3Rpb24gVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQTVMgRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uTTNVIjogew0KICAgICAgInRpdGxlIjogIk0zVSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRG93bmxvYWRpbmcgdGhlIHRocmVhZGZpbi5tM3UgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25YTUwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEb3dubG9hZGluZyB0aGUgdGhyZWFkZmluLnhtbCBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uQVBJIjogew0KICAgICAgInRpdGxlIjogIkFQSSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSBBUEkgaW50ZXJmYWNlIGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfSwNCiAgICAid2ViY2xpZW50Ijogew0KICAgICAgImxhbmd1YWdlIjogew0KICAgICAgICAidGl0bGUiOiAiV2ViIGNsaWVudCBsYW5ndWFnZSIsDQogICAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFuZ2UgdGhlIGxhbmd1YWdlIGZvciB0aGUgd2ViIGNsaWVudCINCg0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgIndpemFyZCI6IHsNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4LCBFbWJ5IG9yIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBVc2Ugb2Ygb25lIG9yIG1vcmUgWE1MVFYgZmlsZXM8YnI+LSBDaGFubmVsIG1hbmFnZW1lbnQ8YnI+LSBNM1UgLyBYTUxUViBleHBvcnQgKEhUVFAgbGluayBmb3IgSVBUViBhcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgdHVuZXJzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiINCiAgICB9LA0KICAgICJtM3UiOiB7DQogICAgICAidGl0bGUiOiAiTTNVIFBsYXlsaXN0IiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBNM1UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIG9yIHJlbW90ZSBwbGF5bGlzdHMiDQogICAgfSwNCiAgICAieG1sdHYiOiB7DQogICAgICAidGl0bGUiOiAiWE1MVFYgRmlsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsZSBwYXRoIG9yIFVSTCBvZiB0aGUgWE1MVFYiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlIg0KICAgIH0NCiAgfSwNCiAgImxvZ2luIjogew0KICAgICJmYWlsZWQiOiAiVXNlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQiLA0KICAgICJoZWFkbGluZSI6ICJMb2dpbiIsDQogICAgInVzZXJuYW1lIjogew0KICAgICAgInRpdGxlIjogIlVzZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VybmFtZSINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29yZCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiDQogICAgfQ0KICB9LA0KICAiYWNjb3VudCI6IHsNCiAgICAiZmFpbGVkIjogIlBhc3N3b3JkIGRvZXMgbm90IG1hdGNoIiwNCiAgICAiaGVhZGxpbmUiOiAiQ3JlYXRlIHVzZXIgYWNjb3VudCIsDQogICAgInVzZXJuYW1lIjogew0KICAgICAgInRpdGxlIjogIlVzZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VybmFtZSINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29yZCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiDQogICAgfSwNCiAgICAiY29uZmlybSI6IHsNCiAgICAgICJ0aXRsZSI6ICJDb25maXJtIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJDb25maXJtIg0KICAgIH0NCiAgfSwNCiAgIm5vdGlmaWNhdGlvbiI6IHsNCiAgICAidXBkYXRlIjogew0KICAgICAgInRpdGxlIjogIlVwZGF0ZSBhdmFpbGFibGUiLA0KICAgICAgImNvbnRlbnQiOiAiQSBuZXdlciB2ZXJzaW9uIG9mIFRocmVhZGZpbiBpcyBhdmFpbGFibGUuIFBsZWFzZSB1cGRhdGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLiINCiAgICB9DQogIH0sDQogICJzZXJ2ZXJJbmZvIjogew0KICAgICJ0aXRsZSI6ICJTZXJ2ZXIgSW5mb3JtYXRpb24iLA0KICAgICJoZWFkZXIiOiB7DQogICAgICAic2VydmVySW5mbyI6ICJTZXJ2ZXIgSW5mb3JtYXRpb24iLA0KICAgICAgInN0cmVhbUluZm8iOiAiU3RyZWFtIEluZm9ybWF0aW9uIiwNCiAgICAgICJjaGFuZ2VWZXJzaW9uIjogIkNoYW5nZSBUaHJlYWRmaW4gVmVyc2lvbiINCiAgICB9LA0KICAgICJsYWJlbCI6IHsNCiAgICAgICJ2ZXJzaW9uIjogIlRocmVhZGZpbiBWZXJzaW9uIiwNCiAgICAgICJlcnJvcnMiOiAiRXJyb3JzIiwNCiAgICAgICJ3YXJuaW5ncyI6ICJXYXJuaW5ncyIsDQogICAgICAiZHZyIjogIkRWUiBJUCIsDQogICAgICAibTN1VXJsIjogIk0zVSBVUkwgKFNwZWNpZmMgZ3JvdXBzOiBbaHR0cDovLy4uLj9ncm91cC10aXRsZT1mb28sYmFyXSkiLA0KICAgICAgInhlcGdVcmwiOiAiWE1MVFYgVVJMIiwNCiAgICAgICJzdHJlYW1zIjogIkZpbHRlcmVkIENoYW5uZWxzIiwNCiAgICAgICJ4ZXBnIjogIk1hcHBlZCBDaGFubmVscyINCiAgICB9LA0KICAgICJjaGFuZ2VWZXJzaW9uIjogew0KICAgICAgImNoYW5nZVRvQmV0YSI6ICJDaGFuZ2UgdG8gYmV0YSB2ZXJzaW9uIiwNCiAgICAgICJjaGFuZ2VUb1JlbGVhc2UiOiAiQ2hhbmdlIHRvIHJlbGVhc2UgdmVyc2lvbiIsDQogICAgICAiY2hhbmdpbmciOiAiQ2hhbmdpbmcuLi4iDQogICAgfQ0KICB9DQp9" + webUI["web/public/js/settings.js"] = "Y2xhc3MgU2V0dGluZ3NDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihoZWFkbGluZSwgc2V0dGluZ3NLZXlzKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gJ2NvbnRlbnRfc2V0dGluZ3MnOwogICAgICAgIHRoaXMuQ29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5zZXR0aW5nc0tleXMgPSBzZXR0aW5nc0tleXM7CiAgICB9CiAgICBjcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCB0aXRsZSkgewogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsnc2V0dGluZ3MnXVtzZXR0aW5nc0tleV07CiAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1REJyk7CiAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9IHRpdGxlICsgJzonOwogICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEQnKTsKICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLkNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCAnamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAiY2hhbmdlZCInKTsKICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgdGl0bGUsIHBsYWNlaG9sZGVyLCBzZXRJRCA9IGZhbHNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSBTRVJWRVJbJ3NldHRpbmdzJ11bc2V0dGluZ3NLZXldOwogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEQnKTsKICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gdGl0bGUgKyAnOic7CiAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgIHZhciBpbnB1dCA9IHRoaXMuQ29udGVudC5jcmVhdGVJbnB1dCgndGV4dCcsIHNldHRpbmdzS2V5LCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCBwbGFjZWhvbGRlcik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIicpOwogICAgICAgIGlmIChzZXRJRCkgewogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2V0dGluZ3NLZXkpOwogICAgICAgIH0KICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZVNlbGVjdElucHV0KHNldHRpbmdzS2V5LCB0aXRsZSwgdGV4dCwgdmFsdWVzKSB7CiAgICAgICAgdmFyIGRhdGEgPSBTRVJWRVJbJ3NldHRpbmdzJ11bc2V0dGluZ3NLZXldOwogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEQnKTsKICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gdGl0bGUgKyAnOic7CiAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgIHZhciBzZWxlY3QgPSB0aGlzLkNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgJ2phdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gImNoYW5nZWQiJyk7CiAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBzZXR0aW5nOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnSDQnKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSFIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdIUicpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlU2V0dGluZ3Moc2V0dGluZ3NLZXkpIHsKICAgICAgICB2YXIgc2V0dGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1RSJyk7CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAvLyBUZXh0IGlucHV0cwogICAgICAgICAgICBjYXNlICd1cGRhdGUnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MudXBkYXRlLnRpdGxlfX0nLCAne3suc2V0dGluZ3MudXBkYXRlLnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdiYWNrdXAucGF0aCc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5iYWNrdXBQYXRoLnRpdGxlfX0nLCAne3suc2V0dGluZ3MuYmFja3VwUGF0aC5wbGFjZWhvbGRlcn19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndGVtcC5wYXRoJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLnRlbXBQYXRoLnRpdGxlfX0nLCAne3suc2V0dGluZ3MudG1wUGF0aC5wbGFjZWhvbGRlcn19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndXNlci5hZ2VudCc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy51c2VyQWdlbnQudGl0bGV9fScsICd7ey5zZXR0aW5ncy51c2VyQWdlbnQucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2J1ZmZlci50aW1lb3V0JzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmJ1ZmZlclRpbWVvdXQudGl0bGV9fScsICd7ey5zZXR0aW5ncy5idWZmZXJUaW1lb3V0LnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdidWZmZXIudGVybWluYXRpb25UaW1lb3V0JzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmJ1ZmZlclRlcm1pbmF0aW9uVGltZW91dC50aXRsZX19JywgJ3t7LnNldHRpbmdzLmJ1ZmZlclRlcm1pbmF0aW9uVGltZW91dC5wbGFjZWhvbGRlcn19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZmZtcGVnLnBhdGgnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuZmZtcGVnUGF0aC50aXRsZX19JywgJ3t7LnNldHRpbmdzLmZmbXBlZ1BhdGgucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZmbXBlZy5vcHRpb25zJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmZmbXBlZ09wdGlvbnMudGl0bGV9fScsICd7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd2bGMucGF0aCc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy52bGNQYXRoLnRpdGxlfX0nLCAne3suc2V0dGluZ3MudmxjUGF0aC5wbGFjZWhvbGRlcn19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndmxjLm9wdGlvbnMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MudmxjT3B0aW9ucy50aXRsZX19JywgJ3t7LnNldHRpbmdzLnZsY09wdGlvbnMucGxhY2Vob2xkZXJ9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2JpbmRpbmdJUHMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuYmluZGluZ0lQcy50aXRsZX19JywgJ3t7LnNldHRpbmdzLmJpbmRpbmdJUHMucGxhY2Vob2xkZXJ9fScsIHRydWUpOwogICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBzZXR0aW5nLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2lkPScgKyBzZXR0aW5nc0tleSArICddJyk7CiAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBpbnB1dCkgewogICAgICAgICAgICAgICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBzaG93SVBCaW5kaW5nRGlhbG9ndWUoKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdlcGdDYXRlZ29yaWVzJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMudGl0bGV9fScsICd7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdlcGdDYXRlZ29yaWVzQ29sb3JzJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVRleHRJbnB1dChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXNDb2xvcnMudGl0bGV9fScsICd7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0aHJlYWRmaW5Eb21haW4nOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlVGV4dElucHV0KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MudGhyZWFkZmluRG9tYWluLnRpdGxlfX0nLCAne3suc2V0dGluZ3MudGhyZWFkZmluRG9tYWluLnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd1ZHB4eSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVUZXh0SW5wdXQoc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy51ZHB4eS50aXRsZX19JywgJ3t7LnNldHRpbmdzLnVkcHh5LnBsYWNlaG9sZGVyfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAvLyBDaGVja2JveGVuCiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLndlYic6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25XRUIudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLnBtcyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25QTVMudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLm0zdSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25NM1UudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLnhtbCc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25YTUwudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLmFwaSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25BUEkudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZpbGVzLnVwZGF0ZSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuZmlsZXNVcGRhdGUudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2NhY2hlLmltYWdlcyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuY2FjaGVJbWFnZXMudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3hlcGcucmVwbGFjZS5taXNzaW5nLmltYWdlcyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MucmVwbGFjZUVtcHR5SW1hZ2VzLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd4ZXBnLnJlcGxhY2UuY2hhbm5lbC50aXRsZSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MucmVwbGFjZUNoYW5uZWxUaXRsZS50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc3RvcmVCdWZmZXJJblJBTSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3Muc3RvcmVCdWZmZXJJblJBTS50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYnVmZmVyLmF1dG9SZWNvbm5lY3QnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2V0dGluZ3NDaGVja2JveChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmF1dG9SZWNvbm5lY3QudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ29taXRQb3J0cyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3Mub21pdFBvcnRzLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdmb3JjZUh0dHBzJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5mb3JjZUh0dHBzLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd1c2VIdHRwcyc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MudXNlSHR0cHMudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZvcmNlQ2xpZW50SHR0cHMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2V0dGluZ3NDaGVja2JveChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmZvcmNlQ2xpZW50SHR0cHMudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2RvbWFpblVzZUh0dHBzJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5kb21haW5Vc2VIdHRwcy50aXRsZX19Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZW5hYmxlTm9uQXNjaWknOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2V0dGluZ3NDaGVja2JveChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmVuYWJsZU5vbkFzY2lpLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdUaHJlYWRmaW5BdXRvVXBkYXRlJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5UaHJlYWRmaW5BdXRvVXBkYXRlLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzc2RwJzoKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmdzQ2hlY2tib3goc2V0dGluZ3NLZXksICd7ey5zZXR0aW5ncy5zc2RwLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkdW1teSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuZHVtbXkudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2lnbm9yZUZpbHRlcnMnOgogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2V0dGluZ3NDaGVja2JveChzZXR0aW5nc0tleSwgJ3t7LnNldHRpbmdzLmlnbm9yZUZpbHRlcnMudGl0bGV9fScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2FwaSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZXR0aW5nc0NoZWNrYm94KHNldHRpbmdzS2V5LCAne3suc2V0dGluZ3MuYXBpLnRpdGxlfX0nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAvLyBTZWxlY3QKICAgICAgICAgICAgY2FzZSAnZHVtbXlDaGFubmVsJzoKICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICd7ey5zZXR0aW5ncy5kdW1teUNoYW5uZWwudGl0bGV9fSc7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsnUFBWJywgJzMwIE1pbnV0ZXMnLCAnNjAgTWludXRlcycsICc5MCBNaW51dGVzJywgJzEyMCBNaW51dGVzJywgJzE4MCBNaW51dGVzJywgJzI0MCBNaW51dGVzJywgJzM2MCBNaW51dGVzJ107CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWydQUFYnLCAnMzBfTWludXRlcycsICc2MF9NaW51dGVzJywgJzkwX01pbnV0ZXMnLCAnMTIwX01pbnV0ZXMnLCAnMTgwX01pbnV0ZXMnLCAnMjQwX01pbnV0ZXMnLCAnMzYwX01pbnV0ZXMnXTsKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNlbGVjdElucHV0KHNldHRpbmdzS2V5LCB0aXRsZSwgdGV4dCwgdmFsdWVzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0dW5lcic6CiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAne3suc2V0dGluZ3MudHVuZXIudGl0bGV9fSc7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goaSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZWxlY3RJbnB1dChzZXR0aW5nc0tleSwgdGl0bGUsIHRleHQsIHZhbHVlcyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZXBnU291cmNlJzoKICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICd7ey5zZXR0aW5ncy5lcGdTb3VyY2UudGl0bGV9fSc7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsnUE1TJywgJ1hFUEcnXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbJ1BNUycsICdYRVBHJ107CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZWxlY3RJbnB1dChzZXR0aW5nc0tleSwgdGl0bGUsIHRleHQsIHZhbHVlcyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYmFja3VwLmtlZXAnOgogICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ3t7LnNldHRpbmdzLmJhY2t1cEtlZXAudGl0bGV9fSc7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsnNScsICcxMCcsICcyMCcsICczMCcsICc0MCcsICc1MCddOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsnNScsICcxMCcsICcyMCcsICczMCcsICc0MCcsICc1MCddOwogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2VsZWN0SW5wdXQoc2V0dGluZ3NLZXksIHRpdGxlLCB0ZXh0LCB2YWx1ZXMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2J1ZmZlci5zaXplLmtiJzoKICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICd7ey5zZXR0aW5ncy5idWZmZXJTaXplLnRpdGxlfX0nOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbJzAuNSBNQicsICcxIE1CJywgJzIgTUInLCAnMyBNQicsICc0IE1CJywgJzUgTUInLCAnNiBNQicsICc3IE1CJywgJzggTUInXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbJzUxMicsICcxMDI0JywgJzIwNDgnLCAnMzA3MicsICc0MDk2JywgJzUxMjAnLCAnNjE0NCcsICc3MTY4JywgJzgxOTInXTsKICAgICAgICAgICAgICAgIHNldHRpbmcgPSB0aGlzLmNyZWF0ZVNlbGVjdElucHV0KHNldHRpbmdzS2V5LCB0aXRsZSwgdGV4dCwgdmFsdWVzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdidWZmZXInOgogICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ3t7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy50aXRsZX19JzsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyd7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcuaW5mb19mYWxzZX19JywgJ0ZGbXBlZzogKHt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX2ZmbXBlZ319KScsICdWTEM6ICh7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcuaW5mb192bGN9fSknLCAnVGhyZWFkZmluOiAoe3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fdGhyZWFkZmlufX0pJ107CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyctJywgJ2ZmbXBlZycsICd2bGMnLCAndGhyZWFkZmluJ107CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gdGhpcy5jcmVhdGVTZWxlY3RJbnB1dChzZXR0aW5nc0tleSwgdGl0bGUsIHRleHQsIHZhbHVlcyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnd2ViY2xpZW50Lmxhbmd1YWdlJzoKICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICd7ey5zZXR0aW5ncy53ZWJjbGllbnQubGFuZ3VhZ2UudGl0bGV9fSc7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsnRW5nbGlzaCcsICdEZXV0c2NoJ107CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWydlbicsICdkZSddOwogICAgICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuY3JlYXRlU2VsZWN0SW5wdXQoc2V0dGluZ3NLZXksIHRpdGxlLCB0ZXh0LCB2YWx1ZXMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIEJ1dHRvbgogICAgICAgICAgICBjYXNlICd1cGxvYWRDdXN0b21JbWFnZSc6CiAgICAgICAgICAgICAgICBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICd7ey5zZXR0aW5ncy51cGxvYWRDdXN0b21JbWFnZS50aXRsZX19JyArICc6JzsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEQnKTsKICAgICAgICAgICAgICAgIHZhciBidXR0b24gPSB0aGlzLkNvbnRlbnQuY3JlYXRlSW5wdXQoJ2J1dHRvbicsICd1cGxvYWQnLCAne3suYnV0dG9uLnVwbG9hZEN1c3RvbUltYWdlfX0nKTsKICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogdXBsb2FkQ3VzdG9tSW1hZ2UoKTsnKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNldHRpbmc7CiAgICB9CiAgICBjcmVhdGVEZXNjcmlwdGlvbihzZXR0aW5nc0tleSkgewogICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1RSJyk7CiAgICAgICAgdmFyIHRleHQ7CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICBjYXNlICdhdXRoZW50aWNhdGlvbi53ZWInOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbldFQi5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdhdXRoZW50aWNhdGlvbi5tM3UnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbk0zVS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdhdXRoZW50aWNhdGlvbi5wbXMnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblBNUy5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdhdXRoZW50aWNhdGlvbi54bWwnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblhNTC5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdhdXRoZW50aWNhdGlvbi5hcGknOgogICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsnc2V0dGluZ3MnXVsnYXV0aGVudGljYXRpb24ud2ViJ10gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25BUEkuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndXBsb2FkQ3VzdG9tSW1hZ2UnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy51cGxvYWRDdXN0b21JbWFnZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdUaHJlYWRmaW5BdXRvVXBkYXRlJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdiaW5kaW5nSVBzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuYmluZGluZ0lQcy5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdiYWNrdXAua2VlcCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmJhY2t1cEtlZXAuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYmFja3VwLnBhdGgnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5iYWNrdXBQYXRoLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3RlbXAucGF0aCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnRlbXBQYXRoLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2J1ZmZlcic6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdidWZmZXIuc2l6ZS5rYic6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmJ1ZmZlclNpemUuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYnVmZmVyLnRlcm1pbmF0aW9uVGltZW91dCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmJ1ZmZlclRlcm1pbmF0aW9uVGltZW91dC5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdidWZmZXIuYXV0b1JlY29ubmVjdCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmF1dG9SZWNvbm5lY3QuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc3RvcmVCdWZmZXJJblJBTSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnN0b3JlQnVmZmVySW5SQU0uZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnb21pdFBvcnRzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3Mub21pdFBvcnRzLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZvcmNlSHR0cHMnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5mb3JjZUh0dHBzLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3VzZUh0dHBzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MudXNlSHR0cHMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZm9yY2VDbGllbnRIdHRwcyc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmZvcmNlQ2xpZW50SHR0cHMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndGhyZWFkZmluRG9tYWluJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MudGhyZWFkZmluRG9tYWluLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2VuYWJsZU5vbkFzY2lpJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuZW5hYmxlTm9uQXNjaWkuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZXBnQ2F0ZWdvcmllcyc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZXBnQ2F0ZWdvcmllc0NvbG9ycyc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXNDb2xvcnMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYnVmZmVyLnRpbWVvdXQnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5idWZmZXJUaW1lb3V0LmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3VzZXIuYWdlbnQnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy51c2VyQWdlbnQuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZmZtcGVnLnBhdGgnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5mZm1wZWdQYXRoLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZmbXBlZy5vcHRpb25zJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuZmZtcGVnT3B0aW9ucy5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd2bGMucGF0aCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnZsY1BhdGguZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndmxjLm9wdGlvbnMnOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy52bGNPcHRpb25zLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2VwZ1NvdXJjZSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLmVwZ1NvdXJjZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0dW5lcic6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnR1bmVyLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3VwZGF0ZSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnVwZGF0ZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdhcGknOgogICAgICAgICAgICAgICAgdGV4dCA9ICd7ey5zZXR0aW5ncy5hcGkuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc3NkcCc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnNzZHAuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZmlsZXMudXBkYXRlJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuZmlsZXNVcGRhdGUuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnY2FjaGUuaW1hZ2VzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MuY2FjaGVJbWFnZXMuZGVzY3JpcHRpb259fSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAneGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MucmVwbGFjZUVtcHR5SW1hZ2VzLmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3hlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlJzoKICAgICAgICAgICAgICAgIHRleHQgPSAne3suc2V0dGluZ3MucmVwbGFjZUNoYW5uZWxUaXRsZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd1ZHB4eSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLnVkcHh5LmRlc2NyaXB0aW9ufX0nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3dlYmNsaWVudC5sYW5ndWFnZSc6CiAgICAgICAgICAgICAgICB0ZXh0ID0gJ3t7LnNldHRpbmdzLndlYmNsaWVudC5sYW5ndWFnZS5kZXNjcmlwdGlvbn19JzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGV4dCA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAnJzsKICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1REJyk7CiAgICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1BSRScpOwogICAgICAgIHByZS5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQocHJlKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KfQpjbGFzcyBTZXR0aW5nc0NhdGVnb3J5SXRlbSBleHRlbmRzIFNldHRpbmdzQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoaGVhZGxpbmUsIHNldHRpbmdzS2V5cykgewogICAgICAgIHN1cGVyKGhlYWRsaW5lLCBzZXR0aW5nc0tleXMpOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh0aGlzLmhlYWRsaW5lKSk7CiAgICAgICAgLy8gVGFiZWxsZSBmw7xyIGRpZSBLYXRlZ29yaWUgZXJzdGVsbGVuCiAgICAgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEFCTEUnKTsKICAgICAgICB2YXIga2V5cyA9IHRoaXMuc2V0dGluZ3NLZXlzLnNwbGl0KCcsJyk7CiAgICAgICAga2V5cy5mb3JFYWNoKHNldHRpbmdzS2V5ID0+IHsKICAgICAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24ucG1zJzoKICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhlbnRpY2F0aW9uLm0zdSc6CiAgICAgICAgICAgICAgICBjYXNlICdhdXRoZW50aWNhdGlvbi54bWwnOgogICAgICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRpb24uYXBpJzoKICAgICAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWydzZXR0aW5ncyddWydhdXRoZW50aWNhdGlvbi53ZWInXSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5jcmVhdGVTZXR0aW5ncyhzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gdGhpcy5jcmVhdGVEZXNjcmlwdGlvbihzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoZGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHRhYmxlKTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVIUigpKTsKICAgIH0KfQpmdW5jdGlvbiBzaG93U2V0dGluZ3MoKSB7CiAgICBjb25zb2xlLmxvZygnU0VUVElOR1MnKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3NDYXRlZ29yeS5sZW5ndGg7IGkrKykgewogICAgICAgIHNldHRpbmdzQ2F0ZWdvcnlbaV0uY3JlYXRlQ2F0ZWdvcnkoKTsKICAgIH0KfQpmdW5jdGlvbiBzYXZlU2V0dGluZ3MoKSB7CiAgICBjb25zb2xlLmxvZygnU2F2ZSBTZXR0aW5ncycpOwogICAgdmFyIGNtZCA9ICdzYXZlU2V0dGluZ3MnOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50X3NldHRpbmdzJyk7CiAgICB2YXIgc2V0dGluZ3MgPSBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2hhbmdlZCcpOwogICAgdmFyIG5ld1NldHRpbmdzID0gbmV3IE9iamVjdCgpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5ncy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuYW1lOwogICAgICAgIHZhciB2YWx1ZTsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAnSU5QVVQnOgogICAgICAgICAgICAgICAgc3dpdGNoIChzZXR0aW5nc1tpXS50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2V0dGluZ3NbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS5jaGVja2VkOwogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VzZUh0dHBzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5wcm90b2NvbCA9ICdodHRwcyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5wcm90b2NvbCA9ICdodHRwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAzMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0JzoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2V0dGluZ3NbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndXBkYXRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGU7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnVmZmVyLnRpbWVvdXQnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnVmZmVyLnRlcm1pbmF0aW9uVGltZW91dCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JpbmRpbmdJUHMnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNMb2NhbGhvc3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhvc3RuYW1lID0gU3RyaW5nKGxvY2F0aW9uLmhvc3RuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RuYW1lID09PSAnbG9jYWxob3N0JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUgPSAnMTI3LjAuMC4xJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1ZhbHVlLmluY2x1ZGVzKGhvc3RuYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SG9zdG5hbWUgPSBuZXdWYWx1ZS5zcGxpdCgnOycpWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0hvc3RuYW1lID09PSAnMTI3LjAuMC4xJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoaG9zdG5hbWUsICdsb2NhbGhvc3QnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoaG9zdG5hbWUsIG5ld0hvc3RuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAzMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdTRUxFQ1QnOgogICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHBhcnNlSW50KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnd2ViY2xpZW50Lmxhbmd1YWdlJykgewogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICB9LCAzMDAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgZGF0YVsnc2V0dGluZ3MnXSA9IG5ld1NldHRpbmdzOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwp9CmZ1bmN0aW9uIHVwbG9hZEN1c3RvbUltYWdlKCkgewogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWQnKSkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWQnKS5yZW1vdmUoKTsKICAgIH0KICAgIHZhciB1cGxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdJTlBVVCcpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgndHlwZScsICdmaWxlJyk7CiAgICB1cGxvYWQuc2V0QXR0cmlidXRlKCdhY2NlcHQnLCAnLmpwZywucG5nJyk7CiAgICB1cGxvYWQuc2V0QXR0cmlidXRlKCdjbGFzcycsICdub3RWaXNpYmxlJyk7CiAgICB1cGxvYWQuc2V0QXR0cmlidXRlKCduYW1lJywgJycpOwogICAgdXBsb2FkLmlkID0gJ3VwbG9hZCc7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVwbG9hZCk7CiAgICB1cGxvYWQuY2xpY2soKTsKICAgIHVwbG9hZC5vbmJsdXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgYWxlcnQoKTsKICAgIH07CiAgICB1cGxvYWQub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGZpbGVuYW1lID0gdXBsb2FkLmZpbGVzWzBdLm5hbWU7CiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgdmFyIGZpbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPWZpbGVdJykuZmlsZXNbMF07CiAgICAgICAgaWYgKGZpbGUpIHsKICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZWFkZXIucmVzdWx0KTsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgdmFyIGNtZCA9ICd1cGxvYWRDdXN0b21JbWFnZSc7CiAgICAgICAgICAgICAgICBkYXRhWydiYXNlNjQnXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICBkYXRhWydmaWxlbmFtZSddID0gZmlsZS5uYW1lOwogICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgICAgICAgICAgICAgdmFyIHVwZGF0ZUxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWljb24nKTsKICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ28uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgdXBkYXRlTG9nby5jbGFzc05hbWUgPSAnY2hhbmdlZCc7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhbGVydCgnRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkJyk7CiAgICAgICAgfQogICAgICAgIHVwbG9hZC5yZW1vdmUoKTsKICAgICAgICByZXR1cm47CiAgICB9Owp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldHRpbmdzLmpzLm1hcA==" + webUI["web/public/js/settings.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHMvc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxnQkFBZ0I7SUFNcEIsWUFBWSxRQUFnQixFQUFFLFlBQW9CO1FBTGxELGVBQVUsR0FBVyxrQkFBa0IsQ0FBQztRQUN4QyxZQUFPLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFLekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQW1CLEVBQUUsS0FBYTtRQUN2RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUUvQixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsT0FB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" + webUI["web/public/js/version_check.js"] = "dmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0KICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH0KICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9CiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH0KICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7CiAgICB9KTsKfTsKZnVuY3Rpb24gZ2V0TmV3ZXN0UmVsZWFzZUZyb21HaXRodWIoKSB7CiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgewogICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7CiAgICAgICAgaWYgKFNFUlZFUi5jbGllbnRJbmZvKSB7CiAgICAgICAgICAgIC8qaWYgKFNFUlZFUi5jbGllbnRJbmZvLmJldGEpIHsKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICB9Ki8KICAgICAgICAgICAgY29uc3QgcmVsZWFzZXNEYXRhID0geWllbGQgZ2V0UmVsZWFzZXMoKTsKICAgICAgICAgICAgaWYgKHJlbGVhc2VzRGF0YSkgewogICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZXMgPSByZWxlYXNlc0RhdGEubWFwKChyZWxlYXNlKSA9PiAoewogICAgICAgICAgICAgICAgICAgIHRhZ19uYW1lOiByZWxlYXNlLnRhZ19uYW1lLAogICAgICAgICAgICAgICAgICAgIHByZXJlbGVhc2U6IHJlbGVhc2UucHJlcmVsZWFzZSwKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VmVyc2lvbjsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBwYXJzZVZlcnNpb24oU0VSVkVSLmNsaWVudEluZm8udmVyc2lvbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVW5hYmxlIHRvIHBhcnNlIGN1cnJlbnQgdmVyc2lvbiBpbmZvISIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBsYXRlc3RBdmFpbGFibGVWZXJzaW9uOwogICAgICAgICAgICAgICAgaWYgKFNFUlZFUi5jbGllbnRJbmZvLmJldGEpIHsKICAgICAgICAgICAgICAgICAgICBsYXRlc3RBdmFpbGFibGVWZXJzaW9uID0gcmVsZWFzZXMuZmluZChyZWxlYXNlID0+IHJlbGVhc2UucHJlcmVsZWFzZSA9PSB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxhdGVzdEF2YWlsYWJsZVZlcnNpb24gPSByZWxlYXNlcy5maW5kKHJlbGVhc2UgPT4gcmVsZWFzZS5wcmVyZWxlYXNlID09IGZhbHNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxldCBsYXRlc3RSZWxlYXNlVmVyc2lvbjsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgbGF0ZXN0UmVsZWFzZVZlcnNpb24gPSBwYXJzZVZlcnNpb24obGF0ZXN0QXZhaWxhYmxlVmVyc2lvbi50YWdfbmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVW5hYmxlIHRvIHBhcnNlIEdpdEh1YiB2ZXJzaW9uIGluZm8hIik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzTmV3ZXJWZXJzaW9uKGxhdGVzdFJlbGVhc2VWZXJzaW9uLCBjdXJyZW50VmVyc2lvbikpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25fY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vdGlmaWNhdGlvbl9jb250YWludGVyJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uVGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm90aWZpY2F0aW9uX3RpdGxlJyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2FpdG9uVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub3RpZmljYXRpb25fdGV4dCcpOwogICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvblRpdGxlLmlubmVySFRNTCA9ICd7ey5ub3RpZmljYXRpb24udXBkYXRlLnRpdGxlfX0nOwogICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhaXRvblRleHQuaW5uZXJIVE1MID0gJ3t7Lm5vdGlmaWNhdGlvbi51cGRhdGUuY29udGVudH19JzsKICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbG9zZU5vdGlmaWNhdGlvbicpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGRhdGVOb3dCdXR0b24nKTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVCdXR0b24udmFsdWUgPSAne3suYnV0dG9uLnVwZGF0ZX19JzsKICAgICAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVCdXR0b24ub25jbGljayA9ICgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQnV0dG9uLnZhbHVlID0gJ3t7LmJ1dHRvbi51cGRhdGluZ319JzsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmVyID0gbmV3IFNlcnZlcigidXBkYXRlVGhyZWFkZmluIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDIwMDAwKTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbl9jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgZmV0Y2hpbmcgcmVsZWFzZXMgb3Igbm8gcmVsZWFzZXMgZm91bmQuJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKfQpmdW5jdGlvbiBwYXJzZVZlcnNpb24odmVyc2lvbikgewogICAgLy8gVE9ETzogSW1wcm92ZSB2ZXJzaW9uIHBhcnNpbmcKICAgIGNvbnN0IHJlZ2V4ID0gL152PyhcZCspXC4oXGQrKSg/OlwuKFxkKykpPyg/OlwuKFxkKykpPyg/OiBcKChcZCspKD86LShcdyspKT9cKSk/KD86LShcdyspKT8kLzsKICAgIGNvbnN0IG1hdGNoID0gdmVyc2lvbi5tYXRjaChyZWdleCk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgICBjb25zdCBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7CiAgICAgICAgY29uc3QgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApOwogICAgICAgIGNvbnN0IHBhdGNoID0gbWF0Y2hbM10gPyBwYXJzZUludChtYXRjaFszXSwgMTApIDogKG1hdGNoWzRdID8gcGFyc2VJbnQobWF0Y2hbNF0sIDEwKSA6IDApOyAvLyBEZWZhdWx0IHRvIDAgaWYgcGF0Y2ggaXMgbm90IHByZXNlbnQKICAgICAgICBjb25zdCBidWlsZCA9IG1hdGNoWzRdID8gcGFyc2VJbnQobWF0Y2hbNF0sIDEwKSA6IChtYXRjaFs1XSA/IHBhcnNlSW50KG1hdGNoWzVdLCAxMCkgOiAwKTsgLy8gRGVmYXVsdCB0byAwIGlmIHBhdGNoIGlzIG5vdCBwcmVzZW50CiAgICAgICAgcmV0dXJuIFttYWpvciwgbWlub3IsIHBhdGNoLCBidWlsZF07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmVyc2lvbiBmb3JtYXQiKTsKICAgIH0KfQpmdW5jdGlvbiBpc05ld2VyVmVyc2lvbihsYXRlc3QsIGN1cnJlbnQpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF0ZXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGxhdGVzdFtpXSA+IGN1cnJlbnRbaV0pCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChsYXRlc3RbaV0gPCBjdXJyZW50W2ldKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gZ2V0UmVsZWFzZXMoKSB7CiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgZmV0Y2goJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvbWFyY2VsR29lcmVudHovVGhyZWFkZmluL3JlbGVhc2VzJyk7CiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZmV0Y2hpbmcgcmVsZWFzZXMuIFN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcmVsZWFzZXMgPSB5aWVsZCByZXNwb25zZS5qc29uKCk7CiAgICAgICAgICAgIHJldHVybiByZWxlYXNlczsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHJlbGVhc2VzOicsIGVycm9yKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfSk7Cn0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbl9jaGVjay5qcy5tYXA=" + webUI["web/public/js/version_check.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbl9jaGVjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cy92ZXJzaW9uX2NoZWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQWUsMEJBQTBCOztRQUVyQyxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCOztlQUVHO1lBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxXQUFXLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNmLE1BQU0sUUFBUSxHQUFjLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzVELFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtvQkFDMUIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2lCQUNqQyxDQUFDLENBQUMsQ0FBQztnQkFFSixJQUFJLGNBQWMsQ0FBQTtnQkFDbEIsSUFBRyxDQUFDO29CQUNDLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDOUQsQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUE7b0JBQ3BELE9BQU07Z0JBQ1YsQ0FBQztnQkFDRCxJQUFJLHNCQUErQixDQUFDO2dCQUNwQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3pCLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUNsRixDQUFDO3FCQUFNLENBQUM7b0JB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" + webUI["web/public/lang/de.json"] = "ew0KICAibWFpbk1lbnUiOiB7DQogICAgIml0ZW0iOiB7DQogICAgICAicGxheWxpc3QiOiAiV2llZGVyZ2FiZWxpc3RlIiwNCiAgICAgICJwbXNJRCI6ICJQTVMgSUQiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIiLA0KICAgICAgInhtbHR2IjogIlhNTFRWIiwNCiAgICAgICJtYXBwaW5nIjogIlp1b3JkbnVuZyIsDQogICAgICAidXNlcnMiOiAiQmVudXR6ZXIiLA0KICAgICAgInNldHRpbmdzIjogIkVpbnN0ZWxsdW5nZW4iLA0KICAgICAgImxvZyI6ICJQcm90b2tvbGwiLA0KICAgICAgImxvZ291dCI6ICJBYm1lbGRlbiINCiAgICB9LA0KICAgICJoZWFkbGluZSI6IHsNCiAgICAgICJwbGF5bGlzdCI6ICJMb2thbGUgb2RlciBlbnRmZXJudGUgV2llZGVyZ2FiZWxpc3RlbiIsDQogICAgICAiZmlsdGVyIjogIldpZWRlcmdhYmVsaXN0ZSBmaWx0ZXJuIiwNCiAgICAgICJ4bWx0diI6ICJMb2thbGUgb2RlciBlbnRmZXJudGUgWE1MVFYtRGF0ZWllbiIsDQogICAgICAibWFwcGluZyI6ICJadW9yZG51bmcgZGVyIFdpZWRlcmdhYmVsaXN0ZW5rYW7DpGxlIHp1IEVQRy1LYW7DpGxlbiIsDQogICAgICAidXNlcnMiOiAiQmVudXR6ZXJ2ZXJ3YWx0dW5nIiwNCiAgICAgICJzZXR0aW5ncyI6ICJFaW5zdGVsbHVuZ2VuIiwNCiAgICAgICJsb2ciOiAiUHJvdG9rb2xsIiwNCiAgICAgICJsb2dvdXQiOiAiQWJtZWxkZW4iDQogICAgfQ0KICB9LA0KICAiY29uZmlybSI6IHsNCiAgICAicmVzdG9yZSI6ICJBbGxlIERhdGVuIHdlcmRlbiBkdXJjaCBkaWUgYXVzIGRlbSBCYWNrdXAgZXJzZXR6dC4gU29sbGVuIGRpZSBEYXRlaWVuIHdpZWRlcmhlcmdlc3RlbGx0IHdlcmRlbj8iDQogIH0sDQogICJhbGVydCI6IHsNCiAgICAiZmlsZUxvYWRpbmdFcnJvciI6ICJEYXRlaSBrb25udGUgbmljaHQgZ2VsYWRlbiB3ZXJkZW4iLA0KICAgICJpbnZhbGlkQ2hhbm5lbE51bWJlciI6ICJVbmfDvGx0aWdlIEthbmFsbnVtbWVyIiwNCiAgICAibWlzc2luZ0lucHV0IjogIkZlaGxlbmRlIEVpbmdhYmUiDQogIH0sDQogICJidXR0b24iOiB7DQogICAgImJhY2siOiAiWnVyw7xjayIsDQogICAgImJhY2t1cCI6ICJCYWNrdXAiLA0KICAgICJidWxrRWRpdCI6ICJNYXNzZW5iZWFyYmVpdHVuZyIsDQogICAgImNhbmNlbCI6ICJBYmJyZWNoZW4iLA0KICAgICJkZWxldGUiOiAiTMO2c2NoZW4iLA0KICAgICJkb25lIjogIkZlcnRpZyIsDQogICAgImxvZ2luIjogIkFubWVsZGVuIiwNCiAgICAibmV3IjogIk5ldSIsDQogICAgIm5leHQiOiAiV2VpdGVyIiwNCiAgICAicmVzdG9yZSI6ICJXaWVkZXJoZXJzdGVsbGVuIiwNCiAgICAic2F2ZSI6ICJTcGVpY2hlcm4iLA0KICAgICJzZWFyY2giOiAiU3VjaGVuIiwNCiAgICAidXBkYXRlIjogIkFrdHVhbGlzaWVyZW4iLA0KICAgICJ1cGRhdGluZyI6ICJBa3R1YWxpc2llcmUuLi4iLA0KICAgICJjcmFldGVBY2NvdW50IjogIktvbnRvIGVyc3RlbGxlbiIsDQogICAgInJlc2V0TG9ncyI6ICJQcm90b2tvbGxlIHp1csO8Y2tzZXR6ZW4iLA0KICAgICJ1cGxvYWRMb2dvIjogIkxvZ28gaG9jaGxhZGVuIiwNCiAgICAidXBsb2FkQ3VzdG9tSW1hZ2UiOiAiQmVudXR6ZXJkZWZpbmllcnRlcyBCaWxkIGhvY2hsYWRlbiIsDQogICAgInNvcnRDaGFubmVsc0FscGhhIjogIkthbsOkbGUgYWxwaGFiZXRpc2NoIHNvcnRpZXJlbiIsDQogICAgInNvcnRDaGFubmVsTnVtYmVycyI6ICJLYW7DpGxlIHNvcnRpZXJlbiIsDQogICAgImJhY2tUb1RvcCI6ICJHZWhlIG5hY2ggb2JlbiIsDQogICAgInNlcnZlckluZm9ybWF0aW9uIjogIlNlcnZlciBJbmZvcm1hdGlvbmVuIg0KICB9LA0KICAiZmlsdGVyIjogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJuYW1lIjogIkZpbHRlcm5hbWUiLA0KICAgICAgInR5cGUiOiAiRmlsdGVydHlwIiwNCiAgICAgICJmaWx0ZXIiOiAiRmlsdGVyIg0KICAgIH0sDQogICAgImN1c3RvbSI6ICJCZW51dHplcmRlZmluaWVydCIsDQogICAgImdyb3VwIjogIkdydXBwZSIsDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVybmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVybmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInN0YXJ0aW5nbnVtYmVyIjogew0KICAgICAgInRpdGxlIjogIkZpbHRlci1TdGFydG51bW1lciIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyLVN0YXJ0bnVtbWVyIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydGthbmFsbnVtbWVyIGbDvHIgZGllc2VuIEdydXBwZW5maWx0ZXIgKFN0YW5kYXJkIGlzdCAxMDAwKSINCiAgICB9LA0KICAgICJjYXRlZ29yeSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXJrYXRlZ29yaWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlcmthdGVnb3JpZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRmlsdGVya2F0ZWdvcmllIHNldHp0IGFsbGUgS2Fuw6RsZSBpbSBGaWx0ZXIgYXVmIGVpbmUgYmVzdGltbXRlIEthdGVnb3JpZSAoTmFjaHJpY2h0ZW4sIFNwb3J0IHVzdy4pIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkJlc2NocmVpYnVuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiQmVzY2hyZWlidW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJUeXAiLA0KICAgICAgImdyb3VwVGl0bGUiOiAiR3J1cHBlbnRpdGVsIiwNCiAgICAgICJjdXN0b21GaWx0ZXIiOiAiQmVudXR6ZXJkZWZpbmllcnRlciBGaWx0ZXIiDQogICAgfSwNCiAgICAiY2FzZVNlbnNpdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJHcm/Dny0vS2xlaW5zY2hyZWlidW5nIGJlYWNodGVuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWx0ZXJSdWxlIjogew0KICAgICAgInRpdGxlIjogIkZpbHRlcnJlZ2VsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJTcG9ydCB7SER9ICF7RVMsSVR9IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsdGVyR3JvdXAiOiB7DQogICAgICAidGl0bGUiOiAiR3J1cHBlbnRpdGVsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlfDpGhsZW4gU2llIGVpbmUgTTNVLUdydXBwZS4gKFrDpGhsZXIpPGJyPkRhcyDDhG5kZXJuIGRlcyBHcnVwcGVudGl0ZWxzIGluIGRlciBNM1UgbWFjaHQgZGVuIEZpbHRlciB1bmfDvGx0aWcuIg0KICAgIH0sDQogICAgImluY2x1ZGUiOiB7DQogICAgICAidGl0bGUiOiAiRWluc2NobGllw59lbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRkhELFVIRCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiS2FuYWxuYW1lIG11c3MgZW50aGFsdGVuLjxicj4oS29tbWFnZXRyZW5udCkgS29tbWEgYmVkZXV0ZXQgb2RlciINCiAgICB9LA0KICAgICJleGNsdWRlIjogew0KICAgICAgInRpdGxlIjogIkF1c3NjaGxpZcOfZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkVTLElUIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJLYW5hbG5hbWUgZGFyZiBuaWNodCBlbnRoYWx0ZW4uPGJyPihLb21tYWdldHJlbm50KSBLb21tYSBiZWRldXRldCBvZGVyIg0KICAgIH0NCiAgfSwNCiAgInBsYXlsaXN0Ijogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJwbGF5bGlzdCI6ICJXaWVkZXJnYWJlbGlzdGUiLA0KICAgICAgInR1bmVyIjogIlR1bmVyIiwNCiAgICAgICJsYXN0VXBkYXRlIjogIkxldHp0ZSBBa3R1YWxpc2llcnVuZyIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIlZlcmbDvGdiYXJrZWl0IiwNCiAgICAgICJ0eXBlIjogIlR5cCIsDQogICAgICAic3RyZWFtcyI6ICJTdHJlYW1zIiwNCiAgICAgICJncm91cFRpdGxlIjogIkdydXBwZW50aXRlbCIsDQogICAgICAidHZnSUQiOiAidHZnLWlkIiwNCiAgICAgICJ1bmlxdWVJRCI6ICJFaW5kZXV0aWdlIElEIg0KICAgIH0sDQogICAgInBsYXlsaXN0VHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJXaWVkZXJnYWJlbGlzdGVudHlwIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ0eXBlIjogew0KICAgICAgInRpdGxlIjogIlR5cCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAibmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJXaWVkZXJnYWJlbGlzdGVubmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkJlc2NocmVpYnVuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiQmVzY2hyZWlidW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsZU0zVSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UtRGF0ZWkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkRhdGVpcGZhZCBvZGVyIFVSTCBkZXIgTTNVIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsZUhESFIiOiB7DQogICAgICAidGl0bGUiOiAiSERIb21lUnVuIElQIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJJUC1BZHJlc3NlIHVuZCBQb3J0ICgxOTIuMTY4LjEuMTA6NTAwNCkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJUdW5lciAvIFN0cmVhbXMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQW56YWhsIGRlciBwYXJhbGxlbGVuIFZlcmJpbmR1bmdlbiwgZGllIHp1bSBBbmJpZXRlciBoZXJnZXN0ZWxsdCB3ZXJkZW4ga8O2bm5lbi4gPGJyPk51ciB2ZXJmw7xnYmFyIG1pdCBha3RpdmllcnRlbSBQdWZmZXIuPGJyPk5ldWUgRWluc3RlbGx1bmdlbiB3ZXJkZW4gZXJzdCBuYWNoIEJlZW5kZW4gYWxsZXIgU3RyZWFtcyBhbmdld2VuZGV0LiINCiAgICB9LA0KICAgICJodHRwX3Byb3h5X2lwIjogew0KICAgICAgInRpdGxlIjogIkhUVFAtUHJveHktSVAiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIjE5Mi4xNjguMC4yIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJUC1BZHJlc3NlLCBkaWUgdm9tIEhUVFAtUHJveHkgdmVyd2VuZGV0IHdlcmRlbiBzb2xsIg0KICAgIH0sDQogICAgImh0dHBfcHJveHlfcG9ydCI6IHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQLVByb3h5LVBvcnQiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIjg4ODgiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBvcnQsIGRlciB2b20gSFRUUC1Qcm94eSB2ZXJ3ZW5kZXQgd2VyZGVuIHNvbGwiDQogICAgfQ0KICB9LA0KICAieG1sdHYiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgImd1aWRlIjogIkd1aWRlIiwNCiAgICAgICJsYXN0VXBkYXRlIjogIkxldHp0ZSBBa3R1YWxpc2llcnVuZyIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIlZlcmbDvGdiYXJrZWl0IiwNCiAgICAgICJjaGFubmVscyI6ICJLYW7DpGxlIiwNCiAgICAgICJwcm9ncmFtcyI6ICJQcm9ncmFtbWUiDQogICAgfSwNCiAgICAibmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJHdWlkZW5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJCZXNjaHJlaWJ1bmciLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkJlc2NocmVpYnVuZyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVYTUxUViI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUVi1EYXRlaSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRGF0ZWlwZmFkIG9kZXIgVVJMIGRlciBYTUxUViIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImh0dHBfcHJveHlfaXAiOiB7DQogICAgICAidGl0bGUiOiAiSFRUUC1Qcm94eS1JUCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiMTkyLjE2OC4wLjIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklQLUFkcmVzc2UsIGRpZSB2b20gSFRUUC1Qcm94eSB2ZXJ3ZW5kZXQgd2VyZGVuIHNvbGwiDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9wb3J0Ijogew0KICAgICAgInRpdGxlIjogIkhUVFAtUHJveHktUG9ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiODg4OCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUG9ydCwgZGVyIHZvbSBIVFRQLVByb3h5IHZlcndlbmRldCB3ZXJkZW4gc29sbCINCiAgICB9DQogIH0sDQogICJtYXBwaW5nIjogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJjaE5vIjogIkthbmFsbnIuIiwNCiAgICAgICJsb2dvIjogIkxvZ28iLA0KICAgICAgImNoYW5uZWxOYW1lIjogIkthbmFsbmFtZSIsDQogICAgICAicGxheWxpc3QiOiAiV2llZGVyZ2FiZWxpc3RlIiwNCiAgICAgICJncm91cFRpdGxlIjogIkdydXBwZW50aXRlbCIsDQogICAgICAieG1sdHZGaWxlIjogIlhNTFRWLURhdGVpIiwNCiAgICAgICJ4bWx0dklEIjogIlhNTFRWLUlEIg0KICAgIH0sDQogICAgImFjdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBa3RpdiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiY2hhbm5lbE5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiS2FuYWxuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjaGFubmVsR3JvdXBTdGFydCI6IHsNCiAgICAgICJ0aXRsZSI6ICJLYW5hbGdydXBwZW5zdGFydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiB7DQogICAgICAidGl0bGUiOiAiQWxwaGFiZXRpc2NoIHNvcnRpZXJlbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic29ydENoYW5uZWxzIjogew0KICAgICAgInRpdGxlIjogIkthbsOkbGUgc29ydGllcmVuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJLYW5hbGJlc2NocmVpYnVuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiV2lyZCB2b20gRHVtbXkgYWxzIFhNTC1CZXNjaHJlaWJ1bmcgdmVyd2VuZGV0IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidXBkYXRlQ2hhbm5lbE5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiS2FuYWxuYW1lIGFrdHVhbGlzaWVyZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxMb2dvIjogew0KICAgICAgInRpdGxlIjogIkxvZ28tVVJMIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ1cGRhdGVDaGFubmVsTG9nbyI6IHsNCiAgICAgICJ0aXRsZSI6ICJLYW5hbC1Mb2dvIGFrdHVhbGlzaWVyZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImVwZ0NhdGVnb3J5Ijogew0KICAgICAgInRpdGxlIjogIkVQRy1LYXRlZ29yaWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm0zdUdyb3VwVGl0bGUiOiB7DQogICAgICAidGl0bGUiOiAiR3J1cHBlbnRpdGVsICh0aHJlYWRmaW4ubTN1KSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAieG1sdHZGaWxlIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWLURhdGVpIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ4bWx0dkNoYW5uZWwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MVFYtS2FuYWwiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInBwdmV4dHJhIjogew0KICAgICAgInRpdGxlIjogIlBQVi1adXNhdHp0aXRlbCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEaWVzIGbDvGd0IGRlbSBQcm9ncmFtbWRhdGVuIGJlbnV0emVyZGVmaW5pZXJ0ZW4gVGV4dCBoaW56dSINCiAgICB9LA0KICAgICJiYWNrdXBDaGFubmVsMSI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAtS2FuYWwgMSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDIiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwLUthbmFsIDIiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImJhY2t1cENoYW5uZWwzIjogew0KICAgICAgInRpdGxlIjogIkJhY2t1cC1LYW5hbCAzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJoaWRlQ2hhbm5lbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAtS2FuYWwgYXVzYmxlbmRlbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAidXNlcnMiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgInVzZXJuYW1lIjogIkJlbnV0emVybmFtZSIsDQogICAgICAicGFzc3dvcmQiOiAiUGFzc3dvcnQiLA0KICAgICAgIndlYiI6ICJXRUIiLA0KICAgICAgInBtcyI6ICJQTVMiLA0KICAgICAgIm0zdSI6ICJNM1UiLA0KICAgICAgInhtbCI6ICJYTUwiLA0KICAgICAgImFwaSI6ICJBUEkiDQogICAgfSwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiQmVudXR6ZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJCZW51dHplcm5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjb25maXJtIjogew0KICAgICAgInRpdGxlIjogIkJlc3TDpHRpZ2VuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29ydCBiZXN0w6R0aWdlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIndlYiI6IHsNCiAgICAgICJ0aXRsZSI6ICJXZWItWnVnYW5nIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwbXMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TLVp1Z2FuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAibTN1Ijogew0KICAgICAgInRpdGxlIjogIk0zVS1adWdhbmciLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInhtbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUwtWnVnYW5nIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJhcGkiOiB7DQogICAgICAidGl0bGUiOiAiQVBJLVp1Z2FuZyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAic2V0dGluZ3MiOiB7DQogICAgImNhdGVnb3J5Ijogew0KICAgICAgImdlbmVyYWwiOiAiQWxsZ2VtZWluIiwNCiAgICAgICJjdXN0b21pemF0aW9uIjogIkFucGFzc3VuZyIsDQogICAgICAiZmlsZXMiOiAiRGF0ZWllbiIsDQogICAgICAibmV0d29yayI6ICJOZXR6d2VyayIsDQogICAgICAic3RyZWFtaW5nIjogIlN0cmVhbWluZyIsDQogICAgICAiYmFja3VwIjogIlNpY2hlcnVuZyIsDQogICAgICAiYXV0aGVudGljYXRpb24iOiAiQXV0aGVudGlmaXppZXJ1bmciLA0KICAgICAgIndlYmNsaWVudCI6ICJXZWIgY2xpZW50Ig0KICAgIH0sDQogICAgInVwbG9hZEN1c3RvbUltYWdlIjogew0KICAgICAgInRpdGxlIjogIkJlbnV0emVyZGVmaW5pZXJ0ZXMgQmlsZCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSGllciBrw7ZubmVuIFNpZSBlaW4gQmlsZCBob2NobGFkZW4sIGRhcyBkZW4gQmVudXR6ZXJuIGFuZ2V6ZWlndCB3aXJkLCB3ZW5uIGtlaW5lIHdlaXRlcmVuIFR1bmVyIGluIGRlciBXaWVkZXJnYWJlbGlzdGUgdmVyZsO8Z2JhciBzaW5kISINCiAgICB9LA0KICAgICJ1cGRhdGUiOiB7DQogICAgICAidGl0bGUiOiAiWmVpdHBsYW4gZsO8ciBVcGRhdGVzIChXaWVkZXJnYWJlbGlzdGUsIFhNTFRWLCBTaWNoZXJ1bmcpIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIwMDAwLDEwMDAsMjAwMCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiWmVpdCBpbSAyNC1TdHVuZGVuLUZvcm1hdCAoMDgwMCA9IDg6MDAgVWhyKS4gTWVocmVyZSBaZWl0ZW4ga8O2bm5lbiBkdXJjaCBLb21tYXMgZ2V0cmVubnQgZWluZ2VnZWJlbiB3ZXJkZW4uIExhc3NlbiBTaWUgZGllc2VzIEZlbGQgbGVlciwgd2VubiBrZWluZSBVcGRhdGVzIGR1cmNoZ2Vmw7xocnQgd2VyZGVuIHNvbGxlbi4iDQogICAgfSwNCiAgICAiYXBpIjogew0KICAgICAgInRpdGxlIjogIkFQSS1TY2huaXR0c3RlbGxlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICLDnGJlciBkaWUgQVBJLVNjaG5pdHRzdGVsbGUga8O2bm5lbiBCZWZlaGxlIGFuIFRocmVhZGZpbiBnZXNlbmRldCB3ZXJkZW4uIEFQSS1Eb2t1bWVudGF0aW9uIGlzdCA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL21hcmNlbEdvZXJlbnR6L1RocmVhZGZpbi93aWtpL0FQSVwiPmhpZXI8L2E+Ig0KICAgIH0sDQogICAgInNzZHAiOiB7DQogICAgICAidGl0bGUiOiAiU1NEUCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU1NEUCBpc3QgZWluIE5ldHp3ZXJrcHJvdG9rb2xsIHp1ciBEaWVuc3Rlcmtlbm51bmcuIEVzIHdpcmQgenVyIGF1dG9tYXRpc2NoZW4gRXJrZW5udW5nIHZvbiBUaHJlYWRmaW4gaW0gTmV0endlcmsgdmVyd2VuZGV0LiINCiAgICB9LA0KICAgICJkdW1teSI6IHsNCiAgICAgICJ0aXRsZSI6ICJTdGFuZGFyZC1EdW1teS1EYXRlbiBha3RpdmllcmVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXZW5uIGFrdGl2aWVydCwgd2VyZGVuIGluYWt0aXZlIEthbsOkbGUgYXV0b21hdGlzY2ggZGVtIHVudGVuIGFuZ2VnZWJlbmVuIER1bW15LUthbmFsIHp1Z2VvcmRuZXQuIFZlcndlbmRlbiBTaWUgZGllcywgdW0gTGl2ZS1FdmVudC1LYW7DpGxlIGFrdGl2IHp1IGhhbHRlbi4iDQogICAgfSwNCiAgICAiZHVtbXlDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIkR1bW15LUthbmFsIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXw6RobGVuIFNpZSBkZW4gU3RhbmRhcmRrYW5hbCBhdXMsIGRlciB2ZXJ3ZW5kZXQgd2VyZGVuIHNvbGwsIHdlbm4gaW5ha3RpdmUgS2Fuw6RsZSBkZW4gRHVtbXktRGF0ZW4genVnZW9yZG5ldCB3ZXJkZW4uIg0KICAgIH0sDQogICAgImlnbm9yZUZpbHRlcnMiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVyIGlnbm9yaWVyZW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gYWt0aXZpZXJ0LCB3ZXJkZW4gRmlsdGVyIHZvbGxzdMOkbmRpZyBpZ25vcmllcnQuIg0KICAgIH0sDQogICAgImVwZ1NvdXJjZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJFUEctUXVlbGxlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQTVM6PGJyPi0gVmVyd2VuZGVuIFNpZSBFUEctRGF0ZW4gdm9uIFBsZXgsIEVtYnkgb2RlciBKZWxseWZpbiA8YnI+PGJyPlhFUEc6PGJyPi0gVmVyd2VuZHVuZyBlaW5lciBvZGVyIG1laHJlcmVyIFhNTFRWLURhdGVpZW48YnI+LSBLYW5hbHZlcndhbHR1bmc8YnI+LSBNM1UgLyBYTUxUVi1FeHBvcnQgKEhUVFAtTGluayBmw7xyIElQVFYtQXBwcykiDQogICAgfSwNCiAgICAidHVuZXIiOiB7DQogICAgICAidGl0bGUiOiAiQW56YWhsIGRlciBUdW5lciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQW56YWhsIGRlciBwYXJhbGxlbGVuIFZlcmJpbmR1bmdlbiwgZGllIHp1bSBBbmJpZXRlciBoZXJnZXN0ZWxsdCB3ZXJkZW4ga8O2bm5lbi48YnI+VmVyZsO8Z2JhciBmw7xyOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVIChtaXQgYWt0aXZlbSBQdWZmZXIpLjxicj5OYWNoIGVpbmVyIMOEbmRlcnVuZyBtdXNzIFRocmVhZGZpbiBpbiBkZW4gRFZSLUVpbnN0ZWxsdW5nZW4gdm9uIFBsZXggLyBFbWJ5IC8gSmVsbHlmaW4gZ2Vsw7ZzY2h0IHVuZCBlcm5ldXQgZWluZ2VyaWNodGV0IHdlcmRlbi4iDQogICAgfSwNCiAgICAiZmlsZXNVcGRhdGUiOiB7DQogICAgICAidGl0bGUiOiAiQWt0dWFsaXNpZXJ0IGFsbGUgRGF0ZWllbiBiZWltIFN0YXJ0IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBa3R1YWxpc2llcnQgYWxsZSBXaWVkZXJnYWJlbGlzdGVuLCBUdW5lciB1bmQgWE1MVFYtRGF0ZWllbiBiZWltIFN0YXJ0LiINCiAgICB9LA0KICAgICJjYWNoZUltYWdlcyI6IHsNCiAgICAgICJ0aXRsZSI6ICJCaWxkLUNhY2hpbmciLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkRpZXNlIE9wdGlvbiBzY2hyZWlidCBkaWUgbTN1LURhdGVpIGluIGRlbiBsb2thbGVuIEJpbGQtQ2FjaGUgZsO8ciBUVi1Mb2dvcyB1bS48YnI+QWxsZSBCaWxkZXIgYXVzIGRlciBYTUxUVi1EYXRlaSB3ZXJkZW4gendpc2NoZW5nZXNwZWljaGVydCwgd2FzIGVpbmUgc2NobmVsbGVyZSBEYXJzdGVsbHVuZyBkZXMgUmFzdGVycyBpbSBDbGllbnQgZXJtw7ZnbGljaHQuPGJyPkRhcyBIZXJ1bnRlcmxhZGVuIGRlciBCaWxkZXIga2FubiBlaW5lIFdlaWxlIGRhdWVybiB1bmQgd2lyZCBpbSBIaW50ZXJncnVuZCBkdXJjaGdlZsO8aHJ0Ljxicj4iDQogICAgfSwNCiAgICAicmVwbGFjZUVtcHR5SW1hZ2VzIjogew0KICAgICAgInRpdGxlIjogIkZlaGxlbmRlIFByb2dyYW1tYmlsZGVyIGVyc2V0emVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXZW5uIGRhcyBQb3N0ZXIgaW0gWE1MVFYtUHJvZ3JhbW0gZmVobHQsIHdpcmQgZGFzIEthbmFsbG9nbyB2ZXJ3ZW5kZXQuIg0KICAgIH0sDQogICAgInJlcGxhY2VDaGFubmVsVGl0bGUiOiB7DQogICAgICAidGl0bGUiOiAiUFBWLUthbmFsdGl0ZWwvQmVzY2hyZWlidW5nIGVyc2V0emVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWZXJ3ZW5kZW4gU2llIGRpZXMsIHdlbm4gSWhyIEFuYmlldGVyIGRlbiBQUFYtRXJlaWduaXNuYW1lbiBkZW0gS2FuYWxuYW1lbiB6dW9yZG5ldCINCiAgICB9LA0KICAgICJUaHJlYWRmaW5BdXRvVXBkYXRlIjogew0KICAgICAgInRpdGxlIjogIkF1dG9tYXRpc2NoZXMgVXBkYXRlIHZvbiBUaHJlYWRmaW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gZWluZSBuZXVlIFZlcnNpb24gdm9uIFRocmVhZGZpbiB2ZXJmw7xnYmFyIGlzdCwgd2lyZCBzaWUgYXV0b21hdGlzY2ggaW5zdGFsbGllcnQuIERpZSBVcGRhdGVzIHdlcmRlbiB2b24gR2l0SHViIGhlcnVudGVyZ2VsYWRlbi4iDQogICAgfSwNCiAgICAic3RyZWFtQnVmZmVyaW5nIjogew0KICAgICAgInRpdGxlIjogIlN0cmVhbS1QdWZmZXIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkZ1bmt0aW9uZW4gZGVzIFB1ZmZlcnM6PGJyPi0gRGVyIFN0cmVhbSB3aXJkIHZvbiBGRm1wZWcsIFZMQyBvZGVyIFRocmVhZGZpbiBhbiBQbGV4LCBFbWJ5LCBKZWxseWZpbiBvZGVyIE0zVSBQbGF5ZXIgd2VpdGVyZ2VsZWl0ZXQ8YnI+LSBLbGVpbmUgUnVja2xlciBkZXIgU3RyZWFtcyBrw7ZubmVuIGF1c2dlZ2xpY2hlbiB3ZXJkZW48YnI+LSBITFMgLyBNM1U4LVVudGVyc3TDvHR6dW5nPGJyPi0gUlRQIC8gUlRQUy1VbnRlcnN0w7x0enVuZzxicj4tIFJlLVN0cmVhbWluZzxicj4tIFNlcGFyYXRlcyBUdW5lci1MaW1pdCBmw7xyIGplZGUgV2llZGVyZ2FiZWxpc3RlIiwNCiAgICAgICJpbmZvX2ZhbHNlIjogIktlaW4gUHVmZmVyIChDbGllbnQgdmVyYmluZGV0IHNpY2ggZGlyZWt0IG1pdCBkZW0gU3RyZWFtaW5nLVNlcnZlcikiLA0KICAgICAgImluZm9fZmZtcGVnIjogIkZGbXBlZyB2ZXJiaW5kZXQgc2ljaCBtaXQgZGVtIFN0cmVhbWluZy1TZXJ2ZXIiLA0KICAgICAgImluZm9fdmxjIjogIlZMQyB2ZXJiaW5kZXQgc2ljaCBtaXQgZGVtIFN0cmVhbWluZy1TZXJ2ZXIiLA0KICAgICAgImluZm9fdGhyZWFkZmluIjogIlRocmVhZGZpbiB2ZXJiaW5kZXQgc2ljaCBtaXQgZGVtIFN0cmVhbWluZy1TZXJ2ZXIiDQogICAgfSwNCiAgICAidWRweHkiOiB7DQogICAgICAidGl0bGUiOiAiVURQeHktQWRyZXNzZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRGllIEFkcmVzc2UgSWhyZXMgVURQeHktU2VydmVycy4gV2VubiBnZXNldHp0IHVuZCBkaWUgS2FuYWwtVVJMcyBpbiBkZXIgbTN1IE11bHRpY2FzdCBzaW5kLCB3aXJkIFRocmVhZGZpbiBzaWUgc28gdW1zY2hyZWliZW4sIGRhc3Mgc2llIMO8YmVyIGRlbiBVRFB4eS1EaWVuc3QgYXVmZ2VydWZlbiB3ZXJkZW4uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJob3N0OnBvcnQiDQogICAgfSwNCiAgICAiZmZtcGVnUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQZmFkIHp1ciBGRm1wZWctQmluw6RyZGF0ZWkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBmYWQgenVyIEZGbXBlZy1CaW7DpHJkYXRlaS4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2ZmbXBlZyINCiAgICB9LA0KICAgICJmZm1wZWdPcHRpb25zIjogew0KICAgICAgInRpdGxlIjogIkZGbXBlZy1PcHRpb25lbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRkZtcGVnLU9wdGlvbmVuLjxicj7DhG5kZXJuIFNpZSBkaWVzZSBudXIsIHdlbm4gU2llIHdpc3Nlbiwgd2FzIFNpZSB0dW4uPGJyPkxhc3NlbiBTaWUgZGFzIEZlbGQgbGVlciwgdW0gZGllIFN0YW5kYXJkZWluc3RlbGx1bmdlbiB6dSB2ZXJ3ZW5kZW4uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMYXNzZW4gU2llIGRhcyBGZWxkIGxlZXIsIHVtIGRpZSBTdGFuZGFyZGVpbnN0ZWxsdW5nZW4genUgdmVyd2VuZGVuIg0KICAgIH0sDQogICAgInZsY1BhdGgiOiB7DQogICAgICAidGl0bGUiOiAiUGZhZCB6dXIgVkxDIC8gQ1ZMQy1CaW7DpHJkYXRlaSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUGZhZCB6dXIgVkxDIC8gQ1ZMQy1CaW7DpHJkYXRlaS4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2N2bGMiDQogICAgfSwNCiAgICAidmxjT3B0aW9ucyI6IHsNCiAgICAgICJ0aXRsZSI6ICJWTEMgLyBDVkxDLU9wdGlvbmVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWTEMgLyBDVkxDLU9wdGlvbmVuLjxicj7DhG5kZXJuIFNpZSBkaWVzZSBudXIsIHdlbm4gU2llIHdpc3Nlbiwgd2FzIFNpZSB0dW4uPGJyPkxhc3NlbiBTaWUgZGFzIEZlbGQgbGVlciwgdW0gZGllIFN0YW5kYXJkZWluc3RlbGx1bmdlbiB6dSB2ZXJ3ZW5kZW4uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMYXNzZW4gU2llIGRhcyBGZWxkIGxlZXIsIHVtIGRpZSBTdGFuZGFyZGVpbnN0ZWxsdW5nZW4genUgdmVyd2VuZGVuIg0KICAgIH0sDQogICAgImJ1ZmZlclNpemUiOiB7DQogICAgICAidGl0bGUiOiAiUHVmZmVyZ3LDtsOfZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUHVmZmVyZ3LDtsOfZSBpbiBNQi48YnI+TTNVODogV2VubiBkYXMgVFMtU2VnbWVudCBrbGVpbmVyIGFscyBkaWUgUHVmZmVyZ3LDtsOfZSBpc3QsIHdpcmQgZGllIERhdGVpZ3LDtsOfZSBkZXMgU2VnbWVudHMgdmVyd2VuZGV0LiINCiAgICB9LA0KICAgICJidWZmZXJUZXJtaW5hdGlvblRpbWVvdXQiOiB7DQogICAgICAidGl0bGUiOiAiUHVmZmVyLVNjaGxpZcOfLVRpbWVvdXQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlplaXQgaW4gU2VrdW5kZW4sIGRpZSBkZXIgUHVmZmVyIG5hY2ggZGVtIFZlcmxhc3NlbiBkZXMgbGV0enRlbiBDbGllbnRzIGFrdGl2IGJsZWlidCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiWmVpdCBpbiBTZWt1bmRlbiINCiAgICB9LA0KICAgICJzdG9yZUJ1ZmZlckluUkFNIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiUHVmZmVyIGltIFJBTSBzcGVpY2hlcm4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gYWt0aXZpZXJ0LCB3aXJkIGRlciBQdWZmZXIgaW0gUkFNIGFuc3RlbGxlIGF1ZiBkZXIgRmVzdHBsYXR0ZSBnZXNwZWljaGVydCINCiAgICB9LA0KICAgICJhdXRvUmVjb25uZWN0Ijp7DQogICAgICAidGl0bGUiOiAiQXV0b21hdGlzY2ggbWl0IFN0cmVhbSBuZXV2ZXJiaW5kZW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gYWt0aXZpZXJ0LCB2ZXJiaW5kZXQgc2ljaCBkZXIgUHVmZmVyIGF1dG9tYXRpc2NoIHdpZWRlciBtaXQgZGVtIFN0cmVhbSINCiAgICB9LA0KICAgICJvbWl0UG9ydHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJQb3J0IHdlZ2xhc3NlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRHVyY2ggQWt0aXZpZXJlbiBkaWVzZXMgS29udHJvbGxrw6RzdGNoZW5zIHdpcmQgZGllIG0zdS1EYXRlaSBrZWluZSBQb3J0cyBpbiBkZXIgVVJMIGVudGhhbHRlbiINCiAgICB9LA0KICAgICJiaW5kaW5nSVBzIiA6DQogICAgew0KICAgICAgInRpdGxlIjogIklQKHMpIGJpbmRlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRHVyY2ggS2xpY2tlbiBhdWYgZGFzIEVpbmdhYmVmZWxkIMO2ZmZuZXQgc2ljaCBlaW4gRGlhbG9nLCBpbiBkZW0gU2llIGRpZSBJUChzKSBhdXN3w6RobGVuIGvDtm5uZW48YnI+Qml0dGUgYmVhY2h0ZW4gU2llLCBkYXNzIGRpZXMgYXVjaCBkaWUgRFZSLUlQcyBzaW5kPGJyPkRhcyDDhG5kZXJuIGRpZXNlciBPcHRpb24gdW5kIGRhcyBTcGVpY2hlcm4gZGVyIEVpbnN0ZWxsdW5nZW4gYmVlbmRldCBkYXMgUHJvZ3JhbW0hPGJyPlNpZSBtw7xzc2VuIGVzIG5ldSBzdGFydGVuLCB3ZW5uIFNpZSBrZWluZW4gYXV0b21hdGlzY2hlbiBOZXVzdGFydCBrb25maWd1cmllcnQgaGFiZW4hIg0KICAgIH0sDQogICAgImZvcmNlSHR0cHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQUyB6dW0gVXBzdHJlYW0tU2VydmVyIGVyendpbmdlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2VubiBkaWVzZXMgS29udHJvbGxrw6RzdGNoZW4gYWt0aXZpZXJ0IGlzdCwgd2lyZCBUaHJlYWRmaW4gZ2V6d3VuZ2VuLCBlaW5lIEhUVFBTLVZlcmJpbmR1bmcgenVtIFVwc3RyZWFtLVNlcnZlciB6dSB2ZXJ3ZW5kZW4gPGJyPkRpZXMgd2lyZCBuaWNodCBlbXBmb2hsZW4sIGRhIGRpZSBhbmdlZ2ViZW5lbiBVUkxzIGluIEhUVFBTLVVSTHMgdW1nZXNjaHJpZWJlbiB3ZXJkZW4sIHdhcyB6dSA0MDQtSFRUUC1GZWhsZXJjb2RlcyBmw7xocmVuIGthbm48L2JyPiINCiAgICB9LA0KICAgICJ1c2VIdHRwcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkhUVFBTIHZlcndlbmRlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSFRUUFMtUHJvdG9rb2xsIGbDvHIgVGhyZWFkZmluIGFrdGl2aWVyZW4sIEhUVFBTLVBvcnQgbXVzcyBnZXNldHp0IHdlcmRlbiwgYW5zb25zdGVuIHdpcmQgNDQzIHZlcndlbmRldCE8YnI+U3RlbGxlbiBTaWUgYXXDn2VyZGVtIHNpY2hlciwgZGFzcyBzZXJ2ZXIuY3J0IHVuZCBzZXJ2ZXIua2V5IGltIEtvbmZpZ3VyYXRpb25zb3JkbmVyIGFiZ2VsZWd0IHNpbmQhPGJyPkRpZSBTY2hsw7xzc2VsZGF0ZWkgbXVzcyB1bnZlcnNjaGzDvHNzZWx0IHNlaW4hIg0KICAgIH0sDQogICAgImZvcmNlQ2xpZW50SHR0cHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJDbGllbnQgenVyIFZlcndlbmR1bmcgdm9uIEhUVFBTIHp3aW5nZW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkFsbGUgVVJMcyB6dSBkaWVzZXIgVGhyZWFkZmluLUluc3RhbnogYmVnaW5uZW4gbWl0IEhUVFBTIg0KICAgIH0sDQogICAgInRocmVhZGZpbkRvbWFpbiI6DQogICAgew0KICAgICAgInRpdGxlIjogIlRocmVhZGZpbi1Eb21haW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldlbm4gbmljaHQgbGVlciwgd2VyZGVuIGRpZSBVUkxzIGluIGRlciBuZXVlbiBtM3UgaW4gZWluZW4gRlFETiB1bWdlc2NocmllYmVuLjxicj5FcyB3aXJkIGF1Y2ggZGllIGFuZ2V6ZWlndGUgRFZSLUlQIGltIFNlcnZlcmluZm8tRGlhbG9nIHVtc2NocmVpYmVuLjxicj5TY2hsaWXDn2VuIFNpZSBodHRwIG5pY2h0IGVpbiAoei5CLjogc29tZWRvbWFpbi5jb20pPC9icj4iDQogICAgfSwNCiAgICAiZW5hYmxlTm9uQXNjaWkiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJOaWNodC1BU0NJSSBha3RpdmllcmVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXZW5uIGFrdGl2aWVydCwgd2VyZGVuIHNwZXppZWxsZSBOaWNodC1BU0NJSS1aZWljaGVuIGluIGRlciBNM1UgdW5kIEVQRyBlcmxhdWJ0LiBTdGFuZGFyZG3DpMOfaWcgZGVha3RpdmllcnQiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRy1LYXRlZ29yaWVuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXNzZW4gU2llIGRpZSBFUEctS2F0ZWdvcmllbiBhbi4gRGFzIEZvcm1hdCBpc3QgU2NobMO8c3NlbDpXZXJ0fFNjaGzDvHNzZWw6V2VydCwgYWxzbyBOYWNocmljaHRlbjpuZXdzfFNwb3J0OnNwb3J0c3xGaWxtZTptb3ZpZXMiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllc0NvbG9ycyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRy1LYXRlZ29yaWVuLUZhcmJlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUGFzc2VuIFNpZSBkaWUgRmFyYmVuIGRlciBFUEctS2F0ZWdvcmllbiBhbi4gRGFzIEZvcm1hdCBpc3QgV2VydDpmYXJiZXxXZXJ0OmZhcmJlLCBhbHNvIG5ld3M6dG9tYXRvfHNwb3J0czp5ZWxsb3dncmVlbnxtb3ZpZXM6cm95YWxibHVlIg0KICAgIH0sDQogICAgImJ1ZmZlclRpbWVvdXQiOiB7DQogICAgICAidGl0bGUiOiAiVGltZW91dCBmw7xyIG5ldWUgQ2xpZW50LVZlcmJpbmR1bmdlbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRGVyIFRocmVhZGZpbi1QdWZmZXIgd2FydGV0LCBiaXMgbmV1ZSBDbGllbnQtVmVyYmluZHVuZ2VuIGhlcmdlc3RlbGx0IHNpbmQuIEhpbGZyZWljaCBmw7xyIHNjaG5lbGxlcyBVbXNjaGFsdGVuIGRlciBLYW7DpGxlLiBXZXJ0IGluIE1pbGxpc2VrdW5kZW4uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiDQogICAgfSwNCiAgICAidXNlckFnZW50Ijogew0KICAgICAgInRpdGxlIjogIlVzZXItQWdlbnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZXItQWdlbnQgZsO8ciBIVFRQLUFuZnJhZ2VuLiBGw7xyIGplZGUgSFRUUC1WZXJiaW5kdW5nIHdpcmQgZGllc2VyIFdlcnQgYWxzIFVzZXItQWdlbnQgdmVyd2VuZGV0LiBTb2xsdGUgbnVyIGdlw6RuZGVydCB3ZXJkZW4sIHdlbm4gVGhyZWFkZmluIGJsb2NraWVydCB3aXJkLiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiVGhyZWFkZmluIg0KICAgIH0sDQogICAgImJhY2t1cFBhdGgiOiB7DQogICAgICAidGl0bGUiOiAiU3BlaWNoZXJvcnQgZsO8ciBhdXRvbWF0aXNjaGUgU2ljaGVydW5nZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiVm9yIGplZGVtIFVwZGF0ZSBkZXIgQW5iaWV0ZXJkYXRlbiBkdXJjaCBkZW4gWmVpdHBsYW4gZXJzdGVsbHQgVGhyZWFkZmluIGVpbmUgU2ljaGVydW5nLiBEZXIgUGZhZCBmw7xyIGRpZSBhdXRvbWF0aXNjaGVuIFNpY2hlcnVuZ2VuIGthbm4gZ2XDpG5kZXJ0IHdlcmRlbi4gVGhyZWFkZmluIGJlbsO2dGlndCBTY2hyZWliYmVyZWNodGlndW5nIGbDvHIgZGllc2VuIE9yZG5lci4iDQogICAgfSwNCiAgICAidGVtcFBhdGgiOiB7DQogICAgICAidGl0bGUiOiAiU3BlaWNoZXJvcnQgZsO8ciB0ZW1wb3LDpHJlIERhdGVpZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi90bXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU3BlaWNoZXJvcnQgZsO8ciBkaWUgUHVmZmVyZGF0ZWllbi4iDQogICAgfSwNCiAgICAiYmFja3VwS2VlcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJBbnphaGwgZGVyIHp1IGJlaGFsdGVuZGVuIFNpY2hlcnVuZ2VuIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBbnphaGwgZGVyIHp1IGJlaGFsdGVuZGVuIFNpY2hlcnVuZ2VuLiDDhGx0ZXJlIFNpY2hlcnVuZ2VuIHdlcmRlbiBhdXRvbWF0aXNjaCBnZWzDtnNjaHQuIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogew0KICAgICAgInRpdGxlIjogIldFQi1BdXRoZW50aWZpemllcnVuZyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiWnVncmlmZiBhdWYgZGllIFdlYm9iZXJmbMOkY2hlIG51ciBtaXQgQW5tZWxkZWluZm9ybWF0aW9uZW4gbcO2Z2xpY2guIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uUE1TIjogew0KICAgICAgInRpdGxlIjogIlBNUy1BdXRoZW50aWZpemllcnVuZyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUGxleC1BbmZyYWdlbiBzaW5kIG51ciBtaXQgQXV0aGVudGlmaXppZXJ1bmcgbcO2Z2xpY2guIDxicj48Yj5XYXJudW5nISEhPC9iPiBOYWNoIEFrdGl2aWVydW5nIGRpZXNlciBGdW5rdGlvbiBtdXNzIFRocmVhZGZpbiBpbiBkZW4gRFZSLUVpbnN0ZWxsdW5nZW4gdm9uIFBNUyBnZWzDtnNjaHQgdW5kIGVybmV1dCBlaW5nZXJpY2h0ZXQgd2VyZGVuLiINCiAgICB9LA0KICAgICJhdXRoZW50aWNhdGlvbk0zVSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UtQXV0aGVudGlmaXppZXJ1bmciLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkRhcyBIZXJ1bnRlcmxhZGVuIGRlciB0aHJlYWRmaW4ubTN1LURhdGVpIMO8YmVyIGVpbmUgSFRUUC1BbmZyYWdlIGlzdCBudXIgbWl0IEF1dGhlbnRpZml6aWVydW5nIG3DtmdsaWNoLiINCiAgICB9LA0KICAgICJhdXRoZW50aWNhdGlvblhNTCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUwtQXV0aGVudGlmaXppZXJ1bmciLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkRhcyBIZXJ1bnRlcmxhZGVuIGRlciB0aHJlYWRmaW4ueG1sLURhdGVpIMO8YmVyIGVpbmUgSFRUUC1BbmZyYWdlIGlzdCBudXIgbWl0IEF1dGhlbnRpZml6aWVydW5nIG3DtmdsaWNoIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uQVBJIjogew0KICAgICAgInRpdGxlIjogIkFQSS1BdXRoZW50aWZpemllcnVuZyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiWnVncmlmZiBhdWYgZGllIEFQSS1TY2huaXR0c3RlbGxlIG51ciBtaXQgQXV0aGVudGlmaXppZXJ1bmcgbcO2Z2xpY2guIg0KICAgIH0sDQogICAgIndlYmNsaWVudCI6IHsNCiAgICAgICJsYW5ndWFnZSI6IHsNCiAgICAgICAgInRpdGxlIjogIldlYiBjbGllbnQgU3ByYWNoZSIsDQogICAgICAgICJkZXNjcmlwdGlvbiI6ICLDhG5kZXJuIGRlciBTcHJhY2hlIGRlcyBXZWIgQ2xpZW50cyINCg0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgIndpemFyZCI6IHsNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRy1RdWVsbGUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBWZXJ3ZW5kZW4gU2llIEVQRy1EYXRlbiB2b24gUGxleCwgRW1ieSBvZGVyIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBWZXJ3ZW5kdW5nIGVpbmVyIG9kZXIgbWVocmVyZXIgWE1MVFYtRGF0ZWllbjxicj4tIEthbmFsdmVyd2FsdHVuZzxicj4tIE0zVSAvIFhNTFRWLUV4cG9ydCAoSFRUUC1MaW5rIGbDvHIgSVBUVi1BcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJBbnphaGwgZGVyIFR1bmVyIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBbnphaGwgZGVyIHBhcmFsbGVsZW4gVmVyYmluZHVuZ2VuLCBkaWUgenVtIEFuYmlldGVyIGhlcmdlc3RlbGx0IHdlcmRlbiBrw7ZubmVuLjxicj5WZXJmw7xnYmFyIGbDvHI6IFBsZXgsIEVtYnksIEplbGx5ZmluLCBNM1UgKG1pdCBha3RpdmVtIFB1ZmZlcikuPGJyPk5hY2ggZWluZXIgw4RuZGVydW5nIG11c3MgVGhyZWFkZmluIGluIGRlbiBEVlItRWluc3RlbGx1bmdlbiB2b24gUGxleCAvIEVtYnkgLyBKZWxseWZpbiBnZWzDtnNjaHQgdW5kIGVybmV1dCBlaW5nZXJpY2h0ZXQgd2VyZGVuLiINCiAgICB9LA0KICAgICJtM3UiOiB7DQogICAgICAidGl0bGUiOiAiTTNVLVdpZWRlcmdhYmVsaXN0ZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRGF0ZWlwZmFkIG9kZXIgVVJMIGRlciBNM1UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkxva2FsZSBvZGVyIGVudGZlcm50ZSBXaWVkZXJnYWJlbGlzdGVuIg0KICAgIH0sDQogICAgInhtbHR2Ijogew0KICAgICAgInRpdGxlIjogIlhNTFRWLURhdGVpIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEYXRlaXBmYWQgb2RlciBVUkwgZGVyIFhNTFRWIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2thbGUgb2RlciBlbnRmZXJudGUgWE1MVFYtRGF0ZWkiDQogICAgfQ0KICB9LA0KICAibG9naW4iOiB7DQogICAgImZhaWxlZCI6ICJCZW51dHplcmF1dGhlbnRpZml6aWVydW5nIGZlaGxnZXNjaGxhZ2VuIiwNCiAgICAiaGVhZGxpbmUiOiAiQW5tZWxkZW4iLA0KICAgICJ1c2VybmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJCZW51dHplcm5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkJlbnV0emVybmFtZSINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcnQiDQogICAgfQ0KICB9LA0KICAiYWNjb3VudCI6IHsNCiAgICAiZmFpbGVkIjogIlBhc3N3b3J0IHN0aW1tdCBuaWNodCDDvGJlcmVpbiIsDQogICAgImhlYWRsaW5lIjogIkJlbnV0emVya29udG8gZXJzdGVsbGVuIiwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiQmVudXR6ZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJCZW51dHplcm5hbWUiDQogICAgfSwNCiAgICAicGFzc3dvcmQiOiB7DQogICAgICAidGl0bGUiOiAiUGFzc3dvcnQiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlBhc3N3b3J0Ig0KICAgIH0sDQogICAgImNvbmZpcm0iOiB7DQogICAgICAidGl0bGUiOiAiQmVzdMOkdGlnZW4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkJlc3TDpHRpZ2VuIg0KICAgIH0NCiAgfSwNCiAgIm5vdGlmaWNhdGlvbiIgOiB7DQogICAgInVwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgdmVyZsO8Z2JhciIsDQogICAgICAiY29udGVudCI6ICJFaW5lIG5ldWVyZSBWZXJzaW9uIHZvbiBUaHJlYWRmaW4gaXN0IHZlcmbDvGdiYXJlLiBCaXR0ZSBhdWYgZGllIG5ldXN0ZSBWZXJzaW9uIGFrdHVhbGlzaWVyZW4uIg0KICAgIH0NCiAgfSwNCiAgInNlcnZlckluZm8iOiB7DQogICAgInRpdGxlIjogIlNlcnZlciBJbmZvcm1hdGlvbmVuIiwNCiAgICAiaGVhZGVyIjogew0KICAgICAgInNlcnZlckluZm8iOiAiU2VydmVyIEluZm9ybWF0aW9uZW4iLA0KICAgICAgInN0cmVhbUluZm8iOiAiU3RyZWFtIEluZm9ybWF0aW9uZW4iLA0KICAgICAgImNoYW5nZVZlcnNpb24iOiAiV2VjaHNlbCBUaHJlYWRmaW4gVmVyc2lvbiINCiAgICB9LA0KICAgICJsYWJlbCI6IHsNCiAgICAgICJ2ZXJzaW9uIjogIlRocmVhZGZpbiBWZXJzaW9uIiwNCiAgICAgICJlcnJvcnMiOiAiRmVobGVyIiwNCiAgICAgICJ3YXJuaW5ncyI6ICJXYXJudW5nZW4iLA0KICAgICAgImR2ciI6ICJEVlIgSVAiLA0KICAgICAgIm0zdVVybCI6ICJNM1UgVVJMIChTcGVjaWZjIGdyb3VwczogW2h0dHA6Ly8uLi4/Z3JvdXAtdGl0bGU9Zm9vLGJhcl0pIiwNCiAgICAgICJ4ZXBnVXJsIjogIlhNTFRWIFVSTCIsDQogICAgICAic3RyZWFtcyI6ICJHZWZpbHRlcnRlIEthbsOkbGUiLA0KICAgICAgInhlcGciOiAiWnVnZW9yZG5ldGUgS2Fuw6RsZSINCiAgICB9LA0KICAgICJjaGFuZ2VWZXJzaW9uIjogew0KICAgICAgImNoYW5nZVRvQmV0YSI6ICJXZWNoc2VsIHp1ciBCZXRhIFZlcnNpb24iLA0KICAgICAgImNoYW5nZVRvUmVsZWFzZSI6ICJXZWNoc2VsIHp1ciBvZmZpemllbGxlbiBWZXJzaW9uIiwNCiAgICAgICJjaGFuZ2luZyI6ICJXZWNoc2VsLi4uIg0KICAgIH0NCiAgfQ0KfQ==" + webUI["web/public/lang/en.json"] = "ew0KICAibWFpbk1lbnUiOiB7DQogICAgIml0ZW0iOiB7DQogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLA0KICAgICAgInBtc0lEIjogIlBNUyBJRCIsDQogICAgICAiZmlsdGVyIjogIkZpbHRlciIsDQogICAgICAieG1sdHYiOiAiWE1MVFYiLA0KICAgICAgIm1hcHBpbmciOiAiTWFwcGluZyIsDQogICAgICAidXNlcnMiOiAiVXNlcnMiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0sDQogICAgImhlYWRsaW5lIjogew0KICAgICAgInBsYXlsaXN0IjogIkxvY2FsIG9yIHJlbW90ZSBwbGF5bGlzdHMiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIgcGxheWxpc3QiLA0KICAgICAgInhtbHR2IjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlcyIsDQogICAgICAibWFwcGluZyI6ICJNYXAgcGxheWxpc3QgY2hhbm5lbHMgdG8gRVBHIGNoYW5uZWxzIiwNCiAgICAgICJ1c2VycyI6ICJVc2VyIG1hbmFnZW1lbnQiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0NCiAgfSwNCiAgImNvbmZpcm0iOiB7DQogICAgInJlc3RvcmUiOiAiQWxsIGRhdGEgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRob3NlIGZyb20gdGhlIGJhY2t1cC4gU2hvdWxkIHRoZSBmaWxlcyBiZSByZXN0b3JlZD8iDQogIH0sDQogICJhbGVydCI6IHsNCiAgICAiZmlsZUxvYWRpbmdFcnJvciI6ICJGaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQiLA0KICAgICJpbnZhbGlkQ2hhbm5lbE51bWJlciI6ICJJbnZhbGlkIGNoYW5uZWwgbnVtYmVyIiwNCiAgICAibWlzc2luZ0lucHV0IjogIk1pc3NpbmcgaW5wdXQiDQogIH0sDQogICJidXR0b24iOiB7DQogICAgImJhY2siOiAiQmFjayIsDQogICAgImJhY2t1cCI6ICJCYWNrdXAiLA0KICAgICJidWxrRWRpdCI6ICJCdWxrIEVkaXQiLA0KICAgICJjYW5jZWwiOiAiQ2FuY2VsIiwNCiAgICAiZGVsZXRlIjogIkRlbGV0ZSIsDQogICAgImRvbmUiOiAiRG9uZSIsDQogICAgImxvZ2luIjogIkxvZ2luIiwNCiAgICAibmV3IjogIk5ldyIsDQogICAgIm5leHQiOiAiTmV4dCIsDQogICAgInJlc3RvcmUiOiAiUmVzdG9yZSIsDQogICAgInNhdmUiOiAiU2F2ZSIsDQogICAgInNlYXJjaCI6ICJTZWFyY2giLA0KICAgICJ1cGRhdGUiOiAiVXBkYXRlIiwNCiAgICAidXBkYXRpbmciOiAiVXBkYXRpbmcuLi4iLA0KICAgICJjcmFldGVBY2NvdW50IjogIkNyZWF0ZSBBY2NvdW50IiwNCiAgICAicmVzZXRMb2dzIjogIlJlc2V0IExvZ3MiLA0KICAgICJ1cGxvYWRMb2dvIjogIlVwbG9hZCBMb2dvIiwNCiAgICAidXBsb2FkQ3VzdG9tSW1hZ2UiOiAiVXBsb2FkIGN1c3RvbSBpbWFnZSIsDQogICAgInNvcnRDaGFubmVsc0FscGhhIjogIlNvcnQgQ2hhbm5lbHMgQWxwaGFiZXRpY2FsbHkiLA0KICAgICJzb3J0Q2hhbm5lbE51bWJlcnMiOiAiU29ydCBDaGFubmVscyIsDQogICAgImJhY2tUb1RvcCI6ICJHbyB0byB0b3AiLA0KICAgICJzZXJ2ZXJJbmZvcm1hdGlvbiI6ICJTZXJ2ZXIgSW5mb3JtYXRpb24iDQogIH0sDQogICJmaWx0ZXIiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgIm5hbWUiOiAiRmlsdGVyIE5hbWUiLA0KICAgICAgInR5cGUiOiAiRmlsdGVyIFR5cGUiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIiDQogICAgfSwNCiAgICAiY3VzdG9tIjogIkN1c3RvbSIsDQogICAgImdyb3VwIjogIkdyb3VwIiwNCiAgICAibmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIG5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJzdGFydGluZ251bWJlciI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgU3RhcnRpbmcgTnVtYmVyIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWx0ZXIgU3RhcnRpbmcgTnVtYmVyIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydGluZyBDaGFubmVsIE51bWJlciB0byB1c2UgZm9yIHRoaXMgR3JvdXAgRmlsdGVyIChEZWZhdWx0IGlzIDEwMDApIg0KICAgIH0sDQogICAgImNhdGVnb3J5Ijogew0KICAgICAgInRpdGxlIjogIkZpbHRlciBDYXRlZ29yeSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIENhdGVnb3J5IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJGaWx0ZXIgQ2F0ZWdvcnkgc2V0cyBhbGwgY2hhbm5lbHMgaW4gdGhlIGZpbHRlciB0byBhIHNwZWNpZmljIGNhdGVnb3J5IChuZXdzLCBzcG9ydHMsIGV0YykiDQogICAgfSwNCiAgICAiZGVzY3JpcHRpb24iOiB7DQogICAgICAidGl0bGUiOiAiRGVzY3JpcHRpb24iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJUeXBlIiwNCiAgICAgICJncm91cFRpdGxlIjogIkdyb3VwIFRpdGxlIiwNCiAgICAgICJjdXN0b21GaWx0ZXIiOiAiQ3VzdG9tIEZpbHRlciINCiAgICB9LA0KICAgICJjYXNlU2Vuc2l0aXZlIjogew0KICAgICAgInRpdGxlIjogIkNhc2UgU2Vuc2l0aXZlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWx0ZXJSdWxlIjogew0KICAgICAgInRpdGxlIjogIkZpbHRlciBSdWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJTcG9ydCB7SER9ICF7RVMsSVR9IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsdGVyR3JvdXAiOiB7DQogICAgICAidGl0bGUiOiAiR3JvdXAgVGl0bGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IGEgTTNVIGdyb3VwLiAoQ291bnRlcik8YnI+Q2hhbmdpbmcgdGhlIGdyb3VwIHRpdGxlIGluIHRoZSBNM1UgaW52YWxpZGF0ZXMgdGhlIGZpbHRlci4iDQogICAgfSwNCiAgICAiaW5jbHVkZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJJbmNsdWRlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGSEQsVUhEIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFubmVsIG5hbWUgbXVzdCBpbmNsdWRlLjxicj4oQ29tbWEgc2VwYXJhdGVkKSBDb21tYSBtZWFucyBvciINCiAgICB9LA0KICAgICJleGNsdWRlIjogew0KICAgICAgInRpdGxlIjogIkV4Y2x1ZGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkVTLElUIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFubmVsIG5hbWUgbXVzdCBub3QgY29udGFpbi48YnI+KENvbW1hIHNlcGFyYXRlZCkgQ29tbWEgbWVhbnMgb3IiDQogICAgfQ0KICB9LA0KICAicGxheWxpc3QiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgInBsYXlsaXN0IjogIlBsYXlsaXN0IiwNCiAgICAgICJ0dW5lciI6ICJUdW5lciIsDQogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIkF2YWlsYWJpbGl0eSIsDQogICAgICAidHlwZSI6ICJUeXBlIiwNCiAgICAgICJzdHJlYW1zIjogIlN0cmVhbXMiLA0KICAgICAgImdyb3VwVGl0bGUiOiAiZ3JvdXAtdGl0bGUiLA0KICAgICAgInR2Z0lEIjogInR2Zy1pZCIsDQogICAgICAidW5pcXVlSUQiOiAiVW5pcXVlIElEIg0KICAgIH0sDQogICAgInBsYXlsaXN0VHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJQbGF5bGlzdCB0eXBlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ0eXBlIjogew0KICAgICAgInRpdGxlIjogIlR5cGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGxheWxpc3QgbmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVNM1UiOiB7DQogICAgICAidGl0bGUiOiAiTTNVIEZpbGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIE0zVSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVIREhSIjogew0KICAgICAgInRpdGxlIjogIkhESG9tZVJ1biBJUCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiSVAgYWRkcmVzcyBhbmQgcG9ydCAoMTkyLjE2OC4xLjEwOjUwMDQpIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHVuZXIiOiB7DQogICAgICAidGl0bGUiOiAiVHVuZXIgLyBTdHJlYW1zIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBwYXJhbGxlbCBjb25uZWN0aW9ucyB0aGF0IGNhbiBiZSBlc3RhYmxpc2hlZCB0byB0aGUgcHJvdmlkZXIuIDxicj5Pbmx5IGF2YWlsYWJsZSB3aXRoIGFjdGl2YXRlZCBidWZmZXIuPGJyPk5ldyBzZXR0aW5ncyB3aWxsIG9ubHkgYmUgYXBwbGllZCBhZnRlciBxdWl0dGluZyBhbGwgc3RyZWFtcy4iDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9pcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQIFByb3h5IElQIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxOTIuMTY4LjAuMiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSVAgYWRkcmVzcyB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9wb3J0Ijogew0KICAgICAgInRpdGxlIjogIkhUVFAgUHJveHkgUG9ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiODg4OCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUG9ydCB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiDQogICAgfQ0KICB9LA0KICAieG1sdHYiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgImd1aWRlIjogIkd1aWRlIiwNCiAgICAgICJsYXN0VXBkYXRlIjogIkxhc3QgVXBkYXRlIiwNCiAgICAgICJhdmFpbGFiaWxpdHkiOiAiQXZhaWxhYmlsaXR5IiwNCiAgICAgICJjaGFubmVscyI6ICJDaGFubmVscyIsDQogICAgICAicHJvZ3JhbXMiOiAiUHJvZ3JhbXMiDQogICAgfSwNCiAgICAibmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJHdWlkZSBuYW1lIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZGVzY3JpcHRpb24iOiB7DQogICAgICAidGl0bGUiOiAiRGVzY3JpcHRpb24iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsZVhNTFRWIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIFhNTFRWIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9pcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQIFByb3h5IElQIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxOTIuMTY4LjAuMiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSVAgYWRkcmVzcyB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiDQogICAgfSwNCiAgICAiaHR0cF9wcm94eV9wb3J0Ijogew0KICAgICAgInRpdGxlIjogIkhUVFAgUHJveHkgUG9ydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiODg4OCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUG9ydCB0byBiZSB1c2VkIGJ5IEhUVFAgUHJveHkiDQogICAgfQ0KICB9LA0KICAibWFwcGluZyI6IHsNCiAgICAidGFibGUiOiB7DQogICAgICAiY2hObyI6ICJDaC4gTm8uIiwNCiAgICAgICJsb2dvIjogIkxvZ28iLA0KICAgICAgImNoYW5uZWxOYW1lIjogIkNoYW5uZWwgTmFtZSIsDQogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLA0KICAgICAgImdyb3VwVGl0bGUiOiAiR3JvdXAgVGl0bGUiLA0KICAgICAgInhtbHR2RmlsZSI6ICJYTUxUViBGaWxlIiwNCiAgICAgICJ4bWx0dklEIjogIlhNTFRWIElEIg0KICAgIH0sDQogICAgImFjdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBY3RpdmUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxOYW1lIjogew0KICAgICAgInRpdGxlIjogIkNoYW5uZWwgTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiY2hhbm5lbEdyb3VwU3RhcnQiOiB7DQogICAgICAidGl0bGUiOiAiQ2hhbm5lbCBHcm91cCBTdGFydCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiB7DQogICAgICAidGl0bGUiOiAiU29ydCBBbHBoYWJldGljYWxseSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic29ydENoYW5uZWxzIjogew0KICAgICAgInRpdGxlIjogIlNvcnQgQ2hhbm5lbHMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkNoYW5uZWwgRGVzY3JpcHRpb24iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlVzZWQgYnkgdGhlIER1bW15IGFzIGFuIFhNTCBkZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInVwZGF0ZUNoYW5uZWxOYW1lIjogew0KICAgICAgInRpdGxlIjogIlVwZGF0ZSBDaGFubmVsIE5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxMb2dvIjogew0KICAgICAgInRpdGxlIjogIkxvZ28gVVJMIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ1cGRhdGVDaGFubmVsTG9nbyI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBMb2dvIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJlcGdDYXRlZ29yeSI6IHsNCiAgICAgICJ0aXRsZSI6ICJFUEcgQ2F0ZWdvcnkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm0zdUdyb3VwVGl0bGUiOiB7DQogICAgICAidGl0bGUiOiAiR3JvdXAgVGl0bGUgKHRocmVhZGZpbi5tM3UpIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ4bWx0dkZpbGUiOiB7DQogICAgICAidGl0bGUiOiAiWE1MVFYgRmlsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAieG1sdHZDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWIENoYW5uZWwiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInBwdmV4dHJhIjogew0KICAgICAgInRpdGxlIjogIlBQViBFeHRyYSBUaXRsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIHdpbGwgYWRkIGN1c3RvbSB0ZXh0IHRvIHRoZSBQcm9ncmFtbWUgZGF0YSINCiAgICB9LA0KICAgICJiYWNrdXBDaGFubmVsMSI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAxIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJiYWNrdXBDaGFubmVsMiI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAyIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJiYWNrdXBDaGFubmVsMyI6IHsNCiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJoaWRlQ2hhbm5lbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJIaWRlIEJhY2t1cCBDaGFubmVsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9DQogIH0sDQogICJ1c2VycyI6IHsNCiAgICAidGFibGUiOiB7DQogICAgICAidXNlcm5hbWUiOiAiVXNlcm5hbWUiLA0KICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkIiwNCiAgICAgICJ3ZWIiOiAiV0VCIiwNCiAgICAgICJwbXMiOiAiUE1TIiwNCiAgICAgICJtM3UiOiAiTTNVIiwNCiAgICAgICJ4bWwiOiAiWE1MIiwNCiAgICAgICJhcGkiOiAiQVBJIg0KICAgIH0sDQogICAgInVzZXJuYW1lIjogew0KICAgICAgInRpdGxlIjogIlVzZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VybmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInBhc3N3b3JkIjogew0KICAgICAgInRpdGxlIjogIlBhc3N3b3JkIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNvbmZpcm0iOiB7DQogICAgICAidGl0bGUiOiAiQ29uZmlybSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQgY29uZmlybSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIndlYiI6IHsNCiAgICAgICJ0aXRsZSI6ICJXZWIgQWNjZXNzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwbXMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAibTN1Ijogew0KICAgICAgInRpdGxlIjogIk0zVSBBY2Nlc3MiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInhtbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUwgQWNjZXNzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJhcGkiOiB7DQogICAgICAidGl0bGUiOiAiQVBJIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAic2V0dGluZ3MiOiB7DQogICAgImNhdGVnb3J5Ijogew0KICAgICAgImdlbmVyYWwiOiAiR2VuZXJhbCIsDQogICAgICAiY3VzdG9taXphdGlvbiI6ICJDdXN0b21pemF0aW9uIiwNCiAgICAgICJmaWxlcyI6ICJGaWxlcyIsDQogICAgICAibmV0d29yayI6ICJOZXR3b3JrIiwNCiAgICAgICJzdHJlYW1pbmciOiAiU3RyZWFtaW5nIiwNCiAgICAgICJiYWNrdXAiOiAiQmFja3VwIiwNCiAgICAgICJhdXRoZW50aWNhdGlvbiI6ICJBdXRoZW50aWNhdGlvbiIsDQogICAgICAid2ViY2xpZW50IjogIldlYiBjbGllbnQiDQogICAgfSwNCiAgICAidXBsb2FkQ3VzdG9tSW1hZ2UiOiB7DQogICAgICAidGl0bGUiOiAiQ3VzdG9tIEltYWdlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJIZXJlIHlvdSBjYW4gdXBsb2FkIGFuIGltYWdlIHRoYXQgd2lsbCBiZSBzaG93biB0byB1c2VycyB3aGVuIG5vIG1vcmUgdHVuZXJzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHBsYXlsaXN0ISINCiAgICB9LA0KICAgICJ1cGRhdGUiOiB7DQogICAgICAidGl0bGUiOiAiU2NoZWR1bGUgZm9yIHVwZGF0aW5nIChQbGF5bGlzdCwgWE1MVFYsIEJhY2t1cCkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIjAwMDAsMTAwMCwyMDAwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaW1lIGluIDI0IGhvdXIgZm9ybWF0ICgwODAwID0gODowMCBhbSkuIE1vcmUgdGltZXMgY2FuIGJlIGVudGVyZWQgY29tbWEgc2VwYXJhdGVkLiBMZWF2ZSB0aGlzIGZpZWxkIGVtcHR5IGlmIG5vIHVwZGF0ZXMgYXJlIHRvIGJlIGNhcnJpZWQgb3V0LiINCiAgICB9LA0KICAgICJhcGkiOiB7DQogICAgICAidGl0bGUiOiAiQVBJIEludGVyZmFjZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiVmlhIEFQSSBpbnRlcmZhY2UgaXQgaXMgcG9zc2libGUgdG8gc2VuZCBjb21tYW5kcyB0byBUaHJlYWRmaW4uIEFQSSBkb2N1bWVudGF0aW9uIGlzIDxhIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vbWFyY2VsR29lcmVudHovVGhyZWFkZmluL3dpa2kvQVBJXCI+aGVyZTwvYT4iDQogICAgfSwNCiAgICAic3NkcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJTU0RQIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTU0RQIGlzIGEgbmV0d29yayBwcm90b2NvbCBmb3Igc2VydmljZSBkaXNjb3ZlcnkuIEl0IGlzIHVzZWQgZm9yIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIFRocmVhZGZpbiBpbiB0aGUgbmV0d29yay4iDQogICAgfSwNCiAgICAiZHVtbXkiOiB7DQogICAgICAidGl0bGUiOiAiRW5hYmxlIERlZmF1bHQgRHVtbXkgRGF0YSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiBlbmFibGVkLCB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBtYXAgaW5hY3RpdmUgY2hhbm5lbHMgdG8gdGhlIGR1bW15IGRhdGEgY2hhbm5lbCBiZWxvdy4gVXNlIHRoaXMgdG8ga2VlcCBMaXZlIEV2ZW50IGNoYW5uZWxzIGFjdGl2ZS4iDQogICAgfSwNCiAgICAiZHVtbXlDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIkR1bW15IERhdGEgQ2hhbm5lbCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IHRoZSBkZWZhdWx0IGNoYW5uZWwgdG8gdXNlIHdoZW4gbWFwcGluZyBpbmFjdGl2ZSBjaGFubmVscyB0byB0aGUgZHVtbXkgZGF0YS4iDQogICAgfSwNCiAgICAiaWdub3JlRmlsdGVycyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJZ25vcmUgRmlsdGVycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgZmlsdGVyaW5nIGlzIGNvbXBsZXRlbHkgaWdub3JlZC4iDQogICAgfSwNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4LCBFbWJ5IG9yIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBVc2Ugb2Ygb25lIG9yIG1vcmUgWE1MVFYgZmlsZXM8YnI+LSBDaGFubmVsIG1hbmFnZW1lbnQ8YnI+LSBNM1UgLyBYTUxUViBleHBvcnQgKEhUVFAgbGluayBmb3IgSVBUViBhcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgVHVuZXJzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiINCiAgICB9LA0KICAgICJmaWxlc1VwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGVzIGFsbCBmaWxlcyBhdCBzdGFydHVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJVcGRhdGVzIGFsbCBwbGF5bGlzdHMsIHR1bmVyIGFuZCBYTUxUViBmaWxlcyBhdCBzdGFydHVwLiINCiAgICB9LA0KICAgICJjYWNoZUltYWdlcyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJbWFnZSBDYWNoaW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIG9wdGlvbiB3aWxsIHJld3JpdGUgdGhlIG0zdSBmaWxlIHRvIGxvY2FsIGltYWdlIGNhY2hlIGZvciB0diBsb2dvcy48YnI+QWxsIGltYWdlcyBmcm9tIHRoZSBYTUxUViBmaWxlIGFyZSBjYWNoZWQsIGFsbG93aW5nIGZhc3RlciByZW5kZXJpbmcgb2YgdGhlIGdyaWQgaW4gdGhlIGNsaWVudC48YnI+RG93bmxvYWRpbmcgdGhlIGltYWdlcyBtYXkgdGFrZSBhIHdoaWxlIGFuZCB3aWxsIGJlIGRvbmUgaW4gdGhlIGJhY2tncm91bmQuPGJyPiINCiAgICB9LA0KICAgICJyZXBsYWNlRW1wdHlJbWFnZXMiOiB7DQogICAgICAidGl0bGUiOiAiUmVwbGFjZSBtaXNzaW5nIHByb2dyYW0gaW1hZ2VzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiB0aGUgcG9zdGVyIGluIHRoZSBYTUxUViBwcm9ncmFtIGlzIG1pc3NpbmcsIHRoZSBjaGFubmVsIGxvZ28gd2lsbCBiZSB1c2VkLiINCiAgICB9LA0KICAgICJyZXBsYWNlQ2hhbm5lbFRpdGxlIjogew0KICAgICAgInRpdGxlIjogIlJlcGxhY2UgUFBWIGNoYW5uZWxzIHRpdGxlL2Rlc2MiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZSB0aGlzIGlmIHlvdXIgcHJvdmlkZXIgbWFwcyB0aGUgUFBWIGV2ZW50IG5hbWUgdG8gdGhlIGNoYW5uZWwgbmFtZSINCiAgICB9LA0KICAgICJUaHJlYWRmaW5BdXRvVXBkYXRlIjogew0KICAgICAgInRpdGxlIjogIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiBhIG5ldyB2ZXJzaW9uIG9mIFRocmVhZGZpbiBpcyBhdmFpbGFibGUsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQuIFRoZSB1cGRhdGVzIGFyZSBkb3dubG9hZGVkIGZyb20gR2l0SHViLiINCiAgICB9LA0KICAgICJzdHJlYW1CdWZmZXJpbmciOiB7DQogICAgICAidGl0bGUiOiAiU3RyZWFtIEJ1ZmZlciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb25zIG9mIHRoZSBidWZmZXI6PGJyPi0gVGhlIHN0cmVhbSBpcyBwYXNzZWQgZnJvbSBGRm1wZWcsIFZMQyBvciBUaHJlYWRmaW4gdG8gUGxleCwgRW1ieSwgSmVsbHlmaW4gb3IgTTNVIFBsYXllcjxicj4tIFNtYWxsIGplcmtpbmcgb2YgdGhlIHN0cmVhbXMgY2FuIGJlIGNvbXBlbnNhdGVkPGJyPi0gSExTIC8gTTNVOCBzdXBwb3J0PGJyPi0gUlRQIC8gUlRQUyBzdXBwb3J0PGJyPi0gUmUtc3RyZWFtaW5nPGJyPi0gU2VwYXJhdGUgdHVuZXIgbGltaXQgZm9yIGVhY2ggcGxheWxpc3QiLA0KICAgICAgImluZm9fZmFsc2UiOiAiTm8gQnVmZmVyIChDbGllbnQgY29ubmVjdHMgZGlyZWN0bHkgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIpIiwNCiAgICAgICJpbmZvX2ZmbXBlZyI6ICJGRm1wZWcgY29ubmVjdHMgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIiLA0KICAgICAgImluZm9fdmxjIjogIlZMQyBjb25uZWN0cyB0byB0aGUgc3RyZWFtaW5nIHNlcnZlciIsDQogICAgICAiaW5mb190aHJlYWRmaW4iOiAiVGhyZWFkZmluIGNvbm5lY3RzIHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyIg0KICAgIH0sDQogICAgInVkcHh5Ijogew0KICAgICAgInRpdGxlIjogIlVEUHh5IGFkZHJlc3MiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBhZGRyZXNzIG9mIHlvdXIgVURQeHkgc2VydmVyLiBJZiBzZXQsIGFuZCB0aGUgY2hhbm5lbCBVUkxzIGluIHRoZSBtM3UgaXMgbXVsdGljYXN0LCBUaHJlYWRmaW4gd2lsbCByZXdyaXRlIGl0IHNvIHRoYXQgaXQgaXMgYWNjZXNzZWQgdmlhIHRoZSBVRFB4eSBzZXJ2aWNlLiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiaG9zdDpwb3J0Ig0KICAgIH0sDQogICAgImZmbXBlZ1BhdGgiOiB7DQogICAgICAidGl0bGUiOiAiRkZtcGVnIEJpbmFyeSBQYXRoIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXRoIHRvIEZGbXBlZyBiaW5hcnkuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9mZm1wZWciDQogICAgfSwNCiAgICAiZmZtcGVnT3B0aW9ucyI6IHsNCiAgICAgICJ0aXRsZSI6ICJGRm1wZWcgT3B0aW9ucyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRkZtcGVnIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyINCiAgICB9LA0KICAgICJ2bGNQYXRoIjogew0KICAgICAgInRpdGxlIjogIlZMQyAvIENWTEMgQmluYXJ5IFBhdGgiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBhdGggdG8gVkxDIC8gQ1ZMQyBiaW5hcnkuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9jdmxjIg0KICAgIH0sDQogICAgInZsY09wdGlvbnMiOiB7DQogICAgICAidGl0bGUiOiAiVkxDIC8gQ1ZMQyBPcHRpb25zIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWTEMgLyBDVkxDIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyINCiAgICB9LA0KICAgICJidWZmZXJTaXplIjogew0KICAgICAgInRpdGxlIjogIkJ1ZmZlciBTaXplIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCdWZmZXIgc2l6ZSBpbiBNQi48YnI+TTNVODogSWYgdGhlIFRTIHNlZ21lbnQgc21hbGxlciB0aGVuIHRoZSBidWZmZXIgc2l6ZSwgdGhlIGZpbGUgc2l6ZSBvZiB0aGUgc2VnbWVudCBpcyB1c2VkLiINCiAgICB9LA0KICAgICJidWZmZXJUZXJtaW5hdGlvblRpbWVvdXQiOiB7DQogICAgICAidGl0bGUiOiAiQnVmZmVyIFRlcm1pbmF0aW9uIFRpbWVvdXQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSBidWZmZXIgc3RheXMgYWxpdmUgYWZ0ZXIgdGhlIGxhc3QgY2xpZW50IGxlZnQiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlRpbWUgaW4gc2Vjb25kcyINCiAgICB9LA0KICAgICJzdG9yZUJ1ZmZlckluUkFNIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiU3RvcmUgYnVmZmVyIGluIFJBTSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgd3JpdGUgYnVmZmVyIHRvIFJBTSBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gZGlzayINCiAgICB9LA0KICAgICJhdXRvUmVjb25uZWN0Ijp7DQogICAgICAidGl0bGUiOiAiQXV0b21hdGljIHJlY29ubmVjdCB0byBzdHJlYW0iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHRoZSBidWZmZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHJlY29ubmVjdCB0byBzdHJlYW0iDQogICAgfSwNCiAgICAib21pdFBvcnRzIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiT21pdCBwb3J0IiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCeSBhY3RpdmF0aW5nIHRoaXMgY2hlY2tib3ggdGhlIG0zdSBmaWxlIHdpbGwgbm90IGNvbnRhaW4gdGhlIHBvcnQgaW4gdGhlIHVybCINCiAgICB9LA0KICAgICJiaW5kaW5nSVBzIiA6DQogICAgew0KICAgICAgInRpdGxlIjogIkJpbmRpbmcgSVAocykiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkJ5IGNsaWNraW5nIG9uIHRoZSBpbnB1dCBhIGRpYWxvZ3VlIHdpbGwgb3BlbiB3aGVyZSB5b3UgY2FuIHNlbGVjdCB0aGUgSVAocyk8YnI+UGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBhcmUgYWxzbyB0aGUgRFZSIElQczxicj5DaGFuZ2luZyB0aGlzIG9wdGlvbiBhbmQgc2F2aW5nIHRoZSBzZXR0aW5ncyB3aWxsIGV4aXQgdGhlIHByb2dyYW0hPGJyPllvdSBuZWVkIHRvIHJlc3RhcnQgaXQgaWYgeW91IGRpZCBub3QgY29uZmlndXJlZCBhbiBhdXRvbWF0aWNhbCByZXN0YXJ0ISINCiAgICB9LA0KICAgICJmb3JjZUh0dHBzIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiRm9yY2UgSFRUUFMgdG8gVXBzdHJlYW0gc2VydmVyIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaGVuIHRoaXMgY2hlY2tib3ggaXMgYWN0aXZhdGVkIFRocmVhZGZpbiB3aWxsIGJlIGZvcmNlZCB0byB1c2UgSFRUUFMgY29ubmVjdGlvbiB0byB1cHN0cmVhbSBzZXJ2ZXIgPGJyPlRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGFzIHRoZSBnaXZlbiB1cmxzIHdpbGwgYmUgcmV3cml0dGVuIHRvIGh0dHBzIHVybHMsIHRoaXMgY2FuIGxlYWQgdG8gNDA0IEhUVFAgRXJyb3IgQ29kZXM8L2JyPiINCiAgICB9LA0KICAgICJ1c2VIdHRwcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIlVzZSBIVFRQUyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlIEhUVFBTIHByb3RvY29sIGZvciBUaHJlYWRmaW4sIEhUVFBTIFBvcnQgbmVlZHMgdG8gYmUgc2V0LCBvdGhlcndpc2UgdGhlIDQ0MyB3aWxsIGJlIHVzZWQhPGJyPkFsc28gbWFrZSBzdXJlIHRoYXQgc2VydmVyLmNydCBhbmQgc2VydmVyLmtleSBhcmUgcGxhY2VkIGluIHRoZSBjb25maWcgZm9sZGVyITxicj5UaGUga2V5IGZpbGUgbmVlZHMgdG8gYmUgdW5lbmNyeXB0ZWQhIg0KICAgIH0sDQogICAgImZvcmNlQ2xpZW50SHR0cHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJGb3JjZSBjbGllbnQgdG8gdXNlIGh0dHBzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBbGwgVVJMcyB0byB0aGlzIHRocmVhZGZpbiBpbnN0YW5jZSB3aWxsIGJlIHN0YXJ0aW5nIHdpdGggaHR0cHMiDQogICAgfSwNCiAgICAidGhyZWFkZmluRG9tYWluIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiVGhyZWFkZmluIERvbWFpbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiBub3QgZW1wdHksIHRoaXMgd2lsbCByZXdyaXRlIHRoZSBVUkxzIGluIHRoZSBuZXcgbTN1IHRvIGEgRlFETi48YnI+SXQgd2lsbCBhbHNvIHJld3JpdGUgdGhlIHNob3duIERWUiBJUCBpbiB0aGUgc2VydmVyIGluZm8gZGlhbG9ndWUuPGJyPkRvIE5PVCBpbmNsdWRlIGh0dHAgKGV4OiBzb21lZG9tYWluLmNvbSk8L2JyPiINCiAgICB9LA0KICAgICJlbmFibGVOb25Bc2NpaSI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVuYWJsZSBOb24tQVNDSUkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgYWxsb3cgc3BlY2lhbCBub24gYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgTTNVIGFuZCBFUEcuIERlZmF1bHQgaXMgZGlzYWJsZWQiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDdXN0b21pemUgdGhlIEVQRyBDYXRlZ29yaWVzLiBUaGUgZm9ybWF0IGlzIGtleTp2YWx1ZXxrZXk6dmFsdWUsIHNvIE5ld3M6bmV3c3xTcG9ydHM6c3BvcnRzfE1vdmllczptb3ZpZXMiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllc0NvbG9ycyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIENvbG9ycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9taXplIHRoZSBFUEcgQ2F0ZWdvcnkgY29sb3JzLiBUaGUgZm9ybWF0IGlzIHZhbHVlOmNvbG9yfHZhbHVlOmNvbG9yLCBzbyBuZXdzOnRvbWF0b3xzcG9ydHM6eWVsbG93Z3JlZW58bW92aWVzOnJveWFsYmx1ZSINCiAgICB9LA0KICAgICJidWZmZXJUaW1lb3V0Ijogew0KICAgICAgInRpdGxlIjogIlRpbWVvdXQgZm9yIG5ldyBjbGllbnQgY29ubmVjdGlvbnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBUaHJlYWRmaW4gYnVmZmVyIHdhaXRzIHVudGlsIG5ldyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLiBIZWxwZnVsIGZvciBmYXN0IGNoYW5uZWwgc3dpdGNoaW5nLiBWYWx1ZSBpbiBtaWxsaXNlY29uZHMuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiDQogICAgfSwNCiAgICAidXNlckFnZW50Ijogew0KICAgICAgInRpdGxlIjogIlVzZXIgQWdlbnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZXIgQWdlbnQgZm9yIEhUVFAgcmVxdWVzdHMuIEZvciBldmVyeSBIVFRQIGNvbm5lY3Rpb24sIHRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIHVzZXIgYWdlbnQuIFNob3VsZCBvbmx5IGJlIGNoYW5nZWQgaWYgVGhyZWFkZmluIGlzIGJsb2NrZWQuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJUaHJlYWRmaW4iDQogICAgfSwNCiAgICAiYmFja3VwUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgYXV0b21hdGljIGJhY2t1cHMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQmVmb3JlIGFueSB1cGRhdGUgb2YgdGhlIHByb3ZpZGVyIGRhdGEgYnkgdGhlIHNjaGVkdWxlLCBUaHJlYWRmaW4gY3JlYXRlcyBhIGJhY2t1cC4gVGhlIHBhdGggZm9yIHRoZSBhdXRvbWF0aWMgYmFja3VwcyBjYW4gYmUgY2hhbmdlZC4gVGhyZWFkZmluIHJlcXVpcmVzIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoaXMgZm9sZGVyLiINCiAgICB9LA0KICAgICJ0ZW1wUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiL3RtcC90aHJlYWRmaW4vIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiBmb3IgdGhlIGJ1ZmZlciBmaWxlcy4iDQogICAgfSwNCiAgICAiYmFja3VwS2VlcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwLiBPbGRlciBiYWNrdXBzIGFyZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQuIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogew0KICAgICAgInRpdGxlIjogIldFQiBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSB3ZWIgaW50ZXJmYWNlIG9ubHkgcG9zc2libGUgd2l0aCBjcmVkZW50aWFscy4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25QTVMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uIDxicj48Yj5XYXJuaW5nISEhPC9iPiBBZnRlciBhY3RpdmF0aW5nIHRoaXMgZnVuY3Rpb24gVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQTVMgRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uTTNVIjogew0KICAgICAgInRpdGxlIjogIk0zVSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRG93bmxvYWRpbmcgdGhlIHRocmVhZGZpbi5tM3UgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25YTUwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEb3dubG9hZGluZyB0aGUgdGhyZWFkZmluLnhtbCBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uQVBJIjogew0KICAgICAgInRpdGxlIjogIkFQSSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSBBUEkgaW50ZXJmYWNlIGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfSwNCiAgICAid2ViY2xpZW50Ijogew0KICAgICAgImxhbmd1YWdlIjogew0KICAgICAgICAidGl0bGUiOiAiV2ViIGNsaWVudCBsYW5ndWFnZSIsDQogICAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFuZ2UgdGhlIGxhbmd1YWdlIGZvciB0aGUgd2ViIGNsaWVudCINCg0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgIndpemFyZCI6IHsNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4LCBFbWJ5IG9yIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBVc2Ugb2Ygb25lIG9yIG1vcmUgWE1MVFYgZmlsZXM8YnI+LSBDaGFubmVsIG1hbmFnZW1lbnQ8YnI+LSBNM1UgLyBYTUxUViBleHBvcnQgKEhUVFAgbGluayBmb3IgSVBUViBhcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgdHVuZXJzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiINCiAgICB9LA0KICAgICJtM3UiOiB7DQogICAgICAidGl0bGUiOiAiTTNVIFBsYXlsaXN0IiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBNM1UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIG9yIHJlbW90ZSBwbGF5bGlzdHMiDQogICAgfSwNCiAgICAieG1sdHYiOiB7DQogICAgICAidGl0bGUiOiAiWE1MVFYgRmlsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsZSBwYXRoIG9yIFVSTCBvZiB0aGUgWE1MVFYiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlIg0KICAgIH0NCiAgfSwNCiAgImxvZ2luIjogew0KICAgICJmYWlsZWQiOiAiVXNlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQiLA0KICAgICJoZWFkbGluZSI6ICJMb2dpbiIsDQogICAgInVzZXJuYW1lIjogew0KICAgICAgInRpdGxlIjogIlVzZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VybmFtZSINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29yZCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiDQogICAgfQ0KICB9LA0KICAiYWNjb3VudCI6IHsNCiAgICAiZmFpbGVkIjogIlBhc3N3b3JkIGRvZXMgbm90IG1hdGNoIiwNCiAgICAiaGVhZGxpbmUiOiAiQ3JlYXRlIHVzZXIgYWNjb3VudCIsDQogICAgInVzZXJuYW1lIjogew0KICAgICAgInRpdGxlIjogIlVzZXJuYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VybmFtZSINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29yZCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiDQogICAgfSwNCiAgICAiY29uZmlybSI6IHsNCiAgICAgICJ0aXRsZSI6ICJDb25maXJtIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJDb25maXJtIg0KICAgIH0NCiAgfSwNCiAgIm5vdGlmaWNhdGlvbiI6IHsNCiAgICAidXBkYXRlIjogew0KICAgICAgInRpdGxlIjogIlVwZGF0ZSBhdmFpbGFibGUiLA0KICAgICAgImNvbnRlbnQiOiAiQSBuZXdlciB2ZXJzaW9uIG9mIFRocmVhZGZpbiBpcyBhdmFpbGFibGUuIFBsZWFzZSB1cGRhdGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLiINCiAgICB9DQogIH0sDQogICJzZXJ2ZXJJbmZvIjogew0KICAgICJ0aXRsZSI6ICJTZXJ2ZXIgSW5mb3JtYXRpb24iLA0KICAgICJoZWFkZXIiOiB7DQogICAgICAic2VydmVySW5mbyI6ICJTZXJ2ZXIgSW5mb3JtYXRpb24iLA0KICAgICAgInN0cmVhbUluZm8iOiAiU3RyZWFtIEluZm9ybWF0aW9uIiwNCiAgICAgICJjaGFuZ2VWZXJzaW9uIjogIkNoYW5nZSBUaHJlYWRmaW4gVmVyc2lvbiINCiAgICB9LA0KICAgICJsYWJlbCI6IHsNCiAgICAgICJ2ZXJzaW9uIjogIlRocmVhZGZpbiBWZXJzaW9uIiwNCiAgICAgICJlcnJvcnMiOiAiRXJyb3JzIiwNCiAgICAgICJ3YXJuaW5ncyI6ICJXYXJuaW5ncyIsDQogICAgICAiZHZyIjogIkRWUiBJUCIsDQogICAgICAibTN1VXJsIjogIk0zVSBVUkwgKFNwZWNpZmMgZ3JvdXBzOiBbaHR0cDovLy4uLj9ncm91cC10aXRsZT1mb28sYmFyXSkiLA0KICAgICAgInhlcGdVcmwiOiAiWE1MVFYgVVJMIiwNCiAgICAgICJzdHJlYW1zIjogIkZpbHRlcmVkIENoYW5uZWxzIiwNCiAgICAgICJ4ZXBnIjogIk1hcHBlZCBDaGFubmVscyINCiAgICB9LA0KICAgICJjaGFuZ2VWZXJzaW9uIjogew0KICAgICAgImNoYW5nZVRvQmV0YSI6ICJDaGFuZ2UgdG8gYmV0YSB2ZXJzaW9uIiwNCiAgICAgICJjaGFuZ2VUb1JlbGVhc2UiOiAiQ2hhbmdlIHRvIHJlbGVhc2UgdmVyc2lvbiIsDQogICAgICAiY2hhbmdpbmciOiAiQ2hhbmdpbmcuLi4iDQogICAgfQ0KICB9DQp9" webUI["web/public/video/stream-limit.ts"] = "R0AREABC8CUAAcEAAP8B/wAB/IAUSBIBBkZGbXBlZwlTZXJ2aWNlMDF3fEPK//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQAAQAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABAAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMAdQAAB7DH4AAAAB4AAAgMAKMQAJEKERAAfYYQAAAAEJ8AAAAAFnZAAorNlAeAIn5YpQAAADABAAAAMDIPGDGWAAAAABaOvjyyLAAAABBgX//6vcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5ZjkgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIzIC0gaHR0cDovL3dHAQARd3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2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30X9oT0SBBZCI3AtJaE1scGsmpXrX+6L7ECx+XYakivHzMbORwEAFX6jycIYObFMA8cO1RQbKqBjRSwmV6s3Bvymh1Uy2Q4NYGetxxqA4TS9AAsfEnTWSPnioguTXby9YCaR4TjGhn8NBtHaAqal7fT8Mi6Fx48bLZLUw8vE0oyOXRPPZ7YEaZ8VtCcKvfPmIXDe+CICjSg/14litlDqWjesyqV20kGkxEXxFBxQ6opg8rJ5nrXpJ7Yg7f1kVB6kfioI546wX4WiVIHMnIjolv1sVV16hPOoaheE0P72F7ZHAQAW7HIsDRCfdXPaYJO+kI1KnbprbBU8l9EpUeesa13zPgeLsD/2jy8om6zqqaZBpDO3+joQU+lzMfu74FIaVthokTCHq+okILC+gMpWqJ9gii24CxJR1eAEEaVrQma2Vqt0eRRTQKRgUz3U+yFZEROE+9eX4DBqMlOFD6/RPC32sesdhyOVL9peV/fimBhb4rcmjAOm79hlThrtz/TWGfACtvoNRAwACV66tkmnc4GPMdLg0xEkq+1LSEcBADcNAP///////////////5trYpfJL+GISCBj9FiUkOtbkee6L9I58mjnY1y/WDNqht+Qw3+9i+KfyBbjdz/46xUXVuCItwfw/gdYKyy+IjRZiv53kEqW+PD7lPLLRgAAL2BITMTuwQL79Q01wkomp2ZPIBYiBP6WREAZAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAW9R0EAGAAAAeAAAIDACjEACYEhEQAH9IEAAAABCfAAAAABQZokbEO//qmWAAADAAADAAADAAADAAADAAADAAADAhPyO6dd23w9DkWWQJotXSbxVzBxaMjhfbwK5hWmvMGszdWhoszx1x0hDXN8c9BgYxwvxRZXkmrTPV9ZQAAAAwAAAwAAAwAAAwAKyANRq59GNuA0ghi7BmsDn4KOtIcIHn/KA8ZjXdDU0cUWk7qRZwNMMelaC07cZyBZW9BHAQA5EgD//////////////////////472Ji2hDXNKdWiA/xvCwGEXvTeFAvXO+jhlL6AOli2RGJa+ncBbXMf/Fv/nG9TOUvI8v62JTNsuhHbKPEq9HPF4/Uizrx3rjCTMC69d6+VoYrKv6XxKyvGcL7/QDEDKbwk4eCFgJZJEAlH+N25TWR6KYwzkYYgGuXdrBv3UkeA7VHwdf9Xzh5cuSg4ngVmnfeIpA9JsLqp2wIu9AAADAAADAAAIuEdBADoHEAAAiRx+AAAAAeAAAIDACjEACUjhEQAJEKEAAAABCfAAAAABQZ5CeIX/AAADAAADAAADAAADAAADAAADAAADAnzE28Zci1VBf0H4k1nWmJ0ogyjKdI6LAY1zorGVIRF7G8uwAAADAAADAAADAAADAAADAqrZOCXhGzA4u24KPtb92mgjNUnlvc9Xhr0gBo7u2GDR+aPxP9hnLhhlBtu4gqLkmscLxiv7oXnm033sXadVffC0UcIARwEAO64A//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAwAAAwAAM+FHQAARAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABEAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAPCUA////////////////////////////////////////////////AAAB4AAAgIAFIQAJLMEAAAABCfAAAAABAZ5hdEK/AAADAAADAAADAAADAAADAAADAAADA1/+i67DypGtrhJHPx4hDO6/W1t2QWamAxImT0NjhBVoAAADAAADAAADAAADAAAFMUbvocN9sGd3vACpQrs5+mzAC6i5WG4adCZ7bcVeOzo7AFpOoAAAAwAAAwAAMqBHQQA9QhAAAJcsfgD//////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACWUBEQAJSOEAAAABCfAAAAABAZ5jakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAAF+YuLcI2IxJ27WrhAZp7Yh4CElw5RRRGjq0bAAADAAADAABEwUdBAD4uAP///////////////////////////////////////////////////////////wAAAeAAAIDACjEACfGhEQAJZQEAAAABCfAAAAABQZpoSahBaJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAK78A5Ntd6FmvObqU2qkO9/nBjO187SEClZ2zAWMgqZxWCxcqvQx+wgAAADAAADAAU1R0AAEgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAASAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBAD86EAAApTx+AP///////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACblhEQAJgSEAAAABCfAAAAABQZ6GRREsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAB1LjAMsF1v3AJeffDUP0gAbzkVi7LRpW7+1eciThATL+0AAADAAADAAIPR0EAMEYA////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQAJnUEAAAABCfAAAAABAZ6ldEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAOo9u4wKtZ9mouspMor7zADZAcKEUQKmIGN/qFqwAAAMAAAMAA1NHQQAxURAAALNMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACdWBEQAJuWEAAAABCfAAAAABAZ6nakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABMAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAEwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQAyTgD//////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC2IhEQAJ1YEAAAABCfAAAAABQZqsSahBbJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAF4+AbzVAAAAwAAAwAAAwBAwEdBADNKEAAAwVx+AP////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAsp4REACfGhAAAAAQnwAAAAAUGeykUVLC//AAADAAADAAADAAADAAADAAADAAADAAE1849qKzqh1YAAAAMAAAMAAAMAAAMAAPrcuImYkdwSCsiv8h6ss58AAAMAAAMAAM+BR0EANFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALDcEAAAABCfAAAAABAZ7pdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAH1fABVCgbyQRhNELHHAAAAMAAAMACyhHQAAUAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABQAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EANVEQAADPbH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAtGAREACynhAAAAAQnwAAAAAQGe62pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTBHQBERAELwJQABwQAA/wH/AAH8gBRIEgEGRkZtcGVnCVNlcnZpY2UwMXd8Q8r//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADZOAP//////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQAL0qERAAtGAQAAAAEJ8AAAAAFBmvBJqEFsmUwIb//+p4QAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAv/sqEpwAAADAAADAAADAMCBR0EAN0oQAADdfH4A/////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC5phEQALYiEAAAABCfAAAAABQZ8ORRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwABAV2OiZ9R3aIKyK/yHqyznwAAAwAAAwAAz4FHQAAVAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABUAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAOFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALfkEAAAABCfAAAAABAZ8tdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAICUVFVNgckQRhNELHHAAAAMAAAMACylHQQA5URAAAOuMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC7aBEQALmmEAAAABCfAAAAABAZ8vakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdBADpRAP//////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQANQyERAAu2gQAAAAEJ8AAAAAFBmzRJqEFsmUwIZ//+nhAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAGVAR0AAFgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAAWAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADtMEAAA+Zx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADQrhEQAL0qEAAAABCfAAAAABQZ9SRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe1R0EAPFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEAC+7BAAAAAQnwAAAAAQGfcXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0BHQQA9URAAAQesfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADScBEQANCuEAAAABCfAAAAABAZ9zakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABcAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAFwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQA+UgD///////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2zoREADScBAAAAAQnwAAAAAUGbeEmoQWyZTAhX//44QAAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABi0dBAD9MEAABFbx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADXthEQANQyEAAAABCfAAAAABQZ+WRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe0R0EAMFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEADV9BAAAAAQnwAAAAAQGftXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0FHQAAYAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABgAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMVEQAAEjzH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2XgREADXthAAAAAQnwAAAAAQGft2pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTE=" } diff --git a/src/webserver.go b/src/webserver.go index d3e58a9..f1bedf1 100644 --- a/src/webserver.go +++ b/src/webserver.go @@ -373,6 +373,10 @@ func stream(w http.ResponseWriter, r *http.Request) { } default: + w.Header().Set("Content-Type", "video/mp2t") + w.Header().Set("Cache-Control", "max-age=3600") + w.Header().Set("Connection", "keep-alive") + w.Header().Set("Keep-Alive", "timeout=10, max=100") streamManager.ServeStream(streamInfo, w, r) } } @@ -627,7 +631,7 @@ func WS(w http.ResponseWriter, r *http.Request) { var previousBindingIPs = Settings.BindingIPs var previousUseHttps = Settings.UseHttps response.Settings, err = updateServerSettings(request) - if err == nil { + if err == nil && response.Settings != nil { response.OpenMenu = strconv.Itoa(indexOfString("settings", System.WEB.Menu)) @@ -817,7 +821,7 @@ func WS(w http.ResponseWriter, r *http.Request) { if err != nil { response.Status = false response.Error = err.Error() - response.Settings = Settings + response.Settings = &Settings } response = setDefaultResponseData(response, true) @@ -1342,7 +1346,7 @@ func setDefaultResponseData(response ResponseStruct, data bool) (defaults Respon } - defaults.Settings = Settings + defaults.Settings = &Settings defaults.Data.Playlist.M3U.Groups.Text = Data.Playlist.M3U.Groups.Text defaults.Data.Playlist.M3U.Groups.Value = Data.Playlist.M3U.Groups.Value diff --git a/threadfin.go b/threadfin.go index 5bfb3ab..3ee05a4 100644 --- a/threadfin.go +++ b/threadfin.go @@ -11,10 +11,10 @@ import ( "flag" "fmt" "os" - "os/exec" "os/signal" "path/filepath" "runtime" + "strconv" "strings" "syscall" "time" @@ -46,7 +46,7 @@ var GitHub = GitHubStruct{Branch: "master", User: "marcelGoerentz", Repo: "Threa const Name = "Threadfin" // Version : Major, Minor, Patch, Build -const Version = "1.8.0.0" +const Version = "1.8.1.0" // DBVersion : Database version const DBVersion = "0.5.0" @@ -72,6 +72,8 @@ var dev = flag.Bool("dev", false, ": Activates the developer mode, the source co func main() { + cleanUpOldInstances() + webserver := &src.WebServer{} // Handle signals @@ -170,9 +172,6 @@ func main() { // Https webserver system.Flag.UseHttps = *useHttps - // Kill all remaining processes and remove PIDs file - killAllProcesses() - // Debug Level system.Flag.Debug = *debug if system.Flag.Debug > 3 { @@ -211,9 +210,8 @@ func main() { } // Update binary - err = src.BinaryUpdate(false) - if err != nil { - src.ShowError(err, 0) + if src.BinaryUpdate(false) { + os.Exit(0) } // Build the database @@ -254,19 +252,7 @@ func handleSignals(sigs chan os.Signal, done chan bool, webserver *src.WebServer continue case syscall.SIGINT, syscall.SIGABRT, syscall.SIGTERM: - // Lock against reconnection for clients - webserver.SM.LockAgainstNewStreams = true - - src.ShowInfo("Threadfin:Stop all streams") - // Stop all streams - stopAllStreams(webserver) - - src.ShowInfo("Threadfin:Killing all processes") - // Kill all processes - killAllProcesses() - - // Shutdown the webserver gracefully - shutdownWebserver(webserver) + CloseWebserverGracefully(webserver) // Send signal that everything has ended done <- true @@ -279,6 +265,27 @@ func handleSignals(sigs chan os.Signal, done chan bool, webserver *src.WebServer time.Sleep(100 * time.Millisecond) } +func cleanUpOldInstances() { + killAllProcesses() +} + +// +func CloseWebserverGracefully(webserver *src.WebServer){ + // Lock against reconnection for clients + webserver.SM.LockAgainstNewStreams = true + + src.ShowInfo("Threadfin:Stop all streams") + // Stop all streams + stopAllStreams(webserver) + + src.ShowInfo("Threadfin:Killing all processes") + // Kill all processes + killAllProcesses() + + // Shutdown the webserver gracefully + shutdownWebserver(webserver) +} + // stopAllStreams will stop all existing streams and buffers func stopAllStreams(webserver *src.WebServer) { if webserver != nil { @@ -334,8 +341,15 @@ func getPIDsFromFile(tempFolder string) ([]string, error) { // killProcess kills a process by its PID func killProcess(pid string) error { - cmd := exec.Command("kill", "-9", pid) - return cmd.Run() + pidInt, err := strconv.Atoi(pid) + if err != nil { + return err + } + proc, err := os.FindProcess(pidInt) + if err != nil { + return err + } + return proc.Kill() } // killAllProcesses kills processes that had been saved in PID diff --git a/threadfin_pubkey.pem b/threadfin_pubkey.pem new file mode 100644 index 0000000..86f9e53 --- /dev/null +++ b/threadfin_pubkey.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2ZkUyr5n1c1iSO8fMtFl +ZV1zncySavnEOOADT+1jHAJVASipxYbm+gZ9welcAl5iYZSXd0FV7uGBbU1HogIL +pl3zfRJ4xY+TmVDRGdKfnc2KMn/7aY3JdSUfSCZ+smZVvHNRWlnzVsRoYNHMe6gm +dHg50I1IgFuhdtYY4p3e4FS4SdZVNV3BJuJTaAG8viUpsoy30DnaWIBsDpX+CPjp +7ntWZPGxDxCRl011ri+DWd3dgcClDmt6YXJAzkiSnfuNqXwENu2nhFV7wCqwMmFU +nfkRuBOYqTJ3GAsAJK+HNthxWV09p9O1n1pgLpaBNcp8UosBWXH+JEJU7UKSp2u3 +bwIDAQAB +-----END PUBLIC KEY----- diff --git a/web/public/lang/de.json b/web/public/lang/de.json index 1f6986c..8c614f6 100644 --- a/web/public/lang/de.json +++ b/web/public/lang/de.json @@ -462,6 +462,11 @@ "title": "Puffergröße", "description": "Puffergröße in MB.
M3U8: Wenn das TS-Segment kleiner als die Puffergröße ist, wird die Dateigröße des Segments verwendet." }, + "bufferTerminationTimeout": { + "title": "Puffer-Schließ-Timeout", + "description": "Zeit in Sekunden, die der Puffer nach dem Verlassen des letzten Clients aktiv bleibt", + "placeholder": "Zeit in Sekunden" + }, "storeBufferInRAM": { "title": "Puffer im RAM speichern", diff --git a/web/public/lang/en.json b/web/public/lang/en.json index d8c2403..63dc1e3 100644 --- a/web/public/lang/en.json +++ b/web/public/lang/en.json @@ -462,6 +462,11 @@ "title": "Buffer Size", "description": "Buffer size in MB.
M3U8: If the TS segment smaller then the buffer size, the file size of the segment is used." }, + "bufferTerminationTimeout": { + "title": "Buffer Termination Timeout", + "description": "Time in seconds that the buffer stays alive after the last client left", + "placeholder": "Time in seconds" + }, "storeBufferInRAM": { "title": "Store buffer in RAM", diff --git a/web/src/ts/base.ts b/web/src/ts/base.ts index a0d7513..94ca1ff 100644 --- a/web/src/ts/base.ts +++ b/web/src/ts/base.ts @@ -59,7 +59,7 @@ settingsCategory.push(new SettingsCategoryItem("{{.settings.category.customizati settingsCategory.push(new SettingsCategoryItem("{{.settings.category.webclient}}", "webclient.language")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,omitPorts,xepg.replace.missing.images,xepg.replace.channel.title,enableNonAscii")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.network}}", "bindingIPs,threadfinDomain,useHttps,forceClientHttps,forceHttps")) -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,udpxy,buffer.size.kb,storeBufferInRAM,buffer.timeout,buffer.autoReconnect,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options")) +settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,udpxy,buffer.size.kb,storeBufferInRAM,buffer.terminationTimeout,buffer.timeout,buffer.autoReconnect,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.authentication}}", "authentication.web,authentication.pms,authentication.m3u,authentication.xml,authentication.api")) diff --git a/web/src/ts/settings.ts b/web/src/ts/settings.ts index 76bfefb..71c66a4 100644 --- a/web/src/ts/settings.ts +++ b/web/src/ts/settings.ts @@ -100,6 +100,10 @@ class SettingsCategory { setting = this.createTextInput(settingsKey, '{{.settings.bufferTimeout.title}}', '{{.settings.bufferTimeout.placeholder}}'); break; + case 'buffer.terminationTimeout': + setting = this.createTextInput(settingsKey, '{{.settings.bufferTerminationTimeout.title}}', '{{.settings.bufferTerminationTimeout.placeholder}}'); + break; + case 'ffmpeg.path': setting = this.createTextInput(settingsKey, '{{.settings.ffmpegPath.title}}', '{{.settings.ffmpegPath.placeholder}}'); break; @@ -295,15 +299,14 @@ class SettingsCategory { var tdRight = document.createElement('TD'); var button = this.Content.createInput('button', 'upload', '{{.button.uploadCustomImage}}'); + button.setAttribute('onclick', 'javascript: uploadCustomImage();'); tdRight.appendChild(button) setting.appendChild(tdLeft); setting.appendChild(tdRight); break; } - return setting; - } createDescription(settingsKey: string): any { @@ -366,6 +369,10 @@ class SettingsCategory { text = '{{.settings.bufferSize.description}}'; break; + case 'buffer.terminationTimeout': + text ='{{.settings.bufferTerminationTimeout.description}}'; + break; + case 'buffer.autoReconnect': text = '{{.settings.autoReconnect.description}}'; break; @@ -598,6 +605,7 @@ function saveSettings() { break; case 'buffer.timeout': + case 'buffer.terminationTimeout': value = parseFloat(value); case 'bindingIPs':