#!/usr/bin/env bash
set -eu
os=$(uname -s)
linux_headless() {
  case "${DGE_ENROLL_HEADLESS:-}" in 1|true|yes|TRUE|YES) return 0 ;; esac
  [ -z "${DISPLAY:-}" ] && [ -z "${WAYLAND_DISPLAY:-}" ]
}
if [ "$os" != Linux ] && [ "$os" != Darwin ]; then
  echo 'This file is for Linux, macOS, or Ubuntu in WSL. On Windows, download Dorian Gray Worker.cmd from the setup page and open it.'
  exit 1
fi
if [ "$os" = Linux ] && [ ! -d /run/systemd/system ]; then
  echo 'This installer needs a Linux machine running systemd.'
  exit 1
fi
if [ "$os" = Darwin ] && [ "$(id -u)" -eq 0 ]; then
  echo 'Do not run this installer with sudo on a Mac. Run it as yourself.'
  exit 1
fi
if [ "$os" = Linux ] && [ "$(id -u)" -ne 0 ]; then
  echo 'Your computer may ask for its administrator password. It stays on this computer.'
  if ! linux_headless && command -v pkexec >/dev/null 2>&1 && { [ -n "${DISPLAY:-}" ] || [ -n "${WAYLAND_DISPLAY:-}" ]; }; then
    exec pkexec env DISPLAY="${DISPLAY:-}" WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-}" XAUTHORITY="${XAUTHORITY:-}" \
      DGE_ENROLL_NAME="${DGE_ENROLL_NAME:-}" DGE_ENROLL_EMAIL="${DGE_ENROLL_EMAIL:-}" \
      DGE_ENROLL_PHONE="${DGE_ENROLL_PHONE:-}" DGE_ENROLL_NOTE="${DGE_ENROLL_NOTE:-}" \
      DGE_ENROLL_HEADLESS="${DGE_ENROLL_HEADLESS:-}" bash "$0"
  fi
  exec sudo \
    DGE_ENROLL_NAME="${DGE_ENROLL_NAME:-}" DGE_ENROLL_EMAIL="${DGE_ENROLL_EMAIL:-}" \
    DGE_ENROLL_PHONE="${DGE_ENROLL_PHONE:-}" DGE_ENROLL_NOTE="${DGE_ENROLL_NOTE:-}" \
    DGE_ENROLL_HEADLESS="${DGE_ENROLL_HEADLESS:-}" bash "$0"
fi
gui_user="${SUDO_USER:-}"
if [ -z "$gui_user" ] && [ -n "${PKEXEC_UID:-}" ]; then
  gui_user=$(getent passwd "$PKEXEC_UID" | cut -d: -f1 || true)
fi
unset DOCKER_HOST DOCKER_CONTEXT
python_bin=python3
umask 077
bootstrap_log=""
trap 'if [ -n "$bootstrap_log" ]; then rm -f "$bootstrap_log"; fi' EXIT
printf '\nDGE Worker Setup\nPreparing this computer to run background tasks.\n\n'
macos_python_ok() {
  [ -x "$1" ] && "$1" -c 'import sys; assert sys.version_info >= (3, 11)' >/dev/null 2>&1
}
macos_python() {
  local candidate
  local globbed
  globbed=()
  shopt -s nullglob
  globbed+=(
    /usr/local/Cellar/python@3.*/*/bin/python3.*
    /opt/homebrew/Cellar/python@3.*/*/bin/python3.*
  )
  shopt -u nullglob
  for candidate in "${globbed[@]}" \
      /usr/local/opt/python@3/bin/python3 \
      /opt/homebrew/opt/python@3/bin/python3 \
      /usr/local/opt/python@3.12/bin/python3.12 \
      /usr/local/opt/python@3.13/bin/python3.13 \
      /opt/homebrew/opt/python@3.12/bin/python3.12 \
      /opt/homebrew/opt/python@3.13/bin/python3.13 \
      /usr/local/bin/python3 \
      /opt/homebrew/bin/python3 \
      /usr/bin/python3 \
      python3; do
    case "$candidate" in *config*) continue ;; esac
    if macos_python_ok "$candidate"; then
      echo "$candidate"
      return 0
    fi
  done
  return 1
}
find_macos_brew() {
  export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:${PATH:-}"
  if command -v brew >/dev/null 2>&1; then
    command -v brew
    return 0
  fi
  local candidate
  for candidate in /opt/homebrew/bin/brew /usr/local/bin/brew; do
    if [ -x "$candidate" ]; then
      echo "$candidate"
      return 0
    fi
  done
  return 1
}
install_macos_homebrew() {
  echo 'Installing Homebrew. macOS will ask for your password.' >&2
  if [[ ! -r /dev/tty || ! -w /dev/tty ]]; then
    echo 'Homebrew needs a terminal so macOS can ask for your password. Open Terminal and run this installer again.' >&2
    return 1
  fi
  local script file installer_pid watchdog_pid result elapsed timeout_marker
  bootstrap_log=$(mktemp "${TMPDIR:-/tmp}/dge-homebrew-log.XXXXXX")
  export DGE_BOOTSTRAP_LOG="$bootstrap_log"
  printf '%s\n' 'Installing Homebrew' >> "$bootstrap_log"
  if ! script=$(curl --connect-timeout 15 --max-time 120 -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh); then
    echo 'Could not download Homebrew. Check the network and run this installer again.' >&2
    return 1
  fi
  file=$(mktemp "${TMPDIR:-/tmp}/dge-homebrew.XXXXXX")
  timeout_marker="$file.timeout"
  printf '%s\n' "$script" > "$file"
  echo 'Homebrew installer downloaded. Starting installation...' >&2
  printf '%s\n' 'Homebrew installer downloaded. Starting installation...' >> "$bootstrap_log"
  # Homebrew treats a non-terminal stdin as "no sudo" and then says the account
  # is not an administrator. Give it the terminal so sudo can prompt.
  env -u NONINTERACTIVE -u CI INTERACTIVE=1 /bin/bash "$file" </dev/tty > >(tee -a "$bootstrap_log") 2>&1 &
  installer_pid=$!
  (
    elapsed=0
    while [ "$elapsed" -lt 600 ]; do
      sleep 15
      if ! kill -0 "$installer_pid" 2>/dev/null; then exit 0; fi
      elapsed=$((elapsed + 15))
      if [ "$elapsed" -ge 600 ]; then
        echo 'Homebrew did not finish within 10 minutes. Check your Mac network, then run setup again.' >&2
        printf '%s\n' 'Error: Homebrew timed out after 10 minutes' >> "$bootstrap_log"
        : > "$timeout_marker"
        kill -TERM "$installer_pid" 2>/dev/null || true
        sleep 5
        kill -KILL "$installer_pid" 2>/dev/null || true
      elif [ $((elapsed % 60)) -eq 0 ]; then
        echo 'Homebrew is still installing. This may include Apple Command Line Tools...' >&2
        printf '%s\n' 'Homebrew is still installing' >> "$bootstrap_log"
      fi
    done
  ) &
  watchdog_pid=$!
  if wait "$installer_pid"; then result=0; else result=$?; fi
  kill "$watchdog_pid" 2>/dev/null || true
  wait "$watchdog_pid" 2>/dev/null || true
  rm -f "$file"
  if [ -f "$timeout_marker" ]; then
    rm -f "$timeout_marker"
    return 1
  fi
  if [ "$result" -ne 0 ]; then
    echo 'Could not install Homebrew. Enter your Mac password when asked and run this installer again.' >&2
    return 1
  fi
  export PATH="/opt/homebrew/bin:/usr/local/bin:${PATH:-}"
}
ensure_macos_python() {
  local found brew
  found=$(macos_python) || found=""
  if [ -n "$found" ]; then
    printf '%s\n' "$found"
    return 0
  fi
  echo 'Installing Python 3. This may take a few minutes...' >&2
  brew=$(find_macos_brew) || brew=""
  if [ -z "$brew" ]; then
    install_macos_homebrew || return 1
    brew=$(find_macos_brew) || brew=""
  fi
  if [ -z "$brew" ]; then
    echo 'Could not install Homebrew. Approve the password prompt and run this installer again.' >&2
    return 1
  fi
  if ! "$brew" install python; then
    echo 'Could not install Python 3. Check the network, approve any password prompt, and run this installer again.' >&2
    return 1
  fi
  export PATH="/opt/homebrew/bin:/usr/local/bin:${PATH:-}"
  found=$(macos_python) || found=""
  if [ -z "$found" ]; then
    echo 'Python 3.11 or newer is required and could not be installed automatically. Check the network and run this installer again.' >&2
    return 1
  fi
  python_bin="$found"
}
if [ "$os" = Darwin ]; then
  export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"
  if [ -n "${SSH_CONNECTION:-}" ] && [ "${DGE_MAC_AQUA_LAUNCHED:-}" != 1 ]; then
    case "${DGE_ENROLL_HEADLESS:-}" in 1|true|yes|TRUE|YES) ;; *)
      script_file=$(cd "$(dirname "$0")" && pwd)/$(basename "$0")
      inner=$(printf 'export DGE_MAC_AQUA_LAUNCHED=1; exec bash %q' "$script_file")
      as=${inner//\\/\\\\}
      as=${as//\"/\\\"}
      osascript -e 'tell application "Terminal" to activate' \
        -e "tell application \"Terminal\" to do script \"$as\""
      exit 0
    ;; esac
  fi
  ensure_macos_python || exit 1
  setup_directory=$(mktemp -d "${TMPDIR:-/tmp}/dge-worker-install.XXXXXX")
else
  if ! python3 -c 'import sys; assert sys.version_info >= (3, 11)' >/dev/null 2>&1; then
    . /etc/os-release
    case "${ID}:${VERSION_ID}" in
      ubuntu:24.*|ubuntu:25.*|ubuntu:26.*|debian:12|debian:13)
        echo 'Installing Python. This may take a few minutes...'
        apt-get update -qq && apt-get install -y -qq python3 ca-certificates || { echo 'Python installation failed. Check your internet connection and run setup again.'; exit 1; }
        ;;
      *) echo 'This Linux version needs Python 3.11 or newer installed first. Ask your administrator for help, then run this installer again.'; exit 1 ;;
    esac
  fi
  python3 -c 'import sys; assert sys.version_info >= (3, 11)' || { echo 'Python 3.11 or newer is required.'; exit 1; }
  setup_directory=$(mktemp -d /run/dge-worker-install.XXXXXX)
fi
trap 'rm -rf "$setup_directory"; if [ -n "$bootstrap_log" ]; then rm -f "$bootstrap_log"; fi' EXIT
cat > "$setup_directory/payload" <<'DGE_SETUP_PAYLOAD'
eyJob3N0X2FwcC5weSI6IiMhL3Vzci9iaW4vZW52IHB5dGhvbjNcblwiXCJcIkluc3RhbGwgYSBkdXJhYmxlIERvcmlhbiBHcmF5IFdvcmtlciBsYXVuY2hlciBzbyB2b2x1bnRlZXJzIHJlb3BlbiBpdCBsaWtlIGFueSBvdGhlciBhcHAuXCJcIlwiXG5pbXBvcnQgYmFzZTY0XG5pbXBvcnQganNvblxuaW1wb3J0IG9zXG5pbXBvcnQgcHdkXG5pbXBvcnQgc2hsZXhcbmltcG9ydCBzaHV0aWxcbmltcG9ydCBzdWJwcm9jZXNzXG5pbXBvcnQgc3lzXG5pbXBvcnQgdXJsbGliLmVycm9yXG5pbXBvcnQgdXJsbGliLnJlcXVlc3RcbmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aFxuXG5BUFBfTkFNRSA9ICdEb3JpYW4gR3JheSBXb3JrZXInXG5BUFBfSUQgPSAnY29tLmRnZS53b3JrZXInXG5MSU5VWF9JQ09OX05BTUUgPSAnZGdlLXdvcmtlci1zZXR1cCdcbkxJTlVYX1dNX0NMQVNTID0gJ0RHRVdvcmtlclNldHVwJ1xuSE9TVF9BUFBfRU5WID0gJ0RHRV9IT1NUX0FQUCdcbkZJTEVTID0gKFxuICAgICdob3N0X2FwcC5weScsXG4gICAgJ2hvc3RfZ3VpLnB5JyxcbiAgICAnaG9zdF93ZWIuaHRtbCcsXG4gICAgJ2hvc3RfaW52ZW50b3J5LnB5JyxcbiAgICAnaG9zdF9pbnZlbnRvcnkucHMxJyxcbiAgICAnZGdlLWljb24ucG5nJyxcbiAgICAnZGdlLWljb24uaWNvJyxcbiAgICAnZGdlLWljb24ueHBtJyxcbiAgICAnY29uZmlnLmpzb24nLFxuICAgICdpbnN0YWxsLnB5JyxcbiAgICAnaW5zdGFsbF9tYWNvcy5weScsXG4gICAgJ3NldHVwX2xvZ19yZXBvcnRlci5weScsXG4gICAgJ21hY29zX3IyX3Byb3h5LnB5JyxcbiAgICAncHJlcGFyZV9tYWNoaW5lLnB5JyxcbiAgICAnc2V0dXAucHknLFxuICAgICdhZ2VudC5weScsXG4gICAgJ2xhdW5jaGVyLnB5JyxcbiAgICAndW5pbnN0YWxsLnB5JyxcbiAgICAnaW52aXRhdGlvbi5qc29uJyxcbilcblJFRlJFU0hfTkFNRVMgPSAoXG4gICAgJ2hvc3RfYXBwLnB5JyxcbiAgICAnaG9zdF9ndWkucHknLFxuICAgICdob3N0X3dlYi5odG1sJyxcbiAgICAnaG9zdF9pbnZlbnRvcnkucHknLFxuICAgICdob3N0X2ludmVudG9yeS5wczEnLFxuICAgICdzZXR1cC5weScsXG4gICAgJ2luc3RhbGwucHknLFxuICAgICdpbnN0YWxsX21hY29zLnB5JyxcbiAgICAnc2V0dXBfbG9nX3JlcG9ydGVyLnB5JyxcbiAgICAnbWFjb3NfcjJfcHJveHkucHknLFxuICAgICdwcmVwYXJlX21hY2hpbmUucHknLFxuICAgICdsYXVuY2hlci5weScsXG4gICAgJ3VuaW5zdGFsbC5weScsXG4gICAgJ2FnZW50LnB5JyxcbiAgICAnZGdlLWljb24ucG5nJyxcbiAgICAnZGdlLWljb24uaWNvJyxcbiAgICAnZGdlLWljb24ueHBtJyxcbilcblxuXG5kZWYgc291cmNlX3Jvb3QoKTpcbiAgICByZXR1cm4gUGF0aChfX2ZpbGVfXykucmVzb2x2ZSgpLnBhcmVudFxuXG5cbmRlZiBydW5uaW5nX2luX3dzbCgpOlxuICAgIGlmIG9zLmVudmlyb24uZ2V0KCdXU0xfRElTVFJPX05BTUUnKTpcbiAgICAgICAgcmV0dXJuIFRydWVcbiAgICB0cnk6XG4gICAgICAgIHJldHVybiAnbWljcm9zb2Z0JyBpbiBQYXRoKCcvcHJvYy92ZXJzaW9uJykucmVhZF90ZXh0KCkubG93ZXIoKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZXR1cm4gRmFsc2VcblxuXG5kZWYgZ3VpX3VzZXIoKTpcbiAgICBpZiBvcy5nZXRldWlkKCkgIT0gMDpcbiAgICAgICAgcmV0dXJuIHB3ZC5nZXRwd3VpZChvcy5nZXR1aWQoKSlcbiAgICBuYW1lID0gb3MuZW52aXJvbi5nZXQoJ1NVRE9fVVNFUicpXG4gICAgaWYgbmFtZSBhbmQgbmFtZSAhPSAncm9vdCc6XG4gICAgICAgIHJldHVybiBwd2QuZ2V0cHduYW0obmFtZSlcbiAgICB1aWQgPSBvcy5lbnZpcm9uLmdldCgnUEtFWEVDX1VJRCcpXG4gICAgaWYgdWlkIGFuZCB1aWQuaXNkaWdpdCgpIGFuZCBpbnQodWlkKSAhPSAwOlxuICAgICAgICByZXR1cm4gcHdkLmdldHB3dWlkKGludCh1aWQpKVxuICAgIHJldHVybiBwd2QuZ2V0cHd1aWQoMClcblxuXG5kZWYgZ3VpX2hvbWUoKTpcbiAgICByZXR1cm4gUGF0aChndWlfdXNlcigpLnB3X2RpcilcblxuXG5kZWYgbWFjX2FwcF9idW5kbGUoKTpcbiAgICByZXR1cm4gZ3VpX2hvbWUoKSAvICdBcHBsaWNhdGlvbnMnIC8gKEFQUF9OQU1FICsgJy5hcHAnKVxuXG5cbmRlZiBhcHBfaW5zdGFsbF9kaXIoKTpcbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6XG4gICAgICAgIHJldHVybiBtYWNfYXBwX2J1bmRsZSgpIC8gJ0NvbnRlbnRzJyAvICdSZXNvdXJjZXMnIC8gJ2FwcCdcbiAgICBpZiBydW5uaW5nX2luX3dzbCgpOlxuICAgICAgICByZXR1cm4gUGF0aCgnL29wdC9kZ2Utd29ya2VyL2hvc3QtdWknKVxuICAgIHJldHVybiBndWlfaG9tZSgpIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2RnZS13b3JrZXInIC8gJ2hvc3QtdWknXG5cblxuZGVmIHB5dGhvbl9mb3JfbGF1bmNoKCk6XG4gICAgZXhlID0gUGF0aChzeXMuZXhlY3V0YWJsZSkucmVzb2x2ZSgpXG4gICAgaWYgZXhlLm5hbWUgPT0gJ1B5dGhvbicgYW5kICdQeXRob24uYXBwJyBpbiBzdHIoZXhlKTpcbiAgICAgICAgY2FuZGlkYXRlID0gZXhlLnBhcmVudHNbM10gLyAnYmluJyAvICdweXRob24zJ1xuICAgICAgICBpZiBjYW5kaWRhdGUuZXhpc3RzKCk6XG4gICAgICAgICAgICByZXR1cm4gc3RyKGNhbmRpZGF0ZSlcbiAgICByZXR1cm4gc3RyKGV4ZSlcblxuXG5kZWYgY2hvd25fdHJlZShwYXRoLCB1c2VyKTpcbiAgICBpZiBvcy5nZXRldWlkKCkgIT0gMCBvciB1c2VyLnB3X3VpZCA9PSAwOlxuICAgICAgICByZXR1cm5cbiAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKTpcbiAgICAgICAgb3MuY2hvd24ocm9vdCwgdXNlci5wd191aWQsIHVzZXIucHdfZ2lkKVxuICAgICAgICBmb3IgbmFtZSBpbiBkaXJzICsgZmlsZXM6XG4gICAgICAgICAgICBvcy5jaG93bihvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSksIHVzZXIucHdfdWlkLCB1c2VyLnB3X2dpZClcblxuXG5kZWYgY29weV9hcHBfZmlsZXMoZGVzdCwgc2NyaXB0X3BhdGgpOlxuICAgIGRlc3QubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGRlc3QuY2htb2QoMG83NTUpXG4gICAgaWYgc3RyKGRlc3QpLnN0YXJ0c3dpdGgoJy9vcHQvZGdlLXdvcmtlcicpOlxuICAgICAgICBkZXN0LnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgICAgIGRlc3QucGFyZW50LmNobW9kKDBvNzU1KVxuICAgIHNyY19yb290ID0gc291cmNlX3Jvb3QoKVxuICAgIGZvciBuYW1lIGluIEZJTEVTOlxuICAgICAgICBzcmMgPSBzcmNfcm9vdCAvIG5hbWVcbiAgICAgICAgaWYgbm90IHNyYy5leGlzdHMoKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIHRhcmdldCA9IGRlc3QgLyBuYW1lXG4gICAgICAgIGlmIHNyYy5yZXNvbHZlKCkgPT0gdGFyZ2V0LnJlc29sdmUoKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIGlmIG5hbWUgPT0gJ2ludml0YXRpb24uanNvbicgYW5kIHRhcmdldC5leGlzdHMoKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIHNodXRpbC5jb3B5MihzcmMsIHRhcmdldClcbiAgICBpbnN0YWxsZXIgPSBQYXRoKHNjcmlwdF9wYXRoKSBpZiBzY3JpcHRfcGF0aCBlbHNlIE5vbmVcbiAgICBpZiBpbnN0YWxsZXIgYW5kIGluc3RhbGxlci5leGlzdHMoKSBhbmQgaW5zdGFsbGVyLnN1ZmZpeCBpbiAoJy5zaCcsICcuY29tbWFuZCcsICcucHMxJywgJy5jbWQnKTpcbiAgICAgICAgdGFyZ2V0ID0gZGVzdCAvICgnc2V0dXAtd29ya2VyJyArIGluc3RhbGxlci5zdWZmaXgpXG4gICAgICAgIGlmIGluc3RhbGxlci5yZXNvbHZlKCkgIT0gdGFyZ2V0LnJlc29sdmUoKTpcbiAgICAgICAgICAgIHNodXRpbC5jb3B5MihpbnN0YWxsZXIsIHRhcmdldClcbiAgICAoZGVzdCAvICdweXRob24ucGF0aCcpLndyaXRlX3RleHQocHl0aG9uX2Zvcl9sYXVuY2goKSArICdcXG4nKVxuICAgIGZvciBwYXRoIGluIGRlc3QuaXRlcmRpcigpOlxuICAgICAgICBpZiBwYXRoLnN1ZmZpeCBpbiAoJy5qc29uJywpOlxuICAgICAgICAgICAgcGF0aC5jaG1vZCgwbzYwMClcbiAgICAgICAgZWxpZiBwYXRoLmlzX2ZpbGUoKTpcbiAgICAgICAgICAgIHBhdGguY2htb2QoMG83NTUgaWYgcGF0aC5zdWZmaXggaW4gKCcucHknLCAnLnNoJywgJy5jb21tYW5kJykgZWxzZSAwbzY0NClcblxuXG5kZWYgY29uZmlndXJlZF9vcmlnaW4oKTpcbiAgICBwYXRoID0gc291cmNlX3Jvb3QoKSAvICdjb25maWcuanNvbidcbiAgICBpZiBub3QgcGF0aC5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICB0cnk6XG4gICAgICAgIHJldHVybiBqc29uLmxvYWRzKHBhdGgucmVhZF90ZXh0KCkpLmdldCgnb3JpZ2luJylcbiAgICBleGNlcHQgKE9TRXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgZmlsZV9ieXRlcyhlbnRyeSk6XG4gICAgYm9keSA9IChlbnRyeSBvciB7fSkuZ2V0KCdib2R5JylcbiAgICBlbmNvZGluZyA9IChlbnRyeSBvciB7fSkuZ2V0KCdlbmNvZGluZycpXG4gICAgaWYgZW5jb2RpbmcgPT0gJ2Jhc2U2NCcgYW5kIGlzaW5zdGFuY2UoYm9keSwgc3RyKTpcbiAgICAgICAgcmV0dXJuIGJhc2U2NC5iNjRkZWNvZGUoYm9keSlcbiAgICBpZiBlbmNvZGluZyA9PSAndXRmLTgnIGFuZCBpc2luc3RhbmNlKGJvZHksIHN0cik6XG4gICAgICAgIHJldHVybiBib2R5LmVuY29kZSgpXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgcmVmcmVzaF9mcm9tX29yaWdpbihvcmlnaW49Tm9uZSk6XG4gICAgb3JpZ2luID0gb3JpZ2luIG9yIGNvbmZpZ3VyZWRfb3JpZ2luKClcbiAgICBpZiBub3Qgb3JpZ2luOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICB0cnk6XG4gICAgICAgIHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KFxuICAgICAgICAgICAgb3JpZ2luLnJzdHJpcCgnLycpICsgJy9jb21wdXRlX2ZsZWV0L2Rvd25sb2FkL2hvc3RfZmlsZXMnLFxuICAgICAgICAgICAgaGVhZGVycz17J25ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuMC4wIFNhZmFyaS81MzcuMzYnfSxcbiAgICAgICAgKVxuICAgICAgICB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxdWVzdCwgdGltZW91dD0xNSkgYXMgcmVzcG9uc2U6XG4gICAgICAgICAgICBwYXlsb2FkID0ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKDJfMDk3XzE1MikpXG4gICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBqc29uLkpTT05EZWNvZGVFcnJvciwgdXJsbGliLmVycm9yLlVSTEVycm9yKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgZGVzdCA9IHNvdXJjZV9yb290KClcbiAgICBjaGFuZ2VkID0gRmFsc2VcbiAgICBmb3IgbmFtZSwgZW50cnkgaW4gKHBheWxvYWQuZ2V0KCdmaWxlcycpIG9yIHt9KS5pdGVtcygpOlxuICAgICAgICBpZiBuYW1lIG5vdCBpbiBSRUZSRVNIX05BTUVTIG9yICcvJyBpbiBuYW1lIG9yIG5hbWUuc3RhcnRzd2l0aCgnLicpOlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgZGF0YSA9IGZpbGVfYnl0ZXMoZW50cnkpXG4gICAgICAgIGlmIGRhdGEgaXMgTm9uZTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIHRhcmdldCA9IGRlc3QgLyBuYW1lXG4gICAgICAgIGlmIHRhcmdldC5leGlzdHMoKSBhbmQgdGFyZ2V0LnJlYWRfYnl0ZXMoKSA9PSBkYXRhOlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgdGVtcG9yYXJ5ID0gZGVzdCAvIChuYW1lICsgJy5uZXcnKVxuICAgICAgICB0ZW1wb3Jhcnkud3JpdGVfYnl0ZXMoZGF0YSlcbiAgICAgICAgdGVtcG9yYXJ5LnJlcGxhY2UodGFyZ2V0KVxuICAgICAgICBpZiB0YXJnZXQuc3VmZml4ID09ICcucHknOlxuICAgICAgICAgICAgdGFyZ2V0LmNobW9kKDBvNzU1KVxuICAgICAgICBjaGFuZ2VkID0gVHJ1ZVxuICAgIHJldHVybiBjaGFuZ2VkXG5cblxuZGVmIHdyaXRlX21hY19pY25zKHBuZywgaWNucyk6XG4gICAgaWYgbm90IHBuZy5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaWNvbnNldCA9IGljbnMucGFyZW50IC8gJ2RnZS5pY29uc2V0J1xuICAgIGlmIGljb25zZXQuZXhpc3RzKCk6XG4gICAgICAgIHNodXRpbC5ybXRyZWUoaWNvbnNldClcbiAgICBpY29uc2V0Lm1rZGlyKClcbiAgICBmb3Igc2l6ZSwgbmFtZSBpbiAoXG4gICAgICAgICgxNiwgJ2ljb25fMTZ4MTYucG5nJyksXG4gICAgICAgICgzMiwgJ2ljb25fMTZ4MTZAMngucG5nJyksXG4gICAgICAgICgzMiwgJ2ljb25fMzJ4MzIucG5nJyksXG4gICAgICAgICg2NCwgJ2ljb25fMzJ4MzJAMngucG5nJyksXG4gICAgICAgICgxMjgsICdpY29uXzEyOHgxMjgucG5nJyksXG4gICAgICAgICgyNTYsICdpY29uXzEyOHgxMjhAMngucG5nJyksXG4gICAgICAgICgyNTYsICdpY29uXzI1NngyNTYucG5nJyksXG4gICAgICAgICg1MTIsICdpY29uXzI1NngyNTZAMngucG5nJyksXG4gICAgICAgICg1MTIsICdpY29uXzUxMng1MTIucG5nJyksXG4gICAgICAgICgxMDI0LCAnaWNvbl81MTJ4NTEyQDJ4LnBuZycpLFxuICAgICk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFxuICAgICAgICAgICAgWydzaXBzJywgJy16Jywgc3RyKHNpemUpLCBzdHIoc2l6ZSksIHN0cihwbmcpLCAnLS1vdXQnLCBzdHIoaWNvbnNldCAvIG5hbWUpXSxcbiAgICAgICAgICAgIGNoZWNrPUZhbHNlLFxuICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgIClcbiAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgWydpY29udXRpbCcsICctYycsICdpY25zJywgc3RyKGljb25zZXQpLCAnLW8nLCBzdHIoaWNucyldLFxuICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICApXG4gICAgc2h1dGlsLnJtdHJlZShpY29uc2V0LCBpZ25vcmVfZXJyb3JzPVRydWUpXG4gICAgaWYgcmVzdWx0LnJldHVybmNvZGUgPT0gMCBhbmQgaWNucy5leGlzdHMoKSBhbmQgaWNucy5zdGF0KCkuc3Rfc2l6ZSA+IDA6XG4gICAgICAgIHJldHVybiBUcnVlXG4gICAgaWYgc2h1dGlsLndoaWNoKCdzaXBzJyk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFxuICAgICAgICAgICAgWydzaXBzJywgJy1zJywgJ2Zvcm1hdCcsICdpY25zJywgc3RyKHBuZyksICctLW91dCcsIHN0cihpY25zKV0sXG4gICAgICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICApXG4gICAgcmV0dXJuIGljbnMuZXhpc3RzKCkgYW5kIGljbnMuc3RhdCgpLnN0X3NpemUgPiAwXG5cblxuZGVmIHdyaXRlX21hY19hcHAoZGVzdCk6XG4gICAgYnVuZGxlID0gbWFjX2FwcF9idW5kbGUoKVxuICAgIG1hY29zID0gYnVuZGxlIC8gJ0NvbnRlbnRzJyAvICdNYWNPUydcbiAgICByZXNvdXJjZXMgPSBidW5kbGUgLyAnQ29udGVudHMnIC8gJ1Jlc291cmNlcydcbiAgICBtYWNvcy5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgcmVzb3VyY2VzLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBweXRob24gPSBweXRob25fZm9yX2xhdW5jaCgpXG4gICAgbGF1bmNoZXIgPSBtYWNvcyAvICdkZ2Utd29ya2VyJ1xuICAgIHNjcmlwdCA9IGRlc3QgLyAnc2V0dXAtd29ya2VyLmNvbW1hbmQnXG4gICAgaWYgbm90IHNjcmlwdC5leGlzdHMoKTpcbiAgICAgICAgc2NyaXB0ID0gZGVzdCAvICdzZXR1cC13b3JrZXIuc2gnXG4gICAgaWYgbm90IHNjcmlwdC5leGlzdHMoKTpcbiAgICAgICAgc2NyaXB0ID0gZGVzdCAvICdob3N0X2d1aS5weSdcbiAgICBsYXVuY2hlci53cml0ZV90ZXh0KFxuICAgICAgICAnIyEvYmluL2Jhc2hcXG4nXG4gICAgICAgICdleHBvcnQgREdFX0hPU1RfQVBQPTFcXG4nXG4gICAgICAgICdleHBvcnQgREdFX01BQ19BUVVBX0xBVU5DSEVEPTFcXG4nXG4gICAgICAgICdjZCBcIiQoZGlybmFtZSBcIiQwXCIpLy4uL1Jlc291cmNlcy9hcHBcIlxcbidcbiAgICAgICAgJ1BZVEhPTj0kKGNhdCBweXRob24ucGF0aCAyPi9kZXYvbnVsbCB8fCBlY2hvICVzKVxcbidcbiAgICAgICAgJ2V4ZWMgXCIkUFlUSE9OXCIgaG9zdF9ndWkucHkgJXNcXG4nXG4gICAgICAgICUgKHNobGV4LnF1b3RlKHB5dGhvbiksIHNobGV4LnF1b3RlKHNjcmlwdC5uYW1lKSlcbiAgICApXG4gICAgbGF1bmNoZXIuY2htb2QoMG83NTUpXG4gICAgaWNvbiA9IGRlc3QgLyAnZGdlLWljb24ucG5nJ1xuICAgIGljbnMgPSByZXNvdXJjZXMgLyAnZGdlLWljb24uaWNucydcbiAgICB3cml0ZV9tYWNfaWNucyhpY29uLCBpY25zKVxuICAgIGlmIGljb24uZXhpc3RzKCk6XG4gICAgICAgIHNodXRpbC5jb3B5MihpY29uLCByZXNvdXJjZXMgLyAnZGdlLWljb24ucG5nJylcbiAgICBpY29uX2tleSA9ICdkZ2UtaWNvbicgaWYgaWNucy5leGlzdHMoKSBhbmQgaWNucy5zdGF0KCkuc3Rfc2l6ZSA+IDAgZWxzZSAnZGdlLWljb24ucG5nJ1xuICAgIHBsaXN0ID0gYnVuZGxlIC8gJ0NvbnRlbnRzJyAvICdJbmZvLnBsaXN0J1xuICAgIHBsaXN0LndyaXRlX3RleHQoJycnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG48IURPQ1RZUEUgcGxpc3QgUFVCTElDIFwiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOXCIgXCJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkXCI+XG48cGxpc3QgdmVyc2lvbj1cIjEuMFwiPjxkaWN0PlxuICA8a2V5PkNGQnVuZGxlTmFtZTwva2V5PjxzdHJpbmc+JXM8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZURpc3BsYXlOYW1lPC9rZXk+PHN0cmluZz4lczwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PjxzdHJpbmc+JXM8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT48c3RyaW5nPjI8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PjxzdHJpbmc+MS4xPC9zdHJpbmc+XG4gIDxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PjxzdHJpbmc+QVBQTDwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PjxzdHJpbmc+ZGdlLXdvcmtlcjwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlSWNvbkZpbGU8L2tleT48c3RyaW5nPiVzPC9zdHJpbmc+XG4gIDxrZXk+Q0ZCdW5kbGVJY29uTmFtZTwva2V5PjxzdHJpbmc+ZGdlLWljb248L3N0cmluZz5cbiAgPGtleT5MU01pbmltdW1TeXN0ZW1WZXJzaW9uPC9rZXk+PHN0cmluZz4xMi4wPC9zdHJpbmc+XG4gIDxrZXk+TlNIaWdoUmVzb2x1dGlvbkNhcGFibGU8L2tleT48dHJ1ZS8+XG48L2RpY3Q+PC9wbGlzdD5cbicnJyAlIChBUFBfTkFNRSwgQVBQX05BTUUsIEFQUF9JRCwgaWNvbl9rZXkpKVxuICAgIHN1YnByb2Nlc3MucnVuKFsndG91Y2gnLCBzdHIoYnVuZGxlKV0sIGNoZWNrPUZhbHNlKVxuICAgIGxzcmVnaXN0ZXIgPSBQYXRoKFxuICAgICAgICAnL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzLydcbiAgICAgICAgJ0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9TdXBwb3J0L2xzcmVnaXN0ZXInXG4gICAgKVxuICAgIGlmIGxzcmVnaXN0ZXIuZXhpc3RzKCk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFtzdHIobHNyZWdpc3RlciksICctZicsIHN0cihidW5kbGUpXSwgY2hlY2s9RmFsc2UpXG4gICAgY2hvd25fdHJlZShidW5kbGUsIGd1aV91c2VyKCkpXG5cblxuZGVmIHdyaXRlX2xpbnV4X2Rlc2t0b3AoZGVzdCwgc2NyaXB0X3BhdGgpOlxuICAgIGljb25fc3JjID0gZGVzdCAvICdkZ2UtaWNvbi5wbmcnXG4gICAgaWYgbm90IGljb25fc3JjLmV4aXN0cygpOlxuICAgICAgICByZXR1cm5cbiAgICBob21lID0gZ3VpX2hvbWUoKVxuICAgIGFwcHNfZGlyID0gaG9tZSAvICcubG9jYWwnIC8gJ3NoYXJlJyAvICdhcHBsaWNhdGlvbnMnXG4gICAgYXBwc19kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGZvciBzaXplIGluICg0OCwgMTI4LCAyNTYpOlxuICAgICAgICBpY29uX2RpciA9IGhvbWUgLyAnLmxvY2FsJyAvICdzaGFyZScgLyAnaWNvbnMnIC8gJ2hpY29sb3InIC8gZid7c2l6ZX14e3NpemV9JyAvICdhcHBzJ1xuICAgICAgICBpY29uX2Rpci5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgICAgIHRhcmdldCA9IGljb25fZGlyIC8gKExJTlVYX0lDT05fTkFNRSArICcucG5nJylcbiAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdjb252ZXJ0Jyk6XG4gICAgICAgICAgICBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgICAgICAgICBbJ2NvbnZlcnQnLCBzdHIoaWNvbl9zcmMpLCAnLXJlc2l6ZScsIGYne3NpemV9eHtzaXplfScsIHN0cih0YXJnZXQpXSxcbiAgICAgICAgICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgICAgICApXG4gICAgICAgIGVsaWYgbm90IHRhcmdldC5leGlzdHMoKTpcbiAgICAgICAgICAgIHNodXRpbC5jb3B5MihpY29uX3NyYywgdGFyZ2V0KVxuICAgIHBpeG1hcHMgPSBob21lIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ3BpeG1hcHMnXG4gICAgcGl4bWFwcy5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgc2h1dGlsLmNvcHkyKGljb25fc3JjLCBwaXhtYXBzIC8gKExJTlVYX0lDT05fTkFNRSArICcucG5nJykpXG4gICAgaWNvbl8xMjggPSBob21lIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2ljb25zJyAvICdoaWNvbG9yJyAvICcxMjh4MTI4JyAvICdhcHBzJyAvIChMSU5VWF9JQ09OX05BTUUgKyAnLnBuZycpXG4gICAgaWNvbl9wYXRoID0gc3RyKGljb25fMTI4IGlmIGljb25fMTI4LmV4aXN0cygpIGVsc2UgcGl4bWFwcyAvIChMSU5VWF9JQ09OX05BTUUgKyAnLnBuZycpKVxuICAgIHNjcmlwdCA9IGRlc3QgLyAnc2V0dXAtd29ya2VyLnNoJ1xuICAgIGlmIG5vdCBzY3JpcHQuZXhpc3RzKCk6XG4gICAgICAgIHNjcmlwdCA9IFBhdGgoc2NyaXB0X3BhdGgpIGlmIHNjcmlwdF9wYXRoIGVsc2UgZGVzdCAvICdob3N0X2d1aS5weSdcbiAgICBweXRob24gPSAoZGVzdCAvICdweXRob24ucGF0aCcpLnJlYWRfdGV4dCgpLnN0cmlwKCkgaWYgKGRlc3QgLyAncHl0aG9uLnBhdGgnKS5leGlzdHMoKSBlbHNlIHB5dGhvbl9mb3JfbGF1bmNoKClcbiAgICBleGVjX3BhcnRzID0gW1xuICAgICAgICAnZW52JyxcbiAgICAgICAgSE9TVF9BUFBfRU5WICsgJz0xJyxcbiAgICAgICAgJ0RHRV9MSU5VWF9ERVNLVE9QX0xBVU5DSEVEPTEnLFxuICAgICAgICAnR0RLX0JBQ0tFTkQ9eDExJyxcbiAgICAgICAgcHl0aG9uLFxuICAgICAgICBzdHIoZGVzdCAvICdob3N0X2d1aS5weScpLFxuICAgICAgICBzdHIoc2NyaXB0KSxcbiAgICBdXG4gICAgZGVza3RvcCA9ICcnJ1tEZXNrdG9wIEVudHJ5XVxuVmVyc2lvbj0xLjBcblR5cGU9QXBwbGljYXRpb25cbk5hbWU9JXNcbkNvbW1lbnQ9UnVuIERvcmlhbiBHcmF5IGJhY2tncm91bmQgd29yayB3aGVuIHRoaXMgY29tcHV0ZXIgaXMgaWRsZVxuRXhlYz0lc1xuSWNvbj0lc1xuVGVybWluYWw9ZmFsc2VcblN0YXJ0dXBXTUNsYXNzPSVzXG5DYXRlZ29yaWVzPVV0aWxpdHk7XG4nJycgJSAoQVBQX05BTUUsICcgJy5qb2luKHNobGV4LnF1b3RlKHBhcnQpIGZvciBwYXJ0IGluIGV4ZWNfcGFydHMpLCBpY29uX3BhdGgsIExJTlVYX1dNX0NMQVNTKVxuICAgIGRlc2t0b3BfcGF0aCA9IGFwcHNfZGlyIC8gKEFQUF9JRCArICcuZGVza3RvcCcpXG4gICAgZGVza3RvcF9wYXRoLndyaXRlX3RleHQoZGVza3RvcClcbiAgICBkZXNrdG9wX3BhdGguY2htb2QoMG83NTUpXG4gICAgc3VicHJvY2Vzcy5ydW4oXG4gICAgICAgIFsndXBkYXRlLWRlc2t0b3AtZGF0YWJhc2UnLCBzdHIoYXBwc19kaXIpXSxcbiAgICAgICAgY2hlY2s9RmFsc2UsXG4gICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgKVxuICAgIGNob3duX3RyZWUoaG9tZSAvICcubG9jYWwnIC8gJ3NoYXJlJyAvICdkZ2Utd29ya2VyJywgZ3VpX3VzZXIoKSlcbiAgICBjaG93bl90cmVlKGFwcHNfZGlyLCBndWlfdXNlcigpKVxuXG5cbmRlZiB3aW5kb3dzX3Byb2ZpbGUoKTpcbiAgICBjbWQgPSBQYXRoKCcvbW50L2MvV2luZG93cy9TeXN0ZW0zMi9jbWQuZXhlJylcbiAgICBpZiBub3QgY21kLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFtzdHIoY21kKSwgJy9jJywgJ2VjaG8nLCAnJVVTRVJQUk9GSUxFJSddLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUpXG4gICAgcHJvZmlsZSA9IChyZXN1bHQuc3Rkb3V0IG9yICcnKS5zdHJpcCgpLnNwbGl0bGluZXMoKVstMV0uc3RyaXAoKSBpZiByZXN1bHQucmV0dXJuY29kZSA9PSAwIGVsc2UgJydcbiAgICBpZiBub3QgcHJvZmlsZTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICBjb252ZXJ0ZWQgPSBzdWJwcm9jZXNzLnJ1bihbJ3dzbHBhdGgnLCAnLXUnLCBwcm9maWxlXSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgdGV4dD1UcnVlKVxuICAgIHBhdGggPSBQYXRoKChjb252ZXJ0ZWQuc3Rkb3V0IG9yICcnKS5zdHJpcCgpKVxuICAgIHJldHVybiBwYXRoIGlmIHBhdGguZXhpc3RzKCkgZWxzZSBOb25lXG5cblxuZGVmIHdpbl9wYXRoKHBhdGgpOlxuICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFsnd3NscGF0aCcsICctdycsIHN0cihwYXRoKV0sIGNoZWNrPUZhbHNlLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUpXG4gICAgcmV0dXJuIChyZXN1bHQuc3Rkb3V0IG9yICcnKS5zdHJpcCgpXG5cblxuZGVmIHdyaXRlX3dpbmRvd3Nfc2hvcnRjdXQoZGVzdCk6XG4gICAgcHJvZmlsZSA9IHdpbmRvd3NfcHJvZmlsZSgpXG4gICAgcG93ZXJzaGVsbCA9IFBhdGgoJy9tbnQvYy9XaW5kb3dzL1N5c3RlbTMyL1dpbmRvd3NQb3dlclNoZWxsL3YxLjAvcG93ZXJzaGVsbC5leGUnKVxuICAgIGlmIG5vdCBwcm9maWxlIG9yIG5vdCBwb3dlcnNoZWxsLmV4aXN0cygpOlxuICAgICAgICByZXR1cm5cbiAgICBwcm9ncmFtcyA9IHByb2ZpbGUgLyAnQXBwRGF0YS9Sb2FtaW5nL01pY3Jvc29mdC9XaW5kb3dzL1N0YXJ0IE1lbnUvUHJvZ3JhbXMnXG4gICAgcHJvZ3JhbXMubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGljb19zcmMgPSBkZXN0IC8gJ2RnZS1pY29uLmljbydcbiAgICBpY29fd2luID0gcHJvZmlsZSAvICdBcHBEYXRhL0xvY2FsL2RnZS13b3JrZXIvZGdlLWljb24uaWNvJ1xuICAgIGljb193aW4ucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBpZiBpY29fc3JjLmV4aXN0cygpOlxuICAgICAgICBzaHV0aWwuY29weTIoaWNvX3NyYywgaWNvX3dpbilcbiAgICBkaXN0cm8gPSBvcy5lbnZpcm9uLmdldCgnV1NMX0RJU1RST19OQU1FJykgb3IgJ1VidW50dSdcbiAgICBsbmsgPSBwcm9ncmFtcyAvIChBUFBfTkFNRSArICcubG5rJylcbiAgICBhcmdzID0gJy1kICVzIC0tY2QgJXMgLS0gZW52ICVzPTEgcHl0aG9uMyBob3N0X2d1aS5weSBzZXR1cC13b3JrZXIuc2gnICUgKFxuICAgICAgICBkaXN0cm8sIGRlc3QuYXNfcG9zaXgoKSwgSE9TVF9BUFBfRU5WLFxuICAgIClcbiAgICBsbmtfd2luID0gd2luX3BhdGgobG5rKS5yZXBsYWNlKFwiJ1wiLCBcIicnXCIpXG4gICAgaWNvbiA9IHdpbl9wYXRoKGljb193aW4pLnJlcGxhY2UoXCInXCIsIFwiJydcIikgaWYgaWNvX3dpbi5leGlzdHMoKSBlbHNlICcnXG4gICAgc2NyaXB0ID0gKFxuICAgICAgICBcIiRzID0gTmV3LU9iamVjdCAtQ29tT2JqZWN0IFdTY3JpcHQuU2hlbGw7IFwiXG4gICAgICAgIFwiJHNjID0gJHMuQ3JlYXRlU2hvcnRjdXQoJyVzJyk7IFwiXG4gICAgICAgIFwiJHNjLlRhcmdldFBhdGggPSAnQzpcXFxcV2luZG93c1xcXFxTeXN0ZW0zMlxcXFx3c2wuZXhlJzsgXCJcbiAgICAgICAgXCIkc2MuQXJndW1lbnRzID0gJyVzJzsgXCJcbiAgICAgICAgXCIkc2MuV2luZG93U3R5bGUgPSA3OyBcIlxuICAgICAgICBcIiRzYy5EZXNjcmlwdGlvbiA9ICclcyc7IFwiXG4gICAgICAgICUgKGxua193aW4sIGFyZ3MucmVwbGFjZShcIidcIiwgXCInJ1wiKSwgQVBQX05BTUUpXG4gICAgKVxuICAgIGlmIGljb246XG4gICAgICAgIHNjcmlwdCArPSBcIiRzYy5JY29uTG9jYXRpb24gPSAnJXMnOyBcIiAlIGljb25cbiAgICBzY3JpcHQgKz0gJyRzYy5TYXZlKCknXG4gICAgc3VicHJvY2Vzcy5ydW4oW3N0cihwb3dlcnNoZWxsKSwgJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBzY3JpcHRdLCBjaGVjaz1GYWxzZSlcbiAgICBkZXNrdG9wID0gcHJvZmlsZSAvICdEZXNrdG9wJ1xuICAgIGlmIGRlc2t0b3AuaXNfZGlyKCkgYW5kIGxuay5leGlzdHMoKTpcbiAgICAgICAgc2h1dGlsLmNvcHkyKGxuaywgZGVza3RvcCAvIGxuay5uYW1lKVxuXG5cbmRlZiBpbnN0YWxsX2hvc3RfYXBwKHNjcmlwdF9wYXRoKTpcbiAgICBkZXN0ID0gYXBwX2luc3RhbGxfZGlyKClcbiAgICBjb3B5X2FwcF9maWxlcyhkZXN0LCBzY3JpcHRfcGF0aClcbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6XG4gICAgICAgIHdyaXRlX21hY19hcHAoZGVzdClcbiAgICBlbGlmIHJ1bm5pbmdfaW5fd3NsKCk6XG4gICAgICAgIHdyaXRlX3dpbmRvd3Nfc2hvcnRjdXQoZGVzdClcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgY2hvd25fdHJlZShkZXN0LCBwd2QuZ2V0cHd1aWQoMTAwMCkpXG4gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjpcbiAgICAgICAgICAgIHBhc3NcbiAgICAgICAgaWYgb3MuZ2V0ZXVpZCgpICE9IDA6XG4gICAgICAgICAgICB3cml0ZV9saW51eF9kZXNrdG9wKGRlc3QsIHNjcmlwdF9wYXRoKVxuICAgIGVsaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6XG4gICAgICAgIHdyaXRlX2xpbnV4X2Rlc2t0b3AoZGVzdCwgc2NyaXB0X3BhdGgpXG4gICAgY2hvd25fdHJlZShkZXN0LCBndWlfdXNlcigpKVxuICAgIHJldHVybiBkZXN0XG5cblxuZGVmIGRyb3BfbG9naW5faGVscGVyKCk6XG4gICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOlxuICAgICAgICByZXR1cm5cbiAgICBwbGlzdCA9IGd1aV9ob21lKCkgLyAnTGlicmFyeScgLyAnTGF1bmNoQWdlbnRzJyAvICdjb20uZGdlLmNvbXB1dGUtaG9zdC1ndWkucGxpc3QnXG4gICAgaWYgbm90IHBsaXN0LmV4aXN0cygpOlxuICAgICAgICByZXR1cm5cbiAgICBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgWydsYXVuY2hjdGwnLCAndW5sb2FkJywgc3RyKHBsaXN0KV0sXG4gICAgICAgIGNoZWNrPUZhbHNlLFxuICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgIClcbiAgICBwbGlzdC51bmxpbmsoKVxuXG5cbmRlZiBlbnN1cmVfcnVubmluZ19mcm9tX2FwcChzY3JpcHRfcGF0aCk6XG4gICAgZGVzdCA9IGluc3RhbGxfaG9zdF9hcHAoc2NyaXB0X3BhdGgpXG4gICAgZHJvcF9sb2dpbl9oZWxwZXIoKVxuICAgIGlmIHNvdXJjZV9yb290KCkgPT0gZGVzdC5yZXNvbHZlKCk6XG4gICAgICAgIG9zLmVudmlyb25bSE9TVF9BUFBfRU5WXSA9ICcxJ1xuICAgICAgICByZXR1cm4gZGVzdFxuICAgIHNjcmlwdCA9IGRlc3QgLyAnc2V0dXAtd29ya2VyLnNoJ1xuICAgIGlmIG5vdCBzY3JpcHQuZXhpc3RzKCk6XG4gICAgICAgIHNjcmlwdCA9IGRlc3QgLyAnc2V0dXAtd29ya2VyLmNvbW1hbmQnXG4gICAgaWYgbm90IHNjcmlwdC5leGlzdHMoKTpcbiAgICAgICAgc2NyaXB0ID0gZGVzdCAvICdob3N0X2d1aS5weSdcbiAgICBweXRob24gPSBweXRob25fZm9yX2xhdW5jaCgpXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBsYXVuY2hlZCA9IHN1YnByb2Nlc3MucnVuKFsnb3BlbicsIHN0cihtYWNfYXBwX2J1bmRsZSgpKV0sIGNoZWNrPUZhbHNlKVxuICAgICAgICBpZiBsYXVuY2hlZC5yZXR1cm5jb2RlID09IDA6XG4gICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDApXG4gICAgb3MuZW52aXJvbltIT1NUX0FQUF9FTlZdID0gJzEnXG4gICAgb3MuZXhlY3YocHl0aG9uLCBbcHl0aG9uLCBzdHIoZGVzdCAvICdob3N0X2d1aS5weScpLCBzdHIoc2NyaXB0KV0pXG4gICAgcmV0dXJuIGRlc3RcbiIsImhvc3RfZ3VpLnB5IjoiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuXCJcIlwiSG9zdCBlbnJvbGxtZW50IEdVSSBhbmQgcG9zdC1hcHByb3ZhbCBpbnN0YWxsZXIgc3VwZXJ2aXNvci5cIlwiXCJcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmltcG9ydCBzaGxleFxuaW1wb3J0IHNodXRpbFxuaW1wb3J0IHN1YnByb2Nlc3NcbmltcG9ydCBzeXNcbmltcG9ydCB0aHJlYWRpbmdcbmltcG9ydCB0aW1lXG5pbXBvcnQgdXJsbGliLmVycm9yXG5pbXBvcnQgdXJsbGliLnJlcXVlc3RcbmltcG9ydCB1cmxsaWIucGFyc2VcbmltcG9ydCB1dWlkXG5mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZVxuZnJvbSBwYXRobGliIGltcG9ydCBQYXRoXG5cbmZyb20gc2V0dXBfbG9nX3JlcG9ydGVyIGltcG9ydCBTZXR1cExvZ1JlcG9ydGVyLCBzYWZlX3NldHVwX2xvZ19saW5lXG5cblJPT1QgPSBQYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50XG5pZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKSBhbmQgJ0dES19CQUNLRU5EJyBub3QgaW4gb3MuZW52aXJvbjpcbiAgICBvcy5lbnZpcm9uWydHREtfQkFDS0VORCddID0gJ3gxMSdcblNVUFBPUlRfTUFDID0gUGF0aC5ob21lKCkgLyAnTGlicmFyeScgLyAnQXBwbGljYXRpb24gU3VwcG9ydCcgLyAnZGdlLXdvcmtlcidcblNVUFBPUlRfTElOVVggPSBQYXRoKCcvb3B0L2RnZS13b3JrZXInKVxuU1RBVEVfTkFNRSA9ICdlbnJvbGxtZW50LXN0YXRlLmpzb24nXG5ERVNLVE9QX0FQUF9JRCA9ICdjb20uZGdlLndvcmtlcidcbkxJTlVYX1dNX0NMQVNTID0gJ0RHRVdvcmtlclNldHVwJ1xuTElOVVhfSUNPTl9OQU1FID0gJ2RnZS13b3JrZXItc2V0dXAnXG5cblxuQlJPV1NFUl9VQSA9ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC4wLjAgU2FmYXJpLzUzNy4zNidcblxuXG5jbGFzcyBOb1JlZGlyZWN0KHVybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXIpOlxuICAgIGRlZiByZWRpcmVjdF9yZXF1ZXN0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIHNldHVwIHNlcnZlciByZWRpcmVjdGVkIHRoaXMgcmVxdWVzdC4nKVxuXG5cbkhUVFAgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoTm9SZWRpcmVjdCgpKVxuXG5cbmRlZiBzdXBwb3J0X2RpcigpOlxuICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIFNVUFBPUlRfTUFDXG4gICAgcmV0dXJuIFNVUFBPUlRfTElOVVhcblxuXG5kZWYgc3RhdGVfcGF0aCgpOlxuICAgIHBhdGggPSBzdXBwb3J0X2RpcigpIC8gU1RBVEVfTkFNRVxuICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJyBhbmQgbm90IHBhdGgucGFyZW50LmV4aXN0cygpOlxuICAgICAgICBwYXRoID0gUGF0aCgnL3RtcC9kZ2Utd29ya2VyJykgLyBTVEFURV9OQU1FXG4gICAgcmV0dXJuIHBhdGhcblxuXG5kZWYgbG9hZF9zdGF0ZSgpOlxuICAgIHBhdGggPSBzdGF0ZV9wYXRoKClcbiAgICBpZiBwYXRoLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhwYXRoLnJlYWRfdGV4dCgpKVxuICAgIGNsYWltID0gc3RyKHV1aWQudXVpZDQoKSlcbiAgICBzdGF0ZSA9IHsnY2xhaW1faWQnOiBjbGFpbX1cbiAgICBwYXRoLnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgcGF0aC53cml0ZV90ZXh0KGpzb24uZHVtcHMoc3RhdGUpKVxuICAgIHBhdGguY2htb2QoMG82MDApXG4gICAgcmV0dXJuIHN0YXRlXG5cblxuZGVmIHNhdmVfc3RhdGUoc3RhdGUpOlxuICAgIHBhdGggPSBzdGF0ZV9wYXRoKClcbiAgICBwYXRoLnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgcGF0aC53cml0ZV90ZXh0KGpzb24uZHVtcHMoc3RhdGUpKVxuICAgIHBhdGguY2htb2QoMG82MDApXG5cblxuZGVmIGNvbmZpZygpOlxuICAgIHJldHVybiBqc29uLmxvYWRzKChST09UIC8gJ2NvbmZpZy5qc29uJykucmVhZF90ZXh0KCkpXG5cblxuZGVmIGludml0YXRpb25fcGF0aCgpOlxuICAgIHJldHVybiBST09UIC8gJ2ludml0YXRpb24uanNvbidcblxuXG5kZWYgZW5yb2xsbWVudF9tb2RlKCk6XG4gICAgaWYgaW52aXRhdGlvbl9wYXRoKCkuZXhpc3RzKCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHBheWxvYWQgPSBjb25maWcoKVxuICAgIHJldHVybiBib29sKHBheWxvYWQuZ2V0KCdlbnJvbGxtZW50JykpXG5cblxuZGVmIHBvc3RfanNvbihvcmlnaW4sIHBhdGgsIHRva2VuLCBib2R5KTpcbiAgICBoZWFkZXJzID0geydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdVc2VyLUFnZW50JzogQlJPV1NFUl9VQSwgJ25ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nJzogJzEnfVxuICAgIGlmIHRva2VuOlxuICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmVhcmVyICcgKyB0b2tlblxuICAgIHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KFxuICAgICAgICBvcmlnaW4ucnN0cmlwKCcvJykgKyBwYXRoLFxuICAgICAgICBkYXRhPWpzb24uZHVtcHMoYm9keSkuZW5jb2RlKCksXG4gICAgICAgIG1ldGhvZD0nUE9TVCcsXG4gICAgICAgIGhlYWRlcnM9aGVhZGVycyxcbiAgICApXG4gICAgd2l0aCBIVFRQLm9wZW4ocmVxdWVzdCwgdGltZW91dD0yMCkgYXMgcmVzcG9uc2U6XG4gICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlc3BvbnNlLnJlYWQoNjU1MzcpKVxuXG5cbmRlZiBnZXRfanNvbihvcmlnaW4sIHBhdGgsIHRva2VuKTpcbiAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChcbiAgICAgICAgb3JpZ2luLnJzdHJpcCgnLycpICsgcGF0aCxcbiAgICAgICAgbWV0aG9kPSdHRVQnLFxuICAgICAgICBoZWFkZXJzPXsnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRva2VuLCAnVXNlci1BZ2VudCc6IEJST1dTRVJfVUEsICduZ3Jvay1za2lwLWJyb3dzZXItd2FybmluZyc6ICcxJ30sXG4gICAgKVxuICAgIHdpdGggSFRUUC5vcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MjApIGFzIHJlc3BvbnNlOlxuICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKDY1NTM3KSlcblxuXG5kZWYgY29sbGVjdF9zbmFwc2hvdChvcmlnaW4pOlxuICAgIGltcG9ydCBob3N0X2ludmVudG9yeVxuICAgIHdpbmRvd3Nfc25hcHNob3QgPSBvcy5lbnZpcm9uLmdldCgnREdFX1dJTkRPV1NfSU5WRU5UT1JZJylcbiAgICBpZiB3aW5kb3dzX3NuYXBzaG90IGFuZCBQYXRoKHdpbmRvd3Nfc25hcHNob3QpLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gaG9zdF9pbnZlbnRvcnkuY29sbGVjdChvcmlnaW4sIHdpbmRvd3Nfc25hcHNob3QpXG4gICAgcmV0dXJuIGhvc3RfaW52ZW50b3J5LmNvbGxlY3Qob3JpZ2luKVxuXG5cbmRlZiBwcmV2aWV3X3N1bW1hcnkoc25hcHNob3QpOlxuICAgIGhhcmR3YXJlID0gc25hcHNob3RbJ2hvc3RfaW52ZW50b3J5J11bJ2hhcmR3YXJlJ11cbiAgICByZWFkaW5lc3MgPSBzbmFwc2hvdFsnaG9zdF9pbnZlbnRvcnknXVsncmVhZGluZXNzJ11cbiAgICBjb25uZWN0aXZpdHkgPSBzbmFwc2hvdFsnaG9zdF9pbnZlbnRvcnknXVsnY29ubmVjdGl2aXR5J11cbiAgICBjb21wdXRlciA9ICcgJy5qb2luKGZpbHRlcihOb25lLCBbaGFyZHdhcmUuZ2V0KCdtYW51ZmFjdHVyZXInKSwgaGFyZHdhcmUuZ2V0KCdoYXJkd2FyZV9tb2RlbCcpXSkpIG9yICdUaGlzIGNvbXB1dGVyJ1xuICAgIHN5c3RlbSA9ICcgJy5qb2luKGZpbHRlcihOb25lLCBbaGFyZHdhcmUuZ2V0KCdvc19uYW1lJyksIGhhcmR3YXJlLmdldCgnb3NfdmVyc2lvbicpXSkpIG9yICdVbmtub3duIHN5c3RlbSdcbiAgICBtZW1vcnkgPSBmb3JtYXRfYnl0ZXMoaGFyZHdhcmUuZ2V0KCdtZW1vcnlfYnl0ZXMnKSlcbiAgICBjcHVzID0gaGFyZHdhcmUuZ2V0KCdsb2dpY2FsX2NwdXMnKVxuICAgIHBvd2VyID0gc25hcHNob3RbJ2hvc3RfaW52ZW50b3J5J11bJ3RlbGVtZXRyeSddXG4gICAgcmVhZHkgPSByZWFkaW5lc3MuZ2V0KCdkb2NrZXInKSBhbmQgcmVhZGluZXNzLmdldCgndmlydHVhbGl6YXRpb24nKVxuICAgIGNvbm5lY3RlZCA9IGNvbm5lY3Rpdml0eS5nZXQoJ3NlcnZlcl9yZWFjaGFibGUnKVxuICAgIHJldHVybiB7XG4gICAgICAgICdjb21wdXRlcic6IGNvbXB1dGVyLFxuICAgICAgICAnc3lzdGVtJzogc3lzdGVtLFxuICAgICAgICAnbWVtb3J5JzogbWVtb3J5LFxuICAgICAgICAnY3B1cyc6IGNwdXMsXG4gICAgICAgICdyZWFkeSc6IHJlYWR5LFxuICAgICAgICAnY29ubmVjdGVkJzogY29ubmVjdGVkLFxuICAgICAgICAnb25fcG93ZXInOiBwb3dlci5nZXQoJ2FjX2Nvbm5lY3RlZCcpLFxuICAgICAgICAnYmF0dGVyeV9wZXJjZW50JzogcG93ZXIuZ2V0KCdiYXR0ZXJ5X3BlcmNlbnQnKSxcbiAgICB9XG5cblxuZGVmIHByZXZpZXdfbGluZXMoc25hcHNob3QpOlxuICAgIHJldHVybiBbXG4gICAgICAgICdUaGlzIGxldHMgeW91ciBjb21wdXRlciBoZWxwIERvcmlhbiBHcmF5IHdpdGggYmFja2dyb3VuZCB0YXNrcyB3aGVuIHlvdSBhcmUgbm90IHVzaW5nIGl0LicsXG4gICAgICAgICdGaXJzdCB3ZSB3aWxsIHNlbmQgYmFzaWMgZGlhZ25vc3RpYyBkYXRhIHRvIERvcmlhbiBHcmF5IHNlcnZlcnMgd2l0aCB5b3VyIHJlcXVlc3QgJ1xuICAgICAgICAnc28gd2Uga25vdyB3aGF0IHlvdXIgbWFjaGluZSBjYW4gYW5kIGNhbm5vdCBoYW5kbGUuJyxcbiAgICAgICAgJ091ciB0ZWFtIHJldmlld3MgZWFjaCByZXF1ZXN0LiBJZiBhcHByb3ZlZCwgc2V0dXAgcnVucyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICAgICdEdXJpbmcgc2V0dXAsIGluc3RhbGxhdGlvbiBwcm9ncmVzcyBhbmQgZGlhZ25vc3RpYyBtZXNzYWdlcyBhcmUgc2VudCB0byBvdXIgdGVhbS4nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ1dlIG5ldmVyIGNvbGxlY3QgcGFzc3dvcmRzLCBmaWxlcywgcGhvdG9zLCBicm93c2luZyBoaXN0b3J5LCBzZXJpYWwgbnVtYmVycywgb3IgbmV0d29yayBhZGRyZXNzZXMuJyxcbiAgICBdXG5cblxuRU5ST0xMTUVOVF9TVEVQUyA9IFtcbiAgICAoXG4gICAgICAgICcxJyxcbiAgICAgICAgJ0FzayB0byBqb2luJyxcbiAgICAgICAgJ1RlbGwgdXMgd2hvIHlvdSBhcmUuIFdlIHdpbGwgc2VuZCBhIHJlcXVlc3QgZnJvbSB0aGlzIGNvbXB1dGVyLicsXG4gICAgKSxcbiAgICAoXG4gICAgICAgICcyJyxcbiAgICAgICAgJ1dlIGNoZWNrIHRoZSBiYXNpY3MnLFxuICAgICAgICAnRmlyc3Qgd2Ugc2VuZCBiYXNpYyBkaWFnbm9zdGljIGRhdGEgd2l0aCB5b3VyIHJlcXVlc3Qgc28gd2Uga25vdyB3aGF0IHRoaXMgbWFjaGluZSBjYW4gYW5kIGNhbm5vdCBoYW5kbGUuJyxcbiAgICApLFxuICAgIChcbiAgICAgICAgJzMnLFxuICAgICAgICAnV2Ugc2V0IGl0IHVwJyxcbiAgICAgICAgJ1NvbWVvbmUgb24gb3VyIHRlYW0gcmV2aWV3cyBpdC4gSWYgdGhleSBzYXkgeWVzLCBzZXR1cCBoYXBwZW5zIGhlcmUgYXV0b21hdGljYWxseS4nLFxuICAgICksXG5dXG5cblxuU0VUVVBfU1RFUFMgPSBbXG4gICAgKCdBcHByb3ZlZCcsICdEb3JpYW4gR3JheSBhY2NlcHRlZCB0aGlzIGNvbXB1dGVyLiBTZXR1cCBzdGFydHMgbm93LicpLFxuICAgICgnR2V0dGluZyB0aGlzIGNvbXB1dGVyIHJlYWR5JywgJ0NoZWNraW5nIG1lbW9yeSwgRG9ja2VyLCBhbmQgYSBmZXcgc3lzdGVtIHNldHRpbmdzLicpLFxuICAgICgnSW5zdGFsbGluZyB3aGF0IHdlIG5lZWQnLCAnVGhlIGZpcnN0IHRpbWUgdGhpcyBjYW4gdGFrZSBhIGZldyBtaW51dGVzLicpLFxuICAgICgnU3RhcnRpbmcgdGhlIGJhY2tncm91bmQgd29ya2VyJywgJ0l0IHdpbGwga2VlcCBydW5uaW5nIGFmdGVyIHlvdSBjbG9zZSB0aGlzIHdpbmRvdy4nKSxcbiAgICAoJ0Nvbm5lY3RpbmcnLCAnRG93bmxvYWRpbmcgdGhlIHdvcmtlciBzb2Z0d2FyZSBhbmQgY2hlY2tpbmcgaW4gd2l0aCBEb3JpYW4gR3JheS4nKSxcbiAgICAoJ0FsbCBzZXQnLCAnWW91IGNhbiBsZWF2ZSB0aGlzIHdpbmRvdyBvcGVuIG9yIHF1aXQuIFRoZSB3b3JrZXIgc3RheXMgb24uJyksXG5dXG5cblxuSU5TVEFMTF9MSU5FX0hJTlRTID0gKFxuICAgICgnQXBwcm92ZWQuIFN0YXJ0aW5nIHNldHVwJywgMCwgJ0FwcHJvdmVkJywgJ1NhdmluZyB0aGlzIGNvbXB1dGVyIG9uIHRoZSB3b3JrZXIgbGlzdC4nKSxcbiAgICAoJ0NoZWNraW5nIHRoaXMgY29tcHV0ZXInLCAxLCAnQ2hlY2tpbmcgdGhpcyBjb21wdXRlcicsICdNYWtpbmcgc3VyZSBpdCBoYXMgZW5vdWdoIG1lbW9yeSBhbmQgdGhlIHJpZ2h0IHRvb2xzLicpLFxuICAgICgnUHJlcGFyaW5nIHRoaXMgY29tcHV0ZXInLCAxLCAnUHJlcGFyaW5nIHRoaXMgY29tcHV0ZXInLCAnQWRqdXN0aW5nIGEgZmV3IHN5c3RlbSBzZXR0aW5ncyBzbyB3b3JrIHN0YXlzIGluIG1lbW9yeS4nKSxcbiAgICAoJ0luc3RhbGxpbmcgcmVxdWlyZWQgdG9vbHMnLCAyLCAnSW5zdGFsbGluZyB0b29scycsICdUaGlzIGNhbiB0YWtlIGEgZmV3IG1pbnV0ZXMgdGhlIGZpcnN0IHRpbWUuJyksXG4gICAgKCdJbnN0YWxsaW5nIEhvbWVicmV3JywgMiwgJ0luc3RhbGxpbmcgSG9tZWJyZXcnLCAnQXBwbGUgbWF5IGFsc28gaW5zdGFsbCBDb21tYW5kIExpbmUgVG9vbHMuIEZvbGxvdyB0aGUgc2V0dXAgbG9nIGZvciBwcm9ncmVzcy4nKSxcbiAgICAoJ0hvbWVicmV3IGlzIHN0aWxsIGluc3RhbGxpbmcnLCAyLCAnSW5zdGFsbGluZyBIb21lYnJldycsICdIb21lYnJldyBpcyBzdGlsbCBydW5uaW5nLiBBcHBsZSBDb21tYW5kIExpbmUgVG9vbHMgY2FuIHRha2Ugc2V2ZXJhbCBtaW51dGVzLicpLFxuICAgICgnSW5zdGFsbGluZyBMaW1hJywgMiwgJ0luc3RhbGxpbmcgYSBMaW51eCB2aXJ0dWFsIG1hY2hpbmUnLCAnVGhpcyBNYWMgcnVucyB0aGUgd29ya2VyIGluc2lkZSBMaW51eC4gRmlyc3QgZG93bmxvYWQgY2FuIHRha2UgYSB3aGlsZS4nKSxcbiAgICAoJ0NyZWF0aW5nIGEgTGludXggd29ya2VyIHZpcnR1YWwgbWFjaGluZScsIDIsICdDcmVhdGluZyBhIExpbnV4IHZpcnR1YWwgbWFjaGluZScsICdUaGUgZmlyc3QgZG93bmxvYWQgY2FuIHRha2Ugc2V2ZXJhbCBtaW51dGVzLicpLFxuICAgICgnU3RhcnRpbmcgdGhlIExpbnV4IHdvcmtlciB2aXJ0dWFsIG1hY2hpbmUnLCAyLCAnU3RhcnRpbmcgdGhlIExpbnV4IHZpcnR1YWwgbWFjaGluZScsICdUaGUgd29ya2VyIHJ1bnMgaW5zaWRlIHRoaXMgVk0gc28gaXQgbWF0Y2hlcyBhIExpbnV4IGhvc3QuJyksXG4gICAgKCdkaXNhYmxpbmcgZGlzayBzd2FwJywgMSwgJ0tlZXBpbmcgdGFzayBmaWxlcyBpbiBtZW1vcnknLCAnVGFzayBzY3JhdGNoIGlzIHRtcGZzOyB0aGUgd29ya2VyIGNncm91cCBkb2VzIG5vdCB1c2Ugc3dhcC4nKSxcbiAgICAoJ1NhdmluZyB0aGlzIGNvbXB1dGVyJywgMywgJ1NhdmluZyB0aGUgY29ubmVjdGlvbicsICdUaGlzIGNvbXB1dGVyIGNhbiBub3cgY2hlY2sgaW4gYXMgYSB3b3JrZXIuJyksXG4gICAgKCdJbnN0YWxsaW5nIHRoZSB3b3JrZXIgaW5zaWRlJywgMywgJ0luc3RhbGxpbmcgaW5zaWRlIHRoZSB2aXJ0dWFsIG1hY2hpbmUnLCAnVGhlIExpbnV4IGluc3RhbGxlciBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLicpLFxuICAgICgnSW5zdGFsbGluZyB0aGUgYmFja2dyb3VuZCB3b3JrZXInLCAzLCAnU3RhcnRpbmcgdGhlIGJhY2tncm91bmQgd29ya2VyJywgJ1R1cm5pbmcgb24gdGhlIHNlcnZpY2UgdGhhdCBydW5zIGFmdGVyIHRoaXMgd2luZG93IGlzIGNsb3NlZC4nKSxcbiAgICAoJ01hYyBuZXR3b3JrIGhlbHBlcicsIDMsICdTdGFydGluZyBhIE1hYyBuZXR3b3JrIGhlbHBlcicsICdQaG90byBzdG9yYWdlIHdpbGwgdXNlIHRoaXMgY29tcHV0ZXLigJlzIG5ldHdvcmsuJyksXG4gICAgKCdDb25uZWN0aW5nIGFuZCBkb3dubG9hZGluZycsIDQsICdEb3dubG9hZGluZyB0aGUgd29ya2VyIHNvZnR3YXJlJywgJ1RoaXMgY2FuIHRha2Ugc2V2ZXJhbCBtaW51dGVzLiBZb3UgY2FuIGtlZXAgdXNpbmcgdGhpcyBjb21wdXRlci4nKSxcbiAgICAoJ1dvcmtlciBlbnJvbGxlZCcsIDMsICdXb3JrZXIgZW5yb2xsZWQnLCAnQ29uZmlndXJhdGlvbiBhbmQgdGFzayBpbWFnZXMgYXJlIG9idGFpbmVkIGF0IGNoZWNrLWluLicpLFxuICAgICgnQ29ubmVjdGVkIScsIDUsICdDb25uZWN0ZWQnLCAnVGhpcyBjb21wdXRlciBpcyBub3cgYW4gb2ZmaWNpYWwgd29ya2VyLicpLFxuICAgICgnU2V0dXAgbmVlZHMgYXR0ZW50aW9uJywgTm9uZSwgTm9uZSwgTm9uZSksXG4pXG5cblxuZGVmIGZyaWVuZGx5X2luc3RhbGxfbGluZShsaW5lKTpcbiAgICB0ZXh0ID0gJyAnLmpvaW4obGluZS5zdHJpcCgpLnNwbGl0KCkpXG4gICAgaWYgbm90IHRleHQ6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgZm9yIG5lZWRsZSwgc3RlcCwgdGl0bGUsIGRldGFpbCBpbiBJTlNUQUxMX0xJTkVfSElOVFM6XG4gICAgICAgIGlmIG5lZWRsZS5sb3dlcigpIGluIHRleHQubG93ZXIoKTpcbiAgICAgICAgICAgIHJldHVybiB7J3N0ZXAnOiBzdGVwLCAndGl0bGUnOiB0aXRsZSwgJ2RldGFpbCc6IGRldGFpbCBvciB0ZXh0LCAncmF3JzogdGV4dH1cbiAgICBpZiB0ZXh0LnN0YXJ0c3dpdGgoJ1NldHVwIG5lZWRzIGF0dGVudGlvbjonKTpcbiAgICAgICAgcmV0dXJuIHsnc3RlcCc6IE5vbmUsICd0aXRsZSc6IE5vbmUsICdkZXRhaWwnOiB0ZXh0LnNwbGl0KCc6JywgMSlbLTFdLnN0cmlwKCksICdyYXcnOiB0ZXh0LCAnZXJyb3InOiBUcnVlfVxuICAgIHJldHVybiB7J3N0ZXAnOiBOb25lLCAndGl0bGUnOiBOb25lLCAnZGV0YWlsJzogdGV4dCwgJ3Jhdyc6IHRleHR9XG5cblxuZGVmIGZyaWVuZGx5X2Jvb2wodmFsdWUpOlxuICAgIGlmIHZhbHVlIGlzIE5vbmU6XG4gICAgICAgIHJldHVybiAndW5rbm93bidcbiAgICByZXR1cm4gJ1llcycgaWYgdmFsdWUgZWxzZSAnTm8nXG5cblxuZGVmIGZvcm1hdF9ieXRlcyh2YWx1ZSk6XG4gICAgaWYgbm90IHZhbHVlOlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nXG4gICAgdW5pdHMgPSBbJ0InLCAnS2lCJywgJ01pQicsICdHaUInLCAnVGlCJ11cbiAgICBzaXplID0gZmxvYXQodmFsdWUpXG4gICAgZm9yIHVuaXQgaW4gdW5pdHM6XG4gICAgICAgIGlmIHNpemUgPCAxMDI0IG9yIHVuaXQgPT0gdW5pdHNbLTFdOlxuICAgICAgICAgICAgcmV0dXJuIGYne3NpemU6LjBmfSB7dW5pdH0nIGlmIHVuaXQgPT0gJ0InIGVsc2UgZid7c2l6ZTouMWZ9IHt1bml0fSdcbiAgICAgICAgc2l6ZSAvPSAxMDI0XG5cblxuZGVmIGRyYXdfc2VyaWVzKGNhbnZhcywgdmFsdWVzLCBsaW5lLCBmaWxsLCBmbG9vcj1Ob25lLCBjZWlsaW5nPU5vbmUpOlxuICAgIGNhbnZhcy5kZWxldGUoJ2FsbCcpXG4gICAgd2lkdGggPSBtYXgoaW50KGNhbnZhcy53aW5mb193aWR0aCgpIG9yIGNhbnZhcy5jZ2V0KCd3aWR0aCcpIG9yIDApLCAyKVxuICAgIGhlaWdodCA9IG1heChpbnQoY2FudmFzLndpbmZvX2hlaWdodCgpIG9yIGNhbnZhcy5jZ2V0KCdoZWlnaHQnKSBvciAwKSwgMilcbiAgICBjYW52YXMuY3JlYXRlX3JlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0LCBmaWxsPScjZmZmY2Y4Jywgb3V0bGluZT0nJylcbiAgICBpZiBsZW4odmFsdWVzKSA8IDI6XG4gICAgICAgIHJldHVyblxuICAgIGxvID0gZmxvb3IgaWYgZmxvb3IgaXMgbm90IE5vbmUgZWxzZSBtaW4odmFsdWVzKVxuICAgIGhpID0gY2VpbGluZyBpZiBjZWlsaW5nIGlzIG5vdCBOb25lIGVsc2UgbWF4KHZhbHVlcylcbiAgICBpZiBoaSA8PSBsbzpcbiAgICAgICAgaGkgPSBsbyArIDFcbiAgICBwYWQgPSA2XG4gICAgaW5uZXJfdyA9IG1heCh3aWR0aCAtIHBhZCAqIDIsIDEpXG4gICAgaW5uZXJfaCA9IG1heChoZWlnaHQgLSBwYWQgKiAyLCAxKVxuICAgIHBvaW50cyA9IFtdXG4gICAgbGFzdCA9IG1heChsZW4odmFsdWVzKSAtIDEsIDEpXG4gICAgZm9yIGluZGV4LCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKTpcbiAgICAgICAgeCA9IHBhZCArIGlubmVyX3cgKiBpbmRleCAvIGxhc3RcbiAgICAgICAgeSA9IHBhZCArIGlubmVyX2ggKiAoMSAtICh2YWx1ZSAtIGxvKSAvIChoaSAtIGxvKSlcbiAgICAgICAgcG9pbnRzLmV4dGVuZCgoeCwgeSkpXG4gICAgY2FudmFzLmNyZWF0ZV9wb2x5Z29uKHBhZCwgaGVpZ2h0IC0gcGFkLCAqcG9pbnRzLCBwYWQgKyBpbm5lcl93LCBoZWlnaHQgLSBwYWQsIGZpbGw9ZmlsbCwgb3V0bGluZT0nJylcbiAgICBjYW52YXMuY3JlYXRlX2xpbmUoKnBvaW50cywgZmlsbD1saW5lLCB3aWR0aD0yKVxuXG5cbmRlZiBzZXR1cF9wbGFuKG9yaWdpbik6XG4gICAgaW1hZ2UgPSAncmVnaXN0cnkuZ2l0bGFiLmNvbS9kb3JpYW4tZ3JheS1lbnRlcnByaXNlcy9hdXRvbWF0aW9uL2NvbXB1dGUtd29ya2VyJ1xuICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICdUaGlzIE1hYyB3aWxsIHJ1biB0aGUgd29ya2VyIGluc2lkZSBhIExpbnV4IHZpcnR1YWwgbWFjaGluZSAoTGltYSArIFVidW50dSAyNC4wNCkuICdcbiAgICAgICAgICAgICdIb21lYnJldyBtYXkgaW5zdGFsbCBMaW1hLiBTZXR1cCBuZWVkcyB5b3VyIE1hYyBwYXNzd29yZCBmb3IgdGhlIExpbnV4IGluc3RhbGxlciBpbnNpZGUgdGhlIFZNLicsXG4gICAgICAgICAgICAnXFxuJy5qb2luKFtcbiAgICAgICAgICAgICAgICAnSG9zdDogbWFjT1MuIEd1ZXN0OiBMaW1hIGluc3RhbmNlIGBkZ2Utd29ya2VyYCBmcm9tIHRlbXBsYXRlOi8vdWJ1bnR1LTI0LjA0LicsXG4gICAgICAgICAgICAgICAgJ0hvc3QgaGVscGVyOiBtYWNvc19yMl9wcm94eS5weSBvbiAxMjcuMC4wLjE6MTg3ODkgc28gUjIgVExTIHN0YXlzIG9uIHRoZSBNYWMuJyxcbiAgICAgICAgICAgICAgICAnTGF1bmNoQWdlbnQ6IH4vTGlicmFyeS9MYXVuY2hBZ2VudHMvY29tLmRnZS5jb21wdXRlLWhvc3QtZ3VpLnBsaXN0JyxcbiAgICAgICAgICAgICAgICBmJ0d1ZXN0IGltYWdlOiB7aW1hZ2V9OnN0YWJsZSwgcmVzb2x2ZWQgdG8gYW4gaW1tdXRhYmxlIHNoYTI1NiBkaWdlc3QgYXQgYXBwcm92YWwuJyxcbiAgICAgICAgICAgICAgICAnR3Vlc3QgbGF5b3V0OiAvb3B0L2RnZS13b3JrZXIve2xhdW5jaGVyLnB5LGJvb3RzdHJhcC9hZ2VudC5weSxpZGVudGl0eS5qc29ufScsXG4gICAgICAgICAgICAgICAgJ0d1ZXN0IHNlcnZpY2U6IHN5c3RlbWQgZGdlLXdvcmtlci5zZXJ2aWNlIGluIGNvbXB1dGUuc2xpY2U7IHRtcGZzIC9ydW4vZGdlLXdvcmtlci90YXNrcy4nLFxuICAgICAgICAgICAgICAgICdHdWVzdCBEb2NrZXI6IGRvY2tlci5pbywgY2dyb3VwIHYyLCBNZW1vcnlTd2FwTWF4PTAgZm9yIHRoZSB3b3JrZXIsIGRvY2tlciBwdWxsIG9mIHRoZSBkaWdlc3QgYXQgY2hlY2staW4uJyxcbiAgICAgICAgICAgICAgICBmJ0NoZWNrLWluOiB7b3JpZ2lufS9jb21wdXRlX2ZsZWV0L3N0YXR1cyB3aXRoIGEgd29ya2VyIGJlYXJlciB0b2tlbi4nLFxuICAgICAgICAgICAgICAgICdDb21tYW5kcyBpbmNsdWRlOiBicmV3IGluc3RhbGwgbGltYTsgbGltYWN0bCBzdGFydDsgbGltYWN0bCBzaGVsbCBzdWRvIGJhc2ggL3RtcC9zZXR1cC13b3JrZXIuc2gnLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIClcbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICdXaW5kb3dzIHdpbGwgcnVuIHRoZSB3b3JrZXIgaW5zaWRlIFVidW50dSAoV1NMKSB3aXRoIHN5c3RlbWQuICdcbiAgICAgICAgICAgICdJZiBVYnVudHUgaXMgbWlzc2luZywgV2luZG93cyB3aWxsIGFzayBmb3IgcGVybWlzc2lvbiBhbmQgbWF5IG5lZWQgb25lIHJlc3RhcnQuJyxcbiAgICAgICAgICAgICdcXG4nLmpvaW4oW1xuICAgICAgICAgICAgICAgICdIb3N0OiBXaW5kb3dzLiBHdWVzdDogV1NMIFVidW50dSB3aXRoIHN5c3RlbWQ9dHJ1ZS4nLFxuICAgICAgICAgICAgICAgIGYnR3Vlc3QgaW1hZ2U6IHtpbWFnZX06c3RhYmxlLCByZXNvbHZlZCB0byBhbiBpbW11dGFibGUgc2hhMjU2IGRpZ2VzdCBhdCBhcHByb3ZhbC4nLFxuICAgICAgICAgICAgICAgICdHdWVzdCBsYXlvdXQ6IC9vcHQvZGdlLXdvcmtlci97bGF1bmNoZXIucHksYm9vdHN0cmFwL2FnZW50LnB5LGlkZW50aXR5Lmpzb259JyxcbiAgICAgICAgICAgICAgICAnR3Vlc3Qgc2VydmljZTogc3lzdGVtZCBkZ2Utd29ya2VyLnNlcnZpY2UgaW4gY29tcHV0ZS5zbGljZTsgdG1wZnMgL3J1bi9kZ2Utd29ya2VyL3Rhc2tzLicsXG4gICAgICAgICAgICAgICAgJ0d1ZXN0IERvY2tlcjogZG9ja2VyLmlvLCBjZ3JvdXAgdjIsIE1lbW9yeVN3YXBNYXg9MCBmb3IgdGhlIHdvcmtlciwgZG9ja2VyIHB1bGwgb2YgdGhlIGRpZ2VzdCBhdCBjaGVjay1pbi4nLFxuICAgICAgICAgICAgICAgIGYnQ2hlY2staW46IHtvcmlnaW59L2NvbXB1dGVfZmxlZXQvc3RhdHVzIHdpdGggYSB3b3JrZXIgYmVhcmVyIHRva2VuLicsXG4gICAgICAgICAgICAgICAgJ0NvbW1hbmRzIGluY2x1ZGU6IHdzbCAtLWluc3RhbGwgLWQgVWJ1bnR1OyB3c2wgLWQgVWJ1bnR1IC0tIHN1ZG8gcHl0aG9uMyBpbnN0YWxsLnB5JyxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApXG4gICAgcmV0dXJuIChcbiAgICAgICAgJ1RoaXMgTGludXggY29tcHV0ZXIgd2lsbCBpbnN0YWxsIERvY2tlciBpZiBuZWVkZWQgJ1xuICAgICAgICAnYW5kIHJ1biBhIHN5c3RlbWQgd29ya2VyIHRoYXQgcHVsbHMgdGhlIHB1Ymxpc2hlZCBjb250YWluZXIgaW1hZ2UuIFNldHVwIG5lZWRzIHlvdXIgYWRtaW5pc3RyYXRvciBwYXNzd29yZC4nLFxuICAgICAgICAnXFxuJy5qb2luKFtcbiAgICAgICAgICAgICdIb3N0OiBMaW51eCAoVWJ1bnR1IDI04oCTMjYgb3IgRGViaWFuIDEy4oCTMTMpLiBQcml2aWxlZ2VkIHN0ZXBzIHVzZSBwa2V4ZWMvc3Vkby4nLFxuICAgICAgICAgICAgJ1BhY2thZ2VzIGlmIG1pc3Npbmc6IGRvY2tlci5pbyBpcHJvdXRlMiBwY2l1dGlscyB1dGlsLWxpbnV4IHZpYSBhcHQtZ2V0LicsXG4gICAgICAgICAgICAnSG9zdCBwcmVwOiBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IGRvY2tlci5zZXJ2aWNlLiBIb3N0IHN3YXAgaXMgbGVmdCBlbmFibGVkLicsXG4gICAgICAgICAgICBmJ0ltYWdlOiB7aW1hZ2V9OnN0YWJsZSwgcmVzb2x2ZWQgdG8gYW4gaW1tdXRhYmxlIHNoYTI1NiBkaWdlc3QgYXQgYXBwcm92YWwuJyxcbiAgICAgICAgICAgICdMYXlvdXQ6IC9vcHQvZGdlLXdvcmtlci97bGF1bmNoZXIucHksYm9vdHN0cmFwL2FnZW50LnB5LGlkZW50aXR5Lmpzb24sY3VycmVudC5qc29ufScsXG4gICAgICAgICAgICAnU2VydmljZTogL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kZ2Utd29ya2VyLnNlcnZpY2UgaW4gY29tcHV0ZS5zbGljZSwgTWVtb3J5U3dhcE1heD0wLicsXG4gICAgICAgICAgICAnU2NyYXRjaDogdG1wZnMgL3J1bi9kZ2Utd29ya2VyL3Rhc2tzICgyNTZtLCBub3N1aWQsbm9kZXYsbm9leGVjKS4nLFxuICAgICAgICAgICAgJ0lmIEdpdExhYiBSdW5uZXIgaXMgcHJlc2VudDogL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZy50b21sIGNncm91cF9wYXJlbnQ9Y2kuc2xpY2UuJyxcbiAgICAgICAgICAgICdBdCBjaGVjay1pbiB0aGUgYWdlbnQgZG9ja2VyLXB1bGxzIHRoZSBkaWdlc3QgYW5kIHJ1bnMgdGhlIHdvcmtlciBjb250YWluZXIgd2l0aCAtLW1lbW9yeS1zd2FwIGVxdWFsIHRvIC0tbWVtb3J5LicsXG4gICAgICAgICAgICBmJ0FQSTogUE9TVCB7b3JpZ2lufS9jb21wdXRlX2ZsZWV0L3N0YXR1cyB3aXRoIEF1dGhvcml6YXRpb246IEJlYXJlciA8d29ya2VyIHRva2VuPi4nLFxuICAgICAgICAgICAgJ1R5cGljYWwgY29tbWFuZHM6IGFwdC1nZXQgdXBkYXRlOyBhcHQtZ2V0IGluc3RhbGwgLXkgZG9ja2VyLmlvOyBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IGRvY2tlcjsnLFxuICAgICAgICAgICAgJ3N5c3RlbWN0bCBkYWVtb24tcmVsb2FkOyBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IGRnZS13b3JrZXIuc2VydmljZS4nLFxuICAgICAgICBdKSxcbiAgICApXG5cblxuZGVmIGluc3RhbGxfbGludXhfZGVza3RvcF9lbnRyeShndWlfc2NyaXB0LCBzY3JpcHRfcGF0aCk6XG4gICAgaWNvbl9zcmMgPSBST09UIC8gJ2RnZS1pY29uLnBuZydcbiAgICBpZiBub3QgaWNvbl9zcmMuZXhpc3RzKCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuXG4gICAgYXBwc19kaXIgPSBQYXRoLmhvbWUoKSAvICcubG9jYWwnIC8gJ3NoYXJlJyAvICdhcHBsaWNhdGlvbnMnXG4gICAgYXBwc19kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGZvciBzaXplIGluICg0OCwgMTI4LCAyNTYpOlxuICAgICAgICBpY29uX2RpciA9IFBhdGguaG9tZSgpIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2ljb25zJyAvICdoaWNvbG9yJyAvIGYne3NpemV9eHtzaXplfScgLyAnYXBwcydcbiAgICAgICAgaWNvbl9kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgICAgICBkZXN0ID0gaWNvbl9kaXIgLyBmJ3tMSU5VWF9JQ09OX05BTUV9LnBuZydcbiAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdjb252ZXJ0Jyk6XG4gICAgICAgICAgICBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgICAgICAgICBbJ2NvbnZlcnQnLCBzdHIoaWNvbl9zcmMpLCAnLXJlc2l6ZScsIGYne3NpemV9eHtzaXplfScsIHN0cihkZXN0KV0sXG4gICAgICAgICAgICAgICAgY2hlY2s9RmFsc2UsXG4gICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICAgICAgKVxuICAgICAgICBlbGlmIG5vdCBkZXN0LmV4aXN0cygpOlxuICAgICAgICAgICAgc2h1dGlsLmNvcHkoaWNvbl9zcmMsIGRlc3QpXG5cbiAgICBwaXhtYXBzID0gUGF0aC5ob21lKCkgLyAnLmxvY2FsJyAvICdzaGFyZScgLyAncGl4bWFwcydcbiAgICBwaXhtYXBzLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBwaXhtYXBfaWNvbiA9IHBpeG1hcHMgLyBmJ3tMSU5VWF9JQ09OX05BTUV9LnBuZydcbiAgICBzaHV0aWwuY29weShpY29uX3NyYywgcGl4bWFwX2ljb24pXG4gICAgaWNvbl8xMjggPSBQYXRoLmhvbWUoKSAvICcubG9jYWwnIC8gJ3NoYXJlJyAvICdpY29ucycgLyAnaGljb2xvcicgLyAnMTI4eDEyOCcgLyAnYXBwcycgLyBmJ3tMSU5VWF9JQ09OX05BTUV9LnBuZydcbiAgICBpY29uX3BhdGggPSBzdHIoaWNvbl8xMjggaWYgaWNvbl8xMjguZXhpc3RzKCkgZWxzZSBwaXhtYXBfaWNvbilcbiAgICBleGVjX3BhcnRzID0gW1xuICAgICAgICAnZW52JyxcbiAgICAgICAgJ0RHRV9MSU5VWF9ERVNLVE9QX0xBVU5DSEVEPTEnLFxuICAgICAgICAnR0RLX0JBQ0tFTkQ9eDExJyxcbiAgICAgICAgc3lzLmV4ZWN1dGFibGUsXG4gICAgICAgIHN0cihndWlfc2NyaXB0KSxcbiAgICAgICAgc3RyKHNjcmlwdF9wYXRoKSxcbiAgICBdXG4gICAgZGVza3RvcCA9IGZcIlwiXCJbRGVza3RvcCBFbnRyeV1cblZlcnNpb249MS4wXG5UeXBlPUFwcGxpY2F0aW9uXG5OYW1lPURvcmlhbiBHcmF5IFdvcmtlclxuQ29tbWVudD1SdW4gRG9yaWFuIEdyYXkgYmFja2dyb3VuZCB3b3JrIHdoZW4gdGhpcyBjb21wdXRlciBpcyBpZGxlXG5FeGVjPXsnICcuam9pbihzaGxleC5xdW90ZShwYXJ0KSBmb3IgcGFydCBpbiBleGVjX3BhcnRzKX1cbkljb249e2ljb25fcGF0aH1cblRlcm1pbmFsPWZhbHNlXG5TdGFydHVwV01DbGFzcz17TElOVVhfV01fQ0xBU1N9XG5DYXRlZ29yaWVzPVV0aWxpdHk7XG5cIlwiXCJcbiAgICAoYXBwc19kaXIgLyBmJ3tERVNLVE9QX0FQUF9JRH0uZGVza3RvcCcpLndyaXRlX3RleHQoZGVza3RvcClcbiAgICBzdWJwcm9jZXNzLnJ1bihcbiAgICAgICAgWyd1cGRhdGUtZGVza3RvcC1kYXRhYmFzZScsIHN0cihhcHBzX2RpcildLFxuICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICApXG4gICAgaWNvbl90aGVtZSA9IFBhdGguaG9tZSgpIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2ljb25zJyAvICdoaWNvbG9yJ1xuICAgIGlmIGljb25fdGhlbWUuZXhpc3RzKCk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFxuICAgICAgICAgICAgWydndGstdXBkYXRlLWljb24tY2FjaGUnLCAnLWYnLCAnLXQnLCBzdHIoaWNvbl90aGVtZSldLFxuICAgICAgICAgICAgY2hlY2s9RmFsc2UsXG4gICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgKVxuICAgIHJldHVybiBUcnVlXG5cblxuZGVmIHdhbnRfaGVhZGxlc3MoKTpcbiAgICBmbGFnID0gb3MuZW52aXJvbi5nZXQoJ0RHRV9FTlJPTExfSEVBRExFU1MnLCAnJykuc3RyaXAoKS5sb3dlcigpXG4gICAgaWYgZmxhZyBpbiAoJzEnLCAndHJ1ZScsICd5ZXMnKTpcbiAgICAgICAgcmV0dXJuIFRydWVcbiAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHJldHVybiBub3QgKG9zLmVudmlyb24uZ2V0KCdESVNQTEFZJykgb3Igb3MuZW52aXJvbi5nZXQoJ1dBWUxBTkRfRElTUExBWScpKVxuXG5cbmRlZiBjbGlfY29udGFjdCgpOlxuICAgIG5hbWUgPSBvcy5lbnZpcm9uLmdldCgnREdFX0VOUk9MTF9OQU1FJywgJycpLnN0cmlwKClcbiAgICBlbWFpbCA9IG9zLmVudmlyb24uZ2V0KCdER0VfRU5ST0xMX0VNQUlMJywgJycpLnN0cmlwKClcbiAgICBwaG9uZSA9IG9zLmVudmlyb24uZ2V0KCdER0VfRU5ST0xMX1BIT05FJywgJycpLnN0cmlwKClcbiAgICBub3RlID0gb3MuZW52aXJvbi5nZXQoJ0RHRV9FTlJPTExfTk9URScsICcnKS5zdHJpcCgpXG4gICAgaWYgbmFtZSBhbmQgZW1haWwgYW5kIHBob25lOlxuICAgICAgICByZXR1cm4geydkaXNwbGF5X25hbWUnOiBuYW1lLCAnZW1haWwnOiBlbWFpbCwgJ3Bob25lJzogcGhvbmUsICdub3RlJzogbm90ZX1cbiAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBsaW51eF9yZWxhdW5jaF92aWFfZGVza3RvcChzY3JpcHRfcGF0aCk6XG4gICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICBpZiB3YW50X2hlYWRsZXNzKCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGlmIG9zLmVudmlyb24uZ2V0KCdER0VfTElOVVhfREVTS1RPUF9MQVVOQ0hFRCcpID09ICcxJzpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgZ3VpX3NjcmlwdCA9IFJPT1QgLyAnaG9zdF9ndWkucHknXG4gICAgaWYgbm90IGluc3RhbGxfbGludXhfZGVza3RvcF9lbnRyeShndWlfc2NyaXB0LCBzY3JpcHRfcGF0aCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGRlc2t0b3BfZmlsZSA9IFBhdGguaG9tZSgpIC8gJy5sb2NhbCcgLyAnc2hhcmUnIC8gJ2FwcGxpY2F0aW9ucycgLyBmJ3tERVNLVE9QX0FQUF9JRH0uZGVza3RvcCdcbiAgICBmb3IgY29tbWFuZCBpbiAoXG4gICAgICAgIChbJ2dpbycsICdsYXVuY2gnLCBzdHIoZGVza3RvcF9maWxlKV0gaWYgc2h1dGlsLndoaWNoKCdnaW8nKSBlbHNlIE5vbmUpLFxuICAgICAgICAoWydndGstbGF1bmNoJywgREVTS1RPUF9BUFBfSURdIGlmIHNodXRpbC53aGljaCgnZ3RrLWxhdW5jaCcpIGVsc2UgTm9uZSksXG4gICAgKTpcbiAgICAgICAgaWYgbm90IGNvbW1hbmQ6XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihjb21tYW5kLCBjaGVjaz1GYWxzZSlcbiAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGUgPT0gMDpcbiAgICAgICAgICAgIHN5cy5leGl0KDApXG4gICAgcmV0dXJuIEZhbHNlXG5cblxuZGVmIG1hY29zX3JlbGF1bmNoX3ZpYV9hcXVhKHNjcmlwdF9wYXRoKTpcbiAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGlmIHdhbnRfaGVhZGxlc3MoKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaWYgb3MuZW52aXJvbi5nZXQoJ0RHRV9NQUNfQVFVQV9MQVVOQ0hFRCcpID09ICcxJzpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCdTU0hfQ09OTkVDVElPTicpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICByb290ID0gc3RyKFJPT1QpXG4gICAgaWYgcm9vdC5zdGFydHN3aXRoKCgnL3RtcC8nLCAnL3Zhci9mb2xkZXJzLycpKSBvciAnZGdlLXdvcmtlci1pbnN0YWxsLicgaW4gcm9vdDpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgcHl0aG9uID0gc2hsZXgucXVvdGUoc3lzLmV4ZWN1dGFibGUpXG4gICAgZ3VpID0gc2hsZXgucXVvdGUoc3RyKFJPT1QgLyAnaG9zdF9ndWkucHknKSlcbiAgICBzY3JpcHQgPSBzaGxleC5xdW90ZShzY3JpcHRfcGF0aClcbiAgICBjb21tYW5kID0gZidleHBvcnQgREdFX01BQ19BUVVBX0xBVU5DSEVEPTE7IGV4ZWMge3B5dGhvbn0ge2d1aX0ge3NjcmlwdH0nXG4gICAgZXNjYXBlZCA9IGNvbW1hbmQucmVwbGFjZSgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2UoJ1wiJywgJ1xcXFxcIicpXG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oXG4gICAgICAgIFtcbiAgICAgICAgICAgICdvc2FzY3JpcHQnLFxuICAgICAgICAgICAgJy1lJywgJ3RlbGwgYXBwbGljYXRpb24gXCJUZXJtaW5hbFwiIHRvIGFjdGl2YXRlJyxcbiAgICAgICAgICAgICctZScsIGYndGVsbCBhcHBsaWNhdGlvbiBcIlRlcm1pbmFsXCIgdG8gZG8gc2NyaXB0IFwie2VzY2FwZWR9XCInLFxuICAgICAgICBdLFxuICAgICAgICBjaGVjaz1GYWxzZSxcbiAgICApXG4gICAgaWYgcmVzdWx0LnJldHVybmNvZGUgPT0gMDpcbiAgICAgICAgc3lzLmV4aXQoMClcbiAgICByZXR1cm4gRmFsc2VcblxuXG5kZWYgbG9hZF9icmFuZF9pY29uKHRrLCBzaXplPTQ4KTpcbiAgICBpY29uX3BhdGggPSBST09UIC8gJ2RnZS1pY29uLnBuZydcbiAgICBpZiBub3QgaWNvbl9wYXRoLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHRyeTpcbiAgICAgICAgaW1hZ2UgPSB0ay5QaG90b0ltYWdlKGZpbGU9c3RyKGljb25fcGF0aCkpXG4gICAgICAgIGlmIGltYWdlLndpZHRoKCkgPiBzaXplOlxuICAgICAgICAgICAgZmFjdG9yID0gbWF4KDEsIHJvdW5kKGltYWdlLndpZHRoKCkgLyBzaXplKSlcbiAgICAgICAgICAgIGltYWdlID0gaW1hZ2Uuc3Vic2FtcGxlKGZhY3RvciwgZmFjdG9yKVxuICAgICAgICByZXR1cm4gaW1hZ2VcbiAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgIHJldHVybiBOb25lXG5cblxuZGVmIHdpbmRvd19pY29uX2ltYWdlcyh0ayk6XG4gICAgaWNvbl9wYXRoID0gUk9PVCAvICdkZ2UtaWNvbi5wbmcnXG4gICAgaWYgbm90IGljb25fcGF0aC5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuIFtdXG4gICAgdHJ5OlxuICAgICAgICBtYXN0ZXIgPSB0ay5QaG90b0ltYWdlKGZpbGU9c3RyKGljb25fcGF0aCkpXG4gICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICByZXR1cm4gW11cbiAgICBpY29ucyA9IFtdXG4gICAgc2VlbiA9IHNldCgpXG4gICAgZm9yIHRhcmdldCBpbiAoMTYsIDI0LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAxOTIsIDI1Nik6XG4gICAgICAgIGlmIG1hc3Rlci53aWR0aCgpIDwgdGFyZ2V0OlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgZmFjdG9yID0gbWF4KDEsIG1hc3Rlci53aWR0aCgpIC8vIHRhcmdldClcbiAgICAgICAgc2l6ZSA9IG1hc3Rlci53aWR0aCgpIC8vIGZhY3RvclxuICAgICAgICBpZiBzaXplIGluIHNlZW46XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBzZWVuLmFkZChzaXplKVxuICAgICAgICBpY29ucy5hcHBlbmQobWFzdGVyLnN1YnNhbXBsZShmYWN0b3IsIGZhY3RvcikpXG4gICAgcmV0dXJuIGljb25zIG9yIFttYXN0ZXJdXG5cblxuZGVmIGFwcGx5X3dpbmRvd19pY29uKHJvb3QpOlxuICAgIGltcG9ydCB0a2ludGVyIGFzIHRrXG5cbiAgICBpY29ucyA9IHdpbmRvd19pY29uX2ltYWdlcyh0aylcbiAgICBpZiBpY29uczpcbiAgICAgICAgcm9vdC5fd2luZG93X2ljb25zID0gaWNvbnNcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcm9vdC5pY29ucGhvdG8oVHJ1ZSwgKmljb25zKVxuICAgICAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgcm9vdC5pY29ucGhvdG8oVHJ1ZSwgaWNvbnNbLTFdKVxuICAgICAgICAgICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICAgICAgICAgIGljb25zID0gW11cbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzpcbiAgICAgICAgaWNvbl9wYXRoID0gUk9PVCAvICdkZ2UtaWNvbi5pY28nXG4gICAgICAgIGlmIGljb25fcGF0aC5leGlzdHMoKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICByb290Lmljb25iaXRtYXAoc3RyKGljb25fcGF0aCkpXG4gICAgICAgICAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgICAgICAgICAgcGFzc1xuICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBpY29uX3BhdGggPSBST09UIC8gJ2RnZS1pY29uLnBuZydcbiAgICAgICAgaWYgaWNvbl9wYXRoLmV4aXN0cygpOlxuICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgIHJvb3QuaWNvbnBob3RvKFRydWUsIHRrLlBob3RvSW1hZ2UoZmlsZT1zdHIoaWNvbl9wYXRoKSkpXG4gICAgICAgICAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgICAgICAgICAgcGFzc1xuICAgIHJldHVybiBpY29uc1xuXG5cbmRlZiBwcmVzZW50X3dpbmRvdyhyb290KTpcbiAgICBpbXBvcnQgdGtpbnRlciBhcyB0a1xuXG4gICAgYXBwbHlfd2luZG93X2ljb24ocm9vdClcbiAgICByb290LmRlaWNvbmlmeSgpXG4gICAgcm9vdC51cGRhdGVfaWRsZXRhc2tzKClcbiAgICB0cnk6XG4gICAgICAgIGlmIHJvb3Quc3RhdGUoKSA9PSAnem9vbWVkJzpcbiAgICAgICAgICAgIHJvb3Quc3RhdGUoJ25vcm1hbCcpXG4gICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICBwYXNzXG4gICAgZm9yIGZsYWcgaW4gKCctem9vbWVkJywgJy1mdWxsc2NyZWVuJyk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHJvb3QuYXR0cmlidXRlcyhmbGFnLCBGYWxzZSlcbiAgICAgICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICAgICAgcGFzc1xuICAgIHNjcmVlbl93ID0gcm9vdC53aW5mb19zY3JlZW53aWR0aCgpXG4gICAgc2NyZWVuX2ggPSByb290LndpbmZvX3NjcmVlbmhlaWdodCgpXG4gICAgd2lkdGggPSBtaW4oMTEwMCwgbWF4KDgyMCwgc2NyZWVuX3cgLSAyNDApKVxuICAgIGhlaWdodCA9IG1pbig3NjAsIG1heCg2MDAsIHNjcmVlbl9oIC0gMjAwKSlcbiAgICB4ID0gbWF4KDQwLCAoc2NyZWVuX3cgLSB3aWR0aCkgLy8gMilcbiAgICB5ID0gbWF4KDQwLCAoc2NyZWVuX2ggLSBoZWlnaHQpIC8vIDIpXG4gICAgcm9vdC5nZW9tZXRyeShmJ3t3aWR0aH14e2hlaWdodH0re3h9K3t5fScpXG4gICAgdHJ5OlxuICAgICAgICByb290LmF0dHJpYnV0ZXMoJy10b3Btb3N0JywgVHJ1ZSlcbiAgICAgICAgcm9vdC5saWZ0KClcbiAgICAgICAgcm9vdC5mb2N1c19mb3JjZSgpXG4gICAgICAgIHJvb3QuYWZ0ZXIoNDAwLCBsYW1iZGE6IHJvb3QuYXR0cmlidXRlcygnLXRvcG1vc3QnLCBGYWxzZSkpXG4gICAgZXhjZXB0IHRrLlRjbEVycm9yOlxuICAgICAgICBwYXNzXG5cblxuZGVmIGhvc3Rfd29ya2VyX3J1bm5pbmcoKTpcbiAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKTpcbiAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydzeXN0ZW1jdGwnLCAnaXMtYWN0aXZlJywgJy0tcXVpZXQnLCAnZGdlLXdvcmtlci5zZXJ2aWNlJ10sIGNoZWNrPUZhbHNlKVxuICAgICAgICByZXR1cm4gcmVzdWx0LnJldHVybmNvZGUgPT0gMFxuICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIG1hY19saW1hX3dvcmtlcl9ydW5uaW5nKClcbiAgICByZXR1cm4gRmFsc2VcblxuXG5kZWYgbWFjX2xpbWFfd29ya2VyX3J1bm5pbmcoKTpcbiAgICBpbXBvcnQgaW5zdGFsbF9tYWNvc1xuICAgIGluc3RhbGxfbWFjb3MuYWRkX21hY19wcmVmaXhlcygpXG4gICAgbGltYWN0bCA9IHNodXRpbC53aGljaCgnbGltYWN0bCcpXG4gICAgaWYgbm90IGxpbWFjdGw6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFtsaW1hY3RsLCAnbGlzdCddLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUsIGNoZWNrPUZhbHNlKVxuICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlICE9IDA6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGZvciBsaW5lIGluIHJlc3VsdC5zdGRvdXQuc3BsaXRsaW5lcygpWzE6XTpcbiAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KClcbiAgICAgICAgaWYgbGVuKHBhcnRzKSA+PSAyIGFuZCBwYXJ0c1swXSA9PSBpbnN0YWxsX21hY29zLklOU1RBTkNFOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzFdID09ICdSdW5uaW5nJ1xuICAgIHJldHVybiBGYWxzZVxuXG5cbmRlZiBzdWJtaXRfZW5yb2xsbWVudChvcmlnaW4sIHN0YXRlLCBzbmFwc2hvdCwgZGlzcGxheV9uYW1lLCBlbWFpbCwgcGhvbmUsIG5vdGUpOlxuICAgIGJvZHkgPSB7XG4gICAgICAgICdjbGFpbV9pZCc6IHN0YXRlWydjbGFpbV9pZCddLFxuICAgICAgICAnZGlzcGxheV9uYW1lJzogZGlzcGxheV9uYW1lLFxuICAgICAgICAnZW1haWwnOiBlbWFpbCxcbiAgICAgICAgJ3Bob25lJzogcGhvbmUsXG4gICAgICAgICdub3RlJzogbm90ZSxcbiAgICAgICAgJ2hvc3Rfb3MnOiBzbmFwc2hvdFsnaG9zdF9vcyddLFxuICAgICAgICAnaG9zdF9pbnZlbnRvcnknOiBzbmFwc2hvdFsnaG9zdF9pbnZlbnRvcnknXSxcbiAgICAgICAgJ3BsYW5uZWRfd29ya2VyX2NhcGFjaXR5Jzogc25hcHNob3RbJ3BsYW5uZWRfd29ya2VyX2NhcGFjaXR5J10sXG4gICAgfVxuICAgIHJlc3BvbnNlID0gcG9zdF9qc29uKG9yaWdpbiwgJy9jb21wdXRlX2ZsZWV0L2Vucm9sbG1lbnRzJywgJycsIGJvZHkpXG4gICAgc3RhdGVbJ3BvbGxfdG9rZW4nXSA9IHJlc3BvbnNlWydwb2xsX3Rva2VuJ11cbiAgICBzYXZlX3N0YXRlKHN0YXRlKVxuICAgIHJlcG9ydF9ib290c3RyYXBfbG9nKG9yaWdpbiwgcmVzcG9uc2VbJ3BvbGxfdG9rZW4nXSlcbiAgICByZXR1cm4gcmVzcG9uc2VcblxuXG5kZWYgcmVwb3J0X2Jvb3RzdHJhcF9sb2cob3JpZ2luLCB0b2tlbik6XG4gICAgcGF0aCA9IG9zLmVudmlyb24uZ2V0KCdER0VfQk9PVFNUUkFQX0xPRycpXG4gICAgaWYgbm90IHBhdGg6XG4gICAgICAgIHJldHVyblxuICAgIHRyeTpcbiAgICAgICAgd2l0aCBvcGVuKHBhdGgsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0ncmVwbGFjZScpIGFzIGhhbmRsZTpcbiAgICAgICAgICAgIGhhbmRsZS5zZWVrKDAsIG9zLlNFRUtfRU5EKVxuICAgICAgICAgICAgaGFuZGxlLnNlZWsobWF4KDAsIGhhbmRsZS50ZWxsKCkgLSA2NF8wMDApKVxuICAgICAgICAgICAgaWYgaGFuZGxlLnRlbGwoKTpcbiAgICAgICAgICAgICAgICBoYW5kbGUucmVhZGxpbmUoKVxuICAgICAgICAgICAgbGluZXMgPSBoYW5kbGUucmVhZGxpbmVzKClcbiAgICBleGNlcHQgT1NFcnJvcjpcbiAgICAgICAgcmV0dXJuXG4gICAgcmVwb3J0ZXIgPSBTZXR1cExvZ1JlcG9ydGVyKG9yaWdpbiwgdG9rZW4pXG4gICAgdHJ5OlxuICAgICAgICBmb3IgbGluZSBpbiBsaW5lczpcbiAgICAgICAgICAgIHJlcG9ydGVyLnJlY29yZChsaW5lKVxuICAgIGZpbmFsbHk6XG4gICAgICAgIHJlcG9ydGVyLmNsb3NlKClcblxuXG5kZWYgcG9sbF9lbnJvbGxtZW50KG9yaWdpbiwgc3RhdGUpOlxuICAgIHJldHVybiBnZXRfanNvbihvcmlnaW4sICcvY29tcHV0ZV9mbGVldC9lbnJvbGxtZW50cycsIHN0YXRlWydwb2xsX3Rva2VuJ10pXG5cblxuZGVmIHdhaXRfZm9yX2Vucm9sbG1lbnQob3JpZ2luLCBzdGF0ZSwgcmV0cnlfZGVsYXk9Myk6XG4gICAgd2hpbGUgVHJ1ZTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcmVzdWx0ID0gcG9sbF9lbnJvbGxtZW50KG9yaWdpbiwgc3RhdGUpXG4gICAgICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yOlxuICAgICAgICAgICAgcmFpc2VcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBqc29uLkpTT05EZWNvZGVFcnJvcik6XG4gICAgICAgICAgICB0aW1lLnNsZWVwKHJldHJ5X2RlbGF5KVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgc3RhdHVzID0gcmVzdWx0LmdldCgnc3RhdHVzJylcbiAgICAgICAgaWYgc3RhdHVzID09ICdhcHByb3ZlZCc6XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIGlmIHN0YXR1cyAhPSAncGVuZGluZyc6XG4gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IocmVzdWx0LmdldCgnbWVzc2FnZScpIG9yICdUaGlzIGVucm9sbG1lbnQgcmVxdWVzdCB3YXMgZGVuaWVkIG9yIGV4cGlyZWQuJylcbiAgICAgICAgdGltZS5zbGVlcChyZXRyeV9kZWxheSlcblxuXG5kZWYgd29ya2VyX3N0YXR1cyhvcmlnaW4sIHRva2VuKTpcbiAgICByZXR1cm4gcG9zdF9qc29uKG9yaWdpbiwgJy9jb21wdXRlX2ZsZWV0L3N0YXR1cycsIHRva2VuLCB7fSlcblxuXG5XT1JLRVJfU1RBVEVfQ09QWSA9IHtcbiAgICAncmVhZHknOiAnQXZhaWxhYmxlJyxcbiAgICAnYnVzeSc6ICdXb3JraW5nJyxcbiAgICAncGF1c2VkJzogJ1BhdXNlZCcsXG4gICAgJ29mZmxpbmUnOiAnT2ZmbGluZScsXG4gICAgJ2xvdyBiYXR0ZXJ5JzogJ1dhaXRpbmcgZm9yIHBvd2VyJyxcbiAgICAndXBkYXRpbmcnOiAnVXBkYXRpbmcnLFxuICAgICd1cGRhdGUgZmFpbGVkJzogJ05lZWRzIGF0dGVudGlvbicsXG4gICAgJ3Jldm9rZWQnOiAnRGlzY29ubmVjdGVkJyxcbn1cblxuXG5kZWYgaG9zdF9tZW1vcnlfc25hcHNob3QoKTpcbiAgICB0cnk6XG4gICAgICAgIGltcG9ydCBob3N0X2ludmVudG9yeVxuICAgICAgICByZXR1cm4gaG9zdF9pbnZlbnRvcnkuYXZhaWxhYmxlX21lbW9yeV9ieXRlcygpLCBob3N0X2ludmVudG9yeS5tZW1vcnlfYnl0ZXMoKVxuICAgIGV4Y2VwdCBFeGNlcHRpb246XG4gICAgICAgIHJldHVybiBOb25lLCBOb25lXG5cblxuZGVmIGZyaWVuZGx5X3dvcmtlcl9zdGF0ZShwYXlsb2FkKTpcbiAgICBzdGF0ZSA9IChwYXlsb2FkIG9yIHt9KS5nZXQoJ3N0YXRlJykgb3IgJ3Vua25vd24nXG4gICAgaWYgKHBheWxvYWQgb3Ige30pLmdldCgnZHJhaW5pbmcnKSBhbmQgc3RhdGUgbm90IGluICgncGF1c2VkJywgJ3Jldm9rZWQnKTpcbiAgICAgICAgcmV0dXJuICdwYXVzZWQnXG4gICAgcmV0dXJuIHN0YXRlXG5cblxuZGVmIGN1cnJlbnRfd29ya19jb3B5KHBheWxvYWQpOlxuICAgIHRhc2sgPSAocGF5bG9hZCBvciB7fSkuZ2V0KCdjdXJyZW50X3Rhc2snKSBvciB7fVxuICAgIG9wZXJhdGlvbiA9ICh0YXNrLmdldCgnb3BlcmF0aW9uJykgb3IgJycpLnJlcGxhY2UoJ18nLCAnICcpLnN0cmlwKClcbiAgICBpZiBvcGVyYXRpb246XG4gICAgICAgIHJldHVybiAnV29ya2luZyBvbiAnICsgb3BlcmF0aW9uXG4gICAgc3RhdGUgPSBmcmllbmRseV93b3JrZXJfc3RhdGUocGF5bG9hZClcbiAgICBpZiBzdGF0ZSA9PSAnYnVzeSc6XG4gICAgICAgIHJldHVybiAnV29ya2luZyBvbiBhIHRhc2snXG4gICAgaWYgc3RhdGUgPT0gJ3BhdXNlZCc6XG4gICAgICAgIHJldHVybiAnTm90IHRha2luZyBuZXcgd29yaydcbiAgICBpZiBzdGF0ZSA9PSAncmVhZHknOlxuICAgICAgICByZXR1cm4gJ1dhaXRpbmcgZm9yIHdvcmsnXG4gICAgaWYgc3RhdGUgPT0gJ29mZmxpbmUnOlxuICAgICAgICByZXR1cm4gJ05vdCBjb25uZWN0ZWQgeWV0J1xuICAgIHJldHVybiBXT1JLRVJfU1RBVEVfQ09QWS5nZXQoc3RhdGUsIHN0YXRlLnJlcGxhY2UoJ18nLCAnICcpKVxuXG5cbmRlZiBpbnN0YWxsX2xhdW5jaF9hZ2VudChzY3JpcHRfcGF0aCk6XG4gICAgaW1wb3J0IGhvc3RfYXBwXG4gICAgaG9zdF9hcHAuaW5zdGFsbF9ob3N0X2FwcChzY3JpcHRfcGF0aClcbiAgICBob3N0X2FwcC5kcm9wX2xvZ2luX2hlbHBlcigpXG5cblxuZGVmIGFza3Bhc3Nfc2NyaXB0KCk6XG4gICAgcGF0aCA9IFJPT1QgLyAnZGdlLWFza3Bhc3MucHknXG4gICAgcGF0aC53cml0ZV90ZXh0KCcnJyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbmltcG9ydCBzaHV0aWwsIHN1YnByb2Nlc3MsIHN5c1xudGl0bGUgPSBcIkRvcmlhbiBHcmF5IFdvcmtlciBTZXR1cFwiXG5wcm9tcHQgPSBcIkFkbWluaXN0cmF0b3IgcGFzc3dvcmQgZm9yIGluc3RhbGxpbmcgdGhlIHdvcmtlclwiXG5pZiBzeXMucGxhdGZvcm0gPT0gXCJkYXJ3aW5cIjpcbiAgICBzY3JpcHQgPSBcIlwiXCJcbnRlbGwgYXBwbGljYXRpb24gXCJTeXN0ZW0gRXZlbnRzXCJcbiAgYWN0aXZhdGVcbiAgdHJ5XG4gICAgc2V0IGFuc3dlciB0byBkaXNwbGF5IGRpYWxvZyBcIkRvcmlhbiBHcmF5IFdvcmtlciBTZXR1cCBuZWVkcyB5b3VyIE1hYyBwYXNzd29yZCB0byBjb250aW51ZS5cIiBkZWZhdWx0IGFuc3dlciBcIlwiIHdpdGggaGlkZGVuIGFuc3dlciB3aXRoIHRpdGxlIFwiRG9yaWFuIEdyYXkgV29ya2VyIFNldHVwXCIgYnV0dG9ucyB7XCJDYW5jZWxcIiwgXCJPS1wifSBkZWZhdWx0IGJ1dHRvbiBcIk9LXCJcbiAgICBpZiBidXR0b24gcmV0dXJuZWQgb2YgYW5zd2VyIGlzIFwiT0tcIiB0aGVuXG4gICAgICByZXR1cm4gdGV4dCByZXR1cm5lZCBvZiBhbnN3ZXJcbiAgICBlbmQgaWZcbiAgb24gZXJyb3IgbnVtYmVyIC0xMjhcbiAgICByZXR1cm4gXCJcIlxuICBlbmQgdHJ5XG5lbmQgdGVsbFxuXCJcIlwiXG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oW1wib3Nhc2NyaXB0XCIsIFwiLWVcIiwgc2NyaXB0XSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgdGV4dD1UcnVlKVxuICAgIHN5cy5zdGRvdXQud3JpdGUocmVzdWx0LnN0ZG91dClcbiAgICBzeXMuZXhpdCgwIGlmIHJlc3VsdC5yZXR1cm5jb2RlID09IDAgYW5kIHJlc3VsdC5zdGRvdXQuc3RyaXAoKSBlbHNlIDEpXG5pZiBzaHV0aWwud2hpY2goXCJ6ZW5pdHlcIik6XG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oW1wiemVuaXR5XCIsIFwiLS1wYXNzd29yZFwiLCBcIi0tdGl0bGU9XCIgKyB0aXRsZSwgXCItLXRleHQ9XCIgKyBwcm9tcHRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVfb3V0cHV0PVRydWUsIHRleHQ9VHJ1ZSlcbiAgICBzeXMuc3Rkb3V0LndyaXRlKHJlc3VsdC5zdGRvdXQpXG4gICAgc3lzLmV4aXQoMCBpZiByZXN1bHQucmV0dXJuY29kZSA9PSAwIGVsc2UgMSlcbmlmIHNodXRpbC53aGljaChcImtkaWFsb2dcIik6XG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oW1wia2RpYWxvZ1wiLCBcIi0tcGFzc3dvcmRcIiwgcHJvbXB0XSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgdGV4dD1UcnVlKVxuICAgIHN5cy5zdGRvdXQud3JpdGUocmVzdWx0LnN0ZG91dClcbiAgICBzeXMuZXhpdCgwIGlmIHJlc3VsdC5yZXR1cm5jb2RlID09IDAgZWxzZSAxKVxudHJ5OlxuICAgIGltcG9ydCB0a2ludGVyIGFzIHRrXG4gICAgZnJvbSB0a2ludGVyIGltcG9ydCBzaW1wbGVkaWFsb2dcbiAgICByb290ID0gdGsuVGsoKVxuICAgIHJvb3Qud2l0aGRyYXcoKVxuICAgIHZhbHVlID0gc2ltcGxlZGlhbG9nLmFza3N0cmluZyh0aXRsZSwgcHJvbXB0LCBzaG93PVwiKlwiKVxuICAgIHJvb3QuZGVzdHJveSgpXG4gICAgc3lzLnN0ZG91dC53cml0ZSh2YWx1ZSBvciBcIlwiKVxuICAgIHN5cy5leGl0KDAgaWYgdmFsdWUgZWxzZSAxKVxuZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICBzeXMuZXhpdCgxKVxuJycnKVxuICAgIHBhdGguY2htb2QoMG83MDApXG4gICAgcmV0dXJuIHBhdGhcblxuXG5kZWYgbGludXhfaW5zdGFsbF9jb21tYW5kKCk6XG4gICAgcHl0aG9uID0gc3RyKFBhdGgoc3lzLmV4ZWN1dGFibGUpLnJlc29sdmUoKSlcbiAgICBzY3JpcHQgPSBzdHIoKFJPT1QgLyAnaW5zdGFsbC5weScpLnJlc29sdmUoKSlcbiAgICBpZiBvcy5nZXRldWlkKCkgPT0gMDpcbiAgICAgICAgcmV0dXJuIFtweXRob24sICctdScsIHNjcmlwdF1cbiAgICBpZiB3YW50X2hlYWRsZXNzKCkgYW5kIHNodXRpbC53aGljaCgnc3VkbycpOlxuICAgICAgICByZXR1cm4gWydzdWRvJywgJy1FJywgcHl0aG9uLCAnLXUnLCBzY3JpcHRdXG4gICAgaWYgc2h1dGlsLndoaWNoKCdwa2V4ZWMnKTpcbiAgICAgICAgZW52ID0gWydlbnYnLCAnUFlUSE9OVU5CVUZGRVJFRD0xJ11cbiAgICAgICAgZGlzcGxheSA9IG9zLmVudmlyb24uZ2V0KCdESVNQTEFZJylcbiAgICAgICAgYXV0aG9yaXR5ID0gb3MuZW52aXJvbi5nZXQoJ1hBVVRIT1JJVFknKVxuICAgICAgICBpZiBkaXNwbGF5OlxuICAgICAgICAgICAgZW52LmFwcGVuZCgnRElTUExBWT0nICsgZGlzcGxheSlcbiAgICAgICAgaWYgYXV0aG9yaXR5OlxuICAgICAgICAgICAgZW52LmFwcGVuZCgnWEFVVEhPUklUWT0nICsgYXV0aG9yaXR5KVxuICAgICAgICByZXR1cm4gWydwa2V4ZWMnLCAqZW52LCBweXRob24sICctdScsIHNjcmlwdF1cbiAgICBpZiBzaHV0aWwud2hpY2goJ3N1ZG8nKTpcbiAgICAgICAgb3MuZW52aXJvblsnU1VET19BU0tQQVNTJ10gPSBzdHIoYXNrcGFzc19zY3JpcHQoKSlcbiAgICAgICAgb3MuZW52aXJvblsnU1VET19QUk9NUFQnXSA9ICcnXG4gICAgICAgIHJldHVybiBbJ3N1ZG8nLCAnLUEnLCAnLUUnLCBweXRob24sICctdScsIHNjcmlwdF1cbiAgICByZXR1cm4gW3B5dGhvbiwgJy11Jywgc2NyaXB0XVxuXG5cbmRlZiBtYWNfbmVlZHNfaW5zdGFsbCgpOlxuICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaW1wb3J0IGluc3RhbGxfbWFjb3NcbiAgICBpbnN0YWxsX21hY29zLmFkZF9tYWNfcHJlZml4ZXMoKVxuICAgIGxpbWFjdGwgPSBzaHV0aWwud2hpY2goJ2xpbWFjdGwnKVxuICAgIGlmIG5vdCBsaW1hY3RsOlxuICAgICAgICByZXR1cm4gVHJ1ZVxuICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFtsaW1hY3RsLCAnbGlzdCcsICctcSddLCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUsIGNoZWNrPUZhbHNlKVxuICAgIG5hbWVzID0ge2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiByZXN1bHQuc3Rkb3V0LnNwbGl0bGluZXMoKSBpZiBsaW5lLnN0cmlwKCl9XG4gICAgcmV0dXJuIGluc3RhbGxfbWFjb3MuSU5TVEFOQ0Ugbm90IGluIG5hbWVzXG5cblxuZGVmIHNldHVwX2xvZ19yZXBvcnRlcigpOlxuICAgIHRyeTpcbiAgICAgICAgc2V0dGluZ3MgPSBjb25maWcoKSBpZiAoUk9PVCAvICdjb25maWcuanNvbicpLmV4aXN0cygpIGVsc2Uge31cbiAgICAgICAgaWYgc2V0dGluZ3MuZ2V0KCdlbnJvbGxtZW50Jyk6XG4gICAgICAgICAgICB0b2tlbiA9IGxvYWRfc3RhdGUoKS5nZXQoJ3BvbGxfdG9rZW4nKVxuICAgICAgICAgICAgb3JpZ2luID0gc2V0dGluZ3MuZ2V0KCdvcmlnaW4nKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgaW52aXRhdGlvbiA9IGludml0YXRpb25fcGF5bG9hZCgpXG4gICAgICAgICAgICB0b2tlbiA9IGludml0YXRpb24uZ2V0KCd0b2tlbicpIGlmIGludml0YXRpb24gZWxzZSBOb25lXG4gICAgICAgICAgICBvcmlnaW4gPSBpbnZpdGF0aW9uLmdldCgnb3JpZ2luJykgaWYgaW52aXRhdGlvbiBlbHNlIE5vbmVcbiAgICAgICAgcmV0dXJuIFNldHVwTG9nUmVwb3J0ZXIob3JpZ2luLCB0b2tlbikgaWYgb3JpZ2luIGFuZCB0b2tlbiBlbHNlIE5vbmVcbiAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IsIEtleUVycm9yLCBSdW50aW1lRXJyb3IpOlxuICAgICAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBydW5faW5zdGFsbGVyKHNjcmlwdF9wYXRoLCBvbl9saW5lPU5vbmUpOlxuICAgIHJlcG9ydGVyID0gc2V0dXBfbG9nX3JlcG9ydGVyKClcblxuICAgIGRlZiBlbWl0KGxpbmUpOlxuICAgICAgICBpZiByZXBvcnRlcjpcbiAgICAgICAgICAgIHJlcG9ydGVyLnJlY29yZChsaW5lKVxuICAgICAgICBpZiBvbl9saW5lIGFuZCBsaW5lLnN0cmlwKCk6XG4gICAgICAgICAgICBvbl9saW5lKGxpbmUucnN0cmlwKCkpXG5cbiAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKVxuICAgIGVudlsnUFlUSE9OVU5CVUZGRVJFRCddID0gJzEnXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBpbXBvcnQgaW5zdGFsbF9tYWNvc1xuICAgICAgICBpbnN0YWxsX21hY29zLmFkZF9tYWNfcHJlZml4ZXMoKVxuICAgICAgICBlbnZbJ1BBVEgnXSA9IG9zLmVudmlyb24uZ2V0KCdQQVRIJywgZW52LmdldCgnUEFUSCcsICcnKSlcbiAgICAgICAgZW52WydTVURPX0FTS1BBU1MnXSA9IHN0cihhc2twYXNzX3NjcmlwdCgpKVxuICAgICAgICBlbnZbJ0RHRV9TRVRVUF9MT0dfU1VQRVJWSVNFRCddID0gJzEnXG4gICAgICAgIGNvbW1hbmQgPSBbc3lzLmV4ZWN1dGFibGUsICctdScsIHN0cihST09UIC8gJ2luc3RhbGxfbWFjb3MucHknKSwgc2NyaXB0X3BhdGhdXG4gICAgICAgIGVtaXQoJ0lmIG1hY09TIG9yIEhvbWVicmV3IG5lZWRzIGEgcGFzc3dvcmQsIGEgTWFjIGRpYWxvZyB3aWxsIGFwcGVhci4gSW5zaWRlIHRoZSBMaW51eCBWTSwgc2V0dXAgdXNlcyB0aGUgVk3igJlzIHN1ZG8uJylcbiAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOlxuICAgICAgICBjb21tYW5kID0gbGludXhfaW5zdGFsbF9jb21tYW5kKClcbiAgICAgICAgZW1pdCgnV2luZG93cyB1c2VzIGEgVUFDIHByb21wdCB0byBpbnN0YWxsIFVidW50dSAoV1NMKS4gSW5zaWRlIFVidW50dSB0aGUgaW5zdGFsbGVyIHJ1bnMgYXMgcm9vdCwgc28gdGhlcmUgaXMgbm8gc2Vjb25kIHBhc3N3b3JkLicpXG4gICAgZWxzZTpcbiAgICAgICAgY29tbWFuZCA9IGxpbnV4X2luc3RhbGxfY29tbWFuZCgpXG4gICAgICAgIGlmIGNvbW1hbmRbMF0gPT0gJ3BrZXhlYyc6XG4gICAgICAgICAgICBlbWl0KCdVYnVudHUgd2lsbCBhc2sgZm9yIHlvdXIgYWRtaW5pc3RyYXRvciBwYXNzd29yZC4gVGhhdCBwZXJtaXNzaW9uIGlzIG5lZWRlZCB0byBpbnN0YWxsIERvY2tlciBhbmQgdGhlIHdvcmtlciBzZXJ2aWNlLicpXG4gICAgICAgIGVsaWYgY29tbWFuZFswXSA9PSAnc3Vkbyc6XG4gICAgICAgICAgICBlbWl0KCdFbnRlciB5b3VyIGFkbWluaXN0cmF0b3IgcGFzc3dvcmQgd2hlbiBhc2tlZC4gVGhhdCBwZXJtaXNzaW9uIGlzIG5lZWRlZCB0byBpbnN0YWxsIERvY2tlciBhbmQgdGhlIHdvcmtlciBzZXJ2aWNlLicpXG4gICAgZW1pdCgnJCAnICsgc2hsZXguam9pbihjb21tYW5kKSlcbiAgICBlbWl0KCdBcHByb3ZlZC4gU3RhcnRpbmcgc2V0dXAgb24gdGhpcyBjb21wdXRlci4uLicpXG4gICAgdHJ5OlxuICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBjd2Q9c3RyKFJPT1QpLFxuICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSxcbiAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCxcbiAgICAgICAgICAgIHRleHQ9VHJ1ZSxcbiAgICAgICAgICAgIGJ1ZnNpemU9MSxcbiAgICAgICAgICAgIGVudj1lbnYsXG4gICAgICAgIClcbiAgICAgICAgb3V0cHV0ID0gW11cbiAgICAgICAgZm9yIGxpbmUgaW4gcHJvY2Vzcy5zdGRvdXQ6XG4gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGxpbmUucnN0cmlwKCkpXG4gICAgICAgICAgICBlbWl0KGxpbmUpXG4gICAgICAgIHByb2Nlc3Mud2FpdCgpXG4gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJyBhbmQgcHJvY2Vzcy5yZXR1cm5jb2RlID09IDA6XG4gICAgICAgICAgICBlbWl0KCdLZWVwaW5nIHRoaXMgd2luZG93IGF2YWlsYWJsZSBhZnRlciByZXN0YXJ0Li4uJylcbiAgICAgICAgICAgIGluc3RhbGxfbGF1bmNoX2FnZW50KHNjcmlwdF9wYXRoKVxuICAgICAgICBpZiBwcm9jZXNzLnJldHVybmNvZGU6XG4gICAgICAgICAgICBpZiBwcm9jZXNzLnJldHVybmNvZGUgaW4gKDEyNiwgMTI3KSBvciBhbnkoJ2Rpc21pc3NlZCcgaW4gaXRlbS5sb3dlcigpIG9yICdjYW5jZWxsZWQnIGluIGl0ZW0ubG93ZXIoKSBmb3IgaXRlbSBpbiBvdXRwdXQpOlxuICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQWRtaW5pc3RyYXRvciBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIHdvcmtlci4gQXBwcm92ZSB0aGUgcGFzc3dvcmQgcHJvbXB0IGFuZCB0cnkgYWdhaW4uJylcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBuZXh0KChpdGVtLnNwbGl0KCdTZXR1cCBuZWVkcyBhdHRlbnRpb246JywgMSlbLTFdLnN0cmlwKCkgZm9yIGl0ZW0gaW4gcmV2ZXJzZWQob3V0cHV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICdTZXR1cCBuZWVkcyBhdHRlbnRpb246JyBpbiBpdGVtKSwgTm9uZSlcbiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtZXNzYWdlIG9yIChvdXRwdXRbLTFdIGlmIG91dHB1dCBlbHNlICdTZXR1cCBjb3VsZCBub3QgZmluaXNoLicpKVxuICAgIGZpbmFsbHk6XG4gICAgICAgIGlmIHJlcG9ydGVyOlxuICAgICAgICAgICAgcmVwb3J0ZXIuY2xvc2UoKVxuXG5cbmRlZiBoZWFkbGVzc191c2FnZShvcmlnaW4pOlxuICAgIG9yaWdpbiA9IG9yaWdpbi5yc3RyaXAoJy8nKVxuICAgIHByaW50KFxuICAgICAgICAnVGhpcyBjb21wdXRlciBoYXMgbm8gZGVza3RvcCBzZXNzaW9uLiBFbnJvbGwgZnJvbSB0aGUgc2hlbGwgd2l0aCBuYW1lLCBlbWFpbCwgYW5kIHBob25lOlxcbidcbiAgICAgICAgZicgIGN1cmwgLWZzU0wge29yaWdpbn0vY29tcHV0ZV9mbGVldC9kb3dubG9hZC9zY3JpcHQgfCBcXFxcXFxuJ1xuICAgICAgICBcIiAgICBzdWRvIERHRV9FTlJPTExfTkFNRT0nTWFjaGluZSBuYW1lJyBER0VfRU5ST0xMX0VNQUlMPSd5b3VAZXhhbXBsZS5jb20nIFwiXG4gICAgICAgIFwiREdFX0VOUk9MTF9QSE9ORT0nKzFYWFhYWFhYWFhYJyBiYXNoXFxuXCJcbiAgICAgICAgJ09wdGlvbmFsOiBER0VfRU5ST0xMX05PVEUuIERHRV9FTlJPTExfSEVBRExFU1M9MSBza2lwcyBhIGxlZnRvdmVyIGdyYXBoaWNhbCBzZXNzaW9uLicsXG4gICAgICAgIGZsdXNoPVRydWUsXG4gICAgKVxuXG5cbmRlZiBhZG9wdF9leGlzdGluZ19pZGVudGl0eSgpOlxuICAgIGlmIGludml0YXRpb25fcGF0aCgpLmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gVHJ1ZVxuICAgIGlkZW50aXR5ID0gc3VwcG9ydF9kaXIoKSAvICdpZGVudGl0eS5qc29uJ1xuICAgIGlmIG5vdCBpZGVudGl0eS5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgdHJ5OlxuICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhpZGVudGl0eS5yZWFkX3RleHQoKSlcbiAgICBleGNlcHQgKE9TRXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICBpZiBub3QgZGF0YS5nZXQoJ3Rva2VuJyk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGludml0YXRpb25fcGF0aCgpLndyaXRlX3RleHQoanNvbi5kdW1wcyh7XG4gICAgICAgICdvcmlnaW4nOiBkYXRhLmdldCgnb3JpZ2luJykgb3IgY29uZmlnKCkuZ2V0KCdvcmlnaW4nKSxcbiAgICAgICAgJ3Rva2VuJzogZGF0YVsndG9rZW4nXSxcbiAgICAgICAgJ3dvcmtlcl9pZCc6IGRhdGEuZ2V0KCd3b3JrZXJfaWQnKSxcbiAgICB9KSlcbiAgICByZXR1cm4gVHJ1ZVxuXG5cbmRlZiBwcm9tcHRfY29udGFjdCgpOlxuICAgIGNvbnRhY3QgPSBjbGlfY29udGFjdCgpXG4gICAgaWYgY29udGFjdDpcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RcbiAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIGRpc3BsYXlfbmFtZSA9IGlucHV0KCdZb3VyIG5hbWU6ICcpLnN0cmlwKClcbiAgICBlbWFpbCA9IGlucHV0KCdFbWFpbDogJykuc3RyaXAoKVxuICAgIHBob25lID0gaW5wdXQoJ1Bob25lOiAnKS5zdHJpcCgpXG4gICAgbm90ZSA9IGlucHV0KCdPcHRpb25hbCBub3RlOiAnKS5zdHJpcCgpXG4gICAgY29uc2VudCA9IGlucHV0KCdTZW5kIHRoaXMgcmVxdWVzdD8gW3kvTl0gJykuc3RyaXAoKS5sb3dlcigpXG4gICAgaWYgY29uc2VudCBub3QgaW4gKCd5JywgJ3llcycpOlxuICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCdTZXR1cCBjYW5jZWxsZWQuJylcbiAgICBpZiBub3QgZGlzcGxheV9uYW1lIG9yIG5vdCBlbWFpbCBvciBub3QgcGhvbmU6XG4gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoJ05hbWUsIGVtYWlsLCBhbmQgcGhvbmUgYXJlIHJlcXVpcmVkLicpXG4gICAgcmV0dXJuIHsnZGlzcGxheV9uYW1lJzogZGlzcGxheV9uYW1lLCAnZW1haWwnOiBlbWFpbCwgJ3Bob25lJzogcGhvbmUsICdub3RlJzogbm90ZX1cblxuXG5kZWYgdGVybWluYWxfZmxvdyhvcmlnaW4sIHNjcmlwdF9wYXRoKTpcbiAgICBkZWYgZW1pdChsaW5lKTpcbiAgICAgICAgaWYgbGluZTpcbiAgICAgICAgICAgIHByaW50KGxpbmUsIGZsdXNoPVRydWUpXG5cbiAgICBpZiBhZG9wdF9leGlzdGluZ19pZGVudGl0eSgpOlxuICAgICAgICBlbWl0KCdUaGlzIGNvbXB1dGVyIGFscmVhZHkgaGFzIGEgd29ya2VyIGlkZW50aXR5LiBJbnN0YWxsaW5nIG9yIHVwZGF0aW5nIHRoZSB3b3JrZXIgc2VydmljZS4nKVxuICAgICAgICBydW5faW5zdGFsbGVyKHNjcmlwdF9wYXRoLCBvbl9saW5lPWVtaXQpXG4gICAgICAgIGVtaXQoJ1dvcmtlciBzZXR1cCBmaW5pc2hlZC4nKVxuICAgICAgICByZXR1cm5cbiAgICBjb250YWN0ID0gcHJvbXB0X2NvbnRhY3QoKVxuICAgIGlmIG5vdCBjb250YWN0OlxuICAgICAgICBoZWFkbGVzc191c2FnZShvcmlnaW4pXG4gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMSlcbiAgICBlbWl0KCdDb2xsZWN0aW5nIG1hY2hpbmUgZGV0YWlsc+KApicpXG4gICAgc25hcHNob3QgPSBjb2xsZWN0X3NuYXBzaG90KG9yaWdpbilcbiAgICBpZiBzeXMuc3RkaW4uaXNhdHR5KCkgYW5kIG5vdCBjbGlfY29udGFjdCgpOlxuICAgICAgICBlbWl0KCdcXG4nLmpvaW4ocHJldmlld19saW5lcyhzbmFwc2hvdCkpKVxuICAgIHN0YXRlID0gbG9hZF9zdGF0ZSgpXG4gICAgc3VibWl0X2Vucm9sbG1lbnQoXG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb250YWN0WydkaXNwbGF5X25hbWUnXSxcbiAgICAgICAgY29udGFjdFsnZW1haWwnXSxcbiAgICAgICAgY29udGFjdFsncGhvbmUnXSxcbiAgICAgICAgY29udGFjdFsnbm90ZSddLFxuICAgIClcbiAgICBlbWl0KCdSZXF1ZXN0IHNlbnQgYXMgJXMuIFdhaXRpbmcgZm9yIGFwcHJvdmFsIGluIFdvcmtlciBlbnJvbGxtZW50c+KApicgJSBjb250YWN0WydkaXNwbGF5X25hbWUnXSlcbiAgICByZXN1bHQgPSB3YWl0X2Zvcl9lbnJvbGxtZW50KG9yaWdpbiwgc3RhdGUsIHJldHJ5X2RlbGF5PTUpXG4gICAgc2F2ZV9pbnZpdGF0aW9uKHJlc3VsdCwgb3JpZ2luKVxuICAgIGVtaXQoJ0FwcHJvdmVkLiBJbnN0YWxsaW5nIHRoZSB3b3JrZXIuJylcbiAgICBydW5faW5zdGFsbGVyKHNjcmlwdF9wYXRoLCBvbl9saW5lPWVtaXQpXG4gICAgZW1pdCgnV29ya2VyIHNldHVwIGZpbmlzaGVkLicpXG5cblxuZGVmIHBpY2tfZm9udF9mYW1pbHkocm9vdCk6XG4gICAgZmFtaWxpZXMgPSB7c3RyKG5hbWUpIGZvciBuYW1lIGluIHJvb3QudGsuY2FsbCgnZm9udCcsICdmYW1pbGllcycpfVxuICAgIGZvciBuYW1lIGluICgnVWJ1bnR1JywgJ0NhbnRhcmVsbCcsICdOb3RvIFNhbnMnLCAnRGVqYVZ1IFNhbnMnLCAnU2Vnb2UgVUknLCAnSGVsdmV0aWNhJyk6XG4gICAgICAgIGlmIG5hbWUgaW4gZmFtaWxpZXM6XG4gICAgICAgICAgICByZXR1cm4gbmFtZVxuICAgIHJldHVybiAnVGtEZWZhdWx0Rm9udCdcblxuXG5kZWYgdGtpbnRlcl9mbG93KG9yaWdpbiwgc2NyaXB0X3BhdGgpOlxuICAgIGltcG9ydCB0a2ludGVyIGFzIHRrXG4gICAgZnJvbSB0a2ludGVyIGltcG9ydCBmb250IGFzIHRrZm9udFxuICAgIGZyb20gdGtpbnRlciBpbXBvcnQgc2Nyb2xsZWR0ZXh0XG5cbiAgICBDT0xPUlMgPSB7XG4gICAgICAgICdpbmsnOiAnIzFjMTkxNycsXG4gICAgICAgICdtdXRlZCc6ICcjNzg3MTZjJyxcbiAgICAgICAgJ3BhcGVyJzogJyNmNWYwZWEnLFxuICAgICAgICAnY2FyZCc6ICcjZmZmY2Y4JyxcbiAgICAgICAgJ2xpbmUnOiAnI2U3ZTBkNicsXG4gICAgICAgICdoZWFkZXInOiAnIzFjMTkxNycsXG4gICAgICAgICdoZWFkZXJfdGV4dCc6ICcjZmFmN2YyJyxcbiAgICAgICAgJ2hlYWRlcl9tdXRlZCc6ICcjYzRiOGFhJyxcbiAgICAgICAgJ2FjY2VudCc6ICcjOGIxZTFlJyxcbiAgICAgICAgJ2FjY2VudF9ob3Zlcic6ICcjNmYxNjE2JyxcbiAgICAgICAgJ2FjY2VudF9zb2Z0JzogJyNmNGU3ZTQnLFxuICAgICAgICAnb2snOiAnIzNmNjIxMicsXG4gICAgICAgICdva19zb2Z0JzogJyNlZWY0ZTQnLFxuICAgICAgICAnd2Fybic6ICcjOWEzNDEyJyxcbiAgICAgICAgJ3dhcm5fc29mdCc6ICcjZmFlY2U0JyxcbiAgICAgICAgJ3doaXRlJzogJyNmZmZmZmYnLFxuICAgICAgICAnYmFkZ2UnOiAnIzFjMTkxNycsXG4gICAgfVxuXG4gICAgc25hcHNob3QgPSB7J3ZhbHVlJzogTm9uZSwgJ2Vycm9yJzogTm9uZX1cblxuICAgIGRlZiBsb2FkX3NuYXBzaG90KCk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHNuYXBzaG90Wyd2YWx1ZSddID0gY29sbGVjdF9zbmFwc2hvdChvcmlnaW4pXG4gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICBzbmFwc2hvdFsnZXJyb3InXSA9IHN0cihlcnJvcilcblxuICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxvYWRfc25hcHNob3QsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG5cbiAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKTpcbiAgICAgICAgcm9vdCA9IHRrLlRrKGNsYXNzTmFtZT1MSU5VWF9XTV9DTEFTUywgYmFzZU5hbWU9TElOVVhfV01fQ0xBU1MpXG4gICAgZWxzZTpcbiAgICAgICAgcm9vdCA9IHRrLlRrKClcbiAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6XG4gICAgICAgIHJvb3Qud2l0aGRyYXcoKVxuICAgIHJvb3QudGl0bGUoJ0RvcmlhbiBHcmF5IFdvcmtlcicpXG4gICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHJvb3QudGsuY2FsbCgnd20nLCAnY2xhc3MnLCByb290Ll93LCBMSU5VWF9XTV9DTEFTUyArICcgJyArIExJTlVYX1dNX0NMQVNTKVxuICAgICAgICBleGNlcHQgdGsuVGNsRXJyb3I6XG4gICAgICAgICAgICBwYXNzXG4gICAgcm9vdC5jb25maWd1cmUoYmc9Q09MT1JTWydwYXBlciddKVxuICAgIHNjcmVlbl93ID0gcm9vdC53aW5mb19zY3JlZW53aWR0aCgpXG4gICAgc2NyZWVuX2ggPSByb290LndpbmZvX3NjcmVlbmhlaWdodCgpXG4gICAgcm9vdC5taW5zaXplKG1pbig3MjAsIHNjcmVlbl93KSwgbWluKDUyMCwgc2NyZWVuX2gpKVxuICAgIGFwcGx5X3dpbmRvd19pY29uKHJvb3QpXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBwcmVzZW50X3dpbmRvdyhyb290KVxuICAgICAgICByb290LnVwZGF0ZSgpXG4gICAgZmFtaWx5ID0gcGlja19mb250X2ZhbWlseShyb290KVxuICAgIGZvbnRzID0ge1xuICAgICAgICAnZGlzcGxheSc6IHRrZm9udC5Gb250KGZhbWlseT1mYW1pbHksIHNpemU9MjYsIHdlaWdodD0nYm9sZCcpLFxuICAgICAgICAndGl0bGUnOiB0a2ZvbnQuRm9udChmYW1pbHk9ZmFtaWx5LCBzaXplPTE4LCB3ZWlnaHQ9J2JvbGQnKSxcbiAgICAgICAgJ3N1YnRpdGxlJzogdGtmb250LkZvbnQoZmFtaWx5PWZhbWlseSwgc2l6ZT0xMiksXG4gICAgICAgICdoZWFkaW5nJzogdGtmb250LkZvbnQoZmFtaWx5PWZhbWlseSwgc2l6ZT0xMywgd2VpZ2h0PSdib2xkJyksXG4gICAgICAgICdib2R5JzogdGtmb250LkZvbnQoZmFtaWx5PWZhbWlseSwgc2l6ZT0xMiksXG4gICAgICAgICdzbWFsbCc6IHRrZm9udC5Gb250KGZhbWlseT1mYW1pbHksIHNpemU9MTEpLFxuICAgICAgICAnYnV0dG9uJzogdGtmb250LkZvbnQoZmFtaWx5PWZhbWlseSwgc2l6ZT0xMiwgd2VpZ2h0PSdib2xkJyksXG4gICAgICAgICdiYWRnZSc6IHRrZm9udC5Gb250KGZhbWlseT1mYW1pbHksIHNpemU9MTQsIHdlaWdodD0nYm9sZCcpLFxuICAgICAgICAnbGFiZWwnOiB0a2ZvbnQuRm9udChmYW1pbHk9ZmFtaWx5LCBzaXplPTExLCB3ZWlnaHQ9J2JvbGQnKSxcbiAgICAgICAgJ21ldHJpYyc6IHRrZm9udC5Gb250KGZhbWlseT1mYW1pbHksIHNpemU9MjIsIHdlaWdodD0nYm9sZCcpLFxuICAgICAgICAnbW9ubyc6IHRrZm9udC5Gb250KGZhbWlseT0nRGVqYVZ1IFNhbnMgTW9ubycsIHNpemU9MTApLFxuICAgIH1cbiAgICBicmFuZF9pY29uID0gbG9hZF9icmFuZF9pY29uKHRrLCBzaXplPTU2KVxuXG4gICAgaGVhZGVyID0gdGsuRnJhbWUocm9vdCwgYmc9Q09MT1JTWydoZWFkZXInXSwgcGFkeD0zNiwgcGFkeT0yMilcbiAgICBoZWFkZXIucGFjayhmaWxsPSd4JylcbiAgICBpZiBicmFuZF9pY29uOlxuICAgICAgICB0ay5MYWJlbChoZWFkZXIsIGltYWdlPWJyYW5kX2ljb24sIGJnPUNPTE9SU1snaGVhZGVyJ10pLnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDAsIDE4KSlcbiAgICB0aXRsZV9ibG9jayA9IHRrLkZyYW1lKGhlYWRlciwgYmc9Q09MT1JTWydoZWFkZXInXSlcbiAgICB0aXRsZV9ibG9jay5wYWNrKHNpZGU9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgIHRrLkxhYmVsKHRpdGxlX2Jsb2NrLCB0ZXh0PSdEb3JpYW4gR3JheScsIGZvbnQ9Zm9udHNbJ3RpdGxlJ10sIGJnPUNPTE9SU1snaGVhZGVyJ10sXG4gICAgICAgICAgICAgZmc9Q09MT1JTWydoZWFkZXJfdGV4dCddKS5wYWNrKGFuY2hvcj0ndycpXG4gICAgaGVhZGVyX3N1YnRpdGxlID0gdGsuTGFiZWwodGl0bGVfYmxvY2ssIHRleHQ9J1dvcmtlciBzZXR1cCcsIGZvbnQ9Zm9udHNbJ3N1YnRpdGxlJ10sIGJnPUNPTE9SU1snaGVhZGVyJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydoZWFkZXJfbXV0ZWQnXSlcbiAgICBoZWFkZXJfc3VidGl0bGUucGFjayhhbmNob3I9J3cnLCBwYWR5PSgyLCAwKSlcblxuICAgIHNoZWxsID0gdGsuRnJhbWUocm9vdCwgYmc9Q09MT1JTWydwYXBlciddKVxuICAgIHNoZWxsLnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlKVxuICAgIGJvZHkgPSB0ay5GcmFtZShzaGVsbCwgYmc9Q09MT1JTWydwYXBlciddKVxuICAgIGJvZHkucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUsIHBhZHg9NDgsIHBhZHk9MzIpXG5cbiAgICBzdGF0dXNfdG9uZSA9IHsndmFsdWUnOiAncmVhZHknfVxuICAgIHN0YXR1cyA9IHRrLlN0cmluZ1Zhcih2YWx1ZT0nR2V0dGluZyB0aGlzIGNvbXB1dGVyIHJlYWR54oCmJylcbiAgICBiYW5uZXIgPSB0ay5GcmFtZShib2R5LCBiZz1DT0xPUlNbJ2FjY2VudF9zb2Z0J10sIHBhZHg9MTgsIHBhZHk9MTIpXG4gICAgYmFubmVyLnBhY2soZmlsbD0neCcsIHBhZHk9KDAsIDIyKSlcbiAgICBiYW5uZXJfZG90ID0gdGsuQ2FudmFzKGJhbm5lciwgd2lkdGg9MTIsIGhlaWdodD0xMiwgYmc9Q09MT1JTWydhY2NlbnRfc29mdCddLCBoaWdobGlnaHR0aGlja25lc3M9MClcbiAgICBiYW5uZXJfZG90LnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDAsIDEwKSlcbiAgICBiYW5uZXJfZG90LmNyZWF0ZV9vdmFsKDIsIDIsIDEwLCAxMCwgZmlsbD1DT0xPUlNbJ2FjY2VudCddLCBvdXRsaW5lPScnKVxuICAgIHN0YXR1c19sYWJlbCA9IHRrLkxhYmVsKGJhbm5lciwgdGV4dHZhcmlhYmxlPXN0YXR1cywgZm9udD1mb250c1snYm9keSddLCBiZz1DT0xPUlNbJ2FjY2VudF9zb2Z0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSwgd3JhcGxlbmd0aD05MDAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgIHN0YXR1c19sYWJlbC5wYWNrKHNpZGU9J2xlZnQnLCBmaWxsPSd4JywgZXhwYW5kPVRydWUpXG5cbiAgICBkZWYgcGFpbnRfYmFubmVyKHRvbmU9J3JlYWR5Jyk6XG4gICAgICAgIHBhbGV0dGVzID0ge1xuICAgICAgICAgICAgJ3JlYWR5JzogKENPTE9SU1snYWNjZW50X3NvZnQnXSwgQ09MT1JTWydhY2NlbnQnXSwgQ09MT1JTWydpbmsnXSksXG4gICAgICAgICAgICAnd2FpdCc6IChDT0xPUlNbJ29rX3NvZnQnXSwgQ09MT1JTWydvayddLCBDT0xPUlNbJ29rJ10pLFxuICAgICAgICAgICAgJ2Vycm9yJzogKENPTE9SU1snd2Fybl9zb2Z0J10sIENPTE9SU1snd2FybiddLCBDT0xPUlNbJ3dhcm4nXSksXG4gICAgICAgIH1cbiAgICAgICAgYmFja2dyb3VuZCwgZG90LCB0ZXh0ID0gcGFsZXR0ZXMuZ2V0KHRvbmUsIHBhbGV0dGVzWydyZWFkeSddKVxuICAgICAgICBzdGF0dXNfdG9uZVsndmFsdWUnXSA9IHRvbmVcbiAgICAgICAgYmFubmVyLmNvbmZpZ3VyZShiZz1iYWNrZ3JvdW5kKVxuICAgICAgICBiYW5uZXJfZG90LmNvbmZpZ3VyZShiZz1iYWNrZ3JvdW5kKVxuICAgICAgICBiYW5uZXJfZG90Lml0ZW1jb25maWd1cmUoMSwgZmlsbD1kb3QpXG4gICAgICAgIHN0YXR1c19sYWJlbC5jb25maWd1cmUoYmc9YmFja2dyb3VuZCwgZmc9dGV4dClcblxuICAgIGhlcm8gPSB0ay5GcmFtZShib2R5LCBiZz1DT0xPUlNbJ3BhcGVyJ10pXG4gICAgaGVyby5wYWNrKGZpbGw9J3gnLCBwYWR5PSgwLCAyMikpXG4gICAgdGsuTGFiZWwoaGVybywgdGV4dD1cIlB1dCB0aGlzIGNvbXB1dGVyJ3MgaWRsZSB0aW1lIHRvIHdvcmsuXCIsIGZvbnQ9Zm9udHNbJ2Rpc3BsYXknXSxcbiAgICAgICAgICAgICBiZz1DT0xPUlNbJ3BhcGVyJ10sIGZnPUNPTE9SU1snaW5rJ10sIHdyYXBsZW5ndGg9OTgwLCBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JykucGFjayhmaWxsPSd4JylcbiAgICB0ay5MYWJlbChcbiAgICAgICAgaGVybyxcbiAgICAgICAgdGV4dD0nRG9yaWFuIEdyYXkgY2FuIHByb2Nlc3MgYmFja2dyb3VuZCB0YXNrcyBvbiBtYWNoaW5lcyBsaWtlIHRoaXMgb25lLiAnXG4gICAgICAgICAgICAgJ1lvdSBzdGF5IGluIGNvbnRyb2wg4oCUIHNlbmQgYSByZXF1ZXN0LCB3YWl0IGZvciBhcHByb3ZhbCwgYW5kIGxlYXZlIHRoaXMgd2luZG93IG9wZW4uJyxcbiAgICAgICAgZm9udD1mb250c1snc3VidGl0bGUnXSwgYmc9Q09MT1JTWydwYXBlciddLCBmZz1DT0xPUlNbJ211dGVkJ10sIHdyYXBsZW5ndGg9OTgwLFxuICAgICAgICBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JyxcbiAgICApLnBhY2soZmlsbD0neCcsIHBhZHk9KDgsIDApKVxuXG4gICAgc3RlcHMgPSB0ay5GcmFtZShib2R5LCBiZz1DT0xPUlNbJ3BhcGVyJ10pXG4gICAgc3RlcHMucGFjayhmaWxsPSd4JywgcGFkeT0oMCwgMTgpKVxuICAgIGZvciBjb2x1bW4sIChudW1iZXIsIHRpdGxlLCBjb3B5KSBpbiBlbnVtZXJhdGUoRU5ST0xMTUVOVF9TVEVQUyk6XG4gICAgICAgIGNhcmQgPSB0ay5GcmFtZShzdGVwcywgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHR0aGlja25lc3M9MSwgcGFkeD0yMCwgcGFkeT0yMilcbiAgICAgICAgY2FyZC5ncmlkKHJvdz0wLCBjb2x1bW49Y29sdW1uLCBzdGlja3k9J25zZXcnLCBwYWR4PSgwIGlmIGNvbHVtbiA9PSAwIGVsc2UgMTAsIDApKVxuICAgICAgICBiYWRnZSA9IHRrLkNhbnZhcyhjYXJkLCB3aWR0aD00MCwgaGVpZ2h0PTQwLCBiZz1DT0xPUlNbJ2NhcmQnXSwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApXG4gICAgICAgIGJhZGdlLnBhY2soYW5jaG9yPSd3JylcbiAgICAgICAgYmFkZ2UuY3JlYXRlX292YWwoMiwgMiwgMzgsIDM4LCBmaWxsPUNPTE9SU1snYmFkZ2UnXSwgb3V0bGluZT0nJylcbiAgICAgICAgYmFkZ2UuY3JlYXRlX3RleHQoMjAsIDIwLCB0ZXh0PW51bWJlciwgZmlsbD1DT0xPUlNbJ3doaXRlJ10sIGZvbnQ9Zm9udHNbJ2JhZGdlJ10pXG4gICAgICAgIHRrLkxhYmVsKGNhcmQsIHRleHQ9dGl0bGUsIGZvbnQ9Zm9udHNbJ2hlYWRpbmcnXSwgYmc9Q09MT1JTWydjYXJkJ10sIGZnPUNPTE9SU1snaW5rJ10sXG4gICAgICAgICAgICAgICAgIHdyYXBsZW5ndGg9MjYwLCBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JykucGFjayhmaWxsPSd4JywgcGFkeT0oMTQsIDYpKVxuICAgICAgICB0ay5MYWJlbChjYXJkLCB0ZXh0PWNvcHksIGZvbnQ9Zm9udHNbJ2JvZHknXSwgYmc9Q09MT1JTWydjYXJkJ10sIGZnPUNPTE9SU1snbXV0ZWQnXSxcbiAgICAgICAgICAgICAgICAgd3JhcGxlbmd0aD0yNjAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKS5wYWNrKGZpbGw9J3gnKVxuICAgICAgICBzdGVwcy5jb2x1bW5jb25maWd1cmUoY29sdW1uLCB3ZWlnaHQ9MSwgdW5pZm9ybT0nc3RlcHMnKVxuXG4gICAgcHJpdmFjeSA9IHRrLkZyYW1lKGJvZHksIGJnPUNPTE9SU1snd2hpdGUnXSwgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTgsIHBhZHk9MTQpXG4gICAgcHJpdmFjeS5wYWNrKGZpbGw9J3gnLCBwYWR5PSgwLCAyMikpXG4gICAgdGsuTGFiZWwocHJpdmFjeSwgdGV4dD0nWW91ciBwcml2YWN5JywgZm9udD1mb250c1snbGFiZWwnXSwgYmc9Q09MT1JTWyd3aGl0ZSddLFxuICAgICAgICAgICAgIGZnPUNPTE9SU1snaW5rJ10pLnBhY2soYW5jaG9yPSd3JylcbiAgICB0ay5MYWJlbChcbiAgICAgICAgcHJpdmFjeSxcbiAgICAgICAgdGV4dD0nV2UgbmV2ZXIgY29sbGVjdCBwYXNzd29yZHMsIGZpbGVzLCBwaG90b3MsIGJyb3dzaW5nIGhpc3RvcnksIHNlcmlhbCBudW1iZXJzLCBvciBuZXR3b3JrIGFkZHJlc3Nlcy4gJ1xuICAgICAgICAgICAgICdBZnRlciBhcHByb3ZhbCwgc2V0dXAgcHJvZ3Jlc3MgYW5kIGRpYWdub3N0aWMgbWVzc2FnZXMgYXJlIHNlbnQgdG8gb3VyIHRlYW0uJyxcbiAgICAgICAgZm9udD1mb250c1snc21hbGwnXSwgYmc9Q09MT1JTWyd3aGl0ZSddLCBmZz1DT0xPUlNbJ211dGVkJ10sIHdyYXBsZW5ndGg9OTgwLFxuICAgICAgICBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JyxcbiAgICApLnBhY2soZmlsbD0neCcsIHBhZHk9KDQsIDApKVxuXG4gICAgcGxhbl9ibHVyYiwgcGxhbl9kZXRhaWxzID0gc2V0dXBfcGxhbihvcmlnaW4pXG4gICAgZGV0YWlsc19jYXJkID0gdGsuRnJhbWUoYm9keSwgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTgsIHBhZHk9MTQpXG4gICAgZGV0YWlsc19jYXJkLnBhY2soZmlsbD0neCcsIHBhZHk9KDAsIDIyKSlcbiAgICB0ay5MYWJlbChkZXRhaWxzX2NhcmQsIHRleHQ9J0lmIHlvdSBhcHByb3ZlLCB0aGlzIGNvbXB1dGVyIHdpbGwnLCBmb250PWZvbnRzWydsYWJlbCddLFxuICAgICAgICAgICAgIGJnPUNPTE9SU1snY2FyZCddLCBmZz1DT0xPUlNbJ2luayddKS5wYWNrKGFuY2hvcj0ndycpXG4gICAgdGsuTGFiZWwoZGV0YWlsc19jYXJkLCB0ZXh0PXBsYW5fYmx1cmIsIGZvbnQ9Zm9udHNbJ3NtYWxsJ10sIGJnPUNPTE9SU1snY2FyZCddLCBmZz1DT0xPUlNbJ211dGVkJ10sXG4gICAgICAgICAgICAgd3JhcGxlbmd0aD05ODAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKS5wYWNrKGZpbGw9J3gnLCBwYWR5PSg0LCAxMCkpXG4gICAgZGV0YWlsc192aXNpYmxlID0geyd2YWx1ZSc6IEZhbHNlfVxuICAgIGRldGFpbHNfYm9keSA9IHRrLkZyYW1lKGRldGFpbHNfY2FyZCwgYmc9JyMxYzE5MTcnKVxuICAgIGRldGFpbHNfdGV4dCA9IHNjcm9sbGVkdGV4dC5TY3JvbGxlZFRleHQoZGV0YWlsc19ib2R5LCBoZWlnaHQ9MTAsIHdyYXA9J3dvcmQnLCBmb250PWZvbnRzWydtb25vJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZz0nIzFjMTkxNycsIGZnPScjZTdlMGQ2JywgcmVsaWVmPSdmbGF0JywgYmQ9MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGJhY2tncm91bmQ9JyNlN2UwZDYnKVxuICAgIGRldGFpbHNfdGV4dC5pbnNlcnQoJzEuMCcsIHBsYW5fZGV0YWlscylcbiAgICBkZXRhaWxzX3RleHQuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG4gICAgZGV0YWlsc190ZXh0LnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlLCBwYWR4PTEyLCBwYWR5PTEyKVxuXG4gICAgZGVmIHRvZ2dsZV9kZXRhaWxzKCk6XG4gICAgICAgIGRldGFpbHNfdmlzaWJsZVsndmFsdWUnXSA9IG5vdCBkZXRhaWxzX3Zpc2libGVbJ3ZhbHVlJ11cbiAgICAgICAgaWYgZGV0YWlsc192aXNpYmxlWyd2YWx1ZSddOlxuICAgICAgICAgICAgZGV0YWlsc19ib2R5LnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlLCBwYWR5PSg0LCAwKSlcbiAgICAgICAgICAgIGRldGFpbHNfYnV0dG9uLmNvbmZpZ3VyZSh0ZXh0PSdIaWRlIHRoZSBkZXRhaWxzJylcbiAgICAgICAgZWxzZTpcbiAgICAgICAgICAgIGRldGFpbHNfYm9keS5wYWNrX2ZvcmdldCgpXG4gICAgICAgICAgICBkZXRhaWxzX2J1dHRvbi5jb25maWd1cmUodGV4dD0nR2l2ZSBtZSB0aGUgZGV0YWlscycpXG5cbiAgICBkZXRhaWxzX2J1dHRvbiA9IHRrLkJ1dHRvbihkZXRhaWxzX2NhcmQsIHRleHQ9J0dpdmUgbWUgdGhlIGRldGFpbHMnLCBjb21tYW5kPXRvZ2dsZV9kZXRhaWxzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9Zm9udHNbJ2JvZHknXSwgcmVsaWVmPSdmbGF0JywgYmQ9MCwgcGFkeD0xMiwgcGFkeT04LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPUNPTE9SU1snd2hpdGUnXSwgZmc9Q09MT1JTWydpbmsnXSwgY3Vyc29yPSdoYW5kMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10pXG4gICAgZGV0YWlsc19idXR0b24ucGFjayhhbmNob3I9J3cnKVxuXG4gICAgZm9ybV9jYXJkID0gdGsuRnJhbWUoYm9keSwgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MjQsIHBhZHk9MjIpXG4gICAgZm9ybV9jYXJkLnBhY2soZmlsbD0neCcpXG4gICAgdGsuTGFiZWwoZm9ybV9jYXJkLCB0ZXh0PSdTZW5kIGEgcmVxdWVzdCcsIGZvbnQ9Zm9udHNbJ2hlYWRpbmcnXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkucGFjayhhbmNob3I9J3cnKVxuICAgIHRrLkxhYmVsKGZvcm1fY2FyZCwgdGV4dD0nV2UgbmVlZCBhIG5hbWUsIGVtYWlsLCBhbmQgcGhvbmUgc28gd2UgY2FuIHJlYWNoIHlvdSBhYm91dCB0aGlzIGNvbXB1dGVyLicsXG4gICAgICAgICAgICAgZm9udD1mb250c1snc21hbGwnXSwgYmc9Q09MT1JTWydjYXJkJ10sIGZnPUNPTE9SU1snbXV0ZWQnXSkucGFjayhhbmNob3I9J3cnLCBwYWR5PSg0LCAxNikpXG5cbiAgICBmaWVsZHMgPSB0ay5GcmFtZShmb3JtX2NhcmQsIGJnPUNPTE9SU1snY2FyZCddKVxuICAgIGZpZWxkcy5wYWNrKGZpbGw9J3gnKVxuXG4gICAgZGVmIGxhYmVsZWRfZW50cnkocGFyZW50LCBsYWJlbCwgcm93KTpcbiAgICAgICAgdGsuTGFiZWwocGFyZW50LCB0ZXh0PWxhYmVsLCBmb250PWZvbnRzWydsYWJlbCddLCBiZz1DT0xPUlNbJ2NhcmQnXSxcbiAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkuZ3JpZChyb3c9cm93LCBjb2x1bW49MCwgc3RpY2t5PSd3JywgcGFkeT0oMCwgOCkgaWYgcm93IGVsc2UgKDAsIDEyKSlcbiAgICAgICAgZW50cnkgPSB0ay5FbnRyeShwYXJlbnQsIGZvbnQ9Zm9udHNbJ2JvZHknXSwgcmVsaWVmPSdmbGF0JywgYmQ9MCwgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSwgaGlnaGxpZ2h0Y29sb3I9Q09MT1JTWydhY2NlbnQnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBiZz1DT0xPUlNbJ3doaXRlJ10sIGZnPUNPTE9SU1snaW5rJ10sIGluc2VydGJhY2tncm91bmQ9Q09MT1JTWydpbmsnXSlcbiAgICAgICAgZW50cnkuZ3JpZChyb3c9cm93LCBjb2x1bW49MSwgc3RpY2t5PSd3ZScsIHBhZHg9KDE2LCAwKSwgcGFkeT0oMCwgOCkgaWYgcm93IGVsc2UgKDAsIDEyKSwgaXBhZHk9MTAsIGlwYWR4PTgpXG4gICAgICAgIHJldHVybiBlbnRyeVxuXG4gICAgbmFtZV9lbnRyeSA9IGxhYmVsZWRfZW50cnkoZmllbGRzLCAnWW91ciBuYW1lJywgMClcbiAgICBlbWFpbF9lbnRyeSA9IGxhYmVsZWRfZW50cnkoZmllbGRzLCAnRW1haWwnLCAxKVxuICAgIHBob25lX2VudHJ5ID0gbGFiZWxlZF9lbnRyeShmaWVsZHMsICdQaG9uZScsIDIpXG4gICAgbm90ZV9lbnRyeSA9IGxhYmVsZWRfZW50cnkoZmllbGRzLCAnTm90ZSAob3B0aW9uYWwpJywgMylcbiAgICBmaWVsZHMuY29sdW1uY29uZmlndXJlKDEsIHdlaWdodD0xKVxuXG4gICAgYWN0aW9uID0gdGsuU3RyaW5nVmFyKHZhbHVlPSd3YWl0aW5nJylcbiAgICBidXR0b25zID0gdGsuRnJhbWUoZm9ybV9jYXJkLCBiZz1DT0xPUlNbJ2NhcmQnXSlcbiAgICBidXR0b25zLnBhY2soZmlsbD0neCcsIHBhZHk9KDEwLCAwKSlcblxuICAgIGRlZiBzdHlsZWRfYnV0dG9uKHBhcmVudCwgdGV4dCwgY29tbWFuZCwgcHJpbWFyeT1GYWxzZSk6XG4gICAgICAgIGlmIHByaW1hcnk6XG4gICAgICAgICAgICBidXR0b24gPSB0ay5CdXR0b24oXG4gICAgICAgICAgICAgICAgcGFyZW50LCB0ZXh0PXRleHQsIGNvbW1hbmQ9Y29tbWFuZCwgZm9udD1mb250c1snYnV0dG9uJ10sIHJlbGllZj0nZmxhdCcsIGJkPTAsXG4gICAgICAgICAgICAgICAgcGFkeD0yMiwgcGFkeT0xMiwgYmc9Q09MT1JTWydhY2NlbnQnXSwgYWN0aXZlYmFja2dyb3VuZD1DT0xPUlNbJ2FjY2VudF9ob3ZlciddLFxuICAgICAgICAgICAgICAgIGZnPUNPTE9SU1snd2hpdGUnXSwgYWN0aXZlZm9yZWdyb3VuZD1DT0xPUlNbJ3doaXRlJ10sIGN1cnNvcj0naGFuZDInLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkZm9yZWdyb3VuZD0nI2VkY2RjOCcsXG4gICAgICAgICAgICApXG4gICAgICAgIGVsc2U6XG4gICAgICAgICAgICBidXR0b24gPSB0ay5CdXR0b24oXG4gICAgICAgICAgICAgICAgcGFyZW50LCB0ZXh0PXRleHQsIGNvbW1hbmQ9Y29tbWFuZCwgZm9udD1mb250c1snYm9keSddLCByZWxpZWY9J2ZsYXQnLCBiZD0wLFxuICAgICAgICAgICAgICAgIHBhZHg9MTYsIHBhZHk9MTIsIGJnPUNPTE9SU1snd2hpdGUnXSwgYWN0aXZlYmFja2dyb3VuZD1DT0xPUlNbJ3BhcGVyJ10sXG4gICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSwgYWN0aXZlZm9yZWdyb3VuZD1DT0xPUlNbJ2luayddLCBjdXJzb3I9J2hhbmQyJyxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHR0aGlja25lc3M9MSwgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSxcbiAgICAgICAgICAgIClcbiAgICAgICAgcmV0dXJuIGJ1dHRvblxuXG4gICAgc2VuZF9idXR0b24gPSBzdHlsZWRfYnV0dG9uKGJ1dHRvbnMsICdTZW5kIHJlcXVlc3QnLCBsYW1iZGE6IE5vbmUsIHByaW1hcnk9VHJ1ZSlcbiAgICBzZW5kX2J1dHRvbi5wYWNrKHNpZGU9J2xlZnQnKVxuICAgIHBhdXNlX2J1dHRvbiA9IHN0eWxlZF9idXR0b24oYnV0dG9ucywgJ1BhdXNlJywgbGFtYmRhOiBOb25lKVxuICAgIHJlc3VtZV9idXR0b24gPSBzdHlsZWRfYnV0dG9uKGJ1dHRvbnMsICdSZXN1bWUnLCBsYW1iZGE6IE5vbmUpXG4gICAgcXVpdF9idXR0b24gPSBzdHlsZWRfYnV0dG9uKGJ1dHRvbnMsICdRdWl0Jywgcm9vdC5kZXN0cm95KVxuICAgIHF1aXRfYnV0dG9uLnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDEwLCAwKSlcblxuICAgIHNldHVwX3ZpZXcgPSB0ay5GcmFtZShib2R5LCBiZz1DT0xPUlNbJ3BhcGVyJ10pXG4gICAgc2V0dXBfaGVhZGluZyA9IHRrLkxhYmVsKHNldHVwX3ZpZXcsIHRleHQ9J1NldHRpbmcgdXAgdGhpcyBjb21wdXRlcicsIGZvbnQ9Zm9udHNbJ2Rpc3BsYXknXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmc9Q09MT1JTWydwYXBlciddLCBmZz1DT0xPUlNbJ2luayddLCB3cmFwbGVuZ3RoPTk4MCwganVzdGlmeT0nbGVmdCcsIGFuY2hvcj0ndycpXG4gICAgc2V0dXBfaGVhZGluZy5wYWNrKGZpbGw9J3gnKVxuICAgIHNldHVwX2NvcHkgPSB0ay5MYWJlbChcbiAgICAgICAgc2V0dXBfdmlldyxcbiAgICAgICAgdGV4dD0nWW91IGNhbiBrZWVwIHVzaW5nIHRoaXMgY29tcHV0ZXIuIFdlIHdpbGwgaGFuZGxlIHRoZSByZXN0IGluIHRoZSBiYWNrZ3JvdW5kIGFuZCB0ZWxsIHlvdSB3aGF0IGlzIGhhcHBlbmluZy4nLFxuICAgICAgICBmb250PWZvbnRzWydzdWJ0aXRsZSddLCBiZz1DT0xPUlNbJ3BhcGVyJ10sIGZnPUNPTE9SU1snbXV0ZWQnXSwgd3JhcGxlbmd0aD05ODAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnLFxuICAgIClcbiAgICBzZXR1cF9jb3B5LnBhY2soZmlsbD0neCcsIHBhZHk9KDgsIDIyKSlcblxuICAgIHNldHVwX2NhcmQgPSB0ay5GcmFtZShzZXR1cF92aWV3LCBiZz1DT0xPUlNbJ2NhcmQnXSwgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MjQsIHBhZHk9MjIpXG4gICAgc2V0dXBfY2FyZC5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9VHJ1ZSlcbiAgICB0ay5MYWJlbChzZXR1cF9jYXJkLCB0ZXh0PSdXaGF0IGlzIGhhcHBlbmluZycsIGZvbnQ9Zm9udHNbJ2hlYWRpbmcnXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkucGFjayhhbmNob3I9J3cnLCBwYWR5PSgwLCAxMikpXG5cbiAgICBzZXR1cF9yb3dzID0gW11cbiAgICBmb3IgaW5kZXgsICh0aXRsZSwgZGV0YWlsKSBpbiBlbnVtZXJhdGUoU0VUVVBfU1RFUFMpOlxuICAgICAgICByb3cgPSB0ay5GcmFtZShzZXR1cF9jYXJkLCBiZz1DT0xPUlNbJ2NhcmQnXSwgcGFkeT04KVxuICAgICAgICByb3cucGFjayhmaWxsPSd4JylcbiAgICAgICAgYmFkZ2UgPSB0ay5DYW52YXMocm93LCB3aWR0aD0yOCwgaGVpZ2h0PTI4LCBiZz1DT0xPUlNbJ2NhcmQnXSwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApXG4gICAgICAgIGJhZGdlLnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDAsIDEyKSlcbiAgICAgICAgY2lyY2xlID0gYmFkZ2UuY3JlYXRlX292YWwoNCwgNCwgMjQsIDI0LCBvdXRsaW5lPUNPTE9SU1snbGluZSddLCB3aWR0aD0yLCBmaWxsPUNPTE9SU1snY2FyZCddKVxuICAgICAgICBtYXJrID0gYmFkZ2UuY3JlYXRlX3RleHQoMTQsIDE0LCB0ZXh0PXN0cihpbmRleCArIDEpLCBmaWxsPUNPTE9SU1snbXV0ZWQnXSwgZm9udD1mb250c1snc21hbGwnXSlcbiAgICAgICAgdGV4dF9ibG9jayA9IHRrLkZyYW1lKHJvdywgYmc9Q09MT1JTWydjYXJkJ10pXG4gICAgICAgIHRleHRfYmxvY2sucGFjayhzaWRlPSdsZWZ0JywgZmlsbD0neCcsIGV4cGFuZD1UcnVlKVxuICAgICAgICB0aXRsZV9sYWJlbCA9IHRrLkxhYmVsKHRleHRfYmxvY2ssIHRleHQ9dGl0bGUsIGZvbnQ9Zm9udHNbJ2hlYWRpbmcnXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydtdXRlZCddLCBhbmNob3I9J3cnKVxuICAgICAgICB0aXRsZV9sYWJlbC5wYWNrKGZpbGw9J3gnKVxuICAgICAgICBkZXRhaWxfbGFiZWwgPSB0ay5MYWJlbCh0ZXh0X2Jsb2NrLCB0ZXh0PWRldGFpbCwgZm9udD1mb250c1snc21hbGwnXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnPUNPTE9SU1snbXV0ZWQnXSwgd3JhcGxlbmd0aD03NjAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgICAgICBkZXRhaWxfbGFiZWwucGFjayhmaWxsPSd4JylcbiAgICAgICAgc2V0dXBfcm93cy5hcHBlbmQoe1xuICAgICAgICAgICAgJ2JhZGdlJzogYmFkZ2UsICdjaXJjbGUnOiBjaXJjbGUsICdtYXJrJzogbWFyayxcbiAgICAgICAgICAgICd0aXRsZSc6IHRpdGxlX2xhYmVsLCAnZGV0YWlsJzogZGV0YWlsX2xhYmVsLCAnZGVmYXVsdCc6IGRldGFpbCxcbiAgICAgICAgfSlcblxuICAgIGFjdGl2aXR5ID0gdGsuRnJhbWUoc2V0dXBfdmlldywgYmc9Q09MT1JTWyd3aGl0ZSddLCBoaWdobGlnaHRiYWNrZ3JvdW5kPUNPTE9SU1snbGluZSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTgsIHBhZHk9MTQpXG4gICAgYWN0aXZpdHkucGFjayhmaWxsPSd4JywgcGFkeT0oMTgsIDApKVxuICAgIHRrLkxhYmVsKGFjdGl2aXR5LCB0ZXh0PSdSaWdodCBub3cnLCBmb250PWZvbnRzWydsYWJlbCddLCBiZz1DT0xPUlNbJ3doaXRlJ10sXG4gICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkucGFjayhhbmNob3I9J3cnKVxuICAgIGFjdGl2aXR5X3RleHQgPSB0ay5TdHJpbmdWYXIodmFsdWU9J1dhaXRpbmcgdG8gc3RhcnTigKYnKVxuICAgIGFjdGl2aXR5X2xhYmVsID0gdGsuTGFiZWwoYWN0aXZpdHksIHRleHR2YXJpYWJsZT1hY3Rpdml0eV90ZXh0LCBmb250PWZvbnRzWydib2R5J10sIGJnPUNPTE9SU1snd2hpdGUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnPUNPTE9SU1snbXV0ZWQnXSwgd3JhcGxlbmd0aD05ODAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgIGFjdGl2aXR5X2xhYmVsLnBhY2soZmlsbD0neCcsIHBhZHk9KDQsIDApKVxuICAgIGNvbnNvbGVfY2FyZCA9IHRrLkZyYW1lKHNldHVwX3ZpZXcsIGJnPScjMWMxOTE3JywgaGlnaGxpZ2h0YmFja2dyb3VuZD1DT0xPUlNbJ2xpbmUnXSwgaGlnaGxpZ2h0dGhpY2tuZXNzPTEpXG4gICAgY29uc29sZV9jYXJkLnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlLCBwYWR5PSgxOCwgMCkpXG4gICAgdGsuTGFiZWwoY29uc29sZV9jYXJkLCB0ZXh0PSdDb21tYW5kcycsIGZvbnQ9Zm9udHNbJ2xhYmVsJ10sIGJnPScjMWMxOTE3JyxcbiAgICAgICAgICAgICBmZz0nI2M0YjhhYScpLnBhY2soYW5jaG9yPSd3JywgcGFkeD0xNCwgcGFkeT0oMTIsIDApKVxuICAgIGNvbnNvbGUgPSBzY3JvbGxlZHRleHQuU2Nyb2xsZWRUZXh0KGNvbnNvbGVfY2FyZCwgaGVpZ2h0PTgsIHdyYXA9J3dvcmQnLCBmb250PWZvbnRzWydtb25vJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmc9JyMxYzE5MTcnLCBmZz0nI2U3ZTBkNicsIHJlbGllZj0nZmxhdCcsIGJkPTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0YmFja2dyb3VuZD0nI2U3ZTBkNicpXG4gICAgY29uc29sZS5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9VHJ1ZSwgcGFkeD0xMiwgcGFkeT0oNiwgMTIpKVxuICAgIGNvbnNvbGUuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG5cbiAgICBkZWYgYXBwZW5kX2NvbnNvbGUobGluZSk6XG4gICAgICAgIGNvbnNvbGUuY29uZmlndXJlKHN0YXRlPSdub3JtYWwnKVxuICAgICAgICBjb25zb2xlLmluc2VydCgnZW5kJywgbGluZSArICdcXG4nKVxuICAgICAgICBjb25zb2xlLnNlZSgnZW5kJylcbiAgICAgICAgY29uc29sZS5jb25maWd1cmUoc3RhdGU9J2Rpc2FibGVkJylcbiAgICBzZXR1cF9idXR0b25zID0gdGsuRnJhbWUoc2V0dXBfdmlldywgYmc9Q09MT1JTWydwYXBlciddKVxuICAgIHNldHVwX2J1dHRvbnMucGFjayhmaWxsPSd4JywgcGFkeT0oMTgsIDApKVxuICAgIHNldHVwX3F1aXQgPSBzdHlsZWRfYnV0dG9uKHNldHVwX2J1dHRvbnMsICdRdWl0Jywgcm9vdC5kZXN0cm95KVxuICAgIHNldHVwX3F1aXQucGFjayhzaWRlPSdsZWZ0JylcbiAgICBzZXR1cF9wYXVzZSA9IHN0eWxlZF9idXR0b24oc2V0dXBfYnV0dG9ucywgJ1BhdXNlJywgbGFtYmRhOiBOb25lKVxuICAgIHNldHVwX3Jlc3VtZSA9IHN0eWxlZF9idXR0b24oc2V0dXBfYnV0dG9ucywgJ1Jlc3VtZScsIGxhbWJkYTogTm9uZSlcblxuICAgIHN0YXR1c192aWV3ID0gdGsuRnJhbWUoYm9keSwgYmc9Q09MT1JTWydwYXBlciddKVxuICAgIHN0YXR1c19oZWFkaW5nID0gdGsuTGFiZWwoc3RhdHVzX3ZpZXcsIHRleHQ9J1RoaXMgY29tcHV0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udD1mb250c1sndGl0bGUnXSwgYmc9Q09MT1JTWydwYXBlciddLCBmZz1DT0xPUlNbJ2luayddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcGxlbmd0aD03MjAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgIHN0YXR1c19oZWFkaW5nLnBhY2soZmlsbD0neCcpXG4gICAgc3RhdHVzX2NvcHkgPSB0ay5MYWJlbChcbiAgICAgICAgc3RhdHVzX3ZpZXcsXG4gICAgICAgIHRleHQ9J1RoZSB3b3JrZXIgc3RheXMgb24gYWZ0ZXIgeW91IGNsb3NlIHRoaXMgd2luZG93LiBQYXVzZSBpdCB3aGVuIHlvdSBuZWVkIHRoZSBtYWNoaW5lIHRvIHlvdXJzZWxmLicsXG4gICAgICAgIGZvbnQ9Zm9udHNbJ3NtYWxsJ10sIGJnPUNPTE9SU1sncGFwZXInXSwgZmc9Q09MT1JTWydtdXRlZCddLCB3cmFwbGVuZ3RoPTcyMCxcbiAgICAgICAganVzdGlmeT0nbGVmdCcsIGFuY2hvcj0ndycsXG4gICAgKVxuICAgIHN0YXR1c19jb3B5LnBhY2soZmlsbD0neCcsIHBhZHk9KDQsIDEyKSlcblxuICAgIGZhY3RzID0gdGsuRnJhbWUoc3RhdHVzX3ZpZXcsIGJnPUNPTE9SU1snY2FyZCddLCBoaWdobGlnaHRiYWNrZ3JvdW5kPUNPTE9SU1snbGluZSddLFxuICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTYsIHBhZHk9MTIpXG4gICAgZmFjdHMucGFjayhmaWxsPSd4JylcbiAgICBzdGF0ZV92YWx1ZSA9IHRrLlN0cmluZ1Zhcih2YWx1ZT0nQ29ubmVjdGluZ+KApicpXG4gICAgYWN0aXZpdHlfdmFsdWUgPSB0ay5TdHJpbmdWYXIodmFsdWU9J0NoZWNraW5n4oCmJylcbiAgICB0YXNrc192YWx1ZSA9IHRrLlN0cmluZ1Zhcih2YWx1ZT0nMCcpXG4gICAgbWVtb3J5X3ZhbHVlID0gdGsuU3RyaW5nVmFyKHZhbHVlPSfigJQnKVxuICAgIGZhY3Rfc3BlY3MgPSAoXG4gICAgICAgICgnU3RhdHVzJywgc3RhdGVfdmFsdWUpLFxuICAgICAgICAoJ1JpZ2h0IG5vdycsIGFjdGl2aXR5X3ZhbHVlKSxcbiAgICAgICAgKCdUYXNrcyBmaW5pc2hlZCcsIHRhc2tzX3ZhbHVlKSxcbiAgICAgICAgKCdGcmVlIG1lbW9yeScsIG1lbW9yeV92YWx1ZSksXG4gICAgKVxuICAgIGZhY3RfbGFiZWxzID0gW11cbiAgICBmb3IgY29sdW1uLCAobGFiZWwsIHZhcmlhYmxlKSBpbiBlbnVtZXJhdGUoZmFjdF9zcGVjcyk6XG4gICAgICAgIGNlbGwgPSB0ay5GcmFtZShmYWN0cywgYmc9Q09MT1JTWydjYXJkJ10pXG4gICAgICAgIGNlbGwuZ3JpZChyb3c9MCwgY29sdW1uPWNvbHVtbiwgc3RpY2t5PSdudycsIHBhZHg9KDAgaWYgY29sdW1uID09IDAgZWxzZSAxOCwgMCkpXG4gICAgICAgIHRrLkxhYmVsKGNlbGwsIHRleHQ9bGFiZWwsIGZvbnQ9Zm9udHNbJ2xhYmVsJ10sIGJnPUNPTE9SU1snY2FyZCddLFxuICAgICAgICAgICAgICAgICBmZz1DT0xPUlNbJ211dGVkJ10pLnBhY2soYW5jaG9yPSd3JylcbiAgICAgICAgdmFsdWVfbGFiZWwgPSB0ay5MYWJlbChjZWxsLCB0ZXh0dmFyaWFibGU9dmFyaWFibGUsIGZvbnQ9Zm9udHNbJ2JvZHknXSwgYmc9Q09MT1JTWydjYXJkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSwgd3JhcGxlbmd0aD0xNjAsIGp1c3RpZnk9J2xlZnQnLCBhbmNob3I9J3cnKVxuICAgICAgICB2YWx1ZV9sYWJlbC5wYWNrKGFuY2hvcj0ndycsIHBhZHk9KDIsIDApKVxuICAgICAgICBmYWN0X2xhYmVscy5hcHBlbmQodmFsdWVfbGFiZWwpXG4gICAgICAgIGZhY3RzLmNvbHVtbmNvbmZpZ3VyZShjb2x1bW4sIHdlaWdodD0xKVxuXG4gICAgY2hhcnRzID0gdGsuRnJhbWUoc3RhdHVzX3ZpZXcsIGJnPUNPTE9SU1sncGFwZXInXSlcbiAgICBjaGFydHMucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUsIHBhZHk9KDEyLCAwKSlcbiAgICBtZW1vcnlfaGlzdG9yeSA9IGRlcXVlKG1heGxlbj05MClcbiAgICB0YXNrc19oaXN0b3J5ID0gZGVxdWUobWF4bGVuPTkwKVxuXG4gICAgZGVmIGNoYXJ0X2NhcmQocGFyZW50LCB0aXRsZSwgY29sdW1uKTpcbiAgICAgICAgY2FyZCA9IHRrLkZyYW1lKHBhcmVudCwgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodGJhY2tncm91bmQ9Q09MT1JTWydsaW5lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHR0aGlja25lc3M9MSwgcGFkeD0xMiwgcGFkeT0xMClcbiAgICAgICAgY2FyZC5ncmlkKHJvdz0wLCBjb2x1bW49Y29sdW1uLCBzdGlja3k9J25zZXcnLCBwYWR4PSgwIGlmIGNvbHVtbiA9PSAwIGVsc2UgMTAsIDApKVxuICAgICAgICB0ay5MYWJlbChjYXJkLCB0ZXh0PXRpdGxlLCBmb250PWZvbnRzWydsYWJlbCddLCBiZz1DT0xPUlNbJ2NhcmQnXSxcbiAgICAgICAgICAgICAgICAgZmc9Q09MT1JTWydpbmsnXSkucGFjayhhbmNob3I9J3cnKVxuICAgICAgICBjYW52YXMgPSB0ay5DYW52YXMoY2FyZCwgaGVpZ2h0PTEyMCwgYmc9Q09MT1JTWydjYXJkJ10sIGhpZ2hsaWdodHRoaWNrbmVzcz0wKVxuICAgICAgICBjYW52YXMucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUsIHBhZHk9KDgsIDApKVxuICAgICAgICBwYXJlbnQuY29sdW1uY29uZmlndXJlKGNvbHVtbiwgd2VpZ2h0PTEpXG4gICAgICAgIHJldHVybiBjYW52YXNcblxuICAgIG1lbW9yeV9jaGFydCA9IGNoYXJ0X2NhcmQoY2hhcnRzLCAnTWVtb3J5IGluIHVzZScsIDApXG4gICAgdGFza3NfY2hhcnQgPSBjaGFydF9jYXJkKGNoYXJ0cywgJ1Rhc2tzIGZpbmlzaGVkJywgMSlcbiAgICBjaGFydHMucm93Y29uZmlndXJlKDAsIHdlaWdodD0xKVxuXG4gICAgc3RhdHVzX25vdGUgPSB0ay5GcmFtZShzdGF0dXNfdmlldywgYmc9Q09MT1JTWyd3aGl0ZSddLCBoaWdobGlnaHRiYWNrZ3JvdW5kPUNPTE9SU1snbGluZSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTEsIHBhZHg9MTQsIHBhZHk9MTApXG4gICAgc3RhdHVzX25vdGUucGFjayhmaWxsPSd4JywgcGFkeT0oMTIsIDApKVxuICAgIHRrLkxhYmVsKHN0YXR1c19ub3RlLCB0ZXh0PSdQYXVzZScsIGZvbnQ9Zm9udHNbJ2xhYmVsJ10sIGJnPUNPTE9SU1snd2hpdGUnXSxcbiAgICAgICAgICAgICBmZz1DT0xPUlNbJ2luayddKS5wYWNrKGFuY2hvcj0ndycpXG4gICAgc3RhdHVzX25vdGVfdGV4dCA9IHRrLkxhYmVsKFxuICAgICAgICBzdGF0dXNfbm90ZSxcbiAgICAgICAgdGV4dD0nUGF1c2Ugc3RvcHMgbmV3IHdvcmsuIEEgdGFzayBhbHJlYWR5IHJ1bm5pbmcgaXMgYWxsb3dlZCB0byBmaW5pc2guJyxcbiAgICAgICAgZm9udD1mb250c1snc21hbGwnXSwgYmc9Q09MT1JTWyd3aGl0ZSddLCBmZz1DT0xPUlNbJ211dGVkJ10sIHdyYXBsZW5ndGg9NzIwLFxuICAgICAgICBqdXN0aWZ5PSdsZWZ0JywgYW5jaG9yPSd3JyxcbiAgICApXG4gICAgc3RhdHVzX25vdGVfdGV4dC5wYWNrKGZpbGw9J3gnLCBwYWR5PSgyLCAwKSlcblxuICAgIHN0YXR1c19idXR0b25zID0gdGsuRnJhbWUoc3RhdHVzX3ZpZXcsIGJnPUNPTE9SU1sncGFwZXInXSlcbiAgICBzdGF0dXNfYnV0dG9ucy5wYWNrKGZpbGw9J3gnLCBwYWR5PSgxMiwgMCkpXG4gICAgc3RhdHVzX3BhdXNlID0gc3R5bGVkX2J1dHRvbihzdGF0dXNfYnV0dG9ucywgJ1BhdXNlJywgbGFtYmRhOiBOb25lLCBwcmltYXJ5PVRydWUpXG4gICAgc3RhdHVzX3Jlc3VtZSA9IHN0eWxlZF9idXR0b24oc3RhdHVzX2J1dHRvbnMsICdSZXN1bWUnLCBsYW1iZGE6IE5vbmUsIHByaW1hcnk9VHJ1ZSlcbiAgICBkZWYgZWRpdF9wcmVmZXJlbmNlcygpOlxuICAgICAgICBzYXZlZCA9IGludml0YXRpb25fcGF5bG9hZCgpXG4gICAgICAgIGlmIG5vdCBzYXZlZDpcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB3aW5kb3cgPSB0ay5Ub3BsZXZlbChyb290KVxuICAgICAgICB3aW5kb3cudGl0bGUoJ0JhY2tncm91bmQgd29yayBzZXR0aW5ncycpXG4gICAgICAgIHZhbHVlcyA9IHdvcmtlcl9zdGF0dXMoY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSwgb3JpZ2luKSwgc2F2ZWRbJ3Rva2VuJ10pWydleGVjdXRpb25fcG9saWN5J11cbiAgICAgICAgdmFyaWFibGVzID0ge31cbiAgICAgICAgZm9yIGtleSwgbGFiZWwgaW4gWygnb3duZXJfbWVtb3J5X2xpbWl0X21iJywgJ01heGltdW0gUkFNIChNaUIpJyksICgnb3duZXJfY3B1X2xpbWl0JywgJ01heGltdW0gQ1BVIGNvcmVzJyldOlxuICAgICAgICAgICAgdGsuTGFiZWwod2luZG93LCB0ZXh0PWxhYmVsKS5wYWNrKGFuY2hvcj0ndycsIHBhZHg9MTYpXG4gICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHRrLlN0cmluZ1Zhcih2YWx1ZT1zdHIodmFsdWVzW2tleV0pKVxuICAgICAgICAgICAgdGsuRW50cnkod2luZG93LCB0ZXh0dmFyaWFibGU9dmFyaWFibGVzW2tleV0pLnBhY2soZmlsbD0neCcsIHBhZHg9MTYsIHBhZHk9NClcbiAgICAgICAgZm9yIGtleSwgbGFiZWwgaW4gWygnaWRsZV9vbmx5JywgJ09ubHkgd2hlbiBpZGxlIGZvciBmaXZlIG1pbnV0ZXMnKSwgKCdhY19vbmx5JywgJ09ubHkgb24gbWFpbnMgcG93ZXInKV06XG4gICAgICAgICAgICB2YXJpYWJsZXNba2V5XSA9IHRrLkJvb2xlYW5WYXIodmFsdWU9dmFsdWVzW2tleV0pXG4gICAgICAgICAgICB0ay5DaGVja2J1dHRvbih3aW5kb3csIHRleHQ9bGFiZWwsIHZhcmlhYmxlPXZhcmlhYmxlc1trZXldKS5wYWNrKGFuY2hvcj0ndycsIHBhZHg9MTYpXG4gICAgICAgIGZlZWRiYWNrID0gdGsuU3RyaW5nVmFyKClcbiAgICAgICAgdGsuTGFiZWwod2luZG93LCB0ZXh0dmFyaWFibGU9ZmVlZGJhY2ssIHdyYXBsZW5ndGg9MzAwKS5wYWNrKHBhZHg9MTYsIHBhZHk9OClcbiAgICAgICAgZGVmIHNhdmVfcHJlZmVyZW5jZXMoKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBib2R5ID0ge2tleTogdmFsdWUuZ2V0KCkgZm9yIGtleSwgdmFsdWUgaW4gdmFyaWFibGVzLml0ZW1zKCl9XG4gICAgICAgICAgICAgICAgYm9keVsnb3duZXJfbWVtb3J5X2xpbWl0X21iJ10gPSBpbnQoYm9keVsnb3duZXJfbWVtb3J5X2xpbWl0X21iJ10pXG4gICAgICAgICAgICAgICAgYm9keVsnb3duZXJfY3B1X2xpbWl0J10gPSBmbG9hdChib2R5Wydvd25lcl9jcHVfbGltaXQnXSlcbiAgICAgICAgICAgICAgICBwb3N0X2pzb24oY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSwgb3JpZ2luKSwgJy9jb21wdXRlX2ZsZWV0L3ByZWZlcmVuY2VzJywgc2F2ZWRbJ3Rva2VuJ10sIGJvZHkpXG4gICAgICAgICAgICAgICAgZmVlZGJhY2suc2V0KCdTYXZlZC4gUnVubmluZyB0YXNrcyBmaW5pc2ggd2l0aGluIHRoZWlyIHByZXZpb3VzIGxpbWl0cy4nKVxuICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgICAgICAgICBmZWVkYmFjay5zZXQoJ0NvdWxkIG5vdCBzYXZlLiBDaGVjayB0aGUgbGltaXRzIGFuZCBjb25uZWN0aW9uLicpXG4gICAgICAgIHRrLkJ1dHRvbih3aW5kb3csIHRleHQ9J1NhdmUnLCBjb21tYW5kPXNhdmVfcHJlZmVyZW5jZXMpLnBhY2socGFkeT04KVxuXG4gICAgc3RhdHVzX3NldHRpbmdzID0gc3R5bGVkX2J1dHRvbihzdGF0dXNfYnV0dG9ucywgJ1NldHRpbmdzJywgZWRpdF9wcmVmZXJlbmNlcylcbiAgICBzdGF0dXNfc2V0dGluZ3MucGFjayhzaWRlPSdsZWZ0JywgcGFkeD0oMTAsIDApKVxuICAgIHN0YXR1c19xdWl0ID0gc3R5bGVkX2J1dHRvbihzdGF0dXNfYnV0dG9ucywgJ1F1aXQnLCByb290LmRlc3Ryb3kpXG4gICAgc3RhdHVzX3F1aXQucGFjayhzaWRlPSdsZWZ0JylcblxuICAgIGRlZiByZWZyZXNoX2NoYXJ0cygpOlxuICAgICAgICB1c2VkX3NoYXJlID0gbWVtb3J5X2hpc3RvcnlbLTFdIGlmIG1lbW9yeV9oaXN0b3J5IGVsc2UgMFxuICAgICAgICBkcmF3X3NlcmllcyhtZW1vcnlfY2hhcnQsIGxpc3QobWVtb3J5X2hpc3RvcnkpIG9yIFt1c2VkX3NoYXJlLCB1c2VkX3NoYXJlXSxcbiAgICAgICAgICAgICAgICAgICAgQ09MT1JTWydhY2NlbnQnXSwgJyNmNGU3ZTQnLCBmbG9vcj0wLCBjZWlsaW5nPTEpXG4gICAgICAgIHBlYWsgPSBtYXgobGlzdCh0YXNrc19oaXN0b3J5KSBvciBbMF0pXG4gICAgICAgIGRyYXdfc2VyaWVzKHRhc2tzX2NoYXJ0LCBsaXN0KHRhc2tzX2hpc3RvcnkpIG9yIFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgQ09MT1JTWydvayddLCBDT0xPUlNbJ29rX3NvZnQnXSwgZmxvb3I9MCwgY2VpbGluZz1tYXgocGVhaywgMSkpXG5cbiAgICBkZWYgcmVjb3JkX3NhbXBsZShwYXlsb2FkKTpcbiAgICAgICAgYXZhaWxhYmxlLCB0b3RhbCA9IGhvc3RfbWVtb3J5X3NuYXBzaG90KClcbiAgICAgICAgaWYgYXZhaWxhYmxlIGFuZCB0b3RhbDpcbiAgICAgICAgICAgIG1lbW9yeV9oaXN0b3J5LmFwcGVuZChtYXgoMC4wLCBtaW4oMS4wLCAxLjAgLSAoYXZhaWxhYmxlIC8gdG90YWwpKSkpXG4gICAgICAgICAgICBtZW1vcnlfdmFsdWUuc2V0KGZvcm1hdF9ieXRlcyhhdmFpbGFibGUpICsgJyBmcmVlJylcbiAgICAgICAgZWxpZiBhdmFpbGFibGU6XG4gICAgICAgICAgICBtZW1vcnlfdmFsdWUuc2V0KGZvcm1hdF9ieXRlcyhhdmFpbGFibGUpICsgJyBmcmVlJylcbiAgICAgICAgaWYgcGF5bG9hZCBhbmQgJ3Rhc2tzX2NvbXBsZXRlZCcgaW4gcGF5bG9hZDpcbiAgICAgICAgICAgIHRhc2tzX3ZhbHVlLnNldChzdHIocGF5bG9hZC5nZXQoJ3Rhc2tzX2NvbXBsZXRlZCcpIG9yIDApKVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICB0YXNrc19oaXN0b3J5LmFwcGVuZChpbnQodGFza3NfdmFsdWUuZ2V0KCkpKVxuICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjpcbiAgICAgICAgICAgIHRhc2tzX2hpc3RvcnkuYXBwZW5kKDApXG4gICAgICAgIHJlZnJlc2hfY2hhcnRzKClcblxuICAgIGRlZiBwYWludF9zZXR1cF9zdGVwKGluZGV4LCBzdGF0ZSk6XG4gICAgICAgIHJvdyA9IHNldHVwX3Jvd3NbaW5kZXhdXG4gICAgICAgIGlmIHN0YXRlID09ICdkb25lJzpcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snY2lyY2xlJ10sIGZpbGw9Q09MT1JTWydvayddLCBvdXRsaW5lPUNPTE9SU1snb2snXSlcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snbWFyayddLCB0ZXh0PSfinJMnLCBmaWxsPUNPTE9SU1snd2hpdGUnXSlcbiAgICAgICAgICAgIHJvd1sndGl0bGUnXS5jb25maWd1cmUoZmc9Q09MT1JTWydpbmsnXSlcbiAgICAgICAgICAgIHJvd1snZGV0YWlsJ10uY29uZmlndXJlKGZnPUNPTE9SU1snbXV0ZWQnXSlcbiAgICAgICAgZWxpZiBzdGF0ZSA9PSAnY3VycmVudCc6XG4gICAgICAgICAgICByb3dbJ2JhZGdlJ10uaXRlbWNvbmZpZ3VyZShyb3dbJ2NpcmNsZSddLCBmaWxsPUNPTE9SU1snYWNjZW50J10sIG91dGxpbmU9Q09MT1JTWydhY2NlbnQnXSlcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snbWFyayddLCB0ZXh0PXN0cihpbmRleCArIDEpLCBmaWxsPUNPTE9SU1snd2hpdGUnXSlcbiAgICAgICAgICAgIHJvd1sndGl0bGUnXS5jb25maWd1cmUoZmc9Q09MT1JTWydpbmsnXSlcbiAgICAgICAgICAgIHJvd1snZGV0YWlsJ10uY29uZmlndXJlKGZnPUNPTE9SU1snaW5rJ10pXG4gICAgICAgIGVsaWYgc3RhdGUgPT0gJ2Vycm9yJzpcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snY2lyY2xlJ10sIGZpbGw9Q09MT1JTWyd3YXJuJ10sIG91dGxpbmU9Q09MT1JTWyd3YXJuJ10pXG4gICAgICAgICAgICByb3dbJ2JhZGdlJ10uaXRlbWNvbmZpZ3VyZShyb3dbJ21hcmsnXSwgdGV4dD0nIScsIGZpbGw9Q09MT1JTWyd3aGl0ZSddKVxuICAgICAgICAgICAgcm93Wyd0aXRsZSddLmNvbmZpZ3VyZShmZz1DT0xPUlNbJ3dhcm4nXSlcbiAgICAgICAgICAgIHJvd1snZGV0YWlsJ10uY29uZmlndXJlKGZnPUNPTE9SU1snd2FybiddKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgcm93WydiYWRnZSddLml0ZW1jb25maWd1cmUocm93WydjaXJjbGUnXSwgZmlsbD1DT0xPUlNbJ2NhcmQnXSwgb3V0bGluZT1DT0xPUlNbJ2xpbmUnXSlcbiAgICAgICAgICAgIHJvd1snYmFkZ2UnXS5pdGVtY29uZmlndXJlKHJvd1snbWFyayddLCB0ZXh0PXN0cihpbmRleCArIDEpLCBmaWxsPUNPTE9SU1snbXV0ZWQnXSlcbiAgICAgICAgICAgIHJvd1sndGl0bGUnXS5jb25maWd1cmUoZmc9Q09MT1JTWydtdXRlZCddKVxuICAgICAgICAgICAgcm93WydkZXRhaWwnXS5jb25maWd1cmUoZmc9Q09MT1JTWydtdXRlZCddKVxuXG4gICAgZGVmIGhpZGVfaW50cm8oKTpcbiAgICAgICAgaGVyby5wYWNrX2ZvcmdldCgpXG4gICAgICAgIHN0ZXBzLnBhY2tfZm9yZ2V0KClcbiAgICAgICAgcHJpdmFjeS5wYWNrX2ZvcmdldCgpXG4gICAgICAgIGZvcm1fY2FyZC5wYWNrX2ZvcmdldCgpXG4gICAgICAgIGRldGFpbHNfY2FyZC5wYWNrX2ZvcmdldCgpXG5cbiAgICBkZWYgc2hvd19zZXR1cF92aWV3KCk6XG4gICAgICAgIGhpZGVfaW50cm8oKVxuICAgICAgICBzdGF0dXNfdmlldy5wYWNrX2ZvcmdldCgpXG4gICAgICAgIGhlYWRlcl9zdWJ0aXRsZS5jb25maWd1cmUodGV4dD0nV29ya2VyIHNldHVwJylcbiAgICAgICAgcm9vdC50aXRsZSgnRG9yaWFuIEdyYXkgV29ya2VyIFNldHVwJylcbiAgICAgICAgc2V0dXBfdmlldy5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9VHJ1ZSlcblxuICAgIGRlZiBzaG93X3N0YXR1c192aWV3KCk6XG4gICAgICAgIGhpZGVfaW50cm8oKVxuICAgICAgICBzZXR1cF92aWV3LnBhY2tfZm9yZ2V0KClcbiAgICAgICAgaGVhZGVyX3N1YnRpdGxlLmNvbmZpZ3VyZSh0ZXh0PSdUaGlzIGNvbXB1dGVyJylcbiAgICAgICAgcm9vdC50aXRsZSgnRG9yaWFuIEdyYXkgV29ya2VyJylcbiAgICAgICAgc3RhdHVzX3ZpZXcucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUpXG5cbiAgICBjdXJyZW50X3NldHVwX3N0ZXAgPSB7J2luZGV4JzogMH1cblxuICAgIGRlZiBhZHZhbmNlX3NldHVwKGluZGV4LCBkZXRhaWw9Tm9uZSk6XG4gICAgICAgIGluZGV4ID0gbWF4KDAsIG1pbihpbmRleCwgbGVuKHNldHVwX3Jvd3MpIC0gMSkpXG4gICAgICAgIGZvciBwcmlvciBpbiByYW5nZShpbmRleCk6XG4gICAgICAgICAgICBwYWludF9zZXR1cF9zdGVwKHByaW9yLCAnZG9uZScpXG4gICAgICAgIHBhaW50X3NldHVwX3N0ZXAoaW5kZXgsICdjdXJyZW50JylcbiAgICAgICAgZm9yIGxhdGVyIGluIHJhbmdlKGluZGV4ICsgMSwgbGVuKHNldHVwX3Jvd3MpKTpcbiAgICAgICAgICAgIHBhaW50X3NldHVwX3N0ZXAobGF0ZXIsICdwZW5kaW5nJylcbiAgICAgICAgaWYgZGV0YWlsOlxuICAgICAgICAgICAgc2V0dXBfcm93c1tpbmRleF1bJ2RldGFpbCddLmNvbmZpZ3VyZSh0ZXh0PWRldGFpbClcbiAgICAgICAgICAgIGFjdGl2aXR5X3RleHQuc2V0KGRldGFpbClcbiAgICAgICAgY3VycmVudF9zZXR1cF9zdGVwWydpbmRleCddID0gaW5kZXhcblxuICAgIGRlZiBoYW5kbGVfaW5zdGFsbF9saW5lKGxpbmUpOlxuICAgICAgICBoaW50ID0gZnJpZW5kbHlfaW5zdGFsbF9saW5lKGxpbmUpXG4gICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnJCAnKSBvciAoaGludCBhbmQgaGludC5nZXQoJ3JhdycsICcnKS5sc3RyaXAoKS5zdGFydHN3aXRoKCckICcpKTpcbiAgICAgICAgICAgIGFwcGVuZF9jb25zb2xlKGxpbmUgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCckICcpIGVsc2UgaGludFsncmF3J10pXG4gICAgICAgIGlmIG5vdCBoaW50OlxuICAgICAgICAgICAgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCckICcpOlxuICAgICAgICAgICAgICAgIGFjdGl2aXR5X3RleHQuc2V0KCdSdW5uaW5nICcgKyBsaW5lLmxzdHJpcCgpWzI6XSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBpZiBoaW50LmdldCgnZXJyb3InKTpcbiAgICAgICAgICAgIGFjdGl2aXR5X3RleHQuc2V0KGhpbnRbJ2RldGFpbCddKVxuICAgICAgICAgICAgcGFpbnRfc2V0dXBfc3RlcChjdXJyZW50X3NldHVwX3N0ZXBbJ2luZGV4J10sICdlcnJvcicpXG4gICAgICAgICAgICBzdGF0dXMuc2V0KGhpbnRbJ2RldGFpbCddKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdlcnJvcicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgaGludFsnc3RlcCddIGlzIG5vdCBOb25lOlxuICAgICAgICAgICAgYWR2YW5jZV9zZXR1cChoaW50WydzdGVwJ10sIGhpbnRbJ2RldGFpbCddKVxuICAgICAgICAgICAgc3RhdHVzLnNldChoaW50Wyd0aXRsZSddIG9yIGhpbnRbJ2RldGFpbCddKVxuICAgICAgICBlbGlmIGhpbnRbJ2RldGFpbCddIGFuZCBub3QgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCckICcpOlxuICAgICAgICAgICAgYWN0aXZpdHlfdGV4dC5zZXQoaGludFsnZGV0YWlsJ10pXG5cbiAgICBkZWYgc2hvd19lbnJvbGxtZW50X2NvbnRyb2xzKCk6XG4gICAgICAgIHNlbmRfYnV0dG9uLnBhY2soc2lkZT0nbGVmdCcpXG4gICAgICAgIHBhdXNlX2J1dHRvbi5wYWNrX2ZvcmdldCgpXG4gICAgICAgIHJlc3VtZV9idXR0b24ucGFja19mb3JnZXQoKVxuXG4gICAgZGVmIHNob3dfcnVubmluZ19jb250cm9scygpOlxuICAgICAgICBzZW5kX2J1dHRvbi5wYWNrX2ZvcmdldCgpXG4gICAgICAgIHBhdXNlX2J1dHRvbi5wYWNrKHNpZGU9J2xlZnQnKVxuICAgICAgICByZXN1bWVfYnV0dG9uLnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDEwLCAwKSlcblxuICAgIGRlZiByZWZyZXNoX3ByZXZpZXcoKTpcbiAgICAgICAgaWYgc25hcHNob3RbJ2Vycm9yJ106XG4gICAgICAgICAgICBzdGF0dXMuc2V0KHNuYXBzaG90WydlcnJvciddKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdlcnJvcicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgbm90IHNuYXBzaG90Wyd2YWx1ZSddOlxuICAgICAgICAgICAgcm9vdC5hZnRlcigyNTAsIHJlZnJlc2hfcHJldmlldylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBzdGF0dXMuc2V0KCdSZWFkeSB3aGVuIHlvdSBhcmUuIEFkZCB5b3VyIG5hbWUsIGVtYWlsLCBhbmQgcGhvbmUsIHRoZW4gc2VuZCBhIHJlcXVlc3QuJylcbiAgICAgICAgcGFpbnRfYmFubmVyKCdyZWFkeScpXG4gICAgICAgIGFjdGlvbi5zZXQoJ3JlYWR5JylcbiAgICAgICAgc2VuZF9idXR0b24uY29uZmlndXJlKHN0YXRlPSdub3JtYWwnKVxuXG4gICAgZGVmIHNlbmRfcmVxdWVzdCgpOlxuICAgICAgICBpZiBhY3Rpb24uZ2V0KCkgIT0gJ3JlYWR5JzpcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBkaXNwbGF5X25hbWUgPSBuYW1lX2VudHJ5LmdldCgpLnN0cmlwKClcbiAgICAgICAgZW1haWwgPSBlbWFpbF9lbnRyeS5nZXQoKS5zdHJpcCgpXG4gICAgICAgIHBob25lID0gcGhvbmVfZW50cnkuZ2V0KCkuc3RyaXAoKVxuICAgICAgICBpZiBub3QgZGlzcGxheV9uYW1lOlxuICAgICAgICAgICAgc3RhdHVzLnNldCgnQWRkIHlvdXIgbmFtZSBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdC4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdlcnJvcicpXG4gICAgICAgICAgICBuYW1lX2VudHJ5LmZvY3VzX3NldCgpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgbm90IGVtYWlsOlxuICAgICAgICAgICAgc3RhdHVzLnNldCgnQWRkIHlvdXIgZW1haWwgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QuJylcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICAgICAgZW1haWxfZW50cnkuZm9jdXNfc2V0KClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBpZiBub3QgcGhvbmU6XG4gICAgICAgICAgICBzdGF0dXMuc2V0KCdBZGQgeW91ciBwaG9uZSBudW1iZXIgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QuJylcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICAgICAgcGhvbmVfZW50cnkuZm9jdXNfc2V0KClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBhY3Rpb24uc2V0KCdzdWJtaXR0aW5nJylcbiAgICAgICAgc3RhdHVzLnNldCgnU2VuZGluZyB5b3VyIHJlcXVlc3TigKYnKVxuICAgICAgICBwYWludF9iYW5uZXIoJ3dhaXQnKVxuICAgICAgICBzZW5kX2J1dHRvbi5jb25maWd1cmUoc3RhdGU9J2Rpc2FibGVkJylcblxuICAgICAgICBkZWYgc3VibWl0KCk6XG4gICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBsb2FkX3N0YXRlKClcbiAgICAgICAgICAgICAgICBzdWJtaXRfZW5yb2xsbWVudChvcmlnaW4sIHN0YXRlLCBzbmFwc2hvdFsndmFsdWUnXSwgZGlzcGxheV9uYW1lLCBlbWFpbCwgcGhvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZV9lbnRyeS5nZXQoKS5zdHJpcCgpKVxuICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXIoMCwgbGFtYmRhOiBiZWdpbl9wb2xsKHN0YXRlKSlcbiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgICAgZGVmIGZhaWwobWVzc2FnZT1zdHIoZXJyb3IpKTpcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNldChtZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICBwYWludF9iYW5uZXIoJ2Vycm9yJylcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnNldCgncmVhZHknKVxuICAgICAgICAgICAgICAgICAgICBzZW5kX2J1dHRvbi5jb25maWd1cmUoc3RhdGU9J25vcm1hbCcpXG4gICAgICAgICAgICAgICAgcm9vdC5hZnRlcigwLCBmYWlsKVxuXG4gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXN1Ym1pdCwgZGFlbW9uPVRydWUpLnN0YXJ0KClcblxuICAgIHNlbmRfYnV0dG9uLmNvbmZpZ3VyZShjb21tYW5kPXNlbmRfcmVxdWVzdCwgc3RhdGU9J2Rpc2FibGVkJylcblxuICAgIGRlZiBiZWdpbl9wb2xsKHN0YXRlKTpcbiAgICAgICAgc3RhdHVzLnNldCgnUmVxdWVzdCBzZW50LiBZb3UgY2FuIGxlYXZlIHRoaXMgd2luZG93IG9wZW4gd2hpbGUgd2UgcmV2aWV3IGl0LicpXG4gICAgICAgIHBhaW50X2Jhbm5lcignd2FpdCcpXG4gICAgICAgIGFjdGlvbi5zZXQoJ3BvbGxpbmcnKVxuICAgICAgICBuYW1lX2VudHJ5LmNvbmZpZ3VyZShzdGF0ZT0nZGlzYWJsZWQnKVxuICAgICAgICBlbWFpbF9lbnRyeS5jb25maWd1cmUoc3RhdGU9J2Rpc2FibGVkJylcbiAgICAgICAgcGhvbmVfZW50cnkuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG4gICAgICAgIG5vdGVfZW50cnkuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG4gICAgICAgIHNlbmRfYnV0dG9uLmNvbmZpZ3VyZShzdGF0ZT0nZGlzYWJsZWQnKVxuXG4gICAgICAgIGRlZiBwb2xsX2xvb3AoKTpcbiAgICAgICAgICAgIHdoaWxlIGFjdGlvbi5nZXQoKSA9PSAncG9sbGluZyc6XG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwb2xsX2Vucm9sbG1lbnQob3JpZ2luLCBzdGF0ZSlcbiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyKDAsIGxhbWJkYTogKHN0YXR1cy5zZXQoc3RyKGVycm9yKSksIHBhaW50X2Jhbm5lcignZXJyb3InKSkpXG4gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMylcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICBpZiByZXN1bHQuZ2V0KCdzdGF0dXMnKSA9PSAncGVuZGluZyc6XG4gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMylcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICBpZiByZXN1bHQuZ2V0KCdzdGF0dXMnKSA9PSAnYXBwcm92ZWQnOlxuICAgICAgICAgICAgICAgICAgICBpbnZpdGF0aW9uX3BhdGgoKS53cml0ZV90ZXh0KGpzb24uZHVtcHMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ29yaWdpbic6IG9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHJlc3VsdFsndG9rZW4nXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd3b3JrZXJfaWQnOiByZXN1bHRbJ3dvcmtlcl9pZCddLFxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5hZnRlcigwLCBsYW1iZGE6IGJlZ2luX2luc3RhbGwocmVzdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgcm9vdC5hZnRlcigwLCBsYW1iZGE6IChzdGF0dXMuc2V0KCdUaGlzIHJlcXVlc3Qgd2FzIGRlbmllZCBvciBleHBpcmVkLicpLCBwYWludF9iYW5uZXIoJ2Vycm9yJykpKVxuICAgICAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXBvbGxfbG9vcCwgZGFlbW9uPVRydWUpLnN0YXJ0KClcblxuICAgIGRlZiBiZWdpbl9pbnN0YWxsKHJlc3VsdCk6XG4gICAgICAgIHN0YXR1cy5zZXQoJ0FwcHJvdmVkLiBTZXR0aW5nIHRoaXMgY29tcHV0ZXIgdXAgbm93IOKAlCB5b3UgY2FuIGxlYXZlIHRoaXMgd2luZG93IG9wZW4uJylcbiAgICAgICAgcGFpbnRfYmFubmVyKCd3YWl0JylcbiAgICAgICAgYWN0aW9uLnNldCgnaW5zdGFsbGluZycpXG4gICAgICAgIHNob3dfc2V0dXBfdmlldygpXG4gICAgICAgIGFkdmFuY2Vfc2V0dXAoMCwgJ0RvcmlhbiBHcmF5IGFjY2VwdGVkIHRoaXMgY29tcHV0ZXIuIFNldHVwIGlzIHN0YXJ0aW5nLicpXG4gICAgICAgIGFwcGVuZF9jb25zb2xlKCcjICcgKyBwbGFuX2JsdXJiKVxuICAgICAgICBmb3IgbGluZSBpbiBwbGFuX2RldGFpbHMuc3BsaXRsaW5lcygpOlxuICAgICAgICAgICAgYXBwZW5kX2NvbnNvbGUoJyMgJyArIGxpbmUpXG5cbiAgICAgICAgZGVmIGluc3RhbGwoKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBydW5faW5zdGFsbGVyKHNjcmlwdF9wYXRoLCBvbl9saW5lPWxhbWJkYSBsaW5lOiByb290LmFmdGVyKDAsIGxhbWJkYSB0ZXh0PWxpbmU6IGhhbmRsZV9pbnN0YWxsX2xpbmUodGV4dCkpKVxuICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXIoMCwgbGFtYmRhOiBiZWdpbl9zdGF0dXMocmVzdWx0KSlcbiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgICAgZGVmIGZhaWwobWVzc2FnZT1zdHIoZXJyb3IpKTpcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRfc2V0dXBfc3RlcChjdXJyZW50X3NldHVwX3N0ZXBbJ2luZGV4J10sICdlcnJvcicpXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3RleHQuc2V0KG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQobWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdlcnJvcicpXG4gICAgICAgICAgICAgICAgcm9vdC5hZnRlcigwLCBmYWlsKVxuXG4gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWluc3RhbGwsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG5cbiAgICBkZWYgYmVnaW5fc3RhdHVzKHJlc3VsdCk6XG4gICAgICAgIGFjdGlvbi5zZXQoJ3J1bm5pbmcnKVxuICAgICAgICBzaG93X3N0YXR1c192aWV3KClcbiAgICAgICAgdG9rZW4gPSByZXN1bHRbJ3Rva2VuJ11cbiAgICAgICAgb3JpZ2luX3ZhbHVlID0gb3JpZ2luXG4gICAgICAgIGFwcGx5X3N0YXR1cyh7J3N0YXRlJzogJ29mZmxpbmUnfSlcblxuICAgICAgICBkZWYgcG9sbF9zdGF0dXMoKTpcbiAgICAgICAgICAgIHdoaWxlIGFjdGlvbi5nZXQoKSA9PSAncnVubmluZyc6XG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gd29ya2VyX3N0YXR1cyhvcmlnaW5fdmFsdWUsIHRva2VuKVxuICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyKDAsIGxhbWJkYSBkYXRhPXBheWxvYWQ6IGFwcGx5X3N0YXR1cyhkYXRhKSlcbiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyKDAsIGxhbWJkYSBtZXNzYWdlPXN0cihlcnJvcik6IGFwcGx5X3N0YXR1cyhOb25lLCBlcnJvcj1tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpXG5cbiAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cG9sbF9zdGF0dXMsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG5cbiAgICBkZWYgYXBwbHlfc3RhdHVzKHBheWxvYWQsIGVycm9yPU5vbmUpOlxuICAgICAgICByZWNvcmRfc2FtcGxlKHBheWxvYWQpXG4gICAgICAgIGxvY2FsX3J1bm5pbmcgPSBob3N0X3dvcmtlcl9ydW5uaW5nKClcbiAgICAgICAgaWYgZXJyb3I6XG4gICAgICAgICAgICBpZiBsb2NhbF9ydW5uaW5nOlxuICAgICAgICAgICAgICAgIHN0YXRlX3ZhbHVlLnNldCgnUnVubmluZycpXG4gICAgICAgICAgICAgICAgYWN0aXZpdHlfdmFsdWUuc2V0KCdDaGVja2luZyBpbicpXG4gICAgICAgICAgICAgICAgc3RhdHVzLnNldCgnVGhlIHdvcmtlciBpcyBydW5uaW5nIG9uIHRoaXMgY29tcHV0ZXIuIFN0YXR1cyBmcm9tIERvcmlhbiBHcmF5IGNvdWxkIG5vdCBiZSByZWZyZXNoZWQuJylcbiAgICAgICAgICAgICAgICBwYWludF9iYW5uZXIoJ3dhaXQnKVxuICAgICAgICAgICAgICAgIHNob3dfcGF1c2VfY29udHJvbHMoRmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICBzdGF0ZV92YWx1ZS5zZXQoJ1VucmVhY2hhYmxlJylcbiAgICAgICAgICAgIGFjdGl2aXR5X3ZhbHVlLnNldCgnQ291bGQgbm90IHJlZnJlc2gnKVxuICAgICAgICAgICAgc3RhdHVzLnNldChlcnJvcilcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIHBheWxvYWQgPSBwYXlsb2FkIG9yIHt9XG4gICAgICAgIHN0YXRlX25hbWUgPSBmcmllbmRseV93b3JrZXJfc3RhdGUocGF5bG9hZClcbiAgICAgICAgaWYgc3RhdGVfbmFtZSA9PSAnb2ZmbGluZScgYW5kIGxvY2FsX3J1bm5pbmc6XG4gICAgICAgICAgICBzdGF0ZV92YWx1ZS5zZXQoJ1J1bm5pbmcnKVxuICAgICAgICAgICAgYWN0aXZpdHlfdmFsdWUuc2V0KCdDaGVja2luZyBpbicpXG4gICAgICAgICAgICBzdGF0dXMuc2V0KCdUaGUgd29ya2VyIGlzIHJ1bm5pbmcgb24gdGhpcyBjb21wdXRlciBhbmQgY2hlY2tpbmcgaW4gd2l0aCBEb3JpYW4gR3JheS4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCd3YWl0JylcbiAgICAgICAgICAgIHNob3dfcGF1c2VfY29udHJvbHMoYm9vbChwYXlsb2FkLmdldCgnZHJhaW5pbmcnKSkpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgc3RhdGVfdmFsdWUuc2V0KFdPUktFUl9TVEFURV9DT1BZLmdldChzdGF0ZV9uYW1lLCBzdGF0ZV9uYW1lLnJlcGxhY2UoJ18nLCAnICcpKSlcbiAgICAgICAgYWN0aXZpdHlfdmFsdWUuc2V0KGN1cnJlbnRfd29ya19jb3B5KHBheWxvYWQpKVxuICAgICAgICBkcmFpbmluZyA9IGJvb2wocGF5bG9hZC5nZXQoJ2RyYWluaW5nJykgb3Igc3RhdGVfbmFtZSA9PSAncGF1c2VkJylcbiAgICAgICAgc2hvd19wYXVzZV9jb250cm9scyhkcmFpbmluZylcbiAgICAgICAgaWYgZHJhaW5pbmc6XG4gICAgICAgICAgICBzdGF0dXMuc2V0KCdUaGlzIGNvbXB1dGVyIGlzIHBhdXNlZC4gSXQgd2lsbCBmaW5pc2ggYW55IGN1cnJlbnQgdGFzaywgdGhlbiBzdG9wIHRha2luZyBuZXcgd29yay4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCdyZWFkeScpXG4gICAgICAgIGVsaWYgcGF5bG9hZC5nZXQoJ2N1cnJlbnRfdGFzaycpIG9yIHN0YXRlX25hbWUgPT0gJ2J1c3knOlxuICAgICAgICAgICAgc3RhdHVzLnNldCgnVGhpcyBjb21wdXRlciBpcyB3b3JraW5nIG9uIGEgdGFzay4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCd3YWl0JylcbiAgICAgICAgZWxpZiBzdGF0ZV9uYW1lID09ICdyZWFkeSc6XG4gICAgICAgICAgICBzdGF0dXMuc2V0KCdUaGlzIGNvbXB1dGVyIGlzIGNvbm5lY3RlZCBhbmQgd2FpdGluZyBmb3Igd29yay4nKVxuICAgICAgICAgICAgcGFpbnRfYmFubmVyKCd3YWl0JylcbiAgICAgICAgZWxpZiBzdGF0ZV9uYW1lID09ICdvZmZsaW5lJzpcbiAgICAgICAgICAgIHN0YXR1cy5zZXQoJ1RoZSB3b3JrZXIgaXMgbm90IGNvbm5lY3RlZCB5ZXQuIEl0IHdpbGwga2VlcCB0cnlpbmcgaW4gdGhlIGJhY2tncm91bmQuJylcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgc3RhdHVzLnNldCgnVGhpcyBjb21wdXRlciBpcyAnICsgc3RhdGVfbmFtZS5yZXBsYWNlKCdfJywgJyAnKSArICcuJylcbiAgICAgICAgICAgIHBhaW50X2Jhbm5lcignd2FpdCcpXG5cbiAgICBkZWYgc2hvd19wYXVzZV9jb250cm9scyhkcmFpbmluZyk6XG4gICAgICAgIHN0YXR1c19wYXVzZS5wYWNrX2ZvcmdldCgpXG4gICAgICAgIHN0YXR1c19yZXN1bWUucGFja19mb3JnZXQoKVxuICAgICAgICBzdGF0dXNfcXVpdC5wYWNrX2ZvcmdldCgpXG4gICAgICAgIGlmIGRyYWluaW5nOlxuICAgICAgICAgICAgc3RhdHVzX3Jlc3VtZS5wYWNrKHNpZGU9J2xlZnQnKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgc3RhdHVzX3BhdXNlLnBhY2soc2lkZT0nbGVmdCcpXG4gICAgICAgIHN0YXR1c19xdWl0LnBhY2soc2lkZT0nbGVmdCcsIHBhZHg9KDEwLCAwKSlcblxuICAgIGRlZiBpbnZpdGF0aW9uX2NyZWRlbnRpYWxzKCk6XG4gICAgICAgIHNhdmVkID0ganNvbi5sb2FkcyhpbnZpdGF0aW9uX3BhdGgoKS5yZWFkX3RleHQoKSlcbiAgICAgICAgcmV0dXJuIG9yaWdpbiBvciBzYXZlZC5nZXQoJ29yaWdpbicpLCBzYXZlZFsndG9rZW4nXVxuXG4gICAgZGVmIHJlcXVlc3RfcGF1c2UocGF1c2UpOlxuICAgICAgICBzdGF0dXNfcGF1c2UuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG4gICAgICAgIHN0YXR1c19yZXN1bWUuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpXG5cbiAgICAgICAgZGVmIHdvcmsoKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBvcmlnaW5fdmFsdWUsIHRva2VuID0gaW52aXRhdGlvbl9jcmVkZW50aWFscygpXG4gICAgICAgICAgICAgICAgcGF0aCA9ICcvY29tcHV0ZV9mbGVldC9kcmFpbicgaWYgcGF1c2UgZWxzZSAnL2NvbXB1dGVfZmxlZXQvcmVzdW1lJ1xuICAgICAgICAgICAgICAgIHBvc3RfanNvbihvcmlnaW5fdmFsdWUsIHBhdGgsIHRva2VuLCB7fSlcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gd29ya2VyX3N0YXR1cyhvcmlnaW5fdmFsdWUsIHRva2VuKVxuICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXIoMCwgbGFtYmRhIGRhdGE9cGF5bG9hZDogYXBwbHlfc3RhdHVzKGRhdGEpKVxuICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgICAgICBkZWYgZmFpbChtZXNzYWdlPXN0cihlcnJvcikpOlxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2V0KG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIHBhaW50X2Jhbm5lcignZXJyb3InKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfcGF1c2UuY29uZmlndXJlKHN0YXRlPSdub3JtYWwnKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfcmVzdW1lLmNvbmZpZ3VyZShzdGF0ZT0nbm9ybWFsJylcbiAgICAgICAgICAgICAgICByb290LmFmdGVyKDAsIGZhaWwpXG4gICAgICAgICAgICBlbHNlOlxuICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXIoMCwgbGFtYmRhOiAoXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c19wYXVzZS5jb25maWd1cmUoc3RhdGU9J25vcm1hbCcpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfcmVzdW1lLmNvbmZpZ3VyZShzdGF0ZT0nbm9ybWFsJyksXG4gICAgICAgICAgICAgICAgKSlcblxuICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrLCBkYWVtb249VHJ1ZSkuc3RhcnQoKVxuXG4gICAgZGVmIHBhdXNlX3dvcmtlcigpOlxuICAgICAgICByZXF1ZXN0X3BhdXNlKFRydWUpXG5cbiAgICBkZWYgcmVzdW1lX3dvcmtlcigpOlxuICAgICAgICByZXF1ZXN0X3BhdXNlKEZhbHNlKVxuXG4gICAgZGVmIG9uX3Jlc2l6ZShfZXZlbnQ9Tm9uZSk6XG4gICAgICAgIHdyYXAgPSBtYXgoNDIwLCBib2R5LndpbmZvX3dpZHRoKCkgLSA4KVxuICAgICAgICBzdGF0dXNfbGFiZWwuY29uZmlndXJlKHdyYXBsZW5ndGg9d3JhcClcbiAgICAgICAgZm9yIHdpZGdldCBpbiBoZXJvLndpbmZvX2NoaWxkcmVuKCk6XG4gICAgICAgICAgICB3aWRnZXQuY29uZmlndXJlKHdyYXBsZW5ndGg9d3JhcClcbiAgICAgICAgZm9yIHdpZGdldCBpbiBwcml2YWN5LndpbmZvX2NoaWxkcmVuKCk6XG4gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHdpZGdldCwgdGsuTGFiZWwpIGFuZCB3aWRnZXQuY2dldCgnd3JhcGxlbmd0aCcpOlxuICAgICAgICAgICAgICAgIHdpZGdldC5jb25maWd1cmUod3JhcGxlbmd0aD1tYXgoMzIwLCB3cmFwIC0gMjQpKVxuICAgICAgICBjYXJkX3dyYXAgPSBtYXgoMTgwLCAoYm9keS53aW5mb193aWR0aCgpIC8vIDMpIC0gNjQpXG4gICAgICAgIGZvciBjaGlsZCBpbiBzdGVwcy53aW5mb19jaGlsZHJlbigpOlxuICAgICAgICAgICAgZm9yIHdpZGdldCBpbiBjaGlsZC53aW5mb19jaGlsZHJlbigpOlxuICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uod2lkZ2V0LCB0ay5MYWJlbCk6XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldC5jb25maWd1cmUod3JhcGxlbmd0aD1jYXJkX3dyYXApXG4gICAgICAgIGFjdGl2aXR5X2xhYmVsLmNvbmZpZ3VyZSh3cmFwbGVuZ3RoPXdyYXApXG4gICAgICAgIHNldHVwX2hlYWRpbmcuY29uZmlndXJlKHdyYXBsZW5ndGg9d3JhcClcbiAgICAgICAgc2V0dXBfY29weS5jb25maWd1cmUod3JhcGxlbmd0aD13cmFwKVxuICAgICAgICBzdGF0dXNfaGVhZGluZy5jb25maWd1cmUod3JhcGxlbmd0aD13cmFwKVxuICAgICAgICBzdGF0dXNfY29weS5jb25maWd1cmUod3JhcGxlbmd0aD13cmFwKVxuICAgICAgICBzdGF0dXNfbm90ZV90ZXh0LmNvbmZpZ3VyZSh3cmFwbGVuZ3RoPXdyYXApXG4gICAgICAgIGZhY3Rfd3JhcCA9IG1heCg5MCwgKGJvZHkud2luZm9fd2lkdGgoKSAvLyA0KSAtIDI0KVxuICAgICAgICBmb3Igd2lkZ2V0IGluIGZhY3RfbGFiZWxzOlxuICAgICAgICAgICAgd2lkZ2V0LmNvbmZpZ3VyZSh3cmFwbGVuZ3RoPWZhY3Rfd3JhcClcbiAgICAgICAgcmVmcmVzaF9jaGFydHMoKVxuICAgICAgICBmb3Igcm93IGluIHNldHVwX3Jvd3M6XG4gICAgICAgICAgICByb3dbJ2RldGFpbCddLmNvbmZpZ3VyZSh3cmFwbGVuZ3RoPW1heCgzMjAsIHdyYXAgLSA4MCkpXG5cbiAgICBtZW1vcnlfY2hhcnQuYmluZCgnPENvbmZpZ3VyZT4nLCBsYW1iZGEgX2V2ZW50OiByZWZyZXNoX2NoYXJ0cygpKVxuICAgIHRhc2tzX2NoYXJ0LmJpbmQoJzxDb25maWd1cmU+JywgbGFtYmRhIF9ldmVudDogcmVmcmVzaF9jaGFydHMoKSlcbiAgICBib2R5LmJpbmQoJzxDb25maWd1cmU+Jywgb25fcmVzaXplKVxuICAgIHBhdXNlX2J1dHRvbi5jb25maWd1cmUoY29tbWFuZD1wYXVzZV93b3JrZXIpXG4gICAgcmVzdW1lX2J1dHRvbi5jb25maWd1cmUoY29tbWFuZD1yZXN1bWVfd29ya2VyKVxuICAgIHNldHVwX3BhdXNlLmNvbmZpZ3VyZShjb21tYW5kPXBhdXNlX3dvcmtlcilcbiAgICBzZXR1cF9yZXN1bWUuY29uZmlndXJlKGNvbW1hbmQ9cmVzdW1lX3dvcmtlcilcbiAgICBzdGF0dXNfcGF1c2UuY29uZmlndXJlKGNvbW1hbmQ9cGF1c2Vfd29ya2VyKVxuICAgIHN0YXR1c19yZXN1bWUuY29uZmlndXJlKGNvbW1hbmQ9cmVzdW1lX3dvcmtlcilcbiAgICBzaG93X2Vucm9sbG1lbnRfY29udHJvbHMoKVxuICAgIGlmIGludml0YXRpb25fcGF0aCgpLmV4aXN0cygpOlxuICAgICAgICBzYXZlZCA9IGpzb24ubG9hZHMoaW52aXRhdGlvbl9wYXRoKCkucmVhZF90ZXh0KCkpXG4gICAgICAgIHJvb3QuYWZ0ZXIoMjAwLCBsYW1iZGE6IGJlZ2luX3N0YXR1cyhzYXZlZCkpXG4gICAgZWxzZTpcbiAgICAgICAgcmVmcmVzaF9wcmV2aWV3KClcbiAgICAgICAgbmFtZV9lbnRyeS5mb2N1c19zZXQoKVxuICAgIHByZXNlbnRfd2luZG93KHJvb3QpXG4gICAgcm9vdC5kZWljb25pZnkoKVxuICAgIHJvb3QubGlmdCgpXG4gICAgcm9vdC5mb2N1c19mb3JjZSgpXG4gICAgcm9vdC5hZnRlcig4MCwgbGFtYmRhOiBwcmVzZW50X3dpbmRvdyhyb290KSlcbiAgICByb290Lm1haW5sb29wKClcblxuXG5kZWYgdGtfd2luZG93X2F2YWlsYWJsZSgpOlxuICAgIHRyeTpcbiAgICAgICAgaW1wb3J0IHRraW50ZXJcbiAgICAgICAgcm9vdCA9IHRraW50ZXIuVGsoKVxuICAgICAgICByb290LndpdGhkcmF3KClcbiAgICAgICAgcm9vdC51cGRhdGVfaWRsZXRhc2tzKClcbiAgICAgICAgZXhpc3RzID0gYm9vbChyb290LndpbmZvX2V4aXN0cygpKVxuICAgICAgICByb290LmRlc3Ryb3koKVxuICAgICAgICByZXR1cm4gZXhpc3RzXG4gICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG5cblxuZGVmIG9wZW5fc3lzdGVtX2Jyb3dzZXIodXJsKTpcbiAgICBudWxsID0gc3VicHJvY2Vzcy5ERVZOVUxMXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBlc2NhcGVkID0gdXJsLnJlcGxhY2UoJ1xcXFwnLCAnXFxcXFxcXFwnKS5yZXBsYWNlKCdcIicsICdcXFxcXCInKVxuICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsnb3BlbicsIHVybF0sIHN0ZG91dD1udWxsLCBzdGRlcnI9bnVsbClcbiAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ29zYXNjcmlwdCcsICctZScsICdvcGVuIGxvY2F0aW9uIFwiJXNcIicgJSBlc2NhcGVkXSwgc3Rkb3V0PW51bGwsIHN0ZGVycj1udWxsKVxuICAgICAgICByZXR1cm5cbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzpcbiAgICAgICAgb3Muc3RhcnRmaWxlKHVybClcbiAgICAgICAgcmV0dXJuXG4gICAgd2luZG93c19jbWQgPSBQYXRoKCcvbW50L2MvV2luZG93cy9TeXN0ZW0zMi9jbWQuZXhlJylcbiAgICBpZiB3aW5kb3dzX2NtZC5leGlzdHMoKTpcbiAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbihbc3RyKHdpbmRvd3NfY21kKSwgJy9jJywgJ3N0YXJ0JywgJycsIHVybF0sIHN0ZG91dD1udWxsLCBzdGRlcnI9bnVsbClcbiAgICAgICAgcmV0dXJuXG4gICAgZm9yIGNvbW1hbmQgaW4gKFxuICAgICAgICAoWyd4ZGctb3BlbicsIHVybF0gaWYgc2h1dGlsLndoaWNoKCd4ZGctb3BlbicpIGVsc2UgTm9uZSksXG4gICAgICAgIChbJ2dpbycsICdvcGVuJywgdXJsXSBpZiBzaHV0aWwud2hpY2goJ2dpbycpIGVsc2UgTm9uZSksXG4gICAgICAgIChbJ3dzbHZpZXcnLCB1cmxdIGlmIHNodXRpbC53aGljaCgnd3NsdmlldycpIGVsc2UgTm9uZSksXG4gICAgKTpcbiAgICAgICAgaWYgY29tbWFuZDpcbiAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PW51bGwsIHN0ZGVycj1udWxsKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgaW1wb3J0IHdlYmJyb3dzZXJcbiAgICB3ZWJicm93c2VyLm9wZW4odXJsKVxuXG5cbmRlZiBjb25maWd1cmVkX29yaWdpbigqY2FuZGlkYXRlcyk6XG4gICAgdmFsdWVzID0gW2NvbmZpZygpLmdldCgnb3JpZ2luJyksICpjYW5kaWRhdGVzXVxuICAgIHJldHVybiBuZXh0KCh2YWx1ZSBmb3IgdmFsdWUgaW4gdmFsdWVzIGlmIHZhbHVlKSwgTm9uZSlcblxuXG5kZWYgaW52aXRhdGlvbl9wYXlsb2FkKHJlc3VsdD1Ob25lKTpcbiAgICBpZiByZXN1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnb3JpZ2luJzogY29uZmlndXJlZF9vcmlnaW4ocmVzdWx0LmdldCgnb3JpZ2luJykpLFxuICAgICAgICAgICAgJ3Rva2VuJzogcmVzdWx0Wyd0b2tlbiddLFxuICAgICAgICAgICAgJ3dvcmtlcl9pZCc6IHJlc3VsdC5nZXQoJ3dvcmtlcl9pZCcpLFxuICAgICAgICB9XG4gICAgaWYgaW52aXRhdGlvbl9wYXRoKCkuZXhpc3RzKCk6XG4gICAgICAgIHNhdmVkID0ganNvbi5sb2FkcyhpbnZpdGF0aW9uX3BhdGgoKS5yZWFkX3RleHQoKSlcbiAgICAgICAgb3JpZ2luID0gY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSlcbiAgICAgICAgaWYgb3JpZ2luIGFuZCBzYXZlZC5nZXQoJ29yaWdpbicpICE9IG9yaWdpbjpcbiAgICAgICAgICAgIHNhdmVkWydvcmlnaW4nXSA9IG9yaWdpblxuICAgICAgICAgICAgaW52aXRhdGlvbl9wYXRoKCkud3JpdGVfdGV4dChqc29uLmR1bXBzKHNhdmVkKSlcbiAgICAgICAgcmV0dXJuIHNhdmVkXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgc2F2ZV9pbnZpdGF0aW9uKHJlc3VsdCwgb3JpZ2luKTpcbiAgICBwYXlsb2FkID0ge1xuICAgICAgICAnb3JpZ2luJzogY29uZmlndXJlZF9vcmlnaW4ob3JpZ2luLCByZXN1bHQuZ2V0KCdvcmlnaW4nKSksXG4gICAgICAgICd0b2tlbic6IHJlc3VsdFsndG9rZW4nXSxcbiAgICAgICAgJ3dvcmtlcl9pZCc6IHJlc3VsdC5nZXQoJ3dvcmtlcl9pZCcpLFxuICAgIH1cbiAgICBpbnZpdGF0aW9uX3BhdGgoKS53cml0ZV90ZXh0KGpzb24uZHVtcHMocGF5bG9hZCkpXG4gICAgcmV0dXJuIHBheWxvYWRcblxuXG5kZWYgcHVibGljX3N0YXRlKGRhdGEpOlxuICAgIHJldHVybiB7XG4gICAgICAgICdwaGFzZSc6IGRhdGFbJ3BoYXNlJ10sXG4gICAgICAgICdwcmV2aWV3JzogZGF0YVsncHJldmlldyddLFxuICAgICAgICAnZXJyb3InOiBkYXRhWydlcnJvciddLFxuICAgICAgICAnbWVzc2FnZSc6IGRhdGFbJ21lc3NhZ2UnXSxcbiAgICAgICAgJ2xvZ3MnOiBsaXN0KGRhdGFbJ2xvZ3MnXSksXG4gICAgICAgICd3b3JrZXInOiBkYXRhWyd3b3JrZXInXSxcbiAgICAgICAgJ2xvY2FsX3J1bm5pbmcnOiBkYXRhWydsb2NhbF9ydW5uaW5nJ10sXG4gICAgICAgICdtZW1vcnlfZnJlZSc6IGRhdGFbJ21lbW9yeV9mcmVlJ10sXG4gICAgICAgICdkcmFpbmluZyc6IGRhdGFbJ2RyYWluaW5nJ10sXG4gICAgfVxuXG5cbmRlZiBmZXRjaF93b3JrZXJfdmlldyhvcmlnaW4pOlxuICAgIHNhdmVkID0gaW52aXRhdGlvbl9wYXlsb2FkKClcbiAgICBpZiBub3Qgc2F2ZWQ6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgb3JpZ2luX3ZhbHVlID0gY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSwgb3JpZ2luKVxuICAgIGF2YWlsYWJsZSwgX3RvdGFsID0gaG9zdF9tZW1vcnlfc25hcHNob3QoKVxuICAgIGxvY2FsX3J1bm5pbmcgPSBob3N0X3dvcmtlcl9ydW5uaW5nKClcbiAgICB0cnk6XG4gICAgICAgIHBheWxvYWQgPSB3b3JrZXJfc3RhdHVzKG9yaWdpbl92YWx1ZSwgc2F2ZWRbJ3Rva2VuJ10pXG4gICAgICAgIHJldHVybiB7J3BheWxvYWQnOiBwYXlsb2FkLCAnZXJyb3InOiBOb25lLCAnYXZhaWxhYmxlJzogYXZhaWxhYmxlLCAnbG9jYWxfcnVubmluZyc6IGxvY2FsX3J1bm5pbmd9XG4gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgcmV0dXJuIHsncGF5bG9hZCc6IE5vbmUsICdlcnJvcic6IHN0cihlcnJvciksICdhdmFpbGFibGUnOiBhdmFpbGFibGUsICdsb2NhbF9ydW5uaW5nJzogbG9jYWxfcnVubmluZ31cblxuXG5kZWYgYXBwbHlfd29ya2VyX3ZpZXcoZGF0YSwgdmlldyk6XG4gICAgaWYgbm90IHZpZXc6XG4gICAgICAgIHJldHVyblxuICAgIHJlcG9ydGVkID0gKHZpZXcuZ2V0KCdwYXlsb2FkJykgb3Ige30pLmdldCgnbWVtb3J5X2F2YWlsYWJsZV9ieXRlcycpXG4gICAgYXZhaWxhYmxlID0gcmVwb3J0ZWQgb3Igdmlld1snYXZhaWxhYmxlJ11cbiAgICBkYXRhWydtZW1vcnlfZnJlZSddID0gZm9ybWF0X2J5dGVzKGF2YWlsYWJsZSkgaWYgYXZhaWxhYmxlIGVsc2UgTm9uZVxuICAgIGRhdGFbJ2xvY2FsX3J1bm5pbmcnXSA9IHZpZXdbJ2xvY2FsX3J1bm5pbmcnXVxuICAgIGlmIHZpZXdbJ2Vycm9yJ106XG4gICAgICAgIGRhdGFbJ3dvcmtlciddID0gTm9uZVxuICAgICAgICBpZiB2aWV3Wydsb2NhbF9ydW5uaW5nJ106XG4gICAgICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSAoXG4gICAgICAgICAgICAgICAgJ1RoZSB3b3JrZXIgaXMgcnVubmluZyBvbiB0aGlzIGNvbXB1dGVyLiBTdGF0dXMgZnJvbSBEb3JpYW4gR3JheSBjb3VsZCBub3QgYmUgcmVmcmVzaGVkLidcbiAgICAgICAgICAgIClcbiAgICAgICAgZWxzZTpcbiAgICAgICAgICAgIGRhdGFbJ2Vycm9yJ10gPSB2aWV3WydlcnJvciddXG4gICAgICAgIHJldHVyblxuICAgIGRhdGFbJ2Vycm9yJ10gPSBOb25lXG4gICAgZGF0YVsnd29ya2VyJ10gPSB2aWV3WydwYXlsb2FkJ11cbiAgICBzdGF0ZV9uYW1lID0gZnJpZW5kbHlfd29ya2VyX3N0YXRlKHZpZXdbJ3BheWxvYWQnXSlcbiAgICBkYXRhWydkcmFpbmluZyddID0gYm9vbCh2aWV3WydwYXlsb2FkJ10uZ2V0KCdkcmFpbmluZycpIG9yIHN0YXRlX25hbWUgPT0gJ3BhdXNlZCcpXG4gICAgaWYgZGF0YVsnZHJhaW5pbmcnXTpcbiAgICAgICAgZGF0YVsnbWVzc2FnZSddID0gJ1RoaXMgY29tcHV0ZXIgaXMgcGF1c2VkLiBJdCB3aWxsIGZpbmlzaCBhbnkgY3VycmVudCB0YXNrLCB0aGVuIHN0b3AgdGFraW5nIG5ldyB3b3JrLidcbiAgICBlbGlmIHZpZXdbJ3BheWxvYWQnXS5nZXQoJ2N1cnJlbnRfdGFzaycpIG9yIHN0YXRlX25hbWUgPT0gJ2J1c3knOlxuICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSAnVGhpcyBjb21wdXRlciBpcyB3b3JraW5nIG9uIGEgdGFzay4nXG4gICAgZWxpZiBzdGF0ZV9uYW1lID09ICdyZWFkeSc6XG4gICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9ICdUaGlzIGNvbXB1dGVyIGlzIGNvbm5lY3RlZCBhbmQgd2FpdGluZyBmb3Igd29yay4nXG4gICAgZWxpZiBzdGF0ZV9uYW1lID09ICdvZmZsaW5lJyBhbmQgZGF0YVsnbG9jYWxfcnVubmluZyddOlxuICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSAnVGhlIHdvcmtlciBpcyBydW5uaW5nIG9uIHRoaXMgY29tcHV0ZXIgYW5kIGNoZWNraW5nIGluIHdpdGggRG9yaWFuIEdyYXkuJ1xuICAgIGVsaWYgc3RhdGVfbmFtZSA9PSAnb2ZmbGluZSc6XG4gICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9ICdUaGUgd29ya2VyIGlzIG5vdCBjb25uZWN0ZWQgeWV0LiBJdCB3aWxsIGtlZXAgdHJ5aW5nIGluIHRoZSBiYWNrZ3JvdW5kLidcbiAgICBlbHNlOlxuICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSAnVGhpcyBjb21wdXRlciBpcyAnICsgc3RhdGVfbmFtZS5yZXBsYWNlKCdfJywgJyAnKSArICcuJ1xuXG5cbmRlZiBicm93c2VyX2Zsb3cob3JpZ2luLCBzY3JpcHRfcGF0aCk6XG4gICAgZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgVGhyZWFkaW5nSFRUUFNlcnZlclxuXG4gICAgc3RhdGUgPSBsb2FkX3N0YXRlKClcbiAgICBwYWdlID0gKFJPT1QgLyAnaG9zdF93ZWIuaHRtbCcpLnJlYWRfdGV4dCgpXG4gICAgaWNvbl9wYXRoID0gUk9PVCAvICdkZ2UtaWNvbi5wbmcnXG4gICAgZGF0YSA9IHtcbiAgICAgICAgJ3BoYXNlJzogJ2xvYWRpbmcnLFxuICAgICAgICAncHJldmlldyc6IE5vbmUsXG4gICAgICAgICdlcnJvcic6IE5vbmUsXG4gICAgICAgICdtZXNzYWdlJzogJycsXG4gICAgICAgICdzbmFwc2hvdCc6IE5vbmUsXG4gICAgICAgICdsb2dzJzogZGVxdWUobWF4bGVuPTQwMCksXG4gICAgICAgICd3b3JrZXInOiBOb25lLFxuICAgICAgICAnbG9jYWxfcnVubmluZyc6IEZhbHNlLFxuICAgICAgICAnbWVtb3J5X2ZyZWUnOiBOb25lLFxuICAgICAgICAnZHJhaW5pbmcnOiBGYWxzZSxcbiAgICAgICAgJ2FsaXZlJzogVHJ1ZSxcbiAgICB9XG4gICAgbG9jayA9IHRocmVhZGluZy5Mb2NrKClcblxuICAgIGRlZiBjb2xsZWN0KCk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHNuYXBzaG90ID0gY29sbGVjdF9zbmFwc2hvdChvcmlnaW4pXG4gICAgICAgICAgICB3aXRoIGxvY2s6XG4gICAgICAgICAgICAgICAgZGF0YVsnc25hcHNob3QnXSA9IHNuYXBzaG90XG4gICAgICAgICAgICAgICAgZGF0YVsncHJldmlldyddID0gcHJldmlld19zdW1tYXJ5KHNuYXBzaG90KVxuICAgICAgICAgICAgICAgIGlmIGRhdGFbJ3BoYXNlJ10gPT0gJ2xvYWRpbmcnOlxuICAgICAgICAgICAgICAgICAgICBkYXRhWydwaGFzZSddID0gJ2Zvcm0nXG4gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICB3aXRoIGxvY2s6XG4gICAgICAgICAgICAgICAgZGF0YVsnZXJyb3InXSA9IHN0cihlcnJvcilcblxuICAgIGRlZiBhcHBlbmRfbG9nKGxpbmUpOlxuICAgICAgICB0ZXh0ID0gbGluZS5yc3RyaXAoKVxuICAgICAgICBpZiBub3QgdGV4dDpcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBoaW50ID0gZnJpZW5kbHlfaW5zdGFsbF9saW5lKHRleHQpXG4gICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgIGRhdGFbJ2xvZ3MnXS5hcHBlbmQodGV4dClcbiAgICAgICAgICAgIGlmIGhpbnQgYW5kIGhpbnQuZ2V0KCdkZXRhaWwnKTpcbiAgICAgICAgICAgICAgICBkYXRhWydtZXNzYWdlJ10gPSBoaW50WydkZXRhaWwnXVxuXG4gICAgZGVmIHBvbGxfc3RhdHVzKCk6XG4gICAgICAgIHdoaWxlIGRhdGFbJ2FsaXZlJ106XG4gICAgICAgICAgICB2aWV3ID0gZmV0Y2hfd29ya2VyX3ZpZXcob3JpZ2luKVxuICAgICAgICAgICAgd2l0aCBsb2NrOlxuICAgICAgICAgICAgICAgIGFwcGx5X3dvcmtlcl92aWV3KGRhdGEsIHZpZXcpXG4gICAgICAgICAgICB0aW1lLnNsZWVwKDIpXG5cbiAgICBkZWYgZmluaXNoX3NldHVwKCk6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgICAgICBkYXRhWydwaGFzZSddID0gJ3NldHVwJ1xuICAgICAgICAgICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9ICdBcHByb3ZlZC4gU2V0dXAgaXMgcnVubmluZyBvbiB0aGlzIGNvbXB1dGVyLidcbiAgICAgICAgICAgIHJ1bl9pbnN0YWxsZXIoc2NyaXB0X3BhdGgsIG9uX2xpbmU9YXBwZW5kX2xvZylcbiAgICAgICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgICAgICBkYXRhWydwaGFzZSddID0gJ3J1bm5pbmcnXG4gICAgICAgICAgICAgICAgZGF0YVsnbWVzc2FnZSddID0gJ1NldHVwIGZpbmlzaGVkLiBUaGlzIGNvbXB1dGVyIGlzIGNoZWNraW5nIGluIGFzIGEgd29ya2VyLidcbiAgICAgICAgICAgIHBvbGxfc3RhdHVzKClcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgICAgICBkYXRhWydlcnJvciddID0gc3RyKGVycm9yKVxuXG4gICAgZGVmIHdhaXRfYW5kX2luc3RhbGwoKTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcmVzdWx0ID0gd2FpdF9mb3JfZW5yb2xsbWVudChvcmlnaW4sIHN0YXRlKVxuICAgICAgICAgICAgc2F2ZV9pbnZpdGF0aW9uKHJlc3VsdCwgb3JpZ2luKVxuICAgICAgICAgICAgZmluaXNoX3NldHVwKClcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgIHdpdGggbG9jazpcbiAgICAgICAgICAgICAgICBkYXRhWydlcnJvciddID0gc3RyKGVycm9yKVxuXG4gICAgY2xhc3MgSGFuZGxlcihCYXNlSFRUUFJlcXVlc3RIYW5kbGVyKTpcbiAgICAgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsICpfYXJncyk6XG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBkZWYgc2VuZF9ieXRlcyhzZWxmLCBib2R5LCBjb250ZW50X3R5cGUsIHN0YXR1cz0yMDApOlxuICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKHN0YXR1cylcbiAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRfdHlwZSlcbiAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tc3RvcmUnKVxuICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1MZW5ndGgnLCBzdHIobGVuKGJvZHkpKSlcbiAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKVxuICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KVxuXG4gICAgICAgIGRlZiBzZW5kX2pzb24oc2VsZiwgcGF5bG9hZCwgc3RhdHVzPTIwMCk6XG4gICAgICAgICAgICBzZWxmLnNlbmRfYnl0ZXMoanNvbi5kdW1wcyhwYXlsb2FkKS5lbmNvZGUoKSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBzdGF0dXMpXG5cbiAgICAgICAgZGVmIHJlYWRfanNvbihzZWxmKTpcbiAgICAgICAgICAgIGxlbmd0aCA9IGludChzZWxmLmhlYWRlcnMuZ2V0KCdDb250ZW50LUxlbmd0aCcpIG9yIDApXG4gICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnJmaWxlLnJlYWQobGVuZ3RoKSBvciBiJ3t9JylcblxuICAgICAgICBkZWYgZG9fR0VUKHNlbGYpOlxuICAgICAgICAgICAgaWYgc2VsZi5wYXRoID09ICcvJyBvciBzZWxmLnBhdGguc3RhcnRzd2l0aCgnL2luZGV4Jyk6XG4gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2J5dGVzKHBhZ2UuZW5jb2RlKCksICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgaWYgc2VsZi5wYXRoIGluICgnL2ljb24ucG5nJywgJy9mYXZpY29uLmljbycpIGFuZCBpY29uX3BhdGguZXhpc3RzKCk6XG4gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2J5dGVzKGljb25fcGF0aC5yZWFkX2J5dGVzKCksICdpbWFnZS9wbmcnKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgaWYgc2VsZi5wYXRoID09ICcvYXBpL3N0YXRlJzpcbiAgICAgICAgICAgICAgICB3aXRoIGxvY2s6XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9qc29uKHB1YmxpY19zdGF0ZShkYXRhKSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQpXG5cbiAgICAgICAgZGVmIGRvX1BPU1Qoc2VsZik6XG4gICAgICAgICAgICBvcmlnaW5faGVhZGVyID0gc2VsZi5oZWFkZXJzLmdldCgnT3JpZ2luJylcbiAgICAgICAgICAgIGNyb3NzX29yaWdpbiA9IG9yaWdpbl9oZWFkZXIgYW5kIHVybGxpYi5wYXJzZS51cmxzcGxpdChvcmlnaW5faGVhZGVyKS5uZXRsb2MgIT0gc2VsZi5oZWFkZXJzLmdldCgnSG9zdCcpXG4gICAgICAgICAgICBpZiBjcm9zc19vcmlnaW4gb3Igc2VsZi5oZWFkZXJzLmdldCgnU2VjLUZldGNoLVNpdGUnKSA9PSAnY3Jvc3Mtc2l0ZSc6XG4gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwMylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIGlmIHNlbGYucGF0aCA9PSAnL2FwaS9lbnJvbGwnOlxuICAgICAgICAgICAgICAgIGJvZHkgPSBzZWxmLnJlYWRfanNvbigpXG4gICAgICAgICAgICAgICAgd2l0aCBsb2NrOlxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdCA9IGRhdGFbJ3NuYXBzaG90J11cbiAgICAgICAgICAgICAgICBpZiBub3Qgc25hcHNob3Q6XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9qc29uKHsnZXJyb3InOiAnU3RpbGwgcmVhZGluZyB0aGlzIGNvbXB1dGVyLid9LCA0MDkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIG5hbWUgPSAoYm9keS5nZXQoJ2Rpc3BsYXlfbmFtZScpIG9yICcnKS5zdHJpcCgpXG4gICAgICAgICAgICAgICAgZW1haWwgPSAoYm9keS5nZXQoJ2VtYWlsJykgb3IgJycpLnN0cmlwKClcbiAgICAgICAgICAgICAgICBwaG9uZSA9IChib2R5LmdldCgncGhvbmUnKSBvciAnJykuc3RyaXAoKVxuICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfanNvbih7J2Vycm9yJzogJ0FkZCB5b3VyIG5hbWUuJ30sIDQwMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgaWYgbm90IGVtYWlsOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfanNvbih7J2Vycm9yJzogJ0FkZCB5b3VyIGVtYWlsLid9LCA0MDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIGlmIG5vdCBwaG9uZTpcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2pzb24oeydlcnJvcic6ICdBZGQgeW91ciBwaG9uZSBudW1iZXIuJ30sIDQwMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBzdWJtaXRfZW5yb2xsbWVudChvcmlnaW4sIHN0YXRlLCBzbmFwc2hvdCwgbmFtZSwgZW1haWwsIHBob25lLCAoYm9keS5nZXQoJ25vdGUnKSBvciAnJykuc3RyaXAoKSlcbiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfanNvbih7J2Vycm9yJzogc3RyKGVycm9yKX0sIDQwMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgd2l0aCBsb2NrOlxuICAgICAgICAgICAgICAgICAgICBkYXRhWydwaGFzZSddID0gJ3BlbmRpbmcnXG4gICAgICAgICAgICAgICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXF1ZXN0IHNlbnQuIFdlIHdpbGwgc2V0IHRoaXMgY29tcHV0ZXIgdXAgaGVyZSBhZnRlciBzb21lb25lIG9uIHRoZSB0ZWFtIGFwcHJvdmVzIGl0LidcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdhaXRfYW5kX2luc3RhbGwsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG4gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2pzb24oeydvayc6IFRydWV9KVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgaWYgc2VsZi5wYXRoIGluICgnL2FwaS9wYXVzZScsICcvYXBpL3Jlc3VtZScsICcvYXBpL3ByZWZlcmVuY2VzJyk6XG4gICAgICAgICAgICAgICAgc2F2ZWQgPSBpbnZpdGF0aW9uX3BheWxvYWQoKVxuICAgICAgICAgICAgICAgIGlmIG5vdCBzYXZlZDpcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2pzb24oeydlcnJvcic6ICdUaGlzIGNvbXB1dGVyIGlzIG5vdCBlbnJvbGxlZCB5ZXQuJ30sIDQwOSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgb3JpZ2luX3ZhbHVlID0gY29uZmlndXJlZF9vcmlnaW4oc2F2ZWQuZ2V0KCdvcmlnaW4nKSwgb3JpZ2luKVxuICAgICAgICAgICAgICAgIHBhdGggPSAnL2NvbXB1dGVfZmxlZXQvZHJhaW4nIGlmIHNlbGYucGF0aC5lbmRzd2l0aCgncGF1c2UnKSBlbHNlICcvY29tcHV0ZV9mbGVldC9yZXN1bWUnXG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnBhdGggPT0gJy9hcGkvcHJlZmVyZW5jZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScsICcnKS5zdGFydHN3aXRoKCdhcHBsaWNhdGlvbi9qc29uJyk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUHJlZmVyZW5jZXMgcmVxdWlyZSBKU09OJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfanNvbihvcmlnaW5fdmFsdWUsICcvY29tcHV0ZV9mbGVldC9wcmVmZXJlbmNlcycsIHNhdmVkWyd0b2tlbiddLCBzZWxmLnJlYWRfanNvbigpKVxuICAgICAgICAgICAgICAgICAgICBlbHNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF9qc29uKG9yaWdpbl92YWx1ZSwgcGF0aCwgc2F2ZWRbJ3Rva2VuJ10sIHt9KVxuICAgICAgICAgICAgICAgICAgICB2aWV3ID0gZmV0Y2hfd29ya2VyX3ZpZXcob3JpZ2luKVxuICAgICAgICAgICAgICAgICAgICB3aXRoIGxvY2s6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBseV93b3JrZXJfdmlldyhkYXRhLCB2aWV3KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2pzb24ocHVibGljX3N0YXRlKGRhdGEpKVxuICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9qc29uKHsnZXJyb3InOiBzdHIoZXJyb3IpfSwgNDAwKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNClcblxuICAgIGlmIGludml0YXRpb25fcGF0aCgpLmV4aXN0cygpOlxuICAgICAgICBpZiBtYWNfbmVlZHNfaW5zdGFsbCgpOlxuICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZmluaXNoX3NldHVwLCBkYWVtb249VHJ1ZSkuc3RhcnQoKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgZGF0YVsncGhhc2UnXSA9ICdydW5uaW5nJ1xuICAgICAgICAgICAgZGF0YVsnbWVzc2FnZSddID0gJ0NoZWNraW5nIGluIHdpdGggRG9yaWFuIEdyYXnigKYnXG4gICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1wb2xsX3N0YXR1cywgZGFlbW9uPVRydWUpLnN0YXJ0KClcbiAgICBlbGlmIHN0YXRlLmdldCgncG9sbF90b2tlbicpOlxuICAgICAgICBkYXRhWydwaGFzZSddID0gJ3BlbmRpbmcnXG4gICAgICAgIGRhdGFbJ21lc3NhZ2UnXSA9ICdSZXF1ZXN0IHNlbnQuIFdhaXRpbmcgZm9yIGFwcHJvdmFs4oCmJ1xuICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13YWl0X2FuZF9pbnN0YWxsLCBkYWVtb249VHJ1ZSkuc3RhcnQoKVxuICAgIGVsc2U6XG4gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNvbGxlY3QsIGRhZW1vbj1UcnVlKS5zdGFydCgpXG4gICAgc2VydmVyID0gVGhyZWFkaW5nSFRUUFNlcnZlcigoJzEyNy4wLjAuMScsIDApLCBIYW5kbGVyKVxuICAgIHVybCA9ICdodHRwOi8vMTI3LjAuMC4xOiVzLycgJSBzZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV1cbiAgICBwcmludCgnT3BlbmluZyBEb3JpYW4gR3JheSBXb3JrZXIgaW4geW91ciBicm93c2VyOlxcbiAgJyArIHVybCwgZmx1c2g9VHJ1ZSlcbiAgICBwcmludCgnSWYgYSB3aW5kb3cgZG9lcyBub3QgYXBwZWFyLCBvcGVuIHRoYXQgYWRkcmVzcyBpbiBhbnkgYnJvd3NlciBvbiB0aGlzIGNvbXB1dGVyLicsIGZsdXNoPVRydWUpXG4gICAgb3Blbl9zeXN0ZW1fYnJvd3Nlcih1cmwpXG4gICAgdHJ5OlxuICAgICAgICBzZXJ2ZXIuc2VydmVfZm9yZXZlcigpXG4gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OlxuICAgICAgICBkYXRhWydhbGl2ZSddID0gRmFsc2VcbiAgICAgICAgcmV0dXJuXG5cblxuZGVmIHJlZnJlc2hfbWFjX2hlbHBlcigpOlxuICAgICMgbGF1bmNoY3RsIGZyb20gYW4gU1NIIHNlc3Npb24gcmVhY2hlcyB0aGUgd3JvbmcgZG9tYWluOyB0aGUgVGVybWluYWwgcmVsYXVuY2ggcmVmcmVzaGVzLlxuICAgIGlmIG9zLmVudmlyb24uZ2V0KCdTU0hfQ09OTkVDVElPTicpOlxuICAgICAgICByZXR1cm5cbiAgICBpbXBvcnQgaW5zdGFsbF9tYWNvc1xuICAgIHRyeTpcbiAgICAgICAgaW5zdGFsbF9tYWNvcy5yZWZyZXNoX2hvc3RfcHJveHkoc3lzLmV4ZWN1dGFibGUpXG4gICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcikgYXMgZXJyb3I6XG4gICAgICAgIHByaW50KCdDb3VsZCBub3QgdXBkYXRlIHRoZSBNYWMgbmV0d29yayBoZWxwZXI6ICVzJyAlIGVycm9yLCBmbHVzaD1UcnVlKVxuICAgIHRyeTpcbiAgICAgICAgaW5zdGFsbF9tYWNvcy5yZWZyZXNoX3ZtX2F1dG9zdGFydCgpXG4gICAgZXhjZXB0IChPU0Vycm9yLCBSdW50aW1lRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKSBhcyBlcnJvcjpcbiAgICAgICAgcHJpbnQoJ0NvdWxkIG5vdCBzZXQgdGhlIHdvcmtlciB0byBzdGFydCBhdCBsb2dpbjogJXMnICUgZXJyb3IsIGZsdXNoPVRydWUpXG5cblxuZGVmIG1haW4oKTpcbiAgICBwYXlsb2FkID0gY29uZmlnKClcbiAgICBvcmlnaW4gPSBwYXlsb2FkWydvcmlnaW4nXVxuICAgIHNjcmlwdF9wYXRoID0gc3lzLmFyZ3ZbMV0gaWYgbGVuKHN5cy5hcmd2KSA+IDEgZWxzZSBfX2ZpbGVfX1xuICAgIGltcG9ydCBob3N0X2FwcFxuICAgIGhvc3RfYXBwLmVuc3VyZV9ydW5uaW5nX2Zyb21fYXBwKHNjcmlwdF9wYXRoKVxuICAgIGlmIGhvc3RfYXBwLnJlZnJlc2hfZnJvbV9vcmlnaW4ob3JpZ2luKTpcbiAgICAgICAgcHl0aG9uID0gaG9zdF9hcHAucHl0aG9uX2Zvcl9sYXVuY2goKVxuICAgICAgICBvcy5leGVjdihweXRob24sIFtweXRob24sIHN0cihob3N0X2FwcC5zb3VyY2Vfcm9vdCgpIC8gJ2hvc3RfZ3VpLnB5JyksIHNjcmlwdF9wYXRoXSlcbiAgICBpZiB3YW50X2hlYWRsZXNzKCk6XG4gICAgICAgIHRlcm1pbmFsX2Zsb3cob3JpZ2luLCBzY3JpcHRfcGF0aClcbiAgICAgICAgcmV0dXJuXG4gICAgbGludXhfcmVsYXVuY2hfdmlhX2Rlc2t0b3Aoc2NyaXB0X3BhdGgpXG4gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOlxuICAgICAgICBtYWNvc19yZWxhdW5jaF92aWFfYXF1YShzY3JpcHRfcGF0aClcbiAgICAgICAgcmVmcmVzaF9tYWNfaGVscGVyKClcbiAgICAgICAgYnJvd3Nlcl9mbG93KG9yaWdpbiwgc2NyaXB0X3BhdGgpXG4gICAgICAgIHJldHVyblxuICAgIGlmIHRrX3dpbmRvd19hdmFpbGFibGUoKTpcbiAgICAgICAgdGtpbnRlcl9mbG93KG9yaWdpbiwgc2NyaXB0X3BhdGgpXG4gICAgICAgIHJldHVyblxuICAgIGJyb3dzZXJfZmxvdyhvcmlnaW4sIHNjcmlwdF9wYXRoKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgbWFpbigpXG4iLCJob3N0X3dlYi5odG1sIjoiPCFET0NUWVBFIGh0bWw+XG48aHRtbCBsYW5nPVwiZW5cIj5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCI+XG4gIDx0aXRsZT5Eb3JpYW4gR3JheSBXb3JrZXI8L3RpdGxlPlxuICA8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIi9pY29uLnBuZ1wiPlxuICA8c3R5bGU+XG4gICAgOnJvb3QgeyBjb2xvci1zY2hlbWU6IGxpZ2h0OyB9XG4gICAgYm9keSB7IG1hcmdpbjogMDsgZm9udDogMTZweC8xLjQ1IHVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgc2Fucy1zZXJpZjsgY29sb3I6ICMxYzE5MTc7IGJhY2tncm91bmQ6ICNmNWYwZWE7IH1cbiAgICBoZWFkZXIgeyBiYWNrZ3JvdW5kOiAjMWMxOTE3OyBjb2xvcjogI2ZhZjdmMjsgcGFkZGluZzogMjhweCAzMnB4IDI0cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogMTZweDsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cbiAgICBoZWFkZXIgaW1nIHsgd2lkdGg6IDQ4cHg7IGhlaWdodDogNDhweDsgYm9yZGVyLXJhZGl1czogMTBweDsgfVxuICAgIGhlYWRlciBwIHsgbWFyZ2luOiA4cHggMCAwOyBjb2xvcjogI2M0YjhhYTsgbWF4LXdpZHRoOiA0MHJlbTsgfVxuICAgIG1haW4geyBtYXgtd2lkdGg6IDQycmVtOyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMjhweCAyNHB4IDQ4cHg7IH1cbiAgICAuY2FyZCB7IGJhY2tncm91bmQ6ICNmZmZjZjg7IGJvcmRlcjogMXB4IHNvbGlkICNlN2UwZDY7IGJvcmRlci1yYWRpdXM6IDE0cHg7IHBhZGRpbmc6IDIwcHggMjJweDsgbWFyZ2luOiAwIDAgMTZweDsgfVxuICAgIGxhYmVsIHsgZGlzcGxheTogYmxvY2s7IGZvbnQtd2VpZ2h0OiA2MDA7IG1hcmdpbjogMTJweCAwIDZweDsgfVxuICAgIGlucHV0LCB0ZXh0YXJlYSB7IHdpZHRoOiAxMDAlOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250OiBpbmhlcml0OyBwYWRkaW5nOiAxMHB4IDEycHg7IGJvcmRlcjogMXB4IHNvbGlkICNlN2UwZDY7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJhY2tncm91bmQ6ICNmZmY7IH1cbiAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0geyB3aWR0aDogYXV0bzsgbWFyZ2luLXJpZ2h0OiA4cHg7IH1cbiAgICBkZXRhaWxzIHsgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIHN1bW1hcnkgeyBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICBidXR0b24geyBmb250OiBpbmhlcml0OyBmb250LXdlaWdodDogNjUwOyBiYWNrZ3JvdW5kOiAjOGIxZTFlOyBjb2xvcjogI2ZmZjsgYm9yZGVyOiAwOyBib3JkZXItcmFkaXVzOiA5OTlweDsgcGFkZGluZzogMTJweCAyMnB4OyBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICBidXR0b24uc2Vjb25kYXJ5IHsgYmFja2dyb3VuZDogIzFjMTkxNzsgfVxuICAgIGJ1dHRvbjpkaXNhYmxlZCB7IG9wYWNpdHk6IC41NTsgY3Vyc29yOiBkZWZhdWx0OyB9XG4gICAgLm11dGVkIHsgY29sb3I6ICM3ODcxNmM7IH1cbiAgICAuZmFjdHMsIC5zdGF0cyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiAxMHB4IDE2cHg7IH1cbiAgICAuZXJyIHsgY29sb3I6ICM5YTM0MTI7IGJhY2tncm91bmQ6ICNmYWVjZTQ7IHBhZGRpbmc6IDEycHggMTRweDsgYm9yZGVyLXJhZGl1czogMTBweDsgfVxuICAgIHByZSB7IG1hcmdpbjogMTJweCAwIDA7IG1heC1oZWlnaHQ6IDE2cmVtOyBvdmVyZmxvdzogYXV0bzsgYmFja2dyb3VuZDogIzFjMTkxNzsgY29sb3I6ICNmYWY3ZjI7IGJvcmRlci1yYWRpdXM6IDEwcHg7IHBhZGRpbmc6IDEycHggMTRweDsgZm9udDogMTJweC8xLjQgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB9XG4gICAgLmFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IGZsZXgtd3JhcDogd3JhcDsgbWFyZ2luLXRvcDogMTRweDsgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxoZWFkZXI+XG4gICAgPGltZyBzcmM9XCIvaWNvbi5wbmdcIiBhbHQ9XCJcIj5cbiAgICA8ZGl2PlxuICAgICAgPGgxPlB1dCBpZGxlIHRpbWUgdG8gd29yazwvaDE+XG4gICAgICA8cD5XaGVuIHRoaXMgY29tcHV0ZXIgaXMgbm90IGluIHVzZSwgaXQgY2FuIGhlbHAgRG9yaWFuIEdyYXkgcHJvY2VzcyBiYWNrZ3JvdW5kIHRhc2tzLiBXZSByZXZpZXcgdGhlIHJlcXVlc3QgYmVmb3JlIGluc3RhbGxpbmcgYW55dGhpbmcuPC9wPlxuICAgIDwvZGl2PlxuICA8L2hlYWRlcj5cbiAgPG1haW4+XG4gICAgPGRpdiBpZD1cInN0YXR1c1wiIGNsYXNzPVwiY2FyZCBtdXRlZFwiPlJlYWRpbmcgdGhpcyBjb21wdXRlcuKApjwvZGl2PlxuICAgIDxmb3JtIGlkPVwiZm9ybVwiIGNsYXNzPVwiY2FyZFwiIGhpZGRlbj5cbiAgICAgIDxwIGNsYXNzPVwibXV0ZWRcIj5XZSBuZXZlciBjb2xsZWN0IHBhc3N3b3JkcywgZmlsZXMsIHBob3RvcywgYnJvd3NpbmcgaGlzdG9yeSwgc2VyaWFsIG51bWJlcnMsIG9yIG5ldHdvcmsgYWRkcmVzc2VzLjwvcD5cbiAgICAgIDxwIGNsYXNzPVwibXV0ZWRcIj5BZnRlciBhcHByb3ZhbCwgc2V0dXAgcHJvZ3Jlc3MgYW5kIGRpYWdub3N0aWMgbWVzc2FnZXMgYXJlIHNlbnQgdG8gb3VyIHRlYW0uPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImZhY3RzXCIgaWQ9XCJmYWN0c1wiPjwvZGl2PlxuICAgICAgPGxhYmVsIGZvcj1cIm5hbWVcIj5Zb3VyIG5hbWU8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwibmFtZVwiIG5hbWU9XCJuYW1lXCIgYXV0b2NvbXBsZXRlPVwibmFtZVwiIHJlcXVpcmVkPlxuICAgICAgPGxhYmVsIGZvcj1cImVtYWlsXCI+RW1haWw8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwiZW1haWxcIiBuYW1lPVwiZW1haWxcIiB0eXBlPVwiZW1haWxcIiBhdXRvY29tcGxldGU9XCJlbWFpbFwiIHJlcXVpcmVkPlxuICAgICAgPGxhYmVsIGZvcj1cInBob25lXCI+UGhvbmU8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwicGhvbmVcIiBuYW1lPVwicGhvbmVcIiB0eXBlPVwidGVsXCIgYXV0b2NvbXBsZXRlPVwidGVsXCIgcmVxdWlyZWQ+XG4gICAgICA8bGFiZWwgZm9yPVwibm90ZVwiPk9wdGlvbmFsIG5vdGU8L2xhYmVsPlxuICAgICAgPHRleHRhcmVhIGlkPVwibm90ZVwiIG5hbWU9XCJub3RlXCIgcm93cz1cIjNcIiBwbGFjZWhvbGRlcj1cIkFueXRoaW5nIHdlIHNob3VsZCBrbm93XCI+PC90ZXh0YXJlYT5cbiAgICAgIDxwPjxidXR0b24gdHlwZT1cInN1Ym1pdFwiPlNlbmQgcmVxdWVzdDwvYnV0dG9uPjwvcD5cbiAgICAgIDxwIGlkPVwiZm9ybS1lcnJvclwiIGNsYXNzPVwiZXJyXCIgaGlkZGVuPjwvcD5cbiAgICA8L2Zvcm0+XG4gICAgPHNlY3Rpb24gaWQ9XCJzZXR1cFwiIGNsYXNzPVwiY2FyZFwiIGhpZGRlbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdXRlZFwiPlNldHVwIGxvZzwvZGl2PlxuICAgICAgPHByZSBpZD1cImxvZ1wiPjwvcHJlPlxuICAgIDwvc2VjdGlvbj5cbiAgICA8c2VjdGlvbiBpZD1cInJ1bm5pbmdcIiBjbGFzcz1cImNhcmRcIiBoaWRkZW4+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdHNcIiBpZD1cInN0YXRzXCI+PC9kaXY+XG4gICAgICA8cCBjbGFzcz1cIm11dGVkXCIgc3R5bGU9XCJtYXJnaW46IDE0cHggMCAwO1wiPlBhdXNlIHN0b3BzIG5ldyB3b3JrLiBBIHRhc2sgYWxyZWFkeSBydW5uaW5nIGlzIGFsbG93ZWQgdG8gZmluaXNoLjwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJwYXVzZVwiIHR5cGU9XCJidXR0b25cIj5QYXVzZTwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwicmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2Vjb25kYXJ5XCIgaGlkZGVuPlJlc3VtZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGV0YWlscz48c3VtbWFyeT5CYWNrZ3JvdW5kIHdvcmsgc2V0dGluZ3M8L3N1bW1hcnk+XG4gICAgICAgIDxmb3JtIGlkPVwicHJlZmVyZW5jZXNcIj5cbiAgICAgICAgICA8bGFiZWw+TWF4aW11bSBSQU0gKE1pQikgPGlucHV0IGlkPVwib3duZXItbWVtb3J5XCIgdHlwZT1cIm51bWJlclwiIG1pbj1cIjUxMlwiIG1heD1cIjI2MjE0NFwiIHJlcXVpcmVkPjwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsPk1heGltdW0gQ1BVIGNvcmVzIDxpbnB1dCBpZD1cIm93bmVyLWNwdVwiIHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCIgbWF4PVwiMjU2XCIgc3RlcD1cIjAuMjVcIiByZXF1aXJlZD48L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9XCJvd25lci1pZGxlXCIgdHlwZT1cImNoZWNrYm94XCI+IE9ubHkgd2hlbiBpZGxlIGZvciBmaXZlIG1pbnV0ZXM8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9XCJvd25lci1hY1wiIHR5cGU9XCJjaGVja2JveFwiPiBPbmx5IG9uIG1haW5zIHBvd2VyPC9sYWJlbD5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIj5TYXZlIHNldHRpbmdzPC9idXR0b24+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtdXRlZFwiPkNoYW5nZXMgYXBwbHkgdG8gbmV3IHdvcmsuIFJ1bm5pbmcgdGFza3MgZmluaXNoIHdpdGhpbiB0aGUgcHJldmlvdXMgbGltaXRzLjwvcD5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kZXRhaWxzPlxuICAgICAgPHAgaWQ9XCJjb250cm9sLWVycm9yXCIgY2xhc3M9XCJlcnJcIiBoaWRkZW4+PC9wPlxuICAgIDwvc2VjdGlvbj5cbiAgPC9tYWluPlxuICA8c2NyaXB0PlxuICAgIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGF0dXMnKTtcbiAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKTtcbiAgICBjb25zdCBzZXR1cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR1cCcpO1xuICAgIGNvbnN0IHJ1bm5pbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnVubmluZycpO1xuICAgIGNvbnN0IGZhY3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhY3RzJyk7XG4gICAgY29uc3Qgc3RhdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhdHMnKTtcbiAgICBjb25zdCBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7XG4gICAgY29uc3QgcGF1c2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGF1c2UnKTtcbiAgICBjb25zdCByZXN1bWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdW1lJyk7XG5cbiAgICBmdW5jdGlvbiBzaG93KGlkLCB0ZXh0KSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGVsLmhpZGRlbiA9ICF0ZXh0O1xuICAgICAgZWwudGV4dENvbnRlbnQgPSB0ZXh0IHx8ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXQobGFiZWwsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYDxkaXY+PGRpdiBjbGFzcz1cIm11dGVkXCI+JHtsYWJlbH08L2Rpdj48ZGl2PiR7dmFsdWUgPz8gJ+KAlCd9PC9kaXY+PC9kaXY+YDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3b3JrZXJDb3B5KGRhdGEpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhLndvcmtlciB8fCB7fTtcbiAgICAgIGNvbnN0IHJhdyA9IHBheWxvYWQuc3RhdGUgfHwgKGRhdGEubG9jYWxfcnVubmluZyA/ICdydW5uaW5nJyA6ICdvZmZsaW5lJyk7XG4gICAgICBjb25zdCBzdGF0ZSA9IChyYXcgPT09ICdvZmZsaW5lJyAmJiBkYXRhLmxvY2FsX3J1bm5pbmcpID8gJ2NoZWNraW5nIGluJyA6IHJhdztcbiAgICAgIGNvbnN0IHRhc2sgPSBwYXlsb2FkLmN1cnJlbnRfdGFzayB8fCB7fTtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9ICh0YXNrLm9wZXJhdGlvbiB8fCAnJykucmVwbGFjZSgvXy9nLCAnICcpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHJ1bm5pbmcgPSBwYXlsb2FkLnRhc2tzX3J1bm5pbmcgfHwgKG9wZXJhdGlvbiA/IDEgOiAwKTtcbiAgICAgIGxldCBhY3Rpdml0eSA9ICdXYWl0aW5nIGZvciB3b3JrJztcbiAgICAgIGlmIChydW5uaW5nID4gMSkgYWN0aXZpdHkgPSAnV29ya2luZyBvbiAnICsgcnVubmluZyArICcgdGFza3MnO1xuICAgICAgZWxzZSBpZiAob3BlcmF0aW9uKSBhY3Rpdml0eSA9ICdXb3JraW5nIG9uICcgKyBvcGVyYXRpb247XG4gICAgICBlbHNlIGlmIChkYXRhLmRyYWluaW5nIHx8IHN0YXRlID09PSAncGF1c2VkJykgYWN0aXZpdHkgPSAnTm90IHRha2luZyBuZXcgd29yayc7XG4gICAgICBlbHNlIGlmIChzdGF0ZSA9PT0gJ2J1c3knKSBhY3Rpdml0eSA9ICdXb3JraW5nIG9uIGEgdGFzayc7XG4gICAgICBlbHNlIGlmIChzdGF0ZSA9PT0gJ29mZmxpbmUnICYmIGRhdGEubG9jYWxfcnVubmluZykgYWN0aXZpdHkgPSAnQ2hlY2tpbmcgaW4nO1xuICAgICAgZWxzZSBpZiAoc3RhdGUgPT09ICdvZmZsaW5lJykgYWN0aXZpdHkgPSAnTm90IGNvbm5lY3RlZCB5ZXQnO1xuICAgICAgcmV0dXJuIHsgc3RhdGUsIGFjdGl2aXR5LCBydW5uaW5nLCB0YXNrczogcGF5bG9hZC50YXNrc19jb21wbGV0ZWQgfTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvc3RhdGUnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgaWYgKGRhdGEuZXJyb3IgJiYgZGF0YS5waGFzZSAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgIHN0YXR1cy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdlcnInO1xuICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBkYXRhLmVycm9yO1xuICAgICAgICBmb3JtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHNldHVwLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJ1bm5pbmcuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEucGhhc2UgPT09ICdwZW5kaW5nJykge1xuICAgICAgICBzdGF0dXMuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIHN0YXR1cy5jbGFzc05hbWUgPSAnY2FyZCc7XG4gICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9IGRhdGEubWVzc2FnZSB8fCAnUmVxdWVzdCBzZW50LiBXZSB3aWxsIHNldCB0aGlzIGNvbXB1dGVyIHVwIGhlcmUgYWZ0ZXIgc29tZW9uZSBvbiB0aGUgdGVhbSBhcHByb3ZlcyBpdC4nO1xuICAgICAgICBmb3JtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHNldHVwLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJ1bm5pbmcuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEucGhhc2UgPT09ICdzZXR1cCcpIHtcbiAgICAgICAgc3RhdHVzLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICBzdGF0dXMuY2xhc3NOYW1lID0gJ2NhcmQnO1xuICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBkYXRhLm1lc3NhZ2UgfHwgJ0FwcHJvdmVkLiBTZXR1cCBpcyBydW5uaW5nIG9uIHRoaXMgY29tcHV0ZXIuJztcbiAgICAgICAgZm9ybS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBzZXR1cC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgcnVubmluZy5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBsb2cudGV4dENvbnRlbnQgPSAoZGF0YS5sb2dzIHx8IFtdKS5qb2luKCdcXG4nKTtcbiAgICAgICAgbG9nLnNjcm9sbFRvcCA9IGxvZy5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLnBoYXNlID09PSAncnVubmluZycpIHtcbiAgICAgICAgY29uc3QgY29weSA9IHdvcmtlckNvcHkoZGF0YSk7XG4gICAgICAgIHN0YXR1cy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdjYXJkJztcbiAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gZGF0YS5tZXNzYWdlIHx8ICdUaGlzIGNvbXB1dGVyIGlzIGNvbm5lY3RlZCBhcyBhIHdvcmtlci4nO1xuICAgICAgICBmb3JtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHNldHVwLmhpZGRlbiA9ICEoZGF0YS5sb2dzIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgIGlmICghc2V0dXAuaGlkZGVuKSB7XG4gICAgICAgICAgbG9nLnRleHRDb250ZW50ID0gKGRhdGEubG9ncyB8fCBbXSkuam9pbignXFxuJyk7XG4gICAgICAgICAgbG9nLnNjcm9sbFRvcCA9IGxvZy5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcnVubmluZy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcG9saWN5ID0gKGRhdGEud29ya2VyIHx8IHt9KS5leGVjdXRpb25fcG9saWN5O1xuICAgICAgICBjb25zdCBwcmVmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWZlcmVuY2VzJyk7XG4gICAgICAgIGlmIChwb2xpY3kgJiYgIXByZWYuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXItbWVtb3J5JykudmFsdWUgPSBwb2xpY3kub3duZXJfbWVtb3J5X2xpbWl0X21iO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lci1jcHUnKS52YWx1ZSA9IHBvbGljeS5vd25lcl9jcHVfbGltaXQ7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyLWlkbGUnKS5jaGVja2VkID0gcG9saWN5LmlkbGVfb25seTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXItYWMnKS5jaGVja2VkID0gcG9saWN5LmFjX29ubHk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdHMuaW5uZXJIVE1MID0gW1xuICAgICAgICAgIHN0YXQoJ1N0YXR1cycsIGNvcHkuc3RhdGUucmVwbGFjZSgvXy9nLCAnICcpKSxcbiAgICAgICAgICBzdGF0KCdBY3Rpdml0eScsIGNvcHkuYWN0aXZpdHkpLFxuICAgICAgICAgIHN0YXQoJ01lbW9yeSBmcmVlJywgZGF0YS5tZW1vcnlfZnJlZSksXG4gICAgICAgICAgc3RhdCgnVGFza3MgcnVubmluZycsIGNvcHkucnVubmluZyksXG4gICAgICAgICAgc3RhdCgnVGFza3MgZmluaXNoZWQnLCBjb3B5LnRhc2tzKSxcbiAgICAgICAgXS5qb2luKCcnKTtcbiAgICAgICAgcGF1c2UuaGlkZGVuID0gZGF0YS5kcmFpbmluZztcbiAgICAgICAgcmVzdW1lLmhpZGRlbiA9ICFkYXRhLmRyYWluaW5nO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5wcmV2aWV3KSB7XG4gICAgICAgIHN0YXR1cy5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBmb3JtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICBzZXR1cC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBydW5uaW5nLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IHAgPSBkYXRhLnByZXZpZXc7XG4gICAgICAgIGZhY3RzLmlubmVySFRNTCA9IFtcbiAgICAgICAgICBbJ0NvbXB1dGVyJywgcC5jb21wdXRlcl0sXG4gICAgICAgICAgWydTeXN0ZW0nLCBwLnN5c3RlbV0sXG4gICAgICAgICAgWydNZW1vcnknLCBwLm1lbW9yeV0sXG4gICAgICAgICAgWydDUFVzJywgcC5jcHVzXSxcbiAgICAgICAgICBbJ1JlYWR5JywgcC5yZWFkeSA/ICdZZXMnIDogJ05vdCB5ZXQnXSxcbiAgICAgICAgICBbJ1JlYWNoYWJsZScsIHAuY29ubmVjdGVkID8gJ1llcycgOiAnTm8nXSxcbiAgICAgICAgXS5tYXAoKFtrLCB2XSkgPT4gc3RhdChrLCB2KSkuam9pbignJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHNob3coJ2Zvcm0tZXJyb3InLCAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9lbnJvbGwnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZGlzcGxheV9uYW1lOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmFtZScpLnZhbHVlLFxuICAgICAgICAgICAgZW1haWw6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbWFpbCcpLnZhbHVlLFxuICAgICAgICAgICAgcGhvbmU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaG9uZScpLnZhbHVlLFxuICAgICAgICAgICAgbm90ZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vdGUnKS52YWx1ZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXJyb3IgfHwgJ0NvdWxkIG5vdCBzZW5kIHRoZSByZXF1ZXN0LicpO1xuICAgICAgICBhd2FpdCBsb2FkKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzaG93KCdmb3JtLWVycm9yJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIGZvcm0ucXVlcnlTZWxlY3RvcignYnV0dG9uJykuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNvbnRyb2woYWN0aW9uKSB7XG4gICAgICBwYXVzZS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICByZXN1bWUuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgc2hvdygnY29udHJvbC1lcnJvcicsICcnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpLycgKyBhY3Rpb24sIHsgbWV0aG9kOiAnUE9TVCcgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXJyb3IgfHwgJ0NvdWxkIG5vdCB1cGRhdGUgdGhpcyBjb21wdXRlci4nKTtcbiAgICAgICAgYXdhaXQgbG9hZCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2hvdygnY29udHJvbC1lcnJvcicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcGF1c2UuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVzdW1lLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWZlcmVuY2VzJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvcHJlZmVyZW5jZXMnLCB7bWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG93bmVyX21lbW9yeV9saW1pdF9tYjogTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lci1tZW1vcnknKS52YWx1ZSksXG4gICAgICAgICAgb3duZXJfY3B1X2xpbWl0OiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyLWNwdScpLnZhbHVlKSxcbiAgICAgICAgICBpZGxlX29ubHk6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lci1pZGxlJykuY2hlY2tlZCxcbiAgICAgICAgICBhY19vbmx5OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXItYWMnKS5jaGVja2VkLFxuICAgICAgICB9KX0pO1xuICAgICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3Qgc2F2ZSBzZXR0aW5ncy4gQ2hlY2sgdGhlIGxpbWl0cyBhbmQgY29ubmVjdGlvbi4nKTtcbiAgICAgICAgYXdhaXQgbG9hZCgpO1xuICAgICAgICBzaG93KCdjb250cm9sLWVycm9yJywgJ1NldHRpbmdzIHNhdmVkLicpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgc2hvdygnY29udHJvbC1lcnJvcicsIGVycm9yLm1lc3NhZ2UpOyB9XG4gICAgfSk7XG5cbiAgICBwYXVzZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycgLCAoKSA9PiBjb250cm9sKCdwYXVzZScpKTtcbiAgICByZXN1bWUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBjb250cm9sKCdyZXN1bWUnKSk7XG4gICAgbG9hZCgpO1xuICAgIHNldEludGVydmFsKGxvYWQsIDIwMDApO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5cbiIsImhvc3RfaW52ZW50b3J5LnB5IjoiXCJcIlwiQ29sbGVjdCBob3N0IG9wZXJhdGlvbmFsIGludmVudG9yeSBmb3IgZW5yb2xsbWVudCByZXF1ZXN0cy5cIlwiXCJcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmltcG9ydCBwbGF0Zm9ybVxuaW1wb3J0IHJlXG5pbXBvcnQgc2h1dGlsXG5pbXBvcnQgc29ja2V0XG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHRlbXBmaWxlXG5pbXBvcnQgdGltZVxuaW1wb3J0IHVybGxpYi5lcnJvclxuaW1wb3J0IHVybGxpYi5yZXF1ZXN0XG5mcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGhcblxuUFJPQkVfSE9TVCA9ICdzcGVlZC5jbG91ZGZsYXJlLmNvbSdcblBST0JFX1BBVEggPSAnL19fdXAnXG5QUk9CRV9CWVRFUyA9IDIgKiAxMDI0ICogMTAyNFxuUFJPQkVfVElNRU9VVCA9IDEwXG5cblxuZGVmIGNvbW1hbmRfb3V0cHV0KGFyZ3MsIHRpbWVvdXQ9OCk6XG4gICAgdHJ5OlxuICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5ydW4oYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9dGltZW91dCwgY2hlY2s9RmFsc2UpLnN0ZG91dC5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJylcbiAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKTpcbiAgICAgICAgcmV0dXJuICcnXG5cblxuZGVmIG51bWJlcih2YWx1ZSk6XG4gICAgdHJ5OlxuICAgICAgICBudW1iZXJfdmFsdWUgPSBmbG9hdCh2YWx1ZSlcbiAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgaWYgbm90IG51bWJlcl92YWx1ZSBvciBudW1iZXJfdmFsdWUgPCAwIG9yIG51bWJlcl92YWx1ZSAhPSBudW1iZXJfdmFsdWU6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcmV0dXJuIGludChudW1iZXJfdmFsdWUpIGlmIG51bWJlcl92YWx1ZSA9PSBpbnQobnVtYmVyX3ZhbHVlKSBlbHNlIG51bWJlcl92YWx1ZVxuXG5cbmRlZiBob3N0X29zX25hbWUoKTpcbiAgICBzeXN0ZW0gPSBwbGF0Zm9ybS5zeXN0ZW0oKVxuICAgIGlmIHN5c3RlbSA9PSAnRGFyd2luJzpcbiAgICAgICAgcmV0dXJuICdtYWNvcydcbiAgICBpZiBzeXN0ZW0gPT0gJ1dpbmRvd3MnOlxuICAgICAgICByZXR1cm4gJ3dpbmRvd3MnXG4gICAgcmV0dXJuICdsaW51eCdcblxuXG5kZWYgbGludXhfcmVsZWFzZSgpOlxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIHBsYXRmb3JtLmZyZWVkZXNrdG9wX29zX3JlbGVhc2UoKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZXR1cm4ge31cblxuXG5kZWYgbWVtb3J5X2J5dGVzKCk6XG4gICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ0Rhcndpbic6XG4gICAgICAgIHJldHVybiBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcubWVtc2l6ZSddKSlcbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnV2luZG93cyc6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcmV0dXJuIG5leHQoKG51bWJlcihsaW5lLnNwbGl0KClbMV0pICogMTAyNCBmb3IgbGluZSBpbiBQYXRoKCcvcHJvYy9tZW1pbmZvJykucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpXG4gICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTWVtVG90YWw6JykpLCBOb25lKVxuXG5cbmRlZiBtZW1pbmZvX3BhZ2VzKCk6XG4gICAgaW5mbyA9IHt9XG4gICAgZm9yIGxpbmUgaW4gUGF0aCgnL3Byb2MvbWVtaW5mbycpLnJlYWRfdGV4dCgpLnNwbGl0bGluZXMoKTpcbiAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KClcbiAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAzOlxuICAgICAgICAgICAgaW5mb1twYXJ0c1swXS5yc3RyaXAoJzonKV0gPSBpbnQocGFydHNbMV0pXG4gICAgcmV0dXJuIGluZm9cblxuXG5kZWYgZGFyd2luX3ZtX3BhZ2VzKCk6XG4gICAgdGV4dCA9IGNvbW1hbmRfb3V0cHV0KFsndm1fc3RhdCddKVxuICAgIHBhZ2VzID0ge31cbiAgICBwYWdlX3NpemUgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcucGFnZXNpemUnXSkpXG4gICAgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdGxpbmVzKCk6XG4gICAgICAgIG1hdGNoID0gcmUubWF0Y2gocidwYWdlIHNpemUgb2YgKFxcZCspIGJ5dGVzJywgbGluZSlcbiAgICAgICAgaWYgbWF0Y2g6XG4gICAgICAgICAgICBwYWdlX3NpemUgPSBpbnQobWF0Y2guZ3JvdXAoMSkpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBrZXksIF8sIHJhdyA9IGxpbmUucGFydGl0aW9uKCc6JylcbiAgICAgICAgZGlnaXRzID0gcmF3LnN0cmlwKCkucnN0cmlwKCcuJylcbiAgICAgICAgaWYgZGlnaXRzLmlzZGlnaXQoKTpcbiAgICAgICAgICAgIHBhZ2VzW2tleS5zdHJpcCgpXSA9IGludChkaWdpdHMpXG4gICAgcmVjbGFpbWFibGUgPSBzdW0ocGFnZXMuZ2V0KG5hbWUsIDApIGZvciBuYW1lIGluIChcbiAgICAgICAgJ1BhZ2VzIGZyZWUnLCAnUGFnZXMgaW5hY3RpdmUnLCAnUGFnZXMgc3BlY3VsYXRpdmUnLCAnUGFnZXMgcHVyZ2VhYmxlJykpXG4gICAgcmV0dXJuIHBhZ2Vfc2l6ZSwgcmVjbGFpbWFibGVcblxuXG5kZWYgYXZhaWxhYmxlX21lbW9yeV9ieXRlcygpOlxuICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdMaW51eCc6XG4gICAgICAgIGluZm8gPSBtZW1pbmZvX3BhZ2VzKClcbiAgICAgICAga2liID0gaW5mby5nZXQoJ01lbUF2YWlsYWJsZScsIGluZm8uZ2V0KCdNZW1GcmVlJykpXG4gICAgICAgIHJldHVybiBraWIgKiAxMDI0IGlmIGtpYiBlbHNlIE5vbmVcbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzpcbiAgICAgICAgcGFnZV9zaXplLCByZWNsYWltYWJsZSA9IGRhcndpbl92bV9wYWdlcygpXG4gICAgICAgIHJldHVybiBwYWdlX3NpemUgKiByZWNsYWltYWJsZSBpZiBwYWdlX3NpemUgYW5kIHJlY2xhaW1hYmxlIGVsc2UgTm9uZVxuICAgIHJldHVybiBOb25lXG5cblxuZGVmIGNwdV9pbnZlbnRvcnkoKTpcbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzpcbiAgICAgICAgbW9kZWwgPSBjb21tYW5kX291dHB1dChbJ3N5c2N0bCcsICctbicsICdtYWNoZGVwLmNwdS5icmFuZF9zdHJpbmcnXSkuc3RyaXAoKSBvciBOb25lXG4gICAgICAgIGxvZ2ljYWwgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcubG9naWNhbGNwdSddKSlcbiAgICAgICAgcGh5c2ljYWwgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcucGh5c2ljYWxjcHUnXSkpXG4gICAgICAgIHNvY2tldHMgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcucGFja2FnZXMnXSkpXG4gICAgICAgIG1pbl9taHogPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcuY3B1ZnJlcXVlbmN5X21pbiddKSlcbiAgICAgICAgbWF4X21oeiA9IG51bWJlcihjb21tYW5kX291dHB1dChbJ3N5c2N0bCcsICctbicsICdody5jcHVmcmVxdWVuY3lfbWF4J10pKVxuICAgICAgICBpZiBtaW5fbWh6OlxuICAgICAgICAgICAgbWluX21oeiAvPSAxXzAwMF8wMDBcbiAgICAgICAgaWYgbWF4X21oejpcbiAgICAgICAgICAgIG1heF9taHogLz0gMV8wMDBfMDAwXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY3B1X21vZGVsJzogbW9kZWwsXG4gICAgICAgICAgICAnY3B1X3ZlbmRvcic6IG1vZGVsLnNwbGl0KClbMF0gaWYgbW9kZWwgZWxzZSBOb25lLFxuICAgICAgICAgICAgJ2NwdV9zb2NrZXRzJzogc29ja2V0cyxcbiAgICAgICAgICAgICdwaHlzaWNhbF9jcHVfY29yZXMnOiBwaHlzaWNhbCxcbiAgICAgICAgICAgICdsb2dpY2FsX2NwdXMnOiBsb2dpY2FsIG9yIG9zX2NwdV9jb3VudCgpLFxuICAgICAgICAgICAgJ2NwdV9taW5fbWh6JzogbWluX21oeixcbiAgICAgICAgICAgICdjcHVfbWF4X21oeic6IG1heF9taHosXG4gICAgICAgIH1cbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnTGludXgnOlxuICAgICAgICBtb2RlbCA9IE5vbmVcbiAgICAgICAgdmVuZG9yID0gTm9uZVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICBmb3IgbGluZSBpbiBQYXRoKCcvcHJvYy9jcHVpbmZvJykucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpOlxuICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnbW9kZWwgbmFtZScpOlxuICAgICAgICAgICAgICAgICAgICBtb2RlbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpXG4gICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd2ZW5kb3JfaWQnKTpcbiAgICAgICAgICAgICAgICAgICAgdmVuZG9yID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKClcbiAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgICAgICBwYXNzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY3B1X21vZGVsJzogbW9kZWwsXG4gICAgICAgICAgICAnY3B1X3ZlbmRvcic6IHZlbmRvcixcbiAgICAgICAgICAgICdjcHVfc29ja2V0cyc6IE5vbmUsXG4gICAgICAgICAgICAncGh5c2ljYWxfY3B1X2NvcmVzJzogTm9uZSxcbiAgICAgICAgICAgICdsb2dpY2FsX2NwdXMnOiBvc19jcHVfY291bnQoKSxcbiAgICAgICAgICAgICdjcHVfbWluX21oeic6IE5vbmUsXG4gICAgICAgICAgICAnY3B1X21heF9taHonOiBOb25lLFxuICAgICAgICB9XG4gICAgcmV0dXJuIHsnbG9naWNhbF9jcHVzJzogb3NfY3B1X2NvdW50KCl9XG5cblxuZGVmIG9zX2NwdV9jb3VudCgpOlxuICAgIHJldHVybiBvcy5jcHVfY291bnQoKSBvciAxXG5cblxuZGVmIGRpc2tfaW52ZW50b3J5X2RhcndpbigpOlxuICAgIGRpc2tzID0gW11cbiAgICBsaXN0aW5nID0gY29tbWFuZF9vdXRwdXQoWydkaXNrdXRpbCcsICdsaXN0JywgJ3BsaXN0J10pXG4gICAgaWYgbm90IGxpc3Rpbmc6XG4gICAgICAgIHJldHVybiBkaXNrc1xuICAgIHRyeTpcbiAgICAgICAgaW1wb3J0IHBsaXN0bGliXG4gICAgICAgIHBheWxvYWQgPSBwbGlzdGxpYi5sb2FkcyhsaXN0aW5nLmVuY29kZSgpKVxuICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIFZhbHVlRXJyb3IsIHBsaXN0bGliLkludmFsaWRGaWxlRXhjZXB0aW9uKTpcbiAgICAgICAgcmV0dXJuIGRpc2tzXG4gICAgZm9yIGluZGV4LCBlbnRyeSBpbiBlbnVtZXJhdGUocGF5bG9hZC5nZXQoJ0FsbERpc2tzQW5kUGFydGl0aW9ucycsIFtdKVs6NjRdKTpcbiAgICAgICAgc2l6ZSA9IG51bWJlcihlbnRyeS5nZXQoJ1NpemUnKSlcbiAgICAgICAgbW9kZWwgPSBlbnRyeS5nZXQoJ0RldmljZUlkZW50aWZpZXInKSBvciBlbnRyeS5nZXQoJ0NvbnRlbnQnLCAnJylcbiAgICAgICAgbWVkaWEgPSAnc3NkJyBpZiBlbnRyeS5nZXQoJ1NvbGlkU3RhdGUnKSBlbHNlICdoZGQnXG4gICAgICAgIGRpc2tzLmFwcGVuZCh7XG4gICAgICAgICAgICAnZGV2aWNlX2tleSc6IGYnZGlzay17aW5kZXh9JyxcbiAgICAgICAgICAgICdtb2RlbCc6IHN0cihtb2RlbClbOjI1NV0sXG4gICAgICAgICAgICAnbWVkaWFfdHlwZSc6IG1lZGlhLFxuICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IE5vbmUsXG4gICAgICAgICAgICAnY2FwYWNpdHlfYnl0ZXMnOiBzaXplLFxuICAgICAgICAgICAgJ3JlbW92YWJsZSc6IGJvb2woZW50cnkuZ2V0KCdSZW1vdmFibGUnKSksXG4gICAgICAgIH0pXG4gICAgcmV0dXJuIGRpc2tzXG5cblxuZGVmIGRpc2tfYnl0ZXNfdG90YWwoKTpcbiAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzpcbiAgICAgICAgdG90YWwgPSAwXG4gICAgICAgIGZvciBkaXNrIGluIGRpc2tfaW52ZW50b3J5X2RhcndpbigpOlxuICAgICAgICAgICAgaWYgZGlzay5nZXQoJ2NhcGFjaXR5X2J5dGVzJyk6XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gZGlza1snY2FwYWNpdHlfYnl0ZXMnXVxuICAgICAgICByZXR1cm4gdG90YWwgb3IgTm9uZVxuICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdMaW51eCc6XG4gICAgICAgIHJldHVybiBzaHV0aWwuZGlza191c2FnZSgnLycpLnRvdGFsXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgcG93ZXJfaW52ZW50b3J5X2RhcndpbigpOlxuICAgIHRleHQgPSBjb21tYW5kX291dHB1dChbJ3Btc2V0JywgJy1nJywgJ2JhdHQnXSlcbiAgICBhYyA9ICdBQyBQb3dlcicgaW4gdGV4dCBvciBcIk5vdyBkcmF3aW5nIGZyb20gJ0FDIFBvd2VyJ1wiIGluIHRleHRcbiAgICBwZXJjZW50ID0gTm9uZVxuICAgIG1hdGNoID0gcmUuc2VhcmNoKHInKFxcZCspJScsIHRleHQpXG4gICAgaWYgbWF0Y2g6XG4gICAgICAgIHBlcmNlbnQgPSBpbnQobWF0Y2guZ3JvdXAoMSkpXG4gICAgYmF0dGVyeV9wcmVzZW50ID0gJ0ludGVybmFsQmF0dGVyeScgaW4gdGV4dCBvciBwZXJjZW50IGlzIG5vdCBOb25lXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2JhdHRlcnlfcHJlc2VudCc6IGJhdHRlcnlfcHJlc2VudCxcbiAgICAgICAgJ2FjX2Nvbm5lY3RlZCc6IGFjLFxuICAgICAgICAnYmF0dGVyeV9wZXJjZW50JzogcGVyY2VudCxcbiAgICAgICAgJ2JhdHRlcnlfc3RhdHVzJzogJ0Rpc2NoYXJnaW5nJyBpZiAnZGlzY2hhcmdpbmcnIGluIHRleHQubG93ZXIoKSBlbHNlIE5vbmUsXG4gICAgICAgICdiYXR0ZXJ5X3JlbWFpbmluZ19zZWNvbmRzJzogTm9uZSxcbiAgICAgICAgJ3Bvd2VyX3Byb2ZpbGUnOiBOb25lLFxuICAgIH1cblxuXG5kZWYgbWFjX21vZGVsKCk6XG4gICAgdGV4dCA9IGNvbW1hbmRfb3V0cHV0KFsnc3lzY3RsJywgJy1uJywgJ2h3Lm1vZGVsJ10pLnN0cmlwKClcbiAgICByZXR1cm4gJ0FwcGxlJywgdGV4dCBvciBOb25lXG5cblxuZGVmIG5ldHdvcmtfaW52ZW50b3J5X2RhcndpbigpOlxuICAgIGludGVyZmFjZXMgPSBbXVxuICAgIHRleHQgPSBjb21tYW5kX291dHB1dChbJ25ldHdvcmtzZXR1cCcsICctbGlzdGFsbGhhcmR3YXJlcG9ydHMnXSlcbiAgICBjdXJyZW50ID0ge31cbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdIYXJkd2FyZSBQb3J0OicpOlxuICAgICAgICAgICAgY3VycmVudCA9IHsnY29ubmVjdGlvbl90eXBlJzogbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCl9XG4gICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdEZXZpY2U6Jyk6XG4gICAgICAgICAgICBkZXZpY2UgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKVxuICAgICAgICAgICAgc3BlZWQgPSBudW1iZXIoY29tbWFuZF9vdXRwdXQoWydpZmNvbmZpZycsIGRldmljZV0pLnNwbGl0KCdtZWRpYTonKVstMV0uc3BsaXQoKVswXS5yZXBsYWNlKCdiYXNlVCcsICcnKSkgaWYgc2h1dGlsLndoaWNoKCdpZmNvbmZpZycpIGVsc2UgTm9uZVxuICAgICAgICAgICAgaW50ZXJmYWNlcy5hcHBlbmQoe1xuICAgICAgICAgICAgICAgICdkZXZpY2Vfa2V5JzogZGV2aWNlLFxuICAgICAgICAgICAgICAgICdjb25uZWN0aW9uX3R5cGUnOiBjdXJyZW50LmdldCgnY29ubmVjdGlvbl90eXBlJyksXG4gICAgICAgICAgICAgICAgJ2xpbmtfc3RhdGUnOiAndXAnLFxuICAgICAgICAgICAgICAgICdzcGVlZF9tYnBzJzogc3BlZWQsXG4gICAgICAgICAgICB9KVxuICAgIHJldHVybiBpbnRlcmZhY2VzWzo2NF1cblxuXG5kZWYgcmVhZGluZXNzX2RhcndpbigpOlxuICAgIGhvbWVicmV3ID0gc2h1dGlsLndoaWNoKCdicmV3JykgaXMgbm90IE5vbmVcbiAgICBoeXBlcnZpc29yX3N1cHBvcnQgPSBjb21tYW5kX291dHB1dChbJ3N5c2N0bCcsICctbicsICdrZXJuLmh2X3N1cHBvcnQnXSkuc3RyaXAoKVxuICAgIHJldHVybiB7XG4gICAgICAgICMgRG9ja2VyIHJ1bnMgaW5zaWRlIHRoZSBMaW1hIGd1ZXN0IGFuZCBpcyBpbnN0YWxsZWQgYWZ0ZXIgYXBwcm92YWwuXG4gICAgICAgICdkb2NrZXInOiBOb25lLFxuICAgICAgICAnc3lzdGVtZF9jZ3JvdXBzX3YyJzogTm9uZSxcbiAgICAgICAgJ3ZpcnR1YWxpemF0aW9uJzogeycwJzogRmFsc2UsICcxJzogVHJ1ZX0uZ2V0KGh5cGVydmlzb3Jfc3VwcG9ydCksXG4gICAgICAgICdob3N0X2h5cGVydmlzb3InOiB7JzAnOiBGYWxzZSwgJzEnOiBUcnVlfS5nZXQoaHlwZXJ2aXNvcl9zdXBwb3J0KSxcbiAgICAgICAgJ2xpbWEnOiBzaHV0aWwud2hpY2goJ2xpbWFjdGwnKSBpcyBub3QgTm9uZSxcbiAgICAgICAgJ2hvbWVicmV3JzogaG9tZWJyZXcsXG4gICAgICAgICd3c2wnOiBOb25lLFxuICAgICAgICAndWJ1bnR1JzogTm9uZSxcbiAgICAgICAgJ3dzbGcnOiBOb25lLFxuICAgICAgICAnc3dhcF9lbmFibGVkJzogRmFsc2UsXG4gICAgICAgICdhZG1pbl9yZXF1aXJlZCc6IG5vdCBob21lYnJldyBhbmQgb3MuZ2V0ZXVpZCgpICE9IDAsXG4gICAgICAgICdyZXN0YXJ0X3JlcXVpcmVkJzogRmFsc2UsXG4gICAgfVxuXG5cbmRlZiBwbGFubmVkX2NhcGFjaXR5X2RhcndpbihtZW1vcnksIGNwdXMpOlxuICAgIGhvc3RfZ2liID0gbWF4KG1lbW9yeSBvciAwLCAxKSAvLyAoMTAyNCAqKiAzKVxuICAgIGdpYiA9IG1heCg0LCBtaW4oMzIsIGhvc3RfZ2liIC8vIDIpKVxuICAgIGlmIGdpYiA+PSBob3N0X2dpYjpcbiAgICAgICAgZ2liID0gbWF4KDIsIGhvc3RfZ2liIC0gMilcbiAgICBjb3JlcyA9IG1heCgyLCBtaW4oOCwgbWF4KGludChjcHVzIG9yIDIpLCAyKSAvLyAyKSlcbiAgICByZXR1cm4geydtZW1vcnlfYnl0ZXMnOiBnaWIgKiAxMDI0ICoqIDMsICdsb2dpY2FsX2NwdXMnOiBjb3JlcywgJ2NpX21lbW9yeV9yZXNlcnZlZF9ieXRlcyc6IE5vbmV9XG5cblxuZGVmIHJlYWRpbmVzc19saW51eCgpOlxuICAgIHN3YXBfdG90YWwgPSAwXG4gICAgdHJ5OlxuICAgICAgICBzd2FwX3RvdGFsID0gbmV4dChpbnQobGluZS5zcGxpdCgpWzFdKSBmb3IgbGluZSBpbiBQYXRoKCcvcHJvYy9tZW1pbmZvJykucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpIGlmIGxpbmUuc3RhcnRzd2l0aCgnU3dhcFRvdGFsOicpKVxuICAgIGV4Y2VwdCAoU3RvcEl0ZXJhdGlvbiwgVmFsdWVFcnJvciwgT1NFcnJvcik6XG4gICAgICAgIHBhc3NcbiAgICBkb2NrZXJfb2sgPSBGYWxzZVxuICAgIGNncm91cF9vayA9IEZhbHNlXG4gICAgaWYgc2h1dGlsLndoaWNoKCdkb2NrZXInKTpcbiAgICAgICAgaW5mbyA9IGNvbW1hbmRfb3V0cHV0KFsnZG9ja2VyJywgJ2luZm8nLCAnLS1mb3JtYXQnLCAne3suQ2dyb3VwRHJpdmVyfX0ge3suQ2dyb3VwVmVyc2lvbn19J10pXG4gICAgICAgIGRvY2tlcl9vayA9IFRydWVcbiAgICAgICAgY2dyb3VwX29rID0gaW5mby5zdHJpcCgpID09ICdzeXN0ZW1kIDInXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2RvY2tlcic6IGRvY2tlcl9vayxcbiAgICAgICAgJ3N5c3RlbWRfY2dyb3Vwc192Mic6IGNncm91cF9vayxcbiAgICAgICAgJ3ZpcnR1YWxpemF0aW9uJzogUGF0aCgnL3J1bi9zeXN0ZW1kL3N5c3RlbScpLmV4aXN0cygpLFxuICAgICAgICAnbGltYSc6IE5vbmUsXG4gICAgICAgICdob21lYnJldyc6IE5vbmUsXG4gICAgICAgICd3c2wnOiBOb25lLFxuICAgICAgICAndWJ1bnR1JzogbGludXhfcmVsZWFzZSgpLmdldCgnSUQnKSA9PSAndWJ1bnR1JyxcbiAgICAgICAgJ3dzbGcnOiBib29sKG9zLmVudmlyb24uZ2V0KCdXQVlMQU5EX0RJU1BMQVknKSBvciBvcy5lbnZpcm9uLmdldCgnRElTUExBWScpKSxcbiAgICAgICAgJ3N3YXBfZW5hYmxlZCc6IHN3YXBfdG90YWwgPiAwLFxuICAgICAgICAnYWRtaW5fcmVxdWlyZWQnOiBvcy5nZXRldWlkKCkgIT0gMCxcbiAgICAgICAgJ3Jlc3RhcnRfcmVxdWlyZWQnOiBGYWxzZSxcbiAgICB9XG5cblxuZGVmIHBsYW5uZWRfY2FwYWNpdHlfbGludXgobWVtb3J5LCBjcHVzLCByZXNlcnZlZD1Ob25lKTpcbiAgICBcIlwiXCJIb3N0IFJBTSBhbmQgdGhlIENJIGNhcC4gVGhlIHNlcnZlciBzdWJ0cmFjdHMgdGhlIGNhcCBhbmQgYSA1MTIgTWlCIHJlc2VydmUgb25jZS5cIlwiXCJcbiAgICBtZW1vcnkgPSBtZW1vcnkgb3IgMFxuICAgIGNwdXMgPSBjcHVzIG9yIDFcbiAgICByZXNlcnZlZCA9IHJlc2VydmVkIG9yIDBcbiAgICByZXR1cm4geydtZW1vcnlfYnl0ZXMnOiBtZW1vcnksICdsb2dpY2FsX2NwdXMnOiBjcHVzLCAnY2lfbWVtb3J5X3Jlc2VydmVkX2J5dGVzJzogcmVzZXJ2ZWQgb3IgTm9uZX1cblxuXG5kZWYgbG9hZF93aW5kb3dzX3NuYXBzaG90KHBhdGgpOlxuICAgIHJldHVybiBqc29uLmxvYWRzKFBhdGgocGF0aCkucmVhZF90ZXh0KCkpXG5cblxuZGVmIGNvbGxlY3Rfd2luZG93cyhwYXRoKTpcbiAgICBzbmFwc2hvdCA9IGxvYWRfd2luZG93c19zbmFwc2hvdChwYXRoKVxuICAgIGhhcmR3YXJlID0gc25hcHNob3QuZ2V0KCdoYXJkd2FyZScsIHt9KVxuICAgIHRlbGVtZXRyeSA9IHNuYXBzaG90LmdldCgndGVsZW1ldHJ5Jywge30pXG4gICAgcmVhZGluZXNzID0gc25hcHNob3QuZ2V0KCdyZWFkaW5lc3MnLCB7fSlcbiAgICBjb25uZWN0aXZpdHkgPSBzbmFwc2hvdC5nZXQoJ2Nvbm5lY3Rpdml0eScsIHt9KVxuICAgIGNhcGFjaXR5ID0gc25hcHNob3QuZ2V0KCdwbGFubmVkX3dvcmtlcl9jYXBhY2l0eScsIHt9KVxuICAgIHJldHVybiBoYXJkd2FyZSwgdGVsZW1ldHJ5LCByZWFkaW5lc3MsIGNvbm5lY3Rpdml0eSwgY2FwYWNpdHlcblxuXG5kZWYgY29sbGVjdF9kYXJ3aW4oKTpcbiAgICBtYW51ZmFjdHVyZXIsIG1vZGVsID0gbWFjX21vZGVsKClcbiAgICByZWxlYXNlID0gbGludXhfcmVsZWFzZSgpIGlmIEZhbHNlIGVsc2Uge31cbiAgICBtZW1vcnkgPSBtZW1vcnlfYnl0ZXMoKVxuICAgIGNwdXMgPSBjcHVfaW52ZW50b3J5KClcbiAgICBoYXJkd2FyZSA9IHtcbiAgICAgICAgJ2hvc3RuYW1lJzogc29ja2V0LmdldGhvc3RuYW1lKCksXG4gICAgICAgICdtYW51ZmFjdHVyZXInOiBtYW51ZmFjdHVyZXIsXG4gICAgICAgICdoYXJkd2FyZV9tb2RlbCc6IG1vZGVsLFxuICAgICAgICAnYXJjaGl0ZWN0dXJlJzogcGxhdGZvcm0ubWFjaGluZSgpLFxuICAgICAgICAnb3NfbmFtZSc6ICdtYWNPUycsXG4gICAgICAgICdvc192ZXJzaW9uJzogcGxhdGZvcm0ubWFjX3ZlcigpWzBdLFxuICAgICAgICAna2VybmVsX3ZlcnNpb24nOiBwbGF0Zm9ybS5yZWxlYXNlKCksXG4gICAgICAgICdtZW1vcnlfYnl0ZXMnOiBtZW1vcnksXG4gICAgICAgICdkaXNrX2J5dGVzJzogZGlza19ieXRlc190b3RhbCgpLFxuICAgICAgICAnbG9naWNhbF9jcHVzJzogY3B1cy5nZXQoJ2xvZ2ljYWxfY3B1cycpLFxuICAgICAgICAqKmNwdXMsXG4gICAgICAgICdkaXNrcyc6IGRpc2tfaW52ZW50b3J5X2RhcndpbigpLFxuICAgICAgICAnbmV0d29ya19pbnRlcmZhY2VzJzogbmV0d29ya19pbnZlbnRvcnlfZGFyd2luKCksXG4gICAgfVxuICAgIHRlbGVtZXRyeSA9IHtcbiAgICAgICAgJ21lbW9yeV9hdmFpbGFibGVfYnl0ZXMnOiBhdmFpbGFibGVfbWVtb3J5X2J5dGVzKCksXG4gICAgICAgICoqcG93ZXJfaW52ZW50b3J5X2RhcndpbigpLFxuICAgIH1cbiAgICByZWFkaW5lc3MgPSByZWFkaW5lc3NfZGFyd2luKClcbiAgICBjb25uZWN0aXZpdHkgPSBwcm9iZV9jb25uZWN0aXZpdHkob3MuZW52aXJvbi5nZXQoJ0RHRV9PUklHSU4nLCAnJykpXG4gICAgY2FwYWNpdHkgPSBwbGFubmVkX2NhcGFjaXR5X2RhcndpbihtZW1vcnksIGhhcmR3YXJlWydsb2dpY2FsX2NwdXMnXSlcbiAgICByZXR1cm4gaGFyZHdhcmUsIHRlbGVtZXRyeSwgcmVhZGluZXNzLCBjb25uZWN0aXZpdHksIGNhcGFjaXR5XG5cblxuZGVmIGNvbGxlY3RfbGludXgoKTpcbiAgICByZWxlYXNlID0gbGludXhfcmVsZWFzZSgpXG4gICAgbWVtb3J5ID0gbWVtb3J5X2J5dGVzKClcbiAgICBjcHVzID0gY3B1X2ludmVudG9yeSgpXG4gICAgcmVzZXJ2ZWQgPSBOb25lXG4gICAgcmVzZXJ2YXRpb24gPSBQYXRoKCcvc3lzL2ZzL2Nncm91cC9jaS5zbGljZS9tZW1vcnkubWF4JylcbiAgICBpZiByZXNlcnZhdGlvbi5leGlzdHMoKTpcbiAgICAgICAgcmF3ID0gcmVzZXJ2YXRpb24ucmVhZF90ZXh0KCkuc3RyaXAoKVxuICAgICAgICByZXNlcnZlZCA9IGludChyYXcpIGlmIHJhdy5pc2RpZ2l0KCkgZWxzZSBOb25lXG4gICAgaGFyZHdhcmUgPSB7XG4gICAgICAgICdob3N0bmFtZSc6IHNvY2tldC5nZXRob3N0bmFtZSgpLFxuICAgICAgICAnbWFudWZhY3R1cmVyJzogcmVhZF90ZXh0KCcvc3lzL2NsYXNzL2RtaS9pZC9zeXNfdmVuZG9yJyksXG4gICAgICAgICdoYXJkd2FyZV9tb2RlbCc6IHJlYWRfdGV4dCgnL3N5cy9jbGFzcy9kbWkvaWQvcHJvZHVjdF9uYW1lJyksXG4gICAgICAgICdhcmNoaXRlY3R1cmUnOiBwbGF0Zm9ybS5tYWNoaW5lKCksXG4gICAgICAgICdvc19uYW1lJzogcmVsZWFzZS5nZXQoJ05BTUUnKSxcbiAgICAgICAgJ29zX3ZlcnNpb24nOiByZWxlYXNlLmdldCgnVkVSU0lPTl9JRCcpLFxuICAgICAgICAna2VybmVsX3ZlcnNpb24nOiBwbGF0Zm9ybS5yZWxlYXNlKCksXG4gICAgICAgICdtZW1vcnlfYnl0ZXMnOiBtZW1vcnksXG4gICAgICAgICdkaXNrX2J5dGVzJzogZGlza19ieXRlc190b3RhbCgpLFxuICAgICAgICAnY2lfbWVtb3J5X3Jlc2VydmVkX2J5dGVzJzogcmVzZXJ2ZWQsXG4gICAgICAgICoqY3B1cyxcbiAgICB9XG4gICAgdGVsZW1ldHJ5ID0geydtZW1vcnlfYXZhaWxhYmxlX2J5dGVzJzogYXZhaWxhYmxlX21lbW9yeV9ieXRlcygpfVxuICAgIHJlYWRpbmVzcyA9IHJlYWRpbmVzc19saW51eCgpXG4gICAgY29ubmVjdGl2aXR5ID0gcHJvYmVfY29ubmVjdGl2aXR5KG9zLmVudmlyb24uZ2V0KCdER0VfT1JJR0lOJywgJycpKVxuICAgIGNhcGFjaXR5ID0gcGxhbm5lZF9jYXBhY2l0eV9saW51eChtZW1vcnksIGhhcmR3YXJlLmdldCgnbG9naWNhbF9jcHVzJyksIHJlc2VydmVkKVxuICAgIHJldHVybiBoYXJkd2FyZSwgdGVsZW1ldHJ5LCByZWFkaW5lc3MsIGNvbm5lY3Rpdml0eSwgY2FwYWNpdHlcblxuXG5kZWYgcmVhZF90ZXh0KHBhdGgpOlxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIFBhdGgocGF0aCkucmVhZF90ZXh0KCkuc3RyaXAoKSBvciBOb25lXG4gICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgIHJldHVybiBOb25lXG5cblxuZGVmIHByb2JlX2Nvbm5lY3Rpdml0eShvcmlnaW4pOlxuICAgIHJlc3VsdCA9IHsnc2VydmVyX3JlYWNoYWJsZSc6IEZhbHNlLCAndXBsaW5rX3Byb2JlX29rJzogTm9uZSwgJ3VwbGlua19wcm9iZV9icHMnOiBOb25lfVxuICAgIGlmIG9yaWdpbjpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3Qob3JpZ2luICsgJy91cCcsIG1ldGhvZD0nR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17J25ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC4wLjAgU2FmYXJpLzUzNy4zNid9KVxuICAgICAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MTApIGFzIHJlc3BvbnNlOlxuICAgICAgICAgICAgICAgIHJlc3VsdFsnc2VydmVyX3JlYWNoYWJsZSddID0gcmVzcG9uc2Uuc3RhdHVzID09IDIwMFxuICAgICAgICBleGNlcHQgKHVybGxpYi5lcnJvci5VUkxFcnJvciwgVmFsdWVFcnJvciwgVGltZW91dEVycm9yLCBPU0Vycm9yKTpcbiAgICAgICAgICAgIHJlc3VsdFsnc2VydmVyX3JlYWNoYWJsZSddID0gRmFsc2VcbiAgICBzdGFydGVkID0gdGltZS5tb25vdG9uaWMoKVxuICAgIGJvZHkgPSBiJ1xcMCcgKiBQUk9CRV9CWVRFU1xuICAgIHRyeTpcbiAgICAgICAgcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoXG4gICAgICAgICAgICBmJ2h0dHBzOi8ve1BST0JFX0hPU1R9e1BST0JFX1BBVEh9JywgZGF0YT1ib2R5LCBtZXRob2Q9J1BVVCcsXG4gICAgICAgICAgICBoZWFkZXJzPXsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KVxuICAgICAgICB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxdWVzdCwgdGltZW91dD1QUk9CRV9USU1FT1VUKSBhcyByZXNwb25zZTpcbiAgICAgICAgICAgIHJlc3BvbnNlLnJlYWQoKVxuICAgICAgICAgICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgIGVsYXBzZWQgPSBtYXgodGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0ZWQsIDAuMDAxKVxuICAgICAgICByZXN1bHRbJ3VwbGlua19wcm9iZV9vayddID0gc3RhdHVzIGluICgyMDAsIDQwMylcbiAgICAgICAgcmVzdWx0Wyd1cGxpbmtfcHJvYmVfYnBzJ10gPSBpbnQoUFJPQkVfQllURVMgLyBlbGFwc2VkKSBpZiByZXN1bHRbJ3VwbGlua19wcm9iZV9vayddIGVsc2UgMFxuICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yIGFzIGVycm9yOlxuICAgICAgICBlbGFwc2VkID0gbWF4KHRpbWUubW9ub3RvbmljKCkgLSBzdGFydGVkLCAwLjAwMSlcbiAgICAgICAgcmVzdWx0Wyd1cGxpbmtfcHJvYmVfb2snXSA9IGVycm9yLmNvZGUgPT0gNDAzXG4gICAgICAgIHJlc3VsdFsndXBsaW5rX3Byb2JlX2JwcyddID0gaW50KFBST0JFX0JZVEVTIC8gZWxhcHNlZCkgaWYgcmVzdWx0Wyd1cGxpbmtfcHJvYmVfb2snXSBlbHNlIDBcbiAgICBleGNlcHQgKHVybGxpYi5lcnJvci5VUkxFcnJvciwgVGltZW91dEVycm9yLCBPU0Vycm9yKTpcbiAgICAgICAgcmVzdWx0Wyd1cGxpbmtfcHJvYmVfb2snXSA9IEZhbHNlXG4gICAgICAgIHJlc3VsdFsndXBsaW5rX3Byb2JlX2JwcyddID0gMFxuICAgIHJldHVybiByZXN1bHRcblxuXG5kZWYgY29sbGVjdChvcmlnaW49JycsIHdpbmRvd3Nfc25hcHNob3Q9Tm9uZSk6XG4gICAgaWYgd2luZG93c19zbmFwc2hvdDpcbiAgICAgICAgaGFyZHdhcmUsIHRlbGVtZXRyeSwgcmVhZGluZXNzLCBjb25uZWN0aXZpdHksIGNhcGFjaXR5ID0gY29sbGVjdF93aW5kb3dzKHdpbmRvd3Nfc25hcHNob3QpXG4gICAgZWxpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzpcbiAgICAgICAgb3MuZW52aXJvblsnREdFX09SSUdJTiddID0gb3JpZ2luXG4gICAgICAgIGhhcmR3YXJlLCB0ZWxlbWV0cnksIHJlYWRpbmVzcywgY29ubmVjdGl2aXR5LCBjYXBhY2l0eSA9IGNvbGxlY3RfZGFyd2luKClcbiAgICBlbHNlOlxuICAgICAgICBvcy5lbnZpcm9uWydER0VfT1JJR0lOJ10gPSBvcmlnaW5cbiAgICAgICAgaGFyZHdhcmUsIHRlbGVtZXRyeSwgcmVhZGluZXNzLCBjb25uZWN0aXZpdHksIGNhcGFjaXR5ID0gY29sbGVjdF9saW51eCgpXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2hvc3Rfb3MnOiBob3N0X29zX25hbWUoKSxcbiAgICAgICAgJ2hvc3RfaW52ZW50b3J5Jzoge1xuICAgICAgICAgICAgJ2hhcmR3YXJlJzogaGFyZHdhcmUsXG4gICAgICAgICAgICAndGVsZW1ldHJ5JzogdGVsZW1ldHJ5LFxuICAgICAgICAgICAgJ3JlYWRpbmVzcyc6IHJlYWRpbmVzcyxcbiAgICAgICAgICAgICdjb25uZWN0aXZpdHknOiBjb25uZWN0aXZpdHksXG4gICAgICAgIH0sXG4gICAgICAgICdwbGFubmVkX3dvcmtlcl9jYXBhY2l0eSc6IGNhcGFjaXR5LFxuICAgIH1cblxuXG5pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOlxuICAgIHNuYXBzaG90ID0gc3lzLmFyZ3ZbMV0gaWYgbGVuKHN5cy5hcmd2KSA+IDEgZWxzZSBOb25lXG4gICAgcHJpbnQoanNvbi5kdW1wcyhjb2xsZWN0KG9zLmVudmlyb24uZ2V0KCdER0VfT1JJR0lOJywgJycpLCBzbmFwc2hvdCksIGluZGVudD0yKSlcbiIsImhvc3RfaW52ZW50b3J5LnBzMSI6IiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCdcblxuZnVuY3Rpb24gUmVhZE51bWJlcihbb2JqZWN0XSRWYWx1ZSkge1xuICBpZiAoJG51bGwgLWVxICRWYWx1ZSkgeyByZXR1cm4gJG51bGwgfVxuICAkcGFyc2VkID0gMC4wXG4gIGlmIChbZG91YmxlXTo6VHJ5UGFyc2UoW3N0cmluZ10kVmFsdWUsIFtyZWZdJHBhcnNlZCkgLWFuZCAkcGFyc2VkIC1nZSAwKSB7XG4gICAgcmV0dXJuIFtpbnQ2NF0kcGFyc2VkXG4gIH1cbiAgcmV0dXJuICRudWxsXG59XG5cbiRjb21wdXRlciA9IEdldC1DaW1JbnN0YW5jZSBXaW4zMl9Db21wdXRlclN5c3RlbVxuJG9zID0gR2V0LUNpbUluc3RhbmNlIFdpbjMyX09wZXJhdGluZ1N5c3RlbVxuJGNwdXMgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJvY2Vzc29yXG4kbG9naWNhbCA9ICgkY3B1cyB8IE1lYXN1cmUtT2JqZWN0IC1Qcm9wZXJ0eSBOdW1iZXJPZkxvZ2ljYWxQcm9jZXNzb3JzIC1TdW0pLlN1bVxuJHBoeXNpY2FsID0gKCRjcHVzIHwgTWVhc3VyZS1PYmplY3QgLVByb3BlcnR5IE51bWJlck9mQ29yZXMgLVN1bSkuU3VtXG4kbWVtb3J5ID0gUmVhZE51bWJlcigkY29tcHV0ZXIuVG90YWxQaHlzaWNhbE1lbW9yeSlcbiRmcmVlID0gUmVhZE51bWJlcigkb3MuRnJlZVBoeXNpY2FsTWVtb3J5KVxuaWYgKCRmcmVlKSB7ICRmcmVlID0gJGZyZWUgKiAxMDI0IH1cblxuJGRpc2tzID0gQChHZXQtUGh5c2ljYWxEaXNrIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgNjQgfCBGb3JFYWNoLU9iamVjdCB7XG4gIEB7XG4gICAgZGV2aWNlX2tleSA9ICRfLkRldmljZUlkXG4gICAgbW9kZWwgPSAkXy5GcmllbmRseU5hbWVcbiAgICBtZWRpYV90eXBlID0gaWYgKCRfLk1lZGlhVHlwZSAtZXEgJ1NTRCcpIHsgJ3NzZCcgfSBlbHNlaWYgKCRfLk1lZGlhVHlwZSAtZXEgJ0hERCcpIHsgJ2hkZCcgfSBlbHNlIHsgJG51bGwgfVxuICAgIHRyYW5zcG9ydCA9ICRfLkJ1c1R5cGVcbiAgICBjYXBhY2l0eV9ieXRlcyA9IFJlYWROdW1iZXIoJF8uU2l6ZSlcbiAgICByZW1vdmFibGUgPSBbYm9vbF0kXy5Jc1JlbW92YWJsZVxuICB9XG59KVxuXG4kaW50ZXJmYWNlcyA9IEAoR2V0LU5ldEFkYXB0ZXIgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCA2NCB8IEZvckVhY2gtT2JqZWN0IHtcbiAgQHtcbiAgICBkZXZpY2Vfa2V5ID0gJF8uTmFtZVxuICAgIGNvbm5lY3Rpb25fdHlwZSA9ICRfLkludGVyZmFjZURlc2NyaXB0aW9uXG4gICAgbGlua19zdGF0ZSA9ICRfLlN0YXR1c1xuICAgIHNwZWVkX21icHMgPSBpZiAoJF8uTGlua1NwZWVkKSB7IFtpbnRdKCRfLkxpbmtTcGVlZCAvIDEwMDAwMDApIH0gZWxzZSB7ICRudWxsIH1cbiAgfVxufSlcblxuJGJhdHRlcnkgPSBHZXQtQ2ltSW5zdGFuY2UgV2luMzJfQmF0dGVyeSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDFcbiRwb3dlciA9IEdldC1DaW1JbnN0YW5jZSBCYXR0ZXJ5U3RhdHVzIC1OYW1lc3BhY2Ugcm9vdC9XTUkgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxXG5cbiR3c2wgPSBHZXQtQ29tbWFuZCB3c2wuZXhlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlXG4kZGlzdHJvcyA9IEAoKVxuaWYgKCR3c2wpIHtcbiAgJHJhdyA9ICYgd3NsLmV4ZSAtbCAtcSAyPiRudWxsXG4gIGlmICgkcmF3KSB7XG4gICAgJHRleHQgPSBpZiAoJHJhdyAtaXMgW2FycmF5XSkgeyAkcmF3IC1qb2luIFwiYG5cIiB9IGVsc2UgeyBbc3RyaW5nXSRyYXcgfVxuICAgICRkaXN0cm9zID0gQCgkdGV4dCAtcmVwbGFjZSBcImAwXCIsICcnIC1zcGxpdCBcImByP2BuXCIgfCBGb3JFYWNoLU9iamVjdCB7ICRfLlRyaW0oKSB9IHwgV2hlcmUtT2JqZWN0IHsgJF8gfSlcbiAgfVxufVxuXG4kd3NsTWVtb3J5ID0gJG51bGxcbiR3c2xDcHVzID0gJG51bGxcbiRjb25maWcgPSBKb2luLVBhdGggJGVudjpVU0VSUFJPRklMRSAnLndzbGNvbmZpZydcbmlmIChUZXN0LVBhdGggJGNvbmZpZykge1xuICBmb3JlYWNoICgkbGluZSBpbiBHZXQtQ29udGVudCAkY29uZmlnKSB7XG4gICAgaWYgKCRsaW5lIC1tYXRjaCAnXlxccyptZW1vcnlcXHMqPVxccyooXFxkKylHQicpIHsgJHdzbE1lbW9yeSA9IFtpbnQ2NF0kTWF0Y2hlc1sxXSAqIDFHQiB9XG4gICAgaWYgKCRsaW5lIC1tYXRjaCAnXlxccypwcm9jZXNzb3JzXFxzKj1cXHMqKFxcZCspJykgeyAkd3NsQ3B1cyA9IFtpbnRdJE1hdGNoZXNbMV0gfVxuICB9XG59XG5pZiAoLW5vdCAkd3NsTWVtb3J5KSB7XG4gICRob3N0R2lCID0gW01hdGhdOjpNYXgoW2ludF0oJG1lbW9yeSAvIDFHQiksIDEpXG4gICRndWVzdEdpQiA9IFtNYXRoXTo6TWF4KDQsIFtNYXRoXTo6TWluKDE2LCBbaW50XSgkaG9zdEdpQiAvIDIpKSlcbiAgJHdzbE1lbW9yeSA9IFtpbnQ2NF0kZ3Vlc3RHaUIgKiAxR0Jcbn1cbmlmICgtbm90ICR3c2xDcHVzKSB7XG4gICR3c2xDcHVzID0gW01hdGhdOjpNYXgoMiwgW01hdGhdOjpNaW4oOCwgW2ludF0oJGxvZ2ljYWwgLyAyKSkpXG59XG5cbiRwYXlsb2FkID0gQHtcbiAgaGFyZHdhcmUgPSBAe1xuICAgIGhvc3RuYW1lID0gJGVudjpDT01QVVRFUk5BTUVcbiAgICBtYW51ZmFjdHVyZXIgPSAkY29tcHV0ZXIuTWFudWZhY3R1cmVyXG4gICAgaGFyZHdhcmVfbW9kZWwgPSAkY29tcHV0ZXIuTW9kZWxcbiAgICBhcmNoaXRlY3R1cmUgPSAkZW52OlBST0NFU1NPUl9BUkNISVRFQ1RVUkVcbiAgICBvc19uYW1lID0gJ1dpbmRvd3MnXG4gICAgb3NfdmVyc2lvbiA9ICRvcy5WZXJzaW9uXG4gICAga2VybmVsX3ZlcnNpb24gPSAkb3MuQnVpbGROdW1iZXJcbiAgICBjcHVfbW9kZWwgPSAoJGNwdXMgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5OYW1lXG4gICAgY3B1X3ZlbmRvciA9ICgkY3B1cyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLk1hbnVmYWN0dXJlclxuICAgIGNwdV9zb2NrZXRzID0gKCRjcHVzIHwgTWVhc3VyZS1PYmplY3QpLkNvdW50XG4gICAgcGh5c2ljYWxfY3B1X2NvcmVzID0gJHBoeXNpY2FsXG4gICAgbG9naWNhbF9jcHVzID0gJGxvZ2ljYWxcbiAgICBtZW1vcnlfYnl0ZXMgPSAkbWVtb3J5XG4gICAgZGlza19ieXRlcyA9IChHZXQtQ2ltSW5zdGFuY2UgV2luMzJfTG9naWNhbERpc2sgLUZpbHRlciBcIkRyaXZlVHlwZT0zXCIgfCBNZWFzdXJlLU9iamVjdCBTaXplIC1TdW0pLlN1bVxuICAgIGRpc2tzID0gJGRpc2tzXG4gICAgbmV0d29ya19pbnRlcmZhY2VzID0gJGludGVyZmFjZXNcbiAgfVxuICB0ZWxlbWV0cnkgPSBAe1xuICAgIG1lbW9yeV9hdmFpbGFibGVfYnl0ZXMgPSAkZnJlZVxuICAgIGJhdHRlcnlfcHJlc2VudCA9IFtib29sXSRiYXR0ZXJ5XG4gICAgYWNfY29ubmVjdGVkID0gaWYgKCRwb3dlcikgeyAkcG93ZXIuUG93ZXJPbmxpbmUgLWVxIDEgfSBlbHNlIHsgJG51bGwgfVxuICAgIGJhdHRlcnlfcGVyY2VudCA9IGlmICgkYmF0dGVyeSkgeyBbaW50XSRiYXR0ZXJ5LkVzdGltYXRlZENoYXJnZVJlbWFpbmluZyB9IGVsc2UgeyAkbnVsbCB9XG4gICAgYmF0dGVyeV9zdGF0dXMgPSAkYmF0dGVyeS5TdGF0dXNcbiAgICBiYXR0ZXJ5X3JlbWFpbmluZ19zZWNvbmRzID0gJG51bGxcbiAgICBwb3dlcl9wcm9maWxlID0gJG51bGxcbiAgfVxuICByZWFkaW5lc3MgPSBAe1xuICAgIGRvY2tlciA9ICRmYWxzZVxuICAgIHN5c3RlbWRfY2dyb3Vwc192MiA9ICRudWxsXG4gICAgdmlydHVhbGl6YXRpb24gPSBbYm9vbF0kd3NsXG4gICAgbGltYSA9ICRmYWxzZVxuICAgIGhvbWVicmV3ID0gJGZhbHNlXG4gICAgd3NsID0gW2Jvb2xdJHdzbFxuICAgIHVidW50dSA9IEAoJ1VidW50dScsICdVYnVudHUtMjQuMDQnLCAnVWJ1bnR1LTIyLjA0JykgfCBXaGVyZS1PYmplY3QgeyAkZGlzdHJvcyAtY29udGFpbnMgJF8gfSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDFcbiAgICB3c2xnID0gJHRydWVcbiAgICBzd2FwX2VuYWJsZWQgPSAkZmFsc2VcbiAgICBhZG1pbl9yZXF1aXJlZCA9ICRmYWxzZVxuICAgIHJlc3RhcnRfcmVxdWlyZWQgPSAkZmFsc2VcbiAgfVxuICBjb25uZWN0aXZpdHkgPSBAe1xuICAgIHNlcnZlcl9yZWFjaGFibGUgPSAkbnVsbFxuICAgIHVwbGlua19wcm9iZV9vayA9ICRudWxsXG4gICAgdXBsaW5rX3Byb2JlX2JwcyA9ICRudWxsXG4gIH1cbiAgcGxhbm5lZF93b3JrZXJfY2FwYWNpdHkgPSBAe1xuICAgIG1lbW9yeV9ieXRlcyA9ICR3c2xNZW1vcnlcbiAgICBsb2dpY2FsX2NwdXMgPSAkd3NsQ3B1c1xuICAgIGNpX21lbW9yeV9yZXNlcnZlZF9ieXRlcyA9ICRudWxsXG4gIH1cbn1cblxuJHBheWxvYWQgfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggNiAtQ29tcHJlc3NcbiIsInNldHVwLnB5IjoiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuXCJcIlwiSWRlbXBvdGVudCBMaW51eC9zeXN0ZW1kIGluc3RhbGxlcjsgcnVuIGZyb20gdGhlIHdvcmtlciBzZXR1cCBidW5kbGUuXG5UaGUgZW5yb2xsbWVudCB0b2tlbiBpcyByZWFkIHdpdGhvdXQgZWNoby4gUmUtcnVubmluZyBwcmVzZXJ2ZXMgZW5yb2xsbWVudFxuYW5kIGEgcmVsZWFzZSBvZiB0aGlzIHByb2plY3QncyB3b3JrZXIgaW1hZ2UuIEEgcmVsZWFzZSBmcm9tIGFub3RoZXJcbnJlcG9zaXRvcnkgaXMgcmV0dXJuZWQgdG8gdGhlIGJvb3RzdHJhcCBzbyB0aGUgYXNzaWduZWQgaW1hZ2UgY2FuIHJlcGxhY2UgaXQuXG5ObyB0YXNrIGRhdGEgaXMgd3JpdHRlbiB1bmRlciAvb3B0L2RnZS13b3JrZXIuXG5cIlwiXCJcbmltcG9ydCBhcmdwYXJzZVxuaW1wb3J0IGdldHBhc3NcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aFxuaW1wb3J0IHNobGV4XG5pbXBvcnQgc2h1dGlsXG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHVybGxpYi5wYXJzZVxuXG5cbkNPTVBVVEVfSU1BR0VfUkVQT1NJVE9SWSA9ICdyZWdpc3RyeS5naXRsYWIuY29tL2Rvcmlhbi1ncmF5LWVudGVycHJpc2VzL2NvbXB1dGUvY29tcHV0ZS13b3JrZXInXG5cblxuZGVmIHJlbGVhc2VfaW1hZ2UocG9pbnRlcik6XG4gICAgdHJ5OlxuICAgICAgICByZWxlYXNlID0gUGF0aChqc29uLmxvYWRzKHBvaW50ZXIucmVhZF90ZXh0KCkpKVxuICAgICAgICBpbWFnZSA9IGpzb24ubG9hZHMoKHJlbGVhc2UgLyAnY29uZmlnLmpzb24nKS5yZWFkX3RleHQoKSkuZ2V0KCdpbWFnZScpIG9yICcnXG4gICAgZXhjZXB0IChPU0Vycm9yLCBqc29uLkpTT05EZWNvZGVFcnJvciwgVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6XG4gICAgICAgIHJldHVybiAnJ1xuICAgIHJldHVybiBzdHIoaW1hZ2UpXG5cblxuZGVmIGVuc3VyZV9jdXJyZW50X3JlbGVhc2Uocm9vdCwgYm9vdHN0cmFwKTpcbiAgICBcIlwiXCJLZWVwIGEgY29tcHV0ZS1yZXBvc2l0b3J5IHJlbGVhc2UuIFBvaW50IGFueSBvdGhlciByZWxlYXNlIGF0IHRoZSBib290c3RyYXAuXCJcIlwiXG4gICAgcG9pbnRlciA9IHJvb3QgLyAnY3VycmVudC5qc29uJ1xuICAgIGlmIHBvaW50ZXIuZXhpc3RzKCkgYW5kIHJlbGVhc2VfaW1hZ2UocG9pbnRlcikuc3RhcnRzd2l0aChDT01QVVRFX0lNQUdFX1JFUE9TSVRPUlkgKyAnQCcpOlxuICAgICAgICByZXR1cm5cbiAgICBpZiBwb2ludGVyLmV4aXN0cygpOlxuICAgICAgICB0cnk6XG4gICAgICAgICAgICBpZiBqc29uLmxvYWRzKHBvaW50ZXIucmVhZF90ZXh0KCkpID09IHN0cihib290c3RyYXApOlxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICBleGNlcHQgKE9TRXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yLCBUeXBlRXJyb3IpOlxuICAgICAgICAgICAgcGFzc1xuICAgIHBvaW50ZXIud3JpdGVfdGV4dChqc29uLmR1bXBzKHN0cihib290c3RyYXApKSlcbiAgICBwb2ludGVyLmNobW9kKDBvNjAwKVxuXG5cbmRlZiBydW4oKmFyZ3MpOlxuICAgIHByaW50KCckICcgKyBzaGxleC5qb2luKHN0cihpdGVtKSBmb3IgaXRlbSBpbiBhcmdzKSwgZmx1c2g9VHJ1ZSlcbiAgICB0cnk6XG4gICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLmRlY29kZSgpLnN0cmlwKClcbiAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXJyb3I6XG4gICAgICAgIG91dHB1dCA9IGVycm9yLm91dHB1dC5kZWNvZGUoKS5zdHJpcCgpIGlmIGVycm9yLm91dHB1dCBlbHNlICcnXG4gICAgICAgIGlmIG91dHB1dDpcbiAgICAgICAgICAgIHByaW50KG91dHB1dCwgZmx1c2g9VHJ1ZSlcbiAgICAgICAgcmFpc2VcblxuXG5kZWYgbWFpbigpOlxuICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKClcbiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW9yaWdpbicpXG4gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1lbnJvbGxtZW50LWZpbGUnLCBkZWZhdWx0PSdlbnJvbGxtZW50Lmpzb24nKVxuICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpXG4gICAgZW5yb2xsbWVudF9wYXRoID0gUGF0aChhcmdzLmVucm9sbG1lbnRfZmlsZSlcbiAgICBlbnJvbGxtZW50ID0ganNvbi5sb2FkcyhlbnJvbGxtZW50X3BhdGgucmVhZF90ZXh0KCkpIGlmIGVucm9sbG1lbnRfcGF0aC5leGlzdHMoKSBlbHNlIHt9XG4gICAgYXJncy5vcmlnaW4gPSBhcmdzLm9yaWdpbiBvciBlbnJvbGxtZW50LmdldCgnb3JpZ2luJywgJycpXG4gICAgb3JpZ2luID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KGFyZ3Mub3JpZ2luKVxuICAgIGxvY2FsID0gb3JpZ2luLmhvc3RuYW1lIGluICgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcsICc6OjEnKVxuICAgIGh0dHBzX29rID0gb3JpZ2luLnNjaGVtZSA9PSAnaHR0cHMnIGFuZCBub3Qgb3JpZ2luLnBhdGggYW5kIG5vdCBvcmlnaW4ucXVlcnkgYW5kIG5vdCBvcmlnaW4uZnJhZ21lbnRcbiAgICBodHRwX2xvY2FsX29rID0gb3JpZ2luLnNjaGVtZSA9PSAnaHR0cCcgYW5kIGxvY2FsIGFuZCBub3Qgb3JpZ2luLnBhdGggYW5kIG5vdCBvcmlnaW4ucXVlcnkgYW5kIG5vdCBvcmlnaW4uZnJhZ21lbnRcbiAgICBpZiBub3QgaHR0cHNfb2sgYW5kIG5vdCBodHRwX2xvY2FsX29rOlxuICAgICAgICBwYXJzZXIuZXJyb3IoJ1VzZSBhbiBIVFRQUyBvcmlnaW4gd2l0aG91dCBhIHBhdGgnKVxuICAgIGlmIG9zLmdldGV1aWQoKSAhPSAwIG9yIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMTEpOlxuICAgICAgICBwYXJzZXIuZXJyb3IoJ1J1biBhcyByb290IG9uIExpbnV4IHdpdGggUHl0aG9uIDMuMTEgb3IgbmV3ZXInKVxuICAgIGlmIHJ1bignZG9ja2VyJywgJ2luZm8nLCAnLS1mb3JtYXQnLCAne3suQ2dyb3VwRHJpdmVyfX0ge3suQ2dyb3VwVmVyc2lvbn19JykgIT0gJ3N5c3RlbWQgMic6XG4gICAgICAgIHBhcnNlci5lcnJvcignRG9ja2VyIG11c3QgdXNlIHN5c3RlbWQgY2dyb3VwcyB2MicpXG4gICAgcm9vdCA9IFBhdGgoJy9vcHQvZGdlLXdvcmtlcicpXG4gICAgcHJpbnQoJyQgbWtkaXIgLXAgLW0gNzAwIC9vcHQvZGdlLXdvcmtlciAvb3B0L2RnZS13b3JrZXIvYm9vdHN0cmFwJywgZmx1c2g9VHJ1ZSlcbiAgICByb290Lm1rZGlyKG1vZGU9MG83MDAsIGV4aXN0X29rPVRydWUpXG4gICAgb3MuY2htb2Qocm9vdCwgMG83MDApXG4gICAgc291cmNlID0gUGF0aChfX2ZpbGVfXykucmVzb2x2ZSgpLnBhcmVudFxuICAgIGJvb3RzdHJhcCA9IHJvb3QgLyAnYm9vdHN0cmFwJ1xuICAgIGJvb3RzdHJhcC5ta2Rpcihtb2RlPTBvNzAwLCBleGlzdF9vaz1UcnVlKVxuICAgIHByaW50KCckIGNwIGxhdW5jaGVyLnB5IC9vcHQvZGdlLXdvcmtlci9sYXVuY2hlci5weScsIGZsdXNoPVRydWUpXG4gICAgc2h1dGlsLmNvcHlmaWxlKHNvdXJjZSAvICdsYXVuY2hlci5weScsIHJvb3QgLyAnbGF1bmNoZXIucHknKVxuICAgIGlmIChzb3VyY2UgLyAndW5pbnN0YWxsLnB5JykuZXhpc3RzKCk6XG4gICAgICAgIHNodXRpbC5jb3B5ZmlsZShzb3VyY2UgLyAndW5pbnN0YWxsLnB5Jywgcm9vdCAvICd1bmluc3RhbGwucHknKVxuICAgIHByaW50KCckIGNwIGFnZW50LnB5IC9vcHQvZGdlLXdvcmtlci9ib290c3RyYXAvYWdlbnQucHknLCBmbHVzaD1UcnVlKVxuICAgIHNodXRpbC5jb3B5ZmlsZShzb3VyY2UgLyAnYWdlbnQucHknLCBib290c3RyYXAgLyAnYWdlbnQucHknKVxuICAgIGlkZW50aXR5ID0gcm9vdCAvICdpZGVudGl0eS5qc29uJ1xuICAgIGlmIG5vdCBpZGVudGl0eS5leGlzdHMoKTpcbiAgICAgICAgdG9rZW4gPSBlbnJvbGxtZW50LmdldCgndG9rZW4nKSBvciBnZXRwYXNzLmdldHBhc3MoJ1dvcmtlciBlbnJvbGxtZW50IHRva2VuIChoaWRkZW4pOiAnKVxuICAgICAgICBpZiBub3QgdG9rZW46XG4gICAgICAgICAgICBwYXJzZXIuZXJyb3IoJ0Vucm9sbG1lbnQgdG9rZW4gaXMgcmVxdWlyZWQnKVxuICAgICAgICBpZGVudGl0eS53cml0ZV90ZXh0KGpzb24uZHVtcHMoZGljdChvcmlnaW49YXJncy5vcmlnaW4sIHRva2VuPXRva2VuKSkpXG4gICAgICAgIGlkZW50aXR5LmNobW9kKDBvNjAwKVxuICAgIGVsaWYganNvbi5sb2FkcyhpZGVudGl0eS5yZWFkX3RleHQoKSlbJ29yaWdpbiddICE9IGFyZ3Mub3JpZ2luOlxuICAgICAgICBwYXJzZXIuZXJyb3IoJ0V4aXN0aW5nIGVucm9sbG1lbnQgdXNlcyBhIGRpZmZlcmVudCBvcmlnaW4nKVxuICAgIGVuc3VyZV9jdXJyZW50X3JlbGVhc2Uocm9vdCwgYm9vdHN0cmFwKVxuICAgIHNjcmF0Y2ggPSBQYXRoKCcvcnVuL2RnZS13b3JrZXIvdGFza3MnKVxuICAgIHNjcmF0Y2gubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGlmIG5vdCBvcy5wYXRoLmlzbW91bnQoc2NyYXRjaCk6XG4gICAgICAgIHJ1bignbW91bnQnLCAnLXQnLCAndG1wZnMnLCAnLW8nLCAnc2l6ZT0yNTZtLG1vZGU9MDcwMCxub3N1aWQsbm9kZXYsbm9leGVjJywgJ3RtcGZzJywgc3RyKHNjcmF0Y2gpKVxuICAgIHVuaXRfcm9vdCA9IFBhdGgoJy9ldGMvc3lzdGVtZC9zeXN0ZW0nKVxuICAgICMgUHJlc2VydmUgQ0kncyBhbHJlYWR5IHByb3Zpc2lvbmVkIGNvbXB1dGUuc2xpY2UgbWVtb3J5IGJ1ZGdldC5cbiAgICBjb21wdXRlX3NsaWNlID0gdW5pdF9yb290IC8gJ2NvbXB1dGUuc2xpY2UnXG4gICAgaWYgbm90IGNvbXB1dGVfc2xpY2UuZXhpc3RzKCk6XG4gICAgICAgIGNvbXB1dGVfc2xpY2Uud3JpdGVfdGV4dCgnW1NsaWNlXVxcbkNQVVdlaWdodD0xMFxcbklPV2VpZ2h0PTEwXFxuTWVtb3J5U3dhcE1heD0wXFxuJylcbiAgICBwcmludCgnJCBjYXQgPiAvZXRjL3N5c3RlbWQvc3lzdGVtL2RnZS13b3JrZXIuc2VydmljZScsIGZsdXNoPVRydWUpXG4gICAgKHVuaXRfcm9vdCAvICdkZ2Utd29ya2VyLnNlcnZpY2UnKS53cml0ZV90ZXh0KCcnJ1tVbml0XVxuRGVzY3JpcHRpb249REdFIG1hbmFnZWQgY29tcHV0ZSB3b3JrZXJcblJlcXVpcmVzPWRvY2tlci5zZXJ2aWNlIGNvbXB1dGUuc2xpY2VcbkFmdGVyPWRvY2tlci5zZXJ2aWNlIG5ldHdvcmstb25saW5lLnRhcmdldFxuV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuVHlwZT1zaW1wbGVcblNsaWNlPWNvbXB1dGUuc2xpY2VcbkVudmlyb25tZW50RmlsZT0tL29wdC9kZ2Utd29ya2VyL3N0b3JhZ2UuZW52XG5FbnZpcm9ubWVudEZpbGU9LS9vcHQvZGdlLXdvcmtlci9wcm94eS5lbnZcbkV4ZWNTdGFydFByZT0vdXNyL2Jpbi9ta2RpciAtcCAvcnVuL2RnZS13b3JrZXIvdGFza3NcbkV4ZWNTdGFydFByZT0vYmluL3NoIC1jICdtb3VudHBvaW50IC1xIC9ydW4vZGdlLXdvcmtlci90YXNrcyB8fCBtb3VudCAtdCB0bXBmcyAtbyBzaXplPTI1Nm0sbW9kZT0wNzAwLG5vc3VpZCxub2Rldixub2V4ZWMgdG1wZnMgL3J1bi9kZ2Utd29ya2VyL3Rhc2tzJ1xuRXhlY1N0YXJ0PS91c3IvYmluL3B5dGhvbjMgL29wdC9kZ2Utd29ya2VyL2xhdW5jaGVyLnB5XG5SZXN0YXJ0PWFsd2F5c1xuUmVzdGFydFNlYz0xMFxuVGltZW91dFN0b3BTZWM9OTYwXG5MaW1pdENPUkU9MFxuTWVtb3J5U3dhcE1heD0wXG5VTWFzaz0wMDc3XG5cbltJbnN0YWxsXVxuV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXRcbicnJylcbiAgICBmcm9tIGFnZW50IGltcG9ydCBjb25maWd1cmVfY2lcbiAgICBjb25maWd1cmVfY2koKVxuICAgIHJ1bignc3lzdGVtY3RsJywgJ2RhZW1vbi1yZWxvYWQnKVxuICAgIHJ1bignc3lzdGVtY3RsJywgJ2VuYWJsZScsICctLW5vdycsICdkZ2Utd29ya2VyLnNlcnZpY2UnKVxuICAgIHByaW50KCdXb3JrZXIgZW5yb2xsZWQuIENvbmZpZ3VyYXRpb24gYW5kIHRhc2sgaW1hZ2VzIGFyZSBvYnRhaW5lZCBhdCBjaGVjay1pbi4nLCBmbHVzaD1UcnVlKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgbWFpbigpXG4iLCJhZ2VudC5weSI6IiMhL3Vzci9iaW4vZW52IHB5dGhvbjNcblwiXCJcIlRydXN0ZWQgTGludXggaG9zdCBzdXBlcnZpc29yLiBQZXJzaXN0ZW50IHN0YXRlIGNvbnRhaW5zIGNvZGUvY29uZmlnIG9ubHkuXG5UYXNrIHNjcmF0Y2ggaXMgdG1wZnMuIFRoZSB3b3JrZXIgY2dyb3VwIGFuZCB0YXNrIGNvbnRhaW5lcnMgc2V0IE1lbW9yeVN3YXBNYXg9MFxuc28gdGFzayBwYWdlcyBkbyBub3QgdXNlIGhvc3Qgc3dhcCBldmVuIHdoZW4gdGhlIG1hY2hpbmUgaGFzIHN3YXAgZW5hYmxlZC5cblRhc2sgY29udGFpbmVycyBoYXZlIG5vIG5ldHdvcmssIERvY2tlciBzb2NrZXQsIHdvcmtlciBpZGVudGl0eSwgb3Igc3RvcmFnZSBjcmVkZW50aWFscy5cblwiXCJcIlxuaW1wb3J0IGJhc2U2NFxuaW1wb3J0IGNhbGVuZGFyXG5pbXBvcnQgY3N2XG5pbXBvcnQgbWF0aFxuaW1wb3J0IGhhc2hsaWJcbmltcG9ydCBobWFjXG5pbXBvcnQgaHR0cC5jbGllbnRcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlXG5mcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGhcbmltcG9ydCBwbGF0Zm9ybVxuaW1wb3J0IHJlXG5pbXBvcnQgc2h1dGlsXG5pbXBvcnQgc2lnbmFsXG5pbXBvcnQgc29ja2V0XG5pbXBvcnQgc3NsXG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHRlbXBmaWxlXG5pbXBvcnQgdGFyZmlsZVxuaW1wb3J0IHRocmVhZGluZ1xuaW1wb3J0IHRpbWVcbmltcG9ydCB1cmxsaWIuZXJyb3JcbmltcG9ydCB1cmxsaWIucGFyc2VcbmltcG9ydCB1cmxsaWIucmVxdWVzdFxuXG4jIENsb3VkZmxhcmUgYm90IGZpZ2h0IDQwM3MgUHl0aG9uJ3MgZGVmYXVsdCBVQTsgdGhlIHdvcmtlciB0YWxrcyBIVFRQUyB0aHJvdWdoIGl0LlxuQlJPV1NFUl9VQSA9ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC4wLjAgU2FmYXJpLzUzNy4zNidcblxuUkVHSVNUUllfQVVUSF9WRVJTSU9OID0gMVxuQ0FQQUJJTElUWV9URVNUX1ZFUlNJT04gPSAxXG5SVU5USU1FX0FCSSA9ICdfX1JVTlRJTUVfQUJJX18nXG5WRVJTSU9OID0gJzEuMy4wKycgKyBoYXNobGliLnNoYTI1NihQYXRoKF9fZmlsZV9fKS5yZWFkX2J5dGVzKCkpLmhleGRpZ2VzdCgpWzoxMl1cblJPT1QgPSBQYXRoKG9zLmVudmlyb24uZ2V0KCdER0VfV09SS0VSX1JPT1QnLCAnL29wdC9kZ2Utd29ya2VyJykpXG5TQ1JBVENIID0gUGF0aChvcy5lbnZpcm9uLmdldCgnREdFX1dPUktFUl9TQ1JBVENIJywgJy9ydW4vZGdlLXdvcmtlci90YXNrcycpKVxuQ0lfUlVOTkVSX1NUQVRFID0gUk9PVCAvICdjaV9ydW5uZXIuanNvbidcbkNJX1JVTk5FUl9OQU1FID0gJ2RnZS1jb21wdXRlJ1xuQ0lfREVGQVVMVF9JTUFHRSA9ICdydWJ5OjMuNC4yJ1xuIyBidWlsZC1jb21wdXRlLWltYWdlIGRyaXZlcyB0aGUgaG9zdCBkYWVtb24gd2l0aCBidWlsZHg7IHRoZXJlIGlzIG5vIGRpbmQgc2VydmljZS5cbkNJX0RPQ0tFUl9TT0NLRVQgPSAnL3Zhci9ydW4vZG9ja2VyLnNvY2s6L3Zhci9ydW4vZG9ja2VyLnNvY2snXG5DSV9TTElDRSA9IFBhdGgoJy9ldGMvc3lzdGVtZC9zeXN0ZW0vY2kuc2xpY2UnKVxuR0lUTEFCID0gJ2h0dHBzOi8vZ2l0bGFiLmNvbSdcbkdJVExBQl9SVU5ORVJfUkVQT1NJVE9SWSA9ICdodHRwczovL3BhY2thZ2VzLmdpdGxhYi5jb20vaW5zdGFsbC9yZXBvc2l0b3JpZXMvcnVubmVyL2dpdGxhYi1ydW5uZXIvc2NyaXB0LmRlYi5zaCdcblJVTk5FUl9DT05GSUcgPSBQYXRoKCcvZXRjL2dpdGxhYi1ydW5uZXIvY29uZmlnLnRvbWwnKVxuU1RPUCA9IHRocmVhZGluZy5FdmVudCgpXG5TVEFURV9MT0NLID0gdGhyZWFkaW5nLkxvY2soKVxuUE9TVF9MT0NLID0gdGhyZWFkaW5nLkxvY2soKVxuUkVQT1JUID0ge31cblRBU0tTID0gW11cbiMgKGpvYiBpZCwgYXR0ZW1wdCkgcGFpcnMgdGhlIHBsYXRmb3JtIHNheXMgdGhpcyB3b3JrZXIgbm8gbG9uZ2VyIG93bnMsIGFuZCB0aGVcbiMgbW9ub3RvbmljIHRpbWUgZWFjaCBydW5uaW5nIGF0dGVtcHQncyBsZWFzZSB3YXMgbGFzdCBjb25maXJtZWQuXG5MT1NUID0ge31cblJFTkVXRUQgPSB7fVxuQ09OVFJPTCA9IHt9XG5MT0dTID0gZGVxdWUobWF4bGVuPTQwKVxuXG5cbmNsYXNzIE5vUmVkaXJlY3QodXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlcik6XG4gICAgZGVmIHJlZGlyZWN0X3JlcXVlc3Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmVkaXJlY3RzIGFyZSBub3QgcGVybWl0dGVkJylcblxuXG5IVFRQID0gdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKE5vUmVkaXJlY3QoKSlcbkhUVFAuYWRkaGVhZGVycyA9IFsoJ1VzZXItQWdlbnQnLCBCUk9XU0VSX1VBKV1cblNUT1JBR0VfSFRUUCA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcigpXG5TVE9SQUdFX0hUVFAuYWRkaGVhZGVycyA9IFsoJ1VzZXItQWdlbnQnLCBCUk9XU0VSX1VBKV1cblxuXG5kZWYgc3RvcmFnZV9wcm94eSgpOlxuICAgIHByb3h5ID0gb3MuZW52aXJvbi5nZXQoJ0RHRV9TVE9SQUdFX1BST1hZJylcbiAgICBpZiBub3QgcHJveHk6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcGFyc2VkID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHByb3h5KVxuICAgIGlmIChwYXJzZWQuc2NoZW1lICE9ICdodHRwJyBvciBwYXJzZWQudXNlcm5hbWUgb3Igbm90IHBhcnNlZC5ob3N0bmFtZVxuICAgICAgICAgICAgb3IgcGFyc2VkLnBhdGggbm90IGluICgnJywgJy8nKSBvciBwYXJzZWQucXVlcnkgb3IgcGFyc2VkLmZyYWdtZW50KTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3RvcmFnZSBwcm94eSBtdXN0IGJlIGFuIEhUVFAgVVJMJylcbiAgICByZXR1cm4gcGFyc2VkXG5cblxuZGVmIHN0b3JhZ2VfcHJveHlfZm9yKHVybCk6XG4gICAgcHJveHkgPSBzdG9yYWdlX3Byb3h5KClcbiAgICBpZiBwcm94eSBpcyBOb25lOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIGhvc3QgPSAodXJsbGliLnBhcnNlLnVybHNwbGl0KHVybCkuaG9zdG5hbWUgb3IgJycpLmxvd2VyKCkucnN0cmlwKCcuJylcbiAgICBpZiBob3N0LmVuZHN3aXRoKCcucjIuY2xvdWRmbGFyZXN0b3JhZ2UuY29tJyk6XG4gICAgICAgIHJldHVybiBwcm94eVxuICAgIHJldHVybiBOb25lXG5cblxuY2xhc3MgUHJveGllZFJlc3BvbnNlOlxuICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uZWN0aW9uLCByZXNwb25zZSk6XG4gICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uXG4gICAgICAgIHNlbGYuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgIHNlbGYucmVhZCA9IHJlc3BvbnNlLnJlYWRcblxuICAgIGRlZiBfX2VudGVyX18oc2VsZik6XG4gICAgICAgIHJldHVybiBzZWxmXG5cbiAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOlxuICAgICAgICBzZWxmLl9jb25uZWN0aW9uLmNsb3NlKClcblxuXG5TVE9SQUdFX1BST1hZX1RJTUVPVVQgPSA2MDBcblVQTElOS19JTlRFUlZBTCA9IDMwMFxuVVBMSU5LX0xPQ0sgPSB0aHJlYWRpbmcuTG9jaygpXG5VUExJTksgPSB7XG4gICAgJ3VwbGlua19raW5kJzogJ3Vua25vd24nLFxuICAgICd1cGxpbmtfcHJvYmVfb2snOiBGYWxzZSxcbiAgICAndXBsaW5rX3Byb2JlX2Jwcyc6IDAsXG4gICAgJ3VwbGlua19wcm9iZWRfYXQnOiBOb25lLFxufVxuSE9TVCA9IHt9XG5VUExJTktfQVQgPSAwLjBcblBST0JFX0hPU1QgPSAnc3BlZWQuY2xvdWRmbGFyZS5jb20nXG5QUk9CRV9QQVRIID0gJy9fX3VwJ1xuUFJPQkVfQllURVMgPSAyICogMTAyNCAqIDEwMjRcblBST0JFX1RJTUVPVVQgPSAxMFxuXG5cbmRlZiBzdG9yYWdlX2dldCh1cmwpOlxuICAgIHBhcnNlZCA9IHN0b3JhZ2VfcHJveHlfZm9yKHVybClcbiAgICBpZiBwYXJzZWQgaXMgTm9uZTpcbiAgICAgICAgcmV0dXJuIFNUT1JBR0VfSFRUUC5vcGVuKHVybCwgdGltZW91dD0zMClcbiAgICBjb25uZWN0aW9uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ocGFyc2VkLmhvc3RuYW1lLCBwYXJzZWQucG9ydCBvciA4MCwgdGltZW91dD1TVE9SQUdFX1BST1hZX1RJTUVPVVQpXG4gICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpXG4gICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoJ1gtREdFLVRhcmdldCcsIHVybClcbiAgICBjb25uZWN0aW9uLmVuZGhlYWRlcnMoKVxuICAgIHJlc3BvbnNlID0gY29ubmVjdGlvbi5nZXRyZXNwb25zZSgpXG4gICAgaWYgcmVzcG9uc2Uuc3RhdHVzICE9IDIwMDpcbiAgICAgICAgc3RhdHVzLCByZWFzb24gPSByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnJlYXNvblxuICAgICAgICBjb25uZWN0aW9uLmNsb3NlKClcbiAgICAgICAgcmFpc2UgdXJsbGliLmVycm9yLkhUVFBFcnJvcih1cmwsIHN0YXR1cywgcmVhc29uLCB7fSwgTm9uZSlcbiAgICByZXR1cm4gUHJveGllZFJlc3BvbnNlKGNvbm5lY3Rpb24sIHJlc3BvbnNlKVxuXG5cbmRlZiBzdG9yYWdlX3B1dF9jb25uZWN0aW9uKHVybCk6XG4gICAgcGFyc2VkID0gc3RvcmFnZV9wcm94eV9mb3IodXJsKVxuICAgIHVyaSA9IHVybGxpYi5wYXJzZS51cmxzcGxpdCh1cmwpXG4gICAgaWYgcGFyc2VkIGlzIE5vbmU6XG4gICAgICAgIGNvbm5lY3Rpb24gPSBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24odXJpLmhvc3RuYW1lLCB1cmkucG9ydCBvciA0NDMsIHRpbWVvdXQ9MzApXG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLCB1cmkucGF0aCArICgnPycgKyB1cmkucXVlcnkgaWYgdXJpLnF1ZXJ5IGVsc2UgJycpXG4gICAgY29ubmVjdGlvbiA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKHBhcnNlZC5ob3N0bmFtZSwgcGFyc2VkLnBvcnQgb3IgODAsIHRpbWVvdXQ9U1RPUkFHRV9QUk9YWV9USU1FT1VUKVxuICAgIHJldHVybiBjb25uZWN0aW9uLCAnLydcblxuXG5kZWYgbm90ZShtZXNzYWdlKTpcbiAgICBsaW5lID0gdGltZS5zdHJmdGltZSgnJUg6JU06JVNaJywgdGltZS5nbXRpbWUoKSkgKyAnICcgKyAnICcuam9pbihzdHIobWVzc2FnZSkuc3BsaXQoKSlbOjM2MF1cbiAgICBwcmludChtZXNzYWdlLCBmbHVzaD1UcnVlKVxuICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgTE9HUy5hcHBlbmQobGluZSlcblxuXG4jIFNhbmRib3ggd2FybmluZ3MgZXZlcnkgdGFzayBwcmludHM7IHRoZXkgbmV2ZXIgZXhwbGFpbiBhIGZhaWx1cmUuXG5TVERFUlJfTk9JU0UgPSAoJ0ZvbnRjb25maWcgZXJyb3I6JywgJ3NldF9tZW1wb2xpY3k6JylcblRBU0tfRVJST1JfTElNSVQgPSAyMDAwXG5cblxuZGVmIGRlc2NyaWJlX2Vycm9yKGVycm9yKTpcbiAgICBcIlwiXCJUYXNrIGZhaWx1cmUgdGV4dCBmb3IgdGhlIGpvYiByZWNvcmQ6IGV4aXQgc3RhdHVzIGFuZCB0aGUgSEVBRCBvZiBzdGRlcnIsIG5ldmVyIGRvY2tlciBhcmd2LlxuXG4gICAgVGhlIGFyZ3YgYWxvbmUgaXMgbG9uZ2VyIHRoYW4gYW55IHVzZWZ1bCBsaW1pdCwgYW5kIFJ1YnkgYW5kIFB5dGhvbiBwcmludCB0aGUgZXhjZXB0aW9uIGJlZm9yZVxuICAgIGl0cyBiYWNrdHJhY2UsIHNvIHRoZSBoZWFkIGlzIHdoZXJlIHRoZSBjYXVzZSBpcy5cIlwiXCJcbiAgICBpZiBpc2luc3RhbmNlKGVycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6XG4gICAgICAgIHRleHQgPSB0eXBlKGVycm9yKS5fX25hbWVfXyArICcgZXhpdCAnICsgc3RyKGVycm9yLnJldHVybmNvZGUpXG4gICAgZWxpZiBpc2luc3RhbmNlKGVycm9yLCBzdWJwcm9jZXNzLlRpbWVvdXRFeHBpcmVkKTpcbiAgICAgICAgdGV4dCA9IHR5cGUoZXJyb3IpLl9fbmFtZV9fICsgJyBhZnRlciAnICsgc3RyKGVycm9yLnRpbWVvdXQpICsgJ3MnXG4gICAgZWxzZTpcbiAgICAgICAgdGV4dCA9IHR5cGUoZXJyb3IpLl9fbmFtZV9fICsgJzogJyArIHN0cihlcnJvcilcbiAgICBsaW5lcyA9IChsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gcHJvY2Vzc19vdXRwdXQoZ2V0YXR0cihlcnJvciwgJ3N0ZGVycicsIE5vbmUpKS5zcGxpdGxpbmVzKCkpXG4gICAgZGV0YWlsID0gJ1xcbicuam9pbihsaW5lIGZvciBsaW5lIGluIGxpbmVzIGlmIGxpbmUgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoU1RERVJSX05PSVNFKSlcbiAgICByZXR1cm4gKHRleHQgKyAnOiAnICsgZGV0YWlsIGlmIGRldGFpbCBlbHNlIHRleHQpWzpUQVNLX0VSUk9SX0xJTUlUXVxuXG5cbmRlZiBwcm9jZXNzX291dHB1dCh2YWx1ZSk6XG4gICAgaWYgdmFsdWUgaXMgTm9uZTpcbiAgICAgICAgcmV0dXJuICcnXG4gICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGJ5dGVzLCBieXRlYXJyYXkpKTpcbiAgICAgICAgcmV0dXJuIHZhbHVlLmRlY29kZShlcnJvcnM9J3JlcGxhY2UnKVxuICAgIHJldHVybiBzdHIodmFsdWUpXG5cblxuIyBXb3JrZXJzOjpJbnZlbnRvcnkgcmVmdXNlcyBhIGxvbmdlciBzdHJpbmcsIGFuZCBhIHJlZnVzZWQgaGVhcnRiZWF0IHN0b3BzIHRoZSB3b3JrZXIuXG5JTlZFTlRPUllfVEVYVF9MSU1JVCA9IDI1NVxuXG5cbmRlZiBkZXNjcmliZV9wcm9jZXNzX2Vycm9yKGVycm9yLCBsaW1pdD0xODApOlxuICAgIFwiXCJcIlNob3J0IGZhaWx1cmUgdGV4dCB3aXRob3V0IGFyZ3Y7IGtlZXBzIHRoZSB1c2VmdWwgdGFpbCB3aXRoaW4gdGhlIHNlcnZlciBjb2x1bW4uXCJcIlwiXG4gICAgbmFtZSA9IHR5cGUoZXJyb3IpLl9fbmFtZV9fXG4gICAgaWYgaXNpbnN0YW5jZShlcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOlxuICAgICAgICBkZXRhaWwgPSAnICcuam9pbihwcm9jZXNzX291dHB1dChlcnJvci5zdGRlcnIpLnNwbGl0KCkpIG9yICcgJy5qb2luKHByb2Nlc3Nfb3V0cHV0KGVycm9yLnN0ZG91dCkuc3BsaXQoKSlcbiAgICAgICAgcHJlZml4ID0gbmFtZSArICcgZXhpdCAnICsgc3RyKGVycm9yLnJldHVybmNvZGUpXG4gICAgICAgIGlmIG5vdCBkZXRhaWw6XG4gICAgICAgICAgICByZXR1cm4gcHJlZml4WzpsaW1pdF1cbiAgICAgICAgYnVkZ2V0ID0gbWF4KDAsIGxpbWl0IC0gbGVuKHByZWZpeCkgLSAxKVxuICAgICAgICBpZiBsZW4oZGV0YWlsKSA+IGJ1ZGdldDpcbiAgICAgICAgICAgIGRldGFpbCA9IGRldGFpbFstYnVkZ2V0Ol1cbiAgICAgICAgcmV0dXJuIChwcmVmaXggKyAnICcgKyBkZXRhaWwpWzpsaW1pdF1cbiAgICByZXR1cm4gJyAnLmpvaW4oKG5hbWUgKyAnOiAnICsgc3RyKGVycm9yKSkuc3BsaXQoKSlbOmxpbWl0XVxuXG5cbmRlZiB1cGRhdGVfZmFpbHVyZV9yZWFzb24oZXJyb3IpOlxuICAgIGlmIHN0cihlcnJvcikgPT0gJ0NhcGFiaWxpdHlSZWdyZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuICdDYXBhYmlsaXR5UmVncmVzc2lvbidcbiAgICByZXR1cm4gZGVzY3JpYmVfcHJvY2Vzc19lcnJvcihlcnJvcilcblxuXG5kZWYgcHJvYmVfb3BlcmF0aW9uX3Jlc3VsdChlcnJvcik6XG4gICAgXCJcIlwiUmV0dXJuIC0tcHJvYmUtb3BlcmF0aW9uIEpTT04gZnJvbSBhIG5vbi16ZXJvIGV4aXQsIG9yIE5vbmUuXCJcIlwiXG4gICAgaWYgbm90IGlzaW5zdGFuY2UoZXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICB0cnk6XG4gICAgICAgIHBheWxvYWQgPSBqc29uLmxvYWRzKHByb2Nlc3Nfb3V0cHV0KGVycm9yLnN0ZG91dCkuc3RyaXAoKSBvciAnbnVsbCcpXG4gICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIGRpY3QpIGFuZCAnc3RhdHVzJyBpbiBwYXlsb2FkOlxuICAgICAgICByZXR1cm4gcGF5bG9hZFxuICAgIHJldHVybiBOb25lXG5cblxuZGVmIHByb2JlX2NhcGFiaWxpdHlfcmVzdWx0cyhlcnJvcik6XG4gICAgXCJcIlwiUmV0dXJuIC0tcHJvYmUgcmVzdWx0cyBKU09OIGZyb20gYSBub24temVybyBleGl0LCBvciBOb25lLlwiXCJcIlxuICAgIGlmIG5vdCBpc2luc3RhbmNlKGVycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgdHJ5OlxuICAgICAgICBwYXlsb2FkID0ganNvbi5sb2Fkcyhwcm9jZXNzX291dHB1dChlcnJvci5zdGRvdXQpLnN0cmlwKCkgb3IgJ251bGwnKVxuICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yLCBqc29uLkpTT05EZWNvZGVFcnJvcik6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgaWYgaXNpbnN0YW5jZShwYXlsb2FkLCBkaWN0KSBhbmQgcGF5bG9hZDpcbiAgICAgICAgcmV0dXJuIHBheWxvYWRcbiAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBjb21tYW5kKGFyZ3MsIHRpbWVvdXQ9NjAsIGVudj1Ob25lKTpcbiAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihhcmdzLCBzdGRpbj1zdWJwcm9jZXNzLkRFVk5VTEwsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgdGltZW91dD10aW1lb3V0LCBlbnY9ZW52KVxuICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOlxuICAgICAgICByYWlzZSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcihyZXN1bHQucmV0dXJuY29kZSwgYXJncywgcmVzdWx0LnN0ZG91dCwgcmVzdWx0LnN0ZGVycilcbiAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC5kZWNvZGUoKS5zdHJpcCgpXG5cblxuZGVmIHJlYWRfanNvbihwYXRoLCBkZWZhdWx0PU5vbmUpOlxuICAgIHJldHVybiBqc29uLmxvYWRzKHBhdGgucmVhZF90ZXh0KCkpIGlmIHBhdGguZXhpc3RzKCkgZWxzZSBkZWZhdWx0XG5cblxuZGVmIHdyaXRlX2pzb24ocGF0aCwgdmFsdWUpOlxuICAgIHRlbXAgPSBwYXRoLndpdGhfc3VmZml4KCcudG1wJylcbiAgICB0ZW1wLndyaXRlX3RleHQoanNvbi5kdW1wcyh2YWx1ZSkpXG4gICAgdGVtcC5jaG1vZCgwbzYwMClcbiAgICBvcy5yZXBsYWNlKHRlbXAsIHBhdGgpXG5cblxuZGVmIG1lbW9yeSgpOlxuICAgIHJldHVybiB7bGluZS5zcGxpdCgnOicpWzBdOiBpbnQobGluZS5zcGxpdCgpWzFdKSAqIDEwMjRcbiAgICAgICAgICAgIGZvciBsaW5lIGluIFBhdGgoJy9wcm9jL21lbWluZm8nKS5yZWFkX3RleHQoKS5zcGxpdGxpbmVzKCkgaWYgbGVuKGxpbmUuc3BsaXQoKSkgPT0gM31cblxuXG5kZWYgcmVhZF90ZXh0KHBhdGgpOlxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIFBhdGgocGF0aCkucmVhZF90ZXh0KCkuc3RyaXAoKVxuICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6XG4gICAgICAgIHJldHVybiBOb25lXG5cblxuZGVmIG9wdGlvbmFsX2NvbW1hbmQoYXJncyk6XG4gICAgdHJ5OlxuICAgICAgICByZXR1cm4gY29tbWFuZChhcmdzLCA1KVxuICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IpOlxuICAgICAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBudW1iZXIodmFsdWUsIHNjYWxlPTEpOlxuICAgIHRyeTpcbiAgICAgICAgcmVzdWx0ID0gZmxvYXQodmFsdWUpICogc2NhbGVcbiAgICAgICAgcmV0dXJuIHJlc3VsdCBpZiByZXN1bHQgPj0gMCBhbmQgbWF0aC5pc2Zpbml0ZShyZXN1bHQpIGVsc2UgTm9uZVxuICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgcGNpX2RldGFpbHMoZGV2aWNlKTpcbiAgICBkZXRhaWxzID0ge31cbiAgICBvdXRwdXQgPSBvcHRpb25hbF9jb21tYW5kKFsnbHNwY2knLCAnLXZtbScsICctcycsIGRldmljZS5uYW1lXSlcbiAgICBmb3IgbGluZSBpbiAob3V0cHV0IG9yICcnKS5zcGxpdGxpbmVzKCk6XG4gICAgICAgIGtleSwgc2VwYXJhdG9yLCB2YWx1ZSA9IGxpbmUucGFydGl0aW9uKCc6JylcbiAgICAgICAgaWYgc2VwYXJhdG9yOlxuICAgICAgICAgICAgZGV0YWlsc1trZXldID0gdmFsdWUuc3RyaXAoKVxuICAgIHJldHVybiBkaWN0KHZlbmRvcj1kZXRhaWxzLmdldCgnVmVuZG9yJykgb3IgcmVhZF90ZXh0KGRldmljZSAvICd2ZW5kb3InKSxcbiAgICAgICAgICAgICAgICBtb2RlbD1kZXRhaWxzLmdldCgnRGV2aWNlJykgb3IgcmVhZF90ZXh0KGRldmljZSAvICdkZXZpY2UnKSlcblxuXG5kZWYgY3B1X2ludmVudG9yeSgpOlxuICAgIGJsb2NrcyA9IFBhdGgoJy9wcm9jL2NwdWluZm8nKS5yZWFkX3RleHQoKS5zdHJpcCgpLnNwbGl0KCdcXG5cXG4nKVxuICAgIGNwdXMgPSBbZGljdChsaW5lLnNwbGl0KCc6JywgMSkgZm9yIGxpbmUgaW4gYmxvY2suc3BsaXRsaW5lcygpIGlmICc6JyBpbiBsaW5lKSBmb3IgYmxvY2sgaW4gYmxvY2tzXVxuICAgIGNwdXMgPSBbe2tleS5zdHJpcCgpOiB2YWx1ZS5zdHJpcCgpIGZvciBrZXksIHZhbHVlIGluIGNwdS5pdGVtcygpfSBmb3IgY3B1IGluIGNwdXNdXG4gICAgZmlyc3QgPSBjcHVzWzBdIGlmIGNwdXMgZWxzZSB7fVxuICAgIHNvY2tldHMgPSB7Y3B1WydwaHlzaWNhbCBpZCddIGZvciBjcHUgaW4gY3B1cyBpZiAncGh5c2ljYWwgaWQnIGluIGNwdX1cbiAgICBjb3JlcyA9IHsoY3B1WydwaHlzaWNhbCBpZCddLCBjcHVbJ2NvcmUgaWQnXSkgZm9yIGNwdSBpbiBjcHVzIGlmICdwaHlzaWNhbCBpZCcgaW4gY3B1IGFuZCAnY29yZSBpZCcgaW4gY3B1fVxuICAgIHBvbGljaWVzID0gbGlzdChQYXRoKCcvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVmcmVxJykuZ2xvYigncG9saWN5KicpKVxuICAgIG1pbmltdW0gPSBbbnVtYmVyKHJlYWRfdGV4dChwIC8gJ2NwdWluZm9fbWluX2ZyZXEnKSwgLjAwMSkgZm9yIHAgaW4gcG9saWNpZXNdXG4gICAgbWF4aW11bSA9IFtudW1iZXIocmVhZF90ZXh0KHAgLyAnY3B1aW5mb19tYXhfZnJlcScpLCAuMDAxKSBmb3IgcCBpbiBwb2xpY2llc11cbiAgICByZXR1cm4gZGljdChjcHVfbW9kZWw9Zmlyc3QuZ2V0KCdtb2RlbCBuYW1lJykgb3IgZmlyc3QuZ2V0KCdQcm9jZXNzb3InKSwgY3B1X3ZlbmRvcj1maXJzdC5nZXQoJ3ZlbmRvcl9pZCcpLFxuICAgICAgICAgICAgICAgIGNwdV9zb2NrZXRzPWxlbihzb2NrZXRzKSBvciBOb25lLCBwaHlzaWNhbF9jcHVfY29yZXM9bGVuKGNvcmVzKSBvciBOb25lLFxuICAgICAgICAgICAgICAgIGxvZ2ljYWxfY3B1cz1vcy5jcHVfY291bnQoKSwgY3B1X21pbl9taHo9bWluKCh4IGZvciB4IGluIG1pbmltdW0gaWYgeCBpcyBub3QgTm9uZSksIGRlZmF1bHQ9Tm9uZSksXG4gICAgICAgICAgICAgICAgY3B1X21heF9taHo9bWF4KCh4IGZvciB4IGluIG1heGltdW0gaWYgeCBpcyBub3QgTm9uZSksIGRlZmF1bHQ9Tm9uZSkpXG5cblxuZGVmIGRpc2tfaW52ZW50b3J5KCk6XG4gICAgb3V0cHV0ID0gb3B0aW9uYWxfY29tbWFuZChbJ2xzYmxrJywgJy0tanNvbicsICctLWJ5dGVzJywgJy0tbm9kZXBzJywgJy0tb3V0cHV0JywgJ05BTUUsVFlQRSxTSVpFLE1PREVMLFZFTkRPUixUUkFOLFJPVEEsUk0nXSlcbiAgICBpZiBvdXRwdXQgaXMgTm9uZTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICB0cnk6XG4gICAgICAgIGRldmljZXMgPSBqc29uLmxvYWRzKG91dHB1dClbJ2Jsb2NrZGV2aWNlcyddXG4gICAgZXhjZXB0IChWYWx1ZUVycm9yLCBLZXlFcnJvciwgVHlwZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICByZXN1bHQgPSBbXVxuICAgIGZvciBkaXNrIGluIGRldmljZXM6XG4gICAgICAgIGlmIGRpc2suZ2V0KCd0eXBlJykgIT0gJ2Rpc2snOlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgcm90YXRpb25hbCA9IGRpc2suZ2V0KCdyb3RhJylcbiAgICAgICAgbWVkaWEgPSAnaGRkJyBpZiByb3RhdGlvbmFsIGVsc2UgJ3NzZCcgaWYgcm90YXRpb25hbCBpcyBub3QgTm9uZSBlbHNlIE5vbmVcbiAgICAgICAgcmVzdWx0LmFwcGVuZChkaWN0KGRldmljZV9rZXk9ZGlza1snbmFtZSddLCBtb2RlbD0oZGlzay5nZXQoJ21vZGVsJykgb3IgJycpLnN0cmlwKCkgb3IgTm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvcj0oZGlzay5nZXQoJ3ZlbmRvcicpIG9yICcnKS5zdHJpcCgpIG9yIE5vbmUsIGNhcGFjaXR5X2J5dGVzPW51bWJlcihkaXNrLmdldCgnc2l6ZScpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydD1kaXNrLmdldCgndHJhbicpLCBtZWRpYV90eXBlPW1lZGlhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25hbD1ib29sKHJvdGF0aW9uYWwpIGlmIHJvdGF0aW9uYWwgaXMgbm90IE5vbmUgZWxzZSBOb25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZhYmxlPWJvb2woZGlza1sncm0nXSkgaWYgZGlzay5nZXQoJ3JtJykgaXMgbm90IE5vbmUgZWxzZSBOb25lKSlcbiAgICByZXR1cm4gcmVzdWx0Wzo2NF1cblxuXG5kZWYgZ3B1X2ludmVudG9yeSgpOlxuICAgIHJlc3VsdCA9IFtdXG4gICAgZm9yIGRldmljZSBpbiBQYXRoKCcvc3lzL2J1cy9wY2kvZGV2aWNlcycpLmdsb2IoJyonKTpcbiAgICAgICAgaWYgbm90IChyZWFkX3RleHQoZGV2aWNlIC8gJ2NsYXNzJykgb3IgJycpLnN0YXJ0c3dpdGgoJzB4MDMnKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIGdwdSA9IGRpY3QoZGV2aWNlX2tleT1kZXZpY2UubmFtZSwgcGNpX2FkZHJlc3M9ZGV2aWNlLm5hbWUsICoqcGNpX2RldGFpbHMoZGV2aWNlKSlcbiAgICAgICAgZ3B1WydtZW1vcnlfYnl0ZXMnXSA9IG51bWJlcihyZWFkX3RleHQoZGV2aWNlIC8gJ21lbV9pbmZvX3ZyYW1fdG90YWwnKSlcbiAgICAgICAgcmVzdWx0LmFwcGVuZChncHUpXG4gICAgb3V0cHV0ID0gb3B0aW9uYWxfY29tbWFuZChbJ252aWRpYS1zbWknLCAnLS1xdWVyeS1ncHU9cGNpLmJ1c19pZCxuYW1lLGRyaXZlcl92ZXJzaW9uLG1lbW9yeS50b3RhbCxjbG9ja3MubWF4LmdyYXBoaWNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1mb3JtYXQ9Y3N2LG5vaGVhZGVyLG5vdW5pdHMnXSlcbiAgICBxdWVyeV9oZWxwID0gb3B0aW9uYWxfY29tbWFuZChbJ252aWRpYS1zbWknLCAnLS1oZWxwLXF1ZXJ5LWdwdSddKSBpZiBvdXRwdXQgZWxzZSBOb25lXG4gICAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKChvdXRwdXQgb3IgJycpLnNwbGl0bGluZXMoKSwgc2tpcGluaXRpYWxzcGFjZT1UcnVlKTpcbiAgICAgICAgaWYgbGVuKHJvdykgIT0gNTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIGFkZHJlc3MgPSByb3dbMF0ubG93ZXIoKVstMTI6XVxuICAgICAgICBncHUgPSBuZXh0KChpdGVtIGZvciBpdGVtIGluIHJlc3VsdCBpZiBpdGVtWydwY2lfYWRkcmVzcyddLmxvd2VyKCkgPT0gYWRkcmVzcyksIE5vbmUpXG4gICAgICAgIGlmIGdwdSBpcyBOb25lOlxuICAgICAgICAgICAgZ3B1ID0gZGljdChkZXZpY2Vfa2V5PWFkZHJlc3MsIHBjaV9hZGRyZXNzPWFkZHJlc3MpXG4gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGdwdSlcbiAgICAgICAgZ3B1LnVwZGF0ZSh2ZW5kb3I9J05WSURJQScsIG1vZGVsPXJvd1sxXSwgZHJpdmVyX3ZlcnNpb249cm93WzJdLCBtZW1vcnlfYnl0ZXM9bnVtYmVyKHJvd1szXSwgMTAyNCoqMiksXG4gICAgICAgICAgICAgICAgICAgbWF4X2Nsb2NrX21oej1udW1iZXIocm93WzRdKSlcbiAgICAgICAgZm9yIGZpZWxkLCBrZXkgaW4gWygnbnVtX2NvcmVzJywgJ2NvcmVfY291bnQnKSwgKCdtdWx0aXByb2Nlc3Nvcl9jb3VudCcsICdtdWx0aXByb2Nlc3Nvcl9jb3VudCcpXTpcbiAgICAgICAgICAgIGlmIHF1ZXJ5X2hlbHAgYW5kICgnXFxcIicgKyBmaWVsZCArICdcXFwiJykgaW4gcXVlcnlfaGVscDpcbiAgICAgICAgICAgICAgICBncHVba2V5XSA9IG51bWJlcihvcHRpb25hbF9jb21tYW5kKFsnbnZpZGlhLXNtaScsICctLWlkPScgKyByb3dbMF0sICctLXF1ZXJ5LWdwdT0nICsgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWZvcm1hdD1jc3Ysbm9oZWFkZXIsbm91bml0cyddKSlcbiAgICByZXR1cm4gcmVzdWx0Wzo2NF1cblxuXG5kZWYgbmV0d29ya19pbnZlbnRvcnkoKTpcbiAgICBvdXRwdXQgPSBvcHRpb25hbF9jb21tYW5kKFsnaXAnLCAnLWpzb24nLCAnYWRkcmVzcycsICdzaG93J10pXG4gICAgaWYgb3V0cHV0IGlzIE5vbmU6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgdHJ5OlxuICAgICAgICBpbnRlcmZhY2VzID0ganNvbi5sb2FkcyhvdXRwdXQpXG4gICAgZXhjZXB0IFZhbHVlRXJyb3I6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcmVzdWx0ID0gW11cbiAgICBmb3IgaW50ZXJmYWNlIGluIGludGVyZmFjZXM6XG4gICAgICAgIG5hbWUgPSBpbnRlcmZhY2VbJ2lmbmFtZSddXG4gICAgICAgIHBhdGggPSBQYXRoKCcvc3lzL2NsYXNzL25ldCcpIC8gbmFtZVxuICAgICAgICBkZXZpY2UgPSAocGF0aCAvICdkZXZpY2UnKS5yZXNvbHZlKClcbiAgICAgICAgZGV0YWlscyA9IHBjaV9kZXRhaWxzKGRldmljZSkgaWYgKGRldmljZSAvICd2ZW5kb3InKS5leGlzdHMoKSBlbHNlIGRpY3QobW9kZWw9Tm9uZSwgdmVuZG9yPU5vbmUpXG4gICAgICAgIGNvbm5lY3Rpb24gPSAnd2lmaScgaWYgKHBhdGggLyAnd2lyZWxlc3MnKS5leGlzdHMoKSBlbHNlICdldGhlcm5ldCcgaWYgKHBhdGggLyAnZGV2aWNlJykuZXhpc3RzKCkgZWxzZSAndmlydHVhbCdcbiAgICAgICAgZHJpdmVyID0gKHBhdGggLyAnZGV2aWNlL2RyaXZlcicpLnJlc29sdmUoKS5uYW1lIGlmIChwYXRoIC8gJ2RldmljZS9kcml2ZXInKS5leGlzdHMoKSBlbHNlIE5vbmVcbiAgICAgICAgYWRkcmVzc2VzID0gW2RpY3QoYWRkcmVzcz1pdGVtWydsb2NhbCddLCBwcmVmaXhfbGVuZ3RoPWl0ZW1bJ3ByZWZpeGxlbiddLCBzY29wZT1pdGVtLmdldCgnc2NvcGUnKSlcbiAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGludGVyZmFjZS5nZXQoJ2FkZHJfaW5mbycsIFtdKSBpZiBpdGVtLmdldCgnZmFtaWx5JykgaW4gKCdpbmV0JywgJ2luZXQ2JyldXG4gICAgICAgIHJlc3VsdC5hcHBlbmQoZGljdChkZXZpY2Vfa2V5PW5hbWUsICoqZGV0YWlscywgZHJpdmVyPWRyaXZlciwgY29ubmVjdGlvbl90eXBlPWNvbm5lY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNfYWRkcmVzcz1pbnRlcmZhY2UuZ2V0KCdhZGRyZXNzJyksIGxpbmtfc3RhdGU9aW50ZXJmYWNlLmdldCgnb3BlcnN0YXRlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZF9tYnBzPW51bWJlcihyZWFkX3RleHQocGF0aCAvICdzcGVlZCcpKSwgbXR1PWludGVyZmFjZS5nZXQoJ210dScpLCBhZGRyZXNzZXM9YWRkcmVzc2VzWzozMl0pKVxuICAgIHJldHVybiByZXN1bHRbOjY0XVxuXG5cbmRlZiBjaV9yZXNlcnZhdGlvbigpOlxuICAgIHBhdGggPSBQYXRoKCcvc3lzL2ZzL2Nncm91cC9jaS5zbGljZS9tZW1vcnkubWF4JylcbiAgICB2YWx1ZSA9IHBhdGgucmVhZF90ZXh0KCkuc3RyaXAoKSBpZiBwYXRoLmV4aXN0cygpIGVsc2UgJydcbiAgICByZXR1cm4gaW50KHZhbHVlKSBpZiB2YWx1ZS5pc2RpZ2l0KCkgZWxzZSBOb25lXG5cblxuZGVmIGludmVudG9yeSgpOlxuICAgIHRyeTpcbiAgICAgICAgcmVsZWFzZSA9IHBsYXRmb3JtLmZyZWVkZXNrdG9wX29zX3JlbGVhc2UoKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZWxlYXNlID0ge31cbiAgICByZXN1bHQgPSBkaWN0KGhvc3RuYW1lPXNvY2tldC5nZXRob3N0bmFtZSgpLCBtYW51ZmFjdHVyZXI9cmVhZF90ZXh0KCcvc3lzL2NsYXNzL2RtaS9pZC9zeXNfdmVuZG9yJyksXG4gICAgICAgICAgICAgICAgICBoYXJkd2FyZV9tb2RlbD1yZWFkX3RleHQoJy9zeXMvY2xhc3MvZG1pL2lkL3Byb2R1Y3RfbmFtZScpLCBhcmNoaXRlY3R1cmU9cGxhdGZvcm0ubWFjaGluZSgpLFxuICAgICAgICAgICAgICAgICAgb3NfbmFtZT1yZWxlYXNlLmdldCgnTkFNRScpLCBvc192ZXJzaW9uPXJlbGVhc2UuZ2V0KCdWRVJTSU9OX0lEJyksIGtlcm5lbF92ZXJzaW9uPXBsYXRmb3JtLnJlbGVhc2UoKSxcbiAgICAgICAgICAgICAgICAgIGNpX21lbW9yeV9yZXNlcnZlZF9ieXRlcz1jaV9yZXNlcnZhdGlvbigpLFxuICAgICAgICAgICAgICAgICAgbWVtb3J5X2J5dGVzPW1lbW9yeSgpLmdldCgnTWVtVG90YWwnKSwgZGlza19ieXRlcz1zaHV0aWwuZGlza191c2FnZShST09UKS50b3RhbCwgKipjcHVfaW52ZW50b3J5KCkpXG4gICAgaWYgSE9TVC5nZXQoJ2hhcmR3YXJlX21vZGVsJyk6XG4gICAgICAgIHJlc3VsdFsnbWFudWZhY3R1cmVyJ10gPSBIT1NULmdldCgnbWFudWZhY3R1cmVyJykgb3IgcmVzdWx0WydtYW51ZmFjdHVyZXInXSBvciAnQXBwbGUnXG4gICAgICAgIHJlc3VsdFsnaGFyZHdhcmVfbW9kZWwnXSA9IEhPU1RbJ2hhcmR3YXJlX21vZGVsJ11cbiAgICBmb3Iga2V5LCBjb2xsZWN0b3IgaW4gWygnZGlza3MnLCBkaXNrX2ludmVudG9yeSksICgnZ3B1cycsIGdwdV9pbnZlbnRvcnkpLCAoJ25ldHdvcmtfaW50ZXJmYWNlcycsIG5ldHdvcmtfaW52ZW50b3J5KV06XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHZhbHVlID0gY29sbGVjdG9yKClcbiAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOlxuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBLZXlFcnJvciwgVHlwZUVycm9yKTpcbiAgICAgICAgICAgIHBhc3NcbiAgICByZXR1cm4gcmVzdWx0XG5cblxuZGVmIGFwcGx5X2hvc3RfcG93ZXIocmVzdWx0KTpcbiAgICBmb3Iga2V5IGluICgnYmF0dGVyeV9wcmVzZW50JywgJ2FjX2Nvbm5lY3RlZCcsICdiYXR0ZXJ5X3BlcmNlbnQnLCAnYmF0dGVyeV9zdGF0dXMnLCAnYmF0dGVyeV9yZW1haW5pbmdfc2Vjb25kcycpOlxuICAgICAgICBpZiBIT1NULmdldChrZXkpIGlzIG5vdCBOb25lOlxuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBIT1NUW2tleV1cbiAgICByZXR1cm4gcmVzdWx0XG5cblxuZGVmIHBvd2VyX2ludmVudG9yeShyb290PVBhdGgoJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5JykpOlxuICAgIHJlc3VsdCA9IGRpY3QoYmF0dGVyeV9wcmVzZW50PU5vbmUsIGFjX2Nvbm5lY3RlZD1Ob25lLCBiYXR0ZXJ5X3BlcmNlbnQ9Tm9uZSxcbiAgICAgICAgICAgICAgICAgIGJhdHRlcnlfc3RhdHVzPU5vbmUsIGJhdHRlcnlfcmVtYWluaW5nX3NlY29uZHM9Tm9uZSxcbiAgICAgICAgICAgICAgICAgIHBvd2VyX3Byb2ZpbGU9cmVhZF90ZXh0KCcvc3lzL2Zpcm13YXJlL2FjcGkvcGxhdGZvcm1fcHJvZmlsZScpKVxuICAgIHRyeTpcbiAgICAgICAgc3VwcGxpZXMgPSBsaXN0KHJvb3QuaXRlcmRpcigpKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZXR1cm4gYXBwbHlfaG9zdF9wb3dlcihyZXN1bHQpXG4gICAgYmF0dGVyaWVzLCBleHRlcm5hbCA9IFtdLCBbXVxuICAgIGZvciBzdXBwbHkgaW4gc3VwcGxpZXM6XG4gICAgICAgIGlmIHJlYWRfdGV4dChzdXBwbHkgLyAnc2NvcGUnKSA9PSAnRGV2aWNlJzpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIGtpbmQgPSByZWFkX3RleHQoc3VwcGx5IC8gJ3R5cGUnKVxuICAgICAgICBpZiBraW5kID09ICdCYXR0ZXJ5JyBhbmQgcmVhZF90ZXh0KHN1cHBseSAvICdwcmVzZW50JykgIT0gJzAnOlxuICAgICAgICAgICAgYmF0dGVyaWVzLmFwcGVuZChzdXBwbHkpXG4gICAgICAgIGVsaWYga2luZCBpbiAoJ01haW5zJywgJ1VTQicsICdVU0JfQycsICdVU0JfUEQnLCAnVVNCX1BEX0RSUCcsICdXaXJlbGVzcycpOlxuICAgICAgICAgICAgb25saW5lID0gcmVhZF90ZXh0KHN1cHBseSAvICdvbmxpbmUnKVxuICAgICAgICAgICAgaWYgb25saW5lIGluICgnMCcsICcxJyk6XG4gICAgICAgICAgICAgICAgZXh0ZXJuYWwuYXBwZW5kKG9ubGluZSA9PSAnMScpXG4gICAgcmVzdWx0WydiYXR0ZXJ5X3ByZXNlbnQnXSA9IGJvb2woYmF0dGVyaWVzKVxuICAgIGlmIGV4dGVybmFsOlxuICAgICAgICByZXN1bHRbJ2FjX2Nvbm5lY3RlZCddID0gYW55KGV4dGVybmFsKVxuICAgIHBlcmNlbnRhZ2VzLCBzdGF0dXNlcywgcnVudGltZXMgPSBbXSwgW10sIFtdXG4gICAgZm9yIGJhdHRlcnkgaW4gYmF0dGVyaWVzOlxuICAgICAgICBwZXJjZW50ID0gbnVtYmVyKHJlYWRfdGV4dChiYXR0ZXJ5IC8gJ2NhcGFjaXR5JykpXG4gICAgICAgIGlmIHBlcmNlbnQgaXMgbm90IE5vbmUgYW5kIHBlcmNlbnQgPD0gMTAwOlxuICAgICAgICAgICAgcGVyY2VudGFnZXMuYXBwZW5kKHBlcmNlbnQpXG4gICAgICAgIHN0YXR1cyA9IHJlYWRfdGV4dChiYXR0ZXJ5IC8gJ3N0YXR1cycpXG4gICAgICAgIGlmIHN0YXR1czpcbiAgICAgICAgICAgIHN0YXR1c2VzLmFwcGVuZChzdGF0dXMpXG4gICAgICAgIGlmIHN0YXR1cyA9PSAnRGlzY2hhcmdpbmcnOlxuICAgICAgICAgICAgc2Vjb25kcyA9IG51bWJlcihyZWFkX3RleHQoYmF0dGVyeSAvICd0aW1lX3RvX2VtcHR5X25vdycpKVxuICAgICAgICAgICAgZW5lcmd5LCB3YXR0cyA9IG51bWJlcihyZWFkX3RleHQoYmF0dGVyeSAvICdlbmVyZ3lfbm93JykpLCBudW1iZXIocmVhZF90ZXh0KGJhdHRlcnkgLyAncG93ZXJfbm93JykpXG4gICAgICAgICAgICBpZiBzZWNvbmRzIGlzIE5vbmUgYW5kIGVuZXJneSBpcyBub3QgTm9uZSBhbmQgd2F0dHM6XG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IGVuZXJneSAvIHdhdHRzICogMzYwMFxuICAgICAgICAgICAgaWYgc2Vjb25kcyBpcyBub3QgTm9uZTpcbiAgICAgICAgICAgICAgICBydW50aW1lcy5hcHBlbmQoaW50KHNlY29uZHMpKVxuICAgIHJlc3VsdFsnYmF0dGVyeV9wZXJjZW50J10gPSBtaW4ocGVyY2VudGFnZXMsIGRlZmF1bHQ9Tm9uZSlcbiAgICByZXN1bHRbJ2JhdHRlcnlfcmVtYWluaW5nX3NlY29uZHMnXSA9IG1pbihydW50aW1lcywgZGVmYXVsdD1Ob25lKVxuICAgIHJlc3VsdFsnYmF0dGVyeV9zdGF0dXMnXSA9ICdEaXNjaGFyZ2luZycgaWYgJ0Rpc2NoYXJnaW5nJyBpbiBzdGF0dXNlcyBlbHNlIHN0YXR1c2VzWzBdIGlmIHN0YXR1c2VzIGVsc2UgTm9uZVxuICAgIGlmIHJlc3VsdFsnYWNfY29ubmVjdGVkJ10gaXMgTm9uZSBhbmQgJ0Rpc2NoYXJnaW5nJyBpbiBzdGF0dXNlczpcbiAgICAgICAgcmVzdWx0WydhY19jb25uZWN0ZWQnXSA9IEZhbHNlXG4gICAgcmV0dXJuIGFwcGx5X2hvc3RfcG93ZXIocmVzdWx0KVxuXG5cbmRlZiB1cGxpbmtfa2luZCh3aWZpLCBpZmFjZSk6XG4gICAgaWYgd2lmaTpcbiAgICAgICAgcmV0dXJuICd3aWZpJ1xuICAgIGlmIGlmYWNlOlxuICAgICAgICByZXR1cm4gJ2V0aGVybmV0J1xuICAgIHJldHVybiAndW5rbm93bidcblxuXG5kZWYgaXNvX2Zyb21fdW5peCh2YWx1ZSk6XG4gICAgdHJ5OlxuICAgICAgICBzdGFtcCA9IGZsb2F0KHZhbHVlKVxuICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICBpZiBzdGFtcCA8PSAwOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJldHVybiB0aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onLCB0aW1lLmdtdGltZShzdGFtcCkpXG5cblxuZGVmIGZhaWxlZF91cGxpbmsoa2luZD0ndW5rbm93bicpOlxuICAgIHJldHVybiB7XG4gICAgICAgICd1cGxpbmtfa2luZCc6IGtpbmQsXG4gICAgICAgICd1cGxpbmtfcHJvYmVfb2snOiBGYWxzZSxcbiAgICAgICAgJ3VwbGlua19wcm9iZV9icHMnOiAwLFxuICAgICAgICAndXBsaW5rX3Byb2JlZF9hdCc6IHRpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicsIHRpbWUuZ210aW1lKCkpLFxuICAgIH1cblxuXG5kZWYgb3B0aW9uYWxfYm9vbChib2R5LCBrZXkpOlxuICAgIHZhbHVlID0gYm9keS5nZXQoa2V5KVxuICAgIHJldHVybiB2YWx1ZSBpZiB2YWx1ZSBpbiAoVHJ1ZSwgRmFsc2UpIGVsc2UgTm9uZVxuXG5cbmRlZiBhcHBseV9ob3N0X2Zyb21faGVscGVyKGJvZHkpOlxuICAgIG1vZGVsID0gYm9keS5nZXQoJ2hhcmR3YXJlX21vZGVsJylcbiAgICBpZiBpc2luc3RhbmNlKG1vZGVsLCBzdHIpIGFuZCBtb2RlbC5zdHJpcCgpOlxuICAgICAgICBIT1NUWydoYXJkd2FyZV9tb2RlbCddID0gbW9kZWwuc3RyaXAoKVs6MjU1XVxuICAgICAgICBtYW51ZmFjdHVyZXIgPSBib2R5LmdldCgnbWFudWZhY3R1cmVyJylcbiAgICAgICAgSE9TVFsnbWFudWZhY3R1cmVyJ10gPSBtYW51ZmFjdHVyZXIuc3RyaXAoKVs6MjU1XSBpZiBpc2luc3RhbmNlKG1hbnVmYWN0dXJlciwgc3RyKSBhbmQgbWFudWZhY3R1cmVyLnN0cmlwKCkgZWxzZSAnQXBwbGUnXG4gICAgZm9yIGtleSBpbiAoJ2JhdHRlcnlfcHJlc2VudCcsICdhY19jb25uZWN0ZWQnKTpcbiAgICAgICAgdmFsdWUgPSBvcHRpb25hbF9ib29sKGJvZHksIGtleSlcbiAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6XG4gICAgICAgICAgICBIT1NUW2tleV0gPSB2YWx1ZVxuICAgIHBlcmNlbnQgPSBib2R5LmdldCgnYmF0dGVyeV9wZXJjZW50JylcbiAgICBpZiBpc2luc3RhbmNlKHBlcmNlbnQsIChpbnQsIGZsb2F0KSkgYW5kIDAgPD0gcGVyY2VudCA8PSAxMDA6XG4gICAgICAgIEhPU1RbJ2JhdHRlcnlfcGVyY2VudCddID0gaW50KHBlcmNlbnQpXG4gICAgc3RhdHVzID0gYm9keS5nZXQoJ2JhdHRlcnlfc3RhdHVzJylcbiAgICBpZiBpc2luc3RhbmNlKHN0YXR1cywgc3RyKSBhbmQgc3RhdHVzLnN0cmlwKCk6XG4gICAgICAgIEhPU1RbJ2JhdHRlcnlfc3RhdHVzJ10gPSBzdGF0dXMuc3RyaXAoKVs6MjU1XVxuXG5cbmRlZiByZWFkX2hlbHBlcl91cGxpbmsoKTpcbiAgICBwYXJzZWQgPSBzdG9yYWdlX3Byb3h5KClcbiAgICBjb25uZWN0aW9uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ocGFyc2VkLmhvc3RuYW1lLCBwYXJzZWQucG9ydCBvciA4MCwgdGltZW91dD0xNSlcbiAgICB0cnk6XG4gICAgICAgIGNvbm5lY3Rpb24ucmVxdWVzdCgnR0VUJywgJy91cGxpbmsnKVxuICAgICAgICByZXNwb25zZSA9IGNvbm5lY3Rpb24uZ2V0cmVzcG9uc2UoKVxuICAgICAgICByYXcgPSByZXNwb25zZS5yZWFkKDY1NTM3KVxuICAgICAgICBpZiByZXNwb25zZS5zdGF0dXMgIT0gMjAwIG9yIGxlbihyYXcpID4gNjU1MzY6XG4gICAgICAgICAgICByYWlzZSBPU0Vycm9yKCd1cGxpbmsgcHJvYmUgdW5hdmFpbGFibGUnKVxuICAgICAgICBib2R5ID0ganNvbi5sb2FkcyhyYXcuZGVjb2RlKCkpXG4gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGJvZHksIGRpY3QpOlxuICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigndXBsaW5rIHByb2JlIHVuYXZhaWxhYmxlJylcbiAgICAgICAgYXBwbHlfaG9zdF9mcm9tX2hlbHBlcihib2R5KVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3VwbGlua19raW5kJzogdXBsaW5rX2tpbmQoYm9vbChib2R5LmdldCgnd2lmaScpKSwgYm9keS5nZXQoJ2lmYWNlJykpLFxuICAgICAgICAgICAgJ3VwbGlua19wcm9iZV9vayc6IGJvZHkuZ2V0KCdvaycpIGlzIFRydWUsXG4gICAgICAgICAgICAndXBsaW5rX3Byb2JlX2Jwcyc6IGludChib2R5LmdldCgnYnBzJykgb3IgMCksXG4gICAgICAgICAgICAndXBsaW5rX3Byb2JlZF9hdCc6IGlzb19mcm9tX3VuaXgoYm9keS5nZXQoJ3Byb2JlZF9hdCcpKSxcbiAgICAgICAgfVxuICAgIGZpbmFsbHk6XG4gICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKVxuXG5cbmRlZiBwcm9iZV9jbG91ZGZsYXJlX3VwbGluaygpOlxuICAgIHN0YXJ0ZWQgPSB0aW1lLm1vbm90b25pYygpXG4gICAgcGF5bG9hZCA9IGInXFwwJyAqIFBST0JFX0JZVEVTXG4gICAgY3R4ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKVxuICAgIGN0eC5taW5pbXVtX3ZlcnNpb24gPSBzc2wuVExTVmVyc2lvbi5UTFN2MV8yXG4gICAgY29ubiA9IGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbihQUk9CRV9IT1NULCA0NDMsIHRpbWVvdXQ9UFJPQkVfVElNRU9VVCwgY29udGV4dD1jdHgpXG4gICAgdHJ5OlxuICAgICAgICBjb25uLnJlcXVlc3QoJ1BVVCcsIFBST0JFX1BBVEgsIGJvZHk9cGF5bG9hZCwgaGVhZGVycz17J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nfSlcbiAgICAgICAgcmVzcG9uc2UgPSBjb25uLmdldHJlc3BvbnNlKClcbiAgICAgICAgcmVzcG9uc2UucmVhZCgpXG4gICAgICAgIGVsYXBzZWQgPSBtYXgodGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0ZWQsIDAuMDAxKVxuICAgICAgICBvayA9IHJlc3BvbnNlLnN0YXR1cyBpbiAoMjAwLCA0MDMpXG4gICAgICAgIHJldHVybiBvaywgaW50KFBST0JFX0JZVEVTIC8gZWxhcHNlZCkgaWYgb2sgZWxzZSAwXG4gICAgZXhjZXB0IChPU0Vycm9yLCBzc2wuU1NMRXJyb3IsIGh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb24sIFZhbHVlRXJyb3IpOlxuICAgICAgICByZXR1cm4gRmFsc2UsIDBcbiAgICBmaW5hbGx5OlxuICAgICAgICBjb25uLmNsb3NlKClcblxuXG5kZWYgcmVmcmVzaF91cGxpbmsoZm9yY2U9RmFsc2UpOlxuICAgIGdsb2JhbCBVUExJTktfQVRcbiAgICBub3cgPSB0aW1lLm1vbm90b25pYygpXG4gICAgcHJveHkgPSBzdG9yYWdlX3Byb3h5KClcbiAgICB3aXRoIFVQTElOS19MT0NLOlxuICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBwcm94eSBhbmQgVVBMSU5LWyd1cGxpbmtfcHJvYmVkX2F0J10gYW5kIG5vdyAtIFVQTElOS19BVCA8IFVQTElOS19JTlRFUlZBTDpcbiAgICAgICAgICAgIHJldHVybiBkaWN0KFVQTElOSylcbiAgICB0cnk6XG4gICAgICAgIGlmIHByb3h5OlxuICAgICAgICAgICAgc3RhdGUgPSByZWFkX2hlbHBlcl91cGxpbmsoKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgb2ssIGJwcyA9IHByb2JlX2Nsb3VkZmxhcmVfdXBsaW5rKClcbiAgICAgICAgICAgIHN0YXRlID0ge1xuICAgICAgICAgICAgICAgICd1cGxpbmtfa2luZCc6IHVwbGlua19raW5kKHdpZmlfZGVmYXVsdF9yb3V0ZSgpLCBUcnVlKSxcbiAgICAgICAgICAgICAgICAndXBsaW5rX3Byb2JlX29rJzogb2ssXG4gICAgICAgICAgICAgICAgJ3VwbGlua19wcm9iZV9icHMnOiBicHMsXG4gICAgICAgICAgICAgICAgJ3VwbGlua19wcm9iZWRfYXQnOiB0aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onLCB0aW1lLmdtdGltZSgpKSxcbiAgICAgICAgICAgIH1cbiAgICBleGNlcHQgRXhjZXB0aW9uOlxuICAgICAgICBzdGF0ZSA9IGZhaWxlZF91cGxpbmsoJ3Vua25vd24nIGlmIHByb3h5IGVsc2UgdXBsaW5rX2tpbmQod2lmaV9kZWZhdWx0X3JvdXRlKCksIFRydWUpKVxuICAgIHdpdGggVVBMSU5LX0xPQ0s6XG4gICAgICAgIFVQTElOSy51cGRhdGUoc3RhdGUpXG4gICAgICAgIFVQTElOS19BVCA9IG5vd1xuICAgICAgICByZXR1cm4gZGljdChVUExJTkspXG5cblxuQ1BVX1NBTVBMRSA9IE5vbmVcbkNQVV9QRVJDRU5UUyA9IChOb25lLCBOb25lKVxuQ1BVX0xPQ0sgPSB0aHJlYWRpbmcuTG9jaygpXG5DUFVfSU5URVJWQUwgPSAxXG5QUk9DX1NUQVQgPSBQYXRoKCcvcHJvYy9zdGF0JylcbiMgVGhlIGFnZW50IHNlcnZpY2UsIGl0cyB0YXNrcyBhbmQgQ0kgYWxsIHJ1biBpbiB0aGVzZSBzbGljZXMuXG5XT1JLRVJfU0xJQ0VTID0gKFBhdGgoJy9zeXMvZnMvY2dyb3VwL2NvbXB1dGUuc2xpY2UnKSwgUGF0aCgnL3N5cy9mcy9jZ3JvdXAvY2kuc2xpY2UnKSlcblxuXG5kZWYgd29ya2VyX2NwdV9zZWNvbmRzKCk6XG4gICAgXCJcIlwiQ1BVIHNlY29uZHMgZWFjaCB3b3JrZXIgc2xpY2UgaGFzIHVzZWQ7IGEgc2xpY2UgdGhhdCBpcyBtaXNzaW5nIG9yIHVucmVhZGFibGUgaXMgbGVmdCBvdXQuXCJcIlwiXG4gICAgdXNlZCA9IHt9XG4gICAgZm9yIHBhdGggaW4gV09SS0VSX1NMSUNFUzpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgc3RhdHMgPSBkaWN0KGxpbmUuc3BsaXQoKSBmb3IgbGluZSBpbiAocGF0aCAvICdjcHUuc3RhdCcpLnJlYWRfdGV4dCgpLnNwbGl0bGluZXMoKSBpZiBsaW5lLnN0cmlwKCkpXG4gICAgICAgICAgICB1c2VkW3BhdGhdID0gaW50KHN0YXRzWyd1c2FnZV91c2VjJ10pIC8gMTAwMDAwMFxuICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IsIEtleUVycm9yKTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgcmV0dXJuIHVzZWRcblxuXG5kZWYgaG9zdF9jcHVfcGVyY2VudHMoKTpcbiAgICBcIlwiXCJXaG9sZS1ob3N0IGFuZCBvd25lciBDUFUgcGVyY2VudCBzaW5jZSB0aGUgcHJldmlvdXMgc2FtcGxlLCBhdCBsZWFzdCBDUFVfSU5URVJWQUwgYXBhcnQuXG5cbiAgICBUaGUgb3duZXIncyBzaGFyZSBsZWF2ZXMgb3V0IHRoZSB3b3JrZXIgc2xpY2VzLCBzbyB0aGUgd29ya2VyJ3Mgb3duIGxvYWQgbmV2ZXIgbWFrZXMgaXQgYnVzeS5cbiAgICBCb3RoIHRoZSBoZWFydGJlYXQgYW5kIHRoZSBjbGFpbSBsb29wIGFzazsgYSBjYWxsIHdpdGhpbiB0aGUgaW50ZXJ2YWwgZ2V0cyB0aGUgbGFzdCByZXN1bHQuXG4gICAgXCJcIlwiXG4gICAgZ2xvYmFsIENQVV9TQU1QTEUsIENQVV9QRVJDRU5UU1xuICAgIHdpdGggQ1BVX0xPQ0s6XG4gICAgICAgIG5vdyA9IHRpbWUubW9ub3RvbmljKClcbiAgICAgICAgaWYgQ1BVX1NBTVBMRSBpcyBub3QgTm9uZSBhbmQgbm93IC0gQ1BVX1NBTVBMRVswXSA8IENQVV9JTlRFUlZBTDpcbiAgICAgICAgICAgIHJldHVybiBDUFVfUEVSQ0VOVFNcbiAgICAgICAgY291bnRlcnMgPSBbaW50KHZhbHVlKSBmb3IgdmFsdWUgaW4gUFJPQ19TVEFULnJlYWRfdGV4dCgpLnNwbGl0bGluZXMoKVswXS5zcGxpdCgpWzE6OV1dXG4gICAgICAgIHRpY2tzID0gb3Muc3lzY29uZignU0NfQ0xLX1RDSycpXG4gICAgICAgIHNhbXBsZSA9IChub3csIHN1bShjb3VudGVycykgLyB0aWNrcywgKGNvdW50ZXJzWzNdICsgY291bnRlcnNbNF0pIC8gdGlja3MsIHdvcmtlcl9jcHVfc2Vjb25kcygpKVxuICAgICAgICBwcmV2aW91cywgQ1BVX1NBTVBMRSA9IENQVV9TQU1QTEUsIHNhbXBsZVxuICAgICAgICBpZiBwcmV2aW91cyBpcyBOb25lIG9yIHNhbXBsZVsxXSA8PSBwcmV2aW91c1sxXTpcbiAgICAgICAgICAgIENQVV9QRVJDRU5UUyA9IChOb25lLCBOb25lKVxuICAgICAgICAgICAgcmV0dXJuIENQVV9QRVJDRU5UU1xuICAgICAgICB0b3RhbCA9IHNhbXBsZVsxXSAtIHByZXZpb3VzWzFdXG4gICAgICAgIGJ1c3kgPSB0b3RhbCAtIChzYW1wbGVbMl0gLSBwcmV2aW91c1syXSlcbiAgICAgICAgIyBQZXIgc2xpY2UsIHNvIGEgc2xpY2UgdGhhdCB3YXMgcmVtb3ZlZCBvciByZWNyZWF0ZWQgYmV0d2VlbiBzYW1wbGVzIHN1YnRyYWN0cyBub3RoaW5nLlxuICAgICAgICB3b3JrZXIgPSBzdW0obWF4KDAsIHVzZWQgLSBwcmV2aW91c1szXS5nZXQocGF0aCwgdXNlZCkpIGZvciBwYXRoLCB1c2VkIGluIHNhbXBsZVszXS5pdGVtcygpKVxuICAgICAgICBvd25lciA9IGJ1c3kgLSB3b3JrZXJcbiAgICAgICAgQ1BVX1BFUkNFTlRTID0gdHVwbGUobWF4KDAsIG1pbigxMDAsIDEwMCAqIHZhbHVlIC8gdG90YWwpKSBmb3IgdmFsdWUgaW4gKGJ1c3ksIG93bmVyKSlcbiAgICAgICAgcmV0dXJuIENQVV9QRVJDRU5UU1xuXG5cbmRlZiBob3N0X2FjdGl2aXR5KCk6XG4gICAgXCJcIlwiQ29sbGVjdCBob3N0IG1lYXN1cmVtZW50cyBsb2NhbGx5LCBvciB1c2UgYSBmcmVzaCBob3N0IGhlbHBlciBmb3IgVk1zLlwiXCJcIlxuICAgIHdpbmRvd3MgPSByZWFkX2pzb24oUk9PVCAvICdob3N0LWFjdGl2aXR5LXBhdGguanNvbicpXG4gICAgaWYgd2luZG93czpcbiAgICAgICAgcmV0dXJuIHJlYWRfanNvbihQYXRoKHdpbmRvd3MpLCB7fSlcbiAgICBwcm94eSA9IHN0b3JhZ2VfcHJveHkoKVxuICAgIGlmIHByb3h5OlxuICAgICAgICB0cnk6XG4gICAgICAgICAgICB1cmkgPSB1cmxsaWIucGFyc2UudXJsdW5zcGxpdCgoJ2h0dHAnLCBwcm94eS5uZXRsb2MsICcvYWN0aXZpdHknLCAnJywgJycpKVxuICAgICAgICAgICAgcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJpLCBoZWFkZXJzPXsnWC1ER0UtSGVscGVyLVRva2VuJzogb3MuZW52aXJvbi5nZXQoJ0RHRV9IRUxQRVJfVE9LRU4nLCAnJyl9KVxuICAgICAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MykgYXMgcmVzcG9uc2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMocmVzcG9uc2UucmVhZCg0MDk3KSlcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKTpcbiAgICAgICAgICAgIHJldHVybiB7fVxuICAgIHNlc3Npb25zID0gb3B0aW9uYWxfY29tbWFuZChbJ2xvZ2luY3RsJywgJ2xpc3Qtc2Vzc2lvbnMnLCAnLS1uby1sZWdlbmQnXSlcbiAgICBpZGxlID0gW11cbiAgICBpZiBzZXNzaW9ucyBpcyBub3QgTm9uZTpcbiAgICAgICAgZm9yIGxpbmUgaW4gc2Vzc2lvbnMuc3BsaXRsaW5lcygpOlxuICAgICAgICAgICAgaWYgbm90IGxpbmUuc3BsaXQoKTpcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgaWRlbnRpZmllciA9IGxpbmUuc3BsaXQoKVswXVxuICAgICAgICAgICAgZGV0YWlscyA9IG9wdGlvbmFsX2NvbW1hbmQoWydsb2dpbmN0bCcsICdzaG93LXNlc3Npb24nLCBpZGVudGlmaWVyLCAnLXAnLCAnVHlwZScsICctcCcsICdJZGxlSGludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1wJywgJ0lkbGVTaW5jZUhpbnRNb25vdG9uaWMnXSlcbiAgICAgICAgICAgIGZpZWxkcyA9IGRpY3Qocm93LnNwbGl0KCc9JywgMSkgZm9yIHJvdyBpbiAoZGV0YWlscyBvciAnJykuc3BsaXRsaW5lcygpIGlmICc9JyBpbiByb3cpXG4gICAgICAgICAgICBpZiBmaWVsZHMuZ2V0KCdUeXBlJykgbm90IGluICgneDExJywgJ3dheWxhbmQnKTpcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgc2luY2UgPSBudW1iZXIoZmllbGRzLmdldCgnSWRsZVNpbmNlSGludE1vbm90b25pYycpKVxuICAgICAgICAgICAgaWRsZS5hcHBlbmQobWF4KDAsIHRpbWUubW9ub3RvbmljKCkgLSBzaW5jZSAvIDEwMDAwMDApXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZHMuZ2V0KCdJZGxlSGludCcpID09ICd5ZXMnIGFuZCBzaW5jZSBlbHNlIDApXG4gICAgcG93ZXIgPSBwb3dlcl9pbnZlbnRvcnkoKVxuICAgIGNwdSwgb3duZXJfY3B1ID0gaG9zdF9jcHVfcGVyY2VudHMoKVxuICAgIHJldHVybiBkaWN0KHJlcG9ydGVkX2F0PXRpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicsIHRpbWUuZ210aW1lKCkpLFxuICAgICAgICAgICAgICAgIGlkbGVfc2Vjb25kcz1taW4oaWRsZSkgaWYgaWRsZSBlbHNlIE5vbmUsXG4gICAgICAgICAgICAgICAgY3B1X3BlcmNlbnQ9Y3B1LCBvd25lcl9jcHVfcGVyY2VudD1vd25lcl9jcHUsXG4gICAgICAgICAgICAgICAgbWVtb3J5X2F2YWlsYWJsZV9ieXRlcz1tZW1vcnkoKS5nZXQoJ01lbUF2YWlsYWJsZScpLFxuICAgICAgICAgICAgICAgIGJhdHRlcnlfcHJlc2VudD1wb3dlci5nZXQoJ2JhdHRlcnlfcHJlc2VudCcpLCBhY19jb25uZWN0ZWQ9cG93ZXIuZ2V0KCdhY19jb25uZWN0ZWQnKSlcblxuXG5kZWYgY2xhaW1fYWxsb3dlZChwb2xpY3ksIGFjdGl2aXR5KTpcbiAgICBpZiBwb2xpY3kgaXMgTm9uZTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgdHJ5OlxuICAgICAgICBmb3Iga2V5IGluICgnaWRsZV9zZWNvbmRzJywgJ2NwdV9wZXJjZW50JywgJ293bmVyX2NwdV9wZXJjZW50JywgJ21lbW9yeV9hdmFpbGFibGVfYnl0ZXMnKTpcbiAgICAgICAgICAgIHZhbHVlID0gYWN0aXZpdHkuZ2V0KGtleSlcbiAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lIGFuZCAodHlwZSh2YWx1ZSkgbm90IGluIChmbG9hdCwgaW50KSBvciBub3QgbWF0aC5pc2Zpbml0ZSh2YWx1ZSkgb3IgdmFsdWUgPCAwKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcbiAgICAgICAgYWdlID0gdGltZS50aW1lKCkgLSBjYWxlbmRhci50aW1lZ20odGltZS5zdHJwdGltZShhY3Rpdml0eVsncmVwb3J0ZWRfYXQnXSwgJyVZLSVtLSVkVCVIOiVNOiVTWicpKVxuICAgICAgICBpZiBwb2xpY3kuZ2V0KCdpZGxlX29ubHknLCBUcnVlKSBvciBwb2xpY3kuZ2V0KCdhY19vbmx5JywgVHJ1ZSk6XG4gICAgICAgICAgICBpZiBub3QgLTUgPD0gYWdlIDw9IDYwIG9yIGFjdGl2aXR5LmdldCgnbWVtb3J5X2F2YWlsYWJsZV9ieXRlcycpIGlzIE5vbmU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgICAgIGlmIHBvbGljeS5nZXQoJ2FjX29ubHknLCBUcnVlKSBhbmQgbm90IChhY3Rpdml0eS5nZXQoJ2JhdHRlcnlfcHJlc2VudCcpIGlzIEZhbHNlIG9yIGFjdGl2aXR5LmdldCgnYWNfY29ubmVjdGVkJykgaXMgVHJ1ZSk6XG4gICAgICAgICAgICByZXR1cm4gRmFsc2VcbiAgICAgICAgaWYgcG9saWN5LmdldCgnaWRsZV9vbmx5JywgVHJ1ZSk6XG4gICAgICAgICAgICAjIFdob2xlLWhvc3QgQ1BVIGNvdW50cyB0aGlzIHdvcmtlcidzIG93biBsb2FkOyBvbmx5IHJlcG9ydGVycyB3aXRob3V0IHRoZSBvd25lciBzaGFyZSB1c2UgaXQuXG4gICAgICAgICAgICBjcHUgPSBhY3Rpdml0eS5nZXQoJ293bmVyX2NwdV9wZXJjZW50JylcbiAgICAgICAgICAgIGNwdSA9IGFjdGl2aXR5LmdldCgnY3B1X3BlcmNlbnQnKSBpZiBjcHUgaXMgTm9uZSBlbHNlIGNwdVxuICAgICAgICAgICAgaWYgYWN0aXZpdHkuZ2V0KCdpZGxlX3NlY29uZHMnKSBpcyBOb25lIG9yIGNwdSBpcyBOb25lOlxuICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxuICAgICAgICAgICAgaWYgYWN0aXZpdHlbJ2lkbGVfc2Vjb25kcyddIDwgMzAwIG9yIGNwdSA+IDUwOlxuICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxuICAgICAgICByZXR1cm4gYWN0aXZpdHkuZ2V0KCdtZW1vcnlfYXZhaWxhYmxlX2J5dGVzJykgaXMgTm9uZSBvciBhY3Rpdml0eVsnbWVtb3J5X2F2YWlsYWJsZV9ieXRlcyddID49IDEwMjQgKiogM1xuICAgIGV4Y2VwdCAoS2V5RXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcik6XG4gICAgICAgIHJldHVybiBub3QgcG9saWN5LmdldCgnaWRsZV9vbmx5JywgVHJ1ZSkgYW5kIG5vdCBwb2xpY3kuZ2V0KCdhY19vbmx5JywgVHJ1ZSlcblxuXG5kZWYgdGVsZW1ldHJ5KCk6XG4gICAgcmV0dXJuIGRpY3QobG9hZF9hdmVyYWdlPWxpc3Qob3MuZ2V0bG9hZGF2ZygpKSwgbWVtb3J5X2F2YWlsYWJsZV9ieXRlcz1tZW1vcnkoKS5nZXQoJ01lbUF2YWlsYWJsZScpLFxuICAgICAgICAgICAgICAgIGRpc2tfZnJlZV9ieXRlcz1zaHV0aWwuZGlza191c2FnZShST09UKS5mcmVlLFxuICAgICAgICAgICAgICAgIHNjcmF0Y2hfZnJlZV9ieXRlcz1zaHV0aWwuZGlza191c2FnZShTQ1JBVENIKS5mcmVlLFxuICAgICAgICAgICAgICAgIHVwdGltZV9zZWNvbmRzPWludChmbG9hdChQYXRoKCcvcHJvYy91cHRpbWUnKS5yZWFkX3RleHQoKS5zcGxpdCgpWzBdKSksXG4gICAgICAgICAgICAgICAgKipzdG9yZWRfbWV0cmljcygpLCAqKnBvd2VyX2ludmVudG9yeSgpLCAqKnJlZnJlc2hfdXBsaW5rKCkpXG5cblxuZGVmIHN0b3JlZF9tZXRyaWNzKCk6XG4gICAgXCJcIlwiVGFzayBjb3VudGVycyBhcyByZXBvcnRlZC4gQSBzdG9yZWQgZXJyb3IgbG9uZ2VyIHRoYW4gdGhlIHNlcnZlciBjb2x1bW4gaXMgY3V0LCBzbyBhXG4gICAgbWV0cmljcy5qc29uIHdyaXR0ZW4gYnkgYW4gb2xkZXIgYWdlbnQgY2Fubm90IGtlZXAgZXZlcnkgaGVhcnRiZWF0IHJlZnVzZWQuXCJcIlwiXG4gICAgbWV0cmljcyA9IHJlYWRfanNvbihST09UIC8gJ21ldHJpY3MuanNvbicsIHt9KVxuICAgIGlmIGlzaW5zdGFuY2UobWV0cmljcy5nZXQoJ2xhc3RfdGFza19lcnJvcicpLCBzdHIpOlxuICAgICAgICBtZXRyaWNzWydsYXN0X3Rhc2tfZXJyb3InXSA9IG1ldHJpY3NbJ2xhc3RfdGFza19lcnJvciddWzpJTlZFTlRPUllfVEVYVF9MSU1JVF1cbiAgICByZXR1cm4gbWV0cmljc1xuXG5cbmNsYXNzIEFQSTpcbiAgICBkZWYgX19pbml0X18oc2VsZik6XG4gICAgICAgIHNlbGYuaWRlbnRpdHkgPSByZWFkX2pzb24oUk9PVCAvICdpZGVudGl0eS5qc29uJylcbiAgICAgICAgc2VsZi5vcmlnaW4gPSBzZWxmLmlkZW50aXR5WydvcmlnaW4nXS5yc3RyaXAoJy8nKVxuICAgICAgICBwYXJzZWQgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQoc2VsZi5vcmlnaW4pXG4gICAgICAgIGlmIHBhcnNlZC5zY2hlbWUgIT0gJ2h0dHBzJyBvciBwYXJzZWQudXNlcm5hbWUgb3IgcGFyc2VkLnF1ZXJ5IG9yIHBhcnNlZC5mcmFnbWVudCBvciBwYXJzZWQucGF0aDpcbiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1dvcmtlciBvcmlnaW4gbXVzdCBiZSBhbiBIVFRQUyBvcmlnaW4nKVxuXG4gICAgZGVmIHdvcmtlcl9pZChzZWxmKTpcbiAgICAgICAgcmV0dXJuIHN0cihzZWxmLmlkZW50aXR5LmdldCgnd29ya2VyX2lkJykgb3Igc2VsZi5pZGVudGl0eVsnaWQnXSlcblxuICAgIGRlZiBwb3N0KHNlbGYsIHBhdGgsIHBheWxvYWQpOlxuICAgICAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChzZWxmLm9yaWdpbiArICcvYXBpL3YxLycgKyBwYXRoLFxuICAgICAgICAgICAgICAgICAgICBkYXRhPWpzb24uZHVtcHMocGF5bG9hZCkuZW5jb2RlKCksIGhlYWRlcnM9eydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgc2VsZi5pZGVudGl0eVsndG9rZW4nXSxcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBCUk9XU0VSX1VBLFxuICAgICAgICAgICAgICAgICAgICAnbmdyb2stc2tpcC1icm93c2VyLXdhcm5pbmcnOiAnMSd9LCBtZXRob2Q9J1BPU1QnKVxuICAgICAgICB3aXRoIFBPU1RfTE9DSzpcbiAgICAgICAgICAgIHdpdGggSFRUUC5vcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MTUpIGFzIHJlc3BvbnNlOlxuICAgICAgICAgICAgICAgIGJvZHkgPSByZXNwb25zZS5yZWFkKDY1NTM3KVxuICAgICAgICAgICAgICAgIGlmIGxlbihib2R5KSA+IDY1NTM2OlxuICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb250cm9sIHJlc3BvbnNlIHRvbyBsYXJnZScpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMoYm9keSlcblxuXG5NQVhfVEFTS1MgPSAzMlxuXG5cbmRlZiBzbG90X2NvdW50KGNvbmZpZyk6XG4gICAgcmV0dXJuIG1heChpbnQoKGNvbmZpZyBvciB7fSkuZ2V0KCdzbG90cycpIG9yIDEpLCAxKVxuXG5cbmRlZiBqb2JfY29uZmlnKGNvbmZpZywgdGFzaz1Ob25lKTpcbiAgICB0YXNrID0gdGFzayBvciB7fVxuICAgIG1lbW9yeSA9IGludCh0YXNrLmdldCgnbWVtb3J5X21iJykgb3IgMClcbiAgICBjcHVzID0gZmxvYXQodGFzay5nZXQoJ2NwdXMnKSBvciAwKVxuICAgIHNjcmF0Y2ggPSBpbnQodGFzay5nZXQoJ3NjcmF0Y2hfbWInKSBvciAwKVxuICAgIGlmIG1lbW9yeSBhbmQgY3B1czpcbiAgICAgICAgbGltaXRzID0gZGljdChjb25maWcsIG1lbW9yeV9tYj1tZW1vcnksIGNwdXM9Y3B1cylcbiAgICAgICAgaWYgc2NyYXRjaDpcbiAgICAgICAgICAgIGxpbWl0c1snc2NyYXRjaF9tYiddID0gc2NyYXRjaFxuICAgICAgICByZXR1cm4gbGltaXRzXG4gICAgc2xvdHMgPSBzbG90X2NvdW50KGNvbmZpZylcbiAgICByZXR1cm4gZGljdChjb25maWcsIG1lbW9yeV9tYj1tYXgoaW50KGNvbmZpZ1snbWVtb3J5X21iJ10pIC8vIHNsb3RzLCA1MTIpLFxuICAgICAgICAgICAgICAgIHNjcmF0Y2hfbWI9bWF4KGludChjb25maWdbJ3NjcmF0Y2hfbWInXSkgLy8gc2xvdHMsIDI1NiksXG4gICAgICAgICAgICAgICAgY3B1cz1tYXgocm91bmQoZmxvYXQoY29uZmlnWydjcHVzJ10pIC8gc2xvdHMsIDIpLCAwLjI1KSlcblxuXG5kZWYgZHJvcF90YXNrKHRhc2spOlxuICAgIFRBU0tTWzpdID0gW2l0ZW0gZm9yIGl0ZW0gaW4gVEFTS1MgaWYgaXRlbS5nZXQoJ2lkJykgIT0gdGFzay5nZXQoJ2lkJykgb3IgaXRlbS5nZXQoJ2F0dGVtcHQnKSAhPSB0YXNrLmdldCgnYXR0ZW1wdCcpXVxuICAgIExPU1QucG9wKCh0YXNrLmdldCgnaWQnKSwgdGFzay5nZXQoJ2F0dGVtcHQnKSksIE5vbmUpXG4gICAgUkVORVdFRC5wb3AoKHRhc2suZ2V0KCdpZCcpLCB0YXNrLmdldCgnYXR0ZW1wdCcpKSwgTm9uZSlcblxuXG5kZWYgbGVhc2VfbG9zdCh0YXNrKTpcbiAgICBcIlwiXCJUaGUgcGxhdGZvcm0gc2FpZCBzbywgb3IgaGFzIG5vdCBjb25maXJtZWQgdGhlIGxlYXNlIGZvciBuZWFybHkgYSBsZWFzZSBsZW5ndGg6XG4gICAgd2l0aCBDb21wdXRlIHVucmVhY2hhYmxlLCBpdCBtYXkgYWxyZWFkeSBoYXZlIGdpdmVuIHRoZSBqb2IgdG8gc29tZW9uZSBlbHNlLlwiXCJcIlxuICAgIGtleSA9ICh0YXNrLmdldCgnaWQnKSwgdGFzay5nZXQoJ2F0dGVtcHQnKSlcbiAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgIHJlbmV3ZWQgPSBSRU5FV0VELmdldChrZXkpXG4gICAgICAgIHJldHVybiBrZXkgaW4gTE9TVCBvciAocmVuZXdlZCBpcyBub3QgTm9uZSBhbmQgdGltZS5tb25vdG9uaWMoKSAtIHJlbmV3ZWQgPiBMRUFTRV9HUkFDRSlcblxuXG5kZWYgaGVhcnRiZWF0KGFwaSk6XG4gICAgd2l0aCBTVEFURV9MT0NLOlxuICAgICAgICByZXBvcnQgPSBkaWN0KFJFUE9SVClcbiAgICAgICAgdGFza3MgPSBbeydpZCc6IGl0ZW1bJ2lkJ10sICdhdHRlbXB0JzogaXRlbVsnYXR0ZW1wdCddfSBmb3IgaXRlbSBpbiBUQVNLU11cbiAgICAgICAgbG9ncyA9IGxpc3QoTE9HUylcbiAgICBpZiB0YXNrczpcbiAgICAgICAgcmVwb3J0Wyd0YXNrcyddID0gdGFza3NcbiAgICAgICAgcmVwb3J0LnVwZGF0ZSh0YXNrX2lkPXRhc2tzWzBdWydpZCddLCBhdHRlbXB0PXRhc2tzWzBdWydhdHRlbXB0J10pXG4gICAgcmVwb3J0Wyd0ZWxlbWV0cnknXSA9IHRlbGVtZXRyeSgpXG4gICAgcmVwb3J0Wydob3N0X2FjdGl2aXR5J10gPSBob3N0X2FjdGl2aXR5KClcbiAgICBpZiBIT1NULmdldCgnaGFyZHdhcmVfbW9kZWwnKTpcbiAgICAgICAgaGFyZHdhcmUgPSBkaWN0KHJlcG9ydC5nZXQoJ2hhcmR3YXJlJykgb3Ige30pXG4gICAgICAgIGhhcmR3YXJlWydtYW51ZmFjdHVyZXInXSA9IEhPU1QuZ2V0KCdtYW51ZmFjdHVyZXInKSBvciBoYXJkd2FyZS5nZXQoJ21hbnVmYWN0dXJlcicpIG9yICdBcHBsZSdcbiAgICAgICAgaGFyZHdhcmVbJ2hhcmR3YXJlX21vZGVsJ10gPSBIT1NUWydoYXJkd2FyZV9tb2RlbCddXG4gICAgICAgIHJlcG9ydFsnaGFyZHdhcmUnXSA9IGhhcmR3YXJlXG4gICAgcmVwb3J0Wydsb2dzJ10gPSBsb2dzXG4gICAgc2VudF9hdCA9IHRpbWUubW9ub3RvbmljKClcbiAgICByZXNwb25zZSA9IGFwaS5wb3N0KCd3b3JrZXJzLycgKyBhcGkud29ya2VyX2lkKCkgKyAnL2hlYXJ0YmVhdCcsIHJlcG9ydClcbiAgICByZXBvcnRlZCA9IHsoaXRlbVsnaWQnXSwgaXRlbVsnYXR0ZW1wdCddKSBmb3IgaXRlbSBpbiB0YXNrc31cbiAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgIENPTlRST0wuY2xlYXIoKVxuICAgICAgICBDT05UUk9MLnVwZGF0ZShyZXNwb25zZSlcbiAgICAgICAgcnVubmluZyA9IHsoaXRlbS5nZXQoJ2lkJyksIGl0ZW0uZ2V0KCdhdHRlbXB0JykpOiBpdGVtIGZvciBpdGVtIGluIFRBU0tTfVxuICAgICAgICBsaXN0ZWQgPSB7KGl0ZW0uZ2V0KCdpZCcpLCBpdGVtLmdldCgnYXR0ZW1wdCcpKSBmb3IgaXRlbSBpbiByZXNwb25zZS5nZXQoJ2xvc3RfdGFza3MnKSBvciBbXX1cbiAgICAgICAgbG9zdCA9IFtydW5uaW5nW2tleV0gZm9yIGtleSBpbiBsaXN0ZWQgJiBydW5uaW5nLmtleXMoKV1cbiAgICAgICAgZm9yIGtleSBpbiBsaXN0ZWQgJiBydW5uaW5nLmtleXMoKTpcbiAgICAgICAgICAgIExPU1Rba2V5XSA9IFRydWVcbiAgICAgICAgIyBDb21wdXRlIHJlbmV3ZWQgZXZlcnkgYXR0ZW1wdCB0aGlzIGhlYXJ0YmVhdCByZXBvcnRlZCBhbmQgZGlkIG5vdCBsaXN0IGFzIGxvc3QuXG4gICAgICAgIGZvciBrZXkgaW4gKHJlcG9ydGVkICYgcnVubmluZy5rZXlzKCkpIC0gTE9TVC5rZXlzKCk6XG4gICAgICAgICAgICBSRU5FV0VEW2tleV0gPSBzZW50X2F0XG4gICAgIyBTdG9wIHRoZSB3b3JrIHRvbywgbm90IGp1c3QgaXRzIHVwbG9hZDogdGhlIHNsb3QgYW5kIGl0cyBtZW1vcnkgZ28gdG8gb3RoZXIgam9icy5cbiAgICBmb3IgdGFzayBpbiBsb3N0OlxuICAgICAgICBxdWlldGx5KFsnZG9ja2VyJywgJ2tpbGwnLCBjb250YWluZXJfbmFtZSh0YXNrKV0sIDEwKVxuICAgIHJldHVybiByZXNwb25zZVxuXG5cbmRlZiBoZWFydGJlYXRfbG9vcChhcGkpOlxuICAgIGludmVudG9yeV9hdCA9IHRpbWUubW9ub3RvbmljKClcbiAgICB3aGlsZSBub3QgU1RPUC53YWl0KDE1KTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgaWYgdGltZS5tb25vdG9uaWMoKSAtIGludmVudG9yeV9hdCA+PSAzMDA6XG4gICAgICAgICAgICAgICAgaGFyZHdhcmUgPSBpbnZlbnRvcnkoKVxuICAgICAgICAgICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgICAgICAgICAgUkVQT1JUWydoYXJkd2FyZSddID0gaGFyZHdhcmVcbiAgICAgICAgICAgICAgICBpbnZlbnRvcnlfYXQgPSB0aW1lLm1vbm90b25pYygpXG4gICAgICAgICAgICBoZWFydGJlYXQoYXBpKVxuICAgICAgICBleGNlcHQgRXhjZXB0aW9uOlxuICAgICAgICAgICAgIyBObyB0YXNrIHBheWxvYWRzLCBVUkxzIG9yIGV4Y2VwdGlvbiBtZXNzYWdlcyBlbnRlciBwZXJzaXN0ZW50IGxvZ3MuXG4gICAgICAgICAgICBub3RlKCdXb3JrZXIgaGVhcnRiZWF0IHVuYXZhaWxhYmxlJylcblxuXG4jIHVybGxpYiB3cmFwcyBUTFMgcmVzZXRzIGFzIFVSTEVycm9yOyBTU0xDZXJ0VmVyaWZpY2F0aW9uRXJyb3IgaXMgU1NMRXJyb3IgYW5kIG11c3Qgbm90IHJldHJ5LlxuVFJBTlNJRU5UX0hUVFAgPSAoQ29ubmVjdGlvblJlc2V0RXJyb3IsIEJyb2tlblBpcGVFcnJvciwgQ29ubmVjdGlvbkVycm9yLCBUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgICBodHRwLmNsaWVudC5JbmNvbXBsZXRlUmVhZCwgaHR0cC5jbGllbnQuUmVtb3RlRGlzY29ubmVjdGVkLCBzc2wuU1NMRXJyb3IpXG5TRVRVUF9TRUNPTkRTID0gMjEwXG4jIEJ1cnN0IFBVVHMgb24gV2ktRmkgZmFpbCBUTFMgTUFDIGNoZWNrcyBhdCBDbG91ZGZsYXJlLiBFdGhlcm5ldCBpcyBsZWZ0IHVuY2FwcGVkLlxuREVGQVVMVF9VUExPQURfQlBTID0gMiAqIDEwMjQgKiAxMDI0XG5cblxuZGVmIGNvbW1hbmRfb3V0cHV0KGFyZ3MpOlxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MucnVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9NSwgY2hlY2s9RmFsc2UpLnN0ZG91dC5kZWNvZGUoZXJyb3JzPSdyZXBsYWNlJylcbiAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKTpcbiAgICAgICAgcmV0dXJuICcnXG5cblxuZGVmIHBhcnNlX3JvdXRlX2ludGVyZmFjZSh0ZXh0KTpcbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKClcbiAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnaW50ZXJmYWNlOicpOlxuICAgICAgICAgICAgcmV0dXJuIHN0cmlwcGVkLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKSBvciBOb25lXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgcGFyc2Vfd2lmaV9kZXZpY2VzKHRleHQpOlxuICAgIGRldmljZXMgPSBzZXQoKVxuICAgIHBvcnQgPSAnJ1xuICAgIGZvciBsaW5lIGluIHRleHQuc3BsaXRsaW5lcygpOlxuICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0hhcmR3YXJlIFBvcnQ6Jyk6XG4gICAgICAgICAgICBwb3J0ID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkubG93ZXIoKVxuICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnRGV2aWNlOicpIGFuZCBwb3J0OlxuICAgICAgICAgICAgaWYgJ3dpLWZpJyBpbiBwb3J0IG9yIHBvcnQgaW4gKCd3aWZpJywgJ2FpcnBvcnQnLCAnd2xhbicpOlxuICAgICAgICAgICAgICAgIGRldmljZXMuYWRkKGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpKVxuICAgICAgICAgICAgcG9ydCA9ICcnXG4gICAgcmV0dXJuIGRldmljZXNcblxuXG5kZWYgcGFyc2VfaXBfZGVmYXVsdF9kZXYodGV4dCk6XG4gICAgYmVzdCA9IE5vbmVcbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KClcbiAgICAgICAgaWYgbm90IHBhcnRzIG9yIHBhcnRzWzBdICE9ICdkZWZhdWx0JyBvciAnZGV2JyBub3QgaW4gcGFydHM6XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBpZmFjZSA9IHBhcnRzW3BhcnRzLmluZGV4KCdkZXYnKSArIDFdXG4gICAgICAgIGlmIG5vdCBpZmFjZTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIG1ldHJpYyA9IGludChwYXJ0c1twYXJ0cy5pbmRleCgnbWV0cmljJykgKyAxXSlcbiAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yKTpcbiAgICAgICAgICAgIG1ldHJpYyA9IDBcbiAgICAgICAgaWYgYmVzdCBpcyBOb25lIG9yIG1ldHJpYyA8IGJlc3RbMF06XG4gICAgICAgICAgICBiZXN0ID0gKG1ldHJpYywgaWZhY2UpXG4gICAgcmV0dXJuIE5vbmUgaWYgYmVzdCBpcyBOb25lIGVsc2UgYmVzdFsxXVxuXG5cbmRlZiB3aWZpX2RlZmF1bHRfcm91dGUoKTpcbiAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6XG4gICAgICAgIGlmYWNlID0gcGFyc2Vfcm91dGVfaW50ZXJmYWNlKGNvbW1hbmRfb3V0cHV0KFsnL3NiaW4vcm91dGUnLCAnLW4nLCAnZ2V0JywgJ2RlZmF1bHQnXSkpXG4gICAgICAgIHJldHVybiBib29sKGlmYWNlKSBhbmQgaWZhY2UgaW4gcGFyc2Vfd2lmaV9kZXZpY2VzKGNvbW1hbmRfb3V0cHV0KFsnL3Vzci9zYmluL25ldHdvcmtzZXR1cCcsICctbGlzdGFsbGhhcmR3YXJlcG9ydHMnXSkpXG4gICAgdGV4dCA9IGNvbW1hbmRfb3V0cHV0KFsnaXAnLCAnLTQnLCAnLW8nLCAncm91dGUnLCAnc2hvdycsICdkZWZhdWx0J10pIG9yIGNvbW1hbmRfb3V0cHV0KFsnaXAnLCAnLW8nLCAncm91dGUnLCAnc2hvdycsICdkZWZhdWx0J10pXG4gICAgaWZhY2UgPSBwYXJzZV9pcF9kZWZhdWx0X2Rldih0ZXh0KVxuICAgIHJldHVybiBib29sKGlmYWNlKSBhbmQgUGF0aCgnL3N5cy9jbGFzcy9uZXQvJXMvd2lyZWxlc3MnICUgaWZhY2UpLmlzX2RpcigpXG5cblxuZGVmIHVwbG9hZF9icHMoZW52aXJvbj1Ob25lLCB3aWZpPU5vbmUpOlxuICAgIGVudmlyb24gPSBvcy5lbnZpcm9uIGlmIGVudmlyb24gaXMgTm9uZSBlbHNlIGVudmlyb25cbiAgICBpZiAnREdFX1NUT1JBR0VfVVBMT0FEX0JQUycgaW4gZW52aXJvbjpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgdmFsdWUgPSBpbnQoc3RyKGVudmlyb24uZ2V0KCdER0VfU1RPUkFHRV9VUExPQURfQlBTJykpLnN0cmlwKCkpXG4gICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnJvcjpcbiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0RHRV9TVE9SQUdFX1VQTE9BRF9CUFMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJykgZnJvbSBlcnJvclxuICAgICAgICBpZiB2YWx1ZSA8IDA6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdER0VfU1RPUkFHRV9VUExPQURfQlBTIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgIGlmIHdpZmkgaWYgd2lmaSBpcyBub3QgTm9uZSBlbHNlIHdpZmlfZGVmYXVsdF9yb3V0ZSgpOlxuICAgICAgICByZXR1cm4gREVGQVVMVF9VUExPQURfQlBTXG4gICAgcmV0dXJuIDBcblxuXG5kZWYgc2VuZF9ib2R5KGNvbm5lY3Rpb24sIHNvdXJjZSwgZGVhZGxpbmUsIHNsZWVwPXRpbWUuc2xlZXAsIGNsb2NrPXRpbWUubW9ub3RvbmljLCBsb3N0PWxhbWJkYTogRmFsc2UpOlxuICAgIGJwcyA9IHVwbG9hZF9icHMoKVxuICAgIGNodW5rX3NpemUgPSA2NTUzNiBpZiBicHMgZWxzZSAxMDI0ICogMTAyNFxuICAgIHN0YXJ0ZWQgPSBjbG9jaygpXG4gICAgc2VudCA9IDBcbiAgICB3aXRoIHNvdXJjZS5vcGVuKCdyYicpIGFzIGZpbGU6XG4gICAgICAgIHdoaWxlIGNodW5rIDo9IGZpbGUucmVhZChjaHVua19zaXplKTpcbiAgICAgICAgICAgIGlmIGNsb2NrKCkgPiBkZWFkbGluZTpcbiAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IoJ1Rhc2sgZGVhZGxpbmUgZXhjZWVkZWQnKVxuICAgICAgICAgICAgaWYgbG9zdCgpOlxuICAgICAgICAgICAgICAgIHJhaXNlIExlYXNlTG9zdCgndXBsb2FkJylcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZChjaHVuaylcbiAgICAgICAgICAgIHNlbnQgKz0gbGVuKGNodW5rKVxuICAgICAgICAgICAgaWYgbm90IGJwczpcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgd2FpdCA9IHN0YXJ0ZWQgKyAoc2VudCAvIGJwcykgLSBjbG9jaygpXG4gICAgICAgICAgICBpZiB3YWl0ID4gMDpcbiAgICAgICAgICAgICAgICBzbGVlcCh3YWl0KVxuXG5cbmRlZiBkZXNjcmliZV9zdG9wKGVycm9yKTpcbiAgICBcIlwiXCJXaHkgdGhlIGFnZW50IGV4aXRlZCwgd2l0aCB0aGUgc3RhdHVzLCBwYXRoIGFuZCBzZXJ2ZXIgbWVzc2FnZSBvZiBhIHJlZnVzZWQgcmVxdWVzdC5cIlwiXCJcbiAgICBpbm5lciA9IHVud3JhcF9odHRwKGVycm9yKVxuICAgIGlmIG5vdCBpc2luc3RhbmNlKGlubmVyLCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKTpcbiAgICAgICAgcmV0dXJuIHR5cGUoZXJyb3IpLl9fbmFtZV9fXG4gICAgdHJ5OlxuICAgICAgICBib2R5ID0gaW5uZXIucmVhZCgyMDApLmRlY29kZShlcnJvcnM9J3JlcGxhY2UnKSBpZiBpbm5lci5mcCBlbHNlICcnXG4gICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgYm9keSA9ICcnXG4gICAgcGF0aCA9IHVybGxpYi5wYXJzZS51cmxzcGxpdChpbm5lci5maWxlbmFtZSBvciAnJykucGF0aFxuICAgIHJldHVybiAnICcuam9pbigoJ0hUVFBFcnJvciAnICsgc3RyKGlubmVyLmNvZGUpICsgJyAnICsgcGF0aCArICcgJyArIGJvZHkpLnNwbGl0KCkpXG5cblxuZGVmIHVud3JhcF9odHRwKGVycm9yKTpcbiAgICBpZiBpc2luc3RhbmNlKGVycm9yLCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKTpcbiAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgaWYgaXNpbnN0YW5jZShlcnJvciwgdXJsbGliLmVycm9yLlVSTEVycm9yKSBhbmQgZXJyb3IucmVhc29uIGlzIG5vdCBOb25lOlxuICAgICAgICByZXR1cm4gdW53cmFwX2h0dHAoZXJyb3IucmVhc29uKVxuICAgIHJldHVybiBlcnJvclxuXG5cbmRlZiB0cmFuc2llbnRfaHR0cChkZWFkbGluZSwgd29yaywgcGF1c2U9dGltZS5zbGVlcCk6XG4gICAgZXJyb3IgPSBOb25lXG4gICAgZm9yIGF0dGVtcHQgaW4gcmFuZ2UoMyk6XG4gICAgICAgIGlmIHRpbWUubW9ub3RvbmljKCkgPiBkZWFkbGluZTpcbiAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFcnJvcignVGFzayBkZWFkbGluZSBleGNlZWRlZCcpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHJldHVybiB3b3JrKClcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBjYXVnaHQ6XG4gICAgICAgICAgICByZWFzb24gPSB1bndyYXBfaHR0cChjYXVnaHQpXG4gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlYXNvbiwgc3NsLlNTTENlcnRWZXJpZmljYXRpb25FcnJvcikgb3Igbm90IGlzaW5zdGFuY2UocmVhc29uLCBUUkFOU0lFTlRfSFRUUCk6XG4gICAgICAgICAgICAgICAgcmFpc2VcbiAgICAgICAgICAgIGlmIHRpbWUubW9ub3RvbmljKCkgPiBkZWFkbGluZSBvciBzdHIocmVhc29uKSA9PSAnVGFzayBkZWFkbGluZSBleGNlZWRlZCc6XG4gICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEVycm9yKCdUYXNrIGRlYWRsaW5lIGV4Y2VlZGVkJykgZnJvbSBjYXVnaHRcbiAgICAgICAgICAgIGVycm9yID0gY2F1Z2h0XG4gICAgICAgICAgICBwYXVzZShtaW4oMiAqKiBhdHRlbXB0LCA0KSlcbiAgICByYWlzZSBlcnJvclxuXG5cbmRlZiBkb3dubG9hZCh1cmwsIHRhcmdldCwgc2l6ZSwgY2hlY2tzdW0sIGRlYWRsaW5lKTpcbiAgICBpZiB1cmxsaWIucGFyc2UudXJsc3BsaXQodXJsKS5zY2hlbWUgIT0gJ2h0dHBzJzpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3RvcmFnZSByZXF1aXJlcyBIVFRQUycpXG4gICAgbGltaXQgPSBzaXplIGlmIHNpemUgaXMgbm90IE5vbmUgZWxzZSA1MCAqIDEwMjQgKiAxMDI0XG5cbiAgICBkZWYgcHVsbCgpOlxuICAgICAgICBkaWdlc3QgPSBoYXNobGliLm1kNSgpXG4gICAgICAgIHRvdGFsID0gMFxuICAgICAgICB3aXRoIHN0b3JhZ2VfZ2V0KHVybCkgYXMgcmVzcG9uc2UsIHRhcmdldC5vcGVuKCd3YicpIGFzIG91dHB1dDpcbiAgICAgICAgICAgIHdoaWxlIGNodW5rIDo9IHJlc3BvbnNlLnJlYWQoMTAyNCAqIDEwMjQpOlxuICAgICAgICAgICAgICAgIGlmIHRpbWUubW9ub3RvbmljKCkgPiBkZWFkbGluZTpcbiAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEVycm9yKCdUYXNrIGRlYWRsaW5lIGV4Y2VlZGVkJylcbiAgICAgICAgICAgICAgICB0b3RhbCArPSBsZW4oY2h1bmspXG4gICAgICAgICAgICAgICAgaWYgdG90YWwgPiBsaW1pdDpcbiAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5wdXQgZXhjZWVkcyBkZWNsYXJlZCBzaXplJylcbiAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoY2h1bmspXG4gICAgICAgICAgICAgICAgZGlnZXN0LnVwZGF0ZShjaHVuaylcbiAgICAgICAgZW5jb2RlZCA9IGJhc2U2NC5iNjRlbmNvZGUoZGlnZXN0LmRpZ2VzdCgpKS5kZWNvZGUoKVxuICAgICAgICBpZiBzaXplIGlzIG5vdCBOb25lIGFuZCB0b3RhbCAhPSBzaXplOlxuICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5wdXQgY2hlY2tzdW0gbWlzbWF0Y2gnKVxuICAgICAgICBpZiBjaGVja3N1bSBhbmQgZW5jb2RlZCAhPSBjaGVja3N1bTpcbiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lucHV0IGNoZWNrc3VtIG1pc21hdGNoJylcblxuICAgIHRyYW5zaWVudF9odHRwKGRlYWRsaW5lLCBwdWxsKVxuXG5cbmRlZiB2ZXJpZnlfdGFza19zaWduYXR1cmUoYXBpLCB0YXNrKTpcbiAgICBrZXlzID0gKCdpZCcsICdhdHRlbXB0JywgJ29wZXJhdGlvbicsICdidW5kbGVfZGlnZXN0JywgJ3J1bnRpbWVfYWJpJywgJ2J1bmRsZV9zaXplJywgJ2J1bmRsZV9jaGVja3N1bScpXG4gICAgbWFuaWZlc3QgPSB7a2V5OiB0YXNrW2tleV0gZm9yIGtleSBpbiBrZXlzfVxuICAgIGVuY29kZWQgPSBqc29uLmR1bXBzKG1hbmlmZXN0LCBzb3J0X2tleXM9VHJ1ZSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKS5lbmNvZGUoKVxuICAgIGtleSA9IGhhc2hsaWIuc2hhMjU2KGFwaS5pZGVudGl0eVsndG9rZW4nXS5lbmNvZGUoKSkuZGlnZXN0KClcbiAgICBleHBlY3RlZCA9IGhtYWMubmV3KGtleSwgZW5jb2RlZCwgaGFzaGxpYi5zaGEyNTYpLmhleGRpZ2VzdCgpXG4gICAgaWYgbm90IGhtYWMuY29tcGFyZV9kaWdlc3QoZXhwZWN0ZWQsIHRhc2tbJ2J1bmRsZV9zaWduYXR1cmUnXSk6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdGFzayBidW5kbGUgc2lnbmF0dXJlJylcblxuXG5kZWYgZXh0cmFjdF9idW5kbGUoYXJjaGl2ZSwgdGFyZ2V0LCB0YXNrKTpcbiAgICBpZiBoYXNobGliLnNoYTI1NihhcmNoaXZlLnJlYWRfYnl0ZXMoKSkuaGV4ZGlnZXN0KCkgIT0gdGFza1snYnVuZGxlX2RpZ2VzdCddOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUYXNrIGJ1bmRsZSBkaWdlc3QgbWlzbWF0Y2gnKVxuICAgIHRhcmdldC5ta2Rpcihtb2RlPTBvNzU1KVxuICAgIHdpdGggdGFyZmlsZS5vcGVuKGFyY2hpdmUsICdyOmd6JykgYXMgYnVuZGxlOlxuICAgICAgICBtZW1iZXJzID0gYnVuZGxlLmdldG1lbWJlcnMoKVxuICAgICAgICBpZiBsZW4obWVtYmVycykgPiA2NCBvciBhbnkobm90IG1lbWJlci5pc2ZpbGUoKSBmb3IgbWVtYmVyIGluIG1lbWJlcnMpOlxuICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCB0YXNrIGJ1bmRsZSBlbnRyaWVzJylcbiAgICAgICAgdG90YWwgPSBzdW0obWVtYmVyLnNpemUgZm9yIG1lbWJlciBpbiBtZW1iZXJzKVxuICAgICAgICBpZiB0b3RhbCA+IDEwICogMTAyNCAqIDEwMjQ6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUYXNrIGJ1bmRsZSBpcyB0b28gbGFyZ2UnKVxuICAgICAgICBmb3IgbWVtYmVyIGluIG1lbWJlcnM6XG4gICAgICAgICAgICBwYXJ0cyA9IFBhdGgobWVtYmVyLm5hbWUpLnBhcnRzXG4gICAgICAgICAgICBpZiBub3QgcGFydHMgb3IgbWVtYmVyLm5hbWUuc3RhcnRzd2l0aCgnLycpIG9yICcuLicgaW4gcGFydHMgb3IgJ1xcXFwnIGluIG1lbWJlci5uYW1lOlxuICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Vuc2FmZSB0YXNrIGJ1bmRsZSBwYXRoJylcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gdGFyZ2V0LmpvaW5wYXRoKCpwYXJ0cylcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnBhcmVudC5ta2Rpcihtb2RlPTBvNzU1LCBwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgICAgICAgICB3aXRoIGJ1bmRsZS5leHRyYWN0ZmlsZShtZW1iZXIpIGFzIHNvdXJjZSwgZGVzdGluYXRpb24ub3Blbignd2InKSBhcyBvdXRwdXQ6XG4gICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKHNvdXJjZSwgb3V0cHV0KVxuICAgICAgICAgICAgZGVzdGluYXRpb24uY2htb2QoMG80NDQpXG4gICAgIyBTZXJ2aWNlIFVNYXNrPTAwNzcgd291bGQga2VlcCBta2RpciAwNzU1IGFzIDA3MDAuIFRhc2sgY29udGFpbmVycyBhcmUgdWlkIDEwMDAxLlxuICAgIGZvciBwYXRoIGluIFt0YXJnZXQsICp0YXJnZXQucmdsb2IoJyonKV06XG4gICAgICAgIHBhdGguY2htb2QoMG83NTUgaWYgcGF0aC5pc19kaXIoKSBlbHNlIDBvNDQ0KVxuICAgIG1hbmlmZXN0ID0gcmVhZF9qc29uKHRhcmdldCAvICd0YXNrLWJ1bmRsZS5qc29uJywge30pXG4gICAgaWYgbWFuaWZlc3QuZ2V0KCdvcGVyYXRpb24nKSAhPSB0YXNrWydvcGVyYXRpb24nXSBvciBtYW5pZmVzdC5nZXQoJ3J1bnRpbWVfYWJpJykgIT0gdGFza1sncnVudGltZV9hYmknXTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGFzayBidW5kbGUgbWFuaWZlc3QgbWlzbWF0Y2gnKVxuXG5cbmRlZiB1cGxvYWQodXJsLCBoZWFkZXJzLCBzb3VyY2UsIGRlYWRsaW5lLCBsb3N0PWxhbWJkYTogRmFsc2UpOlxuICAgIHVyaSA9IHVybGxpYi5wYXJzZS51cmxzcGxpdCh1cmwpXG4gICAgaWYgdXJpLnNjaGVtZSAhPSAnaHR0cHMnIG9yIHVyaS51c2VybmFtZTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3RvcmFnZSByZXF1aXJlcyBIVFRQUycpXG5cbiAgICBkZWYgcHVzaCgpOlxuICAgICAgICBjb25uZWN0aW9uLCBwYXRoID0gc3RvcmFnZV9wdXRfY29ubmVjdGlvbih1cmwpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0cmVxdWVzdCgnUFVUJywgcGF0aClcbiAgICAgICAgICAgIGlmIHN0b3JhZ2VfcHJveHlfZm9yKHVybCk6XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoJ1gtREdFLVRhcmdldCcsIHVybClcbiAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGhlYWRlcnMuaXRlbXMoKTpcbiAgICAgICAgICAgICAgICBpZiBrZXkubG93ZXIoKSBub3QgaW4gKCdjb250ZW50LWxlbmd0aCcsICdob3N0Jyk6XG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKGtleSwgdmFsdWUpXG4gICAgICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcignQ29udGVudC1MZW5ndGgnLCBzdHIoc291cmNlLnN0YXQoKS5zdF9zaXplKSlcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uZW5kaGVhZGVycygpXG4gICAgICAgICAgICBzZW5kX2JvZHkoY29ubmVjdGlvbiwgc291cmNlLCBkZWFkbGluZSwgbG9zdD1sb3N0KVxuICAgICAgICAgICAgcmVzcG9uc2UgPSBjb25uZWN0aW9uLmdldHJlc3BvbnNlKClcbiAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1cyBpbiAoNTAyLCA1MDMsIDQyOSk6XG4gICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkVycm9yKCdTdG9yYWdlIGdhdGV3YXkgdW5hdmFpbGFibGUnKVxuICAgICAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzIG5vdCBpbiAoMjAwLCAyMDEsIDIwNCk6XG4gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignT3V0cHV0IHVwbG9hZCBmYWlsZWQnKVxuICAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpXG5cbiAgICB0cmFuc2llbnRfaHR0cChkZWFkbGluZSwgcHVzaClcblxuXG5kZWYgcHVibGljX3dlYl9lbmFibGVkKCk6XG4gICAgcmV0dXJuIG9zLmVudmlyb24uZ2V0KCdER0VfQUxMT1dfUFVCTElDX1dFQl9SRVFVRVNUUycpID09ICcxJ1xuXG5cbmRlZiBhbGxvd2VkX2NhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpOlxuICAgIHJldHVybiB7a2V5OiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBjYXBhYmlsaXRpZXMuaXRlbXMoKVxuICAgICAgICAgICAgaWYga2V5ICE9ICd3ZWJfZmV0Y2hfYmF0Y2gnIG9yIHB1YmxpY193ZWJfZW5hYmxlZCgpfVxuXG5cbmRlZiBkb2NrZXJfYXJncyhjb25maWcsIG9wZXJhdGlvbj1Ob25lLCBzbGljZV9uYW1lPSdjb21wdXRlLnNsaWNlJyk6XG4gICAgbmV0d29yayA9ICdub25lJ1xuICAgIGlmIG9wZXJhdGlvbiA9PSAnd2ViX2ZldGNoX2JhdGNoJzpcbiAgICAgICAgaWYgbm90IHB1YmxpY193ZWJfZW5hYmxlZCgpOlxuICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUHVibGljIHdlYiByZXF1ZXN0cyBhcmUgZGlzYWJsZWQgb24gdGhpcyB3b3JrZXInKVxuICAgICAgICBuZXR3b3JrID0gJ2JyaWRnZSdcbiAgICByZXR1cm4gWydkb2NrZXInLCAncnVuJywgJy0tcm0nLCAnLS1pbml0JywgJy0tbmV0d29yaz0nICsgbmV0d29yaywgJy0tcmVhZC1vbmx5JywgJy0tY2FwLWRyb3A9QUxMJyxcbiAgICAgICAgICAgICctLXNlY3VyaXR5LW9wdD1uby1uZXctcHJpdmlsZWdlcycsICctLXBpZHMtbGltaXQ9MTI4JywgJy0tdWxpbWl0PWNvcmU9MCcsXG4gICAgICAgICAgICAnLS1sb2ctZHJpdmVyPW5vbmUnLCAnLS1sYWJlbD1jb20uZGdlLnJvbGU9Y29tcHV0ZS10YXNrJywgJy0tY2dyb3VwLXBhcmVudD0nICsgc2xpY2VfbmFtZSxcbiAgICAgICAgICAgICctLW1lbW9yeT0nICsgc3RyKGNvbmZpZ1snbWVtb3J5X21iJ10pICsgJ20nLCAnLS1tZW1vcnktc3dhcD0nICsgc3RyKGNvbmZpZ1snbWVtb3J5X21iJ10pICsgJ20nLFxuICAgICAgICAgICAgJy0tY3B1cz0nICsgc3RyKGNvbmZpZ1snY3B1cyddKSwgJy0tdG1wZnM9L3RtcDpydyxub2V4ZWMsbm9zdWlkLHNpemU9MjU2bSddXG5cblxuY2xhc3MgTGVhc2VMb3N0KEV4Y2VwdGlvbik6XG4gICAgXCJcIlwiVGhlIHBsYXRmb3JtIGdhdmUgdGhpcyBhdHRlbXB0J3Mgam9iIGJhY2sgdG8gdGhlIHF1ZXVlIG9yIHRvIGFub3RoZXIgd29ya2VyLlxuXG4gICAgRXZlcnkgYXR0ZW1wdCBzaGFyZXMgdGhlIGNhbGxlcidzIHNpZ25lZCBvdXRwdXQgVVJMLCBzbyBhIGxvc3QgYXR0ZW1wdCBtdXN0IG5vdFxuICAgIHVwbG9hZCwgYW5kIGl0cyBmYWlsdXJlIGlzIG5vdCB0aGlzIHdvcmtlcidzIHRvIHJlcG9ydC5cIlwiXCJcblxuXG4jIENvbXB1dGUncyBhbnN3ZXJzIHdoZW4gdGhpcyB3b3JrZXIgbm8gbG9uZ2VyIG93bnMgdGhlIGpvYiAoNDAxOiBpdHMgdG9rZW4gd2FzIHJldm9rZWQpLlxuIyBOb3QgNDA0OiBSYWlscyBhbnN3ZXJzIHRoYXQgZm9yIGEgZGVsZXRlZCBqb2IgYW5kIGEgd3JvbmcgcGF0aCBhbGlrZS5cbkxFQVNFX1JFRlVTRUQgPSAoNDAxLCA0MDkpXG4jIFN0b3AgdXBsb2FkaW5nIHdoZW4gdGhlIGxlYXNlIGhhcyBnb25lIHRoaXMgbG9uZyB1bmNvbmZpcm1lZCAoaXQgbGFzdHMgNjAgcykuXG5MRUFTRV9HUkFDRSA9IDUwXG5BVFRFTVBUX1NMSUNFUyA9IFBhdGgoJy9zeXMvZnMvY2dyb3VwL2NvbXB1dGUuc2xpY2UnKVxuRU1QVFlfTUVBU1VSRU1FTlQgPSBkaWN0KG1lbW9yeV9wZWFrX2J5dGVzPU5vbmUsIGNwdV91c2FnZV9tcz1Ob25lLCBvb209Tm9uZSlcblxuXG5kZWYgcmVmdXNlZChlcnJvcik6XG4gICAgcmVhc29uID0gdW53cmFwX2h0dHAoZXJyb3IpXG4gICAgcmV0dXJuIGlzaW5zdGFuY2UocmVhc29uLCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKSBhbmQgcmVhc29uLmNvZGUgaW4gTEVBU0VfUkVGVVNFRFxuXG5cbmRlZiBjb250YWluZXJfbmFtZSh0YXNrKTpcbiAgICByZXR1cm4gJ2RnZS10YXNrLScgKyBzdHIodGFza1snaWQnXSkgKyAnLScgKyB0YXNrWydhdHRlbXB0J11cblxuXG5kZWYgcG9zdF9hdHRlbXB0KGFwaSwgdGFzaywgYWN0aW9uLCBwYXlsb2FkPU5vbmUpOlxuICAgIFwiXCJcIkEgY2FsbCBhYm91dCB0aGlzIGF0dGVtcHQ7IGEgcmVmdXNhbCBtZWFucyBhbm90aGVyIHdvcmtlciBvciB0aGUgcXVldWUgaGFzIHRoZSBqb2IuXCJcIlwiXG4gICAgdHJ5OlxuICAgICAgICByZXR1cm4gYXBpLnBvc3QoJ2pvYnMvJyArIHN0cih0YXNrWydpZCddKSArICcvJyArIGFjdGlvbiwgZGljdChwYXlsb2FkIG9yIHt9LCBhdHRlbXB0PXRhc2tbJ2F0dGVtcHQnXSkpXG4gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgaWYgcmVmdXNlZChlcnJvcik6XG4gICAgICAgICAgICByYWlzZSBMZWFzZUxvc3QodGFza1snaWQnXSkgZnJvbSBlcnJvclxuICAgICAgICByYWlzZVxuXG5cbmRlZiBjb25maXJtX2xlYXNlKGFwaSwgdGFzaywgcGF1c2U9dGltZS5zbGVlcCk6XG4gICAgXCJcIlwiUmVuZXdzIHRoZSBsZWFzZSBqdXN0IGJlZm9yZSB1cGxvYWRpbmc7IHJldHVybnMgdGhlIHNlY29uZHMgbGVmdCBiZWZvcmUgdGhlXG4gICAgYXR0ZW1wdCdzIGRlYWRsaW5lLCBieSB0aGUgc2VydmVyJ3MgY2xvY2sgcmF0aGVyIHRoYW4gYSBndWVzdCBjbG9jayB0aGF0IGRyaWZ0cy5cIlwiXCJcbiAgICBmb3IgYXR0ZW1wdCBpbiByYW5nZSg0KTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgYm9keSA9IHBvc3RfYXR0ZW1wdChhcGksIHRhc2ssICdsZWFzZScpXG4gICAgICAgICAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgICAgICAgICAgUkVORVdFRFsodGFza1snaWQnXSwgdGFza1snYXR0ZW1wdCddKV0gPSB0aW1lLm1vbm90b25pYygpXG4gICAgICAgICAgICByZXR1cm4gaW50KGJvZHlbJ3NlY29uZHNfcmVtYWluaW5nJ10pXG4gICAgICAgIGV4Y2VwdCBMZWFzZUxvc3Q6XG4gICAgICAgICAgICByYWlzZVxuICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgaWYgYXR0ZW1wdCA9PSAzIG9yIG5vdCBpc2luc3RhbmNlKHVud3JhcF9odHRwKGVycm9yKSwgVFJBTlNJRU5UX0hUVFApOlxuICAgICAgICAgICAgICAgIHJhaXNlXG4gICAgICAgICAgICBwYXVzZSgyICoqIChhdHRlbXB0ICsgMSkpXG5cblxuZGVmIGF0dGVtcHRfc2xpY2UoYXR0ZW1wdCk6XG4gICAgIyBzeXN0ZW1kIG5lc3RzIGNvbXB1dGUtPHg+LnNsaWNlIHVuZGVyIGNvbXB1dGUuc2xpY2U7IGEgZGFzaCBpbnNpZGUgPHg+IHdvdWxkIG5lc3QgaXQgZGVlcGVyLlxuICAgIHJldHVybiAnY29tcHV0ZS1kZ2VhdHRlbXB0JyArIHJlLnN1YihyJ1teMC05YS1mXScsICcnLCBzdHIoYXR0ZW1wdCkpICsgJy5zbGljZSdcblxuXG5kZWYgY2dyb3VwX2ZpZWxkcyhwYXRoKTpcbiAgICB0cnk6XG4gICAgICAgIGxpbmVzID0gcGF0aC5yZWFkX3RleHQoKS5zcGxpdGxpbmVzKClcbiAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOlxuICAgICAgICByZXR1cm4ge31cbiAgICByZXR1cm4ge25hbWU6IGludCh2YWx1ZSkgZm9yIG5hbWUsIHZhbHVlIGluIChsaW5lLnNwbGl0KClbOjJdIGZvciBsaW5lIGluIGxpbmVzIGlmIGxlbihsaW5lLnNwbGl0KCkpID49IDIpXG4gICAgICAgICAgICBpZiB2YWx1ZS5pc2RpZ2l0KCl9XG5cblxuZGVmIGNncm91cF9sb2NhbF9ldmVudHMobW91bnRpbmZvKTpcbiAgICBcIlwiXCJtZW1vcnlfbG9jYWxldmVudHMgbWFrZXMgYSBzbGljZSdzIG1lbW9yeS5ldmVudHMgY291bnQgb25seSBpdHMgb3duIGNncm91cCwgbmV2ZXIgaXRzIHRhc2tzLlwiXCJcIlxuICAgIHJldHVybiBhbnkoJyAtIGNncm91cDIgJyBpbiBsaW5lIGFuZCAnbWVtb3J5X2xvY2FsZXZlbnRzJyBpbiBsaW5lIGZvciBsaW5lIGluIChtb3VudGluZm8gb3IgJycpLnNwbGl0bGluZXMoKSlcblxuXG5kZWYgb29tX2tpbmQoZXZlbnRzKTpcbiAgICAjIG1lbW9yeS5ldmVudHMgaXMgaGllcmFyY2hpY2FsLiBgb29tYCBjb3VudHMgbGltaXRzIHJlYWNoZWQgaW5zaWRlIHRoZSBhdHRlbXB0J3Mgc2xpY2UsXG4gICAgIyBzbyB0aGUgdGFzayBoaXQgaXRzIG93biBsaW1pdDsgYG9vbV9raWxsYCBhbHNvIGNvdW50cyBraWxscyBjYXVzZWQgYnkgY29tcHV0ZS5zbGljZVxuICAgICMgKG9yIHdob2xlLWd1ZXN0KSBwcmVzc3VyZSwgd2hpY2ggbmV2ZXIgcmVhY2ggdGhlIGF0dGVtcHQncyBvd24gYG9vbWAuXG4gICAgaWYgZXZlbnRzLmdldCgnb29tJywgMCkgPiAwOlxuICAgICAgICByZXR1cm4gJ293bidcbiAgICBpZiBldmVudHMuZ2V0KCdvb21fa2lsbCcsIDApID4gMDpcbiAgICAgICAgcmV0dXJuICdob3N0J1xuICAgIHJldHVybiBOb25lXG5cblxuZGVmIG1lYXN1cmVfc2xpY2UocGF0aCwgbG9jYWxfZXZlbnRzPUZhbHNlKTpcbiAgICBcIlwiXCJXaGF0IGFuIGF0dGVtcHQncyBzbGljZSByZWNvcmRlZC4gQSB2YWx1ZSB0aGUga2VybmVsIGRvZXMgbm90IG9mZmVyIGlzIE5vbmUsIG5ldmVyIDA6XG4gICAgbWVtb3J5LnBlYWsgbmVlZHMgTGludXggNS4xOSwgd2hpY2ggb2xkZXIgV1NMIGFuZCBVYnVudHUgMjIuMDQgZ3Vlc3RzIGxhY2suXCJcIlwiXG4gICAgcGVhayA9IHJlYWRfdGV4dChwYXRoIC8gJ21lbW9yeS5wZWFrJylcbiAgICB1c2FnZSA9IGNncm91cF9maWVsZHMocGF0aCAvICdjcHUuc3RhdCcpLmdldCgndXNhZ2VfdXNlYycpXG4gICAgcmV0dXJuIGRpY3QobWVtb3J5X3BlYWtfYnl0ZXM9aW50KHBlYWspIGlmIHBlYWsgYW5kIHBlYWsuaXNkaWdpdCgpIGVsc2UgTm9uZSxcbiAgICAgICAgICAgICAgICBjcHVfdXNhZ2VfbXM9Tm9uZSBpZiB1c2FnZSBpcyBOb25lIGVsc2UgdXNhZ2UgLy8gMTAwMCxcbiAgICAgICAgICAgICAgICBvb209Tm9uZSBpZiBsb2NhbF9ldmVudHMgZWxzZSBvb21fa2luZChjZ3JvdXBfZmllbGRzKHBhdGggLyAnbWVtb3J5LmV2ZW50cycpKSlcblxuXG5kZWYgcXVpZXRseShhcmdzLCB0aW1lb3V0KTpcbiAgICB0cnk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsIHRpbWVvdXQ9dGltZW91dClcbiAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKTpcbiAgICAgICAgcGFzc1xuXG5cbmRlZiBmaW5pc2hfYXR0ZW1wdChjb250YWluZXIsIHNsaWNlX25hbWUsIG1lYXN1cmVkKTpcbiAgICBcIlwiXCJSZW1vdmVzIHRoZSBjb250YWluZXIsIHJlY29yZHMgd2hhdCBpdHMgc2xpY2Ugc2F3LCB0aGVuIHN0b3BzIHRoZSBzbGljZSwgd2hpY2ggb3V0bGl2ZXNcbiAgICB0aGUgY29udGFpbmVyIHNjb3BlLiBSdW5zIGluIGEgZmluYWxseSBibG9jaywgc28gbm90aGluZyBoZXJlIG1heSByYWlzZS5cIlwiXCJcbiAgICBxdWlldGx5KFsnZG9ja2VyJywgJ3JtJywgJy1mJywgY29udGFpbmVyXSwgNjApXG4gICAgbG9jYWxfZXZlbnRzID0gY2dyb3VwX2xvY2FsX2V2ZW50cyhyZWFkX3RleHQoJy9wcm9jL3NlbGYvbW91bnRpbmZvJykpXG4gICAgbWVhc3VyZWQudXBkYXRlKG1lYXN1cmVfc2xpY2UoQVRURU1QVF9TTElDRVMgLyBzbGljZV9uYW1lLCBsb2NhbF9ldmVudHMpKVxuICAgIHF1aWV0bHkoWydzeXN0ZW1jdGwnLCAnc3RvcCcsIHNsaWNlX25hbWVdLCAzMClcblxuXG5kZWYgc3RvcF9hdHRlbXB0X3NsaWNlcygpOlxuICAgIFwiXCJcIlNsaWNlcyBvZiBhdHRlbXB0cyB0aGF0IHJhbiBiZWZvcmUgYSBjcmFzaCBvciByZXN0YXJ0IHN0YXkgdW50aWwgc3RvcHBlZC5cIlwiXCJcbiAgICB1bml0cyA9IG9wdGlvbmFsX2NvbW1hbmQoWydzeXN0ZW1jdGwnLCAnbGlzdC11bml0cycsICctLXR5cGU9c2xpY2UnLCAnLS1hbGwnLCAnLS1wbGFpbicsICctLW5vLWxlZ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcHV0ZS1kZ2VhdHRlbXB0KiddKSBvciAnJ1xuICAgIGZvciB1bml0IGluIChsaW5lLnNwbGl0KClbMF0gZm9yIGxpbmUgaW4gdW5pdHMuc3BsaXRsaW5lcygpIGlmIGxpbmUuc3BsaXQoKSk6XG4gICAgICAgIG9wdGlvbmFsX2NvbW1hbmQoWydzeXN0ZW1jdGwnLCAnc3RvcCcsIHVuaXRdKVxuXG5cbmRlZiBmaXJzdF9pbnB1dCh0YXNrKTpcbiAgICBkZWNsYXJlZCA9ICh0YXNrLmdldCgnaW5wdXRzJykgb3IgW3t9XSlbMF1cbiAgICByZXR1cm4gKHRhc2suZ2V0KCdpbnB1dF91cmwnKSBvciBkZWNsYXJlZC5nZXQoJ3VybCcpLFxuICAgICAgICAgICAgdGFzay5nZXQoJ2lucHV0X3NpemUnKSBpZiAnaW5wdXRfc2l6ZScgaW4gdGFzayBlbHNlIGRlY2xhcmVkLmdldCgnc2l6ZV9ieXRlcycpLFxuICAgICAgICAgICAgdGFzay5nZXQoJ2lucHV0X2NoZWNrc3VtJykgaWYgJ2lucHV0X2NoZWNrc3VtJyBpbiB0YXNrIGVsc2UgZGVjbGFyZWQuZ2V0KCdjaGVja3N1bScpKVxuXG5cbmRlZiBmaXJzdF9vdXRwdXQodGFzayk6XG4gICAgZGVjbGFyZWQgPSAodGFzay5nZXQoJ291dHB1dHMnKSBvciBbe31dKVswXVxuICAgIGhlYWRlcnMgPSB0YXNrLmdldCgnb3V0cHV0X3VwbG9hZF9oZWFkZXJzJykgb3IgZGVjbGFyZWQuZ2V0KCdoZWFkZXJzJykgb3Ige31cbiAgICByZXR1cm4gKGRlY2xhcmVkLmdldCgnbmFtZScpIG9yICdvdXRwdXQnLFxuICAgICAgICAgICAgdGFzay5nZXQoJ291dHB1dF91cGxvYWRfdXJsJykgb3IgZGVjbGFyZWQuZ2V0KCd1cGxvYWRfdXJsJyksXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgZGVjbGFyZWQuZ2V0KCdtZWRpYV90eXBlJykgb3IgaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpIG9yICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKVxuXG5cbmRlZiBzaGEyNTZfZmlsZShwYXRoKTpcbiAgICBkaWdlc3QgPSBoYXNobGliLnNoYTI1NigpXG4gICAgd2l0aCBwYXRoLm9wZW4oJ3JiJykgYXMgc291cmNlOlxuICAgICAgICB3aGlsZSBjaHVuayA6PSBzb3VyY2UucmVhZCgxMDI0ICogMTAyNCk6XG4gICAgICAgICAgICBkaWdlc3QudXBkYXRlKGNodW5rKVxuICAgIHJldHVybiBkaWdlc3QuaGV4ZGlnZXN0KClcblxuXG5kZWYgZXhlY3V0ZShhcGksIHRhc2ssIGNvbmZpZywgbWVhc3VyZWQpOlxuICAgIHN0YXJ0ZWQgPSB0aW1lLm1vbm90b25pYygpXG4gICAgc2V0dXBfZGVhZGxpbmUgPSBzdGFydGVkICsgU0VUVVBfU0VDT05EU1xuICAgIG5hbWUgPSBjb250YWluZXJfbmFtZSh0YXNrKVxuICAgIHNsaWNlX25hbWUgPSBhdHRlbXB0X3NsaWNlKHRhc2tbJ2F0dGVtcHQnXSlcbiAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShkaXI9U0NSQVRDSCkgYXMgZGlyZWN0b3J5OlxuICAgICAgICBmb2xkZXIgPSBQYXRoKGRpcmVjdG9yeSlcbiAgICAgICAgc291cmNlID0gZm9sZGVyIC8gJ3NvdXJjZSdcbiAgICAgICAgb3V0cHV0ID0gZm9sZGVyIC8gJ291dHB1dCdcbiAgICAgICAgYnVuZGxlX2FyY2hpdmUgPSBmb2xkZXIgLyAndGFzay1idW5kbGUudGFyLmd6J1xuICAgICAgICBidW5kbGUgPSBmb2xkZXIgLyAnYnVuZGxlJ1xuICAgICAgICBwb3N0X2F0dGVtcHQoYXBpLCB0YXNrLCAnc3RhcnQnKVxuICAgICAgICB2ZXJpZnlfdGFza19zaWduYXR1cmUoYXBpLCB0YXNrKVxuICAgICAgICBkb3dubG9hZCh0YXNrWydidW5kbGVfdXJsJ10sIGJ1bmRsZV9hcmNoaXZlLCB0YXNrWydidW5kbGVfc2l6ZSddLCB0YXNrWydidW5kbGVfY2hlY2tzdW0nXSwgc2V0dXBfZGVhZGxpbmUpXG4gICAgICAgIGV4dHJhY3RfYnVuZGxlKGJ1bmRsZV9hcmNoaXZlLCBidW5kbGUsIHRhc2spXG4gICAgICAgIHZlcmlmeV9idW5kbGUoYXBpLCB0YXNrLCBjb25maWcsIGJ1bmRsZSlcbiAgICAgICAgZGVhZGxpbmUgPSB0aW1lLm1vbm90b25pYygpICsgbWF4KDEsIGludCh0YXNrLmdldCgndGltZW91dCcpIG9yIHRhc2tbJ3RpbWVvdXRfc2Vjb25kcyddKSlcbiAgICAgICAgaW5wdXRfdXJsLCBpbnB1dF9zaXplLCBpbnB1dF9jaGVja3N1bSA9IGZpcnN0X2lucHV0KHRhc2spXG4gICAgICAgIGRvd25sb2FkKGlucHV0X3VybCwgc291cmNlLCBpbnB1dF9zaXplLCBpbnB1dF9jaGVja3N1bSwgZGVhZGxpbmUpXG4gICAgICAgIHdyaXRlX2pzb24oZm9sZGVyIC8gJ3Rhc2suanNvbicsIHtrZXk6IHRhc2tba2V5XSBmb3Iga2V5IGluICgnb3BlcmF0aW9uJywgJ2ZpbmdlcnByaW50JywgJ3J1bnRpbWVfYWJpJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSBpbiB0YXNrfSB8IHsnb3B0aW9ucyc6IHRhc2suZ2V0KCdvcHRpb25zJykgb3IgdGFzay5nZXQoJ3BhcmFtZXRlcnMnKSBvciB7fX0pXG4gICAgICAgIGZvciBmaWxlIGluIGZvbGRlci5pdGVyZGlyKCk6XG4gICAgICAgICAgICBvcy5jaG93bihmaWxlLCAxMDAwMSwgMTAwMDEpXG4gICAgICAgIG9zLmNob3duKGZvbGRlciwgMTAwMDEsIDEwMDAxKVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICBjb21tYW5kKGRvY2tlcl9hcmdzKGNvbmZpZywgdGFza1snb3BlcmF0aW9uJ10sIHNsaWNlX25hbWUpICsgWyctLW5hbWU9JyArIG5hbWUsICctLWVudj1UTVBESVI9L3Rhc2snLFxuICAgICAgICAgICAgICAgICAgICAnLS1tb3VudD10eXBlPWJpbmQsc3JjPScgKyBkaXJlY3RvcnkgKyAnLGRzdD0vdGFzaycsXG4gICAgICAgICAgICAgICAgICAgICctLW1vdW50PXR5cGU9YmluZCxzcmM9JyArIHN0cihidW5kbGUpICsgJyxkc3Q9L2J1bmRsZSxyZWFkb25seScsIGNvbmZpZ1snaW1hZ2UnXSxcbiAgICAgICAgICAgICAgICAgICAgJ3J1YnknLCAnL2J1bmRsZS9zY3JpcHQvaGVhdnlfcHJvY2Vzc2luZy9leGVjdXRlLnJiJ10sIG1heCgxLCBkZWFkbGluZSAtIHRpbWUubW9ub3RvbmljKCkpKVxuICAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICAgZmluaXNoX2F0dGVtcHQobmFtZSwgc2xpY2VfbmFtZSwgbWVhc3VyZWQpXG4gICAgICAgIGxpbWl0ID0gNCAqIDEwMjQqKjMgaWYgdGFza1snb3BlcmF0aW9uJ10gPT0gJ3ppcF9hcmNoaXZlJyBlbHNlIDEwMCAqIDEwMjQqKjJcbiAgICAgICAgaWYgbm90IDAgPCBvdXRwdXQuc3RhdCgpLnN0X3NpemUgPD0gbGltaXQ6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIG91dHB1dCBzaXplJylcbiAgICAgICAgb3V0cHV0X25hbWUsIHVwbG9hZF91cmwsIGhlYWRlcnMsIG1lZGlhX3R5cGUgPSBmaXJzdF9vdXRwdXQodGFzaylcbiAgICAgICAgaWYgbm90IHVwbG9hZF91cmw6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdNaXNzaW5nIG91dHB1dCB1cGxvYWQgVVJMJylcbiAgICAgICAgIyBBbm90aGVyIHdvcmtlciBtYXkgaG9sZCB0aGUgam9iIGJ5IG5vdzsgbmV2ZXIgdXBsb2FkIG92ZXIgaXRzIHJlc3VsdC5cbiAgICAgICAgcmVtYWluaW5nID0gY29uZmlybV9sZWFzZShhcGksIHRhc2spXG4gICAgICAgIGRlYWRsaW5lID0gbWluKGRlYWRsaW5lLCB0aW1lLm1vbm90b25pYygpICsgcmVtYWluaW5nKVxuICAgICAgICB1cGxvYWQodXBsb2FkX3VybCwgaGVhZGVycywgb3V0cHV0LCBkZWFkbGluZSwgbG9zdD1sYW1iZGE6IGxlYXNlX2xvc3QodGFzaykpXG4gICAgICAgIGRpZ2VzdCA9IHNoYTI1Nl9maWxlKG91dHB1dClcbiAgICAgICAgcG9zdF9hdHRlbXB0KGFwaSwgdGFzaywgJ2NvbXBsZXRlJywgZGljdChcbiAgICAgICAgICAgIGR1cmF0aW9uX21zPWludCgodGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0ZWQpICogMTAwMCksXG4gICAgICAgICAgICBvdXRwdXRzPVt7J25hbWUnOiBvdXRwdXRfbmFtZSwgJ21lZGlhX3R5cGUnOiBtZWRpYV90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICdzaXplX2J5dGVzJzogb3V0cHV0LnN0YXQoKS5zdF9zaXplLCAnc2hhMjU2JzogZGlnZXN0fV0sIG1lYXN1cmVtZW50PW1lYXN1cmVkKSlcblxuXG5kZWYgYXBwbHlfbGltaXRzKGNvbmZpZyk6XG4gICAgY29tbWFuZChbJ21vdW50JywgJy1vJywgJ3JlbW91bnQsc2l6ZT0nICsgc3RyKGNvbmZpZ1snc2NyYXRjaF9tYiddKSArICdtJywgc3RyKFNDUkFUQ0gpXSlcbiAgICBjb21tYW5kKFsnc3lzdGVtY3RsJywgJ3NldC1wcm9wZXJ0eScsICctLXJ1bnRpbWUnLCAnY29tcHV0ZS5zbGljZScsXG4gICAgICAgICAgICAgJ01lbW9yeU1heD0nICsgc3RyKGNvbmZpZ1snbWVtb3J5X21iJ10pICsgJ00nLFxuICAgICAgICAgICAgICdNZW1vcnlMb3c9MCcsICdNZW1vcnlTd2FwTWF4PTAnLCAnQ1BVV2VpZ2h0PTEwJywgJ0lPV2VpZ2h0PTEwJyxcbiAgICAgICAgICAgICAnQ1BVUXVvdGE9JyArIHN0cihmbG9hdChjb25maWdbJ2NwdXMnXSkgKiAxMDApICsgJyUnXSlcblxuXG5kZWYgdGVzdF9jYXBhYmlsaXRpZXMoY29uZmlnLCByZXF1ZXN0X2lkPU5vbmUpOlxuICAgIG5hbWUgPSAnZGdlLXByb2JlLScgKyBzdHIob3MuZ2V0cGlkKCkpXG4gICAgdHJ5OlxuICAgICAgICB0cnk6XG4gICAgICAgICAgICByZXN1bHRzID0ganNvbi5sb2Fkcyhjb21tYW5kKGRvY2tlcl9hcmdzKGNvbmZpZykgKyBbJy0tbmFtZT0nICsgbmFtZSwgY29uZmlnWydpbWFnZSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVieScsICdzY3JpcHQvaGVhdnlfcHJvY2Vzc2luZy9leGVjdXRlLnJiJywgJy0tcHJvYmUnXSwgMjEwKSlcbiAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGVycm9yOlxuICAgICAgICAgICAgcmVzdWx0cyA9IHByb2JlX2NhcGFiaWxpdHlfcmVzdWx0cyhlcnJvcilcbiAgICAgICAgICAgIGlmIHJlc3VsdHMgaXMgTm9uZTpcbiAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZGVzY3JpYmVfcHJvY2Vzc19lcnJvcihlcnJvcikpIGZyb20gZXJyb3JcbiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocmVzdWx0cywgZGljdCkgb3Igbm90IHJlc3VsdHM6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGNhcGFiaWxpdHkgcmVzdWx0cycpXG4gICAgICAgIGlmICd3ZWJfZmV0Y2hfYmF0Y2gnIGluIHJlc3VsdHMgYW5kIG5vdCBwdWJsaWNfd2ViX2VuYWJsZWQoKTpcbiAgICAgICAgICAgIHJlc3VsdHNbJ3dlYl9mZXRjaF9iYXRjaCddID0gZGljdChzdGF0dXM9J3VuYXZhaWxhYmxlJywgZXJyb3I9J1B1YmxpY1dlYlJlcXVlc3RzRGlzYWJsZWQnKVxuICAgICAgICByZXR1cm4gZGljdChpZD1yZXF1ZXN0X2lkIG9yIHN0cih0aW1lLnRpbWVfbnMoKSksIGltYWdlPWNvbmZpZ1snaW1hZ2UnXSwgcmVzdWx0cz1yZXN1bHRzKVxuICAgIGZpbmFsbHk6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFsnZG9ja2VyJywgJ3JtJywgJy1mJywgbmFtZV0sIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsIHRpbWVvdXQ9MTUpXG5cblxuZGVmIHBhc3NpbmdfY2FwYWJpbGl0aWVzKHByb2JlKTpcbiAgICByZXR1cm4gYWxsb3dlZF9jYXBhYmlsaXRpZXMoe29wZXJhdGlvbjogcmVzdWx0WydmaW5nZXJwcmludCddIGZvciBvcGVyYXRpb24sIHJlc3VsdCBpbiBwcm9iZVsncmVzdWx0cyddLml0ZW1zKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdC5nZXQoJ3N0YXR1cycpID09ICdwYXNzZWQnfSlcblxuXG5kZWYgdmVyaWZ5X2J1bmRsZShhcGksIHRhc2ssIGNvbmZpZywgYnVuZGxlKTpcbiAgICB0ZXN0cyA9IHJlYWRfanNvbihST09UIC8gJ2J1bmRsZS10ZXN0cy5qc29uJywge30pXG4gICAgcHJldmlvdXMgPSB0ZXN0cy5nZXQodGFza1snYnVuZGxlX2RpZ2VzdCddKVxuICAgIGlmIHByZXZpb3VzIGFuZCBwcmV2aW91cy5nZXQoJ3N0YXR1cycpID09ICdwYXNzZWQnOlxuICAgICAgICByZXR1cm5cbiAgICBjb21tYW5kX2xpbmUgPSBkb2NrZXJfYXJncyhjb25maWcpICsgWyctLW1vdW50PXR5cGU9YmluZCxzcmM9JyArIHN0cihidW5kbGUpICsgJyxkc3Q9L2J1bmRsZSxyZWFkb25seScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbJ2ltYWdlJ10sICdydWJ5JywgJy9idW5kbGUvc2NyaXB0L2hlYXZ5X3Byb2Nlc3NpbmcvZXhlY3V0ZS5yYicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1wcm9iZS1vcGVyYXRpb24nLCB0YXNrWydvcGVyYXRpb24nXV1cbiAgICB0cnk6XG4gICAgICAgIHJlc3VsdCA9IGpzb24ubG9hZHMoY29tbWFuZChjb21tYW5kX2xpbmUsIDIxMCkpXG4gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgcmVzdWx0ID0gcHJvYmVfb3BlcmF0aW9uX3Jlc3VsdChlcnJvcilcbiAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6XG4gICAgICAgICAgICByZXN1bHQgPSB7J3N0YXR1cyc6ICdmYWlsZWQnLCAnZmluZ2VycHJpbnQnOiB0YXNrWydidW5kbGVfZGlnZXN0J10sXG4gICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJzogZGVzY3JpYmVfcHJvY2Vzc19lcnJvcihlcnJvcil9XG4gICAgdGVzdHNbdGFza1snYnVuZGxlX2RpZ2VzdCddXSA9IHJlc3VsdFxuICAgIHdyaXRlX2pzb24oUk9PVCAvICdidW5kbGUtdGVzdHMuanNvbicsIGRpY3QobGlzdCh0ZXN0cy5pdGVtcygpKVstMTAwOl0pKVxuICAgIHJlcG9ydCA9IGRpY3QoaWQ9dGFza1snYnVuZGxlX2RpZ2VzdCddLCBraW5kPSdidW5kbGUnLCBidW5kbGVfZGlnZXN0PXRhc2tbJ2J1bmRsZV9kaWdlc3QnXSxcbiAgICAgICAgICAgICAgICAgIGltYWdlPWNvbmZpZ1snaW1hZ2UnXSwgcmVzdWx0cz17dGFza1snb3BlcmF0aW9uJ106IHJlc3VsdH0pXG4gICAgd2l0aCBTVEFURV9MT0NLOlxuICAgICAgICBSRVBPUlRbJ2NhcGFiaWxpdHlfdGVzdCddID0gcmVwb3J0XG4gICAgaGVhcnRiZWF0KGFwaSlcbiAgICBpZiByZXN1bHQuZ2V0KCdzdGF0dXMnKSAhPSAncGFzc2VkJzpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUYXNrQnVuZGxlQ2FwYWJpbGl0eUZhaWxlZCcpXG5cblxuZGVmIHJlZnJlc2hfY2FwYWJpbGl0aWVzKGNvbmZpZywgcmVsZWFzZSwgcmVxdWVzdF9pZCk6XG4gICAgcHJvYmUgPSB0ZXN0X2NhcGFiaWxpdGllcyhjb25maWcsIHJlcXVlc3RfaWQpXG4gICAgY2FwYWJpbGl0aWVzID0gcGFzc2luZ19jYXBhYmlsaXRpZXMocHJvYmUpXG4gICAgd3JpdGVfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdHlfdGVzdC5qc29uJywgcHJvYmUpXG4gICAgd3JpdGVfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdGllcy5qc29uJywgY2FwYWJpbGl0aWVzKVxuICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgUkVQT1JULnVwZGF0ZShjYXBhYmlsaXR5X3Rlc3Q9cHJvYmUsIGNhcGFiaWxpdGllcz1jYXBhYmlsaXRpZXMpXG4gICAgICAgIGlmIFJFUE9SVC5nZXQoJ3VwZGF0ZV9lcnJvcicpID09ICdDYXBhYmlsaXR5VGVzdEZhaWxlZCc6XG4gICAgICAgICAgICBSRVBPUlRbJ3VwZGF0ZV9lcnJvciddID0gTm9uZVxuXG5cbmRlZiBzdXBlcnZpc29yX2Nhbl9jaGVja19pbihzb3VyY2UpOlxuICAgIHJldHVybiAoJ1JFR0lTVFJZX0FVVEhfVkVSU0lPTiA9IDEnIGluIHNvdXJjZSBhbmQgJ0JST1dTRVJfVUEnIGluIHNvdXJjZSBhbmRcbiAgICAgICAgICAgIFwicmV0dXJuIHN0cihzZWxmLmlkZW50aXR5LmdldCgnd29ya2VyX2lkJylcIiBpbiBzb3VyY2UpXG5cblxuZGVmIHN0YWdlX3VwZGF0ZShjb25maWcpOlxuICAgIGltcG9ydCByZVxuICAgIGlmIG5vdCByZS5mdWxsbWF0Y2gocidbYS16QS1aMC05Ll8tXXsxLDgwfScsIGNvbmZpZ1sndmVyc2lvbiddKTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBjb25maWd1cmF0aW9uIHZlcnNpb24nKVxuICAgIGlmIG5vdCByZS5mdWxsbWF0Y2gocidbYS16QS1aMC05XVthLXpBLVowLTkuLzpfLV0qQHNoYTI1NjpbYS1mMC05XXs2NH0nLCBjb25maWdbJ2ltYWdlJ10pOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbWFnZSBtdXN0IGJlIHBpbm5lZCBieSBkaWdlc3QnKVxuICAgIGlmIG5vdCA1MTIgPD0gY29uZmlnWydtZW1vcnlfbWInXSA8PSBtZW1vcnkoKVsnTWVtVG90YWwnXSAvLyAxMDI0KioyIC0gNTEyOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnN1ZmZpY2llbnQgaG9zdCBtZW1vcnknKVxuICAgIGlmIG5vdCAyNTYgPD0gY29uZmlnWydzY3JhdGNoX21iJ10gPD0gY29uZmlnWydtZW1vcnlfbWInXSAtIDI1NjpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBzY3JhdGNoIG1lbW9yeScpXG4gICAgY2lfbGltaXQgPSBQYXRoKCcvc3lzL2ZzL2Nncm91cC9jaS5zbGljZS9tZW1vcnkubWF4JylcbiAgICBpZiBjaV9saW1pdC5leGlzdHMoKSBhbmQgY2lfbGltaXQucmVhZF90ZXh0KCkuc3RyaXAoKS5pc2RpZ2l0KCk6XG4gICAgICAgIGF2YWlsYWJsZSA9IG1lbW9yeSgpWydNZW1Ub3RhbCddIC0gaW50KGNpX2xpbWl0LnJlYWRfdGV4dCgpKSAtIDUxMiAqIDEwMjQqKjJcbiAgICAgICAgaWYgY29uZmlnWydtZW1vcnlfbWInXSAqIDEwMjQqKjIgPiBhdmFpbGFibGU6XG4gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb25maWd1cmF0aW9uIGV4Y2VlZHMgbWVtb3J5IHJlbWFpbmluZyBhZnRlciBDSSByZXNlcnZhdGlvbicpXG4gICAgcHVsbF9pbWFnZShjb25maWcpXG4gICAgcHJvYmUgPSB0ZXN0X2NhcGFiaWxpdGllcyhjb25maWcpXG4gICAgY2FwYWJpbGl0aWVzID0gcGFzc2luZ19jYXBhYmlsaXRpZXMocHJvYmUpXG4gICAgY3VycmVudCA9IGFsbG93ZWRfY2FwYWJpbGl0aWVzKHJlYWRfanNvbihQYXRoKHJlYWRfanNvbihST09UIC8gJ2N1cnJlbnQuanNvbicpKSAvICdjYXBhYmlsaXRpZXMuanNvbicsIHt9KSlcbiAgICBwcmV2aW91c19jb25maWcgPSByZWFkX2pzb24oUGF0aChyZWFkX2pzb24oUk9PVCAvICdjdXJyZW50Lmpzb24nKSkgLyAnY29uZmlnLmpzb24nLCB7fSlcbiAgICByZWR1Y2VkID0gKHByZXZpb3VzX2NvbmZpZy5nZXQoJ2ltYWdlJykgPT0gY29uZmlnWydpbWFnZSddIGFuZFxuICAgICAgICAgICAgICAgKGNvbmZpZ1snbWVtb3J5X21iJ10gPCBwcmV2aW91c19jb25maWcuZ2V0KCdtZW1vcnlfbWInLCAwKSBvclxuICAgICAgICAgICAgICAgIGNvbmZpZ1snY3B1cyddIDwgcHJldmlvdXNfY29uZmlnLmdldCgnY3B1cycsIDApKSlcbiAgICBpZiBub3QgcmVkdWNlZCBhbmQgYW55KG9wZXJhdGlvbiBub3QgaW4gY2FwYWJpbGl0aWVzIGZvciBvcGVyYXRpb24gaW4gY3VycmVudCk6XG4gICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgIFJFUE9SVFsnY2FwYWJpbGl0eV90ZXN0J10gPSBwcm9iZVxuICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NhcGFiaWxpdHlSZWdyZXNzaW9uJylcbiAgICByZWxlYXNlID0gUk9PVCAvICdyZWxlYXNlcycgLyBjb25maWdbJ3ZlcnNpb24nXVxuICAgIHJlbGVhc2UubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIGNvbnRhaW5lciA9IGNvbW1hbmQoWydkb2NrZXInLCAnY3JlYXRlJywgY29uZmlnWydpbWFnZSddXSlcbiAgICB0cnk6XG4gICAgICAgIGNvbW1hbmQoWydkb2NrZXInLCAnY3AnLCBjb250YWluZXIgKyAnOi9hcHAvc2NyaXB0L2hlYXZ5X3Byb2Nlc3NpbmcvYWdlbnQucHknLCBzdHIocmVsZWFzZSAvICdhZ2VudC5weScpXSlcbiAgICBmaW5hbGx5OlxuICAgICAgICBjb21tYW5kKFsnZG9ja2VyJywgJ3JtJywgY29udGFpbmVyXSlcbiAgICBpZiBub3Qgc3VwZXJ2aXNvcl9jYW5fY2hlY2tfaW4oKHJlbGVhc2UgLyAnYWdlbnQucHknKS5yZWFkX3RleHQoKSk6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1dvcmtlciBpbWFnZSBjYW5ub3QgcmVhY2ggdGhlIGNvbnRyb2wgcGxhbmU7IGFzc2lnbiBhIG5ld2VyIGltYWdlJylcbiAgICBjb21tYW5kKFtzeXMuZXhlY3V0YWJsZSwgJy1tJywgJ3B5X2NvbXBpbGUnLCBzdHIocmVsZWFzZSAvICdhZ2VudC5weScpXSlcbiAgICB3cml0ZV9qc29uKHJlbGVhc2UgLyAnY29uZmlnLmpzb24nLCBjb25maWcpXG4gICAgd3JpdGVfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdGllcy5qc29uJywgY2FwYWJpbGl0aWVzKVxuICAgIHdyaXRlX2pzb24ocmVsZWFzZSAvICdjYXBhYmlsaXR5X3Rlc3QuanNvbicsIHByb2JlKVxuICAgIGFwcGx5X2xpbWl0cyhjb25maWcpXG4gICAgd3JpdGVfanNvbihST09UIC8gJ3BlbmRpbmcuanNvbicsIGRpY3QocHJldmlvdXM9cmVhZF9qc29uKFJPT1QgLyAnY3VycmVudC5qc29uJyksIHRhcmdldD1zdHIocmVsZWFzZSksIHZlcnNpb249Y29uZmlnWyd2ZXJzaW9uJ10pKVxuICAgIHdyaXRlX2pzb24oUk9PVCAvICdjdXJyZW50Lmpzb24nLCBzdHIocmVsZWFzZSkpXG5cblxuZGVmIHB1bGxfaW1hZ2UoY29uZmlnKTpcbiAgICBpZiBub3QgY29uZmlnWydpbWFnZSddLnN0YXJ0c3dpdGgoJ3JlZ2lzdHJ5LmdpdGxhYi5jb20vJyk6XG4gICAgICAgIHJldHVybiBjb21tYW5kKFsnZG9ja2VyJywgJ3B1bGwnLCBjb25maWdbJ2ltYWdlJ11dLCA2MDApXG4gICAgYXV0aG9yaXphdGlvbiA9IEFQSSgpLnBvc3QoJ3JlZ2lzdHJ5X2F1dGhvcml6YXRpb24nLCB7fSlcbiAgICBpZiBhdXRob3JpemF0aW9uLmdldCgnaW1hZ2UnKSAhPSBjb25maWdbJ2ltYWdlJ106XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1dvcmtlciBpbWFnZSBhc3NpZ25tZW50IGNoYW5nZWQ7IHJldHJ5aW5nIGF0IG5leHQgY2hlY2staW4nKVxuICAgIHJlZ2lzdHJ5ID0gY29uZmlnWydpbWFnZSddLnNwbGl0KCcvJywgMSlbMF1cbiAgICBpZiBhdXRob3JpemF0aW9uLmdldCgncmVnaXN0cnknKSAhPSByZWdpc3RyeTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCByZWdpc3RyeSBhdXRob3JpemF0aW9uJylcbiAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShwcmVmaXg9J3JlZ2lzdHJ5LScsIGRpcj0nL3J1bi9kZ2Utd29ya2VyJykgYXMgZGlyZWN0b3J5OlxuICAgICAgICBjcmVkZW50aWFscyA9IFBhdGgoZGlyZWN0b3J5KSAvICdjb25maWcuanNvbidcbiAgICAgICAgd3JpdGVfanNvbihjcmVkZW50aWFscywgeydhdXRocyc6IHtyZWdpc3RyeTogeydyZWdpc3RyeXRva2VuJzogYXV0aG9yaXphdGlvblsndG9rZW4nXX19fSlcbiAgICAgICAgY29tbWFuZChbJ2RvY2tlcicsICctLWNvbmZpZycsIGRpcmVjdG9yeSwgJ3B1bGwnLCBjb25maWdbJ2ltYWdlJ11dLCA2MDApXG5cblxuZGVmIHJlcGxhY2VfZmllbGQoYm9keSwgbmFtZSwgdmFsdWUpOlxuICAgIGxpbmUgPSBuYW1lICsgJyA9ICcgKyBqc29uLmR1bXBzKHZhbHVlKSArICdcXG4nXG4gICAgcGF0dGVybiA9IHInKD9tKV5cXHMqJyArIHJlLmVzY2FwZShuYW1lKSArIHInXFxzKj0uKlxcbidcbiAgICByZXR1cm4gcmUuc3ViKHBhdHRlcm4sIGxhbWJkYSBfOiBsaW5lLCBib2R5KSBpZiByZS5zZWFyY2gocGF0dGVybiwgYm9keSkgZWxzZSBib2R5ICsgbGluZVxuXG5cbmRlZiByZXdyaXRlX3J1bm5lcl9jb25maWcocGF0aCwgZXhwZWN0ZWQsIGVkaXRfZ2xvYmFsLCBlZGl0X3J1bm5lcik6XG4gICAgXCJcIlwiRWRpdCBjb25maWcudG9tbCB0ZXh0dWFsbHksIGtlZXBpbmcgdG9rZW5zIGFuZCBjb21tZW50czsgcGFyc2VkIHJlc3VsdCBtdXN0IGVxdWFsIGV4cGVjdGVkLlwiXCJcIlxuICAgIGltcG9ydCB0b21sbGliXG4gICAgb3JpZ2luYWwgPSBwYXRoLnJlYWRfdGV4dCgpXG4gICAgYmxvY2tzID0gcmUuc3BsaXQocicoP20pXlxccypcXFtcXFtydW5uZXJzXFxdXFxdXFxzKlxcbicsIG9yaWdpbmFsKVxuICAgIGlmIGxlbihibG9ja3MpIC0gMSAhPSBsZW4oZXhwZWN0ZWQuZ2V0KCdydW5uZXJzJywgW10pKTpcbiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5zdXBwb3J0ZWQgcnVubmVyIGNvbmZpZ3VyYXRpb24gbGF5b3V0JylcbiAgICB1cGRhdGVkID0gZWRpdF9nbG9iYWwoYmxvY2tzWzBdKVxuICAgIGZvciBibG9jaywgcnVubmVyIGluIHppcChibG9ja3NbMTpdLCBleHBlY3RlZC5nZXQoJ3J1bm5lcnMnLCBbXSkpOlxuICAgICAgICBzZWN0aW9ucyA9IHJlLnNwbGl0KHInKD9tKV4oXFxzKlxcW1teXFxuXStcXF1cXHMqXFxuKScsIGJsb2NrKVxuICAgICAgICB1cGRhdGVkICs9ICdbW3J1bm5lcnNdXVxcbicgKyAnJy5qb2luKGVkaXRfcnVubmVyKHNlY3Rpb25zLCBydW5uZXIpKVxuICAgIGlmIHRvbWxsaWIubG9hZHModXBkYXRlZCkgIT0gZXhwZWN0ZWQ6XG4gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1J1bm5lciBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkOyBubyBjaGFuZ2VzIHdyaXR0ZW4nKVxuICAgIGlmIHVwZGF0ZWQgIT0gb3JpZ2luYWw6XG4gICAgICAgIGJhY2t1cCA9IHBhdGgud2l0aF9uYW1lKCdjb25maWcudG9tbC5iZWZvcmUtY29tcHV0ZS0nICsgc3RyKHRpbWUudGltZV9ucygpKSlcbiAgICAgICAgYmFja3VwLndyaXRlX3RleHQob3JpZ2luYWwpXG4gICAgICAgIGJhY2t1cC5jaG1vZCgwbzYwMClcbiAgICAgICAgdGVtcG9yYXJ5ID0gcGF0aC53aXRoX25hbWUoJ2NvbmZpZy50b21sLmNvbXB1dGUtcGVuZGluZycpXG4gICAgICAgIHRlbXBvcmFyeS53cml0ZV90ZXh0KHVwZGF0ZWQpXG4gICAgICAgIHRlbXBvcmFyeS5jaG1vZCgwbzYwMClcbiAgICAgICAgb3MucmVwbGFjZSh0ZW1wb3JhcnksIHBhdGgpXG5cblxuZGVmIGNvbmZpZ3VyZV9jaSgpOlxuICAgIFwiXCJcIlBsYWNlIERvY2tlciBleGVjdXRvciBqb2JzLCBzZXJ2aWNlcyBhbmQgY2xhc3NpYyBidWlsZHMgYmVsb3cgY29tcHV0ZS5cIlwiXCJcbiAgICBpbXBvcnQgY29weVxuICAgIGltcG9ydCB0b21sbGliXG4gICAgaWYgbm90IFJVTk5FUl9DT05GSUcuZXhpc3RzKCk6XG4gICAgICAgIHJldHVyblxuICAgIGV4cGVjdGVkID0gY29weS5kZWVwY29weSh0b21sbGliLmxvYWRzKFJVTk5FUl9DT05GSUcucmVhZF90ZXh0KCkpKVxuICAgIGZvciBydW5uZXIgaW4gZXhwZWN0ZWQuZ2V0KCdydW5uZXJzJywgW10pOlxuICAgICAgICBpZiBydW5uZXIuZ2V0KCdleGVjdXRvcicpICE9ICdkb2NrZXInOlxuICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXV0b21hdGljIENJIHByaW9yaXRpemF0aW9uIHJlcXVpcmVzIHRoZSBEb2NrZXIgZXhlY3V0b3InKVxuICAgICAgICBlbnZpcm9ubWVudCA9IFtpdGVtIGZvciBpdGVtIGluIHJ1bm5lci5nZXQoJ2Vudmlyb25tZW50JywgW10pIGlmIG5vdCBpdGVtLnN0YXJ0c3dpdGgoJ0NJX0RPQ0tFUl9DR1JPVVBfUEFSRU5UPScpXVxuICAgICAgICBydW5uZXJbJ2Vudmlyb25tZW50J10gPSBlbnZpcm9ubWVudCArIFsnQ0lfRE9DS0VSX0NHUk9VUF9QQVJFTlQ9Y2kuc2xpY2UnXVxuICAgICAgICBydW5uZXIuc2V0ZGVmYXVsdCgnZG9ja2VyJywge30pLnVwZGF0ZShjZ3JvdXBfcGFyZW50PSdjaS5zbGljZScsIHNlcnZpY2VfY2dyb3VwX3BhcmVudD0nY2kuc2xpY2UnKVxuXG4gICAgZGVmIGVkaXRfcnVubmVyKHNlY3Rpb25zLCBydW5uZXIpOlxuICAgICAgICBzZWN0aW9uc1swXSA9IHJlcGxhY2VfZmllbGQoc2VjdGlvbnNbMF0sICdlbnZpcm9ubWVudCcsIHJ1bm5lclsnZW52aXJvbm1lbnQnXSlcbiAgICAgICAgZm91bmQgPSBGYWxzZVxuICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2UoMSwgbGVuKHNlY3Rpb25zKSwgMik6XG4gICAgICAgICAgICBpZiBzZWN0aW9uc1tpbmRleF0uc3RyaXAoKSA9PSAnW3J1bm5lcnMuZG9ja2VyXSc6XG4gICAgICAgICAgICAgICAgYm9keSA9IHJlcGxhY2VfZmllbGQoc2VjdGlvbnNbaW5kZXggKyAxXSwgJ2Nncm91cF9wYXJlbnQnLCAnY2kuc2xpY2UnKVxuICAgICAgICAgICAgICAgIHNlY3Rpb25zW2luZGV4ICsgMV0gPSByZXBsYWNlX2ZpZWxkKGJvZHksICdzZXJ2aWNlX2Nncm91cF9wYXJlbnQnLCAnY2kuc2xpY2UnKVxuICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZVxuICAgICAgICBpZiBub3QgZm91bmQ6XG4gICAgICAgICAgICBzZWN0aW9ucyArPSBbJ1xcbltydW5uZXJzLmRvY2tlcl1cXG4nLCAnY2dyb3VwX3BhcmVudCA9IFwiY2kuc2xpY2VcIlxcbnNlcnZpY2VfY2dyb3VwX3BhcmVudCA9IFwiY2kuc2xpY2VcIlxcbiddXG4gICAgICAgIHJldHVybiBzZWN0aW9uc1xuXG4gICAgcmV3cml0ZV9ydW5uZXJfY29uZmlnKFJVTk5FUl9DT05GSUcsIGV4cGVjdGVkLCBsYW1iZGEgaGVhZDogaGVhZCwgZWRpdF9ydW5uZXIpXG4gICAgaWYgbm90IENJX1NMSUNFLmV4aXN0cygpOlxuICAgICAgICBDSV9TTElDRS53cml0ZV90ZXh0KCdbU2xpY2VdXFxuQ1BVV2VpZ2h0PTEwXFxuSU9XZWlnaHQ9MTBcXG4nKVxuXG5cbmRlZiBtYW5hZ2VkX2NpX3J1bm5lcigpOlxuICAgIGltcG9ydCB0b21sbGliXG4gICAgaWYgbm90IFJVTk5FUl9DT05GSUcuZXhpc3RzKCk6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcnVubmVycyA9IHRvbWxsaWIubG9hZHMoUlVOTkVSX0NPTkZJRy5yZWFkX3RleHQoKSkuZ2V0KCdydW5uZXJzJywgW10pXG4gICAgcmV0dXJuIG5leHQoKHJ1bm5lciBmb3IgcnVubmVyIGluIHJ1bm5lcnMgaWYgcnVubmVyLmdldCgnbmFtZScpID09IENJX1JVTk5FUl9OQU1FKSwgTm9uZSlcblxuXG5kZWYgaW5zdGFsbF9naXRsYWJfcnVubmVyKCk6XG4gICAgaWYgc2h1dGlsLndoaWNoKCdnaXRsYWItcnVubmVyJyk6XG4gICAgICAgIHJldHVyblxuICAgIGlmIG5vdCBzaHV0aWwud2hpY2goJ2FwdC1nZXQnKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnN0YWxsIGdpdGxhYi1ydW5uZXIgb24gdGhpcyBob3N0OyBvbmx5IGFwdCBob3N0cyBhcmUgYXV0b21hdGVkJylcbiAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShzdWZmaXg9Jy5zaCcpIGFzIHNjcmlwdDpcbiAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKEdJVExBQl9SVU5ORVJfUkVQT1NJVE9SWSwgdGltZW91dD02MCkgYXMgcmVzcG9uc2U6XG4gICAgICAgICAgICBzY3JpcHQud3JpdGUocmVzcG9uc2UucmVhZCgpKVxuICAgICAgICBzY3JpcHQuZmx1c2goKVxuICAgICAgICBjb21tYW5kKFsnYmFzaCcsIHNjcmlwdC5uYW1lXSwgNjAwKVxuICAgIGNvbW1hbmQoWydhcHQtZ2V0JywgJ2luc3RhbGwnLCAnLXknLCAnZ2l0bGFiLXJ1bm5lciddLCA5MDApXG5cblxuZGVmIHJlZ2lzdGVyX2NpX3J1bm5lcih0b2tlbik6XG4gICAgY29tbWFuZChbJ2dpdGxhYi1ydW5uZXInLCAncmVnaXN0ZXInLCAnLS1ub24taW50ZXJhY3RpdmUnLCAnLS11cmwnLCBHSVRMQUIsICctLW5hbWUnLCBDSV9SVU5ORVJfTkFNRSxcbiAgICAgICAgICAgICAnLS1leGVjdXRvcicsICdkb2NrZXInLCAnLS1kb2NrZXItaW1hZ2UnLCBDSV9ERUZBVUxUX0lNQUdFLFxuICAgICAgICAgICAgICctLWRvY2tlci12b2x1bWVzJywgQ0lfRE9DS0VSX1NPQ0tFVCwgJy0tZG9ja2VyLXZvbHVtZXMnLCAnL2NhY2hlJ10sXG4gICAgICAgICAgICAxMjAsIGVudj17Kipvcy5lbnZpcm9uLCAnQ0lfU0VSVkVSX1RPS0VOJzogdG9rZW59KVxuXG5cbmRlZiBsaW1pdF9jaV9ydW5uZXIoY29uY3VycmVudCk6XG4gICAgXCJcIlwiQ2FwIHRoZSBtYW5hZ2VkIHJ1bm5lciBhdCBgY29uY3VycmVudGAgam9iczsgcmFpc2UgdGhlIGdsb2JhbCBjYXAgb25seSBhcyBmYXIgYXMgaXQgbmVlZHMuXCJcIlwiXG4gICAgaW1wb3J0IGNvcHlcbiAgICBpbXBvcnQgdG9tbGxpYlxuICAgIGV4cGVjdGVkID0gY29weS5kZWVwY29weSh0b21sbGliLmxvYWRzKFJVTk5FUl9DT05GSUcucmVhZF90ZXh0KCkpKVxuICAgIHRvdGFsID0gbWF4KGludChleHBlY3RlZC5nZXQoJ2NvbmN1cnJlbnQnKSBvciAxKSwgY29uY3VycmVudClcbiAgICBleHBlY3RlZFsnY29uY3VycmVudCddID0gdG90YWxcbiAgICBmb3IgcnVubmVyIGluIGV4cGVjdGVkLmdldCgncnVubmVycycsIFtdKTpcbiAgICAgICAgaWYgcnVubmVyLmdldCgnbmFtZScpID09IENJX1JVTk5FUl9OQU1FOlxuICAgICAgICAgICAgcnVubmVyLnVwZGF0ZShsaW1pdD1jb25jdXJyZW50LCByZXF1ZXN0X2NvbmN1cnJlbmN5PTQpXG5cbiAgICBkZWYgZWRpdF9nbG9iYWwoaGVhZCk6XG4gICAgICAgIGhlYWRlciA9IHJlLnNlYXJjaChyJyg/bSleXFxzKlxcWycsIGhlYWQpXG4gICAgICAgIHRvcCwgcmVzdCA9IChoZWFkWzpoZWFkZXIuc3RhcnQoKV0sIGhlYWRbaGVhZGVyLnN0YXJ0KCk6XSkgaWYgaGVhZGVyIGVsc2UgKGhlYWQsICcnKVxuICAgICAgICBwYXR0ZXJuID0gcicoP20pXlxccypjb25jdXJyZW50XFxzKj0uKlxcbidcbiAgICAgICAgbGluZSA9ICdjb25jdXJyZW50ID0gJyArIHN0cih0b3RhbCkgKyAnXFxuJ1xuICAgICAgICByZXR1cm4gKHJlLnN1YihwYXR0ZXJuLCBsYW1iZGEgXzogbGluZSwgdG9wKSBpZiByZS5zZWFyY2gocGF0dGVybiwgdG9wKSBlbHNlIGxpbmUgKyB0b3ApICsgcmVzdFxuXG4gICAgZGVmIGVkaXRfcnVubmVyKHNlY3Rpb25zLCBydW5uZXIpOlxuICAgICAgICBpZiBydW5uZXIuZ2V0KCduYW1lJykgPT0gQ0lfUlVOTkVSX05BTUU6XG4gICAgICAgICAgICBzZWN0aW9uc1swXSA9IHJlcGxhY2VfZmllbGQocmVwbGFjZV9maWVsZChzZWN0aW9uc1swXSwgJ2xpbWl0JywgY29uY3VycmVudCksICdyZXF1ZXN0X2NvbmN1cnJlbmN5JywgNClcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zXG5cbiAgICByZXdyaXRlX3J1bm5lcl9jb25maWcoUlVOTkVSX0NPTkZJRywgZXhwZWN0ZWQsIGVkaXRfZ2xvYmFsLCBlZGl0X3J1bm5lcilcblxuXG5kZWYgZW5hYmxlX2NpX3J1bm5lcihhcGksIGNvbmN1cnJlbnQpOlxuICAgIGluc3RhbGxfZ2l0bGFiX3J1bm5lcigpXG4gICAgdG9rZW4gPSBhcGkucG9zdCgnY2lfcnVubmVyX3Rva2VuJywge30pLmdldCgndG9rZW4nKSBvciAnJ1xuICAgIGlmIG5vdCB0b2tlbi5zdGFydHN3aXRoKCdnbHJ0LScpOlxuICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb21wdXRlIGRpZCBub3QgaXNzdWUgYSBHaXRMYWIgcnVubmVyIHRva2VuJylcbiAgICBydW5uZXIgPSBtYW5hZ2VkX2NpX3J1bm5lcigpXG4gICAgaWYgcnVubmVyIGFuZCBydW5uZXIuZ2V0KCd0b2tlbicpICE9IHRva2VuOlxuICAgICAgICBjb21tYW5kKFsnZ2l0bGFiLXJ1bm5lcicsICd1bnJlZ2lzdGVyJywgJy0tbmFtZScsIENJX1JVTk5FUl9OQU1FXSwgMTIwKVxuICAgICAgICBydW5uZXIgPSBOb25lXG4gICAgaWYgbm90IHJ1bm5lcjpcbiAgICAgICAgcmVnaXN0ZXJfY2lfcnVubmVyKHRva2VuKVxuICAgIGxpbWl0X2NpX3J1bm5lcihjb25jdXJyZW50KVxuICAgIGNvbmZpZ3VyZV9jaSgpXG4gICAgY29tbWFuZChbJ3N5c3RlbWN0bCcsICdkYWVtb24tcmVsb2FkJ10pXG4gICAgY29tbWFuZChbJ3N5c3RlbWN0bCcsICdlbmFibGUnLCAnLS1ub3cnLCAnZ2l0bGFiLXJ1bm5lci5zZXJ2aWNlJ10pXG4gICAgY29tbWFuZChbJ2dpdGxhYi1ydW5uZXInLCAndmVyaWZ5JywgJy0tbmFtZScsIENJX1JVTk5FUl9OQU1FXSwgMTIwKVxuXG5cbmRlZiBkaXNhYmxlX2NpX3J1bm5lcigpOlxuICAgIGlmIG1hbmFnZWRfY2lfcnVubmVyKCk6XG4gICAgICAgIGNvbW1hbmQoWydnaXRsYWItcnVubmVyJywgJ3VucmVnaXN0ZXInLCAnLS1uYW1lJywgQ0lfUlVOTkVSX05BTUVdLCAxMjApXG5cblxuZGVmIGFwcGx5X2NpX3J1bm5lcihhcGksIGRlc2lyZWQpOlxuICAgIFwiXCJcIkFwcGx5IHRoZSBvcGVyYXRvcidzIENJIHJ1bm5lciBzZXR0aW5nIG9uY2UgcGVyIHZlcnNpb247IGEgZmFpbHVyZSB3YWl0cyBmb3IgYSBuZXcgdmVyc2lvbi5cIlwiXCJcbiAgICBpZiBub3QgZGVzaXJlZDpcbiAgICAgICAgcmV0dXJuXG4gICAgc3RhdGUgPSByZWFkX2pzb24oQ0lfUlVOTkVSX1NUQVRFLCB7fSlcbiAgICBpZiBzdGF0ZS5nZXQoJ3ZlcnNpb24nKSA9PSBkZXNpcmVkWyd2ZXJzaW9uJ106XG4gICAgICAgIHJldHVyblxuICAgIHRyeTpcbiAgICAgICAgaWYgZGVzaXJlZFsnZW5hYmxlZCddOlxuICAgICAgICAgICAgZW5hYmxlX2NpX3J1bm5lcihhcGksIGludChkZXNpcmVkWydjb25jdXJyZW50J10pKVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgZGlzYWJsZV9jaV9ydW5uZXIoKVxuICAgICAgICBzdGF0ZSA9IGRpY3QodmVyc2lvbj1kZXNpcmVkWyd2ZXJzaW9uJ10sIGFwcGxpZWQ9ZGVzaXJlZFsndmVyc2lvbiddKVxuICAgICAgICBub3RlKCdDSSBydW5uZXIgJyArICgncmVhZHknIGlmIGRlc2lyZWRbJ2VuYWJsZWQnXSBlbHNlICdyZW1vdmVkJykpXG4gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgc3RhdGUgPSBkaWN0KHZlcnNpb249ZGVzaXJlZFsndmVyc2lvbiddLCBhcHBsaWVkPXN0YXRlLmdldCgnYXBwbGllZCcpLCBlcnJvcj1kZXNjcmliZV9wcm9jZXNzX2Vycm9yKGVycm9yKSlcbiAgICAgICAgbm90ZSgnQ0kgcnVubmVyIHNldHVwIGZhaWxlZDogJyArIHN0YXRlWydlcnJvciddKVxuICAgIHdyaXRlX2pzb24oQ0lfUlVOTkVSX1NUQVRFLCBzdGF0ZSlcbiAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgIFJFUE9SVC51cGRhdGUoY2lfcnVubmVyX2FwcGxpZWRfdmVyc2lvbj1zdGF0ZS5nZXQoJ2FwcGxpZWQnKSwgY2lfcnVubmVyX2Vycm9yPXN0YXRlLmdldCgnZXJyb3InKSlcbiAgICB0cnk6XG4gICAgICAgIGhlYXJ0YmVhdChhcGkpXG4gICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgbm90ZSgnV29ya2VyIGhlYXJ0YmVhdCB1bmF2YWlsYWJsZScpXG5cblxuZGVmIHJlY29yZF90YXNrX2ZhaWx1cmUobWVzc2FnZSk6XG4gICAgd2l0aCBTVEFURV9MT0NLOlxuICAgICAgICBtZXRyaWNzID0gcmVhZF9qc29uKFJPT1QgLyAnbWV0cmljcy5qc29uJywge30pXG4gICAgICAgIG1ldHJpY3MudXBkYXRlKHRhc2tfZXJyb3JzPW1ldHJpY3MuZ2V0KCd0YXNrX2Vycm9ycycsIDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90YXNrX2Vycm9yPW1lc3NhZ2UsIGxhc3RfdGFza19lcnJvcl9hdD10aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onLCB0aW1lLmdtdGltZSgpKSlcbiAgICAgICAgd3JpdGVfanNvbihST09UIC8gJ21ldHJpY3MuanNvbicsIG1ldHJpY3MpXG5cblxuZGVmIHJ1bl90YXNrKGFwaSwgdGFzaywgY29uZmlnKTpcbiAgICBtZWFzdXJlZCA9IHt9XG4gICAgdHJ5OlxuICAgICAgICBleGVjdXRlKGFwaSwgdGFzaywgY29uZmlnLCBtZWFzdXJlZClcbiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAjIEluY2x1ZGVzIGEgY29udGFpbmVyIGtpbGxlZCBiZWNhdXNlIHRoZSBoZWFydGJlYXQgcmVwb3J0ZWQgaXRzIGxlYXNlIGxvc3QuXG4gICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyb3IsIExlYXNlTG9zdCkgb3IgbGVhc2VfbG9zdCh0YXNrKTpcbiAgICAgICAgICAgIG5vdGUoJ1dvcmtlciB0YXNrIGxlYXNlIGxvc3Q7IHJlc3VsdCBub3QgdXBsb2FkZWQnKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIG1lc3NhZ2UgPSBkZXNjcmliZV9lcnJvcihlcnJvcilcbiAgICAgICAgIyBBIGtpbGwgZnJvbSB3b3JrZXIgbWVtb3J5IHByZXNzdXJlIGlzIG5vdCB0aGUgdGFzaydzIG9yIHRoaXMgd29ya2VyJ3MgZmF1bHQuXG4gICAgICAgIGlmIG1lYXN1cmVkLmdldCgnb29tJykgIT0gJ2hvc3QnOlxuICAgICAgICAgICAgcmVjb3JkX3Rhc2tfZmFpbHVyZShkZXNjcmliZV9wcm9jZXNzX2Vycm9yKGVycm9yLCBsaW1pdD1JTlZFTlRPUllfVEVYVF9MSU1JVCkpXG4gICAgICAgIG5vdGUoJ1dvcmtlciB0YXNrIGZhaWxlZDogJyArIG1lc3NhZ2UpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIGFwaS5wb3N0KCdqb2JzLycgKyBzdHIodGFza1snaWQnXSkgKyAnL2ZhaWwnLCBkaWN0KGF0dGVtcHQ9dGFza1snYXR0ZW1wdCddLCBlcnJvcj1tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50PW1lYXN1cmVkKSlcbiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjpcbiAgICAgICAgICAgIHBhc3NcbiAgICBmaW5hbGx5OlxuICAgICAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgICAgICBkcm9wX3Rhc2sodGFzaylcblxuXG5kZWYgbWFpbigpOlxuICAgIGFwaSA9IEFQSSgpXG4gICAgcmVsZWFzZSA9IFBhdGgocmVhZF9qc29uKFJPT1QgLyAnY3VycmVudC5qc29uJykpXG4gICAgY29uZmlnID0gcmVhZF9qc29uKHJlbGVhc2UgLyAnY29uZmlnLmpzb24nLCB7fSlcbiAgICBmYWlsdXJlID0ge30gaWYgKFJPT1QgLyAncGVuZGluZy5qc29uJykuZXhpc3RzKCkgZWxzZSByZWFkX2pzb24oUk9PVCAvICdmYWlsdXJlLmpzb24nLCB7fSlcbiAgICByZWZyZXNoX3VwbGluayhmb3JjZT1UcnVlKVxuICAgIHJ1bnRpbWVfYWJpID0gTm9uZSBpZiBSVU5USU1FX0FCSS5zdGFydHN3aXRoKCdfXycpIGVsc2UgUlVOVElNRV9BQklcbiAgICBSRVBPUlQudXBkYXRlKGhhcmR3YXJlPWludmVudG9yeSgpLCBhZ2VudF92ZXJzaW9uPVZFUlNJT04sIHJ1bnRpbWVfYWJpPXJ1bnRpbWVfYWJpLFxuICAgICAgICAgICAgICAgICAgYXBwbGllZF92ZXJzaW9uPWNvbmZpZy5nZXQoJ3ZlcnNpb24nKSxcbiAgICAgICAgICAgICAgICAgIGltYWdlPWNvbmZpZy5nZXQoJ2ltYWdlJyksIG1lbW9yeV9tYj1jb25maWcuZ2V0KCdtZW1vcnlfbWInKSwgc2NyYXRjaF9tYj1jb25maWcuZ2V0KCdzY3JhdGNoX21iJyksXG4gICAgICAgICAgICAgICAgICBjcHVzPWNvbmZpZy5nZXQoJ2NwdXMnKSwgY2FwYWJpbGl0aWVzPWFsbG93ZWRfY2FwYWJpbGl0aWVzKHJlYWRfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdGllcy5qc29uJywge30pKSxcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZV9lcnJvcj1mYWlsdXJlLmdldCgnZXJyb3InKSwgY2FwYWJpbGl0eV90ZXN0PXJlYWRfanNvbihyZWxlYXNlIC8gJ2NhcGFiaWxpdHlfdGVzdC5qc29uJykpXG4gICAgY2lfc3RhdGUgPSByZWFkX2pzb24oQ0lfUlVOTkVSX1NUQVRFLCB7fSlcbiAgICBSRVBPUlQudXBkYXRlKGNpX3J1bm5lcl9hcHBsaWVkX3ZlcnNpb249Y2lfc3RhdGUuZ2V0KCdhcHBsaWVkJyksIGNpX3J1bm5lcl9lcnJvcj1jaV9zdGF0ZS5nZXQoJ2Vycm9yJykpXG4gICAgaWYgY29uZmlnOlxuICAgICAgICBhcHBseV9saW1pdHMoY29uZmlnKVxuICAgIGZvciBjb250YWluZXIgaW4gY29tbWFuZChbJ2RvY2tlcicsICdwcycsICctYXEnLCAnLS1maWx0ZXI9bGFiZWw9Y29tLmRnZS5yb2xlPWNvbXB1dGUtdGFzayddKS5zcGxpdGxpbmVzKCk6XG4gICAgICAgIGNvbW1hbmQoWydkb2NrZXInLCAncm0nLCAnLWYnLCBjb250YWluZXJdKVxuICAgIHN0b3BfYXR0ZW1wdF9zbGljZXMoKVxuICAgIGZvciBkaXJlY3RvcnkgaW4gU0NSQVRDSC5pdGVyZGlyKCk6XG4gICAgICAgIGlmIGRpcmVjdG9yeS5pc19kaXIoKTpcbiAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGlyZWN0b3J5KVxuICAgIGluaXRpYWwgPSBoZWFydGJlYXQoYXBpKVxuICAgIChST09UIC8gJ3JlYWR5JykudG91Y2gobW9kZT0wbzYwMClcbiAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1oZWFydGJlYXRfbG9vcCwgYXJncz0oYXBpLCksIGRhZW1vbj1UcnVlKS5zdGFydCgpXG4gICAgcmVzcG9uc2UgPSBpbml0aWFsXG4gICAgd2hpbGUgbm90IFNUT1AuaXNfc2V0KCk6XG4gICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgIHJlc3BvbnNlID0gZGljdChDT05UUk9MKVxuICAgICAgICAgICAgYnVzeSA9IGJvb2woVEFTS1MpXG4gICAgICAgIGRlc2lyZWQgPSByZXNwb25zZS5nZXQoJ2NvbmZpZ3VyYXRpb24nKVxuICAgICAgICB0ZXN0X3JlcXVlc3QgPSByZXNwb25zZS5nZXQoJ2NhcGFiaWxpdHlfdGVzdF9yZXF1ZXN0JylcbiAgICAgICAgdGVzdGVkID0gUkVQT1JULmdldCgnY2FwYWJpbGl0eV90ZXN0JylcbiAgICAgICAgaWYgbm90IGJ1c3kgYW5kIGNvbmZpZyBhbmQgKG5vdCB0ZXN0ZWQgb3IgKHRlc3RfcmVxdWVzdCBhbmQgdGVzdGVkLmdldCgnaWQnKSAhPSB0ZXN0X3JlcXVlc3QpKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICByZWZyZXNoX2NhcGFiaWxpdGllcyhjb25maWcsIHJlbGVhc2UsIHRlc3RfcmVxdWVzdClcbiAgICAgICAgICAgICAgICBoZWFydGJlYXQoYXBpKVxuICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgICAgICB3aXRoIFNUQVRFX0xPQ0s6XG4gICAgICAgICAgICAgICAgICAgIFJFUE9SVC51cGRhdGUoY2FwYWJpbGl0aWVzPXt9LCB1cGRhdGVfZXJyb3I9J0NhcGFiaWxpdHlUZXN0RmFpbGVkJylcbiAgICAgICAgICAgICAgICBoZWFydGJlYXQoYXBpKVxuICAgICAgICAgICAgICAgIFNUT1Aud2FpdCgxNSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBhcHBseV9jaV9ydW5uZXIoYXBpLCByZXNwb25zZS5nZXQoJ2NpX3J1bm5lcicpKVxuICAgICAgICBpZiBmYWlsdXJlIGFuZCBkZXNpcmVkIGFuZCBkZXNpcmVkWyd2ZXJzaW9uJ10gIT0gZmFpbHVyZS5nZXQoJ3ZlcnNpb24nKTpcbiAgICAgICAgICAgIGZhaWx1cmUgPSB7fVxuICAgICAgICAgICAgKFJPT1QgLyAnZmFpbHVyZS5qc29uJykudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSlcbiAgICAgICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgICAgICBSRVBPUlRbJ3VwZGF0ZV9lcnJvciddID0gTm9uZVxuICAgICAgICAgICAgaGVhcnRiZWF0KGFwaSlcbiAgICAgICAgaWYgbm90IGJ1c3kgYW5kIGRlc2lyZWQgYW5kIGRlc2lyZWQgIT0gY29uZmlnIGFuZCBkZXNpcmVkWyd2ZXJzaW9uJ10gIT0gZmFpbHVyZS5nZXQoJ3ZlcnNpb24nKTpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBzdGFnZV91cGRhdGUoZGVzaXJlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gNzVcbiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgICAgaWYgY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICBhcHBseV9saW1pdHMoY29uZmlnKVxuICAgICAgICAgICAgICAgIHJlYXNvbiA9IHVwZGF0ZV9mYWlsdXJlX3JlYXNvbihlcnJvcilcbiAgICAgICAgICAgICAgICBmYWlsdXJlID0gZGljdCh2ZXJzaW9uPWRlc2lyZWRbJ3ZlcnNpb24nXSwgZXJyb3I9cmVhc29uKVxuICAgICAgICAgICAgICAgIHdyaXRlX2pzb24oUk9PVCAvICdmYWlsdXJlLmpzb24nLCBmYWlsdXJlKVxuICAgICAgICAgICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgICAgICAgICAgUkVQT1JUWyd1cGRhdGVfZXJyb3InXSA9IGZhaWx1cmVbJ2Vycm9yJ11cbiAgICAgICAgICAgICAgICBub3RlKCdXb3JrZXIgdXBkYXRlIGZhaWxlZDogJyArIHR5cGUoZXJyb3IpLl9fbmFtZV9fICsgJzogJyArIHN0cihlcnJvcikpXG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBoZWFydGJlYXQoYXBpKVxuICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246XG4gICAgICAgICAgICAgICAgICAgIHBhc3NcbiAgICAgICAgYWxsb3dlZCA9IGNsYWltX2FsbG93ZWQocmVzcG9uc2UuZ2V0KCdleGVjdXRpb25fcG9saWN5JyksIGhvc3RfYWN0aXZpdHkoKSlcbiAgICAgICAgaWYgY29uZmlnIGFuZCBhbGxvd2VkIGFuZCBub3QgcmVzcG9uc2UuZ2V0KCdkcmFpbmluZycpIGFuZCBkZXNpcmVkID09IGNvbmZpZyBhbmQgbm90IFJFUE9SVC5nZXQoJ3VwZGF0ZV9lcnJvcicpOlxuICAgICAgICAgICAgd2l0aCBTVEFURV9MT0NLOlxuICAgICAgICAgICAgICAgIHJvb20gPSBNQVhfVEFTS1MgLSBsZW4oVEFTS1MpXG4gICAgICAgICAgICBpZiByb29tID4gMDpcbiAgICAgICAgICAgICAgICB0YXNrID0gYXBpLnBvc3QoJ3dvcmtlcnMvJyArIGFwaS53b3JrZXJfaWQoKSArICcvam9icy9yZXF1ZXN0Jywge30pWydqb2InXVxuICAgICAgICAgICAgICAgIGlmIHRhc2s6XG4gICAgICAgICAgICAgICAgICAgIHdpdGggU1RBVEVfTE9DSzpcbiAgICAgICAgICAgICAgICAgICAgICAgIFRBU0tTLmFwcGVuZCh0YXNrKVxuICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW5fdGFzaywgYXJncz0oYXBpLCB0YXNrLCBqb2JfY29uZmlnKGRlc2lyZWQgb3IgY29uZmlnLCB0YXNrKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFlbW9uPVRydWUpLnN0YXJ0KClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgaWYgU1RPUC53YWl0KDIpOlxuICAgICAgICAgICAgYnJlYWtcbiAgICByZXR1cm4gMFxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgbGFtYmRhICpfOiBTVE9QLnNldCgpKVxuICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgbGFtYmRhICpfOiBTVE9QLnNldCgpKVxuICAgIHRyeTpcbiAgICAgICAgc3lzLmV4aXQobWFpbigpKVxuICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgIHByaW50KCdXb3JrZXIgc3RvcHBlZDogJyArIGRlc2NyaWJlX3N0b3AoZXJyb3IpLCBmbHVzaD1UcnVlKVxuICAgICAgICBzeXMuZXhpdCgxKVxuIiwibGF1bmNoZXIucHkiOiIjIS91c3IvYmluL2VudiBweXRob24zXG5cIlwiXCJTdGFibGUgYm9vdHN0cmFwIHdhdGNoZG9nOiBhIGNhbmRpZGF0ZSBtdXN0IGNvbnRhY3QgcHJvZHVjdGlvbiB3aXRoaW4gNjBzLlxuUm9sbGJhY2sgc3Vydml2ZXMgcG93ZXIgbG9zcyBiZWNhdXNlIHRoZSBwcmV2aW91cyBwb2ludGVyIGlzIHBlcnNpc3RlZCBmaXJzdC5cblwiXCJcIlxuaW1wb3J0IGpzb25cbmltcG9ydCBvc1xuZnJvbSBwYXRobGliIGltcG9ydCBQYXRoXG5pbXBvcnQgc2lnbmFsXG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHRpbWVcblxuUk9PVCA9IFBhdGgob3MuZW52aXJvbi5nZXQoJ0RHRV9XT1JLRVJfUk9PVCcsICcvb3B0L2RnZS13b3JrZXInKSlcbmNoaWxkID0gTm9uZVxuc3RvcHBpbmcgPSBGYWxzZVxuXG5cbmRlZiB3cml0ZShwYXRoLCB2YWx1ZSk6XG4gICAgdGVtcG9yYXJ5ID0gcGF0aC53aXRoX3N1ZmZpeCgnLnRtcCcpXG4gICAgdGVtcG9yYXJ5LndyaXRlX3RleHQoanNvbi5kdW1wcyh2YWx1ZSkpXG4gICAgdGVtcG9yYXJ5LmNobW9kKDBvNjAwKVxuICAgIG9zLnJlcGxhY2UodGVtcG9yYXJ5LCBwYXRoKVxuXG5cbmRlZiBzdG9wKCpfKTpcbiAgICBnbG9iYWwgc3RvcHBpbmdcbiAgICBzdG9wcGluZyA9IFRydWVcbiAgICBpZiBjaGlsZDpcbiAgICAgICAgY2hpbGQudGVybWluYXRlKClcblxuXG5zaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzdG9wKVxuc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzdG9wKVxud2hpbGUgbm90IHN0b3BwaW5nOlxuICAgIHBlbmRpbmdfcGF0aCA9IFJPT1QgLyAncGVuZGluZy5qc29uJ1xuICAgIHBlbmRpbmcgPSBqc29uLmxvYWRzKHBlbmRpbmdfcGF0aC5yZWFkX3RleHQoKSkgaWYgcGVuZGluZ19wYXRoLmV4aXN0cygpIGVsc2UgTm9uZVxuICAgIGN1cnJlbnQgPSBqc29uLmxvYWRzKChST09UIC8gJ2N1cnJlbnQuanNvbicpLnJlYWRfdGV4dCgpKVxuICAgIHJlYWR5ID0gUk9PVCAvICdyZWFkeSdcbiAgICByZWFkeS51bmxpbmsobWlzc2luZ19vaz1UcnVlKVxuICAgIGNoaWxkID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsIHN0cihQYXRoKGN1cnJlbnQpIC8gJ2FnZW50LnB5JyldKVxuICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSArIDYwXG4gICAgd2hpbGUgY2hpbGQucG9sbCgpIGlzIE5vbmUgYW5kIG5vdCByZWFkeS5leGlzdHMoKSBhbmQgdGltZS5tb25vdG9uaWMoKSA8IGRlYWRsaW5lIGFuZCBub3Qgc3RvcHBpbmc6XG4gICAgICAgIHRpbWUuc2xlZXAoMSlcbiAgICBpZiByZWFkeS5leGlzdHMoKTpcbiAgICAgICAgaWYgcGVuZGluZzpcbiAgICAgICAgICAgIHBlbmRpbmdfcGF0aC51bmxpbmsobWlzc2luZ19vaz1UcnVlKVxuICAgICAgICAgICAgKFJPT1QgLyAnZmFpbHVyZS5qc29uJykudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSlcbiAgICAgICAgcmVzdWx0ID0gY2hpbGQud2FpdCgpXG4gICAgICAgIGlmIHJlc3VsdCA9PSA3NTpcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgZWxpZiBwZW5kaW5nIGFuZCBub3Qgc3RvcHBpbmc6XG4gICAgICAgIGNoaWxkLnRlcm1pbmF0ZSgpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIGNoaWxkLndhaXQodGltZW91dD0xMClcbiAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQ6XG4gICAgICAgICAgICBjaGlsZC5raWxsKClcbiAgICAgICAgICAgIGNoaWxkLndhaXQoKVxuICAgICAgICB3cml0ZShST09UIC8gJ2N1cnJlbnQuanNvbicsIHBlbmRpbmdbJ3ByZXZpb3VzJ10pXG4gICAgICAgIHdyaXRlKFJPT1QgLyAnZmFpbHVyZS5qc29uJywgZGljdCh2ZXJzaW9uPXBlbmRpbmdbJ3ZlcnNpb24nXSwgZXJyb3I9J1N0YXJ0dXBIZWFsdGhDaGVja0ZhaWxlZCcpKVxuICAgICAgICBwZW5kaW5nX3BhdGgudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSlcbiAgICAgICAgY29udGludWVcbiAgICBlbHNlOlxuICAgICAgICBjaGlsZC50ZXJtaW5hdGUoKVxuICAgICAgICBjaGlsZC53YWl0KClcbiAgICBpZiBub3Qgc3RvcHBpbmc6XG4gICAgICAgIHRpbWUuc2xlZXAoNSlcbiIsImluc3RhbGwucHkiOiJcIlwiXCJPbmUtbWFjaGluZSBlbnJvbGxtZW50IHdpdGggcmV0cnktc2FmZSBjcmVkZW50aWFsIGV4Y2hhbmdlIGFuZCByZWFkaW5lc3MgY2hlY2suXCJcIlwiXG5pbXBvcnQgZmNudGxcbmltcG9ydCBqc29uXG5pbXBvcnQgb3NcbmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aFxuaW1wb3J0IHN1YnByb2Nlc3NcbmltcG9ydCBzeXNcbmltcG9ydCB0aW1lXG5pbXBvcnQgdXJsbGliLmVycm9yXG5pbXBvcnQgdXJsbGliLnJlcXVlc3RcbmltcG9ydCB1dWlkXG5cbmZyb20gcHJlcGFyZV9tYWNoaW5lIGltcG9ydCBwcmVwYXJlXG5cblJPT1QgPSBQYXRoKCcvb3B0L2RnZS13b3JrZXInKVxuXG5cbmNsYXNzIFJldHJ5YWJsZUVycm9yKFJ1bnRpbWVFcnJvcik6XG4gICAgcGFzc1xuXG5cbmNsYXNzIE5vUmVkaXJlY3QodXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlcik6XG4gICAgZGVmIHJlZGlyZWN0X3JlcXVlc3Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgc2V0dXAgc2VydmVyIHJlZGlyZWN0ZWQgdGhpcyByZXF1ZXN0LiBBc2sgeW91ciBhZG1pbmlzdHJhdG9yIGZvciBhIGN1cnJlbnQgbGluay4nKVxuXG5cbkhUVFAgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoTm9SZWRpcmVjdCgpKVxuQlJPV1NFUl9VQSA9ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC4wLjAgU2FmYXJpLzUzNy4zNidcblxuXG5kZWYgYWxsb3dlZF9vcmlnaW4ob3JpZ2luKTpcbiAgICBpZiBvcmlnaW4uc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKTpcbiAgICAgICAgcmV0dXJuIFRydWVcbiAgICBpZiBub3Qgb3JpZ2luLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaG9zdCA9IG9yaWdpbi5zcGxpdCgnOi8vJywgMSlbLTFdLnNwbGl0KCcvJywgMSlbMF0uc3BsaXQoJzonLCAxKVswXVxuICAgIHJldHVybiBob3N0IGluICgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcsICc6OjEnKVxuXG5cbmRlZiBwb3N0KG9yaWdpbiwgZW5kcG9pbnQsIHRva2VuLCBwYXlsb2FkKTpcbiAgICBpZiBub3QgYWxsb3dlZF9vcmlnaW4ob3JpZ2luKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgc2V0dXAgbGluayBtdXN0IHVzZSBhIHNlY3VyZSBIVFRQUyBzZXJ2ZXIuJylcbiAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChvcmlnaW4gKyAnL2NvbXB1dGVfZmxlZXQvJyArIGVuZHBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1qc29uLmR1bXBzKHBheWxvYWQpLmVuY29kZSgpLCBtZXRob2Q9J1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17J0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyB0b2tlbiwgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogQlJPV1NFUl9VQSwgJ25ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nJzogJzEnfSlcbiAgICB0cnk6XG4gICAgICAgIHdpdGggSFRUUC5vcGVuKHJlcXVlc3QsIHRpbWVvdXQ9MjApIGFzIHJlc3BvbnNlOlxuICAgICAgICAgICAgYm9keSA9IHJlc3BvbnNlLnJlYWQoNjU1MzcpXG4gICAgICAgICAgICBpZiBsZW4oYm9keSkgPiA2NTUzNjpcbiAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZSBzZXR1cCBzZXJ2ZXIgcmV0dXJuZWQgYW4gaW52YWxpZCByZXNwb25zZS4nKVxuICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMoYm9keSlcbiAgICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgaWYgZXJyb3IuY29kZSBpbiAoNDAxLCA0MDMsIDQxMCk6XG4gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoaXMgc2V0dXAgbGluayBoYXMgZXhwaXJlZCwgd2FzIHJlcGxhY2VkLCBvciBiZWxvbmdzIHRvIGFub3RoZXIgbWFjaGluZS4gQXNrIHlvdXIgYWRtaW5pc3RyYXRvciBmb3IgYSBuZXcgbGluay4nKSBmcm9tIE5vbmVcbiAgICAgICAgcmFpc2UgUmV0cnlhYmxlRXJyb3IoJ1RoZSBzZXR1cCBzZXJ2ZXIgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuIFJ1biB0aGUgc2FtZSBpbnN0YWxsZXIgYWdhaW4gaW4gYSBmZXcgbWludXRlcy4nKSBmcm9tIE5vbmVcbiAgICBleGNlcHQgdXJsbGliLmVycm9yLlVSTEVycm9yOlxuICAgICAgICByYWlzZSBSZXRyeWFibGVFcnJvcignQ2Fubm90IHJlYWNoIHRoZSBzZXR1cCBzZXJ2ZXIuIENoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgcnVuIHRoZSBpbnN0YWxsZXIgYWdhaW4uJykgZnJvbSBOb25lXG5cblxuZGVmIGhhcmR3YXJlKCk6XG4gICAgdG90YWxfa2IgPSBuZXh0KGludChsaW5lLnNwbGl0KClbMV0pIGZvciBsaW5lIGluIFBhdGgoJy9wcm9jL21lbWluZm8nKS5yZWFkX3RleHQoKS5zcGxpdGxpbmVzKCkgaWYgbGluZS5zdGFydHN3aXRoKCdNZW1Ub3RhbDonKSlcbiAgICByZXNlcnZhdGlvbiA9IFBhdGgoJy9zeXMvZnMvY2dyb3VwL2NpLnNsaWNlL21lbW9yeS5tYXgnKVxuICAgIHJlc2VydmVkID0gcmVzZXJ2YXRpb24ucmVhZF90ZXh0KCkuc3RyaXAoKSBpZiByZXNlcnZhdGlvbi5leGlzdHMoKSBlbHNlICcnXG4gICAgcmV0dXJuIHsnbWVtb3J5X2J5dGVzJzogdG90YWxfa2IgKiAxMDI0LCAnbG9naWNhbF9jcHVzJzogb3MuY3B1X2NvdW50KCkgb3IgMSxcbiAgICAgICAgICAgICdjaV9tZW1vcnlfcmVzZXJ2ZWRfYnl0ZXMnOiBpbnQocmVzZXJ2ZWQpIGlmIHJlc2VydmVkLmlzZGlnaXQoKSBlbHNlIE5vbmV9XG5cblxuZGVmIGRpcmVjdF9pZGVudGl0eShpbnZpdGF0aW9uKTpcbiAgICBpZiBub3QgaW52aXRhdGlvbi5nZXQoJ3dvcmtlcl9pZCcpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHRyeTpcbiAgICAgICAgc3RhdHVzID0gcG9zdChpbnZpdGF0aW9uWydvcmlnaW4nXSwgJ3N0YXR1cycsIGludml0YXRpb25bJ3Rva2VuJ10sIHt9KVxuICAgIGV4Y2VwdCBSZXRyeWFibGVFcnJvcjpcbiAgICAgICAgcmFpc2VcbiAgICBleGNlcHQgUnVudGltZUVycm9yOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIGlmIHN0YXR1cy5nZXQoJ3dvcmtlcl9pZCcpICE9IGludml0YXRpb25bJ3dvcmtlcl9pZCddOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJldHVybiB7XG4gICAgICAgICdvcmlnaW4nOiBpbnZpdGF0aW9uWydvcmlnaW4nXSxcbiAgICAgICAgJ3Rva2VuJzogaW52aXRhdGlvblsndG9rZW4nXSxcbiAgICAgICAgJ3dvcmtlcl9pZCc6IGludml0YXRpb25bJ3dvcmtlcl9pZCddLFxuICAgICAgICAnd29ya2VyX25hbWUnOiBzdGF0dXMuZ2V0KCd3b3JrZXJfbmFtZScpLFxuICAgIH1cblxuXG5kZWYgc3RvcmVfaWRlbnRpdHkoaWRlbnRpdHkpOlxuICAgIHRlbXBvcmFyeSA9IFJPT1QgLyAnaWRlbnRpdHkucGVuZGluZydcbiAgICB0ZW1wb3Jhcnkud3JpdGVfdGV4dChqc29uLmR1bXBzKGlkZW50aXR5KSlcbiAgICB0ZW1wb3JhcnkuY2htb2QoMG82MDApXG4gICAgdGVtcG9yYXJ5LnJlcGxhY2UoUk9PVCAvICdpZGVudGl0eS5qc29uJylcbiAgICByZXR1cm4gaWRlbnRpdHlcblxuXG5kZWYgZW5yb2xsbWVudChzb3VyY2UpOlxuICAgIGludml0YXRpb24gPSBqc29uLmxvYWRzKChzb3VyY2UgLyAnaW52aXRhdGlvbi5qc29uJykucmVhZF90ZXh0KCkpXG4gICAgaWRlbnRpdHkgPSBST09UIC8gJ2lkZW50aXR5Lmpzb24nXG4gICAgaWYgaWRlbnRpdHkuZXhpc3RzKCk6XG4gICAgICAgIGV4aXN0aW5nID0ganNvbi5sb2FkcyhpZGVudGl0eS5yZWFkX3RleHQoKSlcbiAgICAgICAgc3RhdHVzID0gcG9zdChleGlzdGluZ1snb3JpZ2luJ10sICdzdGF0dXMnLCBleGlzdGluZ1sndG9rZW4nXSwge30pXG4gICAgICAgIGlmIGV4aXN0aW5nWydvcmlnaW4nXSAhPSBpbnZpdGF0aW9uWydvcmlnaW4nXSBvciBzdGF0dXNbJ3dvcmtlcl9pZCddICE9IGludml0YXRpb25bJ3dvcmtlcl9pZCddOlxuICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGlzIGNvbXB1dGVyIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGFub3RoZXIgc2VydmVyLiBBc2sgeW91ciBhZG1pbmlzdHJhdG9yIGJlZm9yZSBjaGFuZ2luZyBpdC4nKVxuICAgICAgICByZXR1cm4gZXhpc3RpbmdcbiAgICBhcHByb3ZlZCA9IGRpcmVjdF9pZGVudGl0eShpbnZpdGF0aW9uKVxuICAgIGlmIGFwcHJvdmVkOlxuICAgICAgICByZXR1cm4gc3RvcmVfaWRlbnRpdHkoYXBwcm92ZWQpXG4gICAgY2xhaW0gPSBST09UIC8gJ3NldHVwLWNsYWltJ1xuICAgIGlmIG5vdCBjbGFpbS5leGlzdHMoKTpcbiAgICAgICAgY2xhaW0ud3JpdGVfdGV4dChzdHIodXVpZC51dWlkNCgpKSlcbiAgICAgICAgY2xhaW0uY2htb2QoMG82MDApXG4gICAgcmVzdWx0ID0gcG9zdChpbnZpdGF0aW9uWydvcmlnaW4nXSwgJ3NldHVwL3JlZGVlbScsIGludml0YXRpb25bJ3Rva2VuJ10sIHsnY2xhaW1faWQnOiBjbGFpbS5yZWFkX3RleHQoKSwgJ2hhcmR3YXJlJzogaGFyZHdhcmUoKX0pXG4gICAgcmV0dXJuIHN0b3JlX2lkZW50aXR5KHJlc3VsdClcblxuXG5kZWYgd2FpdF91bnRpbF9yZWFkeShpZGVudGl0eSk6XG4gICAgcHJpbnQoJ0Nvbm5lY3RpbmcgYW5kIGRvd25sb2FkaW5nIHRoZSB3b3JrZXIgc29mdHdhcmUuIFRoaXMgY2FuIHRha2Ugc2V2ZXJhbCBtaW51dGVzLi4uJywgZmx1c2g9VHJ1ZSlcbiAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyA2MDBcbiAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpIDwgZGVhZGxpbmU6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHN0YXR1cyA9IHBvc3QoaWRlbnRpdHlbJ29yaWdpbiddLCAnc3RhdHVzJywgaWRlbnRpdHlbJ3Rva2VuJ10sIHt9KVxuICAgICAgICBleGNlcHQgUmV0cnlhYmxlRXJyb3I6XG4gICAgICAgICAgICB0aW1lLnNsZWVwKDMpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICBzdGF0ZSA9IHN0YXR1c1snc3RhdGUnXVxuICAgICAgICBpZiBzdGF0ZSBpbiAoJ3JlYWR5JywgJ2J1c3knLCAnbG93IGJhdHRlcnknLCAnZHJhaW5pbmcnLCAncGF1c2VkJywgJ3dhaXRpbmcgZm9yIGhvc3QgbWVhc3VyZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICd1c2luZyBiYXR0ZXJ5JywgJ2NvbXB1dGVyIGluIHVzZScsICdob3N0IGJ1c3knLCAnbG93IGhvc3QgbWVtb3J5JywgJ293bmVyIHJlc291cmNlIGxpbWl0Jyk6XG4gICAgICAgICAgICBwcmludCgnXFxuQ29ubmVjdGVkISBUaGlzIGNvbXB1dGVyIGlzIG5vdyBhbiBvZmZpY2lhbCB3b3JrZXIuJywgZmx1c2g9VHJ1ZSlcbiAgICAgICAgICAgIGlmIHN0YXRlIGluICgnbG93IGJhdHRlcnknLCAnZHJhaW5pbmcnKTpcbiAgICAgICAgICAgICAgICBwcmludCgnTmV3IHRhc2tzIGFyZSBwYXVzZWQ6ICcgKyBzdGF0ZSArICcuJywgZmx1c2g9VHJ1ZSlcbiAgICAgICAgICAgIHByaW50KCdZb3UgY2FuIGNsb3NlIHRoaXMgd2luZG93IGFuZCBkZWxldGUgdGhlIGRvd25sb2FkZWQgaW5zdGFsbGVyLiBUaGUgd29ya2VyIHN0YXJ0cyBhdXRvbWF0aWNhbGx5IGFmdGVyIGEgcmVzdGFydC4nLCBmbHVzaD1UcnVlKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIGlmIHN0YXR1cy5nZXQoJ3VwZGF0ZV9lcnJvcicpOlxuICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgY29tcHV0ZXIgY29ubmVjdGVkLCBidXQgdGhlIHdvcmtlciBzb2Z0d2FyZSBjb3VsZCBub3Qgc3RhcnQuIFlvdXIgYWRtaW5pc3RyYXRvciBjYW4gc2VlIHRoZSB1cGRhdGUgZmFpbHVyZSBpbiBDb21wdXRlIFdvcmtlcnMuJylcbiAgICAgICAgdGltZS5zbGVlcCgzKVxuICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIGNvbXB1dGVyIGlzIGVucm9sbGVkLCBidXQgdGhlIGZpcnN0IGRvd25sb2FkIGlzIHN0aWxsIHRha2luZyB0aW1lLiBBc2sgeW91ciBhZG1pbmlzdHJhdG9yIHRvIGNoZWNrIENvbXB1dGUgV29ya2VyczsgeW91IGNhbiBzYWZlbHkgcmVydW4gdGhpcyBpbnN0YWxsZXIuJylcblxuXG5kZWYgbWFpbigpOlxuICAgIHNvdXJjZSA9IFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnRcbiAgICBpbnZpdGF0aW9uID0ganNvbi5sb2Fkcygoc291cmNlIC8gJ2ludml0YXRpb24uanNvbicpLnJlYWRfdGV4dCgpKVxuICAgIGNsYWltID0gUk9PVCAvICdzZXR1cC1jbGFpbSdcbiAgICBhbHJlYWR5X2Vucm9sbGVkID0gKFJPT1QgLyAnaWRlbnRpdHkuanNvbicpLmV4aXN0cygpXG4gICAgaWYgYWxyZWFkeV9lbnJvbGxlZDpcbiAgICAgICAgZXhpc3RpbmcgPSBlbnJvbGxtZW50KHNvdXJjZSlcbiAgICAgICAgYXNzaWdubWVudCA9IHBvc3QoZXhpc3RpbmdbJ29yaWdpbiddLCAnc3RhdHVzJywgZXhpc3RpbmdbJ3Rva2VuJ10sIHt9KVxuICAgICAgICBpZiBhc3NpZ25tZW50WydzdGF0ZSddIG5vdCBpbiAoJ3Jldm9rZWQnLCAndXBkYXRlIGZhaWxlZCcpOlxuICAgICAgICAgICAgd2FpdF91bnRpbF9yZWFkeShleGlzdGluZylcbiAgICAgICAgICAgIHJldHVyblxuICAgIGVsc2U6XG4gICAgICAgIGFwcHJvdmVkID0gZGlyZWN0X2lkZW50aXR5KGludml0YXRpb24pXG4gICAgICAgIGlmIGFwcHJvdmVkOlxuICAgICAgICAgICAgYXNzaWdubWVudCA9IHBvc3QoYXBwcm92ZWRbJ29yaWdpbiddLCAnc3RhdHVzJywgYXBwcm92ZWRbJ3Rva2VuJ10sIHt9KVxuICAgICAgICBlbHNlOlxuICAgICAgICAgICAgYXNzaWdubWVudCA9IHBvc3QoaW52aXRhdGlvblsnb3JpZ2luJ10sICdzZXR1cC9jaGVjaycsIGludml0YXRpb25bJ3Rva2VuJ10sIHsnY2xhaW1faWQnOiBjbGFpbS5yZWFkX3RleHQoKSBpZiBjbGFpbS5leGlzdHMoKSBlbHNlIE5vbmV9KVxuICAgIHByaW50KCdBcHByb3ZlZC4gU3RhcnRpbmcgc2V0dXAgb24gdGhpcyBjb21wdXRlci4uLicsIGZsdXNoPVRydWUpXG4gICAgcHJpbnQoJ0NoZWNraW5nIHRoaXMgY29tcHV0ZXIgaXMgcmVhZHkuLi4nLCBmbHVzaD1UcnVlKVxuICAgIHRvdGFsX21iID0gaGFyZHdhcmUoKVsnbWVtb3J5X2J5dGVzJ10gLy8gKDEwMjQgKiAxMDI0KVxuICAgIGlmIHRvdGFsX21iIDwgMjA0ODpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGlzIGNvbXB1dGVyIG5lZWRzIGF0IGxlYXN0IDIgR2lCIG9mIFJBTS4nKVxuICAgIGlmIGFzc2lnbm1lbnQuZ2V0KCdtZW1vcnlfbWInKSBhbmQgdG90YWxfbWIgPCBhc3NpZ25tZW50WydtZW1vcnlfbWInXTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGlzIGNvbXB1dGVyIG5lZWRzIGEgc21hbGxlciB3b3JrZXIgY29uZmlndXJhdGlvbi4gQXNrIHlvdXIgYWRtaW5pc3RyYXRvciB0byBsb3dlciBpdHMgbWVtb3J5IGFsbG9jYXRpb24sIHRoZW4gcmVydW4gc2V0dXAuJylcbiAgICBwcmludCgnUHJlcGFyaW5nIHRoaXMgY29tcHV0ZXIuLi4nLCBmbHVzaD1UcnVlKVxuICAgIHByZXBhcmUoKVxuICAgIHByaW50KCckIG1rZGlyIC1wIC9vcHQvZGdlLXdvcmtlciAmJiBjaG1vZCA3MDAgL29wdC9kZ2Utd29ya2VyJywgZmx1c2g9VHJ1ZSlcbiAgICBST09ULm1rZGlyKG1vZGU9MG83MDAsIHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBST09ULmNobW9kKDBvNzAwKVxuICAgIHdpbmRvd3MgPSBvcy5lbnZpcm9uLmdldCgnREdFX1dJTkRPV1NfQUNUSVZJVFknKVxuICAgIGlmIHdpbmRvd3M6XG4gICAgICAgIChST09UIC8gJ2hvc3QtYWN0aXZpdHktcGF0aC5qc29uJykud3JpdGVfdGV4dChqc29uLmR1bXBzKHdpbmRvd3MpKVxuICAgIHByaW50KCdTYXZpbmcgdGhpcyBjb21wdXRlcuKAmXMgY29ubmVjdGlvbi4uLicsIGZsdXNoPVRydWUpXG4gICAgaWRlbnRpdHkgPSBlbnJvbGxtZW50KHNvdXJjZSlcbiAgICAoc291cmNlIC8gJ2Vucm9sbG1lbnQuanNvbicpLndyaXRlX3RleHQoanNvbi5kdW1wcyhpZGVudGl0eSkpXG4gICAgKFJPT1QgLyAnZmFpbHVyZS5qc29uJykudW5saW5rKG1pc3Npbmdfb2s9VHJ1ZSlcbiAgICBwcmludCgnSW5zdGFsbGluZyB0aGUgYmFja2dyb3VuZCB3b3JrZXIuLi4nLCBmbHVzaD1UcnVlKVxuICAgIHByaW50KCckIHB5dGhvbjMgLXUgc2V0dXAucHknLCBmbHVzaD1UcnVlKVxuICAgIHN1YnByb2Nlc3MucnVuKFtzeXMuZXhlY3V0YWJsZSwgJy11Jywgc3RyKHNvdXJjZSAvICdzZXR1cC5weScpXSwgY3dkPXNvdXJjZSwgY2hlY2s9VHJ1ZSlcbiAgICBpZiBhbHJlYWR5X2Vucm9sbGVkOlxuICAgICAgICBwcmludCgnJCBzeXN0ZW1jdGwgcmVzdGFydCBkZ2Utd29ya2VyLnNlcnZpY2UnLCBmbHVzaD1UcnVlKVxuICAgICAgICBzdWJwcm9jZXNzLnJ1bihbJ3N5c3RlbWN0bCcsICdyZXN0YXJ0JywgJ2RnZS13b3JrZXIuc2VydmljZSddLCBjaGVjaz1UcnVlKVxuICAgIHByaW50KCckIHN5c3RlbWN0bCBkaXNhYmxlIC0tbm93IGhlYXZ5LXByb2Nlc3Npbmcuc2VydmljZScsIGZsdXNoPVRydWUpXG4gICAgc3VicHJvY2Vzcy5ydW4oWydzeXN0ZW1jdGwnLCAnZGlzYWJsZScsICctLW5vdycsICdoZWF2eS1wcm9jZXNzaW5nLnNlcnZpY2UnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTClcbiAgICB3YWl0X3VudGlsX3JlYWR5KGlkZW50aXR5KVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgdHJ5OlxuICAgICAgICBsb2NrX3BhdGggPSBQYXRoKCcvcnVuL2RnZS13b3JrZXItaW5zdGFsbC5sb2NrJylcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgbG9ja19maWxlID0gbG9ja19wYXRoLm9wZW4oJ3cnKVxuICAgICAgICBleGNlcHQgT1NFcnJvcjpcbiAgICAgICAgICAgIGxvY2tfcGF0aCA9IFBhdGgoJy90bXAvZGdlLXdvcmtlci1pbnN0YWxsLmxvY2snKVxuICAgICAgICAgICAgbG9ja19maWxlID0gbG9ja19wYXRoLm9wZW4oJ3cnKVxuICAgICAgICB3aXRoIGxvY2tfZmlsZSBhcyBsb2NrOlxuICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgIGZjbnRsLmZsb2NrKGxvY2ssIGZjbnRsLkxPQ0tfRVggfCBmY250bC5MT0NLX05CKVxuICAgICAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvcjpcbiAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1NldHVwIGlzIGFscmVhZHkgcnVubmluZyBpbiBhbm90aGVyIHdpbmRvdy4nKSBmcm9tIE5vbmVcbiAgICAgICAgICAgIG1haW4oKVxuICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBPU0Vycm9yLCBWYWx1ZUVycm9yLCBLZXlFcnJvciwgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IpIGFzIGVycm9yOlxuICAgICAgICBtZXNzYWdlID0gc3RyKGVycm9yKSBpZiBpc2luc3RhbmNlKGVycm9yLCBSdW50aW1lRXJyb3IpIGVsc2UgJ1NldHVwIGNvdWxkIG5vdCBmaW5pc2guIENoZWNrIHlvdXIgY29ubmVjdGlvbiBhbmQgcmVydW4gdGhlIHNhbWUgaW5zdGFsbGVyLiBJZiBpdCBzdGlsbCBmYWlscywgYXNrIHlvdXIgYWRtaW5pc3RyYXRvciB0byBjaGVjayB0aGlzIG1hY2hpbmUuJ1xuICAgICAgICBwcmludCgnXFxuU2V0dXAgbmVlZHMgYXR0ZW50aW9uOiAnICsgbWVzc2FnZSwgZmx1c2g9VHJ1ZSlcbiAgICAgICAgcHJpbnQoJ1xcblNldHVwIG5lZWRzIGF0dGVudGlvbjogJyArIG1lc3NhZ2UsIGZpbGU9c3lzLnN0ZGVycilcbiAgICAgICAgc3lzLmV4aXQoMSlcbiIsImluc3RhbGxfbWFjb3MucHkiOiJcIlwiXCJDcmVhdGUgYSBMaW1hIFVidW50dSBWTSBhbmQgcnVuIHRoZSBMaW51eCBpbnN0YWxsZXIgaW5zaWRlIGl0LlwiXCJcIlxuaW1wb3J0IGpzb25cbmltcG9ydCBzZWNyZXRzXG5pbXBvcnQgb3NcbmltcG9ydCBwbGlzdGxpYlxuaW1wb3J0IHNobGV4XG5pbXBvcnQgc2h1dGlsXG5pbXBvcnQgc2lnbmFsXG5pbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHN5c1xuaW1wb3J0IHRlbXBmaWxlXG5pbXBvcnQgdGhyZWFkaW5nXG5pbXBvcnQgdGltZVxuZnJvbSBwYXRobGliIGltcG9ydCBQYXRoXG5cbmZyb20gc2V0dXBfbG9nX3JlcG9ydGVyIGltcG9ydCBTZXR1cExvZ1JlcG9ydGVyXG5cbklOU1RBTkNFID0gJ2RnZS13b3JrZXInXG5URU1QTEFURSA9ICd0ZW1wbGF0ZTovL3VidW50dS0yNC4wNCdcblBST1hZX1BPUlQgPSAxODc4OVxuUFJPWFlfTEFCRUwgPSAnY29tLmRnZS5jb21wdXRlLXN0b3JhZ2UtcHJveHknXG5WTV9MQUJFTCA9ICdjb20uZGdlLmNvbXB1dGUtd29ya2VyLXZtJ1xuIyBBIHB5dGhvbiBpbnRlcnByZXRlciBydW5uaW5nIGEgaGVscGVyIGNvcHksIG5ldmVyIGFuIGVkaXRvciBvciB0ZXN0IG5hbWluZyB0aGUgZmlsZS5cbkhFTFBFUl9QUk9DRVNTID0gcideW14gXSpbUHBdeXRob25bXiBdKiAuKi9tYWNvc19yMl9wcm94eVxcLnB5JCdcbk1BQ19CSU4gPSAoJy9vcHQvaG9tZWJyZXcvYmluJywgJy91c3IvbG9jYWwvYmluJylcbkJSRVdfSU5TVEFMTCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vSG9tZWJyZXcvaW5zdGFsbC9IRUFEL2luc3RhbGwuc2gnXG5CUkVXX0lOU1RBTExfVElNRU9VVCA9IDEwICogNjBcbkdVRVNUX0lOU1RBTExfRklMRVMgPSAoXG4gICAgJ2luc3RhbGwucHknLCAnc2V0dXAucHknLCAnYWdlbnQucHknLCAnbGF1bmNoZXIucHknLCAncHJlcGFyZV9tYWNoaW5lLnB5JywgJ3VuaW5zdGFsbC5weScsXG4pXG5HVUVTVF9ESVIgPSAnL3RtcC9kZ2Utd29ya2VyLWluc3RhbGwnXG5SRVBPUlRFUiA9IE5vbmVcblxuXG5kZWYgc3RhdHVzKG1lc3NhZ2UpOlxuICAgIHByaW50KG1lc3NhZ2UsIGZsdXNoPVRydWUpXG4gICAgaWYgUkVQT1JURVI6XG4gICAgICAgIFJFUE9SVEVSLnJlY29yZChtZXNzYWdlKVxuXG5cbmRlZiByZWxheV9ob21lYnJld19vdXRwdXQoc3RyZWFtKTpcbiAgICBmb3IgbGluZSBpbiBzdHJlYW06XG4gICAgICAgIHByaW50KGxpbmUsIGVuZD0nJywgZmx1c2g9VHJ1ZSlcbiAgICAgICAgaWYgUkVQT1JURVI6XG4gICAgICAgICAgICBSRVBPUlRFUi5yZWNvcmQobGluZSlcblxuXG5kZWYgcHJlcGVuZF9wYXRoKGRpcmVjdG9yeSk6XG4gICAgaWYgbm90IGRpcmVjdG9yeSBvciBub3QgUGF0aChkaXJlY3RvcnkpLmlzX2RpcigpOlxuICAgICAgICByZXR1cm5cbiAgICBjdXJyZW50ID0gb3MuZW52aXJvbi5nZXQoJ1BBVEgnLCAnJylcbiAgICBwYXJ0cyA9IGN1cnJlbnQuc3BsaXQoJzonKSBpZiBjdXJyZW50IGVsc2UgW11cbiAgICBpZiBkaXJlY3Rvcnkgbm90IGluIHBhcnRzOlxuICAgICAgICBvcy5lbnZpcm9uWydQQVRIJ10gPSBkaXJlY3RvcnkgKyAoKCc6JyArIGN1cnJlbnQpIGlmIGN1cnJlbnQgZWxzZSAnJylcblxuXG5kZWYgYWRkX21hY19wcmVmaXhlcygpOlxuICAgIGZvciBkaXJlY3RvcnkgaW4gKCcvdXNyL2xvY2FsL2JpbicsICcvb3B0L2hvbWVicmV3L2JpbicpOlxuICAgICAgICBwcmVwZW5kX3BhdGgoZGlyZWN0b3J5KVxuXG5cbmRlZiBydW4oYXJncywgKiprd2FyZ3MpOlxuICAgIHByaW50KCckICcgKyBzaGxleC5qb2luKHN0cihpdGVtKSBmb3IgaXRlbSBpbiBhcmdzKSwgZmx1c2g9VHJ1ZSlcbiAgICByZXR1cm4gc3VicHJvY2Vzcy5ydW4oYXJncywgY2hlY2s9VHJ1ZSwgKiprd2FyZ3MpXG5cblxuZGVmIGhvc3RfcmVzb3VyY2VzKCk6XG4gICAgdHJ5OlxuICAgICAgICBtZW1vcnkgPSBpbnQoc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydzeXNjdGwnLCAnLW4nLCAnaHcubWVtc2l6ZSddKSlcbiAgICAgICAgY3B1cyA9IGludChzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3N5c2N0bCcsICctbicsICdody5uY3B1J10pKVxuICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLCBPU0Vycm9yKTpcbiAgICAgICAgbWVtb3J5ID0gb3Muc3lzY29uZignU0NfUEFHRV9TSVpFJykgKiBvcy5zeXNjb25mKCdTQ19QSFlTX1BBR0VTJylcbiAgICAgICAgY3B1cyA9IG9zLmNwdV9jb3VudCgpIG9yIDJcbiAgICByZXR1cm4gbWVtb3J5LCBjcHVzXG5cblxuZGVmIHZtX3NpemUobWVtb3J5X2J5dGVzLCBjcHVzKTpcbiAgICAjIEJvdW5kIHRoZSBWTSBpdHNlbGYgYXMgd2VsbCBhcyB0YXNrIGNvbnRhaW5lcnM7IGxlYXZlIFJBTSBmb3IgaW50ZXJhY3RpdmUgYXBwcy5cbiAgICBob3N0X2dpYiA9IG1heChtZW1vcnlfYnl0ZXMsIDEpIC8vICgxMDI0ICoqIDMpXG4gICAgcmV0dXJuIG1heCgyLCBtaW4oNCwgaG9zdF9naWIgLy8gMikpLCBtYXgoMSwgbWluKDQsIGNwdXMgLy8gMikpXG5cblxuZGVmIGluc3RhbmNlX25hbWVzKCk6XG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydsaW1hY3RsJywgJ2xpc3QnLCAnLXEnXSwgY2hlY2s9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgdGV4dD1UcnVlKVxuICAgIHJldHVybiB7bGluZS5zdHJpcCgpIGZvciBsaW5lIGluIHJlc3VsdC5zdGRvdXQuc3BsaXRsaW5lcygpIGlmIGxpbmUuc3RyaXAoKX1cblxuXG5kZWYgZmluZF9icmV3KCk6XG4gICAgYWRkX21hY19wcmVmaXhlcygpXG4gICAgZm91bmQgPSBzaHV0aWwud2hpY2goJ2JyZXcnKVxuICAgIGlmIGZvdW5kOlxuICAgICAgICByZXR1cm4gZm91bmRcbiAgICBmb3IgZGlyZWN0b3J5IGluIE1BQ19CSU46XG4gICAgICAgIGNhbmRpZGF0ZSA9IFBhdGgoZGlyZWN0b3J5KSAvICdicmV3J1xuICAgICAgICBpZiBvcy5hY2Nlc3MoY2FuZGlkYXRlLCBvcy5YX09LKTpcbiAgICAgICAgICAgIHByZXBlbmRfcGF0aChkaXJlY3RvcnkpXG4gICAgICAgICAgICByZXR1cm4gc3RyKGNhbmRpZGF0ZSlcbiAgICByZXR1cm4gTm9uZVxuXG5cbmRlZiBob21lYnJld19zY3JpcHRfc3RkaW4oZW52KTpcbiAgICBpZiBlbnYuZ2V0KCdTVURPX0FTS1BBU1MnKTpcbiAgICAgICAgcmV0dXJuIE5vbmVcbiAgICByZXR1cm4gb3BlbignL2Rldi90dHknLCAncmInKVxuXG5cbmRlZiBpbnN0YWxsX2hvbWVicmV3KCk6XG4gICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KClcbiAgICBlbnYucG9wKCdOT05JTlRFUkFDVElWRScsIE5vbmUpXG4gICAgZW52LnBvcCgnQ0knLCBOb25lKVxuICAgIGVudlsnSU5URVJBQ1RJVkUnXSA9ICcxJ1xuICAgIHN0YXR1cygnSW5zdGFsbGluZyBIb21lYnJldy4gbWFjT1MgbWF5IGFzayBmb3IgeW91ciBwYXNzd29yZC4uLicpXG4gICAgdHJ5OlxuICAgICAgICBzY3JpcHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2N1cmwnLCAnLS1jb25uZWN0LXRpbWVvdXQnLCAnMTUnLCAnLS1tYXgtdGltZScsICcxMjAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mc1NMJywgQlJFV19JTlNUQUxMXSlcbiAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcikgYXMgZXJyb3I6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICdDb3VsZCBub3QgZG93bmxvYWQgSG9tZWJyZXcuIENoZWNrIHRoZSBuZXR3b3JrIGFuZCBvcGVuIERvcmlhbiBHcmF5IFdvcmtlciBhZ2Fpbi4nXG4gICAgICAgICkgZnJvbSBlcnJvclxuICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0nZGdlLWhvbWVicmV3LScpIGFzIGRpcmVjdG9yeTpcbiAgICAgICAgaW5zdGFsbGVyID0gUGF0aChkaXJlY3RvcnkpIC8gJ2luc3RhbGwuc2gnXG4gICAgICAgIGluc3RhbGxlci53cml0ZV9ieXRlcyhzY3JpcHQpXG4gICAgICAgIGluc3RhbGxlci5jaG1vZCgwbzcwMClcbiAgICAgICAgaWYgZW52LmdldCgnU1VET19BU0tQQVNTJyk6XG4gICAgICAgICAgICB3cmFwcGVyID0gUGF0aChkaXJlY3RvcnkpIC8gJ3N1ZG8nXG4gICAgICAgICAgICB3cmFwcGVyLndyaXRlX3RleHQoJyMhL2Jpbi9iYXNoXFxuZXhlYyAvdXNyL2Jpbi9zdWRvIC1BIFwiJEBcIlxcbicpXG4gICAgICAgICAgICB3cmFwcGVyLmNobW9kKDBvNzAwKVxuICAgICAgICAgICAgZW52WydQQVRIJ10gPSBkaXJlY3RvcnkgKyAnOicgKyBlbnYuZ2V0KCdQQVRIJywgJycpXG4gICAgICAgIHN0YXR1cygnSG9tZWJyZXcgaW5zdGFsbGVyIGRvd25sb2FkZWQuIFN0YXJ0aW5nIGluc3RhbGxhdGlvbi4uLicpXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHN0ZGluID0gaG9tZWJyZXdfc2NyaXB0X3N0ZGluKGVudilcbiAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6XG4gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0hvbWVicmV3IG5lZWRzIGEgdGVybWluYWwgc28gbWFjT1MgY2FuIGFzayBmb3IgeW91ciBwYXNzd29yZC4gT3BlbiBUZXJtaW5hbCBhbmQgcnVuIHRoaXMgaW5zdGFsbGVyIGFnYWluLidcbiAgICAgICAgICAgICkgZnJvbSBlcnJvclxuICAgICAgICB0cnk6XG4gICAgICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbJy9iaW4vYmFzaCcsIHN0cihpbnN0YWxsZXIpXSwgc3RkaW49c3RkaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVRydWUsIGJ1ZnNpemU9MSwgZW52PWVudixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPXN0ZGluIGlzIE5vbmUpXG4gICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgICBpZiBzdGRpbjpcbiAgICAgICAgICAgICAgICBzdGRpbi5jbG9zZSgpXG4gICAgICAgIHJlYWRlciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJlbGF5X2hvbWVicmV3X291dHB1dCwgYXJncz0ocHJvY2Vzcy5zdGRvdXQsKSwgZGFlbW9uPVRydWUpXG4gICAgICAgIHJlYWRlci5zdGFydCgpXG4gICAgICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSArIEJSRVdfSU5TVEFMTF9USU1FT1VUXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHdoaWxlIHByb2Nlc3MucG9sbCgpIGlzIE5vbmU6XG4gICAgICAgICAgICAgICAgcmVtYWluaW5nID0gZGVhZGxpbmUgLSB0aW1lLm1vbm90b25pYygpXG4gICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nIDw9IDA6XG4gICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQocHJvY2Vzcy5hcmdzLCBCUkVXX0lOU1RBTExfVElNRU9VVClcbiAgICAgICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mud2FpdCh0aW1lb3V0PW1pbigxNSwgcmVtYWluaW5nKSlcbiAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZDpcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzKCdIb21lYnJldyBpcyBzdGlsbCBpbnN0YWxsaW5nLiBUaGlzIG1heSBpbmNsdWRlIEFwcGxlIENvbW1hbmQgTGluZSBUb29scyBhbmQgdGFrZSBzZXZlcmFsIG1pbnV0ZXMuLi4nKVxuICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOlxuICAgICAgICAgICAgICAgICAgICBvcy5raWxscGcocHJvY2Vzcy5waWQsIHNpZ25hbC5TSUdURVJNKVxuICAgICAgICAgICAgICAgIGVsc2U6XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MudGVybWluYXRlKClcbiAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICAgICAgICAgIHByb2Nlc3MudGVybWluYXRlKClcbiAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICBwcm9jZXNzLndhaXQodGltZW91dD01KVxuICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQ6XG4gICAgICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3Mua2lsbHBnKHByb2Nlc3MucGlkLCBzaWduYWwuU0lHS0lMTClcbiAgICAgICAgICAgICAgICAgICAgZWxzZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mua2lsbCgpXG4gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mua2lsbCgpXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy53YWl0KClcbiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyb3IsIHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQpOlxuICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ0hvbWVicmV3IGRpZCBub3QgZmluaXNoIHdpdGhpbiAxMCBtaW51dGVzLiBDaGVjayB0aGUgc2V0dXAgbG9nIGFuZCB5b3VyIE1hYyBuZXR3b3JrLCB0aGVuIHRyeSBhZ2Fpbi4nXG4gICAgICAgICAgICAgICAgKSBmcm9tIGVycm9yXG4gICAgICAgICAgICByYWlzZVxuICAgICAgICByZWFkZXIuam9pbih0aW1lb3V0PTUpXG4gICAgICAgIGlmIHByb2Nlc3MucmV0dXJuY29kZTpcbiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICAgICAnQ291bGQgbm90IGluc3RhbGwgSG9tZWJyZXcuIENoZWNrIHRoZSBzZXR1cCBsb2cgYWJvdmUsIHRoZW4gb3BlbiBEb3JpYW4gR3JheSBXb3JrZXIgYWdhaW4uJ1xuICAgICAgICAgICAgKVxuICAgIGlmIG5vdCBmaW5kX2JyZXcoKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxuICAgICAgICAgICAgJ0hvbWVicmV3IGZpbmlzaGVkIGJ1dCBicmV3IHdhcyBub3QgZm91bmQuIE9wZW4gRG9yaWFuIEdyYXkgV29ya2VyIGFnYWluLidcbiAgICAgICAgKVxuICAgIGFkZF9tYWNfcHJlZml4ZXMoKVxuXG5cbmRlZiBlbnN1cmVfYnJldygpOlxuICAgIGJyZXcgPSBmaW5kX2JyZXcoKVxuICAgIGlmIGJyZXc6XG4gICAgICAgIHJldHVybiBicmV3XG4gICAgaW5zdGFsbF9ob21lYnJldygpXG4gICAgYnJldyA9IGZpbmRfYnJldygpXG4gICAgaWYgbm90IGJyZXc6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSG9tZWJyZXcgaW5zdGFsbGVkIGJ1dCBicmV3IGlzIG5vdCBvbiBQQVRILiBPcGVuIERvcmlhbiBHcmF5IFdvcmtlciBhZ2Fpbi4nKVxuICAgIHJldHVybiBicmV3XG5cblxuZGVmIHB5dGhvbl91c2FibGUocGF0aCk6XG4gICAgaWYgbm90IHBhdGggb3Igbm90IG9zLmFjY2VzcyhwYXRoLCBvcy5YX09LKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oXG4gICAgICAgIFtwYXRoLCAnLWMnLCAnaW1wb3J0IHN5czsgYXNzZXJ0IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDExKSddLFxuICAgICAgICBjaGVjaz1GYWxzZSwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCxcbiAgICApXG4gICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5jb2RlID09IDBcblxuXG5kZWYgZmluZF9weXRob24oKTpcbiAgICBhZGRfbWFjX3ByZWZpeGVzKClcbiAgICBmb3VuZCA9IHNodXRpbC53aGljaCgncHl0aG9uMycpXG4gICAgaWYgcHl0aG9uX3VzYWJsZShmb3VuZCk6XG4gICAgICAgIHJldHVybiBmb3VuZFxuICAgIGZvciBkaXJlY3RvcnkgaW4gKCpNQUNfQklOLCAnL3Vzci9iaW4nKTpcbiAgICAgICAgY2FuZGlkYXRlID0gc3RyKFBhdGgoZGlyZWN0b3J5KSAvICdweXRob24zJylcbiAgICAgICAgaWYgcHl0aG9uX3VzYWJsZShjYW5kaWRhdGUpOlxuICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZVxuICAgIHJldHVybiBOb25lXG5cblxuZGVmIGVuc3VyZV9weXRob24oKTpcbiAgICBmb3VuZCA9IGZpbmRfcHl0aG9uKClcbiAgICBpZiBmb3VuZDpcbiAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgYnJldyA9IGVuc3VyZV9icmV3KClcbiAgICBwcmludCgnSW5zdGFsbGluZyBQeXRob24gMy4gVGhpcyBtYXkgdGFrZSBhIGZldyBtaW51dGVzLi4uJywgZmx1c2g9VHJ1ZSlcbiAgICBydW4oW2JyZXcsICdpbnN0YWxsJywgJ3B5dGhvbiddKVxuICAgIGFkZF9tYWNfcHJlZml4ZXMoKVxuICAgIGZvdW5kID0gZmluZF9weXRob24oKVxuICAgIGlmIG5vdCBmb3VuZDpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxuICAgICAgICAgICAgJ1B5dGhvbiAzLjExIG9yIG5ld2VyIGlzIHJlcXVpcmVkIGFuZCBjb3VsZCBub3QgYmUgaW5zdGFsbGVkLiBDaGVjayB0aGUgbmV0d29yayBhbmQgb3BlbiBEb3JpYW4gR3JheSBXb3JrZXIgYWdhaW4uJ1xuICAgICAgICApXG4gICAgcmV0dXJuIGZvdW5kXG5cblxuZGVmIGVuc3VyZV9saW1hY3RsKCk6XG4gICAgYWRkX21hY19wcmVmaXhlcygpXG4gICAgaWYgc2h1dGlsLndoaWNoKCdsaW1hY3RsJyk6XG4gICAgICAgIHJldHVyblxuICAgIGJyZXcgPSBlbnN1cmVfYnJldygpXG4gICAgc3RhdHVzKCdJbnN0YWxsaW5nIExpbWEgKExpbnV4IHZpcnR1YWwgbWFjaGluZSkuIFRoaXMgbWF5IHRha2UgYSBmZXcgbWludXRlcy4uLicpXG4gICAgcnVuKFticmV3LCAnaW5zdGFsbCcsICdsaW1hJ10pXG4gICAgYWRkX21hY19wcmVmaXhlcygpXG4gICAgaWYgbm90IHNodXRpbC53aGljaCgnbGltYWN0bCcpOlxuICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0xpbWEgaW5zdGFsbGVkIGJ1dCBsaW1hY3RsIGlzIG5vdCBvbiBQQVRILiBPcGVuIERvcmlhbiBHcmF5IFdvcmtlciBhZ2Fpbi4nKVxuXG5cbmRlZiBzdGFydF92bShtZW1vcnlfZ2liLCBjcHVzKTpcbiAgICBpZiBJTlNUQU5DRSBpbiBpbnN0YW5jZV9uYW1lcygpOlxuICAgICAgICBzdGF0dXMoJ1N0YXJ0aW5nIHRoZSBMaW51eCB3b3JrZXIgdmlydHVhbCBtYWNoaW5lLi4uJylcbiAgICAgICAgcnVuKFsnbGltYWN0bCcsICdzdGFydCcsICctLXR0eT1mYWxzZScsIElOU1RBTkNFXSlcbiAgICAgICAgcmV0dXJuXG4gICAgc3RhdHVzKCdDcmVhdGluZyBhIExpbnV4IHdvcmtlciB2aXJ0dWFsIG1hY2hpbmUuIFRoZSBmaXJzdCBkb3dubG9hZCBjYW4gdGFrZSBzZXZlcmFsIG1pbnV0ZXMuLi4nKVxuICAgIHJ1bihbJ2xpbWFjdGwnLCAnc3RhcnQnLCAnLS10dHk9ZmFsc2UnLCAnLS1uYW1lPScgKyBJTlNUQU5DRSwgJy0tcGxhaW4nLFxuICAgICAgICAgJy0tY3B1cz0nICsgc3RyKGNwdXMpLCAnLS1tZW1vcnk9JyArIHN0cihtZW1vcnlfZ2liKSwgVEVNUExBVEVdKVxuICAgIHN1cHBvcnQgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdBcHBsaWNhdGlvbiBTdXBwb3J0JyAvICdkZ2Utd29ya2VyJ1xuICAgIHN1cHBvcnQubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIChzdXBwb3J0IC8gJ293bmVkLXZtLmpzb24nKS53cml0ZV90ZXh0KGpzb24uZHVtcHMoeyduYW1lJzogSU5TVEFOQ0V9KSlcblxuXG5kZWYgeG1sX3RleHQodmFsdWUpOlxuICAgIHJldHVybiBzdHIodmFsdWUpLnJlcGxhY2UoJyYnLCAnJmFtcDsnKS5yZXBsYWNlKCc8JywgJyZsdDsnKS5yZXBsYWNlKCc+JywgJyZndDsnKVxuXG5cbmRlZiBpbnN0YWxsZXJfc291cmNlKCk6XG4gICAgcmV0dXJuIFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnRcblxuXG5kZWYgY29weV9ndWVzdF9maWxlKHNvdXJjZSwgbmFtZSk6XG4gICAgcGF0aCA9IHNvdXJjZSAvIG5hbWVcbiAgICBpZiBub3QgcGF0aC5leGlzdHMoKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdNYWMgd29ya2VyIGZpbGVzIGFyZSBtaXNzaW5nOiAnICsgbmFtZSlcbiAgICB3aXRoIHBhdGgub3BlbigncmInKSBhcyBoYW5kbGU6XG4gICAgICAgIHJ1bihbJ2xpbWFjdGwnLCAnc2hlbGwnLCBJTlNUQU5DRSwgJ3N1ZG8nLCAndGVlJywgR1VFU1RfRElSICsgJy8nICsgbmFtZV0sXG4gICAgICAgICAgICBzdGRpbj1oYW5kbGUsIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwpXG5cblxuZGVmIGluc3RhbGxfZ3Vlc3RfZnJvbV9hcHAoc291cmNlKTpcbiAgICBydW4oWydsaW1hY3RsJywgJ3NoZWxsJywgSU5TVEFOQ0UsICdzdWRvJywgJ3JtJywgJy1yZicsIEdVRVNUX0RJUl0pXG4gICAgcnVuKFsnbGltYWN0bCcsICdzaGVsbCcsIElOU1RBTkNFLCAnc3VkbycsICdta2RpcicsICctbScsICc3MDAnLCAnLXAnLCBHVUVTVF9ESVJdKVxuICAgIGZvciBuYW1lIGluICgqR1VFU1RfSU5TVEFMTF9GSUxFUywgJ2ludml0YXRpb24uanNvbicpOlxuICAgICAgICBjb3B5X2d1ZXN0X2ZpbGUoc291cmNlLCBuYW1lKVxuICAgIHJ1bihbJ2xpbWFjdGwnLCAnc2hlbGwnLCBJTlNUQU5DRSwgJ3N1ZG8nLCAncHl0aG9uMycsICctdScsIEdVRVNUX0RJUiArICcvaW5zdGFsbC5weSddKVxuXG5cbmRlZiBydW5fbGludXhfaW5zdGFsbGVyKHNjcmlwdCk6XG4gICAgc3RhdHVzKCdJbnN0YWxsaW5nIHRoZSB3b3JrZXIgaW5zaWRlIHRoZSBMaW51eCB2aXJ0dWFsIG1hY2hpbmUuLi4nKVxuICAgIHNvdXJjZSA9IGluc3RhbGxlcl9zb3VyY2UoKVxuICAgIGlmIChzb3VyY2UgLyAnaW52aXRhdGlvbi5qc29uJykuZXhpc3RzKCk6XG4gICAgICAgIGluc3RhbGxfZ3Vlc3RfZnJvbV9hcHAoc291cmNlKVxuICAgICAgICByZXR1cm5cbiAgICB3aXRoIFBhdGgoc2NyaXB0KS5vcGVuKCdyYicpIGFzIGhhbmRsZTpcbiAgICAgICAgcnVuKFsnbGltYWN0bCcsICdzaGVsbCcsIElOU1RBTkNFLCAnc3VkbycsICd0ZWUnLCAnL3RtcC9zZXR1cC13b3JrZXIuc2gnXSxcbiAgICAgICAgICAgIHN0ZGluPWhhbmRsZSwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTClcbiAgICBydW4oWydsaW1hY3RsJywgJ3NoZWxsJywgSU5TVEFOQ0UsICdzdWRvJywgJ2VudicsICdER0VfR1VFU1RfSU5TVEFMTD0xJyxcbiAgICAgICAgICdiYXNoJywgJy90bXAvc2V0dXAtd29ya2VyLnNoJ10pXG5cblxuZGVmIGhvbWVicmV3X3B5dGhvbigpOlxuICAgIFwiXCJcIkhvbWVicmV3J3MgcHl0aG9uMywgd2hpY2ggbGF1bmNoZCBjYW4ga2VlcCB1c2luZzsgb25lIGZyb20gUEFUSCBtYXkgYmUgYVxuICAgIHZpcnR1YWxlbnYgdGhlIG93bmVyIGxhdGVyIGRlbGV0ZXMuXCJcIlwiXG4gICAgZm9yIGRpcmVjdG9yeSBpbiBNQUNfQklOOlxuICAgICAgICBjYW5kaWRhdGUgPSBzdHIoUGF0aChkaXJlY3RvcnkpIC8gJ3B5dGhvbjMnKVxuICAgICAgICBpZiBweXRob25fdXNhYmxlKGNhbmRpZGF0ZSk6XG4gICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlXG4gICAgcmV0dXJuIE5vbmVcblxuXG5kZWYgaGVscGVyX3B5dGhvbihweXRob249Tm9uZSk6XG4gICAgcmV0dXJuIGhvbWVicmV3X3B5dGhvbigpIG9yIHB5dGhvbiBvciBmaW5kX3B5dGhvbigpIG9yICcvdXNyL2Jpbi9weXRob24zJ1xuXG5cbmRlZiByZWZyZXNoX2hvc3RfcHJveHkocHl0aG9uKTpcbiAgICBcIlwiXCJCcmluZ3MgYW4gZW5yb2xsZWQgTWFjJ3MgaGVscGVyIHVwIHRvIHRoaXMgYXBwJ3MgY29weTsgc2V0dXAgYWxvbmUgbmV2ZXIgcmV2aXNpdHMgaXQuXG5cbiAgICBUaGUgY29uZmlndXJlZCBpbnRlcnByZXRlciBzdGF5cyB1bmxlc3MgaXQgbm8gbG9uZ2VyIHJ1bnMgb3IgSG9tZWJyZXcncyBjYW4gcmVwbGFjZSBpdCxcbiAgICBzbyBsYXVuY2hpbmcgdGhlIGFwcCBmcm9tIGRpZmZlcmVudCBzaGVsbHMgbmV2ZXIgZmxpcHMgaXQgYmFjayBhbmQgZm9ydGguXG4gICAgXCJcIlwiXG4gICAgcGxpc3QgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdMYXVuY2hBZ2VudHMnIC8gKFBST1hZX0xBQkVMICsgJy5wbGlzdCcpXG4gICAgaWYgb3MuZ2V0ZXVpZCgpID09IDAgb3Igbm90IHBsaXN0LmV4aXN0cygpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICB3aXRoIHBsaXN0Lm9wZW4oJ3JiJykgYXMgaGFuZGxlOlxuICAgICAgICBjb25maWd1cmVkID0gKHBsaXN0bGliLmxvYWQoaGFuZGxlKS5nZXQoJ1Byb2dyYW1Bcmd1bWVudHMnKSBvciBbTm9uZV0pWzBdXG4gICAgcHJlZmVycmVkID0gaG9tZWJyZXdfcHl0aG9uKClcbiAgICBpbnN0YWxsZWQgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdBcHBsaWNhdGlvbiBTdXBwb3J0JyAvICdkZ2Utd29ya2VyJyAvICdtYWNvc19yMl9wcm94eS5weSdcbiAgICBzb3VyY2UgPSBQYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50IC8gJ21hY29zX3IyX3Byb3h5LnB5J1xuICAgIGN1cnJlbnQgPSBpbnN0YWxsZWQuZXhpc3RzKCkgYW5kIGluc3RhbGxlZC5yZWFkX2J5dGVzKCkgPT0gc291cmNlLnJlYWRfYnl0ZXMoKVxuICAgIGlmIGN1cnJlbnQgYW5kIHB5dGhvbl91c2FibGUoY29uZmlndXJlZCkgYW5kIGNvbmZpZ3VyZWQgPT0gKHByZWZlcnJlZCBvciBjb25maWd1cmVkKTpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgaW5zdGFsbF9ob3N0X3Byb3h5KGNvbmZpZ3VyZWQgaWYgcHl0aG9uX3VzYWJsZShjb25maWd1cmVkKSBlbHNlIHB5dGhvbilcbiAgICByZXR1cm4gVHJ1ZVxuXG5cbmRlZiBpbnN0YWxsX2hvc3RfcHJveHkocHl0aG9uPU5vbmUpOlxuICAgIHN0YXR1cygnU3RhcnRpbmcgYSBNYWMgbmV0d29yayBoZWxwZXIgc28gcGhvdG8gc3RvcmFnZSB1c2VzIHRoaXMgY29tcHV0ZXLigJlzIG5ldHdvcmsuLi4nKVxuICAgIHN1cHBvcnQgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdBcHBsaWNhdGlvbiBTdXBwb3J0JyAvICdkZ2Utd29ya2VyJ1xuICAgIHN1cHBvcnQubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIHRva2VuX3BhdGggPSBzdXBwb3J0IC8gJ2hlbHBlci10b2tlbidcbiAgICBpZiBub3QgdG9rZW5fcGF0aC5leGlzdHMoKTpcbiAgICAgICAgdG9rZW5fcGF0aC53cml0ZV90ZXh0KHNlY3JldHMudG9rZW5faGV4KDMyKSlcbiAgICAgICAgdG9rZW5fcGF0aC5jaG1vZCgwbzYwMClcbiAgICBkZXN0aW5hdGlvbiA9IHN1cHBvcnQgLyAnbWFjb3NfcjJfcHJveHkucHknXG4gICAgc2h1dGlsLmNvcHlmaWxlKFBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQgLyAnbWFjb3NfcjJfcHJveHkucHknLCBkZXN0aW5hdGlvbilcbiAgICBweXRob24gPSB4bWxfdGV4dChoZWxwZXJfcHl0aG9uKHB5dGhvbikpXG4gICAgYWdlbnRzID0gUGF0aC5ob21lKCkgLyAnTGlicmFyeScgLyAnTGF1bmNoQWdlbnRzJ1xuICAgIGFnZW50cy5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpXG4gICAgbG9nID0gUGF0aC5ob21lKCkgLyAnTGlicmFyeScgLyAnTG9ncycgLyAnZGdlLXN0b3JhZ2UtcHJveHkubG9nJ1xuICAgIGxvZy5wYXJlbnQubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIHBsaXN0ID0gYWdlbnRzIC8gKFBST1hZX0xBQkVMICsgJy5wbGlzdCcpXG4gICAgcGxpc3Qud3JpdGVfdGV4dCgnJyc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgXCItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU5cIiBcImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGRcIj5cbjxwbGlzdCB2ZXJzaW9uPVwiMS4wXCI+XG48ZGljdD5cbiAgPGtleT5MYWJlbDwva2V5PlxuICA8c3RyaW5nPicnJyArIFBST1hZX0xBQkVMICsgJycnPC9zdHJpbmc+XG4gIDxrZXk+UHJvZ3JhbUFyZ3VtZW50czwva2V5PlxuICA8YXJyYXk+XG4gICAgPHN0cmluZz4nJycgKyBweXRob24gKyAnJyc8L3N0cmluZz5cbiAgICA8c3RyaW5nPicnJyArIHhtbF90ZXh0KGRlc3RpbmF0aW9uKSArICcnJzwvc3RyaW5nPlxuICA8L2FycmF5PlxuICA8a2V5PlJ1bkF0TG9hZDwva2V5PlxuICA8dHJ1ZS8+XG4gIDxrZXk+S2VlcEFsaXZlPC9rZXk+XG4gIDx0cnVlLz5cbiAgPGtleT5TdGFuZGFyZE91dFBhdGg8L2tleT5cbiAgPHN0cmluZz4nJycgKyB4bWxfdGV4dChsb2cpICsgJycnPC9zdHJpbmc+XG4gIDxrZXk+U3RhbmRhcmRFcnJvclBhdGg8L2tleT5cbiAgPHN0cmluZz4nJycgKyB4bWxfdGV4dChsb2cpICsgJycnPC9zdHJpbmc+XG48L2RpY3Q+XG48L3BsaXN0PlxuJycnKVxuICAgIHN1YnByb2Nlc3MucnVuKFsnbGF1bmNoY3RsJywgJ3VubG9hZCcsIHN0cihwbGlzdCldLCBjaGVjaz1GYWxzZSwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTClcbiAgICAjIE9sZGVyIHdvcmtlciBhcHBzIHN0YXJ0ZWQgdGhlaXIgb3duIGNvcHksIHdoaWNoIGhlbGQgdGhlIHBvcnQgYW5kIGtlcHQgdGhpcyBvbmUgb3V0LlxuICAgIHN1YnByb2Nlc3MucnVuKFsncGtpbGwnLCAnLVUnLCBzdHIob3MuZ2V0dWlkKCkpLCAnLWYnLCBIRUxQRVJfUFJPQ0VTU10sIGNoZWNrPUZhbHNlLFxuICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwpXG4gICAgcnVuKFsnbGF1bmNoY3RsJywgJ2xvYWQnLCAnLXcnLCBzdHIocGxpc3QpXSlcblxuXG5kZWYgaW5zdGFsbF92bV9hdXRvc3RhcnQoKTpcbiAgICBcIlwiXCJTdGFydHMgdGhlIHdvcmtlciBWTSBhdCBsb2dpbjsgTGltYSBsZWF2ZXMgaXQgc3RvcHBlZCBhZnRlciB0aGUgTWFjIHJlc3RhcnRzLlxuXG4gICAgU3RhcnRpbmcgYSBydW5uaW5nIGluc3RhbmNlIGlzIGEgbm8tb3AsIHNvIGxvYWRpbmcgdGhlIGFnZW50IG5ldmVyIGRpc3R1cmJzIGEgbGl2ZSB3b3JrZXIuXG4gICAgXCJcIlwiXG4gICAgbGltYWN0bCA9IHNodXRpbC53aGljaCgnbGltYWN0bCcpXG4gICAgaWYgbm90IGxpbWFjdGw6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignbGltYWN0bCBpcyBub3Qgb24gUEFUSCwgc28gdGhlIHdvcmtlciBjYW5ub3Qgc3RhcnQgYXQgbG9naW4uJylcbiAgICBsb2cgPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdMb2dzJyAvICdkZ2Utd29ya2VyLXZtLmxvZydcbiAgICBsb2cucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSlcbiAgICBwbGlzdCA9IFBhdGguaG9tZSgpIC8gJ0xpYnJhcnknIC8gJ0xhdW5jaEFnZW50cycgLyAoVk1fTEFCRUwgKyAnLnBsaXN0JylcbiAgICBjb250ZW50ID0gcGxpc3RsaWIuZHVtcHMoe1xuICAgICAgICAnTGFiZWwnOiBWTV9MQUJFTCxcbiAgICAgICAgJ1Byb2dyYW1Bcmd1bWVudHMnOiBbbGltYWN0bCwgJ3N0YXJ0JywgJy0tdHR5PWZhbHNlJywgSU5TVEFOQ0VdLFxuICAgICAgICAnRW52aXJvbm1lbnRWYXJpYWJsZXMnOiB7J1BBVEgnOiAnOicuam9pbigoKk1BQ19CSU4sICcvdXNyL2JpbicsICcvYmluJywgJy91c3Ivc2JpbicsICcvc2JpbicpKX0sXG4gICAgICAgICdSdW5BdExvYWQnOiBUcnVlLFxuICAgICAgICAjIExpbWEgZGV0YWNoZXMgaXRzIGhvc3QgYWdlbnQ7IGtlZXAgbGF1bmNoZCBmcm9tIHJlYXBpbmcgaXQgd2hlbiBsaW1hY3RsIGV4aXRzLlxuICAgICAgICAnQWJhbmRvblByb2Nlc3NHcm91cCc6IFRydWUsXG4gICAgICAgICdTdGFuZGFyZE91dFBhdGgnOiBzdHIobG9nKSxcbiAgICAgICAgJ1N0YW5kYXJkRXJyb3JQYXRoJzogc3RyKGxvZyksXG4gICAgfSlcbiAgICBpZiBwbGlzdC5leGlzdHMoKSBhbmQgcGxpc3QucmVhZF9ieXRlcygpID09IGNvbnRlbnQ6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHN0YXR1cygnU3RhcnRpbmcgdGhlIHdvcmtlciB3aGVuZXZlciB5b3UgbG9nIGluIHRvIHRoaXMgTWFjLi4uJylcbiAgICBwbGlzdC5wYXJlbnQubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKVxuICAgIHBsaXN0LndyaXRlX2J5dGVzKGNvbnRlbnQpXG4gICAgc3VicHJvY2Vzcy5ydW4oWydsYXVuY2hjdGwnLCAndW5sb2FkJywgc3RyKHBsaXN0KV0sIGNoZWNrPUZhbHNlLCBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLCBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKVxuICAgIHJ1bihbJ2xhdW5jaGN0bCcsICdsb2FkJywgJy13Jywgc3RyKHBsaXN0KV0pXG4gICAgcmV0dXJuIFRydWVcblxuXG5kZWYgcmVmcmVzaF92bV9hdXRvc3RhcnQoKTpcbiAgICBcIlwiXCJHaXZlcyBhIE1hYyBzZXQgdXAgYmVmb3JlIHRoZSBsb2dpbiBhZ2VudCBleGlzdGVkIGl0cyBhZ2VudDsgc2V0dXAgYWxvbmUgbmV2ZXIgcmV2aXNpdHMgaXQuXG5cbiAgICBDaGVja3MgZm9yIHRoZSBWTSBpdHNlbGYsIHNpbmNlIHNldHVwcyBiZWZvcmUgb3duZWQtdm0uanNvbiBuZXZlciB3cm90ZSB0aGF0IHJlY29yZC5cbiAgICBcIlwiXCJcbiAgICBpZiBvcy5nZXRldWlkKCkgPT0gMDpcbiAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgYWRkX21hY19wcmVmaXhlcygpXG4gICAgaWYgbm90IHNodXRpbC53aGljaCgnbGltYWN0bCcpIG9yIElOU1RBTkNFIG5vdCBpbiBpbnN0YW5jZV9uYW1lcygpOlxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICByZXR1cm4gaW5zdGFsbF92bV9hdXRvc3RhcnQoKVxuXG5cbmRlZiBjb25maWd1cmVfZ3Vlc3RfcHJveHkoKTpcbiAgICB0b2tlbl9wYXRoID0gUGF0aC5ob21lKCkgLyAnTGlicmFyeScgLyAnQXBwbGljYXRpb24gU3VwcG9ydCcgLyAnZGdlLXdvcmtlcicgLyAnaGVscGVyLXRva2VuJ1xuICAgIGVudiA9ICdER0VfU1RPUkFHRV9QUk9YWT1odHRwOi8vaG9zdC5saW1hLmludGVybmFsOiVzXFxuJyAlIFBST1hZX1BPUlRcbiAgICBpZiB0b2tlbl9wYXRoLmV4aXN0cygpOlxuICAgICAgICBlbnYgKz0gJ0RHRV9IRUxQRVJfVE9LRU49JyArIHRva2VuX3BhdGgucmVhZF90ZXh0KCkuc3RyaXAoKSArICdcXG4nXG4gICAgcnVuKFsnbGltYWN0bCcsICdzaGVsbCcsIElOU1RBTkNFLCAnc3VkbycsICd0ZWUnLCAnL29wdC9kZ2Utd29ya2VyL3Byb3h5LmVudiddLFxuICAgICAgICBpbnB1dD1lbnYuZW5jb2RlKCksIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwpXG4gICAgcnVuKFsnbGltYWN0bCcsICdzaGVsbCcsIElOU1RBTkNFLCAnc3VkbycsICdjaG1vZCcsICc2MDAnLCAnL29wdC9kZ2Utd29ya2VyL3Byb3h5LmVudiddKVxuICAgIHJ1bihbJ2xpbWFjdGwnLCAnc2hlbGwnLCBJTlNUQU5DRSwgJ3N1ZG8nLCAnc3lzdGVtY3RsJywgJ3Jlc3RhcnQnLCAnZGdlLXdvcmtlci5zZXJ2aWNlJ10pXG5cblxuZGVmIG1haW4oc2NyaXB0KTpcbiAgICBnbG9iYWwgUkVQT1JURVJcbiAgICBpZiBvcy5nZXRldWlkKCkgPT0gMDpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdEbyBub3QgcnVuIHRoaXMgaW5zdGFsbGVyIHdpdGggc3VkbyBvbiBhIE1hYy4gUnVuIGl0IGFzIHlvdXJzZWxmLicpXG4gICAgaW52aXRhdGlvbl9maWxlID0gaW5zdGFsbGVyX3NvdXJjZSgpIC8gJ2ludml0YXRpb24uanNvbidcbiAgICBpZiBpbnZpdGF0aW9uX2ZpbGUuZXhpc3RzKCkgYW5kIG9zLmVudmlyb24uZ2V0KCdER0VfU0VUVVBfTE9HX1NVUEVSVklTRUQnKSAhPSAnMSc6XG4gICAgICAgIGludml0YXRpb24gPSBqc29uLmxvYWRzKGludml0YXRpb25fZmlsZS5yZWFkX3RleHQoKSlcbiAgICAgICAgUkVQT1JURVIgPSBTZXR1cExvZ1JlcG9ydGVyKGludml0YXRpb25bJ29yaWdpbiddLCBpbnZpdGF0aW9uWyd0b2tlbiddKVxuICAgIHRyeTpcbiAgICAgICAgaW5zdGFsbChzY3JpcHQpXG4gICAgZmluYWxseTpcbiAgICAgICAgaWYgUkVQT1JURVI6XG4gICAgICAgICAgICBSRVBPUlRFUi5jbG9zZSgpXG4gICAgICAgICAgICBSRVBPUlRFUiA9IE5vbmVcblxuXG5kZWYgaW5zdGFsbChzY3JpcHQpOlxuICAgIGFkZF9tYWNfcHJlZml4ZXMoKVxuICAgIHByaW50KCdUaGlzIE1hYyBydW5zIHRoZSB3b3JrZXIgaW5zaWRlIGEgTGludXggdmlydHVhbCBtYWNoaW5lIHNvIHRhc2sgaXNvbGF0aW9uIG1hdGNoZXMgYSBMaW51eCBob3N0LicsXG4gICAgICAgICAgZmx1c2g9VHJ1ZSlcbiAgICBweXRob24gPSBlbnN1cmVfcHl0aG9uKClcbiAgICBlbnN1cmVfbGltYWN0bCgpXG4gICAgbWVtb3J5X2dpYiwgY3B1cyA9IHZtX3NpemUoKmhvc3RfcmVzb3VyY2VzKCkpXG4gICAgc3RhcnRfdm0obWVtb3J5X2dpYiwgY3B1cylcbiAgICBpbnN0YWxsX2hvc3RfcHJveHkocHl0aG9uKVxuICAgIHJ1bl9saW51eF9pbnN0YWxsZXIoc2NyaXB0KVxuICAgIGNvbmZpZ3VyZV9ndWVzdF9wcm94eSgpXG4gICAgaW5zdGFsbF92bV9hdXRvc3RhcnQoKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgdHJ5OlxuICAgICAgICBtYWluKHN5cy5hcmd2WzFdKVxuICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgnTGludXggd29ya2VyIHNldHVwIGZhaWxlZDogJyArICcgJy5qb2luKHN0cihpdGVtKSBmb3IgaXRlbSBpbiBlcnJvci5jbWQpKSBmcm9tIE5vbmVcbiAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycm9yOlxuICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KHN0cihlcnJvcikpIGZyb20gTm9uZVxuIiwibWFjb3NfcjJfcHJveHkucHkiOiIjIS91c3IvYmluL2VudiBweXRob24zXG5cIlwiXCJIb3N0IEhUVFAgaGVscGVyOiBMaW1hIGd1ZXN0cyBzZW5kIHBsYWluIEhUVFA7IHRoZSBNYWMgZG9lcyBSMiBUTFMuXG5cblNlY3VyZSBUcmFuc3BvcnQgLyBsYXJnZSBUTFMgcmVjb3JkcyBmYWlsIG9uIHRoaXMgV2ktRmkgcGF0aCB0byBDbG91ZGZsYXJlXG5PUkQuIEhvbWVicmV3IE9wZW5TU0wgd2l0aCBtYXhfc2VuZF9mcmFnbWVudD00MDk2IGNvbXBsZXRlcyAyMCBNaUIgUFVUcy5cbkxpc3RlbnMgb24gZXZlcnkgaW50ZXJmYWNlIGJlY2F1c2UgdGhlIGd1ZXN0IHJlYWNoZXMgdGhlIGhvc3QgYXNcbmhvc3QubGltYS5pbnRlcm5hbC4gR0VUIC91cGxpbmsgcmVwb3J0cyBhbiB1bnBhY2VkIENsb3VkZmxhcmUgUFVUIHByb2JlXG5vbiB0aGUgaG9zdCBOSUMuIE9ubHkgR0VUL1BVVC9IRUFEIHRvICoucjIuY2xvdWRmbGFyZXN0b3JhZ2UuY29tIGFyZVxuYWxsb3dlZCBhcyBzdG9yYWdlLiBUaGUgd29ya2VyIHRva2VuIG5ldmVyIGxlYXZlcyB0aGUgVk0uXG5cIlwiXCJcbmltcG9ydCBjdHlwZXNcbmltcG9ydCBlcnJub1xuaW1wb3J0IGZ1bmN0b29sc1xuaW1wb3J0IGh0dHAuY2xpZW50XG5pbXBvcnQgaG1hY1xuZnJvbSBwYXRobGliIGltcG9ydCBQYXRoXG5pbXBvcnQgaXBhZGRyZXNzXG5pbXBvcnQganNvblxuaW1wb3J0IG9zXG5pbXBvcnQgcmVcbmltcG9ydCBzb2NrZXRcbmltcG9ydCBzc2xcbmltcG9ydCBzdWJwcm9jZXNzXG5pbXBvcnQgc3lzXG5pbXBvcnQgdGVtcGZpbGVcbmltcG9ydCB0aHJlYWRpbmdcbmltcG9ydCB0aW1lXG5pbXBvcnQgdXJsbGliLnBhcnNlXG5cbkxJU1RFTl9IT1NUID0gJzAuMC4wLjAnXG5MSVNURU5fUE9SVCA9IDE4Nzg5XG5BTExPV0VEX1NVRkZJWCA9ICcucjIuY2xvdWRmbGFyZXN0b3JhZ2UuY29tJ1xuQlVGRkVSID0gNjU1MzZcbkhFQURFUl9MSU1JVCA9IDY1NTM2XG5NQVhfUFVUID0gNTEyICogMTAyNCAqIDEwMjRcbkNVUkwgPSAnL3Vzci9iaW4vY3VybCdcblRMU19TRU5EX0ZSQUdNRU5UID0gMjA0OFxuVExTX1NFTkRfUEFDRSA9IDAuMDAyXG5PUklHSU4gPSB0aHJlYWRpbmcuTG9jaygpXG5GT1JXQVJEX1NLSVAgPSB7J2Nvbm5lY3Rpb24nLCAna2VlcC1hbGl2ZScsICdwcm94eS1hdXRoZW50aWNhdGUnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgICAgICAgICd0ZScsICd0cmFpbGVycycsICd0cmFuc2Zlci1lbmNvZGluZycsICd1cGdyYWRlJywgJ2hvc3QnLCAneC1kZ2UtdGFyZ2V0JyxcbiAgICAgICAgICAgICAgICAgJ2V4cGVjdCcsICdjb250ZW50LWxlbmd0aCd9XG5QUk9CRV9IT1NUID0gJ3NwZWVkLmNsb3VkZmxhcmUuY29tJ1xuUFJPQkVfUEFUSCA9ICcvX191cCdcblBST0JFX0JZVEVTID0gMiAqIDEwMjQgKiAxMDI0XG5QUk9CRV9USU1FT1VUID0gMTBcblBST0JFX0lOVEVSVkFMID0gMzAwXG5VUExJTktfUkVBRFkgPSB0aHJlYWRpbmcuRXZlbnQoKVxuVVBMSU5LX0xPQ0sgPSB0aHJlYWRpbmcuTG9jaygpXG5VUExJTksgPSB7J29rJzogTm9uZSwgJ2Jwcyc6IDAsICdwcm9iZWRfYXQnOiAwLjAsICdpZmFjZSc6IE5vbmUsICd3aWZpJzogRmFsc2V9XG5IT1NUX0xPQ0sgPSB0aHJlYWRpbmcuTG9jaygpXG5IT1NUX0lERU5USVRZID0ge31cbkRFU0tUT1BfTUFDID0gKCdtYWMgbWluaScsICdtYWMgc3R1ZGlvJywgJ21hYyBwcm8nLCAnaW1hYycpXG5IT1NUX0NQVV9MT0FEX0lORk8gPSAzXG5DUFVfU0FNUExFX1NFQ09ORFMgPSAxXG5MSVNURU5fUkVUUllfU0VDT05EUyA9IDAuNVxuXG5cbmRlZiBjb21tYW5kX291dHB1dChhcmdzKTpcbiAgICB0cnk6XG4gICAgICAgIHJldHVybiBzdWJwcm9jZXNzLnJ1bihhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTUsIGNoZWNrPUZhbHNlKS5zdGRvdXQuZGVjb2RlKGVycm9ycz0ncmVwbGFjZScpXG4gICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvcik6XG4gICAgICAgIHJldHVybiAnJ1xuXG5cbmRlZiBwYXJzZV9yb3V0ZV9pbnRlcmZhY2UodGV4dCk6XG4gICAgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdGxpbmVzKCk6XG4gICAgICAgIHN0cmlwcGVkID0gbGluZS5zdHJpcCgpXG4gICAgICAgIGlmIHN0cmlwcGVkLnN0YXJ0c3dpdGgoJ2ludGVyZmFjZTonKTpcbiAgICAgICAgICAgIHJldHVybiBzdHJpcHBlZC5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkgb3IgTm9uZVxuICAgIHJldHVybiBOb25lXG5cblxuZGVmIHBhcnNlX3dpZmlfZGV2aWNlcyh0ZXh0KTpcbiAgICBkZXZpY2VzID0gc2V0KClcbiAgICBwb3J0ID0gJydcbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdIYXJkd2FyZSBQb3J0OicpOlxuICAgICAgICAgICAgcG9ydCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpLmxvd2VyKClcbiAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RldmljZTonKSBhbmQgcG9ydDpcbiAgICAgICAgICAgIGlmICd3aS1maScgaW4gcG9ydCBvciBwb3J0IGluICgnd2lmaScsICdhaXJwb3J0JywgJ3dsYW4nKTpcbiAgICAgICAgICAgICAgICBkZXZpY2VzLmFkZChsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKSlcbiAgICAgICAgICAgIHBvcnQgPSAnJ1xuICAgIHJldHVybiBkZXZpY2VzXG5cblxuZGVmIHdpZmlfZGVmYXVsdF9yb3V0ZSgpOlxuICAgIGlmYWNlLCB3aWZpID0gY3VycmVudF9wYXRoKClcbiAgICByZXR1cm4gd2lmaVxuXG5cbmRlZiBjdXJyZW50X3BhdGgoKTpcbiAgICBpZmFjZSA9IHBhcnNlX3JvdXRlX2ludGVyZmFjZShjb21tYW5kX291dHB1dChbJy9zYmluL3JvdXRlJywgJy1uJywgJ2dldCcsICdkZWZhdWx0J10pKVxuICAgIHdpZmkgPSBib29sKGlmYWNlKSBhbmQgaWZhY2UgaW4gcGFyc2Vfd2lmaV9kZXZpY2VzKGNvbW1hbmRfb3V0cHV0KFsnL3Vzci9zYmluL25ldHdvcmtzZXR1cCcsICctbGlzdGFsbGhhcmR3YXJlcG9ydHMnXSkpXG4gICAgcmV0dXJuIGlmYWNlLCB3aWZpXG5cblxuZGVmIHBhcnNlX2hhcmR3YXJlX3Byb2ZpbGUodGV4dCk6XG4gICAgbmFtZSwgaWRlbnRpZmllciA9IE5vbmUsIE5vbmVcbiAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoKTpcbiAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKClcbiAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnTW9kZWwgTmFtZTonKTpcbiAgICAgICAgICAgIG5hbWUgPSBzdHJpcHBlZC5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkgb3IgTm9uZVxuICAgICAgICBlbGlmIHN0cmlwcGVkLnN0YXJ0c3dpdGgoJ01vZGVsIElkZW50aWZpZXI6Jyk6XG4gICAgICAgICAgICBpZGVudGlmaWVyID0gc3RyaXBwZWQuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpIG9yIE5vbmVcbiAgICByZXR1cm4gbmFtZSwgaWRlbnRpZmllclxuXG5cbmRlZiBkZXNrdG9wX21hYyhuYW1lKTpcbiAgICBsb3dlcmVkID0gKG5hbWUgb3IgJycpLmxvd2VyKClcbiAgICByZXR1cm4gYW55KHRva2VuIGluIGxvd2VyZWQgZm9yIHRva2VuIGluIERFU0tUT1BfTUFDKVxuXG5cbmRlZiBwYXJzZV9wbXNldF9iYXR0KHRleHQpOlxuICAgIGFjID0gTm9uZVxuICAgIGlmICdBQyBQb3dlcicgaW4gdGV4dDpcbiAgICAgICAgYWMgPSBUcnVlXG4gICAgZWxpZiAnQmF0dGVyeSBQb3dlcicgaW4gdGV4dDpcbiAgICAgICAgYWMgPSBGYWxzZVxuICAgIHByZXNlbnQgPSAnSW50ZXJuYWxCYXR0ZXJ5JyBpbiB0ZXh0XG4gICAgcGVyY2VudCA9IE5vbmVcbiAgICBzdGF0dXMgPSBOb25lXG4gICAgZm9yIHBhcnQgaW4gdGV4dC5yZXBsYWNlKCdcXHQnLCAnICcpLnNwbGl0KCk6XG4gICAgICAgIGlmIHBhcnQuZW5kc3dpdGgoJyU7Jykgb3IgcGFydC5lbmRzd2l0aCgnJScpOlxuICAgICAgICAgICAgZGlnaXRzID0gcGFydC5zdHJpcCgnJTsnKVxuICAgICAgICAgICAgaWYgZGlnaXRzLmlzZGlnaXQoKTpcbiAgICAgICAgICAgICAgICBwZXJjZW50ID0gaW50KGRpZ2l0cylcbiAgICAgICAgbG93ZXJlZCA9IHBhcnQuc3RyaXAoJzsnKS5sb3dlcigpXG4gICAgICAgIGlmIGxvd2VyZWQgaW4gKCdjaGFyZ2luZycsICdkaXNjaGFyZ2luZycsICdjaGFyZ2VkJywgJ2ZpbmlzaGluZyBjaGFyZ2UnKTpcbiAgICAgICAgICAgIHN0YXR1cyA9IGxvd2VyZWQuY2FwaXRhbGl6ZSgpIGlmIGxvd2VyZWQgIT0gJ2ZpbmlzaGluZyBjaGFyZ2UnIGVsc2UgJ0NoYXJnaW5nJ1xuICAgIHJldHVybiB7J2FjX2Nvbm5lY3RlZCc6IGFjLCAnYmF0dGVyeV9wcmVzZW50JzogcHJlc2VudCwgJ2JhdHRlcnlfcGVyY2VudCc6IHBlcmNlbnQsXG4gICAgICAgICAgICAnYmF0dGVyeV9zdGF0dXMnOiBzdGF0dXN9XG5cblxuZGVmIGhvc3RfaWRlbnRpdHkoKTpcbiAgICB3aXRoIEhPU1RfTE9DSzpcbiAgICAgICAgaWYgSE9TVF9JREVOVElUWS5nZXQoJ2hhcmR3YXJlX21vZGVsJyk6XG4gICAgICAgICAgICByZXR1cm4gZGljdChIT1NUX0lERU5USVRZKVxuICAgIG5hbWUsIGlkZW50aWZpZXIgPSBwYXJzZV9oYXJkd2FyZV9wcm9maWxlKGNvbW1hbmRfb3V0cHV0KFsnL3Vzci9zYmluL3N5c3RlbV9wcm9maWxlcicsICdTUEhhcmR3YXJlRGF0YVR5cGUnXSkpXG4gICAgbW9kZWwgPSBuYW1lIG9yIGlkZW50aWZpZXJcbiAgICBpZGVudGl0eSA9IHsnbWFudWZhY3R1cmVyJzogJ0FwcGxlJyBpZiBtb2RlbCBlbHNlIE5vbmUsICdoYXJkd2FyZV9tb2RlbCc6IG1vZGVsfVxuICAgIHdpdGggSE9TVF9MT0NLOlxuICAgICAgICBIT1NUX0lERU5USVRZLnVwZGF0ZShpZGVudGl0eSlcbiAgICAgICAgcmV0dXJuIGRpY3QoSE9TVF9JREVOVElUWSlcblxuXG5kZWYgaG9zdF9wb3dlcigpOlxuICAgIGlkZW50aXR5ID0gaG9zdF9pZGVudGl0eSgpXG4gICAgcG93ZXIgPSBwYXJzZV9wbXNldF9iYXR0KGNvbW1hbmRfb3V0cHV0KFsnL3Vzci9iaW4vcG1zZXQnLCAnLWcnLCAnYmF0dCddKSlcbiAgICBpZiBkZXNrdG9wX21hYyhpZGVudGl0eS5nZXQoJ2hhcmR3YXJlX21vZGVsJykpOlxuICAgICAgICBwb3dlclsnYmF0dGVyeV9wcmVzZW50J10gPSBGYWxzZVxuICAgICAgICBwb3dlclsnYWNfY29ubmVjdGVkJ10gPSBUcnVlIGlmIHBvd2VyWydhY19jb25uZWN0ZWQnXSBpcyBOb25lIGVsc2UgcG93ZXJbJ2FjX2Nvbm5lY3RlZCddXG4gICAgICAgIHBvd2VyWydiYXR0ZXJ5X3BlcmNlbnQnXSA9IE5vbmVcbiAgICAgICAgcG93ZXJbJ2JhdHRlcnlfc3RhdHVzJ10gPSBOb25lXG4gICAgcmV0dXJuIHBvd2VyXG5cblxuZGVmIHJlcXVlc3RfcGF0aChyYXcpOlxuICAgIHRyeTpcbiAgICAgICAgX21ldGhvZCwgdGFyZ2V0LCBfdmVyc2lvbiA9IHJhdy5zcGxpdChiJ1xcclxcbicsIDEpWzBdLmRlY29kZSgnYXNjaWknKS5zcGxpdCgpXG4gICAgZXhjZXB0IChWYWx1ZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IpOlxuICAgICAgICByZXR1cm4gJydcbiAgICByZXR1cm4gdXJsbGliLnBhcnNlLnVybHNwbGl0KHRhcmdldCkucGF0aFxuXG5cbmRlZiBwcm9iZV9hY2NlcHRlZChzdGF0dXMpOlxuICAgIHJldHVybiBzdGF0dXMgaW4gKDIwMCwgNDAzKVxuXG5cbmRlZiBwcm9iZV9jbG91ZGZsYXJlKCk6XG4gICAgc3RhcnRlZCA9IHRpbWUubW9ub3RvbmljKClcbiAgICBwYXlsb2FkID0gYidcXDAnICogUFJPQkVfQllURVNcbiAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpXG4gICAgY3R4Lm1pbmltdW1fdmVyc2lvbiA9IHNzbC5UTFNWZXJzaW9uLlRMU3YxXzJcbiAgICBjb25uID0gaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uKFBST0JFX0hPU1QsIDQ0MywgdGltZW91dD1QUk9CRV9USU1FT1VULCBjb250ZXh0PWN0eClcbiAgICB0cnk6XG4gICAgICAgIGNvbm4ucmVxdWVzdCgnUFVUJywgUFJPQkVfUEFUSCwgYm9keT1wYXlsb2FkLCBoZWFkZXJzPXsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KVxuICAgICAgICByZXNwb25zZSA9IGNvbm4uZ2V0cmVzcG9uc2UoKVxuICAgICAgICByZXNwb25zZS5yZWFkKClcbiAgICAgICAgZWxhcHNlZCA9IG1heCh0aW1lLm1vbm90b25pYygpIC0gc3RhcnRlZCwgMC4wMDEpXG4gICAgICAgIG9rID0gcHJvYmVfYWNjZXB0ZWQocmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICByZXR1cm4gb2ssIGludChQUk9CRV9CWVRFUyAvIGVsYXBzZWQpIGlmIG9rIGVsc2UgMFxuICAgIGV4Y2VwdCAoT1NFcnJvciwgc3NsLlNTTEVycm9yLCBodHRwLmNsaWVudC5IVFRQRXhjZXB0aW9uLCBWYWx1ZUVycm9yKSBhcyBlcnJvcjpcbiAgICAgICAgbG9nX3N0b3JhZ2UoJ3VwbGluayBwcm9iZSBmYWlsZWQ6ICVzJyAlIGVycm9yKVxuICAgICAgICByZXR1cm4gRmFsc2UsIDBcbiAgICBmaW5hbGx5OlxuICAgICAgICBjb25uLmNsb3NlKClcblxuXG5kZWYgcmVmcmVzaF91cGxpbmsoZm9yY2U9RmFsc2UpOlxuICAgIGlmYWNlLCB3aWZpID0gY3VycmVudF9wYXRoKClcbiAgICB3aXRoIFVQTElOS19MT0NLOlxuICAgICAgICBhZ2UgPSB0aW1lLnRpbWUoKSAtIChVUExJTktbJ3Byb2JlZF9hdCddIG9yIDApXG4gICAgICAgIGNoYW5nZWQgPSBpZmFjZSAhPSBVUExJTktbJ2lmYWNlJ10gb3Igd2lmaSAhPSBVUExJTktbJ3dpZmknXVxuICAgICAgICBpZiBub3QgZm9yY2UgYW5kIFVQTElOS1snb2snXSBpcyBub3QgTm9uZSBhbmQgbm90IGNoYW5nZWQgYW5kIGFnZSA8IFBST0JFX0lOVEVSVkFMOlxuICAgICAgICAgICAgcmV0dXJuIGRpY3QoVVBMSU5LKVxuICAgIHdpdGggT1JJR0lOOlxuICAgICAgICBvaywgYnBzID0gcHJvYmVfY2xvdWRmbGFyZSgpXG4gICAgd2l0aCBVUExJTktfTE9DSzpcbiAgICAgICAgVVBMSU5LLnVwZGF0ZShvaz1vaywgYnBzPWJwcywgcHJvYmVkX2F0PXRpbWUudGltZSgpLCBpZmFjZT1pZmFjZSwgd2lmaT13aWZpKVxuICAgICAgICByZXR1cm4gZGljdChVUExJTkspXG5cblxuZGVmIHVwbGlua19wYXlsb2FkKCk6XG4gICAgd2l0aCBVUExJTktfTE9DSzpcbiAgICAgICAgc3RhdGUgPSBkaWN0KFVQTElOSylcbiAgICBwYXlsb2FkID0geydvayc6IHN0YXRlWydvayddLCAnYnBzJzogc3RhdGVbJ2JwcyddLCAncHJvYmVkX2F0Jzogc3RhdGVbJ3Byb2JlZF9hdCddLFxuICAgICAgICAgICAgICAgJ2lmYWNlJzogc3RhdGVbJ2lmYWNlJ10sICd3aWZpJzogc3RhdGVbJ3dpZmknXX1cbiAgICBwYXlsb2FkLnVwZGF0ZShob3N0X2lkZW50aXR5KCkpXG4gICAgcGF5bG9hZC51cGRhdGUoaG9zdF9wb3dlcigpKVxuICAgIHJldHVybiBwYXlsb2FkXG5cblxuZGVmIHJlcGx5X2pzb24oc29jaywgcGF5bG9hZCk6XG4gICAgYm9keSA9IGpzb24uZHVtcHMocGF5bG9hZCkuZW5jb2RlKClcbiAgICBzb2NrLnNlbmRhbGwoKCdIVFRQLzEuMSAyMDAgT0tcXHJcXG5Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cXHJcXG5Db250ZW50LUxlbmd0aDogJXNcXHJcXG4nXG4gICAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbjogY2xvc2VcXHJcXG5cXHJcXG4nICUgbGVuKGJvZHkpKS5lbmNvZGUoKSArIGJvZHkpXG5cblxuZGVmIHVwbGlua19sb29wKCk6XG4gICAgd2hpbGUgVHJ1ZTpcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgcmVmcmVzaF91cGxpbmsoKVxuICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOlxuICAgICAgICAgICAgbG9nX3N0b3JhZ2UoJ3VwbGluayBwcm9iZSBmYWlsZWQ6ICVzJyAlIGVycm9yKVxuICAgICAgICAgICAgaWZhY2UsIHdpZmkgPSBjdXJyZW50X3BhdGgoKVxuICAgICAgICAgICAgd2l0aCBVUExJTktfTE9DSzpcbiAgICAgICAgICAgICAgICBVUExJTksudXBkYXRlKG9rPUZhbHNlLCBicHM9MCwgcHJvYmVkX2F0PXRpbWUudGltZSgpLCBpZmFjZT1pZmFjZSwgd2lmaT13aWZpKVxuICAgICAgICBVUExJTktfUkVBRFkuc2V0KClcbiAgICAgICAgdGltZS5zbGVlcCg1KVxuXG5cbmRlZiBhbGxvd2VkX2hvc3QoaG9zdCk6XG4gICAgaG9zdCA9IChob3N0IG9yICcnKS5zdHJpcCgpLmxvd2VyKCkucnN0cmlwKCcuJylcbiAgICBpZiBob3N0LnN0YXJ0c3dpdGgoJ1snKSBvciBub3QgaG9zdC5lbmRzd2l0aChBTExPV0VEX1NVRkZJWCk6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIHByZWZpeCA9IGhvc3RbOi1sZW4oQUxMT1dFRF9TVUZGSVgpXVxuICAgIGlmIG5vdCBwcmVmaXg6XG4gICAgICAgIHJldHVybiBGYWxzZVxuICAgIGZvciBsYWJlbCBpbiBwcmVmaXguc3BsaXQoJy4nKTpcbiAgICAgICAgaWYgbm90IGxhYmVsIG9yIGxhYmVsLnN0YXJ0c3dpdGgoJy0nKSBvciBsYWJlbC5lbmRzd2l0aCgnLScpOlxuICAgICAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgICAgIGlmIG5vdCBhbGwoY2hhcmFjdGVyLmlzYWxudW0oKSBvciBjaGFyYWN0ZXIgPT0gJy0nIGZvciBjaGFyYWN0ZXIgaW4gbGFiZWwpOlxuICAgICAgICAgICAgcmV0dXJuIEZhbHNlXG4gICAgdHJ5OlxuICAgICAgICBpcGFkZHJlc3MuaXBfYWRkcmVzcyhob3N0KVxuICAgICAgICByZXR1cm4gRmFsc2VcbiAgICBleGNlcHQgVmFsdWVFcnJvcjpcbiAgICAgICAgcmV0dXJuIFRydWVcblxuXG5kZWYgYWxsb3dlZF91cmwodXJsKTpcbiAgICBwYXJzZWQgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQodXJsIG9yICcnKVxuICAgIGlmIChwYXJzZWQuc2NoZW1lICE9ICdodHRwcycgb3IgcGFyc2VkLnVzZXJuYW1lIG9yIG5vdCBwYXJzZWQuaG9zdG5hbWVcbiAgICAgICAgICAgIG9yIHBhcnNlZC5wb3J0IG5vdCBpbiAoTm9uZSwgNDQzKSBvciBub3QgYWxsb3dlZF9ob3N0KHBhcnNlZC5ob3N0bmFtZSkpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJldHVybiBwYXJzZWRcblxuXG5kZWYgcmVhZF9oZWFkZXJzKHNvY2spOlxuICAgIGRhdGEgPSBiJydcbiAgICB3aGlsZSBiJ1xcclxcblxcclxcbicgbm90IGluIGRhdGEgYW5kIGxlbihkYXRhKSA8IEhFQURFUl9MSU1JVDpcbiAgICAgICAgY2h1bmsgPSBzb2NrLnJlY3YoSEVBREVSX0xJTUlUIC0gbGVuKGRhdGEpKVxuICAgICAgICBpZiBub3QgY2h1bms6XG4gICAgICAgICAgICByZXR1cm4gTm9uZSwgYicnXG4gICAgICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiBiJ1xcclxcblxcclxcbicgbm90IGluIGRhdGE6XG4gICAgICAgIHJldHVybiBOb25lLCBiJydcbiAgICBoZWFkZXIsIHJlc3QgPSBkYXRhLnNwbGl0KGInXFxyXFxuXFxyXFxuJywgMSlcbiAgICByZXR1cm4gaGVhZGVyLCByZXN0XG5cblxuZGVmIHBhcnNlX3JlcXVlc3QocmF3KTpcbiAgICB0cnk6XG4gICAgICAgIGxpbmVzID0gcmF3LnNwbGl0KGInXFxyXFxuJylcbiAgICAgICAgbWV0aG9kLCBfdGFyZ2V0LCBfdmVyc2lvbiA9IGxpbmVzWzBdLmRlY29kZSgnYXNjaWknKS5zcGxpdCgpXG4gICAgZXhjZXB0IChWYWx1ZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IpOlxuICAgICAgICByZXR1cm4gTm9uZSwge30sIE5vbmVcbiAgICBoZWFkZXJzID0ge31cbiAgICBmb3IgbGluZSBpbiBsaW5lc1sxOl06XG4gICAgICAgIGlmIG5vdCBsaW5lOlxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBsaW5lLmRlY29kZSgnbGF0aW4xJykuc3BsaXQoJzonLCAxKVxuICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjpcbiAgICAgICAgICAgIHJldHVybiBOb25lLCB7fSwgTm9uZVxuICAgICAgICBoZWFkZXJzW25hbWUuc3RyaXAoKS5sb3dlcigpXSA9IHZhbHVlLnN0cmlwKClcbiAgICByZXR1cm4gbWV0aG9kLnVwcGVyKCksIGhlYWRlcnMsIGFsbG93ZWRfdXJsKGhlYWRlcnMuZ2V0KCd4LWRnZS10YXJnZXQnKSlcblxuXG5kZWYgcmVwbHkoc29jaywgc3RhdHVzLCByZWFzb24pOlxuICAgIHNvY2suc2VuZGFsbCgoJ0hUVFAvMS4xICVzICVzXFxyXFxuQ29ubmVjdGlvbjogY2xvc2VcXHJcXG5cXHJcXG4nICUgKHN0YXR1cywgcmVhc29uKSkuZW5jb2RlKCkpXG5cblxuZGVmIGNvcHlfY2xpZW50X2JvZHkoY2xpZW50LCByZXN0LCBsZW5ndGgsIHdyaXRlKTpcbiAgICBzZW50ID0gMFxuICAgIGlmIHJlc3Q6XG4gICAgICAgIHRha2UgPSByZXN0WzpsZW5ndGhdXG4gICAgICAgIHdyaXRlKHRha2UpXG4gICAgICAgIHNlbnQgKz0gbGVuKHRha2UpXG4gICAgd2hpbGUgc2VudCA8IGxlbmd0aDpcbiAgICAgICAgY2h1bmsgPSBjbGllbnQucmVjdihtaW4oQlVGRkVSLCBsZW5ndGggLSBzZW50KSlcbiAgICAgICAgaWYgbm90IGNodW5rOlxuICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignc2hvcnQgYm9keScpXG4gICAgICAgIHdyaXRlKGNodW5rKVxuICAgICAgICBzZW50ICs9IGxlbihjaHVuaylcblxuXG5kZWYgcGFyc2VfZHVtcF9oZWFkZXIocGF0aCk6XG4gICAgc3RhdHVzLCByZWFzb24sIGNvbnRlbnRfdHlwZSwgbGVuZ3RoID0gNTAyLCAnQmFkIEdhdGV3YXknLCBOb25lLCBOb25lXG4gICAgdHJ5OlxuICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3InLCBlcnJvcnM9J3JlcGxhY2UnKSBhcyBoYW5kbGU6XG4gICAgICAgICAgICB0ZXh0ID0gaGFuZGxlLnJlYWQoKVxuICAgIGV4Y2VwdCBPU0Vycm9yOlxuICAgICAgICByZXR1cm4gc3RhdHVzLCByZWFzb24sIGNvbnRlbnRfdHlwZSwgbGVuZ3RoXG4gICAgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdGxpbmVzKCk6XG4gICAgICAgIGlmIGxpbmUudXBwZXIoKS5zdGFydHN3aXRoKCdIVFRQLycpOlxuICAgICAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KE5vbmUsIDIpXG4gICAgICAgICAgICBpZiBsZW4ocGFydHMpID49IDIgYW5kIHBhcnRzWzFdLmlzZGlnaXQoKTpcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBpbnQocGFydHNbMV0pXG4gICAgICAgICAgICAgICAgcmVhc29uID0gcGFydHNbMl0gaWYgbGVuKHBhcnRzKSA+IDIgZWxzZSAnT0snXG4gICAgICAgIGVsaWYgbGluZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtdHlwZTonKTpcbiAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpXG4gICAgICAgIGVsaWYgbGluZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtbGVuZ3RoOicpOlxuICAgICAgICAgICAgbGVuZ3RoID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKClcbiAgICByZXR1cm4gc3RhdHVzLCByZWFzb24sIGNvbnRlbnRfdHlwZSwgbGVuZ3RoXG5cblxuZGVmIHNlbmRfZmlsZShjbGllbnQsIHN0YXR1cywgcmVhc29uLCBjb250ZW50X3R5cGUsIGxlbmd0aCwgcGF0aCwgc2tpcF9ib2R5PUZhbHNlKTpcbiAgICBzaXplID0gb3MucGF0aC5nZXRzaXplKHBhdGgpIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpIGVsc2UgMFxuICAgIGlmIG5vdCBsZW5ndGggb3Igbm90IHN0cihsZW5ndGgpLmlzZGlnaXQoKTpcbiAgICAgICAgbGVuZ3RoID0gc3RyKHNpemUpXG4gICAgaGVhZGVycyA9IFsnSFRUUC8xLjEgJXMgJXMnICUgKHN0YXR1cywgcmVhc29uKV1cbiAgICBpZiBjb250ZW50X3R5cGU6XG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGU6ICcgKyBjb250ZW50X3R5cGUpXG4gICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtTGVuZ3RoOiAnICsgbGVuZ3RoKVxuICAgIGhlYWRlcnMuYXBwZW5kKCdDb25uZWN0aW9uOiBjbG9zZScpXG4gICAgY2xpZW50LnNlbmRhbGwoKCdcXHJcXG4nLmpvaW4oaGVhZGVycykgKyAnXFxyXFxuXFxyXFxuJykuZW5jb2RlKCkpXG4gICAgaWYgc2tpcF9ib2R5IG9yIHN0YXR1cyA9PSAyMDQ6XG4gICAgICAgIHJldHVyblxuICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBwYXlsb2FkOlxuICAgICAgICB3aGlsZSBjaHVuayA6PSBwYXlsb2FkLnJlYWQoQlVGRkVSKTpcbiAgICAgICAgICAgIGNsaWVudC5zZW5kYWxsKGNodW5rKVxuXG5cbmRlZiBvcmlnaW5fc3NsKCk6XG4gICAgY3R4ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKVxuICAgIGN0eC5taW5pbXVtX3ZlcnNpb24gPSBzc2wuVExTVmVyc2lvbi5UTFN2MV8yXG4gICAgY3R4Lm1heGltdW1fdmVyc2lvbiA9IHNzbC5UTFNWZXJzaW9uLlRMU3YxXzJcbiAgICBjdHgubWF4X3NlbmRfZnJhZ21lbnQgPSBUTFNfU0VORF9GUkFHTUVOVFxuICAgIHJldHVybiBjdHhcblxuXG5jbGFzcyBPcmlnaW5IVFRQU0Nvbm5lY3Rpb24oaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uKTpcbiAgICBkZWYgY29ubmVjdChzZWxmKTpcbiAgICAgICAgc3VwZXIoKS5jb25uZWN0KClcbiAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoNjAwKVxuICAgICAgICBzZWxmLnNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19UQ1AsIHNvY2tldC5UQ1BfTk9ERUxBWSwgMSlcblxuXG5kZWYgbG9nX3N0b3JhZ2UobWVzc2FnZSk6XG4gICAgc3lzLnN0ZGVyci53cml0ZShtZXNzYWdlICsgJ1xcbicpXG4gICAgc3lzLnN0ZGVyci5mbHVzaCgpXG5cblxuZGVmIG9yaWdpbl9wdXQodXJpLCByZXF1ZXN0X2hlYWRlcnMsIHVwbG9hZF9wYXRoLCBvdXRwdXRfcGF0aCk6XG4gICAgcGF0aCA9IHVyaS5wYXRoIG9yICcvJ1xuICAgIGlmIHVyaS5xdWVyeTpcbiAgICAgICAgcGF0aCA9IHBhdGggKyAnPycgKyB1cmkucXVlcnlcbiAgICBzaXplID0gb3MucGF0aC5nZXRzaXplKHVwbG9hZF9wYXRoKVxuICAgIGxhc3RfZXJyb3IgPSBOb25lXG4gICAgZm9yIGF0dGVtcHQgaW4gcmFuZ2UoMyk6XG4gICAgICAgIGNvbm4gPSBPcmlnaW5IVFRQU0Nvbm5lY3Rpb24odXJpLmhvc3RuYW1lLCA0NDMsIGNvbnRleHQ9b3JpZ2luX3NzbCgpLCB0aW1lb3V0PTYwMClcbiAgICAgICAgc2VudCA9IDBcbiAgICAgICAgc3RhcnRlZCA9IHRpbWUubW9ub3RvbmljKClcbiAgICAgICAgdHJ5OlxuICAgICAgICAgICAgY29ubi5jb25uZWN0KClcbiAgICAgICAgICAgIGNvbm4ucHV0cmVxdWVzdCgnUFVUJywgcGF0aCwgc2tpcF9ob3N0PUZhbHNlLCBza2lwX2FjY2VwdF9lbmNvZGluZz1UcnVlKVxuICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHJlcXVlc3RfaGVhZGVycy5pdGVtcygpOlxuICAgICAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKSBub3QgaW4gRk9SV0FSRF9TS0lQOlxuICAgICAgICAgICAgICAgICAgICBjb25uLnB1dGhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIHN0cihzaXplKSlcbiAgICAgICAgICAgIGNvbm4uZW5kaGVhZGVycygpXG4gICAgICAgICAgICB3aXRoIG9wZW4odXBsb2FkX3BhdGgsICdyYicpIGFzIHBheWxvYWQ6XG4gICAgICAgICAgICAgICAgd2hpbGUgY2h1bmsgOj0gcGF5bG9hZC5yZWFkKFRMU19TRU5EX0ZSQUdNRU5UKTpcbiAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kKGNodW5rKVxuICAgICAgICAgICAgICAgICAgICBzZW50ICs9IGxlbihjaHVuaylcbiAgICAgICAgICAgICAgICAgICAgaWYgVExTX1NFTkRfUEFDRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoVExTX1NFTkRfUEFDRSlcbiAgICAgICAgICAgIHJlc3BvbnNlID0gY29ubi5nZXRyZXNwb25zZSgpXG4gICAgICAgICAgICBib2R5ID0gcmVzcG9uc2UucmVhZCgpXG4gICAgICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X3BhdGgsICd3YicpIGFzIG91dHB1dDpcbiAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoYm9keSlcbiAgICAgICAgICAgIGxvZ19zdG9yYWdlKCdzdG9yYWdlIFBVVCAlcyBhdHRlbXB0ICVzIG9rICVzIGJ5dGVzIGluICUuMWZzIHN0YXR1cyAlcycgJSAoXG4gICAgICAgICAgICAgICAgdXJpLmhvc3RuYW1lLCBhdHRlbXB0ICsgMSwgc2VudCwgdGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0ZWQsIHJlc3BvbnNlLnN0YXR1cykpXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5yZWFzb24gb3IgJ09LJywgcmVzcG9uc2UuZ2V0aGVhZGVyKCdDb250ZW50LVR5cGUnKSwgc3RyKGxlbihib2R5KSlcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzc2wuU1NMRXJyb3IsIGh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb24pIGFzIGVycm9yOlxuICAgICAgICAgICAgbGFzdF9lcnJvciA9IGVycm9yXG4gICAgICAgICAgICBsb2dfc3RvcmFnZSgnc3RvcmFnZSBQVVQgJXMgYXR0ZW1wdCAlcyBmYWlsZWQgYXQgJXMvJXMgYnl0ZXMgaW4gJS4xZnM6ICVzJyAlIChcbiAgICAgICAgICAgICAgICB1cmkuaG9zdG5hbWUsIGF0dGVtcHQgKyAxLCBzZW50LCBzaXplLCB0aW1lLm1vbm90b25pYygpIC0gc3RhcnRlZCwgZXJyb3IpKVxuICAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICAgY29ubi5jbG9zZSgpXG4gICAgcmFpc2UgbGFzdF9lcnJvclxuXG5cbmRlZiBjdXJsX2FyZ3MobWV0aG9kLCB1cmksIGhlYWRlcl9wYXRoLCBvdXRwdXRfcGF0aCwgcmVxdWVzdF9oZWFkZXJzKTpcbiAgICB1cmwgPSB1cmxsaWIucGFyc2UudXJsdW5zcGxpdCgodXJpLnNjaGVtZSwgdXJpLm5ldGxvYywgdXJpLnBhdGgsIHVyaS5xdWVyeSwgJycpKVxuICAgIGFyZ3MgPSBbQ1VSTCwgJy1zUycsICctZycsICctNCcsICctLWh0dHAxLjEnLCAnLS10bHN2MS4yJywgJy0tbWF4LXRpbWUnLCAnNjAwJyxcbiAgICAgICAgICAgICctWCcsIG1ldGhvZCwgJy1EJywgaGVhZGVyX3BhdGgsICctbycsIG91dHB1dF9wYXRoXVxuICAgIGZvciBuYW1lLCB2YWx1ZSBpbiByZXF1ZXN0X2hlYWRlcnMuaXRlbXMoKTpcbiAgICAgICAgaWYgbmFtZS5sb3dlcigpIG5vdCBpbiBGT1JXQVJEX1NLSVA6XG4gICAgICAgICAgICBhcmdzLmV4dGVuZChbJy1IJywgJyVzOiAlcycgJSAobmFtZSwgdmFsdWUpXSlcbiAgICBhcmdzLmFwcGVuZCh1cmwpXG4gICAgcmV0dXJuIGFyZ3NcblxuXG5kZWYgZmV0Y2goY2xpZW50LCBtZXRob2QsIHVyaSwgcmVxdWVzdF9oZWFkZXJzLCByZXN0KTpcbiAgICB0cnk6XG4gICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0nZGdlLXIyLScpIGFzIGZvbGRlcjpcbiAgICAgICAgICAgIGhlYWRlcl9wYXRoID0gb3MucGF0aC5qb2luKGZvbGRlciwgJ2hlYWRlcnMnKVxuICAgICAgICAgICAgb3V0cHV0X3BhdGggPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCAnYm9keScpXG4gICAgICAgICAgICB1cGxvYWRfcGF0aCA9IE5vbmVcbiAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAnUFVUJzpcbiAgICAgICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGludChyZXF1ZXN0X2hlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcsICcnKSlcbiAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA0MTEsICdMZW5ndGggUmVxdWlyZWQnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICBpZiBsZW5ndGggPCAwIG9yIGxlbmd0aCA+IE1BWF9QVVQ6XG4gICAgICAgICAgICAgICAgICAgIHJlcGx5KGNsaWVudCwgNDEzLCAnUGF5bG9hZCBUb28gTGFyZ2UnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB1cGxvYWRfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsICd1cGxvYWQnKVxuICAgICAgICAgICAgICAgIGNsaWVudC5zZXR0aW1lb3V0KE5vbmUpXG4gICAgICAgICAgICAgICAgd2l0aCBvcGVuKHVwbG9hZF9wYXRoLCAnd2InKSBhcyBwYXlsb2FkOlxuICAgICAgICAgICAgICAgICAgICBjb3B5X2NsaWVudF9ib2R5KGNsaWVudCwgcmVzdCwgbGVuZ3RoLCBwYXlsb2FkLndyaXRlKVxuICAgICAgICAgICAgZWxzZTpcbiAgICAgICAgICAgICAgICBjbGllbnQuc2V0dGltZW91dChOb25lKVxuICAgICAgICAgICAgaWYgbWV0aG9kID09ICdQVVQnOlxuICAgICAgICAgICAgICAgIHRyeTpcbiAgICAgICAgICAgICAgICAgICAgd2l0aCBPUklHSU46XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlYXNvbiwgY29udGVudF90eXBlLCBsZW5ndGggPSBvcmlnaW5fcHV0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwgcmVxdWVzdF9oZWFkZXJzLCB1cGxvYWRfcGF0aCwgb3V0cHV0X3BhdGgpXG4gICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzc2wuU1NMRXJyb3IsIGh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb24pIGFzIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICBsb2dfc3RvcmFnZSgnc3RvcmFnZSBQVVQgJXMgZmFpbGVkOiAlcycgJSAodXJpLmhvc3RuYW1lLCBlcnJvcikpXG4gICAgICAgICAgICAgICAgICAgIHJlcGx5KGNsaWVudCwgNTAyLCAnQmFkIEdhdGV3YXknKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIGVsc2U6XG4gICAgICAgICAgICAgICAgYXJncyA9IGN1cmxfYXJncyhtZXRob2QsIHVyaSwgaGVhZGVyX3BhdGgsIG91dHB1dF9wYXRoLCByZXF1ZXN0X2hlYWRlcnMpXG4gICAgICAgICAgICAgICAgd2l0aCBPUklHSU46XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKGFyZ3MsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpXG4gICAgICAgICAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbCA9IChyZXN1bHQuc3RkZXJyIG9yIGInJykuZGVjb2RlKGVycm9ycz0ncmVwbGFjZScpLnN0cmlwKClcbiAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RvcmFnZSAlcyAlcyBjdXJsICVzICVzXFxuJyAlIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCwgdXJpLmhvc3RuYW1lLCByZXN1bHQucmV0dXJuY29kZSwgZGV0YWlsKSlcbiAgICAgICAgICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA1MDIsICdCYWQgR2F0ZXdheScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIHN0YXR1cywgcmVhc29uLCBjb250ZW50X3R5cGUsIGxlbmd0aCA9IHBhcnNlX2R1bXBfaGVhZGVyKGhlYWRlcl9wYXRoKVxuICAgICAgICAgICAgc2VuZF9maWxlKGNsaWVudCwgc3RhdHVzLCByZWFzb24sIGNvbnRlbnRfdHlwZSwgbGVuZ3RoLCBvdXRwdXRfcGF0aCwgc2tpcF9ib2R5PShtZXRob2QgPT0gJ0hFQUQnKSlcbiAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RvcmFnZSAlcyAlcyBmYWlsZWQ6ICVzXFxuJyAlIChtZXRob2QsIHVyaS5ob3N0bmFtZSwgZXJyb3IpKVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICByZXBseShjbGllbnQsIDUwMiwgJ0JhZCBHYXRld2F5JylcbiAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgICAgICBwYXNzXG5cblxuZGVmIGNwdV90aWNrcygpOlxuICAgIFwiXCJcIkN1bXVsYXRpdmUgdXNlciwgc3lzdGVtLCBpZGxlIGFuZCBuaWNlIHRpY2tzIG92ZXIgYWxsIENQVXMsIG9yIE5vbmUgb2ZmIG1hY09TLlxuXG4gICAgUmVhZCBpbi1wcm9jZXNzOiBgdG9wYCBuZWVkcyBpdHMgb3duIENQVSB0aW1lIGFuZCB0aW1lZCBvdXQgb24gYSBzYXR1cmF0ZWQgTWFjLFxuICAgIHdoaWNoIGxlZnQgdGhlIGhvc3QgdW5tZWFzdXJlZCBleGFjdGx5IHdoZW4gaXQgd2FzIGJ1c2llc3QuXG4gICAgXCJcIlwiXG4gICAgaG9zdCA9IG1hY2hfaG9zdCgpXG4gICAgaWYgaG9zdCBpcyBOb25lOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHN5c3RlbSwgcG9ydCA9IGhvc3RcbiAgICB0aWNrcyA9IChjdHlwZXMuY191aW50MzIgKiA0KSgpXG4gICAgY291bnQgPSBjdHlwZXMuY191aW50MzIobGVuKHRpY2tzKSlcbiAgICBpZiBzeXN0ZW0uaG9zdF9zdGF0aXN0aWNzKHBvcnQsIEhPU1RfQ1BVX0xPQURfSU5GTywgdGlja3MsIGN0eXBlcy5ieXJlZihjb3VudCkpICE9IDA6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgcmV0dXJuIGxpc3QodGlja3MpXG5cblxuQGZ1bmN0b29scy5jYWNoZVxuZGVmIG1hY2hfaG9zdCgpOlxuICAgIHRyeTpcbiAgICAgICAgc3lzdGVtID0gY3R5cGVzLkNETEwoJy91c3IvbGliL2xpYlN5c3RlbS5keWxpYicpXG4gICAgZXhjZXB0IE9TRXJyb3I6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgc3lzdGVtLm1hY2hfaG9zdF9zZWxmLnJlc3R5cGUgPSBjdHlwZXMuY191aW50MzJcbiAgICByZXR1cm4gc3lzdGVtLCBzeXN0ZW0ubWFjaF9ob3N0X3NlbGYoKVxuXG5cbmRlZiBjcHVfcGVyY2VudCgpOlxuICAgIGJlZm9yZSA9IGNwdV90aWNrcygpXG4gICAgaWYgYmVmb3JlIGlzIE5vbmU6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgdGltZS5zbGVlcChDUFVfU0FNUExFX1NFQ09ORFMpXG4gICAgYWZ0ZXIgPSBjcHVfdGlja3MoKVxuICAgIGlmIGFmdGVyIGlzIE5vbmU6XG4gICAgICAgIHJldHVybiBOb25lXG4gICAgZWxhcHNlZCA9IFsobmV3IC0gb2xkKSAlIDIgKiogMzIgZm9yIG9sZCwgbmV3IGluIHppcChiZWZvcmUsIGFmdGVyKV1cbiAgICB0b3RhbCA9IHN1bShlbGFwc2VkKVxuICAgIHJldHVybiAxMDAgKiAodG90YWwgLSBlbGFwc2VkWzJdKSAvIHRvdGFsIGlmIHRvdGFsIGVsc2UgTm9uZVxuXG5cbmRlZiBhY3Rpdml0eV9wYXlsb2FkKCk6XG4gICAgcmF3ID0gY29tbWFuZF9vdXRwdXQoWycvdXNyL3NiaW4vaW9yZWcnLCAnLWMnLCAnSU9ISURTeXN0ZW0nXSlcbiAgICBtYXRjaCA9IHJlLnNlYXJjaChyJ1wiSElESWRsZVRpbWVcIlxccyo9XFxzKihcXGQrKScsIHJhdyBvciAnJylcbiAgICBtZW1vcnlfcmF3ID0gY29tbWFuZF9vdXRwdXQoWycvdXNyL2Jpbi92bV9zdGF0J10pXG4gICAgcGFnZSA9IHJlLnNlYXJjaChyJ3BhZ2Ugc2l6ZSBvZiAoXFxkKykgYnl0ZXMnLCBtZW1vcnlfcmF3IG9yICcnKVxuICAgIGZyZWUgPSBzdW0oaW50KHZhbHVlKSBmb3IgdmFsdWUgaW4gcmUuZmluZGFsbChyJ1BhZ2VzICg/OmZyZWV8aW5hY3RpdmV8c3BlY3VsYXRpdmV8cHVyZ2VhYmxlKTpcXHMrKFxcZCspJywgbWVtb3J5X3JhdyBvciAnJykpXG4gICAgY3B1ID0gY3B1X3BlcmNlbnQoKVxuICAgIHBvd2VyID0gaG9zdF9wb3dlcigpXG4gICAgcmV0dXJuIGRpY3QocmVwb3J0ZWRfYXQ9dGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJywgdGltZS5nbXRpbWUoKSksXG4gICAgICAgICAgICAgICAgaWRsZV9zZWNvbmRzPWludChtYXRjaFsxXSkgLyAxMDAwMDAwMDAwIGlmIG1hdGNoIGVsc2UgTm9uZSxcbiAgICAgICAgICAgICAgICBjcHVfcGVyY2VudD1jcHUsXG4gICAgICAgICAgICAgICAgbWVtb3J5X2F2YWlsYWJsZV9ieXRlcz1mcmVlICogaW50KHBhZ2VbMV0pIGlmIHBhZ2UgZWxzZSBOb25lLFxuICAgICAgICAgICAgICAgIGJhdHRlcnlfcHJlc2VudD1wb3dlci5nZXQoJ2JhdHRlcnlfcHJlc2VudCcpLCBhY19jb25uZWN0ZWQ9cG93ZXIuZ2V0KCdhY19jb25uZWN0ZWQnKSlcblxuXG5kZWYgaGFuZGxlKGNsaWVudCwgX2FkZHJlc3MpOlxuICAgIHRyeTpcbiAgICAgICAgY2xpZW50LnNldHRpbWVvdXQoMzApXG4gICAgICAgIHJhdywgcmVzdCA9IHJlYWRfaGVhZGVycyhjbGllbnQpXG4gICAgICAgIGlmIHJhdyBpcyBOb25lOlxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIG1ldGhvZCwgaGVhZGVycywgdXJpID0gcGFyc2VfcmVxdWVzdChyYXcpXG4gICAgICAgIGlmIG1ldGhvZCBpcyBOb25lOlxuICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA0MDAsICdCYWQgUmVxdWVzdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgbWV0aG9kID09ICdHRVQnIGFuZCByZXF1ZXN0X3BhdGgocmF3KSA9PSAnL2FjdGl2aXR5JzpcbiAgICAgICAgICAgIHRva2VuX3BhdGggPSBQYXRoLmhvbWUoKSAvICdMaWJyYXJ5JyAvICdBcHBsaWNhdGlvbiBTdXBwb3J0JyAvICdkZ2Utd29ya2VyJyAvICdoZWxwZXItdG9rZW4nXG4gICAgICAgICAgICBleHBlY3RlZCA9IHRva2VuX3BhdGgucmVhZF90ZXh0KCkuc3RyaXAoKSBpZiB0b2tlbl9wYXRoLmV4aXN0cygpIGVsc2UgJydcbiAgICAgICAgICAgIHN1cHBsaWVkID0gaGVhZGVycy5nZXQoJ3gtZGdlLWhlbHBlci10b2tlbicsICcnKVxuICAgICAgICAgICAgaWYgbm90IGV4cGVjdGVkIG9yIG5vdCBobWFjLmNvbXBhcmVfZGlnZXN0KHN1cHBsaWVkLCBleHBlY3RlZCk6XG4gICAgICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA0MDMsICdGb3JiaWRkZW4nKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgcmVwbHlfanNvbihjbGllbnQsIGFjdGl2aXR5X3BheWxvYWQoKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICBpZiBtZXRob2QgPT0gJ0dFVCcgYW5kIHJlcXVlc3RfcGF0aChyYXcpID09ICcvdXBsaW5rJzpcbiAgICAgICAgICAgIFVQTElOS19SRUFEWS53YWl0KDEyKVxuICAgICAgICAgICAgcmVwbHlfanNvbihjbGllbnQsIHVwbGlua19wYXlsb2FkKCkpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgbWV0aG9kIG5vdCBpbiAoJ0dFVCcsICdQVVQnLCAnSEVBRCcpOlxuICAgICAgICAgICAgcmVwbHkoY2xpZW50LCA0MDUsICdNZXRob2QgTm90IEFsbG93ZWQnKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIGlmIHVyaSBpcyBOb25lOlxuICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgncmVqZWN0ZWQgc3RvcmFnZSAlc1xcbicgJSBtZXRob2QpXG4gICAgICAgICAgICByZXBseShjbGllbnQsIDQwMywgJ0ZvcmJpZGRlbicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgZmV0Y2goY2xpZW50LCBtZXRob2QsIHVyaSwgaGVhZGVycywgcmVzdClcbiAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RvcmFnZSBjbGllbnQgZmFpbGVkOiAlc1xcbicgJSBlcnJvcilcbiAgICAgICAgcmV0dXJuXG4gICAgZmluYWxseTpcbiAgICAgICAgY2xpZW50LmNsb3NlKClcblxuXG5kZWYgbGlzdGVuKGhvc3QsIHBvcnQpOlxuICAgIFwiXCJcIldhaXRzIGZvciB0aGUgcG9ydCByYXRoZXIgdGhhbiBleGl0aW5nLCBzbyBsYXVuY2hkIGRvZXMgbm90IHJlc3RhcnQgYSBjb3B5IGV2ZXJ5XG4gICAgZmV3IHNlY29uZHMgd2hpbGUgYW4gb2xkZXIgaGVscGVyIHN0aWxsIGhvbGRzIGl0LlwiXCJcIlxuICAgIHdhaXRpbmcgPSBGYWxzZVxuICAgIHdoaWxlIFRydWU6XG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHJldHVybiBzb2NrZXQuY3JlYXRlX3NlcnZlcigoaG9zdCwgcG9ydCksIHJldXNlX3BvcnQ9RmFsc2UpXG4gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOlxuICAgICAgICAgICAgaWYgZXJyb3IuZXJybm8gIT0gZXJybm8uRUFERFJJTlVTRTpcbiAgICAgICAgICAgICAgICByYWlzZVxuICAgICAgICAgICAgaWYgbm90IHdhaXRpbmc6XG4gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnUG9ydCAlZCBpcyBpbiB1c2U7IHdhaXRpbmcgZm9yIGl0IHRvIGZyZWUuXFxuJyAlIHBvcnQpXG4gICAgICAgICAgICAgICAgd2FpdGluZyA9IFRydWVcbiAgICAgICAgICAgIHRpbWUuc2xlZXAoTElTVEVOX1JFVFJZX1NFQ09ORFMpXG5cblxuZGVmIHNlcnZlKGhvc3Q9TElTVEVOX0hPU1QsIHBvcnQ9TElTVEVOX1BPUlQpOlxuICAgIHNlcnZlciA9IGxpc3Rlbihob3N0LCBwb3J0KVxuICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXVwbGlua19sb29wLCBkYWVtb249VHJ1ZSkuc3RhcnQoKVxuICAgIHdoaWxlIFRydWU6XG4gICAgICAgIGNsaWVudCwgYWRkcmVzcyA9IHNlcnZlci5hY2NlcHQoKVxuICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1oYW5kbGUsIGFyZ3M9KGNsaWVudCwgYWRkcmVzcyksIGRhZW1vbj1UcnVlKS5zdGFydCgpXG5cblxuZGVmIG1haW4oKTpcbiAgICB0cnk6XG4gICAgICAgIHNlcnZlKClcbiAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgnUjIgc3RvcmFnZSBwcm94eSBmYWlsZWQgdG8gbGlzdGVuOiAnICsgc3RyKGVycm9yKSkgZnJvbSBOb25lXG5cblxuaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzpcbiAgICB0cnk6XG4gICAgICAgIG1haW4oKVxuICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDpcbiAgICAgICAgc3lzLmV4aXQoMClcbiIsInNldHVwX2xvZ19yZXBvcnRlci5weSI6IlwiXCJcIkJlc3QtZWZmb3J0IHVwbG9hZCBvZiBzZWxlY3RlZCBzZXR1cCBkaWFnbm9zdGljcyB3aXRob3V0IGJsb2NraW5nIGluc3RhbGxhdGlvbi5cIlwiXCJcbmltcG9ydCBqc29uXG5pbXBvcnQgcXVldWVcbmltcG9ydCByZVxuaW1wb3J0IHRocmVhZGluZ1xuaW1wb3J0IHVybGxpYi5yZXF1ZXN0XG5cblxuUFJFRklYRVMgPSAoXG4gICAgJz09PicsICdXYXJuaW5nOicsICdFcnJvcjonLCAnZmF0YWw6JywgJ2N1cmw6JywgJ0ZBVEFbJywgJ0lORk9bJyxcbiAgICAnSW5zdGFsbGluZyBIb21lYnJldycsICdIb21lYnJldyBpbnN0YWxsZXIgZG93bmxvYWRlZCcsICdIb21lYnJldyBpcyBzdGlsbCBpbnN0YWxsaW5nJyxcbiAgICAnSW5zdGFsbGluZyBMaW1hJywgJ0NyZWF0aW5nIGEgTGludXggd29ya2VyJywgJ1N0YXJ0aW5nIHRoZSBMaW51eCB3b3JrZXInLFxuICAgICdTdGFydGluZyBhIE1hYyBuZXR3b3JrIGhlbHBlcicsICdJbnN0YWxsaW5nIHRoZSB3b3JrZXIgaW5zaWRlJyxcbiAgICAnQXBwcm92ZWQuIFN0YXJ0aW5nIHNldHVwJywgJ0NoZWNraW5nIHRoaXMgY29tcHV0ZXInLCAnUHJlcGFyaW5nIHRoaXMgY29tcHV0ZXInLFxuICAgICdDb25uZWN0aW5nIGFuZCBkb3dubG9hZGluZycsICdDb25uZWN0ZWQhJywgJ1NldHVwIG5lZWRzIGF0dGVudGlvbjonLFxuKVxuXG5cbmNsYXNzIE5vUmVkaXJlY3QodXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlcik6XG4gICAgZGVmIHJlZGlyZWN0X3JlcXVlc3Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgc2V0dXAgbG9nIHNlcnZlciByZWRpcmVjdGVkIHRoZSB1cGxvYWQuJylcblxuXG5IVFRQID0gdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKE5vUmVkaXJlY3QoKSlcblxuXG5kZWYgc2FmZV9zZXR1cF9sb2dfbGluZShsaW5lKTpcbiAgICB0ZXh0ID0gcmUuc3ViKHInXFx4MWJcXFtbMC05O10qW0EtWmEtel0nLCAnJywgbGluZSkuc3RyaXAoKVxuICAgIGlmIG5vdCB0ZXh0LnN0YXJ0c3dpdGgoUFJFRklYRVMpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIGlmIHRleHQuc3RhcnRzd2l0aCgnSW5zdGFsbGluZyBIb21lYnJldycpOlxuICAgICAgICByZXR1cm4gJ0luc3RhbGxpbmcgSG9tZWJyZXcnXG4gICAgaWYgcmUuc2VhcmNoKHInKD9pKXBhc3N3b3JkfHRva2VufHNlY3JldHxjcmVkZW50aWFsfGF1dGhvcml6YXRpb258YmVhcmVyXFxzK3xhcGkuP2tleScsIHRleHQpOlxuICAgICAgICByZXR1cm4gTm9uZVxuICAgIHJldHVybiB0ZXh0WzozMDBdXG5cblxuY2xhc3MgU2V0dXBMb2dSZXBvcnRlcjpcbiAgICBkZWYgX19pbml0X18oc2VsZiwgb3JpZ2luLCB0b2tlbik6XG4gICAgICAgIHNlbGYub3JpZ2luID0gb3JpZ2luXG4gICAgICAgIHNlbGYudG9rZW4gPSB0b2tlblxuICAgICAgICBzZWxmLmxpbmVzID0gcXVldWUuUXVldWUobWF4c2l6ZT0yMDApXG4gICAgICAgIHNlbGYuY2xvc2VkID0gRmFsc2VcbiAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnVwbG9hZCwgZGFlbW9uPVRydWUpXG4gICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KClcblxuICAgIGRlZiByZWNvcmQoc2VsZiwgbGluZSk6XG4gICAgICAgIHNhZmUgPSBzYWZlX3NldHVwX2xvZ19saW5lKGxpbmUpXG4gICAgICAgIGlmIHNhZmU6XG4gICAgICAgICAgICB0cnk6XG4gICAgICAgICAgICAgICAgc2VsZi5saW5lcy5wdXRfbm93YWl0KHNhZmUpXG4gICAgICAgICAgICBleGNlcHQgcXVldWUuRnVsbDpcbiAgICAgICAgICAgICAgICBwYXNzXG5cbiAgICBkZWYgc2VuZChzZWxmLCBiYXRjaCk6XG4gICAgICAgIHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KFxuICAgICAgICAgICAgc2VsZi5vcmlnaW4ucnN0cmlwKCcvJykgKyAnL2NvbXB1dGVfZmxlZXQvc2V0dXBfbG9ncycsXG4gICAgICAgICAgICBkYXRhPWpzb24uZHVtcHMoeydsaW5lcyc6IGJhdGNofSkuZW5jb2RlKCksXG4gICAgICAgICAgICBtZXRob2Q9J1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVycz17J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBzZWxmLnRva2VufSxcbiAgICAgICAgKVxuICAgICAgICB0cnk6XG4gICAgICAgICAgICB3aXRoIEhUVFAub3BlbihyZXF1ZXN0LCB0aW1lb3V0PTMpOlxuICAgICAgICAgICAgICAgIHBhc3NcbiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBSdW50aW1lRXJyb3IpOlxuICAgICAgICAgICAgcGFzc1xuXG4gICAgZGVmIHVwbG9hZChzZWxmKTpcbiAgICAgICAgYmF0Y2ggPSBbXVxuICAgICAgICB3aGlsZSBUcnVlOlxuICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLmxpbmVzLmdldCh0aW1lb3V0PTIpXG4gICAgICAgICAgICBleGNlcHQgcXVldWUuRW1wdHk6XG4gICAgICAgICAgICAgICAgbGluZSA9IE5vbmVcbiAgICAgICAgICAgIGlmIGxpbmUgaXMgTm9uZTpcbiAgICAgICAgICAgICAgICBpZiBiYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKGJhdGNoKVxuICAgICAgICAgICAgICAgICAgICBiYXRjaCA9IFtdXG4gICAgICAgICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgZWxzZTpcbiAgICAgICAgICAgICAgICBiYXRjaC5hcHBlbmQobGluZSlcbiAgICAgICAgICAgICAgICBpZiBsZW4oYmF0Y2gpID49IDIwOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmQoYmF0Y2gpXG4gICAgICAgICAgICAgICAgICAgIGJhdGNoID0gW11cblxuICAgIGRlZiBjbG9zZShzZWxmKTpcbiAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlXG4gICAgICAgIHRyeTpcbiAgICAgICAgICAgIHNlbGYubGluZXMucHV0X25vd2FpdChOb25lKVxuICAgICAgICBleGNlcHQgcXVldWUuRnVsbDpcbiAgICAgICAgICAgIHBhc3NcbiAgICAgICAgc2VsZi50aHJlYWQuam9pbih0aW1lb3V0PTUpXG4iLCJwcmVwYXJlX21hY2hpbmUucHkiOiJcIlwiXCJQcmVwYXJlIHN1cHBvcnRlZCBMaW51eCBob3N0cyB3aXRob3V0IHJlc3RhcnRpbmcgYW4gZXhpc3RpbmcgRG9ja2VyIGRhZW1vbi5cIlwiXCJcbmltcG9ydCBvc1xuaW1wb3J0IHBsYXRmb3JtXG5pbXBvcnQgc2hsZXhcbmltcG9ydCBzaHV0aWxcbmltcG9ydCBzdWJwcm9jZXNzXG5cblxuZGVmIHJ1bigqYXJncyk6XG4gICAgcHJpbnQoJyQgJyArIHNobGV4LmpvaW4oc3RyKGl0ZW0pIGZvciBpdGVtIGluIGFyZ3MpLCBmbHVzaD1UcnVlKVxuICAgIHRyeTpcbiAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuZGVjb2RlKCkuc3RyaXAoKVxuICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgb3V0cHV0ID0gZXJyb3Iub3V0cHV0LmRlY29kZSgpLnN0cmlwKCkgaWYgZXJyb3Iub3V0cHV0IGVsc2UgJydcbiAgICAgICAgaWYgb3V0cHV0OlxuICAgICAgICAgICAgcHJpbnQob3V0cHV0LCBmbHVzaD1UcnVlKVxuICAgICAgICByYWlzZVxuXG5cbmRlZiBkZXBlbmRlbmNpZXMoKTpcbiAgICByZWxlYXNlID0gcGxhdGZvcm0uZnJlZWRlc2t0b3Bfb3NfcmVsZWFzZSgpXG4gICAgc3VwcG9ydGVkID0gKHJlbGVhc2UuZ2V0KCdJRCcpID09ICd1YnVudHUnIGFuZCByZWxlYXNlLmdldCgnVkVSU0lPTl9JRCcsICcnKS5zcGxpdCgnLicpWzBdIGluICgnMjQnLCAnMjUnLCAnMjYnKSkgb3IgKFxuICAgICAgICByZWxlYXNlLmdldCgnSUQnKSA9PSAnZGViaWFuJyBhbmQgcmVsZWFzZS5nZXQoJ1ZFUlNJT05fSUQnKSBpbiAoJzEyJywgJzEzJykpXG4gICAgcGFja2FnZXMgPSBbXVxuICAgIGZvciBiaW5hcnksIHBhY2thZ2UgaW4gWygnZG9ja2VyJywgJ2RvY2tlci5pbycpLCAoJ2lwJywgJ2lwcm91dGUyJyksICgnbHNwY2knLCAncGNpdXRpbHMnKSwgKCdsc2JsaycsICd1dGlsLWxpbnV4JyldOlxuICAgICAgICBpZiBub3Qgc2h1dGlsLndoaWNoKGJpbmFyeSk6XG4gICAgICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGFja2FnZSlcbiAgICBpZiBwYWNrYWdlcyBhbmQgc3VwcG9ydGVkOlxuICAgICAgICBwcmludCgnSW5zdGFsbGluZyByZXF1aXJlZCB0b29scy4gVGhpcyBtYXkgdGFrZSBhIGZldyBtaW51dGVzLi4uJywgZmx1c2g9VHJ1ZSlcbiAgICAgICAgcnVuKCdhcHQtZ2V0JywgJ3VwZGF0ZScsICctcXEnKVxuICAgICAgICBydW4oJ2FwdC1nZXQnLCAnaW5zdGFsbCcsICcteScsICctcXEnLCAqcGFja2FnZXMpXG4gICAgaWYgbm90IHNodXRpbC53aGljaCgnZG9ja2VyJyk6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRG9ja2VyIG11c3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgTGludXggdmVyc2lvbi4gQXNrIHlvdXIgYWRtaW5pc3RyYXRvciwgdGhlbiBydW4gc2V0dXAgYWdhaW4uJylcbiAgICBydW4oJ3N5c3RlbWN0bCcsICdlbmFibGUnLCAnLS1ub3cnLCAnZG9ja2VyLnNlcnZpY2UnKVxuICAgIGlmIHJ1bignZG9ja2VyJywgJ2luZm8nLCAnLS1mb3JtYXQnLCAne3suQ2dyb3VwRHJpdmVyfX0ge3suQ2dyb3VwVmVyc2lvbn19JykgIT0gJ3N5c3RlbWQgMic6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRG9ja2VyIG5lZWRzIHN5c3RlbWQgY2dyb3VwcyB2Mi4gQXNrIHlvdXIgYWRtaW5pc3RyYXRvciB0byB1cGRhdGUgaXRzIGNvbmZpZ3VyYXRpb24uIEV4aXN0aW5nIGNvbnRhaW5lcnMgd2VyZSBub3QgcmVzdGFydGVkLicpXG5cblxuZGVmIHByZXBhcmUoKTpcbiAgICBpZiBvcy5nZXRldWlkKCkgIT0gMDpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdSdW4gdGhlIGRvd25sb2FkZWQgc2V0dXAgc2NyaXB0IHdpdGggeW91ciBhZG1pbmlzdHJhdG9yIHBhc3N3b3JkLicpXG4gICAgaWYgcnVuKCdzdGF0JywgJy1mJywgJy1jJywgJyVUJywgJy9ydW4nKSAhPSAndG1wZnMnOlxuICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoaXMgY29tcHV0ZXIgbmVlZHMgbWVtb3J5LWJhY2tlZCB0ZW1wb3Jhcnkgc3RvcmFnZSBhdCAvcnVuLiBBc2sgeW91ciBhZG1pbmlzdHJhdG9yIHRvIGNvbmZpZ3VyZSBpdCwgdGhlbiBydW4gc2V0dXAgYWdhaW4uJylcbiAgICBkZXBlbmRlbmNpZXMoKVxuIiwidW5pbnN0YWxsLnB5IjoiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuXCJcIlwiUmVtb3ZlIG9ubHkgd29ya2VyLW93bmVkIHJlc291cmNlcy4gRGVmYXVsdHMgdG8gYSBkcnkgcnVuOyByZXZva2UgYmVmb3JlIGRlbGV0aW9uLlwiXCJcIlxuaW1wb3J0IGFyZ3BhcnNlXG5pbXBvcnQganNvblxuaW1wb3J0IG9zXG5mcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGhcbmltcG9ydCBzaHV0aWxcbmltcG9ydCBzdWJwcm9jZXNzXG5pbXBvcnQgc3lzXG5pbXBvcnQgdXJsbGliLmVycm9yXG5cblJPT1QgPSBQYXRoKCcvb3B0L2RnZS13b3JrZXInKVxuUlVOTkVSX0NPTkZJRyA9IFBhdGgoJy9ldGMvZ2l0bGFiLXJ1bm5lci9jb25maWcudG9tbCcpXG5NQUNfU1VQUE9SVCA9IFBhdGguaG9tZSgpIC8gJ0xpYnJhcnknIC8gJ0FwcGxpY2F0aW9uIFN1cHBvcnQnIC8gJ2RnZS13b3JrZXInXG5cblxuZGVmIHJldm9rZShyb290PVJPT1QpOlxuICAgIGltcG9ydCB1cmxsaWIucGFyc2VcbiAgICBpbXBvcnQgdXJsbGliLnJlcXVlc3RcbiAgICBjbGFzcyBOb1JlZGlyZWN0KHVybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXIpOlxuICAgICAgICBkZWYgcmVkaXJlY3RfcmVxdWVzdChzZWxmLCAqYXJncywgKiprd2FyZ3MpOlxuICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdSZWZ1c2luZyBhIHJlZGlyZWN0ZWQgcmV2b2NhdGlvbicpXG4gICAgSFRUUCA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcihOb1JlZGlyZWN0KCkpXG4gICAgaW1wb3J0IHVybGxpYi5yZXF1ZXN0XG4gICAgaWRlbnRpdHkgPSBqc29uLmxvYWRzKChyb290IC8gJ2lkZW50aXR5Lmpzb24nKS5yZWFkX3RleHQoKSlcbiAgICBvcmlnaW4gPSB1cmxsaWIucGFyc2UudXJsc3BsaXQoaWRlbnRpdHlbJ29yaWdpbiddKVxuICAgIGlmIG9yaWdpbi5zY2hlbWUgIT0gJ2h0dHBzJyBvciBub3Qgb3JpZ2luLmhvc3RuYW1lIG9yIG9yaWdpbi51c2VybmFtZSBvciBvcmlnaW4ucGF0aCBub3QgaW4gKCcnLCAnLycpIG9yIG9yaWdpbi5xdWVyeSBvciBvcmlnaW4uZnJhZ21lbnQ6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCB3b3JrZXIgb3JpZ2luJylcbiAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChpZGVudGl0eVsnb3JpZ2luJ10ucnN0cmlwKCcvJykgKyAnL2NvbXB1dGVfZmxlZXQvZGlzY29ubmVjdCcsXG4gICAgICAgIGRhdGE9Yid7fScsIGhlYWRlcnM9eydBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgaWRlbnRpdHlbJ3Rva2VuJ10sICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9LCBtZXRob2Q9J1BPU1QnKVxuICAgIHRyeTpcbiAgICAgICAgd2l0aCBIVFRQLm9wZW4ocmVxdWVzdCwgdGltZW91dD0yMCkgYXMgcmVzcG9uc2U6XG4gICAgICAgICAgICBpZiBub3QganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKDQwOTYpKS5nZXQoJ2Rpc2Nvbm5lY3RlZCcpOlxuICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2VydmVyIGRpZCBub3QgY29uZmlybSBkaXNjb25uZWN0aW9uJylcbiAgICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvciBhcyBlcnJvcjpcbiAgICAgICAgaWYgZXJyb3IuY29kZSAhPSA0MDE6ICAjIEFuIGFscmVhZHktcmV2b2tlZCBpZGVudGl0eSBpcyBzYWZlIHRvIHJlbW92ZS5cbiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2VydmVyIHJldm9jYXRpb24gZmFpbGVkJykgZnJvbSBOb25lXG5cblxuZGVmIHJlbW92ZV9tYW5hZ2VkX2NpKCk6XG4gICAgaW1wb3J0IHRvbWxsaWJcbiAgICBjb25maWcgPSBSVU5ORVJfQ09ORklHXG4gICAgaWYgbm90IGNvbmZpZy5leGlzdHMoKTpcbiAgICAgICAgcmV0dXJuXG4gICAgcnVubmVycyA9IHRvbWxsaWIubG9hZHMoY29uZmlnLnJlYWRfdGV4dCgpKS5nZXQoJ3J1bm5lcnMnLCBbXSlcbiAgICBpZiBub3QgYW55KHJvdy5nZXQoJ25hbWUnKSA9PSAnZGdlLWNvbXB1dGUnIGZvciByb3cgaW4gcnVubmVycyk6XG4gICAgICAgIHJldHVyblxuICAgIHN1YnByb2Nlc3MucnVuKFsnZ2l0bGFiLXJ1bm5lcicsICd1bnJlZ2lzdGVyJywgJy0tbmFtZScsICdkZ2UtY29tcHV0ZSddLCBjaGVjaz1UcnVlLCBjYXB0dXJlX291dHB1dD1UcnVlKVxuICAgIHJ1bm5lcnMgPSB0b21sbGliLmxvYWRzKGNvbmZpZy5yZWFkX3RleHQoKSkuZ2V0KCdydW5uZXJzJywgW10pIGlmIGNvbmZpZy5leGlzdHMoKSBlbHNlIFtdXG4gICAgaWYgYW55KHJvdy5nZXQoJ25hbWUnKSA9PSAnZGdlLWNvbXB1dGUnIGZvciByb3cgaW4gcnVubmVycyk6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTWFuYWdlZCBDSSBydW5uZXIgcmVtb3ZhbCB3YXMgbm90IGNvbmZpcm1lZCcpXG5cblxuZGVmIGxpbnV4X2NvbW1hbmRzKCk6XG4gICAgcmV0dXJuIFtcbiAgICAgICAgWydzeXN0ZW1jdGwnLCAnZGlzYWJsZScsICctLW5vdycsICdkZ2Utd29ya2VyLnNlcnZpY2UnXSxcbiAgICAgICAgWyd1bW91bnQnLCAnL3J1bi9kZ2Utd29ya2VyL3Rhc2tzJ10sXG4gICAgICAgIFsnc3lzdGVtY3RsJywgJ2RhZW1vbi1yZWxvYWQnXSxcbiAgICBdXG5cblxuZGVmIHVuaW5zdGFsbF9saW51eChhcHBseSk6XG4gICAgaWYgbm90IGFwcGx5OlxuICAgICAgICBwcmludCgnRHJ5IHJ1bjogcmV2b2tlIGlkZW50aXR5LCBzdG9wIHdvcmtlciBzZXJ2aWNlLCByZW1vdmUgbGFiZWxlZCB0YXNrIGNvbnRhaW5lcnMsIHVubW91bnQgc2NyYXRjaCwgcmVtb3ZlIC9vcHQvZGdlLXdvcmtlciBhbmQgaXRzIHNlcnZpY2UgdW5pdC4nKVxuICAgICAgICByZXR1cm5cbiAgICBpZiBvcy5nZXRldWlkKCkgIT0gMDpcbiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdSdW4gTGludXggdW5pbnN0YWxsIGFzIHJvb3QnKVxuICAgIHJlbW92ZV9tYW5hZ2VkX2NpKClcbiAgICByZXZva2UoKVxuICAgIHN1YnByb2Nlc3MucnVuKGxpbnV4X2NvbW1hbmRzKClbMF0sIGNoZWNrPVRydWUpXG4gICAgY29udGFpbmVycyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZG9ja2VyJywgJ3BzJywgJy1hcScsICctLWZpbHRlcj1sYWJlbD1jb20uZGdlLnJvbGU9Y29tcHV0ZS10YXNrJ10sIHRleHQ9VHJ1ZSkuc3BsaXQoKVxuICAgIGlmIGNvbnRhaW5lcnM6XG4gICAgICAgIHN1YnByb2Nlc3MucnVuKFsnZG9ja2VyJywgJ3JtJywgJy1mJywgKmNvbnRhaW5lcnNdLCBjaGVjaz1UcnVlKVxuICAgIHNjcmF0Y2ggPSBQYXRoKCcvcnVuL2RnZS13b3JrZXIvdGFza3MnKVxuICAgIGlmIG9zLnBhdGguaXNtb3VudChzY3JhdGNoKTpcbiAgICAgICAgc3VicHJvY2Vzcy5ydW4obGludXhfY29tbWFuZHMoKVsxXSwgY2hlY2s9VHJ1ZSlcbiAgICBQYXRoKCcvZXRjL3N5c3RlbWQvc3lzdGVtL2RnZS13b3JrZXIuc2VydmljZScpLnVubGluayhtaXNzaW5nX29rPVRydWUpXG4gICAgc2h1dGlsLnJtdHJlZShST09UKVxuICAgIHN1YnByb2Nlc3MucnVuKGxpbnV4X2NvbW1hbmRzKClbMl0sIGNoZWNrPVRydWUpXG5cblxuZGVmIHVuaW5zdGFsbF9tYWNvcyhhcHBseSk6XG4gICAgaWYgbm90IGFwcGx5OlxuICAgICAgICBwcmludCgnRHJ5IHJ1bjogcmV2b2tlIFZNIHdvcmtlciwgc3RvcCB3b3JrZXIgaGVscGVyIGFuZCBsb2dpbiBzdGFydCwgZGVsZXRlIGRnZS13b3JrZXIgTGltYSBWTSBhbmQgd29ya2VyIHN1cHBvcnQuIEhvbWVicmV3IGFuZCBMaW1hIHJlbWFpbiBpbnN0YWxsZWQuJylcbiAgICAgICAgcmV0dXJuXG4gICAgaWYgbm90IChNQUNfU1VQUE9SVCAvICdvd25lZC12bS5qc29uJykuZXhpc3RzKCk6XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm8gb3duZWQgd29ya2VyIFZNIHJlY29yZDsgbm90aGluZyByZW1vdmVkJylcbiAgICBpZiBqc29uLmxvYWRzKChNQUNfU1VQUE9SVCAvICdvd25lZC12bS5qc29uJykucmVhZF90ZXh0KCkpICE9IHsnbmFtZSc6ICdkZ2Utd29ya2VyJ306XG4gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCB3b3JrZXIgVk0gcmVjb3JkJylcbiAgICBzdWJwcm9jZXNzLnJ1bihbJ2xpbWFjdGwnLCAnc2hlbGwnLCAnZGdlLXdvcmtlcicsICdzdWRvJywgJ3B5dGhvbjMnLCAnL29wdC9kZ2Utd29ya2VyL3VuaW5zdGFsbC5weScsICctLXJldm9rZS1vbmx5J10sIGNoZWNrPVRydWUpXG4gICAgZm9yIGxhYmVsIGluICgnY29tLmRnZS5jb21wdXRlLXdvcmtlci12bScsICdjb20uZGdlLmNvbXB1dGUtc3RvcmFnZS1wcm94eScpOlxuICAgICAgICBwbGlzdCA9IFBhdGguaG9tZSgpIC8gJ0xpYnJhcnknIC8gJ0xhdW5jaEFnZW50cycgLyAobGFiZWwgKyAnLnBsaXN0JylcbiAgICAgICAgaWYgcGxpc3QuZXhpc3RzKCk6XG4gICAgICAgICAgICBzdWJwcm9jZXNzLnJ1bihbJ2xhdW5jaGN0bCcsICdib290b3V0JywgJ2d1aS8nICsgc3RyKG9zLmdldHVpZCgpKSwgc3RyKHBsaXN0KV0sIGNoZWNrPUZhbHNlLCBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLCBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKVxuICAgICAgICAgICAgcGxpc3QudW5saW5rKClcbiAgICBzdWJwcm9jZXNzLnJ1bihbJ2xpbWFjdGwnLCAnc3RvcCcsICdkZ2Utd29ya2VyJ10sIGNoZWNrPVRydWUpXG4gICAgc3VicHJvY2Vzcy5ydW4oWydsaW1hY3RsJywgJ2RlbGV0ZScsICctLWZvcmNlJywgJ2RnZS13b3JrZXInXSwgY2hlY2s9VHJ1ZSlcbiAgICBzaHV0aWwucm10cmVlKE1BQ19TVVBQT1JUKVxuXG5cbmRlZiBtYWluKCk6XG4gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249X19kb2NfXylcbiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFwcGx5JywgYWN0aW9uPSdzdG9yZV90cnVlJylcbiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJldm9rZS1vbmx5JywgYWN0aW9uPSdzdG9yZV90cnVlJylcbiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKVxuICAgIGlmIGFyZ3MucmV2b2tlX29ubHk6XG4gICAgICAgIHJlbW92ZV9tYW5hZ2VkX2NpKClcbiAgICAgICAgcmV2b2tlKClcbiAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzpcbiAgICAgICAgdW5pbnN0YWxsX21hY29zKGFyZ3MuYXBwbHkpXG4gICAgZWxpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKTpcbiAgICAgICAgdW5pbnN0YWxsX2xpbnV4KGFyZ3MuYXBwbHkpXG4gICAgZWxzZTpcbiAgICAgICAgcGFyc2VyLmVycm9yKCdVc2UgdW5pbnN0YWxsX3dpbmRvd3MucHMxIG9uIFdpbmRvd3MnKVxuXG5cbmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG4gICAgdHJ5OlxuICAgICAgICBtYWluKClcbiAgICBleGNlcHQgKE9TRXJyb3IsIFJ1bnRpbWVFcnJvciwgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IsIFZhbHVlRXJyb3IpOlxuICAgICAgICBzeXMuZXhpdCgnVW5pbnN0YWxsIGluY29tcGxldGU7IHdvcmtlciBjcmVkZW50aWFscyBoYXZlIGJlZW4gcHJlc2VydmVkIHVubGVzcyByZW1vdmFsIHN1Y2NlZWRlZC4gQ2hlY2sgY29ubmVjdGl2aXR5IGFuZCBvd25lZCBzZXJ2aWNlcywgdGhlbiByZXRyeS4nKVxuIiwiY29uZmlnLmpzb24iOiJ7XCJvcmlnaW5cIjpcImh0dHBzOi8vZG9yaWFuZ3JheS5uZXRcIixcImVucm9sbG1lbnRcIjp0cnVlfSIsImRnZS1pY29uLnBuZyI6ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNQUFBQURBQ0FJQUFBRGR2dnRRQUFBQUlHTklVazBBQUhvbUFBQ0FoQUFBK2dBQUFJRG9BQUIxTUFBQTZtQUFBRHFZQUFBWGNKeTZVVHdBQUFBR1lrdEhSQUQzQVBZQThYaWsrdG9BQUFBSGRFbE5SUWZxQ0FjQUlEVVZtd0c5QUFCUDFVbEVRVlI0MnUyOVoxeFUxL2IvZjlyMHpzRFFtL1F1Q0lvQ0NoYXdWeXl4eHBpb01iSEU5S2lwSmhwTFRFenN2ZmZlQUF1SUlyMzN6bEFIQm1hWTNrNzVQemhLdUNieDN1L2wvbitpenZ2QmZkMGt3NXl5UDdQMjJtdXZ0VGFvMHlvQU0yYitXNkNYZlFObVhtM01BakxUSjh3Q010TW56QUl5MHlmTUFqTFRKOHdDTXRNbnpBSXkweWZNQWpMVEo4d0NNdE1uekFJeTB5Zk1BakxUSjh3Q010TW56QUl5MHlmTUFqTFRKOHdDTXRNbnpBSXkweWZNQWpMVEo4d0NNdE1uekFJeTB5Zk1BakxUSjh3Q010TW56QUl5MHlmTUFqTFRKOHdDTXRNbnpBSXkweWZNQWpMVEo4d0NNdE1uekFJeTB5Zk1BakxUSjh3Q010TW56QUl5MHlmTUFqTFRKOHdDTXRNbnpBSXkweWZNQWpMVEo4d0NNdE1uekFKNkVRUkJFQVJCL3ArWGZTLzlGTE9BL2hHQ0lHQVloaUNJSUFnUUJGLzI3ZlJUekFMNkcwaTdBNEtnVXFreUdBd2dDQklFQVFCbUkvUTNtQVgwUE9Sc0JZSUVBSUJidHU1NDlPZ0puY0Y4TnBXWmVSNnpnQURnbWE5RDlKSUpCRUZhcmU3Ky9RZEZ4U1VBQVBaNFFzOTl6QXp5c20vZ3BkRkxCR0R2ZnlRbkxBcUZXbHRiV2xGUlhsUlVaRElhSUFnQ1h1aEt2N0ZPMGh0bmdYcmJFdkxmNERnR3d6Q1R4V0l3bVV3bWsvU2FjUnd2S0N4eWNuTHU3bFkwaUJzUkJNRnhuRWFqTVZrc0pwTkpaekNlK3lyeXk5NUF5L1JtV1NCeVBVVU9NNDFHd3pBY0FBRUdsZEV1YVgyWStsaWowVnBaV2c0ZE5rUm93Vzlwa1RRMU5ROGJOcFJDb2VUbEZReHdkYUhSYUpXVk5ma0ZoUWFEM3NQRGZlalFjQmlHalFZRGdzQTRqcU1tRXdDK2NiOUc0RTBURUtrZUVBUUJFSHJ5Skt1a3RBekhjU29GU1VxNjI5alV4R0F3QUFCazcyUHQzN2VydEt5TXgrTm5abWI2Ky91THhZMEtoU0l4NmU2T0hUc3RMQ3dVQ2dVSWdsRlJFWjRlbm5xRGtjdmxSRVFNZFhaeU1Cb01JUFRHYWVqTmVtRFM5c0F3Y3VqZzBUVWZyVTFLU2pLWlRBQUFGcGVVREJ3NGNOcTBhV1BIeGpVM3Q2eGEvWEZ4Y1psUWFKR1dsaVlXaTYyc0xQL1l0Vy9EaG05RFFrTEN3OE1YTEZpZzErdnI2eHZZYkhaRGczai8vZ01mZkxDNm9xS2FTcVBpT1A2bXpXRnZuSUNvVkVwZGZjT1Q5SFEzTjdmUTBFRVNpV1JnY05EaHd3ZFRVMU1CQURDWlRCRVJ3eTVkdWtTaFVQTHk4alFhVFVwS0Nwdk51WHYzcmtxbDh2RHc0SEs1ZVhsNTl2WjJCdzdzYisvbzRQTTVRNFlNcHROcGR4SVNjUndBUVJCNHc5eWdOMHRBSUFnU0JBQkQwT0RCZzExZFhlUGpweTlhTkQ4aEljbk5iUUNYeTYycnF3TUFvS3FxS2pRMDFNTEM0dFNwVXdBQWRIVjFuVDkvUGo0K0hvS2crdnA2QUFEeTh2S2lvaUlieFdLTlJydHUzVmYrL3Y3Ky9nRk9UazRvaXI3czUzc0p3T3ZYZmZteTcrSC9LVGlPOC9rOEN3dUJpNHVUczRzVGpVWnZibTdKeTh1L2VmTm1lSGg0Ym01dWMzUHpva1dMVHA0OFdWbFpPV2JNR0J6SG56eDVNbWpRSUd0cjY1U1VGS0ZRcU5jYmlvcUszTjNkUlZhVzN0NmVQQzdIMmxvMEtDU1l5YVMvZ1pzZWI1YUFRQkFrL1dncks2R2RuUzJMemFxdkYrL2JkL0RreVJPVEprMXFhMnQ3OU9qUjh1WEwwOUxTN3Q2OWEyMXRmZkRBZmhxZGxwcjZLRDgvUHk0dURvYmhhOWV1VDU0OHFiQ3c4TTZkTzdhMmRwRVI0VHdleDhuUmtVcWw0RGorcHFrSGVCT21NT0pmSWYrTjBXaUNZYmlyVTc1bHk3WnIxNjVPblRxVlFxR1VsWlg5OGNmdnRiVzExNjVkQTBGdzdkcVB3Z1lQV2I1OGFWUlVsRnF0M3IxN2QxeGMzRHZ2dkgzcjFxMzQrSGdPaDdOdDI3WkxsNjVTS0ZRTXczcm1yNzllN3ZYbXRiVkF2VU0rejBXWnFWUXFRUUIzN3lXdldyVTJMeTl2MGFKRlhWMWR6YzNOQnc3c3k4ck0yclo5T3dBQWE5ZXUzYkRoeTZ5c0xJR0FQM3IwcUljUFU4VmljV2xwNmJmZmJMQ3h0VHQ5K3ZTb1VhTjRQTjcrQXdjN09qbzlQVDFGSXF2ZUducDJOUUFFUUFBa3lHRDNhOG5yS2FBZTlSQUVnU0FJalVhajBxZ0lnbUFZUnFGUVdscmFUcHc4czN2M25vS0MvTWpJeUxTMHRJcUtpa09IRGxWWDEzenl5YWNvaWs2Wk1tWDc5bTMxOVhWZmZyV2hxYkU1ZnNZMGR6ZVArdzhlTkRVMVZWWFhmUEhGRjExZFhkdTNiM2R4Y2FIVDZUZHYzcEoxS3lBSWNYY2JBSUlBZ2lCME9wMUNvVUFRaU9NNFRoQWcrRG9uaEx5R0F1cHRlK2gwdWt6V1hWeFNXbEpjSXBOMVcxdUwydG9rK3c0Y0ZvbXNDZ29LdFZwdFZWVlZlM3Y3aUJFam9xS2l2djc2NjhiR1JpY25wNjFidDhybDNidDM3MTM2M2hLWnJDdjFVZHFFaVJNUkJFbE9UaGFMeFJZV0ZnRUJBZGV2WDYrcXFzSnhETVB3d1dHaEdJYVZsSmFGaFEyU3RIZms1aGJVMXRXWlRCaWZ4NmRTRVJURlh1T2tvdGN3RXQyakhnU2hKQ2JlVDMyVUpoUUtXU3hHVm5iZW1iUG5EQWJqL1BsdkticVZtWmxaQVBCMFVHVXkyYjE3OThyTHl3RUFpSWlJWURBWXUzZnZpWXdjR2hzN05pUTQ2SXN2TjF5K2ZEa2tKRVFrRW5WMGRDUWxKUm1OUmd6REFBRG82SkRpT0o2Zlg3QiszVmZIVDV6OGNPVmFHbzNtN094RW85RWZQODZnVU9BNXMyZTV1RGdhREUrM1kxOC9Yc09uSW1jdUdvMTJKK0h1c2VNbjlIcGRYbDVPWFYzZDZOR2poZytQcXFtcGNYUjByS3V2SndnY2VPYXZGQllXRmhjWFcxbFpBUUFBdy9EdDI3ZE5Kc1A0Y1hFR3ZkTFN5bXJzMk5pa3BLU2lvaUkybXcwQUFJVkNTVXBLd2pDc3g2STBOamFpR0VxbjA5VnE5WklsaXkwdExiT3lzcHFhR3NYaXhtM2JmMjF2bHlJSThycjYxSysyQmZwWFR4a0F3YWRwRlRBTUt4U0s2OWR2ZEhSMFhMOStIY2R4QUFDT0h6OTU0dmpSY2VQR1hycDAxYy9QRjRJZ0hNZEp3MkF3R0ZKU1V1enM3SGc4WGwxZFhWTlRrN096TTROQnh6QWNRMDBXQW41ZFhSMktva2FqMGQ3ZXZxV2xwYmEybHJ3QjhuSyt2cjVxdFRZdkwzL042cFhIajUvWXZ2MFhQcC9mM2QzdDdlM3Q1T1NjbEhUdjdiZm5hN1hhNTI0VjZMMDM5OHJ5Q2x1ZzN1cEJFSmhLUlVoWEF5RFR3WFNHMnRyYTVPUmtIeCtmaHlrUDl1M2JBNEpBZGs2dXM3TkxjM1BUb0VIQjc3MjNsTlFRK1NkZFhWMmxwYVZHbzdHdXJrNmhVSlNXbHFwVUdncUZBaVAwNnBwYXFWUXFrVWk2dXJwa01sbFZWUlU1ZnhFRWdXR1lqWTN0bWpXcnBkSU9Cb09oVkdteXMzT2lvaUl6TTU5czNicWxzYkV4TnpkSEpwZjNwS1FCQUFERE1KV0t3REQwM0NPOG9yekNUalQ1Nm1FWUFrQ3dvNk9yVzY2Z1Vxa1VDa0ptOHpDWlRLVkNtWldWdlhuejVyaTRzZGV1WGRQcjlUTm16REFhaldxMU9qcDZ1S2VIbDQyTkRlbk5HSTFHMGtxWlRDYTFXdDNlM3Q3YTJzb1hDS0pIUk5YVjFhMWIvelhwYTV0TUpoUkZRUkNFSUlqTDVUbzZPbzRjT2ZLamp6NktqaDZoVWlxcnFxcjkvZjBwRkVwSlNjbmt5Wk9uVEptV201dURvZGpxTlN1dHJJUmttQkdDSUlWUzFTSHRBZ2lReFdLU0YzMmxMUkNvMHlwZTlqMzhseEFFQVVHUVJxdTljZU5PYzNOcmc3aGhjRmpZbk5rektCUUV4M0VHZzZIUjZnOGNPTlRlM2dIRFVHTmo0NkpGaTN4OGZFNmNPRkZWVmYzYnI5c3BWRnBOVFYxZVhsNXBhVWxXVnZhalI0OHdESE4xZGJXenMyTXdHSFE2SFFBQUR3OFBtVXdtYVcrSElVaXIwNmxWcXBxYTJ1NXV1WTJOemFoUm8zeDhmSUtEZ3djT0RMS3pzMDkrY1ArWEhiOTkrdWxhUjBmbnExZXZaR2ZuK1B2N2RYUjBUcG8wZnRTbzBRYTlHc013S3BWU1d5YytjdVM0VHFkemRYVWRGREl3UER5TWpCNjl1aHA2VlFWRStxUU1CdVBrcVhNdExhMXNOdHZmMzlmUndWNG90S0RUcVRDTTVPYm0vL3JiSHpRYXpkSFJ3Y1haZWR5NFdIc0hsNXMzcjJkbjUvajcreWNrSkFZRStJbEVObTF0YlUxTlRUazVPVTFOVGZQbXpWMjBjSUZRYUVHaFVLaFVxbEtwTEM4djUzQzVYcDZlQkFDZ0tHb3lHdklMaXJadTNWNVJVUmtlUHNUTHk4dlIwWkhOWnVmbTV2TDVmSGQzdCtMaWtsV3JQckN6czN1WWtwcVpsZFhXMWxaWFZ4OGFPdWpERDVZekdIUVFCS1dkWFZxdE5pMHRBOGVKMnRyYWQ5OTkyOG5Sd1dnMDlYaHZyeHl2c0JNTmdpQ0tvdFhWTlR3ZVR5YVRXVm9LM2R5OTlEb2xBQURkQ3VYbW43ZjUrZmt1Zm51UndXREVDUUpHcUZldVhMcDE2NDZmbjE5cTZxUGMzRndxbFlxaWVIZDNONDFHbXpoaHdwZ3hJNE5EUWlBSUpnZ01CQUdDSU9nTWtiV05QVUVRSUlBQ1Q0dDY4TGk0MkxEUWtLU2tlMFhGSlNpS2RyUzNLeFNLOHZKeXJWYkxaREl4RFB2dHQ5L2ZXZnkyazdNemo4ZGxjemp0N2UzZmY3K1J4K090V3ZtK1dxMjJ0YkdGRWRyangwODBHcTFPcDJ0dGFSdmc2bUkwR2wvZFVQVXJhWUZJM3hQRGNCYUxtWmFXc2YvQTRZcUtjaHFOdG5MbEJ5TkhSZ3VGMXJtNTJaOTg4dG1LRlN2NGZDNmZ4emNZRERkdTNrcE9UcVpRS05iVzFwRVJ3eVpObXVqczdBaENJQWdBQ0VJRFFOaWdWMHNrN1cxdGJRcWxVcWZWYTNWNjByOEdRUUNHRVJxTnl1V3lMU3dzUkZaV2xsWkNPcDBEQUxqSnFFZFJsRXFsNkhUNmpNenNLMWV1MWRiV1NxVlNHeHVibVRQalEwSkNGTjNkT0VGY3VuUlpwOVVjT0xnUHg5Q3FxcG9MRnkrZk9uWGF6YzB0T0RqNHMwL1gwbWl2OWk3c0t5a2c0Rm5acUZLcE9ucjBaRmw1V1dCZ2dNRmdLaW9xdHJEZ3o1dzVJeW5wSGdoQzQ4ZVBFd290c3JPekR4OCtXbEpTRWh3Y1BHdFcvTGh4Y2JhMnRqaG1Ba0VJUmJHMnRyYnE2dHFhMnJydWJnV05ScVBUYVFLQndOSlNTS1hTV0N3bURNRkdrMUd2MTZ0VWFwVksyZDJ0VUtuVUlBaFlXbG9PR09EaTdlVnBhU25FY2R4a01sRnBOQnduQ2dzS3o1Mi9kUFhxVllQQk1IWHExRmt6NHkyRUZrVkZKYW1wcVZHUkVSQU1YYmh3eWQ3ZXdjM05WU3dXZDNiSjVzMmRFejBpOHBWMmcxNUpBVDFicThPN2R1K2owYWh2elpsTnBWTFlIRjVUVS9QKy9RY2ZQa3lKam81MmNYR2hVcW1GaFlWSlNYZE5KdU84ZVhNWHY3M1F6czRHUlZFWWhwVXFWVkZoU1g1QlVYZDN0NDJOdGJlM3A3T3pNNHZKMU9tMUNvVktxVlRKWkRLRDNnQkNJRUVRVENhVHorZHp1UndCbjR0UWFOM3k3dnFHaHZMeVNvVkNZV050UFhod3FLK3ZONFVDRy9RR0tvMkdFMEQ2azR4ZHUvZG1aR1I0ZTN1UEhqM2F6czZ1dTdzN016T3p2YjE5eFlvVkV5YU1Kd2hVcTlFMk5qWWZPbnhrOXV5WlF3WVAwdXYxWktySnkzNjEvMmRlUFFHUjdqT2RSaXV2ckxwNTg4NjRzV04rM3JLOXVia2xMQ3gwMnJScGNubjMzcjE3TlJxTnA2Y25qdU5aV1ZuT3pzNmZmTEkyWXRnUURNTVFHRmFwTlk4ZXArVms1ekdZak1qSVliNCtQbHFkcnJLeXNyQ3d1S0doVWF0Vnd6RENack5KUDVwR28ybTFXaFJGVFVhandXakVNSlRGNWpnN09RWUcrbnQ2ZU9BRVVWQlFtSk9UUjZQUlJveUlEQWtlQ01PUXdXQmdNcGxLbGZybzBSTkhqaHpsOC9sQlFVRnRiVzBORFEzUjBkR0wzMzY3c0tqdzh1VXJZckg0bmNWdkQzQnp5OHZMKzJqTmgyUmdDWGdGN2RDcklhQi9pVGdEQUlIamREcGRJbWxQU0x5dlZDclhybDBiRkJRMGU5YXNzdkx5UVlNR0hUbHloRTZuQndZR1ptUmt4TVRFZlBYbFp5S1JKV295UVRDY25wNlZtSFJYd0JkTW5EVGV3ZDR1djZEdy92MWtzYmlSeitkN3VBL3c5dlp4ZEhJUUNIaE1CcE5Db2NBd0RFSWdqdUU0anBtTUpxMU9KNU4zMTljMWxGZFUxTlUxYURUcUFRTmNSNDhlNmVYcFVWcFdrWlIwajBLaFRKa3kwZC9QUjZmVEFRREFZREx2MzB2KzV0dnZhVFNhazVQVHZYdjNZbUppM04zZHhlSUdLeXVybjMvZUVob2Erc25ISDZPWWFkN2MyVnF0RmdCQWNtL3UxUXBQdndJQ2VpNDNnM3l6Qm9NeEp5Zi94TWxUYlcxdEpTVWw0OGFOKyszWDdWOS84OTI5ZXcrYW01dUNnNFBiMnRybXo1KzNadldIQklFakNOTFJJVDE3N3FKQ29ad3hmWXE3dTN2UzNYdTM3eVFpTUJ3ZVBqZzhmTENUb3lPTlRpY0lITWN3RE1OSTk3bDNGaEVaQTBSZ0dJUmhFSVIwV20yRFdQem8wWlBNekd3V2l6RnAwc1NoNFVPeWMzSVRFcEo4Zkx5blQ1dkVZckYwT2kyYnphbXFxdjM0azgrNnU3dlZhclZFSXZIdzhQaDU4MDhjRG1mVzdMZFlMSmExdFhWa1pPU002Vk5jWFoxd25JQWdDRVhSbnVkOUpUVDBDZ2dJQU1oS0I0SktwY3BrY3AxT3grRndUcDA2MjYxUWhvY1BFWXZGZCs0a3ZQLys4bEdqUnM2YnQrRDA2ZE04SHMvUjBmSGpqejlhdEhDK1hxK2owK2taR2RsWHI5MFlQRGgweXVRSjZlbVp4MCtjb1ZJcDA2Wk9Hallzbk1saVk2akphRFQybHNzLzMwWlA1VHhJb2RKZ0dPbnU3bjZVbW5iejFoMEVnZDVldE5EYjIrdmtxVE5OVGMyTEZzNzM4bkpUcWRRc0ZxdTlvL1BMTDljbkpDUklwVklZUnE1Y3VUaGh3cVIxNjlmTHVqb25UWnFvMCttZlBIa3lkZXJrQUg4L3ViemIybHBFb1NCa3ZQdVYwTkFySUNCeTJDZ1VhdHFUak96c1hMRlkzTmJXNXVucDhmV0dMNmxVS2dUVEV4TnUzMGxJOVBYMS9mWFhuUjBkN1RoT0hEcTRiOXIwS1RxdGhrS2hYYjV5TFMrdjRMMTNGMXRhQ3JkczNkSFUxRFQzclZuUk1TUG9OTHBlci91bnpZVG5Ocy8vNnVFK0t6R0RhWFNHV3FXK2s1QjQ2ZEtWNE9EZ0R6OWNYbGhZZk9uU2xmSGo0MGFOaWxhcjFEUWFUYWZUci9oZzFkbXo1MnhzYklZTkd6WjY5S2ppNHBJZk4zN0w1WEVCQU1yS3l0NnlaUnVMeFhKeWRIUjBjcG93SVU1a1pVbHE2R1cvKzM5UGY5OU1mWnFiUWFVV0Y1Y2tKdDZ6c0xDd3Q3Y2JPVElHQUFBNmcwMm1aUEQ1L092WGI1U1hWeHc5ZW5qdDJyV3hzV05jQnd6QVVCUUU0Y05IVGxSVjFXeFkvNFZNTGwvKy9rb2VqL3Zycjl2R2poc0xFTGhXcXlGLzR1UTRrZjlMWGc0RVFScU54bUt4bVN3T2s4Vm1zZGxVS3BYOGowQlAveGNJQWtFUXgzR05Xb1VnME15WjhiLzhza1dyMVM1YjlvR0F6Ly9rNDlVUEhqeThjUDRLZzhFMG1Zd01CajBpSW1MS2xDbDc5dXgrOTkxM0RodzQxTkhSd1dhemNRd0RBSmpOWWxwWVdNVEZqcUZRcVRRYS9kU3BjeVlUMmpOcnYrd1IrRGYwNjgzVW5nR2owZW1YTGw0VldZdDBPaDJWUWwzeHdiTEV4THRGUlVVd0JCY1hGMy8zM1EvdTdtNTc5KzU2OGlUZDN0NXU5cXg0dFVZanNySTZkUGlZeVdoWXUzYjFsYXZYOXU4L3ZHVEo0a1dMNXNFUXBOZnJTSitHdkFvSWdnQUFrbHFrMFdnME9sMm5OOVRXMXVYbTVXZGw1ZVRrNUlrYkdoRUVFVnBhVWlrVUhNY29GQ29JQWpqMk5QcEhwZ0FZRFhvdWh4TXpNaHJIOFY5KzNlbm82TGhnL3R4YnR4TWF4STJoZ3daMWRjbG9WSHA4L0xTMHRQUVJJeUtqb3FKMjd2eGQyaWxqTXBubFphWEhqcCthTUdIOHlKSFJGeTlkSGpreUpqYzMxOUhKeWRaV1JCcWhmbTZIK3U5V1JtL2ZHUUFRb2FXd3JVMWlaV1YxK2ZMbDZPamgzMy8vemRreloyL2ZTU1FJd21ReWZiRGkvWmFXMW95TXJMVnJWem81T21BWWZ1andjUUFBVnExZXVXL2YvdFRVeHovOStLMlh0NDlXb3dKQUVJYmhudDkyenlXb1ZDb0lRUlhsbGJmdkpLYWtQQ3dySzVOSUpIcTlIZ0FBQktHNHVyckV4bzZaKzlaYlFVSCtqWTBOQWd1QmhZQnZNcGw2akFRTXd5YVR5V1F5elp3WjcrcnF1bW5URnJsTTl2bm5IMi9kdXVQYytZdHpacy9nY2psMEJrZGtiWFg2OVBuUFBsczdjZUxFaW9weU9wMEdndUQ4K1hNaklpSjM3TmloMVdwVktoVUlna0lMUGtFQVBUNVFmM2FHK3FtQXlGZUc0emlNd0RRNlhTNlQwbWpVNjlkdkJBY1ByS3lzbkJFLzYrTzFheVpPbW1CcmE2TlFxcnU3Rlk1T2psVlZ0UmlHVWhBWUFLRUxGeStxVktxUFAxNjE2NC9kMlRtNVczNyswZDdlVHFOV1FoRFU0NXoyRmlpZHpxaXJyejk4K09qcDAyZkZZdkZ6TjRPaXB1cnE2dXJxNnZQbkw4VEd4aFlYRjF0YlcvLzg4MlpQRDFjeVVaLzhHR21LTkdwbGFHanc1czBidi9ycWE1UEp0SGJ0cWkxYmZybVRjRGQyekNnY00vQzRuSHhwcDE2bkN3ejA5L1gxV2I3OGZaVktYbEZSOWQ1NzcxMjhlSG5zMkxoang0N1RhRlMxUm1zd0dKbE1sbDZuSmZwMzNsbC9GRkNQZW1nMG1rcWxQbjd4VEZsWk9aL1BXekQvTFE2WEV4VTV0TG01dGFpNE5Ec256ODNOemNQRGpZeTdLSlVLdFZvTmdIQjZla1psWmZVWG4zOTg3T2lKN095Y1RaczNXb3VzTkJvTkRNTkFMOFBXb3g0YWpaNlFlTy9MTDc4cUtpb2liNENVd25OT05BQUFVcW1VckhjR0FLQ3hzZEhOelczZHVpK0hEWXN3R2JVbWs0bjhHQVRCR3JYYXczM0FwazAvZlBIRmVnNkhzM0xsKzc5cy84M0cyaVk0SkxTelM0YWlhR2VYbk1GZ0ZCV1ZYTDE2NWVIRFZKVmFiU0d3K1BYWGJSd09SNnZWeXVYZEJ3OGVnV0Y0d29TeEVjUENqUVpEZjE3WTl6c0JQZHNveFJnTVJsTlQ2N2J0Tyt6c2JGZXYrc0RHMWdaRHNjNnVUZ0lueHNTT1lkRHBVcWswUFNQcnpwM0Vnb0tDNnFwYXBWS0Y0L2pkdXcvRVl2RTdpeGMrZnZ6azVxMkVyVnQrc3JFV2FiVmFjdG9pbDFNQUdiTjdsbmQyNWVyTnBVdVhkM1YxOXVpR1hKbzlkMWZBdnk3V3FxcXFLaXNydTd1N0owMmFHRHRtZEVoSW9FNm5JMXR6d2pDczBXamMzUWQ4KzgzNnI3LzUzc25KYWQ3OHQ4NmV2ZURvNUNBV04rcjFlbkdEdUtxeTZ1N2RlMEtoY042OE9UN2VYblE2dlVzbVU2dFVMQmFMTDdBd0d2UzV1Zm1IRHg4cktTbDc3OTNGS0dyc3R4cnFYOHY0M3JhbnRWV3lidjIzWThhTW5EZDNUbVpXZGxaV2psNXZJRmMvVkNxVlRxZDVlcmdQSFJhT1lkaWVQZnR6Yy9QdDdHeGxNbGxqWStPUFAvNWdiUzM2NUpNdlB2bmtvNkZEQjJ2VWFsSTlQYSsrdDBiejhndG56bnFyb2I2ZVRHLzlQN3k0WHQ4V0VoS3liOS91d0FCL0RQdHpXeFRETUJhYmUvdjJuZVBIVC83eHg2L1oyYm01dWZsTlRVM2toZFJxOVh2dnZSTWRIZE1vYmtoN2t0N1oyUVZCc01GZ01CaU1JQWpZMmRtTUhCbE5wOUcrL1hhanA1ZlhoeDhzTXhoMHBQcjdtNFplc29CNlRTVUFCSUVBQU9BNFRqcWtuMyt4UGl3c2RPVEltQU1IRHF2Vm1zR0R3NEtDQWx5Y25SZ011c0ZnYkcvdnFLaXNrc3U3dzhLQzNkemNmL25sMXdNSERycTd1ems3dTN6LzNkY2J2djR1SkNSNHlaTEZwTjhEL0NYU2crTTRoVUtSZHNybXpWdVlrcEx5ZjFYUG42OFBCRW5GMjlqYWJ0KzZkZmFjR1labjI2S2tMV095T0Z1MzdwQktwVC8vL09PR0RkL2w1K2ZyOVhxOTNyQm56KytCQVg0UEhxUzJ0M2U0dTd1NURuQVJDUGdBUVhSMXlhcHI2ckt5c2lzcnE2S2loc1ZFUjMvejdYZWpSc2JNZVd1MlJxM3E4ZUY2QWhBdlhVOHZlUm4vTEs4Wmh1R25VWHdZaHVrTXhrK2J0bkc1bkpqbzZCODJiaElLaFFzV3pJMktDaGNLaFVXRnhXZk9uRHQ5NWx4RlJhVkF3UFB4OFdsdGxVQWdFUnM3dXFLaUtqa2x4ZDNkdmJhMlhxUFJyRjI3Q2tPTno0VjVnSCtaak1EdnZ2dngzTGx6ZlV4ckorOVpwVlJxdGRvcFV5WWhDTkx6YUFBQTRoZ1dHQmh3NmNwVk9vMGFGamJvMnJYcmpZMk5XMzcrS1NKeTJKTW5tVlFhbmNmbFpHZG5YNzkySXlIeHJyeGI3dVRrNU9mbjQrbnB3V0t4cmx5NTF0NGhmV3ZPN0FNSEQ5dmIyN201ZVJqME9sSXhWQ3ExUjBZdmNmaUFseTRnZ2lBUUJPN3FrcW5VR2t0TEt3cUZnc0RJNzcvdnFhbXBYYlJvMFE4L2JIUjBkSHgzeVdJbkp3ZVpUTDV1M2RkclBscjdPQzJOd1dCQUNGSmNWSEw1OHBXZ3dBQVdtOHRoTTMxOWZTNWV1bHhSVWRIVkpkdXc0VXNiYXhHS29uOWJFa3BtYUZ5NWVuMzkrZzMvazZZKzVGWGMzTnppWjB5blVHRFNFK3FaS0xrOExwZkxQWGZ1Z2toa2ZlVElrUWtUSm55MGRsVnRUVDFPRUZldVhENXk5SmdKUmJ1N3U3T3pzL2Z1UFhENzloMUxTMkZJY0pDdGpZMmpvK09aTTJkaEdJbUxpLzM5OTkzZVhoNU96aTVVS29VZ2lJYUdSaGFMK2R6VS9GSjR5UUxDY1lMT1lKUVVsLzd3d3lZT2gxTlgyN0IzMy82Mk5zbVBHNzg3ZHV4NFpXWGwyby9XR0Uwb0JFT2ZmdnJGNGNPSG82S2lqaDQ5dEdiMWgvSHhzd1I4M3VFalJ5U1NqcWlvQ0pHVjBNcktzcnFtN3Q2OWU2dFdycHc2WlpKT3AvM2J5UXNBQUJpR05CcnR1dlhmVkZSVTlGUUM5UVdDSU1MQ3duNzQvdHNCQTF4UUZBT2ZRWTR1YWpLNnVqZ1hGWlZjdlhxMXE2dHJ3NFoxcmk2T0lBUWxKdDQ5Y3VTb2pZM05zV09IWjgyY01XdFd2TE9UODVVclY2OWV2ZTdwNldVbEV1RTR3R2F6OSsvZnYzRGhBazlQajEyNzkzWjBkQkFFZVBiTXVhUzc5K1BpeHZRVWw3M0VFWHpKV3hrUUJPcDF1cUNnQURzN3U4OC8veXJwN3YxQm9ZUFdyZnNpUFQzeitQRVRFUkVSTW5tM2c3M3RvMGVQVDU4KzdlSGhzZXVQblVPR0RDWUlIRVAxWjg2ZW5UOS8vcFRKRXhNU0V1aDBPa0toQmdVRk9EbzZqaDA3QnNmUjUyWXVrbWN4UTFweGNWbG1aaWJ3djJqTTYrcnErdlBQbXk5Zk9oOFpPZlF2c1dOU1JnQUVRVE5uelNnckt4TUlCRjZlSGlBSXlXWHk3T3ljUC83WXFWU3FIajU4Q0FBRWs4bFk4Y0dLcnplczEycTEyN2I5UWtGZ2dNQWRIQnc0SE00MzMzem41ZW54K1dlZm9DaTJkZXYyWThkUFRKbzRua2FqL25kKzIvOTRCRi91NWNtZktZSWczMyszNGROUFAyWXlHVzJ0a3YzN0RsNitjbFdsVXNsa2Npb1ZzYlN5cnFpb0FnQWdMQ3pNM2QxTnBWUXdtY3lHQm5GUmNjbVlNYU9DZzRPNnV1UjZ2UUVBQ0d1UnlOWFZsYzFoLzlzM201bVpKWmZMKytqOWtCWXVNRER3b3pVcmJheXRkRHBkaitGNTluUlBWd2tHZzhIWHgzdkNoUEYyZG5ZOEhoY0F3UVp4STVQSmpCNFI1ZTQrSUNucEhnaVJ2WUwxWThhTTV2RjQ5ZlgxWFYyZDN0N3VNcG1NVHFjWEZ4Y2ZPSGo0eHMzYldxM0czOS92MEtFRFk4YU1KQS94ZU9rKzBFdU9BL1U0Q2hRS01tZDJmRXRMUzN1SFZHZ2hZREFZTlRVMU9UblpuMzZ5R2dEUXNOQVFCS0VVRnhkM2RFaUZRa0ZSY1hsR1JpYUx5UXdORFNrdExhUFJhT1NRUVJEazR1cks1L1BKd3ZXL2Zia2dDQnFOcHR5OFBLQlhHNGIvK3VZQkFFaFBUOC9OelE4TEMrbjV0dDdYL2ZNU0lEQiszTmpyTjI3MWZBWkJFQmlHeG93ZWZmakkwZnk4UWhhYjZlbnBVMWhZcEZBb1JvOGVJeEtKNkF5bXdXQW9LQ2o4L1BOUFY3eS90S3FxR2dSQlYxY1hEb2V0NzdYV2U3a2Flc2tDNm5rRk9JNGJESG83TzF0SFJ3Y01ReEVLWmUxSHF6Ly9ZcDIwVSticzRqSjhlT1RQbXpkdDI3Nzl1KzgzQ2dSOEd4dWJ1cnA2WHg4ZkRrY2c3WkJhV0Fpb1ZBUUFBSTFXNCticXd1V3d5VUwwdjcwaUJJRjZ2YkcxdGJYdk4wL2VlVWRIeC8wSHlVT0doUFU4MGQ5K0dNZFFEMDhQQ29XaVVxbTRQSzZkblMyVlNsVW9GSU1IRC9wOTErN0NvdUtpb2lKN085c0xGeStGaDRmLytPUDNBZ0VQQU9DeXNyTGc0S0JGQytmUjZkU2dvQUFRQkl4R1UvOVJEL0RTcHpDZ2w0WkFFRFNaVERxZHptZzBhVFhhYWRNbWJWai8xY1dMbHp1bFVqYUhzL2JqdFk4ZXBUQ1p6S0tpNHBFalkycHJhNFlPRFFjQW9LRkJIRHd3Q0laaEFpZWswaTVuWjJmZzM3eFRrQ0R3LzIxSDFWdTNibmQyZGlISTA2MlN2ejRnQ0lJb2lvbXNoRFE2cmF0TFR1QzR2WjBObDh1cHJxbHo5L0N3c2JaV3FaUmhvYUhYcnQvOGFNMnF1M2NUQnc4ZVFxSFM3dCs3cTFLcDl1N1paV2xwb2RjYjlIcTlUcWZIY1J3RWUrY1J2R1Q2eFZaR2o4UGJPejZtMCtubnpKbDUrc3lGN2Ivc2RITWJRS2ZUWkRLNVNDUmF2ZXBEbFZvbGszVVBHalN3dWFtK3RhMTk5dXg0RE1NTUJsMTdlMGRvNkNDQWVMRURSRUFRUktQUi95ZDNUc3Fsb0tBZ0p5ZDMzTGhZalVielQzMkFNQXpsOHdYV0l1dTZ1dnFBQUY4Mm14VVNQREFqSXpzc0xOelgxeWM3TytmWTBVTjBCcjJvcUZpcFBNTmcwdHZicFJKSis3Smw3dzBZNE5Kcks2WkhOQzlmT2lRdjN3TDlLLytTdllCaDZLSkY4OTlmdnRUR3hob0VRUmFMYldscDZlQmdXMUZlenVQeG5KMWRidDFPOFBQenNiUzBCRUd3dWJrWlJWRzNBUzVHbytuRlAwMENBQWppZjdsKzBlbDBiVzBTQUlSZjhGd0VBY0FJSE9EdlcxWmVqdU80d1dBTUN3dHRhMnVycTZzT0N3dHRhR2hRcVJRZUhtNENnUVdEeVFRSVlNaVF3VjkvdlM0a2VLQk9wK3RSVHora1h3aW9WNllmMGJPZENZS0F5WVRldVpOdzQrWXRkM2UzZWZQbVN5UnR5Y25KTzMvZlUxbFY0K0hoVmxkZkx4WTNqaDhYYXpRYUVBUkplNUxwN2UxcEpiSjhjWjBlMldpY3dXRDhUKzZjdklxTGk4dWdRY0ZrNFB1ZkhoRUVRWlBSRUJvNlNLRlExdFRVUVJCa0llUkhSQXc3Zi82aW82TVRoVUs1ZXk5bDM3NERPVGxadHJhMjh4Y3NVaWdVeDQrZkxDK3ZJQThLK211ajJaYzlhRTk1K1JtSnZkT21LQlFLalU2alVxZ1FCRkVRcExTODRxZE5QMXNLaGFkUG4xVW91dXZxNnQ5NVo5SGp4MDlLeThyNGZGNU5UZTN3NFNOOHZEMEJBR2hya3lRbFBaZ3hmUXFielhweHBUQkJFQXdHdmFxcWhqemJvSStRY2NqaFVWSExseS9Ec0w4UFBnRi9icS9pQW9HZ28wTmFVVms5ZVBBZ2c5NWc3MkNmblpOWFhWMHRsVXFMaTB0SGp4NXBiMitYbjE5MC8vNjlrcExTOXZhT25KemMyREdqWVJpbTBXaFVLaFdHNFdjRjEvM0Nnd2I2Z3dYcWxaZEQ2K3lVcFQ1OGN2dDJZbEZScWRHRWVucTR1VGc3K2Z2NXJ2dnFpOU9uejVTV2xzcTY1QmlHZGJTM3A2UThkSFoyOGZiMjFPdDFWQnJqd3NVckZBcnM3T3hvTkJxQkYvNUFDWUtBWU5qRnhRWDRYL3lPeVc4b0xpbXBxNjhuTnhuK2FWQjdKdVZCZzRMdjNidFhVbHBPcDlGd0hCODlhcFJFSWlrc0xEUVk5RXFscXJ0YmNmWHFGUlExZnYvZEJnUkJCZzhPcFRNNFhWMnloNm1QNzl4SktpZ293WEdDYkpqWEg5UUQ5Qk1MUktyblNYcld2djBIeGVLbURxazBPeWMzSWZHdXA2ZEhUUFNJcmR0MmpKOHdUdEd0dkhuckZvUHgxTUFNSGp4NHlKQWhkQnJOMXRhNnBMajAwODgrajRnWU5peGltTW40NzhOckNJTG9kZnFyVjYrVG9iOCszajhJZ25LNW5NOFhqQndaMDdPNCs5c3lqNmYyQ1lMMjd6L1kzTnc4ZnZ3NG84SFEzYTFrc1ZnS2hjTFMwcks3VzFGUVVGQmVYckZ6NTg0TEZ5NFpqWVpQUGw1ei9QanhFeWZQeUdUeXhxYVd6T3pzNnVvYUx5OFBCb1BSVDFveXZId0xCQUFBMlNiaHhJbFRLSXJ4ZUZ5ajBlZ2ZFQkFXR3ZyMU45L2pCREV5SnZyczJmTThQcitycXlzaDRZNWVyNCtJaVBEMTlaVktwVVlUV2xWZGQvRFFFUnFOeG1GemdIOTNzaktwTFlQQjRPL3ZHeGtaQWZ6dlZzSm56cHlwcXFxaDBhZ3Z0bW80anRPb05DY25wL3I2aHIzN0RxRVlJWmZMSVFnYVBueTRpNHRMUlVYRnc0Y1ArWHhlVTFOemRuYk9zbVh2N2R0L0tEWDEwZmp4NHhrTUJnQVF0alkyR1JtWmlVa1BlbmJqWC9iUTlRTUxCQUFBQ0FBNFFhQW9IaGprSHpGc2lOQkNjT3ZXSFVzcm9ZZUgrLzM3eVNFaGc5TFRNMXBhV29xS2lqdzhQQ0lqSStWeXVjbGtJblAvcmwyN0RoQ0VSQ0x4OXZFSkR4OXFNdXIveVJIcEFjZHhEcGRONE1DVks5ZitKOHN4MGdqWjJkbU5HQjVGM3RnL3VVRXdET3YwaGxPbnpsaGFXaW9VQ3FtMGs4VmlOVFEweU9WeUJFRzRYRzVPVG81ZXIrZHl1VlFxMWRQVDgvTGx5NHZmWG5UNnpGbExTK0draWVOOWZiM1piTGEzdDZlMXRhaWZ0TWZyRnhtSnBIbUhZUmlDSUFBZ1lJVFIydHE4ZXZYYTZkT241K1RrQ0FTQ3g0OGZWMVZWV1ZsWnhjVEV0TGEyNGpodWIyL3Y0K09qMSt1R2hnOTJjbmFwcUtpNGN1WHF3Z1h6ZkgyOTlQb1hOV1h1NmNLcFVtdm16bDE0OSs3ZC96cWJyQWZ5R3lJaUlpNWZPcy9uYzFFVUk1UGovbnBkS3BWMjZQQnhwVkl4Wi9Zc09vUHg0RUZ5VjVkTXI5ZVhsSlFvbFVwTFMwc0FBSzVkdTJacmErdmo0K1BsNWNYaGNMcTd1eEVFWHI5K0E0YnBnV2RMMUI1WCttVVBYVCt3UUQxckNoekhVUlRGTUV5djExcGFXclcxdFZWV1ZtRVltcGFXVmxWVnhXYXp1Vnh1ZVhsNWMzT3pRcUhBTUx5MHROVGYzMi80OEVoRnQwS3BVckdZclBLS3lvRkJBZVRYdnRpWnhYR2N3Mkc3dXJvbUpDYVJsVFI5ZnhDQndHTE83SGcybTQzakdQaDNXUUEwR3EyeXFpWXJPM2Y0OEVpVEViV3hzZUp5MkRkdTNDd3VLWlZLcFhWMWRXS3hXQzZYODNpOHpzNU91Vnl1MCtsRUlsRmRYZDJTSlc4TExYZzZuYTVIT2tBL3NEMGtMejhTM1N1MFN2VFllUUJIdmIwODA5TXpHc1hpM0x3OE1ualA1WExIakJuajRlSGg1T1FJUVdCSFIwZGRiZjNIbjN3eFpmSkVKMmZud3FMYnFNbW9VcWs1ejNiai8razNTczV3T3AwdWFuakUxeHZXci9oZ1pSOG5Nb0ZBTUgzNnRCa3pwZ3VGd3IrV0pQZHM5a0VRMU5MY1VsMVY3ZWJxT25UWWtOMjc5NG5GamI2K1BpTkh4UWdFZ3U1dVJYMTlRMjV1Ym5aMnRsYXJiV3RyazBna0lBZzZPanBhVzF1VGJZMTY3OWYyRXd2MDhnVkU4cXhXNHFtcHh3bUN5K09WbHBiVzFOUVlqVVpuWitjNWM5NGFPemJXMWRXVndXQ3dXVXdRSkJRS2xiOS9RSFoyenU0OSsyYk1tT2J1UHFDZ29KRE5acE1OSzEvd2ZvbW45VGVRUWErYk5Udit3c1ZMRHg0OCtPOTI1c20vOHZiMjN2SExWamFiUlJZWVBYZmRuclJkRUFRNVhBNkttZ2E0dVc3ZXZBVUVvUmt6WnJpNnVsaGFDbGhNcGw1djFBMDFqQjgzdHFDZzhOejU4N2R1M2VyczdFeE5UWjB4WXdhZFJ2dHI3NGYrb0I2Zy93am9PVUFRME9tMERRME5lcjErOU9qUnk1Y3ZqNHFNRUFpNEJFR2dHSVpqdUZLbGFtNXVxYTZ1a1VxbEtJcXRYTG5heWNscCtQRGhLSWFoQmhNTXdXVEQ2SC9LNkNESEE4TndIcGNUR0JqdzRNR0RQcjFFQkpITHV5a0lUSllHUEZjQlFsNVJwOU9CSUVUZ1JIdDcrNElGQzVWSzFmVHAwd3NLQ2d3R3ZZZTd1MGhrUmFmVCtIeTJoWURqN093WUVCZzRjT0RBUTRjT05UWTJ0cmEwb0NoS1pzcjJRL3FqZ0FpQ0FDRktSVVdsd1dCWXRtelp3b1VMR1F4R2c3aXhwRVNsVXF0QUVPVHpCWTZPRG9HQi9zRUQvUnZFVFM0dVRpNHVUbzhmcDVXVWxIejI2WmNXUXVHYU5TdkpzTjZMTHdTQ29NbUVkblJJKzNqRDN0NWVJcEVWam1OL20yTktFQVNOUnMzTXpEbCs0aFNLb2hLSnhOSFJLU1ltZXVqUThJRURBNFVXQXBWSzI5VGMwdGpZWkRBWWFEUXFqOGVqVW1sVHAwNzE5dmJldUhGamJWMmRVcWxrczIweHpBajBHOFBUUS84U1VFK2R1VTZyZWZJa1k4aVFJWDUrZm5sNWVaMmRuYlcxdFFpQ2lFUWlvVkJZWFYzZDJ0bzZkbXhjWk1SUUx5OVBENCs1czJiT05CaDEyZGw1bXpkdkhSUWFZaUhna1Vrekw3d1dRRUZnU1VkbmNYRnhIMi9Zd3NJQ2hpRWN4Lzc2QWZJZVVCVHo5ZlhXNlhTMnRuWjM3eWFJcklRVUtwUEFzVFpKYTJMaS9mc1BVb3FLQ2lNaUloQUU2ZXpzYkdscEVZbEU1R0ZrWThlT3ZYYnRXazVPM3ZRWlU4a1V4SDdpK3Z6NWdQMWhHZDhic25udm84ZFA1czFiT0dUSWtBRURCbFJYVjkrL2Y5L096aTR1YnV5Nzd5NzI5dys4ZU9IY0R4dC9Xck5tdFZRcU5SaU1ERHFOeStXMnRyVzJ0a29takI4M2Zud2NocUV2ZnRIa29vL0ZZaVVtM1pzMmZhWk9xLzB2YnBWY3ZVZkh4Rnk2Y0piRmVsRm9HTWR4R3BYYTNpRTljdlNFV053NE1DZ1FvU0JTYWFkR28zTWI0RkphVmw1U1VuTDI3RWt1aDNQMTJzMlRKMDg5ZnB4bWFTbU1qWTJGWVRncEtjblQwL1BVeWFQUFRZNzloSDRSaWU2QklBZ1loclE2M2Y3OWgvaDh2cHViRzVWS2JXNXVYckhpL1crLy9VYWxVbloxZFFFQU1EQjRvSTJON2VEQmd6NWE4K0ZiYjgzcVZpaTFPcDFPcDVmTDVlTW4vS21ldjUzQ2VnZHdjUnhQVGs3Vi9YUDY0Z3ZvaVJZcXVydVZTdVZmeStsN1h4R0NJTDNCWUdmdk9HeG9lRUZCQVkvUEx5Z284dkx5WExseStaSjMzK1B4ZUVGQmdSWVdJZ2lDS2lvcS9mMzlmLy85TjNjM3Q1YVdGbXRyNjBHRFFnb0tDbTdmU2FRejZBVGVMNkxQdmVsSEFucldLSU9lbnA1VldGZ1VIaDQrZE9oUWlhVDlndy9lMzdScHMxS3AxR3ExRERxanNEQlBvOVlhREliczdGd0tsZVh1N2psdVhLeXpzL09xbFI5MGQzY1hGaGEvb09pdVY2WVJ4bUF3bXB0YmI5MjY5Wi9mWWU4djdDbWhsMGdrQ29XQ1BIM25CWThHZ2lBQVlQZnVQNGlLaXB3NGNieS92MzljM0doYld3ZWpVWmVUazhQaGNLcXF5c3NyS2gwYzdDc3JLOFBEaDV3N2Y5ckt5cEpHbzQ4Y09jck96dTdzMmZOS2hScDZkc2JQeXg2clArbEhBZ0tlbmw2QVhiMTZEUUNJZDk1WlhGdGJ5MlRRRnkxYW5KT2RjZS9lZlFSQnpwNjdjUERna1NOSGowRVFlUHIwMlpNblQ4aGxVazlQaitycUdnYUQ0ZXJxbXBDUUJNR1V2MDJhNmQyUmc4MW1TOW83UHY5aVhVbEpDZkFmRHdtNUdtZXgyU3dXbThmajJkblpCUVFFZlBycEp4NGU3Z2FEOFc5M01IcWdJRWk3cEQwek0ydnMyTmlDZ2tJT2g4WGhDUEx6Y3IvLy9zZm01dWJLeXFxOWV3OGNPSENrcUtoRW85RWNQWG9NQk1GVnExWTllSEEvTURBZ05qWTJNek1yS3p1SFRxZjNLL1VBL2NxSkp2T0JKSktPNU9TVVNaTW0ybGlMSHFha2ZQUE5ocjE3OWhTWGxNeVlNZDNieThQS3lwTEQ0YUFvcXRGb2lvcEtIaVNuSkNjbnY3OThtYU9qUTMxOVEzejg5TzNiZjVXMHRRbUZmQlI5M3FVbDFRTkJFSVZDZVppYXR1SHJieDZsUGdKQjREOFpFZkp2bzZPalY2NzgwTUxDZ2lBSUtwWENaakVzaEVJYkcyc2NRM0g4NzcwVHNpVUlqbU1VSnV0T3dsMDJtejA0TE96TW1YTWhnMEwyN2R2NytQR1QwRUdEamh3K1lHZG5TMmN3Y0J6dmxzdmJKTzFQbm1TdS9laXo5OTU3SnlvcTZ0eTVjeXRXdkgveTVNa0hEMUpHajQ1NTJhUDBQUDFLUUFDRlNxMnVya0pSZFBMa0tlZk9YN0swc3JwKzR6WU1RMTl2K05MYTJob0FFYTFHcVZRcFVSUEtaRERpeG80Zk4zN2M5V3ZYdG16OUpUcDZSR2xaeGZScGsvYXhXVmV2M1ZpK2ZLblJxSHl1cnBsVWowS3AzckhqdDkyNzl5aVZ5djg4ZUVnUUJJdkZXci91eTFHall6Rk0vM1N2RGNkUkRFT05SdURmMUVnUUNJSW9GSXBMbDY3TW1qVkRKcGNiaktiYmR4STcydHQvK3ZGN1J5ZFh2VjZqNkpacE5Xb0toZUxnNk9UaTZqWmtjT2lUOUt6OUJ3NjV1cm9XRjVmSzVkM3hNNmJuNStkcE5Cb0VobkM4SHhtaC9pSWdNcDhWQU9EbTVoWlhWMWNtazVtZG5WVmZYKy9qNDdObTlRY2dTQ2hWcWl1WHIxMjhkTG0rdnA1Q29majQrUHI1K1U2ZE1uSHlsT2tVS3UzQ2hVdHVibTVTYWRlaWhmTi8zZm5IbE1rVExTMHRUQ2JUWDNkVlFRQmdNSmdNQmtPcFZBTC9XV2tZK1JsN2UzdFhWeGVqUVcwMEdpRUk3RWxyZjBHRnpaOTlaSmpzcytjdW1VeW1LWk1uM2IxN1h5S1JHSTJHelpzMk1wak1hMWN2cHp4OFZGMWQzZERRd0dhekJ3NGMrTzZTeFVGQi9wR1JReTBFL0I5LytybXBxVEVyS3lzZ01PaHgyaE9OV2lNUThISDhmMWxTMGtmNmx3OEVBSVRSaERrNk9vckY0b0tDQWc2SHMvUzl4UmlHbWt6WWpsOTJ2dlB1ZXpkdjNqUVlER3RXci9yMGs3VytQdDRYTGw0dExNZ2JOeTdPeTh2VFlEQ2tQY2tZT3piTzFzYm00TUhERkNxdGR4SXhBQURraGhTWHk5Nncvb3M3ZDI1T25UcWxkeC9DRjBCK1FDUVM4ZmtDZ3NCaEdBWkJDQVRKN1JEb243SkhlcmJBcUZTcXBLMzE2TkZqNzcyM1JLdlYxdFUzNkhTNnlaTW5jbm5jWThkT2xsZFV4c2RQMzdCaDNZZ1J3M055Y3ZidDJ6ZDMzc0s4dkVLVDBlRHI1N05nL3R6NitvYnM3QndBQUsyc3JIcENRUzk3bVA2azN3bUl6K09JUk5aTlRVMXF0WHJjdUhFQUFNRXduUEx3MFM4N2ZzVXhERUdROWV1L1d2VDI0b0FBbjJuVFo0d2RPK2JtclRzQVFkalkySWhFSXIxZVgxVmQvZVdYbjk2OWR6OHpJNHZGZXBxKzJPTlRreU9xMDJrSEJ2a2ZQWEx3dSsrK1lUSlovMVpENUg5MWNIQmdzWm5rOVBHc2V3THc0cjhpcjB1aFVuLzc3UTk3ZS91cFV5Y21KTjUxY1hGbXM5bnU3bTZsSldYdDdlMXJQMW9WRVJFK1pNaWc3ZHQram91TkJRQ2d1cnJxeDU4MmFiVTZqVnJ0NCtNWEdCalEyTmdvbDh2czdPeGdHQUw2V1Npb3Z3am82VVNBWS9ZTzlpcVZxcUtpZ3NQaE9EazdhM1U2Q0lMdjNFbFVLaFVRQkJFQXdPVndBUURYYURRYXRWelJyYkMxdFFWQXVMbXB5Y25SUGlweTZJTUhLZjUrZnRPblQvdHA4eGFGUWttaFVIbzAxTHZ1VEt2VjBlbTA5ZXUrMkx2bkQ2RlErT0pjWmd6RExDd3NaczJLUjVEL3RKWEgweTFoSEdleTJEZHYzRWxPZWZqdE4rdExTOHBsTW5sYzdHaU5SdHZXSmhFSStFd21zNjFOb2xLcU5Hb05oVUpoY3pqa256OThtRnBTVWs2aFVIUjZ2WnVibTA2bmEyeHN0TEFRc05sc3JCODBWT2hOZnhFUThIUm55dVRxNG9MamVGbFptWVdGQlF4QkdJWVpqTWJHeGtZQUFDQUl3bEQwajEyN2EydXFlWHdMRENjY0hCMFdMWnBYWEZSVTN5RDI4L2YxOHZiaWNEaTNidDladGZJREJwMithZE5XQ29VSy9HdGpUZkphTUF4akdLYlg2eFlzbkxkbjk0czBSQkRFaEFrVExsKzZNSDVjblBIZnJkVjcvdVNwNjhPZzE5VFViTm02ZmZYcWxTNHV6b2xKOTJLaWgzTjVGdjcrUHRldjNiUzF0Wmt4ZmFyQmFHS3hXQXdHNDlUcGN3a0pDZVI3VUNxVjlRMWlHRVlRQkxHenMxTXFsVlZWVlc1dUF6Z2NUazlUMkg1Q1B4SVFBQUFvaWdxRkZuNitQblYxZFdxMTJtUXlZU2dHRUFTWnIwTUc3bUFZUG5qbzZQSGpKL0p5OHlTU3RzT0hqeTFkOW41bzZDQTN0d0Y2blhiOHVMalMwb29Hc1hqcjFzMFptWm1IRGg5anNyaTlTMkdBWHV0NUVBUTFhdlhNV1RPMmJ2MlpETEU4MXhjQkFJRGc0T0I5ZTNlTmlJN3E2WC80WWlQVTIvVlJxYldmZlBMRmtDRmhiNzAxNy9TWjgwNU9qb0dCL25xZEluN0d0TEx5OHNYdkxDMHFLbTVyYmJsLy84SHZ2Ky9OenM3aDhYamtkd0FBUUJBNFR1QmFyVmF2MXpjMml0VnE5YUNRa0wvZGJudTU5QzhCQVFBQUFNU29VZEVjRG9lc2xsSXFsVlFhMWNiR0ZnQUFzclhQRjE5ODlzNDdieGNYbDE2OGREVW5PNC9GWWdYNCsyZG5aK3YxZWh6SHJhd3NvcU9IWDdwMFZXUmx1WG5UeG4zN0RseThlSW5GNXYydGhrZzNXS3ZSTEZnd2I4MmFOZVRsbnpNd1U2ZE9zYk96VWF0VS83YWZRWTlManVFNGdpQW1GUHZvbzA5WkxPYm1UVCtrcGFWMmRja21qSTgxR1BRMEdyMjhvcXFqb3lNc0xGVFNMcmw3TC9ueWxSc01KbVByMXMzanhvMGx2NGZGWWprNU9abU1wcTZ1cnNiR1JybThPelEwMU5QVC9kOFczZjYvNStXbnRQYlFzOGtnRW9sd25MaDU2NWFMaThzQXR3SE9UbzVLcGVyYXRlc0VnWU1neUdLeWxFcWxrNU9UaFlXRm5aM3R6UGlwdzRZTjNiTjN2OG1FRFl1STB1dTF6azZPblYyeTFFZVBwMDJiYm05bisrT1BtNnlzTEFPRGdveUdmMmxxMGRzeEFnQjg4SkRCY3JraU56Y1hBSUNlWHBZMEd1M0REei93OXZIcVNaWC9aL1U4L1U0TXc2aFVLb3JoSzFkKzFOWW1PWHo0UUx1ay9lYXRoRG16NDRWQ0FRVEJLclZtMWVxMU1USFJIMy84Q1oxTzdlam85UFQwTUptTUdSbFpLU2twVFUxTkFBQU1IRGh3OWVvUGxVcDFSVVhsK2ZQbnVWenV0cTAvVzFwYWtFMzcrcFdHK3BHQWdEOVBQTUVDQXdPckttdXlzck9DZzBPTVJqUW9LQ0FuSjFjc0Z1TTR6dVB4UHZ4d0Jadk5rc3U3SHoxS1U2dlY0ZUVSTmpaV2UvZnVkM2NiWUdFaHdEQXNJTUMvdExTc3JMUjhSbnk4U0NUODhhZE5iRFo3MEtCUTFHUWtsMUc5cHlGeVU1MU9vNDJNaWFaUjZYbDVlUWFEZ2Z4UGJEWjc4ZHNMWFp3ZFRTWVRBUFR1SFBVdkU5bXpSUjVCbmxldlVtdldydjFNSXBFY1AzNFV3N0RqSjA1UG5ERE8wOHVucTB1S291Z3ZPM2FxVmFxZmZ2eE9xOU5zMy80YkFBQ09qZzR4MFZFeW1lem8wZVBrNFFvYk5xeno4L1VyS0N6T3pzNSs4Q0I1NTg0ZEkwWkU2blI2TWxmZkxLQi9wSmNEUVJrK1BDby92MUFpa1hCNVBCQ0VJeU1qSGo5T2s4dmxQLzMwbzZlSHg5bXpGK0ppUjF0WldjRVE0dW5oNHV6aTh1aFIydDI3OTFBTWYvVG9DUUxEWThmR1BrblBxSzZ1bWpsenRxdUwwOWF0djhqbHNxSGhRMmcwS3RuY2lXd2YxbE9rUVo2L1BHcjB5TWpJU0JSRnlRMzJXYk5tdnZYV2JESWFTYVZTS1JRRUJBRU0rN09laHZTbEVBUkJFQVNDSURxRFZWVlYvY0dIcXlrVTVPQ0JmUmlPSHo1OExIcEVwTCsvMy9Iako5TXpzckt5Y3k5ZXZMeGl4ZnNEQjRZb3VydFZLblZzN09odWVYZGVmc0hDUlF1U2sxTnFhMnVYTGwyNllNSDg3Sno4bHBhV2hJU0VGZTh2ZS92dEJZWm41ck5mcVFmb2J3THFOYTNnVkNwVkxHNHNMQ3lpVUNocXRackg0NDhZTWJ5dXJ0N1cxcGJQNHljbDNZMk5Hek40Y0xpVGt5MElRUWNPSGk0dUxna05EZlB4OFE0S0NyaDArUXFOUm91UG41YVJrVmxSVVRGMTJyVFEwT0I5K3c2a3AyZDZlSGpvRFFhNVRFNFFJSWZMUVdDSTNEV2owV2dvaW9uRmpYdytiOXEwcWJObno1dzlaL2FzbWRPWVRDWUVRUWhDYVdwcWFXdVRBQURFNS9PZXRYOEFHUXlHMFdpU3RMZkxaSEtUQ1UxT2Z2alo1MStGaFE3NjlkZGY1UEx1NHlkT2pSbzVJalIwMExadHY4SVFOR2IwU0ttMGkwcWxabVptK3ZwNE9UcmFCUVFHMk5nNHBHYzhLU3V2Y0hGMnZuSGo1cWhSb3hZc1dKQ2ZYOURXMXBxWGw0ZGgyS1RKRTExZG5GQVVCVUdvcCs2Zy85RHZFc3BJcThCa01rK2NQRk5iVzI4MEdtdHJhNTJkbmFsVXFyT3pzMEFnVUNnVWtSRVJKMDZldUh6NXl2SmxTK2ZPblMyMHRGcTgrTjJBQVAvSWlHRlhybDZQaVI3dTVqYmdxM1ZmanhvVk0yWHl4T1NVVkxWYU0zLytYTFZhdmZHSG54NGtKNnZWYWc4UGp5RkRobGhhQ3NlT2pYVWJRQVlPS25mK3ZxdWxwU1VnSUlERllnNGJPalJ1Ykt4T3E0Wmh1S3RMZnZMVUdZVkNKUlkzZEhSSVkyTkh2YlA0YlJhVFRnREEvZnNQYzNMekpCTEpvMGVQdEZxdG5aM2Q4bVZMNTgxZlVGeGNjUHQyNHVqUk1YUWFiYy9lQTBLaHhVY2ZyZHExYTYrMXRYV0F2OTh2TzM2Yk9YTkdmUHlzM056TUhUdCtMeWdvK1BYWEhUQ00xTmZYODNpODJ0cmFqbzRPbzlIWTNOd2NFeFBUME5Edy92SjNYVjJkRFFZaitOZDZzNWROLzdKQUpDQUlFZ1NRa3ZMSVpESlpXVmtGQlFYZHVYT25ycTR1T3p0YkpwTmhHS1pVS1VlUEhpMFFXSnc5ZC83SzFXc1NTWWUxdGZYTStKbCsvZ0d1TG81SGpwMGNOalRjWURDMXRrcEtTOHNtakkvVDZuUUpDVWtlSGg1ejNuckwwdElpTXpNclBUMDlNREF3S0NqbzdObnpOalkyTnRiV0Q1SlRyYXlFbnA2ZUNvVWlMaTcyMHVVclRBYmR6YzNWWkVKLzI3bWJ5K1Y0ZUhoMHkrVVRKNHpyVmlqNUFvR3RuYzNldlFmTHlpdUNBZ09QSHo5ZVZsWStjZUxFWDM3WkdoMGRjemNwOFVsNjF2VHBVMnByNjVLVFU0MUc0K3haTXg4L2ZxTFJhRmV1WE83ZzZFS2xVaHNiRzArZlByTjc5MTQrbi8vVmwxOHlHZlQwakF5eFdIei8vdjJzckt6T3prNHVsenRseXBUbTVtWUFBQVVXRnU3dWJpYVRDZXhuRGhEUWZ6WlRlMFBtSmJKWVRJbEUwdGdvcHRIb3c0Y1BiMjl2ejh2THUzNzlPbzFHMXh2ME5DcHQrUENva1NOanVycTZ6cDA3cDFRcWxVcmxoeDh1ZDNQMzh2SHl5czByOFBIMmNuUzBwMUFveDArYzJiRCtjNUhJNnR5NUM2R2hJYk5telJ3MU1tYjdMNzhsSmlhdS9QQjlTNkhnN05tTC9uNis4VE1tTTVoY3JWYjcxVmZyUEQzZEowd1krekQxY2N6SU1jM05ZcWxVK3Rsbkg1MCtmWDVnOE1EWmMrYnFkV282bmZvNExhT21wbmJMenovdTJMR1R3V0RjdkhsdDNMaHhYWjJkaHc0ZFFsSDAzWGNYU1RzNkhqNTh0T1NkUmZmdUp6Tlp6UEx5aW5uejVvQWc4aVR0MGFGRGg0cUxpNzI5dldOall3bUMrUGE3NzRwTFN1ZzBHZ0FBREFZak9EalkxOWNYUVpCcjE2NVpXVmxScUZRdWgwMzBzd0IwRC8zUkFnRUFBTU13aDhOSlNYbW8xZXFHRGgwYUVoSmlhMnRyME91WHZQdk93b1VMQXZ6OFRDWlRXbHBhVWxKU2UzdTdvNk1qbDh1OWRldFdlbnJtcUpIRENRQ3NxNnR6ZHh2UTF0WTJlbFJNWXRJOWR3LzNnQUIvVnhlbm5Oejg5UFJNZTN2Ym1UTm5OemFLcFIzU21iTm1YN2h3WHRHdENBNGVpSnFNaHc0ZHdUQnMwcVNKTlRXMU5UVjFCUVVGNVJXVlJxTXhLaktDeStXY08zZlIxbGJrNU9nZ2FXL2ZzV1BucUZIUmZuNitlL2NkL1BiYkRURXhJKy9kdTN2L2ZvcW5wOGVraWVQWWJPNjE2emV0ckt4Q1E0T3JhK3BFSXF2S3l1b0o0OGVlUEhucS9SVWZxdFZxYjI5dmhVSng0OGFOaHc5VDJXejIxQ21UbHk1OWIrR0NCZmIyRGp3ZUx6NCtuazZuSXdpU2s1TXpPQ3gwMUtob01yclkzOHdQMEE4dEVQajBWRytEajQ5dlVGQ2dScU8xdHJiV2FyWFoyZGtMRjgwTEN4dU00OWlZTWJITGxyMHJGamRtWitkZXZIUTVOVFVWaG1FM043ZTB0TFNQMW42MmNPRUNITWNJZ3JDMHRBSkJzTE96VTZ2UkFnQmhZU0ZZTUg5T2RrNyszYnNQeWtvcnVycGtjWEZqVkNxNVRDYTdlZXRPYmw0Qmc4SEl6c25adCtjUEFBQXVYcnhjV0ZRMGY5N2MrdnI2MjdmdnhNU01tREJoa3BlWCs5cTFuOFRHanFtc3JHcHJhMnR1Ym9VUnVwT2o0NU1uR1kyTnpYcTlZZHEwU1E3MnRqcWRIZ0RnOXZaMkZvdEZvVkFGQW9GU3FXU3pXWThlUC83MHM4OTVQQjZOUmt0T1RuWndjRmk2ZE9tNHNYRUJBYjRpa1RVQXdnQmhpaGs1L0k4LzltUmxaVmxiV3djRkJUVTJOZzRmSHNYbGNyUmE3UXNLL2w4aS9kUUNBUUJBb1NBZEhWS1pUR1pqWTZOVUtwVUt4Ymp4WStsMFJsTmpVM1YxbFkyTnlNSkNFQlFVTUdmT3JOallXS1ZTL2ZqeEl3ekQ2dXJxVENiVTFkWFYxZFhGMXRhbXFhbnA0TUhETXJsODRNQ0JBb0VBTlJtZG5Sd0pBdGl5ZGJ1RHZYMWs1TENmZnZvNUxHeHdlSGg0ZlgxOWRYWE55cFVySWlOSC9QSDdyZ3NYTDIzNWVkUENoWE1qSXlJYUdocFBuandWRXpOODdOZ3hSVVVsRFExaWQzZjNKVXNXUDNpUTNORWhpWWdZdG5mdmZnUkJGcis5d0ZJb0lBQ0FSbWNrUDNqd3g2N2RLSXFOR1RNYVJWRXFoWktabVgzdTNJWEt5a3FqMGNoaXNkYXZYL2Zicjc5TW1UclJ4ZFdaeWFCTE83dUtpMHNzTFMyb05MWlNxUkNMeFRiV0lncUYwdEVoSFRFOGtrNm45YXQ2K043MFV3R0JJSWpqbUkyMWRXTmo4OE9IcVpaQ0Mwc3J5OXpjZkFTQlQ1NDhuVjlRTkRZdWxqd05JNytnOE02ZEJDYVR3ZWZ6T3pvNnlOai85T2t6WW1OSGFiV2FhOWR2c1ZpczZ1cnFpeGN2cTlVYThoU2N3b0tpNXVZV29WQllVRkJJRUlSRUloR0pSQ0tSdGJXMTFhSkZDNUtTa2padS9KRktwVXlaTXNYWjBVRnZOQlFWbGR5NGNVT2xWSWVIRHdrTUNLaXBxUjB4WW5oNmVvWmFyZTd1Vmtna0VqYWJEWUpnU01oQVBwOWZXRmo4dy9jL25qMTMzc3JLeXM3T1hxL1hqeG9aeldhemp4MC9rWmlZaUNDSXQ3ZDNURXdNQ0lJTkRRM09UazRJREVNUVZGY24zcmh4azFBb2JKTzA1dVlXQkFRRUpDZW5ORFkyalJrenlyZFhIUHhsRDh2ZjBCOEYxTFBQUUtmVHZMMDlyYTJ0UzB2TEhSenNoVUxMdWpyeG8wZVBZc2VNOHZmelFSQWtPeWYvMEtGakk0WkhoWVdGdXJpNEJBUUUxdGJXcUZTcUQxWXNjM0p5dUhVN2lVS2gxZGZYUXhCa2IyL1gzdDZlbEhSZnE5WEZ4SXlZUEdtQ3Q1ZkgrUEZ4T0U3b2RQcHg0K0p1M3J5MStPMjNzN0p5amh3NUdoMGRiV05qODkxMzM5ZlUxdi94eCs2Q2dvS1ZLMWQyS3hTUEhxZEZSMGRydGRyVzF0YTQyREZsWmVXZmZMd21MRFFrTW5MWTVNa1QyeVNTUFhzTzNMaHhpOGxrMEdoMHZWNC9ZSUFyakNBZ0JMcTdlNmFucDJkbVpzNmVQV3Zac3VXQmdZR0RRb0pMaWt1VFUxS0hEQW1qVWlrTU9pTTdPNmU1dVVVa3NuWjJjaXdySzdlMkZzMlpNOVBQMTZ1Zm45M2NId1VFOUQ1MEY0SmNYVjFkWFp5eXNuTGtjcmxjMWhVUkdURjV5a1NDd0EwRzA3NTloNlpQbitibjc3OXo1eDhQSGp3b0xpNFdpOFgyOXZhclZuM1lJZTNVNlF6SnlROFVDZ1dDSUNPR1I4MmVQZnZxdFd0YnRteTVkU3RCSnBmYjJ0b0NBSGp0MnMzbHk5L055TWlrMCtodTdtN0hqeC8zOXZZbUNLSzF0ZFhkM2QzV3h0cENhTUZnTURVYWpaK2ZYMWRYbDFUYUdSMDlJaW5wWGx6c2FJTkJYMTVSNmVuaGtaeVN1bTNiTCt2V2ZaMlptVEZ6WnZ6U3BVdFRVbEtzckt3S0NncUNnb0xZYkk2OW5haTlYWHI3OWgwQUFHcHJhd3NLQ2hnTTV2TGx5ekl5TWxRcWRXQ0FQd3hEZ1lHQnpjMHRTcVd5UXlvZDRPbzhaM1k4ajhkRlVWUC9QS2l3aDM3blJKUDAzdW5VcUZYVzFxSjNsN3pkMmlhaDAybldJaXVqMFFoQmtFcWxsc3ZsY25uM3JsMTdIQnpzMzMxM2NYRlI4UmRmcnJjU2liaGNMcC9QdTNuelRuNUJ3YUdEKzY5ZnYxbGFWcEdkazVlZG5jMWtNbU5qUjFNb2xIMzdEcmEwdExxNnVsZ0lCRFUxdFQ0K1BzbkpLVlpXbHU4dWVXZmQrZzJEQjRjdVgvWWVqTUFnQ0RYVU4zejczVVpyYTlISWtkRy8vdnA3VUZBUWg4UE95YzMzOC9QN2FPMG5TVWwzaFVKaFNFaElaMmRYWW1MaWxTdFhaREk1aDhPWk1tV3lXQ3crZVBEUXdZUDdLUlNLbzZNakRNTyt2cjd2TDM4UEo0aHo1eTd3K1h3cWxkYlkyQVFBZ01sa2NyQzNmWC81ZTIxdDdUd2V4OEpDWUhoMjFtNS9WZy9RYndVRTlISVlZUmdtemJpVG96MUJFR1JlTUlwaWxwWkNLMHZMalJzMzJ0cmFidHU2eGR2SEp6ZzRCS0ZRTGwyNlFnQ0FUSzdZdjM4L2pVWnpkbmFjUFh2bTBXTW42dXJxSkJMSjNMbHZiZHUyamNCeGpWYVprSEF2TmZWUmc3aTVzMU1tazhucjZ1b0NBZ0x1M3J2SFlOQ1hMM3NYdzB3R2c1NGdDQmRYMTJWTGx4dzZmR3lBNndBS0JhbXVyc1p4dkxXMWxjbGcrUG41cmwyNzJ0YkdsczVnanhvMU1qTXpzN3k4ZlBEZ3dTRWhJWEZ4c2VmUG44L016TGgwNlpLLy96Y0dvMkhNbURFN2QrNFFXdkFobUY1YVdyNTM3MTZOUnJQbDUwMmtQc2dTQUdkbkJ4ekh5Y0wrbnJQTStxMTZnUDRzSUJJUUJIc09UdTg1V2hzRVFad2dBSUI0Ly8ybElBamV1SG56L1JVZlJFZVBtRGh4d3ZEaFVmZnZKOWZWTldSa1pOWFUxQmlOcHQ5KysyUEJndmxVeXROcXcvejhnbDI3ZG5WS081VXFKUVJDMWRYVlQ1NmtWMVZWQ29VV1VxbTB1YmxaTHUrbVVDZ3dEQnNOaHFjSE5tRW1Eb2Nqa1VqS3lzdmIyOXZiMjl1cnFxb0lnbWhya3pRMU5SMC9ma3FsVXJtNXVkWFgxeXVWU2dzTEN3ekQyR3gyVlZYVmpoMi9BZ0J3NTA3aTlPa3phbXZySXlNamVEenV5VlBuc3JLeTc5Ky9iMjl2djJiTjZpRkR3bm9mbnRMN0dmdXo0ZW1obi9wQXZYbmF3S3dYQkVGQVQwc3NPTkV4STRZTURyTzJzUWtNOFBmMzkyV3oyQThlcERRMk5wYVdsdWJsNVFFQWtacjZxTGEyVHF2VlZsU1VkM1IwME9sMEdvMUdvVkFJQWl3b0xIejBLTFdycTZ1MXRiVyt2dDdXMWpZdExZM0Q0YVNsUGZIMDlQTDA4a0VRaUVham1WQnM1Kys3S2lzcjFXcDFkWFUxazhsTVRFd2syeDQwTmpZS2haWXNGcnVyUzE1U1V0TFEwQURETUlWQzBXZzBtelp0TGlnb0JBQUFBQWhiVzl1OHZMenc4TERBd0VBbWt3RkIwTWlSTVI5K3NEd2lZaWoyVERIUFBTUFF2dzNQbjZQVDN6WlQvME9lZWRrRUNBSTBPaDJDRUlMQUREb2RqVTQvY2ZMTWpoMi9hVFNhNnVycW5zUWRCRUZRRkowM2I5NmFOYXNSaEdKdExVcExlM0wxNnJYYTJob013d0dBS0NrcHRiT3owK3QxWkhOQ2UzdUgrZlBuK2ZuNTZQWDZwS1I3VjY1Y3BWQVFDSUtjbloxYldsclliTGF6czdQQllCQUlCRU9HREprNU01N0g1VW83WmZYMXRWOTl0YTYydHBiTXVTYXZ6bVF5L2Z6OFJDTFJyajkrczdPekFRQ0FRcVVEQUlHYURHU0c0YXRpYlA2Vy9qNkYvUlBQOHBwQmdpRDBPbDNQQUJpTnhva1R4cVdrcEo0OGVaTDhKQVJCWkxyUDNMbHYvZmJyZG9ta2c4L24zN3AxT3pzN2UrR0N1VDYrUG5RNlhTcVYxdFhXM2I2VFdGZFg1K0xpY3Y3OGVRNkg3VGJBeFdReU1oajBBUU5jWVJnS0NRbng4ZkdwcTZ0YjhzN2kwTkJCenM3T0xCYXJzN1B6UVhMS3JsMjczM3Z2WFRxZEVURnM2TkVqQjJmUG1kZmEyb29nQ0prQXI5VnFHeHNiVjM3NG9hT2pQWmt2UnJiVDcyMVFYMUgxQUsvRUZQWlA5TGJ6NExNNlB4ekhtVXpHb05CUXBWSmRYVjFOZXR3WWhybTd1Ky9hOVVkMVRRMlh5eTBwS2I1eDQrYkdqZDhHaHdTeldYUXFsV0pwYWVIdDR6TTJMbGJXSlkrT2lSR0pyTEt6czVjc1dUSnQyZ3dmYjA4eXByZHo1MjhtRXpwN1Z2emNlZk1kSEczWmJBYURRUk1LTFlZTUNkZnBOR2ZPbkowMGFYeCtRWkdibTV1VnBXVkNRbUpQNjJBdkwrK3Z2dnB5N2x1elNEMlJPYW5rM2I1Q1U5VS84YXBhb040OFYvMXVOSnBzYlVUYnQvODhkKzZjekl4TW1WeVduWjBiR2pvSUlJajI5bzdJaUtIYnR2MHlaODVzQndjbmxWS3VWS281WEE2Vmd1ajBTaWFEUG01YzdMSGpKOTNkM2YzOC9INy9ZNWViKzRDSEthbVptVmtUSmt3b0t5c3pHZzNEaDBkbzFISUFBQkFFa2Nua0NBSnpPS3daMDZjbEo2YytTbjBjRlJWNTkxNXlURXgwZUhpNHI2KzNsYVdWdTRkSFpNUXdkL2NCS0dycVY0ZWsvSzk0SFFUVVEwKzlqc2xrb2lEd2lPRVJVWkZEWVlSeDdOZ1J2VjVmVVZucDZPaGdOQnJVYXJXVGt5TUFvQnd1Ly9hZHU0Mk5UV3ZXZkVBUWhGNXY4UEJ3ZDNSd0tDNHVDUWdJMEdxMTU4OWZhbXRyaTRpSTBPdjFKU1ZsaTkrZUQwRVFRUUFNQnIyNnBtNy8va09mZnJJR1FTZ3dRcmUydHE2cXJwNDFlNmJSYUdqdjZBd01EUHppODQ5ZEI3amp1SW5BOFo0RGNsOHo5UUQ5c3F5blQvUm9pQ0FJblU2bjAra0F3a2hCa0s0dXVWYXIwMmcwTWxtM3JZM054WXVYdStXS1RtbEhaV1ZsWW1KaVMzTXJoVUloZTZ4NmVYdEpwWjBHdmQ3ZjMzL1hybDFpc2RqVzFsWXFsVElZOUFFREJoaU5SaEFFWUFST1Q4L0l5TWlzcXFyVzZYUWx4WVdGaFlWK2Z2NTF0ZlZVS3FXdHJZMUtwVUlRWkRSb2RWcnRhNndlNERXelFDUzlIUXNJZ2pBTURRNGUrQ1E5VTZmVFcxdUxxcXJySmsrZWVPOSs4dWFmdHpPWlRCcU43dUhoWVh4NnhnOUFFTGhRS0FCQlFLRlNNWmxNcVZSS3hvU1VTcVdiMndBbWsvNjBFU0pCZ0NBUUhCeWNsWjJiOHZCUloyZlhwRWtUMkd5V3RMTkxwOVVWRlplNHVyclkyZG1aVEVZeUIrTTE4SFgraWRmTkF2V0cvTjBiREVZUEQ3ZTR1TmpVMU5TVWxGUnZMOCtXMXJiSXlJakJZWU84dmIyN3U3c0xDd3ROS0VwMm1pSnJkUXdHQTRIak1Bd2pDRUtuMHlFSVFsR3NwNDZISUFnQWhOcmJwYm01dVVLaHBaK3Y3L2h4Y1RRYUE4Y0pCcDErOGRJVkhNZG5USjhLZ24rMllYalpiK0wvUjE1REM5UWJjdkJNSmxOYzdDZ25KNGZqeDA4bEpDWkdSNDlJUzB2djZ1bzBHazF0YlcwSWdoQTRRWjYxQUVGUWQ3ZEtyOWZiMnRvYWpVYUZRdEhhMmtxbFVna0M3K3pzTkJwTlZDb0ZBQURnYVdVMFVGVlZKUkFJR0F5R3Q3ZTN0YlhWZ1lPSFpzYlBpSStmeXVHd2pVYlRjeDJ1WGt0ZVp3c0U5T3FxaWFLbW9LQ0FyNzc2WENydFBITGttTUZnQkFBSXgzRStuNzk4K1RKM2Q3ZW54WVFnV0ZKU2JEQVlMUzB0S3lzckNZSW9MUzNGTUV3Z0VEUTN0elNJRzhrT25rYWo4YTA1c3laTm1vUWdpTW1FUWhCY1hsNitmLy9CMGFOaWxpNWJ3bWF6eUkydDExNDl3S3NiaWY3UDZYMGFFSVZDQVVDd3JLeXl1cXBhYjlCREVPemg3aFlXRnFMWDYzQ2NZTEU1NWVVVkd6ZHVJZ2dpTWpMeTJMRmpXVmxaQUFCOC92bm5JQWhXVlZYNSsvdDkrODA2azhsa01wbW9WS3JCWUV4SmVheFFLbENUMFVva0Nnd01zTGV6MGVsMEFBQ1NFYzdYMCt2NVYxN2hRT0ovU004Z2ttRkdBc2Z0N1d6OS9YMkRBZ09QSHorWm5aTTdldFJJS29VQ0kwaEZaZFd1WFhzSmdoQ0pSQXdHNDlhdFc2TkhqNmJUNmUzdDdTTkdqSkJLcFoyZHNyYTJObDlmSHdhRFFhRlFpa3ZLZnZwcDgvanhZNmRPbStIbTVzeGswTWtGVjA5SDhOZGVQY0NiWUlGNjZHMktHQXhHYmw3aDExOS9GeFlXeW1Bd2JHeEVDb1ZDTEc3Q2NWd3FsUzVac3ZqMDZiTmRYVjFyMXF5cHJLemNzMmZQNTU5LzF0YldscHViSnhRSzJXeVdxNnNMQUFCU2FWZHpjek5CNER0KzJVbzJYbm1ObCt2L3hHdnVBL1dtWjFESnpRMlJ5RkprWmNWZ01QaDhma3VycEx0YnFkRm9Nak16NTh5WnhXUXdpb3VMWjgyYUZSam9OM3IwcUdIRGhsMjdkbjNSd3ZrY0RxZWtwQlFFb1k2T1RxVlNiV3RycTlQcDNkM2RTYy82MWRwRi8xL3grazloendHQ0lBQ0FPSTd6ZU56QW9JRDYrb2JPems0YWxWcGNYSnllbnY3VFR4c2pJeU9YTGx0T3A5TlhyRmd1dE9Cek9HeTl3YlI3OTI0K1g3Qmh3MWY1K2ZrSkNRbWVucDQ0anN0a3N2RHd3Vy9OaVg4RGRkUERhNzZNLzF2STRVWlIxTVhGYWZYcUQxQVRtcGRYVUY5ZmYvNzhHVDZQOThNUFB3WUhoOGhrTWk2SGhlTTRuY0ZBWUdqRWlCR05qVTBIRGh6YXRuWHozbjBIT2p0bEg2eFl5dUZ5RVFReDZIWDk1QVR1bDhJYk5JWDEwSk1uYWpLYU5HbzFoWUswdFVrVUNzWGR1dysrLytHbnFLaUliNzlkajZKb2ZuNFJnOG5FVUN3OUkyUGt5Smh2djkzUTBkSHh6YmMvZEhjckdob2FUQ2FVd0ZHdFJ2MkNnMTNlQk40Z0ovcXY5Q2dKUmRHYzNIeVpUQllTRXV6azZBQkIwSzFiQ1dmUFhkeTc1L2ZrbElmbnoxL2N0bld6VUNqQU1EeS9vTEM1cWRuUHo5ZlYxYmtuWWVPTk5UL0FHeTRnRWpKQmxrcWpneENFbW96a2RpbVZTdHU1YzA5K1FRR0tZbXRXZnhnV0ZrSVdGOVBvZEFpQ1VkUm82bi90Q2w4S2IrSVUxcHVucWJFRW9kTnBOV3FWMFVUS0FzUlFkTW03YjhNd1BIcFV6T0FoZzdWYUxRVEJBQURvZFRxTldrWDIrLzJuQThMZUtNd1c2SGw2ZkJvSWdsQU1oeUN5TXFNZm5iVGRyM2dUVjJFdnBrY29PSTdERU5rSTBheWVmOFFzb0wraEo2N3pYRlBwbDMxZi9SR3pnRjVFNytEMXk3Nlhmc3FiN2tTYjZTTm1BWm5wRTJZQm1la1RaZ0daNlJObUFabnBFMllCbWVrVFpnR1o2Uk5tQVpucEUyWUJtZWtUWmdHWjZSTm1BWm5wRTJZQm1la1RaZ0daNlJObUFabnBFMllCbWVrVFpnR1o2Uk5tQVpucEUyWUJtZWtUWmdHWjZSTm1BWm5wRTJZQm1la1RaZ0daNlJObUFabnBFMllCbWVrVFpnR1o2Uk5tQVpucEUyWUJtZWtUWmdHWjZSTm1BWm5wRTJZQm1la1RaZ0daNlJObUFabnBFMllCbWVrVFpnR1o2Uk5tQVpucEUyWUJtZWtUL3gvTndPVGJRQVBsUHdBQUFBQkpSVTVFcmtKZ2dnPT0iLCJkZ2UtaWNvbi5pY28iOiJBQUFCQUFZQUFBQUFBQUVBSUFERGZRQUFaZ0FBQUlDQUFBQUJBQ0FBS0FnQkFDbCtBQUJBUUFBQUFRQWdBQ2hDQUFCUmhnRUFNREFBQUFFQUlBQ29KUUFBZWNnQkFDQWdBQUFCQUNBQXFCQUFBQ0h1QVFBUUVBQUFBUUFnQUdnRUFBREovZ0VBaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQUlBQUFEVEVEOHhBQUI5aWtsRVFWUjQydTM5OTVOYzU1bm5DeDV2MDN0dnE3SzhMM2hERUNBQWtxS1QxT3FadHJmdlJOeWRqZGpZL1gxajl5KzVzN04zSm5wdmR3OWJyWkZFVVJKSkFDUThVQ2p2Szh1bDk5NmNrOGZ2RHdjb0ZRRTZpYVRZaGNvUGc0eXFZbGJXT1NlZjcvcys3L3MrQm1TWk90Q2x5M0VGK3FFdm9FdVhINUt1QUxvY2E3b0M2SEtzNlFxZ3k3R21LNEF1eDVxdUFMb2NhN29DNkhLczZRcWd5N0dtSzRBdXg1cXVBTG9jYTdvQzZIS3M2UXFneTdHbUs0QXV4NXF1QUxvY2E3b0M2SEtzNlFxZ3k3R21LNEF1eDVxdUFMb2NhN29DNkhLczZRcWd5N0dtSzRBdXg1cXVBTG9jYTdvQzZIS3M2UXFneTdHbUs0QXV4NXF1QUxvY2E3b0M2SEtzNlFxZ3k3R21LNEF1eDVxdUFMb2NhN29DNkhLczZRcWd5N0dtSzRBdXg1cXVBTG9jYTdvQzZIS3M2UXFneTdHbUs0QXV4NXF1QUxvY2E3b0M2SEtzNlFxZ3k3R21LNEF1eDVxdUFMb2NhN29DNkhLczZRcWd5N0dtSzRBdXg1cXVBTG9jYTdvQzZIS3M2UXJnaDBSUkZFVlJEcjcrb1Mvbk9OSVZ3QS9HWWROWHYrNXE0TTlQVndBL0RLcXRneUQ0UTEvSWNRZjVvUy9nZVBIaUdBK0M0T2QvcUFCQVZ4Vi9Qcm9DK0tFQVJWRVVCQjZHRVJSRnVsUEJEMFhYQmZyemNYaWtSeEE0bmM1ODhzbXQ5ZlVOaHUyZ0tLWW9TbmNWOE9lbks0RHZDK1VGZ0QrNC9nQUlnSWxFOHBNYnQ1YVhWMXV0Tm93Z0J4dENMLzVXbCsrUHJndjBuZkdGeHZxRlA0UWdpQmVFWEM2L3RyWnVOQnJPTmx2Z2w3eitoUlhDSDM3K1E5L3VTMEozQnZpMi9BbUROQVRCOVhvam1Vb21Fdkg5L2YxNnJhWW84aGZhOUZlL2VYZCsrUFowWjRCdnhXSEg1amx6VkJRQWhpRU13eUFZQmhSRkFSUkpsQVJCVUYrV3orY3I1U3FHNFkxR28xUXF0ZHNNZ3NDeUxNTXdqQ0FJQkVPQUFpaUtJa3FTS0Fndi9GbFZLay8vYUhjMitEWjBCZkFuOHVMb0MwRWdCTUhxMXlBSUFnQW9TV0tsVW1WWVZwWVZIRU0xR2cxTzRJQ2ljQnlYeWVaNFFRZ0dnelN0S1pYTHhWTFo0M1pCa0N5S1lyUFpiak50V1pKeEF0ZG9hSW9rbjY2T0ZRVUFBRm1XbjM3ZE5mdnZncTRBdmpNVUJlQjVnZWQ1V1paaEJGRVVzRkRJYld4c1pqSlpSUUYwV20wd0ZPenBDWm1NK2txbFdpNVhZQmoyK2J3RVFkUnFqVncyNTNJNk9JNkx4eE83dS92WlhJN25PYVBSMk5NVDd1bnB3VEJNa2tSQVVWQVVRVkFVQWdDbGEvM2ZFVjBCL0lrOHR6eUZJTGhTcmUzdDdpVlRhWTdqVVJUaE9XNXBhV2svRm1kWkZzTXdDSUp3SEw5NDhmdzdiLzhvbVVxSm9nZ0FZSzFXODNnODdYYTdYSzVVS3BYbGxkWGZmdmk3bmQwOUhNY1pobEVVeGVWeURnOE5PcDFPZGNBM0dQUzl2VDFPaDUzQU1WRVVnYTd6ODYzcEN1QlA1TEQxd3pDOHZiTjM3Kzc5MmJrNUFBRGRicmZOWm12VTY3T3pjeGlHZTMxZWc4RWdDTUxXVnZUbXpVODVqdE5xZFJpR2k2SVlqVVlKZ3JEYjdaVks5ZmNmZmZMcHA1OVZxeld0Vm1zeW1YQWNYMTlmMzRwR1FSQ2thUzNEc1BGRW90bXNPeHpPYTFldlRFeU1rUVF1eVRLZ0xnVzZwOGQvS3QxZG9HOExDSUx0TnJPOHRITHYvb05vZEx2ZGJqRU1BNEtBMitNZUdSM1JHM1FVUllYRFliL2Y3M0s1c3RuY0wzN3h5MHdteXpCTXJWWk5KcE03T3pzQW9OUWI5WTgrdXZIZ3dVTU13L3I3KzcxZXI4MW0wMmcwYnBkcmRIUVV3ekdlNXhpbW5jL25aMmZubnN6T3BWSnBFSUtBUTJ1RExuOGFYUUg4NlNpS0FrRVFBQUNWYWpXVHpZcWlHQXFGUmtkSFRTWWpETU4rdisvdi8vN3ZEQWJEL3Y0K3k3STh6MXV0Rmd4RFk3RVlDSUxwZERvV2l6RU1zNzI5WFNxVm04MVdvWkRuT0k2aUtMMWVEd0RBenM2T0xNdG56cHg1OTUxM0ZFV2hhTEt2cjNkZ1lNQnF0UlNMeFZRcUxjdUhvb2E2R3ZoVDZRcmdUK2RnL3hFQ0laZkxGUTZIZlQ3Zm1UT25YMy85bXQxdTI5alkwdXYxWnJOWkZNVmlzU2lLWXJsY0ZrVXhIQTdyOWZxTmpZMlZsUlZabGx1dDF0emNYTGxjbnA2ZXBtbTZXcTNXNjNXZTUrUHh1TUdndDl0dHBYS0paZG5UcDArLy92cnJvVkFvR0F5NjNSNk5WaVBMMGpQM3A4dWZEdnovL24vOVAzL29hempDcUNzQkJFRVFGTkZxTkU2SFBkTFhhN0ZZT2gwdW44OTNPcDA3ZCs1V3ExVzMyMTBxbGZiMjlpaUtHaDBkeldReU16TXpyVmJMNi9XQ0lGZ3FsUkFFQ1lWQ2dpQlVxMVdXWlFtQ0tCUUtETU1TQkdFMm1SVUE2T3Zyczlsc0lLRG9kTnBRS09qMytUUWFHbmdtd3U1UndKOU1keEg4SjNKNEY0Z2tDYi9QWXpZYVpFVXhtVTJ5TEF1Q2tFNW5IajE2bk0vbk5ScE5vOUZZWFYzRE1OVHRkZ01BOFBqeDQxUXExZHZiKytxbFM1dGJXN096czZ1cnEzcTkzdXYxOGp5ZlNDVGJiY1ppc2FaU3FZY1BING1pR0F3RVFVRFcwRVJ2YjhqbGR0STByZFZvRGwvSkQvMHdqakRkR2VDYjh0VnhCemlPNlhSYXZWNlA0Vmd1bDc5Ly8rSHZmLy9SeXNxSzArbTAyV3k1WEs1VUtnNFBqK2oxK3RuWjJiVzFOUnpIWDMvOSt0Lzg3ZDlvdFhRaWtZaEdvK1Z5T1JBSVdDeVdWcXVkVENaRG9hQXN5L0Y0UEJyZGhpQW9HUEM3WEE2TmhqYm85VGlPZmUzVmRsWHhEZWtLNEd2NEpyRUdhdGdtQ0lJUUJMV2E3ZDkvOU1uNzc3Ky90clkyTVRIaGREcXIxVnFqVVgvdnZYY3BpcHFmbjUrWm1lRTQ3dEtsVjM3MnM1K2RQWHZPYnJjVkNvVkVJbFVxRlF1RlFuOS8vL2o0R0VIZysvdDdEb2ZUWnJPbDArbU5qUTBDSjl4dXQ4MW1WUlJGa2lSWmxyLzZxa0FRN09iV2ZCTzZBdmdxWGdqdmVScCtjL2puSUFnaUNJSWdTTHZOcksydC85c3ZmdlhoaDcrdFZDbzlQYjBHZzZGZXIxdXRsdGRldTZLaDZmc1BIang4K0ZBVXhaTW5ULzR2Lzh2Zm56cDFrdWM1allZeW1ZeWlLTzdzN0piTFpZN2pmRjd2dWZObkFRQXFsVW84ejd0Y0xsbVdrNmxrTXBVR0ZFQ2owV28wTklvZ3Npd2ZYTlhoU3dLZi9nTWMvTnZsSytnSzRFdDUwZm9oQ0lJZ0NFRVFHSWJWRFZBQUFFQVFGRVV4bnkvT0x5ejkvcU9QZi9XclgrZnpCWVBCb05mcjgvbTgyV3crZmZwVVQwL1ByWnMzYjkrK1V5NlgrL3I2L3Y3di8vN0tsY3ZOWnZQV3A1K3hETnZiMjJ1MzI0ckZjanFkVHFmVENJb01EZ3dPREE0V2k4VmtNaW5Mc2xhcnplY0xPenM3dVh3ZVFURU1SWEdDd0hIc1lOcDU3cEtlRy9xNzd0QlgwQlhBRi9PRnlic2dDQ29BSU11eUpFdUtBb0FnQUVHUUlJakpaSHBoWWVuVFQyOS85dGxuc1ZqTWFyVkNFTFM1dVZtcFZONTU1NTJ4c2ZGSGp4Nzk4ei8vU3pxZDl2c0RiNzc1NXM5KzloZUtJdCsvZi8vdW5YdmxjdG5wY0FaREliMU92N3UzbDgvbjgvazh3N0N2dlBLS1RxZmIyTmo0N0xQUFNKSWtDS0pXcSszczdJaVNMTXN5aW1GYXJRYkRVQWlDWkVXUlpWa05rZ05CTlR6aWVlZW5xNEV2b3l1QUwrREZzVjhkWDFzdEpwdk43Y2ZpcVdTcTBXaGdHQVpCY0RLVnZubnJzMmFyeGJUYisvdjduVTZuVnF0bHMxbVdaWHQ3ZTgrZVBWdXRWdDkvLy8zOS9YMFVSUzlldlBBWGYvRVhNQXpmdm4ybldxMmVPREV0U1dJeWxaSmx1VGNTa1dVNWtVaGtNcGxtczJrMEdzMW1jNlBSbUp1Ykt4YUw3WGFiNXprRVFTS1JYbzFXMjZnM3lwV0t4KzJXWkNtVHllM3R4N0xaYkt2ZEJrR1lJQWdZaGxYUDZNRHV1d0w0TXJyYm9GL0E0UzFPUlZGUUZHMjEybnY3c2UzdDNVNkhneUJRbHFWT2gwTVdGaFZaRVNYUm9OZHBOZHBVTXBsSUpCbW1MUWlDSUFnRVFTaUtrazZuSzVYSzF0WVd4M0hoY0xpL3YxK2owVDU0OEtoU0tROE5EWjAvZnk2YlNkMjgrZW5pNGhJRXdiMjl2VDZmYjJ0cnExNnZ6ODdPSWdqQ3Nxd3N5enpQUzVJRWdnQkJrTGxjN3RLbFYydzIyM1owKzkvS1pVbVNGVVhCTUF4RlVWbFdZQml5V013ancwTm1zd2xCSUZHVXVxYi8xWFFGOERYQU1OeG90alkzdGg3UFBDa1VTcklzVXhTcDAybHBXbE92TjJLeEdNL3pmL00zZncwQVFLdlpLcFdLQjc4b2ltSXVsOXZjM094ME9vSWdBQUNnaHJnbGs0bXRyYzNCd2Y2eDBXR1h5MmsyRy9iMlkzTnpDN096czRGQWdLWnBpcUprV1M2VlNsdGJXOWxzVmwzc3F1K2dLRUF5bWRMUUdxL0hzN3E2dHZMd3NjdmxkTGxjTE52SlpuUHRkcHZuQlpxbW1zM1dpZWxKbDh0eFlQM2R2Smt2NC9nSzRHdnpDVldqQVVGd1oyZnY5cDE3eTh2TEJFRzAyeTFGVWR4dTkvVDB0TXZsVkdNOFFSQnN0OXR0cHEzK29qcUJpS0tZeVdSMmRuWm9tdGJyOVJ6SEtZcVN5V1FhalFiSGRZS0JnTnZ0RUhnV3g3QklwSGRuWjNkK2ZvRmxXWVpoY0J6bmVSNEV3YjI5dlV3bW93cEFmVTlabGhtR1lUc3NMd2lLb21pMTJvR0JmcjNlc0xpNHVMR3gyZWwwVUJURk1DeVR5V0lvcXRWcWREcXRKRW5xalh6MS9SNWJlUnhmQWJ5SWFpRUhscUJhUDh1eTYydHJhMnRybVV4R0RXc0RBQUJGMFpzM2IvM3QzL3hOTUJoUUZHVjFkYzN0ZGx1dE5naUNEdHVySUFoN2UzdEdvNUdpS0pxbTIrMzI5dlkyanVNbWt3bkhNUVJCWkZtV1pZa2tDQkJRVXFtVUlBakZZaEhIY1lJZzZ2VjZyVmFyVkNvSEY2TTZZMjYzRzhlSlhDNWZMcGRmdmZSS3FWejY5YTkvYy92MmJSaUcxUmdLcDlOcHNWaFhWOWM4SHRmRXhKZ2tTVjl4ajEyT3FRQytLS0VSVW8zc0FIVlhzZFBoMDVuTSt2cDZOcHRGRU9UNjlXdUJnRDhXaTkrNWMzZDdaOGZwY3RwczltUXkyZHZiTXprNU1UMTlZbWxwa2VPNGc3ZXQxK3NjeCtFNHJzYjVBQUJBMHpUUDg2MVdHMUFBR0lFaEdHWFlUcVZhclZRcUlBaFdxMVdHWVNBSWFyVmFMTXVLb3FpK2o2b3JzOWw4K2ZKbHM5bGNLQlFVUmNFSkloNVB4R0w3THBmejdiZmZxbFNxVDU0ODJkblpyVmFyUHArM1htOEFuM2VCMUh0VTE4ZXkvUHhDLzNoT0FzZFVBQWVBNE5QOFhWRVVEM2I2RDNzRU1BSnJ0Vm9BQUJpR3VYYnQyai84d3o4NEhQYmYvLzZqYURTS0lBZ0V3U1NKQVFDZzBkQXVsK3ZkZDk1QlVTUVdpelVhRFk3akJFRlFuUmFHWVJBRWtTU3AwK21RSkFsQjBPcmEydGpZYURBVTREcmM1dWJXNnVwYXNWaGtXYmJSYUtqcEJLSW9BUUFBZ2lBTXd5aUswalJ0czltbXBxWXVYMzdWWkRMbTh6bUNJQ1ZKaGlCWW85SHFkTnEzM25xTG9taTczZkZmLyt0LzdiQXNRZUFhclVhUmxXZERQZ2lDb0N6TGtpd0R6emExdW5XSGdPNDJLQWlDb2lRMm0rMUNzWlRQRjFyTkZnaUNhZ2FqT3VqaUdDNUxjclZhN1hTNGQ5NTVaMnBxdWw1dnpNM05JUWh5OHVRcHI5ZmJhRFJhclZadmIwODRITEtZTFNhVENTY0k5V1RxSUd3QmVPckRBSklrZGpvZGxtVnhuREJiVEdhVEtSNVBmUGliRHg4K2ZGU3YxOVVoWDFFVVNaSUJBSUFnaUtJb3E5WHFkcnRIUmtZdVg3Nzg1cHR2am82T1FoQ1lTcVdMeFZJd0dOVHJkUnpITlp1dG5wNXdUMDh2Qk1IWmJFYXYxNy8yMnBVVEo2WUpBcGRsV1EwWTVYaytYeWpsODRWNnJTR0tFb0lnTUF3OTl5aCs2RS9qQitCWXp3QWdDRXFTbEV5bWw1Zlhpc1Z5dnBESGNXeGthT2owNlpONnZWWTFDQVNCeDhmSFJFbXkyV3psY3ZtWHYveGxzOWxnR09hTk45NFlHeHRyTkJxWlREcVh5eldiTFF4RnZUNnZyQ2dHb3pFY0RzZGkrOXZiT3hzYkc4VmlFVUVRcTlWcU5wdHBta1pSRkVWUlJWRSsvZlJPTkxwVHJ6Y3l1Vnd3R1BUNWZMd2djSjFPclZZckZJb00weVpKMHUvM0R3ME5lYjNlY0RqYzE5ZlgyOXRqTUJnYTlYcWxYTWxtc3p6UDlmY1BhTFc2eDQ4ZmZmTEp6ZFhWZFFBQWdzSFF5TWp3K2ZQbnpXYUxKUElBQU1BdzNPSDRlRHgxKzg3ZFlyRklrcFRiNVFxRkFwRkkyR0F3UExkSU9HNGNPd0VjeFBPbzNzVitMTEc2dXA1T1oyUlpzZHVzRm92WlpyT0NJS0NXNkpFa0tadk56YzR0ckt5c05ScE5GRVZnR1BLNFhSY3ZuQnNhSG0yMzJ6czcyNklvaHNNaHRmcUR4V0lHUVZpU0pCekhTWkpDRUFURE1ML2ZQems1ZWViMEtaZmJSWkVVaWlJb2l2STgzMnExR0piMWVqMW56NTRtU1JJQUFQVUFvVndxcmExdjNMbHpONXZOZ1NDRVlSaEprakFNdDFxdHJhM29vMGVQVzYyV0xNczlQZUg5L1gySHd6RXhNZVp5T2VibkZ3cjVRcjFSNTNsK2RYV041L21weVltK3ZsNElBZ0VBVUdRRnc3R2VuaENDSUF6RE5sdXR4YVZsRkVNSEJrZ2N3OVFKUjAydk9XN3p3TEVUd09FTlFSQUVFL0hFL240Y0FBQVVSVU9oWUtTMzEyUTJJVENrV2tPcjFiNTc5LzdNekt3b2ljRmdVS2ZWYXJYYVFNRGYyOXNqaUhJMEd0M2ZqNkVvaGlESTNOeDhxOVhzNysrMzJld3MyNm5WYXJJc1d5d1dpOWtjN2dsZnVIQitmR3pNYURRZ0tBSkJFQWpDa2lRMjZ2VnFyWTdqdU1sa3BDaFNlUnJSSUxWYTdmMzllREFZV0ZoWVZGWEhNRXl4VUZEUEUxWlhWd1ZCOFB2OWZyOHZrVWh1Ykt6cmRKcFFLSWlpNk83dWJxbFlhak5NSnBPZG01dXIxYW9vaW9SQ0FYVmhZN1BaYkRZYlFaRDcrekdXN2FUVEdhZkQ3dkc0S1p2MWFhMmhZeGs1ZDd3RThOeWFUNVpsanVjNWpnTkJzRmFybWMwbXY5K1BZUVFFeVRBRVNiS1N5eGR1M3ZvVVFkQno1ODVNVFU0cGlpTEpNb0lncVhSbWJXMXRibTYrMCtFY0RrYzhGbTgwNmdpQ1FCQUV3eEJCWUFhRDNtRFFEdzBPUmlJOWtiNkkzVzVYRkVDV0pmVTBRRkZrUlFFUUZMTmE3UUFBU0tMVWFqYlZoU29FZ1RSTkRROFBoWUwrYzJmUGJHMXQ1L0o1V1paUkJFVVJHRkFVSE1QcTlYbytueWNJZ21HWXg0OW5TcVh5dWJObnRGcWQzKzhQK1AwUUROZHE5Vi8rOHBkTFN5c0dnOEhyOCtBNERzTXlnbUFkVG1nMG1vVkNRWkprU1pKNFFSUUY0YmdOK2M5eHZBUndDRkJSQUJpR2UzdkN1V3p1d2NQSG1VeDZibTV1ZFhYMSt2VnJBd045VnF1ZDQ5aGlzZFJzTmlPUlByM2VXQ3FYU0pJRUZHQXZrNW1mWDFoYVdtbzA2Z1JCdHR2dG5uRG9yOC8rVlU5UDJHSTFveWlpdWhJUWhFQXdERU9nS0FyNVhLNVdxN1hhYlk3amVGN2dlZUdaMXdFQWdBSkJFQXpES0lxUUpFSFR0RmFyMVdtMXRJWWVHaDdwNng4U1JWNFVlRm1XSVFpQ0lMRFpiTVhpaWZYMWpZMk56V3cyVzZsVXRyZDNvdEhvcVZPbklwRUlUVkZzc3lWSmtzVmlLWmZMeVdSU0VFUUV4UmlHaWNmM1ptWm1QLzdrazJ3MjUzYTdQUjZQMitVeW15M3FUdXV4VGEwOHBnSlFkejg1amkrVnlvVmlVWktFWURBQUFFQ2owZnpvbzA4Mk56ZW5wcVlBQUZoZFhiUFo3SUZBd09Hd0l3aGNMcFZYVmxhZXpNN3Q3T3pBQ0JMcDdSa2RIZW52Ny9QN2ZFNm5RMjh3WUJpdUtBclhZZXYxZXFsVUxwVXJqVWFqdzdLaUtFcVNCTUV3am1NWWhzTXdqT000Z2lDQUFraXlKRW1TS0lydE50TnNOa1JSbG1VWmdrQWN4N1ZhbmRGb05KdU5acE9ScENnWWhoVkZOaGowSnJQSjUvY09Edy90N2UwdExTMnZycTQ5ZlBob2Z6ODJOVFUxTVRIdTkva29pZ3FIZTlwdHB0MXVMUyt0V0N6bVdDdytONy9RYURTTlJoTk4wNUlrMWVyMVhENVhiOVJ0RnJQOExaL21VUVprbWZvUGZRMS9QZzVXd0RBTUM0S3d2YjI3dExSU3JsUU1CcjNMNWNReG9sUXU3K3pzRlFwNWs4bUlZVmk3eldpMTJtQXdhRGFiNnZYNjR1TGl6TXhNSnBNMW0wMG5UNTQ4TVQwMU5Eem85WHBKVWdNQ2NxZlRydFdhMVdxMVhLblU2dzJHWVFSQkFBQVF3ekFjeDlTb2ZReDdlZ0NzanZvZ0FFcXlwTHJnc2l4TGtpUkpvaUNJUEM4SVBDOHJNZ2hDT0k0WjlIcVR5V2cwR25RNkhVVlJLSVpDRUN6d2ZMRllqRzd2ek03T1AzNzhlR2RubDZLbzRlR2hFOU1uUEY2UEtFcXBWQ3FUeVZBVUtVbFNxOVdXRlNYU0cvRjRuQUFBRkF2RlFyRUVJM0JmcEdkcWNrS2owYWpyL21NNER4d2pBWHkra2lGVUxsYysvTzFITE11R2dvSGUzaDRJZ21pTkJrSFFYSzV3NjlhdCsvZnZDNEl3TUREZ2REb3BpcXJWcXB1YlcrdnJHNExBOS9WRnJseTVmUEhDZVkvSGhhS29LSXFDSUxiYXJVS2htRXlrczdsOHU5MUdVY1JvTkZxdEZxUFJRSkVVQ0FJY3o3RnNoMlU3blU1SGpWcDdGcUlqSXdoQ0VDUkZrUVJCMEJTQkV3UUV3VnlIYXpRYXBWSzVXQ3F6TElNaXFOVnE4ZnE4SHJkTHA5ZWlDQXdDSUlLZ0FBUld5dFdWbGRXUFA3a3hNL09rWHE4N25jN1IwVkdQeDRNZ1NLbFVpa2FqbFVxbHQ3ZjNSei82MGREUUlBUUI3WGFMWlZpRzZUeCtQTU1ML0tsVEo4ZEdoOVFiT1liaDB5K3pBQTQ2TVI1RWc2ay9RVkdVWmRtZDNmMEhEeDc2ZmQ1T3AzUDc5dDFLdGFxYVRrOVBUN0ZZdW5Ianh1Ym1Ka1ZSYnJjYngvRjhQaCtQeDNVNjNTdXZYSHoxMGl1UlNBOUJFQmlHS3JKU3E5ZTNvdEh0NkU2bFVpTXBNaGdNZUQwZW1xYlpEbHNzRmpPWmJENVhxTlpxSE1mS3NvSWdLSXFpRUFUQkVJU2dLQVJCYXFpem9zaXlKRXV5ckNneWpNQVVSWnVNUnFmVDRYRFk5WHE5Sk1uNWZENlJTSlpLSlpJZ1ErRmdYNlRYNlhUQU1LVEd1a21TVkN5Vkh6eDRkT1BHemJXMWRZUEJFQXdHU1pMTTUvT1pUTWJoY0Z5OGVQSDBxVk9GWW1GaFlYRmpZME9XcGJObnp6b2NqbmFia1NUaDdiZmUwT3Qwd2dzQ09BN3hFUy8vR3VBUGlielBLdW9EQUFCQk1JNWpXcTJ1MVdZWEZ4Yy8rTTJIV3EwV2hwR2Q3WjEwT20yMzI5dnR0bHFneW1nMEpwUEpack1aQ29XdVg3czZmV0xLNTNWVEpBbUFZTEZZMnQ3ZTJkbmRZOXFNeVdRS2hjTTZuWmJuK1VReVdjZ1hLdFdxSUFnUUJCSTQ0ZmY1YUExTjB5UkprZ1JPSUNpQ3dBaU13Q0FJU3FJa1NhSWtTUUl2ZEhpT1pkbFdxOTFvdEZxdDl2ckc1dFpXbENKSms5bGt0Vm43K3lPU0ZDNFVTc2xrS3BsTU9aMk93Y0YrcDhPTzQ3Z2tTVTZuNDhxVlYrMTIrNmVmZm5iLy9vUGQzVjJ6MlN4SlVybGMxdWwwbFVwbGFXbHBiMysvVnF1bTA2bjE5WTFtbzNuOTllczJtMDBVWVJSRlFRaFVuOU9MVCsvbDFzRExLWUFYVTdwQUVJUkFFSGgyQ0NCSkV0ZmhhOVZhdmxCWVdscXVWcXN1bDJ0c2RFU2owY3pOTDZUVG1kM2R2WGE3VFZGVXFWU1NKR2xnb1AvcTFkZk9uenRqc1ZvQUFHZzBtcGxzYm04L2xzdmxGVmwydTkxV213VkYwV3FsbXNsbWk4VWl5M1pRRkxWWUxGYXJ4V2ExbWkxbXZVNUhrZ1NLb1FnTVF4Q2tYczR6azFOa1daWWxXUlJGanVkYnJYYWxVaTJXU3NWQ3NWeXVORnZOUnJOWnJkWWNEcnZWWXJGYUxSaUtsa3JsVkNyRE1Fd3dHUEI2M1FhOUhvSWdtODF5K3ZRSm8wR1BZOWo4d21LdFZrTlJWSmJsZkQ0L1B6K2Z5K1ZzTnV2dzBCREhjUXNMaTd0N2U0c0xpMzM5ZlM2WHM5UGhTSkpFRUVpV0FSRDg0cWYzUTMrazN4Y3Zwd0NlUXcxM1U3K0dJS2pWYXVkeStWZ3NuczNsTXBsTXA5TUpCQUpqWTJPWEwxOEdBR1ZwZWVYeDQ1bE1KazNUTkFSQnpXYno1TWtUUC9yUkcyZE9uNElnVU9ENVZxdWRTQ1RuRnhZYmphYkw2UndhR3RCb3RiSDkyTXpNYkRLVkluQWk0UGROVGs0RUEzNlQyVVFRQkFSQml2enNtRXVXbjZXMlBOOExEQVJCQ0lab2l0UnFhS2ZMQVFDZ0pJck5Wak9ielVlajIxdGIwZDNkUFpxbUJnWUdCZ2Y2UTZGZ1BKSFkyTmpNNVFxbFVtaGtlTWhvTkVxU2lDTHd5TWlReFdMUjZuUjM3dHd0bDhzb2ltYXoyV3cyT3p3OGZPM3FhNE9EQXhpR0xTMHR3ekNjeStkeGdpQUljbnQ3Tnh3T0dneDZOVUpPRFZzNlBCdTh4RzI5WC9KZ09EVjFIVUVRanVPYnpSYkRzTElzTHk0dVAza3lWNnZYKy9vaUhvOGJSVkdTSkM5ZnZqdzVPVkd1VkQ3KytKT0ZoZmxtc3duRHNNRmd1SDc5Mms5Lzh0N282QWdNUVRBTTUzTDVtWm5aMmJsNW85Rnc3dHlaVUNpUVNDUisrN3VQbDVaWENCdzdmZXJrbFN1WEpxY20vVDZ2UmtOREVDUkpzaVNLYWtqYzRUVEw1Njd6d09lV0ZVVjZ1aDBrQVlDTW9aalJaQXdFQW9PRC9UNmZWNWJrOWZXTnBhV2xSck1SRG9YR3hrY2xVZHphaXU3czdtbTFXb05CajZLSUlBaGFyVFlVREdxMG1uZzhrVWdraXNWaXRWcVZKUG5rcVpNakk2TVlUbFNxVmFOQmYvTGs5T2pvQ0F6REs2dXJMTU9TSklrZ2FMM2VCQUJBVGJkL1VhVS85T2Y1M2ZNeXp3QnFseTVaVnBMSjlINHNuc2xrNi9VYXk3SU13N3FjenJQVHA2dzJLd2pBb1ZCNGVYbXhVaW5QekR6WjJkbmQzZDBWQkVHU1paZkw5ZlpiYjc3eDV1dkJZSUNpU0pidGJLNUZsNVpXMkU1bmJHelU1L1hrQzRYNzl4NW1jem1EWGo4eU1oZ0tCcDFPaDFhclFSQkVPVlNwNFV1dTdXdmRERVZSQUFnQ0lBZ21TWVFrTUsxR1k3UFpnc0hBOXM1T0pwUDUvVWNmOS9mMUJVTkJzOFc4czdONzc5NkRZckV3TkR4b3NaZ2xVYkpZelJjdm5rZFJWSkxFZXIzT01BekxNZzhmUHRSb05JSW9HZzJHMTYrOTFodnAwV3AxalVaemRWVVRqVVpYVnRmTUpoTk4wMGFUS1JEd2hZSUJ0UVRkeXgweS9STE9BQWVyWHRYM0tKVXJjL09MOFhneWw4dWxVdWxjTHM5eFhIOS8zK1VybC9WNnJVNW4xR2hvcHQyNmNlTm1PcDBSQklFa0thMVdnNkxZMk5qSVgvekZUd2NIaDBpU3FOZHF1M3Y3OHd0TGdpZ0dBMzZmMTVQT1pCWVdsdkw1Z3N2bFBIMzY1T1RraE0vbkpRaFNsaVgxMk92QWJYak9zdFVnUEJpR1lRU0JZUmlCNFVNbGZWNWNnd0xxQVlHaUtDaUdHUTBHbDh0cHRsZ0FFQ3dWUzVsc1RsRVVzOWxrc1ZnYXpVYWhVR0paVmtQVE9JN0RFS2pUYWkwV2N5NVhLQlNMSnFQcDVNa1RScU1wbVV4R28xR0N3SC95azNkOXZwQkdvOVZxOVNpS0xDMHRSYVBia2lnMW0wMjJ3L0c4SUN1eXlXUlV4WHo0NG4vb2ovYzc1bVVUd09HR2pSaUtOaHJOOWZYTmxkVjFFQVJwbXFacHFxOHZvaWdBUmRHQmdGOFNCVm1XYTdYNnhzYkdKNS9jd0FuaXhJbnBDeGZPbTgwV3M5a1U2ZTBkR2hveUdYVUNMMFNqdTArZXpQTzhNRDA5NlhJNTE5YldQL25rRmdTQjU4K2Z1WDc5bXMvdlF4QllFSGcxbWg4OHhNR0ZQZjMrYVU0V0lNdUtKTW1pS0FtaUpNdXlBaWpQWHY2SDMzdjYxYk9jSFZtU0JFRUFBTVZvTW9XQ0FhL1hVNmxVRnhlWENvV0MzKy92NzR2VWFyVllMTjV1TVJhTEJjZHhBQUFFUWF6Vkd5aUtqWXdNdi9iYWE4UERRM3Q3Kyt2cjZ4aUdqWStQYVdoQ0VrVzIwOG5sTXBsMHhtUTJEUThQdGRvdG5VNHZDSHdxbGZiNXZUUkZIeXlMWHhUelM4QkxKWUREWTVXaUtCaU9aN0s1aGNWbERNTmdHQlpGMGFBM3ZQYmE1VnF0dHIyOVd5d1dSVUVzRm9xMzc5ejV6WWUvSlVuaWIvLzJyOGZHUmxPcGxGYXJtWmdZNiszdGdTQllwOU11TGkwdkxpNFJPSDcxNmhXV1pXL2V2RFUzdHpnMU5YSDkrdFhoNFVFTVJTUkpWSTlSbnhiUE91VFBIRndTaXFJSWlnSUF3TENkZks0UWk4V2oyenRiVzl2YjI5dkpaS3BSYjBJUVJGRTBobUhxY2dDR0VRZ0NuKzNmQW9jVkpZa1NBQUE2cmJhM3QwZHYwQ1VTeWNjek14cU5abXgwVktmVHJtOXNWQ3BWazlHbzAybWJ6YVlDQUNQRFF4YXpwVmdxUlNJOWZYMTlMTXMrZlBpUTdYQ3lyTFNaZGpTNjlkbG5kMmlOOXZTcGsxNnZaMzUrd1c2M1V4U1Z5V1RzZHJ2UnFNY3g3Q0NuNTdtN2V3bDRlZFlBTDNyVkNnQ0JJQUpCRUFCSU9JNDNHbzFTc2NpeVowNmZQbVV3R1BiMjltYWV6Q29Lc0xXMTFXdzJYNzkrcmFjblhLL1g0L0hFNmRNbmVudkNGRVhWRzgybHBkWE5yYWpKWkI0ZEhjbG1zdzhlUEd3MEc2OWNQRDgxUGUxd1dCRUVGa1hweXhhTGlxSkFFSXlpaUtJQXRWb3Rua2h1Yisvczd1NGxFNGxjUGwrdk56aU9rMlVaUVJDVHlSUU1Ca1pHaHNkR1IwT2hnRVpEdDFwdEJFRXdIRU5SNk1DaE9yZzU5YTlvdFpxSjhYR0tvcDg4bVh2dzRCSExzSU9EL1dmT25KNmRuWnViWHhDbEVaZlRnY0FJcGRFa0VzbE1OcnUrdmprMU5Ybm16T25WMWJYdDdXMElBcTFXcXl4TEhvOW5hbXBLbzZIbjUrZHJ0ZnBCZWdDR0lnZ01BNGVXS0llektYN29EL3k3NFNVUndITW1DRUVRakNBQUFDQUlqR0hZMWxaVXA5T1hTc1hOelUyQ3dDOWN2T0R6ZVhFTWJiWGJvaWpWRzQxMm14a2ZINE1nS0I1UFZxdFZ2VTZyTnhnbFNhcFdxeHVibTNxRHZyY256SEhjdmZzUDJ1MzIrTmpvcFVzWGRUcTlKRWs4TDN5Rlk2Q0cvWlJLNWYxWWJIbHBaWEZwZVdzcm1rd21TNlZTczlrOFNIZ0hBQUJGVWFQUitPVEprL0d4OGFtcFNhL1hrOGxrVVJRSmg4TURnLzBrZ1FNQWNIaGRBUUNBTE11eXpHdTFtckd4VVoxTys3dmZmYlN5dWlvcjh2VDBaRTlQT0psTXJhNnVhVFMwMFdqQWNFcWpvUWtDMzk3ZUhSZ1k4UHQ5SXlQRHRWck5ack83M1M0UUJHdzJteXpMZCsvZSsraWpqMlZaVGlUaUtJcHhISWVnQ0FUQmFoU1QvSHgxaVpkRUF5K0RBSjdmcGdBQkJWQzRUcWRjS2hjTGhVNkhUU1FTQm9OQkZJVkdvL0dyWDMrUUx4UmVlZVhDd01DQXhXSkdVSlNtYWE3REdZekdWb3VwVkNxS0lvTWdLTXRpSXBtY25aMkhJSGhrZUVnUStJOSsvM0dwWEw3NjJ1VXpaMDRSQk1IekhBQUEwRmNhZ1NDSXFYVDZ5WlBaR3pkdVBYandNSmxNZGpxZEwzbWxVQ2dVQ29YQzB0THk3VHQzL0g1L09wMEdRZkRzMmJNLy9lbVB2UjZYeVdRa1NSS0MvbER6VUxVL2p1c2dDTkxURS9yWnozNzZpMS84YW5aMlhoTEZWeTY5SWtsU0lwRmNXRmc2TVQxbHhqQUlCR0FZNm5RNnJWYkxiREtxVGZqT25Uc1hDUGlMeFZ3cWxmbnNzOC91M0xtWFRLYlVpVTRVSmJQWldDaVVLSkxTNjNVMFRhdDFVWjk3N0MrQkJvNjhBSjd6K3hFRVVSU2dVcW5NUEpuYjNkMXJ0ZG9ZaHA0NmVVS3IwNkFvZW1KNnNseXUxaHZOKy9jZnpjOHZPWjBPdDl1VnpXWUZnUWNBaGVONGhtbDNPcHlzQU9sMFptTjlzOWxzWHI5K3RWSXVQM2p3c0ZRcXZmdmVPME9EQXhpR3FZV3J2dUtTWUJqbUJYRmxaZTNuUC8rM0d6ZHV4dU54aG1FT0l1Ky9ZbU9SWmRudDdlMVlMS2F1cDR2RjR1Ym1odHZ0dm43OTJzV0xGOTB1bHlRSmtpUWVHSjk2MUFES3NzTnVlL2ZkdHo3OTlQYWp4MDlJa2h3YUhpSkpjbmxweFdnMEVnUXRTa0N6MlJJRW9kMW1OQm9OREVPbFVubGxaV1Z6YzJOemM2dlphc21TTkRrNWNlM2FGYjNlb0NneXc3QXN5ejU4K09qaHc4Y2VqMnRpZkt5M040d2dpUFQ1NXNRdmdRYU90Z0NlTzFwQ1VWUVVwYTNvOXFOSGordjFwdFBwbUpnWU54b05KRUU4amNpSElCQUNPWTV2TlZ1MVdxMVlLbTlzYkc1dFJWdXRWaUZmQkNHSTU0Vk9wN083dTYvYTYraklNTTl4ang3TlZDcTF5NWRmSFJvY29HbnFzT3VpQWg3YXY1UmxHY2V4Vm90WldGajZiLy85SCsvY3VadE9wOVRUMytldStjdnVTTTBNVnIvTjUvUDFlcDJpMXFyVldqYWJuNXFhQ1BoOWRyc054MUhWK3dLZVZibFNGTm5qZHA0OWUxb1V4Y2N6c3pSTisveStZQ2l3dHJhaDF4dEVVU3lYSzUwTzEyZzBZQmpLWkRJTEN3dk5ack8vdjYrL1AySTJtM1ZhTFVFU01BeEpvZ2lDSUlLZ0NnRFU2L1ZzTnBkTXBqNzg3ZS9IeGthbkppZHNWalBIYzRlVEo0KzZCbzd3THRCeis5TnFJWk9WMVkyWng3UEZZckcvTHpMUUg3RmFMSW9DZERwY3M5bHF0bG9kam9NZ21DSkpnMEZ2c1poTlpoTU13ODFtczlGb3FpRVN0VnF0VnF1Vnl4VkpFa1BCb04vdnZmL2dVVHFUN2UvdnUzTGxFazFUQjVVR0QvN3ljeGNFdzdBa0thdXJhLy8wTCsvLzZ0ZS96bVRTWDl2TjVhdnZVUkFFaG1IVTlLNUVJbEdyTjR3R2c4bGtmTzZrVnMzaU4rajFlcjFoZTN1blhLN29kTnB3VHlnV1MzUTZuVnd1dTdPejIrbHdNQXdYQzRWNFBJRmgrT0Rnd01qSWNDZ1lNQm1OT0k1THN0eHVNODFtaSt2d2tpekRNS3pWMEZhTEJjZXdhclVXaXlVQUFORHBkQnFONXFBM3grSG4vME9idzUvSTBRaUgvdHBSRTRaaFdaWmo4Y1J2UHZoZHRWWTdlL2JVMk9ob3VWemUzdG5ONXd0cTlxTjY0cVNlT3RFVTVYRFlRK0dRVnF1SnhlS2ZmWFpuZFhWZGtrUUlBdHZ0ZHIzZWVPKzlkODZjT1ZNb0ZIN3hpMTlPVFUxZXVmS3EwMm5uT1E0NDlHRWYzaGc1K0FKQmtOMjkvWC81bC9mL3kvL24vMXZJNXlWSit0cTZuTjhFOVUwd0RBc0VBbi85MTMvMTl0cy9DZ1lDT0lFZHRqdFpsbEVVRXlWcGFXbmx3dzkvcTlOcDMzbm5yVktwc3I2K3NiMjlvMVpaVk5Wb3RWcGVlKzN5eU1nb2htSHBkR3AvUDFhdjEyVlpnU0JJRUFTZUUzaUJCd0NBcHFsUUtPajF1anRzNTdlLy9ZaGhtTW5KaVV1WExtQVk4azF1NkVpbzRrak9BR3FFeitHWWRRaUNTcVhTTDM3eEsxRVNKeWJHUFI3UDdjL3V6czdOdDFwdGw4czFNTkEzTmpveU5qWXlPRGdRRG9jZFRnZU80ZlZHSTUzT2lLTGdkRHA3ZW5wcXRlcnk4dkwrZmd6SENhdlZldkhDZVVFUWJ0Njg1WEs1TGx3NEZ3ajRCUDVwd2NNdnpCcFJENTVCRUt6WG16Ly8rUzkrL3ZOZjdPL3R2VGhTZmt0a1dXNDBHdEZvdEZBb21NMFdsOXVKb2VqaFRDNVprZFJkblhhYlNTU1N4V0xwekpsVGxVcDFmWDB6bDh1cEZZZDhQdDlmL3VWUHg4WkdxcFhxNXNaV3NWQTBHQXpoY0hod2NHQmdvTCsvTHhJTSt1MDJHNFpoNVhKNWRYVjliM2NmUlpIeDhiRjhQciszdjQ4Z2lNdnRSaEZVa3NUbmpqdGVQUFArb1MzbDZ6bGlBbEJ0SFlLZWxrcFdyWitrcUV3bTk5bnR1NmxVdXErdmp5VEltWm5aZktIZ2Nybkd4a1pIUmdaOFBoK0NJc1ZDY1hOemEzbGxKUjZMTjVvTkZFWFZYQk5GVVF4Nm5jUHBLSlhLZTN2NzFXclY2WFRTTkoxT1owcWw4clZyVjNyQ1lSU0JENDY2Z0VObm9vZUhkZ1JCV0xaejg5Wm43Ny8vODdtNXVjTisvM2VJcWdHR1lXa05QVEl5cktIcHo3bUNBQUFBSUlhaFdxMjJYbXRzYm02cHZTWHI5ZnJhMm5xaFVCZ2FIUGpSajk2WW5KcXMxK3ExV2tPV0ZSQUVLNVZLTXBIYzI5dFhSd1M5WG1lMzIyMDJxMDZuQTBHd1VDenU3KzhqTUdxeFdIaU8yOXpZdER2c0JxTVJ3N0NEZTFRelBGLzhzSDVvZS9sNmp0SWlXTTFiUFVpb2hSRUVCQUFJZ29yRjB0emMvTXJLV205dkR3aUFhK3NiZTN0N2t4TVQweWVtUXFFQWdrQTdPL3V6VCthV2w1Y3ptYXdvU1hxOTNtNjMyV3hXbzlGa01wa1ZXY1p4UE9EM3ZYcnBZaXFaK3ZTenorTHhPTWR4ZHJ0OWVIZ3dFdWtsS1VMNC9MYlBpMmU5YXNCcGRIdm5sNy84MWRMUzB1SDZ1Tjh0NmxLblVxbnM3ZTB4REtNK2x1Y2tJQWlDeCswY0hobE1wbEt6cy9PRGd3TWtTVmFyVlpJa3o1MC9lL0xrQ1VWV0twVmFvVmdzbHl1VmNxbGNMaGVMcFhLbHduR2NYcS9ySCtpZm5wb2FHUm5xNitzMW1Zd2tRY3pPelQ5Ni9IaHFhdEptc3hkTHBidDM3NEVnMU5jWHdYQUNVR1Mxd0I3SDhlclk5RU9ieVIvSGtaa0JWRDllRUlSeXVaTExGeUFZd1hGY0ZNUm1xMzMvM29QRnhTV1NJRVpHUjJablo3ZTJva05EUXhmT253c0VmYklzcjYxdC9PTS8vcC8vOUUvL1BQUGtDUy93TnB2VmFyV0JFSlNJSis3ZmZ3Z0NpczF1MDJxMUJJRmJyUmFHWWVibkY1TEpKTU93UTBORGI3Lzlwc2xvZkxIZDBJdGptMXFWLzdlLy9lajk5LzgxbDh0OXI0OENCRUdielRZMk5uYnUzQm05VHZmaUFrTTlYU1lJQWdMQitZVkZobUgzOXZaV1YxZlBuRG56N3J0disvemVRcjdZWnBqRnhjVlBQLzEwZFhWTm85V1NGQ21LWWo2Zm01dWRmL1JvSnA2SVl5anFkcm1NQnFQQmFNQnhmSFYxdFZBb21NMm1udDdldWRsNW51TzFXaTFOYXlBWTZuUzRRcjZZeitkcG1rWlI1UEIxL3RCVzgvVWNtUmxBVVJRWVJrU1IyZHZiLy9pVG0zMTlrYjYrdmxhcnRicTZsa3FsZTN0N1RwMDg4ZkRSNDJoMDIyRzNuenh4QWdRaHBzMXVSYVAvK0kvL3Y0OC8vb1FreWZmZWUvZmRkOThPaDBKR2s3bGFyZCs5ZStkLy85Ly95LzM3RHpRYWpkZmpCa0hBYURSRStpSURBd09mZlBLSngrMCtNVDNsOVhoa1dUcFV3K2NMVU9XZzlqbTlmZnQyclZZRHZtNnovMXZpY0RndVhyand6dHR2bVUwbXRkRDVpODQzei9OYURUMDQyTCt5c3JhMnRyYXhzYUhSYU02Y09lVjAyaEVZUmpGMGIyL3YwYU5IMjlzN2c0T0RmLy8zZit2MXVqc3NtMDVuN3QxNzhLOC8vN2U3ZCs3bXNsa1FBRStkUGtVUWxORm9tcGlZdUhIakJnU0JmLzNYZjNYNThxV0YrY1YvL3VkL0dSMGREUVFDNlZScUs3cUZ3TWhmL2RWLzBHam9vMVZzOU1nSUFBUUJTUkp4SExOWXpCekhmL1RSSi9Oeml6Ni9EOFBRMDJkT2VkenVjcm44MldlM1pWbDJ1ZDBvaW1vMGRMbFNlZkRnd1kwYk4zbWVmL2ZkZC83cXIvN2o2T2d3am1NRW9TMlZLdGxNTmhLSjZQVjZFQUtqMGFqWDY0SVJ3bXF4OVBTRVoyZG5CNGNHQnZvaktBcHozTk15NWM4dTQzT2V6N01hbzBpMVd0L2EybDViVzFmUGVyOFA2MGRSOUdEZ1AzZjJ6TkRRSUk1amg5ZlpCNm83Q0Zrem1ZeFRVeE56ODNQSlpETGc5NGVDUWIxT0wwbFNxOVhhM3Q0TzkvVG9kUHBxdGRwcU5VbUt0bGdzSnBQSjRYQUNJUGhQLy9UUDBlajJyei80amQxdUh4b2VSaEhFN1hKUkZCV05idCs3ZC8vaXhmTVVTU2FTcVhRNnM3YTJ2ckcrUVpENHRhdFhTWkk0Y3RGeTBMZC9pejhQcXFPSklJamI3VDUvL3F6VmFxbFVLK1Z5R1NjSXJVWlRMcGZ2M1h1d3Vyb3F5ekpGMDZJazZnMzZjcm15c2JGWkxCYjlmditycjE2YW5wNmthUW9DUVlGdngvWjNON1kyeDhmSFhyMTAwV0kyeCtKeFhoQUFBS1FveXVWME9wME9uODlyc3Boa1dUNDQ0L3FLbUI4SWduSzUvTTdPYmo2Zi8vN0dQNHFpQmdjSC8rNXYvK1p2L3VvL25qcDFVcS9YZlZFWm56OThMY3N5RENPRFF3TmVyMGVyMVJxTVJyUFpSQkJFaCtOS3BWS3RWajh4UGZYS0t4ZGtXVjVjWENyazh5Q2d3QWpzOC90ZnUzTGw5T2xUa2lUTnpjMm5VaWtVaHJSYUdrRVJtcWJMNWZMTm03ZDJ0bmNnQ05ab05KMU9KNTFPd3dnOE5EUjQ0c1FVUVJEZitjYlg5ODJSbVFGVVpGbldhT2pyMTE3emVqenI2eHZsY2tVVXhPaFd0TlZxNWZJNVNaSWFqV2E3MWFKSWdxYTFnaUMwMjIyMU5MbkZiTUZRdE5OaFlSaXVWdXV4ZUtMUmFFUWl2UUcvYjJOenExQW84cndBQUJLQ0lqcTl6bTUzNlBWNk5aVHRZQ2ovaW9GTjdRWVpqeWUrTE5UblczSndDT0J3T0U2Y21QUjQzYUlvOGp6L2g4N1lmM2psUVJNa1VKWmxFSUlzWnZQRStIZ3ltY0l4bkNSSkNJWTdIYTVlYjZBbzZuSTVRUUN3MjIzUjZIWXVsL042M1FJdndCQnNzWmljRGdlS29oekhNVXdieFJDcjFieStzZG5wY0tJb05wdk5qYzB0Z3lFUEFDQkZrY1BEUTcyOXZjUERBeTZuUXoxdVAwTERQM0RrQktEVzlrRVFlR2hvd090MUY0dWxacXVGb1NoTjAyb05uSFE2VzZtVXpXWWpnZ0JPcDkzajhTZ0trRTZuYzdsY3A4UEpzcExKWkhaMjl4S0pwSWJXaE1NaGtpUmtXVVpRNUdEc1JCSFVhck1hVFVZTXd3NjcxMS8rdVlLaUtLWFRtV3d1QzN3LzNyLzZodlY2ZlhOekl4cmRzWmpORkUxOUkyZERVVUFJN09rSmo0Nk1sTW9WK0ZuVmF6VXJEUUpCbTgzYTE5ZDM3OTc5cmExdG05V0dZcWpENFNvVVNxbFVTaFJGdjkvdmRMbzBHaTB2Q0tJb3BsSXBCRUhlZnV0SFAvclJHNklrMVd0MUhNY3NGb3ZKWkNRSS9IQ04wU1BFRVJPQWlocjBaakladFZvTkx3Z3dCQkVFWWJXYXIxMTk3ZWYvOWo5THBaSWdpQUFBZUQyZVZ5Kzlra3ltbHBlWGI5MzZsT001Z2lCRVVjcmw4czFtMCtsd21Fem1ack1wQ0FKRmtpZ0NBd0FvU1pLc3lGYUx4V1EwWWlqS2NlcUkvcVhPaitvV0NZSllybFRVNWUvM0I4L3o2WFJtWlhWdFlLQmZwOWNkUG1kNEx2VU1PSHcrTGNzMnU4M2xjaldhTFo0WEpGSENjVXluMDJJWXl2TzhSa1AzaEVNM2I5NUtKbE56OHd2MWV0M2xkRDJablYxYjN3aUhRei8rOFh2RHc0TTRRYkFkTVo4dktJbzhPRGp3Mm11WGcwRy9MTXNjeDhNd2hHRTRERU1IWnpJL3BGbjhTUndOQWJ4NDZxUWVRK0k0VHBLa0xNc2dCR3EwbWl0WFhzM2w4clY2WXl1Nlk3VmFEVWJEdWZQblVBeS9jZU5HcTlXNmZmc3VqdU5UVTVPVlNsa1FoTDVJaENDb2RDb3RDcUxOWmxNVHdBVmU0RGpPWWpacnRSb0lncjVoVDBWSmtsaVc3WFMrcjczL0E1ck41dExTMHZuelo3MWVqK3IvZitITFBoOGpKR20xR29OUkQwRWd3ekE4enhNNFlUYVpDSUpvdFZvQUFQcjhYcElpVzYxV3NWaks1WEpMUzh2dGRtdDRlQ2dTaWJ6eHhodWhrRThTeFh3dW04dmxob1lHejUwNzA5c2JobUVJUVJDQ3dCVUZrQ1JKRkNVQVVGNFU0WkhneUN5Q2dTOGE1d1JCVUh2UjhSd1BLRUFrMHZ1VG43dzNQRFM0dHJhMnQ3ZFhLcFUwR3MzNTgrZi84My8rdjB4UFQ2dTFhU09SWGdBQUFFRHA2UW5ETUZRcWx4VkZDUVQ4R0lZRGdNS3lMTk5tekdZelJWRUs4TWQ2TXQ5NzlRU080MVpXVnZkMjk5cnROdndzVnd0NFlkUHBjUDZrTENza1FXaTFXZ1JGbTgxV3A5UEJjZFJrTWhnTWhscTkwV2kyckZhYnpXb1RSWkdpeVA2K3ZscXQ3dlA1L3ZKblAvdnJ2LzRybDh2RjgrSitMTGE4dkF5Q3dPdlhyMTI3ZWdYSE1WR1VlSjduT0o3bmViVUgyZEV0S25vMFpvQ3Y1dUNoaTZMWTM5K0hJT2lqeDA5dTNQelVhRFFhVFVZUUFPcjFScXZWT24zcTFOajRLSW9peldZTHh6Q2Z6OTFzMVBMNVBBUkJYcThiaGlGUjRKck5WcHRoZWlNUmpZWld2dkdHQmdpQ0NJS29PV2pmSzRJZ3hHS3h6YzJ0MDZkUEJvTUJVZnphT1VlUlpRbkRjSVBlUUZOMHFWUnV0eG1qeWFUVmFvSkJmeUtSU2lSU2c0TkRicmNyR3QwV1JmR04xNi9qQkI2UEoxWldWd3ZGQW81akRNTVdDc1ZPaHp0Nzl1ekUrSWhHb3hFRTRTQTUrS3MvamlQQlVSTEFjMTdtaTA2bkxNc29pZ1JEQVpyV3BGS3BjcVhDdE51Q0lQQzhTSktVUCtEcjdRa3RMNjkwT2gySDNXNDBtamEzdGpxZGp0ZnJNWm1NYWhPdWVyMHVTYkxkWmlVSjRvL1kwQVFQL3ZPOVA0RldxNVhQRjZxMWVnaUVBUUJVODllKy9QV2cyb0REWU5EYnJKWjhvZEJzTlFFQWdHRWtIQXJGNDhsVUtoMEkrUDErMy9yNlJxVmMxbXJwL3Y0SXkzWXFsVXE3M1diYWJaSWtJNUdJeldZTitQMGFMZlhjc2NOelh4eEZqcElBWGh4MURsZndVK2Q4ZFJ1T3BpbWRUb2RoS0FSRFBDOUVvOXVsVWltVlNodU4rbmc4Z2NDd3dXamdlV0Y3ZThkZ01JUkRRUVJCUVJBc0ZJcVZTa1duMDFxc1pqVzM1aHQvdE9CWG5CSjh0eEFFUWRNVWptR0tvbnpGTXVBd3NpenI5RnF2MS9Oa2RxNWNyblJZQm9JZ3U4Tm1zMW9MeGVMMjlyYk5aaU5Kc2xRdXhXTHhlRHhSS0JSQUVMUmFiV2F6V2EzZXJ0ZnJVQlFCWkVVR2xlYytoUmUvL1RNOGhPK1FveVNBTDZvb0NCeTJBQkFFUlZHS3g1TkxTOHUxV3QzdGRnME9EaElFdWJDd21NL25hN1ZxTHBkakdBYkRNUWlDOW1PeGRwc1pIUm54K1R5U0pFSVFsRWltNjQxbUlPRFQ2M1VRREIxc2FYL3Rod3BERUUxVGFxZkg3eFVFUVp3T1IyK2sxK0d3eTdMNHRhOVhMMThVUlpxaWZIN2Z3dUpTUGw4b0Zrc09wNTFBOE41SVQ2dmRYbGxaR3h3Y29DaXFXcTAvZVBnNEhvK1hTaVdYeTBXU1ZDQVFqTVgyVjFmWEJKNGZHT2p2Nys4em1ReUgyd2g4NFdkMHREUndaQVR3aGJVRTFTU1hnOXIvSUFCVXEvWDVoY1ZQUHJrWjhQdWkwZTM1K1lWZ01Kak5ac2ZIUjJFWW5wdGJLQlNMTkVWbXMxbEprdnorZ0ZyK24rZjVXcTJlVG1VZ0NPcnY2ME1SUkphK1VScVhlbFU0am5vOGJxZlRzYkt5OGoyRkFLbjNpQ0NJeCtzTkJnSUdnK0hGek13dlE1SWtGRVd0RnJQZjd5K1ZLdnY3Y2FmVElZbVMyKzJxVktySlZIcDVaYVhaYkpaS3BTZFBaa2RHaGowZWQ3dk5QSDQ4czdpNDJHdzJtODJtTE12eFJKS2lTS3ZWckh5KzBieWF1L3k5Zi96ZkcwZEdBTTlOdFdySnZuYWJxVlNxTE1zaUNLelg2NjBXaTA2bjAxQVVESUVPaDcyM3B5ZVpUSDN5eVEyZTUwUEJJSTRUTE1zV0M0VTB6M01jNS9mN0F3RWZyYUVBQUpSbFlIbGxOWnZMK2J3ZXA4TU9BTUFmZGFRUHdiRFpiREdaVE4vZjdhdjNMc3R5dFZxdDFlbzh6Nk1vSXN0Zk5VY2RmbUtLb3VBNEhnb0Z0cmUzbDFmNHZyNWVnMEdQWWFqZGJnOEdnNHNMQy9GNHZGcXRxaDI4VVJRckZ1UHI2eHMrbitmYzJiT0NLTTdPenRNMFJXbTBNSXcxR28xeXBkcnBkQkFZMGVsMFJxTUJoaEcxRk9xZnd3NithNDZNQUE2aFFCRE1zcDFzTHIrL0Y2dFdhenpQd3pCRTBaVEZiQTRHL2NHZ2YzcHFzc04yaG9lR1NJcDhQRE9UeVdTaTBXMm4wd2s4ODlhMVdwM2I3ZEZxdFJpS3lySlVLQlJ2M3Z5MDArRUdCL3NKaXVRNTdvK2F5a0VBTUJtTlpyTUZSZEh2S1E5R1JUMk9YVjVaR1o4WTdZdjA4THg4MFB3RytFcFhUVjByMjJ6V1ZxdTV1N3NiQ2dVdVhyeUFJQWhKa202WEt4R1BveWlLSUFpS0lwVkt0VktwUktQYmlVVGkvUG16SHE4bm44dHJ0WnJUcDA5aUtMcTB0SnhJeHR0dGh1dHdBQWhxTlJxdnorUDNlWFE2M1ovVkJMNDdqb3dBRGtkZmdpQVlqeWNlUHBwWlg5OGdTUkxETUFBQTFEM3BpZkhSMGRHUk0yZE8vN2YvL284MnU4MXF0WVpEb2VYbDVibjVoVWlrRFlLZ3crRXdHQXg5ZlgxNnZWNFVSRVZSNnZYRzB0TFMvWHYzd3owOUZFV0J3Tk1xQzhBMzdoZ255N0xaYlBKNlBTYVRxVmdzZm45am9Ub0R6TXc4R1JrWkNRV0RCMC9tYXk5U2ZYZ0VRUUFBc0xlM2YvdjIzYjVJeE82d0s3SU1RVkF3R0N5VlN0bHNsaVRKYkRaYkxCYWowU2dNSTZPajQ2bFVabXRyeStsd1JIcDdkM1oyWjU0OEtaZXJHbzBHQUVDTzR3UlIwSyt2bno5M1pteHNSS1BScVB0bVIyc1pjR1FTWWxSVTYrOTB1RTgvdXowL3Z3QkJrRTZuVXhRRkp3aVh5MlUybTlmVzFzdVZTamdjWWhtMlVxbFdxN1ZPaDN2OCtIRzVYSVlnMEd3MisvMStqOGVqMStzaENLSnBEYUFBRzV0Ym45eTR0UitMK2YzK3NkRlJyODk3dVBET1Z3UkJBSWVPcUFtQ2FOUWIwZWgyUHAvLzZtWGl0NmZkWm93R3c4aklzRmFyVWJORHY5bGlIVlFVWUgxak14NVBkRHFjckNoNnZRR0M0WHkrd0hFY2lxSWFqUVlFd1VRaXNiYTJWaWdVckZicnhNUkVOQnJGTU9UQ3hmUHJHNXVQWjU1SWt0emYzeStLSXM4TEtJb2dNSnhJSkVSQk1wcE1UcWZqY01tTW82S0JJek1EL0FGRlVSUkZyOU1IQXdHanllaHlPdGdPbTBpa2tvbUV6K3V4V016dGRudCtmdEZtczFlajBYUTYwMmcwMUxNYmtpU3RWcXZhbDA0OVNhM1ZhcnU3Tzd1N2UvVjYvZW01cVFJQUFIeDRVZmNWNDluQjRsc1ZRRGdjT25saWVuVjF0ZFBwZksvcndtS3hzTEs2c3JTMGJMRmN3bkg4YTdkckQrY3hDNElnU2JJZ0NHdHI2d2lDZWp4dW5oZHF0UnJMc2hBRTBUUnR0Vm9CQUdnMm03VmFiVzF0cmRWcWViMGVTVktXbDFkME9oMUpFcnU3dXlpS0J2eGVtODNLQ3dKRmtSYXJHVVBSSTdvVVBtSXpnQW9JZ2ppT09aMk9jRTh3RVBBNzdBNFV3K3IxZXFsY1ZvKzBrc21VVnF2TlpESzd1N3VaVEtiVmFnVUNnVkFvUkZHVVdwUVRRUkFjeDBWUmFEYWJKSUY3UEc0TnJTRkl3bVF5ZWp4dUJJRU94MXArQXdkRFFSQVlRUkZCbEJZWGw4cmxpcUo4WDE3UTAwdUNJSlBKT0RveVF0TzAydnp5Y0R6Q2k1ZW5sbzJKeHhQcm01c0VqazJNanp1Y0RsbFdPcDJPSk11TmVyMVNxYWhOQVZFVWxTU0o0N2hPcDZQdXNHbTFXZ2dDczltc3pXcVZaU1dmejQrTmpZMlBqWVpDQWJ2TmFyRmFmRjZQMVdiQmNmeTV4TkVmeWp6K0tJNk1BQTQvVUFnQ1RTYWowMmszbTAwMFRla05Sby9IYXpLWkhqeDRDRUVJaHVHVlNxVmFyY1ppc1Znc1ZpNlhyVlpyYjI4dlFSQ1pUS2JaYktwYkloaUdDUUxmMnhNK2NXSjZjR2pRNS9NMm0wMm0zZGJydENhVEFZSGhnMWpvcngxZlFSQ1VaUVhEY1pJZ010bHNOcE5wTkJyZmt3VThmVnNGb0duNjVLbVRKcFBwbVJmMC9IVWVETWxxS1kxR3MzWC93U05SRUNjbkppNWZ1VHcrUG9yamVLMVdLNVZLRE1NVWk4VnNObHNxbFVSUk5KbE1PSTVYcTFXV1pkWDM0VGplYURUVjY0MTJ1OVhiMi92V1cyLzVmRjZDeExRYWpjTmhONXROQkk0Zi9uTkh4ZnFCSStRQ1BUZkRIbHBvS2pMUG94anVjTmo3Ky92VDZVeXoyV1JaWm1zckVZOG4ydTIydWtwT0pCS0NJSWlpaUtJb3kzWWFqVVl5bVp5YW1yUmFMWHE5Vm0yTTVYYTV5K1hLeG1iVTdYWnF0ZHJuL3ZwWGY2aHFIcnJEWWYveGUrK21VK2xpcWZROUpjZW9TSkxVWVRsQjRCVkZCa0UxeXY4TEx1OVFYK1JPT3AwcGxjczJ1OVZ1dHpOdFJxZlRlRDN1ZkM0M096dFhMbGVheldhdFZtMDBHaEFFcVNkNlJxT3gxV3FsVWltV1pWbVc3ZW5wcVZhckRvZDlhbXFDd0JHZTY0aWk4R0pHenBIanlBamdPUTRIUWFndGdIRWM4M2s5eVdRcWtVaFVLdVd0emExcXJRYkRzRHJlT3h3T204MW1NQmhNSnFPNlg4RXdUS3ZWK3V5ek8wNm4wKy8zWVJqR3NKMTBKcU5yYWxxdHR0b2k4bkNzNVJkcTRQQmV1eVJKS0lwTVRVMjg5ZmFQS3BYS3ZmdjN2L083QmtHUUlBaXYxenN5TW56aHdubXJ4ZnFGUVdtSEIyTlpsaUVJNURndWw4MWwwaGtZaFB4ZW53SW9qeDgveVdTeWxVckZhckU0SEE0Y3h3UkJxTlZxMVdxdFZDcmw4M21HWWRydGRyVmFyVmFyeldZVGdpQU13L1Y2bmQxdUEwSGc0QWppcURlUVBESUNPSlNOcm43N2h6RlBMWlFGZzREUmFPeDAyTDI5dlh3dWwwcW5BUUMwMiswK255OFVEZzMwRHdRQ0FZdkZiRElaVVJUaE9LNVNxV2F6dVZnc25pOFVDNFZDLzBDL0tJb2N4N1ZBNEZtdHRUOWlYWGV3WnRBYjlLOWN2SkJNSkxlaTBYSzUvTjF1aVVJUVpMRllYcjkrN2ZyMWE3MjlQU2FUVVQwZmU3RXF4T2NkRWtoUkZKN25HNDJHTE12dGRqdVh6NjJ2YjRpaVpMZmIrL3Y3eldhalRxY0RBYkRaYXBYTGxWUXF0YjI5czdXMUZZdkYxQU15aG1GQUVBeUZ3Z1JCa0FSeGtIVUpIR1hUVnpreUFqamdjTnJySDA0NkFRQUFRUlREcXRYcS92NStyVlpERU1SdXQwOU1URnk4ZUhGOGZNempkbXUwV2hSRkNSd0RRWURqT0tQQmFEUVlTWkthbTV2NzlMUGI1VXBabzlFaUNDTEpNb2JoYWt1bHovOWQ4T3N1REFRQVFPQTVuOTk3OHRTSk8zZnZQWDc4K0x0MWhCQUVzZGxzbHk2OWN1M2FheUFJOEx6d1lqVG9GN2FyUVZBRUp3ZzEzMjE3Wi92eDR4bUNJQ2NtSm9hR2htdzJxOUdvMTlBVUJNR0NJUEtDT0RJOGZHSzZGSTFHNzkxL2NPL2V2WjJkblhhN3ZiT3pvOUZvUkZHRVlmaHdLYTRYUzFIOHVRM2lXejdTSC9vQy9oUytNQXBTQVJTZTU4cmxzdG9kZW5oNCtQTGx5eGN1WEJqbzd6T2JqUmlHS3FweEtFQ0g0eHVOWnJGWXltUXl4V0tSNDdocXRmYVAvL2gvRWdUaGNybW1wcVpFU2VSNFhoUkYrRkRGdjI5MjNxUW9Da0FRcU5WaThYbzk4L1B6My9sS0FJWmhYaEJZbHNWUTVHc3ZTUzB1RFFDQUtFaVNLTmJydFovLy9PZk5abE1VcGVucDZWS3B0TCsvTDRvQ29DZ2dBSklrZ1NBd2lpRWFHamNhZFU2bkl4QU05ZmIyM3JwMTY5R2pSNVZLcFZLdU5Cc05TWkpROUhOVkVJL2N6czloanFRQW5rTlJGQkNFWkJrb0ZrdmxjbG12MTU4NWMrYnk1Y3REUTBNT2gwTlJnSHkreUhFZDlUU0FJRWlhcGttUzlQazhaclBCNGJEcjlGb01ReUVJVENhVHFWU2FwdWxmL2ZJRHZjSGc4M25IeGtiSUYwcGVQc2VCSy94Y3NmTHZJMG9NUVdDcjFXbzBHRkFVbGI5eXAxWGQrcFFrTVpYS2JHNXVwVFBaVENZVGp5ZHF0WnJSYU96cDZabWFtb3hFZXQxdWw4bGt4RkJjRktWOHZ0aHF0U1JaZ21HWXdIRVV3N1JhN2ZUMHRORm85SGc4bjN6eVNadHBGNHBGbnVkSkVnZWVGWm8raXFQKzV4N3BEMzBCZnpxZkQwTUhPSTZQeFdLaUtQWDI5cDQ2ZGFxbnB3Y0FnTDI5dlVhandYVTRTUlloQ0VJUVZGRVVETWRzVnF2Zjc3TmFURWFEd2VsMGhFUGh5WW1KdmYzOVVxbkVNT3lqUnpObXM1bW1LZVNiSlhrZHVoSVFBZ0ZCRUN2VldpNzMzZGNJZ2lEWVpETHE5VG9NUTUvTkxWKzE1Nmd1Z2xkVzE5YlhOM1E2M2VuVHAvUjZuZHZ0RG9WQ0xwZkxiRFpoS05KcXRmZVMrOGxVcXRGb0tnQWdTNUo2aUFIRGlFYWowZXYxVnF0MWJHeXNVQ2lzcnE2VmlxVlNxYVRUNmRUZXFZY0xkUDhaUC9udmtpTXNBSldEVTU1S3VieXhzVVVRaE1mam9XazZHbzFXcTlWQ29kQm9OQ2lLc3Rsc2Ryc2R3N0JZTExhM3Q2Zlg2OCtjT2QzYkUzWjdYQWFETVJMcGkvVDJpaUpmTEJXWGwxZHYzTGpsZERuOFBpOUo0QWV0ZjcvaUdnNnZSaUFJYmpOTUpwTk5wbExmZVdDY1JxTnh1VndhRGYyMTU5UFAvZ3U1M1U2M3k1bkw1WjFPNTlXclYvdytEMFhSRUl4SW90aG9OaEtKUWp5V1dGcGVVV3NuVGt5TUl3aGFyOWN5bVd5cFZNSngzR3ExbXMxbUZFVkRvVkF1bHl1WEt4dWJXeDZ2ViszYjl4SndoQVdnTHNVVUJVQlJ0TkZzYm01dHJhNnVBQUNJNDNndWw4dmxjcXVycTlWcTFXYXpqNDZPam8yTm5qaHhncUxvaHcvdXgrT3hWcXNGZ3VENnh1Yks2cG82NDVNazJXcTM4dmtDd3pCblRwODZlZXBFTU9oWGgvQ3YzZTQ0TkFNb01BS1hLNVZZUFBZZFZvbFRyVmx2TUV4UFQ3LzM3anMrbisrcmt3RU9ZalFBQUtCcCtvMDNyanRkenJtNWhROCsrSTNMNWJSWUxMSXNONXZOVm92Qk1JekFNZldFeE9OeHYvZmUyeFJKYld4czNibDdiMzkvZjJGaEVVSGdVQ2dVaVVRQUFFQlJOSnZMM2J2MzRNVDBOT20wdndTSEFNQ1JGc0RCWGhBSWdzbEU2dTdkKysxMjIrUHhHbzFHVVJUVDZiUmVyeHNjSEhDNVhPMDJJOHNTanVNV2k3bXZMMkt6MldWWkdoam9vMGl5MVc3djdlM3Y3OFcwT20yejJjaGtzamlPVDUrWUNvZUNDQUlmdHVBdkhIU2ZhOUdudmlDWlNPM3Q3ak1NODEydEFaNE81d0FBd3hCSmtpaUtBbC9wZUh6dXFtVFo0WEFNUzNJaFgvejFCNzlSRkVVVXBWS3A1SEE0UXFHQXgrTkZFTFJhcTF1dFZyL2Y3L1g2SVFoY1hsbVZaVGtjRG9kQ29aMmRuVmFyVmFsVVhDNlgyKzNlM3Q1ZVhsNVpXVm5WYW1tdFZzdHpQSGpVNnFFL3gxRVZ3TUZuakNCd3M5WGEyTnhhV2xveEdJeVJTSy9GWXNubGNpNlhjM0p5TWh3T2w4dmxtWmtublE3WFlWbW0zYVkxR28xR3d6QnRraVFIaDBZQVFDRkppbUZZQkVFc0Zvc2t5ZGxzRHNjeEJJR2ZacGw5bzRILzZZb1FobUdPNHplM3RyYTNkK1R2YmdHZy9xRk9wMU1xbFdxMXFpZ0tPSTVKMGpkeXZpVlp4bUFFaGhGWmxqRVU5Zm04WnJPbDJXd05EUFFORGc0NEhLNUtwY1p4SEUxVGVyMmVaVHV5SkxBc0s0cWlUcWM3Zi81Y3FWUmNXbG91RklvMFRmZjI5blE2N043ZS9xUEhNNEdnZjBDdkI1NnRCSTd1TXVCSUN1RHpsWm5oUkNLMXVycFdxOVVtSnlmNit3ZFl0cU1vd1BYcjF5NWVmS1hkYW05dWJySXNLL0JDUHAvUEYvS0tyTFRiN1dLeHVMS3k2bko1N0haN01CamdlUzZmTDBSNmUybUszTnZiaTBhM0xXYXowV2o0c3ZqZUw4dlBsQ1JwZno4K1A3K3d2Ny8zWGQyc0dza0RBQUNLb3VwcVIxRytPUERoQzUrU1dzRWttODFzUmFPOWtaNnhzVkdDSUFWQkdCb2FzcGd0UE1kbnMrbWRuUjBFZ1J1Tit2cjZtaG9KSjBsU29WQWdTZUt0dDM3VTB4UCs5YTkvSTh1SzIrMEJBTEJTcVM0c0xFNU5UUWI4QVJpR0RvYUpJNnFCSXltQUEwQVFsQ1I1WTJOelkyT0Rvc2lMRnk4b0NwQk9wWTBHL2ZuekZ4RVlXbHBhV0YvZmtDUnBlMmNubTh0SmtnU0JZTEZZTEpWS3QyNTlCc1BvNmRNbmJGYUx4V0paWDkva2ZKelJhTlJxZFd0ckc3Mjl2V2FMUlZFNmgrdWhmK0VIZkJCdkl5dEtJcEg2cDMvK0gzZnYzbE03MHYzSk53WERNSXBoSUFDQ0lJZ2dNRUVRQkVGRUlwSFhYNzhlRG9kUUZQMkdLUWVxZUZpR1VYZDQzM3p6ZFZsV2lzVWlSWkVVUlZjcWxlV1ZsUWNQSGlXVFNZMUdzN0t5bWs1blpGbFJ1OXZYYXJXN2QrK1pUTWFlbnA2TEZ5Lys0aGYvMCtWeWpveU01UFA1dTNmdnJhNnVqWTRPKzMxZW51ZC9hQ3Y0Vmh4VkFSeVlZNnZWWGx0Ykw1Y3JRME9ENFhEbzRZTkhQTStkUEhsaWIyOTNmMzgvbDhzTkRnN2E3VmFqMFVDUkZJSWdpaUtmT0RGVktCYUtoZEx1N2s0Nm5lenY2d3VId3hSRnNTeEwwL1RnNE1ES3ltb2lrUXlIZ3pBTUtjb2YwdEMrOEVwZ0dFWlJ0RmFyenk4cy91YkQzMzcwKzQ5anNmaWZmRjhXaTJWb2FHaDBkRlNqMFlBUUNJRWdpcUlVU1dpMEdvL0gweGVKbUV6R3c2Ly82bVVKQUFBSWdzUmlpYjI5R0F6RGZaRklxOVZxdFZwbXMzbGhZV0Z6WXpPVHpXSW85dDY3NzlqdE5wUEpoT0c0TE11Q0lOVHI5VUtoVUt2VlAvbmtabTl2cjgxbWRidGNoVUxlWU5CZnVIQmU3YXdSaXlVQ2Z2OFBiUWpmbGlNcEFIWENWV3QzbGtybFpESkpFTVRFeEVTajBTd1VDb0lneUxLOHRMUXN5MUpQT056WEY3SGFyQnFhd2pBVUJDRkprbVJaWmhnMmx5L3M3T3hFbzlIVjFiVnlwWXFpYUtWYXM5dXNveVBEangvUDdPenNEZzcwTzUzMmc2M01MNHY2YWpOTUtwbWFlVEozODlhbjkrN2R5MlZ6Mzd4ZXczUEFNRHcrTnZhVG4vN2svUG56QklGREVLak9CaGdLNHpoQmtBU0dvcElreXZJZnNiYVdGV1YxZlNPZHpvUkNRYVBKV0M1WDZyVzZKQ3Q3dTd1aUlIZzkza2hmSkJqd2FiVWFERU1oR0FZQlVKU2tUb2VyMVdxeFdIeGpZM05uZTZkYXFlZ05odjM5UGExV2UrTEVpWjZlY0sxV2k4Vmk0dmt6MzJzdm5EOERSMDhBenhZQUFBaEJzaVRsQzNtV1paMU9aekFZbXA5ZktKWExJQWl1clcvcWROcHo1MDRQRFE3Z09NRnhRcU5SeitaeURNTklra1RndUZhcjkzbjlrVWhrb0wvdnpwMTdzN1B6ZnIrdjFXTDBPcDNYNjNFNkhmdjcrNnRyR3c2bjQrQ1BmbUVvcUN3cjVYTDF0Ny83K09jLy83Zmw1ZVZ2cy9FUGdpQkZVV2ZPbkxwMjdXb2dFRlFVQVRqUW15ekxpaUpKa3FENkc5OWdYYTRPRUFBQWxNdVZsZVZWanVPbXB5K3hMTnRzdFhMNVFpZVJCQlQ1MVZkZm1SaWZnQkdzM1c0V2lrV1dZUlJGUVZGRW85WHI5WHFmMXhmdyszcDZ3ak16VCtibkYzRWN6K2VMQkVFT0RnNk9qNDgvZWZJa2s4bHdISWVoeUZGMC9RODRlZ0o0aGdJQ29DUXAxVXFWd0FtcjFRcUM0TjdlN3VibXBzVmlHUnNidlg3OXFzdHBneUM0VXEzTVBwbC8rT2pSNXVaV3JWWkRFTmhtczN1OTNsQW9ORFUxN3ZjRlhydDZsYVRJeGNYbFdxMW10Wm9kRHZ2Wk02Yy8rdmpHN096czlOU0VWa3NEWHhrWENvRWdobUU0am4vTGtoQVFCQm1OUnFmVHFkZHBKYkh6ZkxuOWc1WHZON00yUlZFZ0dPWTVZWDV1TVoxT3U5M3UwWkhoNlBaT09wV3VWcXQ2dmU2ZHQ5OEtoVVAxV24xeDZjSDYrbVl5bWN6bmNyVjZuU0J3bDhzOU5UVjUvdHhadjkvajhiZ0k0cnhlcC92d3Q3OVBwVklBb0NRU0NZZkRRWktVV2hzQ1ExSDFWUGlIdG9jL2tTT1RFZlljVDN2bUNkTG1WalNYeSt2MWVwcW1iOTY4V1NnVWhvZUhmdnpldTM2L2h5VEpkRHI3MFVlZi9CLy83Yi9mdXZYcHpzNk93QXZEdzhNam82Tk9oME1RaEV3Mmk2R28wK2t3bVl6SlpMTFQ2VUFRVEpKa1gxOWtmeitXVHFVMUd0cm45Mk1vZXJqeHllZUxWQU1vaWpyc2RwL1BwOWZyVzYyMkduTDhSOTJMK29Zb2lycmQ3cXV2dlRZOFBQalVwRDVuVlNBSWdzRG4valQ0WlJ0VGlxTEFFQVJCVUw1UWZQOWZmdzdEeUtsVEp6MXUxOHJLV2lLWkpFbGlkSFI0YW1veWx5L016YzBuazBtRHdXQzMyMEFJU2lRU0N3dUxXMXRiZTN0N3BWTFo3WGFaakFhOVRxZlJhdHJ0OXVMaVVxRlFzRmlzSnBNNW44L3J0TnJKeVFrMWUrYXJsMG4vbmptNk13QUFBQUFBQWdpQ0dBd0dCRUh6K1h3K245ZnBkQVA5L2VGd0NJTGdXcTArTnpmLy92cy92M1AzRHNNd0xwZnI5SmxUUC8zcFQzdDd3eUFJNXZQRnphMnRyV2dVSjNDLzMrOTJ1eFVGNkhRNitVS3hOOUl6TVQ3V2FEVHUzTDNYMzkvdjliclYvY2NYMnhRQUFFQlJaSDkvbjlmbkNZVUNMcGZ6OTcvL2VHMXRyZGxzL3JHM0FrR1FYcS9YNnJRb2lzbXk4Snk1ZjIybzVYTmxzRkFDcjVTckMvUHpzVmpzeXBVcnZiMDl5V1NLNTNrQUJDMFdTeVFTNFRoT2JhQVdEb2REd1FDdDBSUUtCYXZGWEN3VXRxTFJRcUZZTHBkdGRodEZrYjI5UFFhOWZtSjgzT1Z5TFM4dnAxSXBoOE5KMDdSR3ExR2pobzZlMVIvaVNBdEFnU0JRbzZGMFdtMkg0NHZGSXMvelE4UERnVUJRVGM2S3h4TjM3dDY3ZSsrZW10c2FEQWJlZnZ1dGMrZlAweFF1SzdMRDZVSXhkRzUyTHBGSUJQdytraUFNQmdPS0lDQUlKQktKZ2NIK2VxUCsyOTkrTkRjM3I5RlFWcXVsMCtsOG9RMUtraVJKTElGalU1TVRIby9INi9IK2ovZi85ZkhqbVVhai9rYzVCaGlHdVZ3dW85RUFJNURZT2RqQ1Y4MzZhenNoZlc3NGh5QklscFZvZFB1ejIzY2REc2ZZMkFpR29kczd1MWFydFY1dlVCUkYwMVNwVkM2WHkxYUw1ZElyRjNBQ0IwSEE2M1Zaek9iVjFkVmlzWmd2Rk5McDlHOSs4MkZmcE1mamNjdXlZalNhZzhGZ0lwR29WQ3ExV2hYRE1KMU9COE13Y01RendvNXFPTWZUalNBUU5CbU5FQXlYeStWc05xdWU1dEphRFM4SUFBRHM3TzV0Ykd5eUxLUCtDb3dnSkVGQ0VDQ0lBdGRoTzUwMnk3UUprdFJxZFpJa1Z5b1ZESVZEb1VEQTc5M1oyVk1VWUdKaW9yKy83NU9iTjFkVzFpUkpVck1ydi9CS0FBQVFCRkVVUmJQSitONTc3L3cvL3UvL3QzZmUvcEZPcC91R1pxR2FyTlZxUFhQbXROdnRCRjdJYVBubTFxV3FCY1h3L2IzWS9mc1AwNm4wbTIrK2JqSWE0L0dFS0lwRFF3TUdnNkZlYjlUckRZSWdhSnFXRmJsV3F6TnRwc04ySkZGQ1VZUWdTYlhSQWMvekd4c2JHNXRiNVhJVmdpQlJGUFY2dmNGZ1lGbTJWQ29CQUtEVGFRbUNVUDRNZlVHK1Q0NmVBQTU4VGJVVWdzVmlJUWk4V3ExbXMxbUNJR2lLaGlGWUZDVlJrb3JGb2xxblRYMTlPcDIrZC85K05wT0JRQWpEQ1FBQXREcmQ5UFJrYjA4NGw4K25NeG1TSk1NOUlhL1BDNEpBUEJZbmNQenExZGRFUWJ4NzkvN2k0aktHNFYrMjVYYzRLbGlycGMrZU8vMjNmL2MzUC8zcFQ4eG04emU1STd2ZGZ2WHExZi9yZi83ZnJseDUxV1F5L2JIZDVqNi84d1BDQ05Sc05tN2MvRFM2dlhQeTFJblJrWkZpc1pUUEYwTEJvTjN1ZERvZFBNOXRyRy9xZE5xSjhiRmdJTWdMQW9LZ0ZFWFZhdldaSjNQTHl5dHFzek5abG11MWVpYVRxOVZxRUFTREVHUXdHRFFhVGF2VnltYXpLSXBZTEJhQ0lCUkZPYUpWUVZXT3BBdWttcG9zeXdBQUdvMEdzOGtzUzFJMm13VUFBSUpBUlpFVldWYjdkbkhjSDNxb1ZDdlZwYVhsUjQ4Zk15eHJNT2dsVVFSQkFFSGd2ZjI5aGZsRlNaSmRicGZEWVpkRUtlRDNKNUpKZ2lUN0lyMW56cHllZlRKNzY5UGJkcnY5dVh6d3d6enJSeVRMc3F6VGFrK2RPcUYyM1BqMDA4K0t4ZUtYM1loYWRlZlNwVmQrL09QM1RwOCthYk5hUUJEOG96cU5QaWRJR0VaWWxyMTc5LzdDd3FMSlpIcnR0YXR0aHNsa2N6aU9SeUs5T0k3MWhFT1pUSHB4Y2NsZzBEdWRUb0lrMnExMkJTa0x2TEM5dS9mbzBlTkU0Zy9OWG1WWlpKZzIyK2tBSUtBb01vcWlzaXhYS2hXS29pWW5KNXdPQjRMQVBIK0VyUjg0b2dKUVVXY0FOYmZMWkRKV3ExVUlnaGlHNFhsQkZDVVFBR0FZaG1FSWVHWWxHbzNHWUREczd1elZhbldqMGFBMm1tNjEydlB6Q3lzcnErZk9uWE81bkFSQk1PMzJ3RUIvdVZKSnBkSm1zK21OTjY2WHkrWE56YzJQUDduNTFscy9NaHIxQVBDbGNTL3FEenVkRGtrU0owOU9kenFkZHJ0OTY5YW42aUxrUlRBTWkwUWlQLzd4ZTIrLzlTYUdZOExUbGx2ZkpNNEhlTTcxVUl1bmN4eS91Ylg5NjE5L2lPUFl4WXNYdkY3djdkdTNSVkhzNzR2WWJHWlpGajBlbDgxbSsraWpUMHJsOHVURVJDRGdBd0JnZTRjdmw2dTFhazBVSll2RlVpNlgyKzAyY05ENkNZWWxTZXAwT2d6RDFPdjFTcVhzY3JsY1RxZmRiai9jU1B5SWNvUUZBRHlyWUJzTUJpS1JIdlJqVkMzczJtZzBPaDBXZ2cwNm5VNmowUUxQQkJBT2gzLzJzNTg2SEk3RnhlV2xwV1VFUVV3bWs4VnN0bGdzZHBzdGxVb1dpNlZ3T0FTQ29FNUg5L2RGMXRZMzUrY1hyNzUyK2UyMzN2emdBK1Yzdi90SW85RmN1dlNLeldycGRCamd5NzBVQ0lJa1VVSmcrTnk1cy9sOHNkbHMzYjE3OXd0OUo0SWdwcVltSTcwOUJJR3I0KzQzRy9zL0Z3eW5uZ3VxWHNySzZ0cjc3LytjNHpvLy92RTdFK05qVzF1YjVYSmxkSFFvSEE1S2tvUWdTTEZZVHFmVG5VN0g1L09oR0JxTEowcWxjcXZWTWhxTmt4UGpWNjlkRVFTK1ZDcXFBc0J4d213MmFiVmFnUmZVQmdKcUM5cEFJQkFPaHd3Ry9aOTg1djN2aHlNcGdNTkpUNklvbWt6R3NiSFJFOVBUdi83Z2cwS2hVQ2prVzIwL0NJQWVqOGZsY2gzOFZydmRqc2ZpYW5kYmk4V3FLSXBCcng4Y0hORHB0SDZmOStjLy84WERoNCt0Vm10UFQ0OHNDVjZ2bTJVN0s2dHJDd3VMUThQRFY2OWRiVFBNNzMvL2tTQ0tyMTI1YkxkYnVRNzd0Ukg1TkVXKyt1ckZkcnZOTU16S3lvcnFqeDNlU3lWSnNxZW54MlEyQTA4TCtFQ0g3L0hMYnYvWjhLOFdibEVBQUVBUUJJU2crL2NmZmZqaDc3TFozRTkrOHQ3SXlIQ3hXSXhHdDhPaFlERGcxMmhvU1pJa1NiNTc3Lzd5eXRyZzRNRHJyNytPNCtqT3prNnoxU1pKRXNleFNyWFNhRFlxbFlyYVpSbUdZYXZWNnZQNURIcDlxOVd1MWVxcFZMcGFyVm9zbHZQbnovbjlQaGlHUkZFNVdLTWYwWTJnbzNvUWRoQ2lyQ2dLaHFFa1NVSVF0TDZ4MmVsMDlIcTl4K09oS0FyRDhXS3h1THE2eW5HYzZpR1FGT1Z5T1cwMm0xcjRyZFBwV0N5bVVDaGtkemoyOXZhU3lhU2lnSUdBSHdRVmtpQW9pbElBWUhkM0QwVXdqOGRqdDl1ajBXZ2lrZUI1M21hejBUUU5RVS9YSVFmdDE1KzdQRVdSOVFhOTJXVENDYUphcmRWcXRlZGlKODBtMDV0dnZqNDQyRTlSNUxNQXo2ODNwR2RSU1UrM2p4QUU0WGgrY1hIbGd3OStrODFtejV3NS9mcnIxK3ExeGxaMEIwV1E2ZWtwazhrSUFnREg4eHViVzcvLy9jYzh6NzMxb3pjbkppY3FsV284SGhjRXdlR3dPNTBPQUZDMnRyWWZQSGlRVHFkNFhxQW82c3laMDlldlgzYzZuZWxVWm5kMzcrN2R1ODFtODlLbFYvN2lwejkydVp5SzhvZm0yRWZVK29Haks0QURRQkNVWlltaUtKUEpWSzgxMHBtTUtJcE9wMHVSRlpQSkNJSkFKcFBONS9NOHo5TTBIWWxFcmwxN3pXQXc4RHpmWVR1eGVLTFJhR2kwMm9BL1lERG9WbGZYRXZHRVhxZkZjYXpUNlNBSVlqS2JHbzFHT3AwR0ZLQ3Z2OTltczI1c2JtNXNiSUFnYkxjN1NKTDR3cE9xZzJOUjFlc3hHZzJoWUVDbjFURXMwMnkyMUQwVFJWRlFGUFg1L2E5ZnZ4b0tCWEVNRTBVSkJLSERvUTh2SHZRK2U4K0RuNE5xcjVDTnphMS8vZGQveTJReVo4NmMrY3UvL0ZtbjAxbFlYQkpGY1hKeVFtOHdOSnJOZXIyV3krVi8vY0dIMld4MmVtcnFSejk2UXhTRk8zZnVibTFGTlJxTjBhRDNlVDFXcTdYZGF0MjljeStYeTh1eTdIYTcvL0l2LzJKa1pJVHI4TnM3dSt2cjYxdWJXK0Z3K0QvOXAzOFlIaDVBRUVRVVJRajZndFB4bzhXUkZ3Qnd5SjN3KzMydFZydFVLZ21DZ0JNRUJNRmFyZFpxdGU3dDdSVUtoYjYrdnYvd0gvNnl0NmRuZlgyelhxc1BEdmJyZERxS3BFd21vOXR0MXhzTXlXUnlZM01yRm90enZMQzd1NS9PWkFrY2ovVDJOSnJOV0R6T3N1ekl5S2pQNjYyVXkzZnYzbSsxbWxhTDJXYXp3VENraHQxREVQUmN4YWlEYlZPU0pIc2p2ZjM5QTA2bkV3UkJOZEhlNC9GY3ZuenA2clhYckJiTGdTZURJSjlidUQ5bldCQUVRWkRhb1F1Q1lCakZzRWFqZWZ2MjNYLzVsL2RicmZhNzc3NTkvZnExVHFkejkrNDlIRU9IaHdkTkp1UGptWm1scGFXdDZNN0s2dXJ0MjNkQ29kQ3JyNzdxOC9sWmhxMlVLeWFUYVdod1FCU2xWQ3BOVWxUL3dNREs2bG9pa2JCWUxELzYwWSt1WDc4dWlsSThua2lsVXZQejg0R0EvOGZ2dmZQS3hmTW9pankzV0QrNkFqaVNhNEFYVVJRRlFTQy8zenZRMzVkS3BlUHh1RmFyRlFUQlpyTjVQTjZmL3ZRbkJFRlFGS1hXd0lySDRpaUd1dHd1ZnlERXNtMlN3RmlXWFYxZHpXU3lJQWhTTkkzanVORm9iRFRxRHg4OU9uM3E1RUIvSDAxUnU3dDdPSWFId3FGMzMzdFhvOVV1TEN4V0twVUxGODZQajQraUtLcklFZ0NBR0lZU0JBRUFpaWlLa3ZRMFNSS0dZVVVCWUZFSytIMWF6ZXRUa3hQcGRMcGNxZWgwdXVHaFFaZlRxVm8wRENPdFZvdm5lUmlHS1lva0NFS1NKRFVsRFFBQURNTWdFQkpFZ1dFWldaSVJCRkVVSUp2TjNiaDVhMmxwaVNMSjEzOThmV3hzdEZGdnJLeXVhYldhNGFGQkNBTHYzWHVReitkdE5oc0VRWlZLMVdnMGxjdmxyYTJ0Z045TDArVFkrQWlDWURpT1AzendNSjVNZ2pDczAra2dDSXhFSXNQRHd4Y3ZYbXcyVy9WNlBaMU9xM3Vqd1dDZ3I3OVBvNkc1ejdlUU9ycldEeHhwQVh5K0dBa29TWEltbTVNVnhXQXdjQnlYVHFjRlFXQVl4bVF5OWZYMWNSeFhyemNFWGxBRE5wUEo1S2VmZmpZeFB1bnhPQTBHWGJsU2ZmejRTYlZhQ3dhRGtkNWVVUlJKa2lBSWJIOHZkdS8rZzdIUlVhUFJZTE5aRThrNGpNQ0JnUCt0dDk0RVFUQzZGZjNkNzM2L3RiV0ZvZ2lPNHdhOXdXS3g2UFE2bTlXaTAyblZrMk9lNXd1RjR0NWVyRkFzVWlScE1CZ01Cb1BINDlGcXRiU0dJZ2xNTGR4WnFWUXptVnlwWEs3WDZ6ekhreVFaQ1BvOEhyZFdvMUdubDJhelZTNVhpcVZTdlZZdmxjc3N5MHFTVkN5VzRyRzQwV1M2L09xbDZlbkpZckcwdmJNckNud3dFR1pZZGp1NkU0MXVEd3oyYXpXYVJxTnBNT2hQblRxeHNySzZ2cjQrUERRd1BESmlzNUg1ZkhGbFplM2hvMGNnQ0lFZ1dLbFVYUzYzMiswSmg4TVlodTN1N2pXYnpXS3hVQ3dXWFM0WGdxTFZhclhWYXFFb3FqcGpSOW55bi9JeXVFQUFBQ0FJd3ZQQ3c0ZVA0dkdVMmplcDNXNTNPcDFHbzFFdWx6bU9zOXNkRG9jRHd6Qzd6UzVKMGxaMDY5TlBQNjNWYWdnTUVTVFZhclh2M1h0Z05CcFBucHdPQkFMN3NSakRNRTZIdytQeGZQclpuWGdpUVZGa01PRG5PRDZaU2pFTUV3ajRSMFpHSUJqZTNOeTZlZlBXelp1MzV1WVdVdWxNbzlrcUZJb2Rqc013WEtPaElRaks1WXVQSHM3ODluY2ZMU3dzcHRPWlFxR1F6eGM2Yk1mdXNGbk1ablVjclZicnE2dnJEeDQraXNXUzYrdnJpNHRMRzV0YnRWcmRZRENZeldZWWhscXQxc1pHZEg1aGNXbHBaV2JteVc5Lys3dVBQLzVrZVhtbDNXNU5UMCs5L2M3Ykl5T2ppV1JpWldWRkVJUndPS1RJOHUzYmQ5ZlcxMTF1NThtVEovWmpzV1F5NWZGNGhvZUdXcTFXcDlNeEdJeDZ2VEdSU055NGNlTlh2L3AxTkxvOU5qYmEyeHRwdFZwcUh4MmU1M2QyZG5LNVhLUFI2SFE2R0liMTlQUTBtODFPcCtOdzJQVjZIUVJCQjJWSmovUU04SklJQUlaaGhtR1hsMWRydFJxS29pYVR5ZVB4WkxQWjdlM3RiRGE3dTd0YktwWGE3YllnQ0IyT2N6b2RYcTlYVVlEbDVkVW5UMlkzTjZPVlNnVUV3YW5KeWFtcGFaL2ZaellabzlIdGFyMFc4UHZhRE1PeVhLbFVydGNia1VndlJaSDVmR0YvUDJZMm00YUhoL3Y2SWlpS0poTEo3ZTF0bnVlRHdZRFA1OXZmMzArbjB3YURRYXZSN3NmaTJXeE9wOU00blU0UWhDd1djekFZV0ZsWjYzUll2VTZyNXQzZnYvOXdaV1dOcEVpNzNTNElndEZvR0I0ZUJCU0YxbWlNUmlNQUFKL2V1cjIwdkNMTGlsYWp1WC8vL3VycUtvS2dGeTZjLy91Ly83dXIxNjdTRkxXNnVyS3h2dVZ5dTF3dVJ6YWJXMS9meW1TekxxZHJkR3cwbGNxazB4bWZ6M1AxNm1Xbnk0M0FxQ3pMaFdKeDV2SE1CeDk4c0xTMGJEUWEzM3pqamI1SXBObHFiRzl2NTNLNXJhMnRsWldWblowZE5iUFo2L1VPRGc2eUxNdXlIWklrVFdhejNXR0RZVmlTWHdZQkhHRVg2RGxBRUlBZ1NKS2tkcnZWYURSd0hLY295dTEyMTJxMWJEYWJUcWZWcm5nWWhwck5ab3ZGUWxHVXkrVmtHRGFaVE83czdNaXlMUEM4eVd3YUh4OExoWHZXMWpjTCtYeWhVSEk1WFJxTmh1ZDVDSVkyTnJlR0JnZk1KdE5XZEdkK2ZpRVE4SHM4bnAvOTdLZVIzcDZQUHZwa2ZXTWpIays4ZHVXeVFhOUxKRk16TTNNMm04M244K2gxT2dSRlJWRzZjZU1HQkVHaFVMRFJhQlNMeGYzOWhNOGZiclVheVZRYXhkQlRwNlozZDJObXM4bnI5WTZOampZYWRiMWVoNkxJZml5K3VSWHQ3ZWt4bTAxemMvTU15Nzd5eXNWTGx5NmRPM2ZPNDNZVlM2WDkvVmlqMGVqcjczVTRiTWxrYW05djMrLzN3UkNvTitnMU5MMjh2R0l3NlB2Nit5bEtXOGpubzl0YjkrL2Z6K2R6QkVHU0pLbnVGeTh2TDkvNjlGYXhXR28ybXp6UGN4eUhZWmpWYWxVN0tuQWN0N2UzcHlpS0tFa0FBQnplcUhvSmZLQ1hSQURxcnFMVGFVK2wwdVZ5UlJSRnRkSlRiMjl2THBjREFJQWtTUlJGVUJTclZxdWJtMXNBc0dVeUdRMEdBNElnTE12V2FqV080eGlHcWRWcnRXcmw5Smt6SG8rNzFXcm04bm1udzRHZ3NPcmxQM2p3T0JnSURJOE1JU2k2c2JFWmo4Y1poZzBFL09mUG4vTjR2QjkvY25OOWJaVmgyWUgrZmxrQlpoN1A3UFpIQmdjSFhDNlBJSWp4ZUZ4UkZJb2luVTVIdlY2Zm01dmYyNDlackd2VlNybGFyYnJkcnA1d3VGS3Bsa29sUlFITUZvdlg1NFVnWUR1NlBUKzNnQ0R3OFBDZ0lBaUZZbkY2ZXVyS2xTc25Ua3hERUpST1orS0pCTWR4UHA5blpHU29WQ3psOHdVQUFDSzlQZW8ycFNSTDdYWjdvTC9mYWpadGJLemZ2SG56L3IwSCs3R1lKRWw2dlY0UUJQV1FybEFvc0N4TDBaVFZZc1Z4ck5QaE1BenorWHpEdzhNd0RCY0toWFE2emZPODNtRFE2M1Ztc3dsVWdHOFlzdkh2bjVkRUFMSXNveWdTaVVTMnQzZjM5aVNDSUFLQmdOL3ZoeEdFcGlrUUFKd3VSeUFRd0RBc2s4bHNibXl1cmEvdjd1NG1FZ2tJZ2d3R2cxNnZ4ekFzbFVyRjQvSDkvUmlHb1JTdG9XbTZXcTBpQ0N4TEVxWFR1dHd1VWJ5WHl4Y2lmWkdlbnJESlpGaGYzMHpFVTVsTXRyKy9OeHp1ZVZXVUdLYVZTV2ZHeDhmdGRsdWxXcmw3N3o0SWdxRndxRkt1ZkhMalZyMWU3KzN0b1dtNjNXWWFqVll1VjZoV3E2SW81bko1bzlIQWNWdzRGTjVZMzFwY1hOUnE2WUgrUGxFU244ek96Yzh2bkRneGFUQWE5L2IyT2gzdSt2WFhwcWFtZVY1WVhWMHBsY3BtczNsZ0lCTHcrekNjWEZ4Y3JsUnFUcWZUWU5CUkpObHN0VGlPUnhDRW9xbE1KdnVMWC96UFgvelBYN2JiYmJQWnJOZnJPNTFPS3BWcXQ5c0VRZmg4M3JObnp3d09EZ2FEQWExR204dmw0b21FMmhGVmtpU05Sb01neU9MaW9zdmw5UHQ5TnB0VkFSVGxtelZRKy9mUHl5QUFOVElVQkVHWHl4VUtoZXIxaHBvWUFNTndzVkRJNWZLblRwOFlIaDZ5V0t5S0lvdWljdlcxSytWeU9abE03ZXpzTGl3c0xxK3M3Ty92Z3lDbzErczVqbnZ5NU1uLzhkL29WMTU1aGFacE5lT0pvaWlhMWlpeTBtdzIyNjJXd1BNUUJHbzFtc21KTWEvWHM3Y1gyOXJhenVjSytYeUI1M2lYMjRYamFLdlZyRlFxOC9QTmREcHJNcGw0bmx2ZjJMaDI5Ylh4c1ZHVzdjek1QSG40NkxISlpMSll6TlZxZFdWbHBWYXJqWXlNakl5TTlmVDJmUFRSNy8vTGYvbXY0K05qRE1QczdlMjFXdTFpc2N4eGdvYlc2YlRhL2IwWXh3a0lna2lTTkQ0KzZuWTVhWnBVRkVCUndGYXJYYS9YYUpxRUlKaW1hYmJUNGJnT2lxTDVmRDRhamY3TC8zaGZFQVNTSk92MWVpcVZNaGdNZzRPRG82T2p3ME9Ed2FEZjZYUnF0VG9FeFdCSWtSVjVmWDNqNGNQSHNWaE1xOVhxOWZwZ01GZ3NGdnY2K2tLaElFbVNnc0FmUFBrZitzUC90aHh0QVR5WG80Z2lxTmxzc2xqTUhNZVRKQ0ZKRXROdVF4QVlEb2NjRGpjSWdxMVduV1U3T3EzV2JEWjZQTzZob2NGejU4N3N4MklySzJ1enMzTTdPN3ZWYXJYVDZkeTdkeDhBd01IQkFiUEpCTU9JVHFjakNDS2Z6Ky92NzNNY1o3ZmJ6dW5Qa1NTRkV6S0tvaGlHZ1NENDZQRk1JcEcwV2l4V3EyVjJkaTRhM2Vudjd5Y0lzbFFxYlc1dVNySTgwTjkvOHNSSkNFYnUzTDc3NU1tYzIrVzZjdVhWMGRHUmVxME9nZURHNXNhdmZ2VnJ1OTArTVRGV3ExVSsrT0REalkxTkhNZjlmci9GWWlrVUNvOGVQWEk2SFgzOWZmZnZQNGduVTVNVDQ1TVQ0eTZYWGFQUklDZ3FDR0lpSHB1Ym0xdGRYUk5GVVJRbHJVN0hDNElvQ0F6RDNMLy9ZR2xwS1I2UFV4UWx5N0xQNTcxMjdlcUo2YWx3VDlqaGNKaE1SZzFOQVNEWWJyT05SdDFxTVdLNDN1SHdPQnp4YkRaSEVMalJhQUFBUmFmVFdjeG1uVmI3TFBydUNGZURPOHlSM3dYNmZETlFRQklsdHRPcDFXb013NGlDSUNzeWdpQjZ2UjdIc1hLNXRMS3l1ck85cmRWcTFNeERnOEZnc1ZvMHRFYVdGWTdqcXRWcXZWN25PSzVXcTdWYUxaS2srdnY2ZXlOaGs4bllicmZXMWpZMk5qWXFsYXE2a3lqTE1vb2d0SVltQ0twYXJjMCttY3RtczFhcmxTQ0kxZFcxVENacnNWamNiamNNSXl6Ym9TbnFuWGZlQ2dTQ3F5dXIvK1A5OTdlMm9oY3VuSC96elRmNytnWmNMa2U5MFZoZVhsbGNYTFJhTFgyUlhxdlZ5ckpzdFZwek9wMnF5eFNQeDB1bGtpVEpNQXh2Ykd5eURPdjMrNmFuSjNWNkhjL3htVXgyZVdYbDdwMTdzN056MVZwTnJ6ZDRQRzZqMFdBdzZBVkJtSnVmZi9EZzRkcmFPc3N5QkVIWWJMYisvdjZUSjA5T1RJNFBEUTI2WEU0Q3h5RUliTlNiYTJzYkN3c0xCRUVvZ0ZJcWxRcUZBZ2lDQXM4M20wMkdZUWlDNk92dmRUanN6d1UrZFFYdzc0S0RxWUNpU0JpR3E5VmFJcEVRQlZHcjBaQWttY3ZsT1k2THhXTDM3dDB2NUl2aGNNamxjbktkRHMvek96dDdDNHRMZTN2N0JJRWJESHFDSURpT1U3c2pXc3ptVjE2NU9EbzJBb0hnN3Q3K3hrWlVVUlNXWmRWeVVjMW1DOE13aWlRbFNjcm5DODFtazZZcHZWNVhyOWQ1WGhCRmtXVlppOFdNWVpoV3F3a0ZBMVBUMDZsVStxT1BQMzc4K0RHQ0lJRkF3R0czWVNoY0tCU2kwV2cwdXAzTDVTUlIwdW4xTHFmTGFyT1Z5eFdYeTBtU1pES1phalliS0lwQklDUUl2RmFyTlptTVRvZkQ0YkNMa3BSSXBPN2RlL0RoaDcrYmVUTExjWnpWYWpXYkxRQUF1RjFPbjg4ckN1S2R1M2RuWm1hS3hhTEZZdW5yNjV1WW1BZ0dBZ0FJNUxJNVdaSUlIRWNRQkFTaFZxczlPN2R3NjlhbkdJcDFPbXd1bHlzV3kyYXpwVkFvcHRNWkJJR0hoNGQ2ZXNKcVZDbndMTkRqcUZzL2NOUmRJT0NGYWdnd0RIdTlibHBEZTczdXJhMXRobVdkQm9OV3EyczAydHZidTRWQzhkVEphWU5lRDBJUUFJTDcrN0ZidDI2M1d1Mmh3UUdEUWQ5b05QdjYrdnI2K2o3NjZQZDdlL3NZamxrc0poaUM0dkZrTGxmVWFEUnFTS25KWk5KbzZFdzY4NnRmZmZEa3lkem82R2hmcE9jLy9JZWZNZ3dyQ0x4R285bmJqNjJ0YmJBczI5Y1hXVmhZaEdGb2RIUjBaMmZ2enAwNytYeisvUG56N1hiNzd0Mjc4M056d3lQRDJXdzJuYzdvOWZwMzNubW4zVzdmdm4ybjJXeFBUVTM2L2I1YXJhYlQ2U1lueHRydDFzVDQrTWpJa0tMSWtpUlJOQTFCVUQ1Zm1KdGIyTm5aYlRhYk1BS2J6YVoybTRGaEdNY3hobUVUeVpST3A5ZnBEVmFyVmQzVGZQWFZTMmZPbkhFNG5BYURIb0hodGJYMU8zZnVsMHJsSzFkZWhTRllwOU02N0RhS29qYTNvcklDMk8wMmw5T1p6K2RoR0I0Ykd4a2VIblk2YkFTQi83SHBtdi8rZVJsbWdPZWlzaUFJb21qS1lySG90RnBKa2tybGNxZlRxVllxSE1kNVBPN3o1OCs1M1M0VVFlcjF4cDA3OTBSUjZ1L3Y5M2pjS3l1cks2dHJzWGdzbTgwbWt5bFpsaWNuSjY5ZGZVMldsWEtsbXN2bDQvRllQcC9uZWNGcU5ROFBEWTZPamhZS3hmc1BIdHkvZjM5N2U2ZGVhNkFZYWpRYTlUcmR6dmFlSUFyRHcwTTh6NWVLWmJYYzFZT0hEd3FGQWszVEdvMm0zVzYzV2kwRWhuRWNiN2NaZFcxcXNWalV5a0lzeTVJa2FiZmJzOWtjQkFLRGcvM05aaE5CRUlQUllMR1k4L25peXVyYXh4L2YrTVV2Zm5uLy9rTVVSU2NuSjBkSFI3UFpyQ3dya2lTMVdpMm55NlhSYUxRNkxVMlQ2VlJtZVdXbFZxc1pESHBSbE5RT0lDYVRhV0NndjFhclY2cFZXa05iTENhQ3dGRVVKVWlpMld5S29zanpBdGZwb0JnNk5OZy9PamJpZE5vSkhIdnVhYjhjTWpqeU04QnpIQVJSNnJUYTN0NHdTUkxiTzN1ZERrZlRaQ0RnOVhnOW9WQ1FKSEJCRUJ1TjV0N2VmaUFRTUJvTjJWdytGay93UElkam1LTElIYlpEa3BUTmF0WHI5YUlrU2FKVUtwVlNxVlE0SEdxMTJnZ01Jd2dLdzNDajBkamEyaW9VQ3ZWNm85UHAxT3IxV0N5T0lNak96bTR3RUFpSGc3ZHYzNFVSbUNUSlZEcGRLQlI2ZW5wd0hOdmFpaElFY2ZueXF5Nm5reVFKUVJTcjFXb2lrYXpWYWlNand3Nkh2VnF0Yld4c1hMaHdYdlZNZUY3dyszeUxTOHZ4ZU1JZjhLWFQyVXdtdmJhK3ZyaXdXSy9YS1lxVVpSbEZNUVJCdlY0dkJFR2xVakdaU05odFZneEZFUmh5T3AxYWpVYVNKRUVRSVFpRVliQmNMbTN2N1BnRGZvUFJzTGUzdjd1NzF4ZnBKUWpRWnJlZU9YTktyOWZYYTNWRlVRaVNzTnVzNFhCUWJUZ2lTV3J5MTh0ZzlJZDVTUVR3WEwwR1daWTdIUmFHWWIvZjUzUTZhL1VHQUNnMFRkRVVwUmJIVlJSWkZFV0JGd3FGWXIzZXpPZnpOcHRsWW1KTXE5VXRMaTdtYzRWbXEwVnJOQ1JKQWlCUUtCYlcxdFliamNhMWExZXIxZHJxNnRyZWZteDVaZlhKa3llTlJzUG44MTI1Y3RuajhiQXN1N0t5bXN2bElRZ0tCUHlLckpSS1pZSWdHSlpKcGRNYWpYWjRlS2pWYkMwdnJ3d085bDkrOVZJNEhGSUFCUURBVnJOMS8vNkRUeis5RGNQdzhQQndPcDE1OU9oeExwZFhGTG5UNlNSVGFhdkZVaTZWMWpjMjQ0bUVYcThQQkFJV2l3VkYwTnUzUDl2YzNDUkpzcSt2SDBYUnNiRlJxOVd5c3JMNndRZS9zZGxzWjgrY1JsRk1wOU5wdEZxWHkzWDY5S21ycjEwMm1reWJtMXVMaTB1ZmZYYTcwV2h3SE1keG5PcFpnUUJnTVp2T25UMWRyemNrU2FKcGlxWXBSVkVPY3VSZmp2am41M2hKQlBBY0I3SDRraVFoQ0d3eFB5MHByaTdnWkZuZEd0THA5Zm9uTXpPMWVzUG44NzUyNWRXUjRWRzlRZTl5dVJBRStlejJIUXpEWkVWaDJ1eWpSek96czArQ3dZREZZZ3FIUXhBRTNidi9vRjZ2RjR0RmdzQXZYcnp3RC8vd0R5Nm5zOU5oUytYaXdzTHk2dW9xeTNLRlFxbFdxOU8wMk9sdzFXclY2WFFXQ29WY0xtY3c2SzVjdnVUMXVnV0JreVFaQUFCYVE0K05qM1c0enVQSHN5YVRHUUFVUlpIeitYeTczUlpGb1Z3cVlTaEthelNuVDUrNmZ2MDFzOG1zMWVyYkRPUHorVFkzTjFLcFREYWI3ZTN0OWZ2OUV4TVRORTF0Ykd6dTd1NCtmUGhnZkh6c3pKblRvaVI2dlo3aDRhSC85Si8rd1dHM2tTU05JRmdzRnI5ejUwNmhVQmdjSExoeStSS0tvbXAycFNSSkVBUVpqZnJEait1bHNmVXY1T1VSd09HRUxQVjc0RmtqR1RYWFZ1MnRBb0tnQWdDeW9tZzBtdlBuejdiYXJjZVBaNkxSNks5Ly9jSGUvdjdBd0lEYjdacWNuRWdra2dBQTVQUEZlRHl4dHJhMnU3c3JTZExEaDQ5ZmVlVVZzOW1Nb2Fnc3k1SWtkVHBjb1ZEYzNOeE1KWk9OUnFQZGJwWEwxV3ExQ2tIdzlvNHBsVXBiTEdhQ0lLclZxbDZ2YjdmYmxVcVpwbW1qeVl3Z2FLZkRxczBIQUVYUjY3UldpNlZTS2FkU0tRekRHbzFHcFZJcGw4dUNJQ0FJMm1ZWXRmdjMxdFkyQ080WWpTWUFBQktKT01Pd2tpUktrZ1JCb0Y2dlIxRTBIbzgvZVBDZ1hxOXZiVVVYRjVmOC9rQ3hXTExiN1gxOUVadk51cmtWVGFlekt5dXJqeDQ5YWphYmdVRGcxTW1UdmIwOWFwK1JnMUhqNElzWHQvbGZQakc4UEFJNFFEVng5U3RWQXdlVm13NCtQelYwWW5oNEVJWWhpOW04c3JwYXFWWmkrekdUMGVpdzIreDJ1OGxrTEJSS0t5dXJPenU3NlhTYTQ3aGtNdm4rK3o5dk5sdDZ2WUZwdDl2dHRpUkpETVBzN096Y3V2VXBUZE5jcDhQeFBNTXd1enU3R3EyR1laaFliTDllcnhtTlJsbVd0N2UzTVF4akdJYWlXc1ZDUWF1aGNZSlVMd3hCa1ZhcG5VcWxhN1dhR3AxUktwVU1Cc1ArL2o3THNpekxNZ3lUeTJWSmt1STRYbEZrblU0dlNhSmE3RnJ0QlYrcjFTdVY4cDA3ZHhZWEYrL2ZmNkNHOTJ4c2JFUWlrZDNkUFlxaVhDNFhCTUdOUm10dmJ6K2RUbXUxbXBHUm9WT25UazJNajVtTUJ2bFFkaTl3cU9uM1MyLzl3RXNwQU9CWm1yb2Fxbkw0cEV3NXlLaFZGQVVBU0pLWVBqSFYwOXNUaThWVHFUUkprajZ2eDI2M3dqQ2kwK3FpMFoxNzkrNFZpMFcxVWhyRE1EZHYzc3hrTXNGZ0VBQ0FWQ29weTVMSlpESWFqUnpIR1F3R2lxTHE5VVlpa1V3a0U3SXMxK3YxWnJPcG5vNVpyZFpNSnFPK2ttR1lUL3Y2RkFCMHVad0FvSUNBMG15MkZwZVdidHk4bGNsa1c2MDJBQUMxV2czRHNKMmRuVTZudzNGY0twVmlHTWJ0ZHJ2ZGJyWGJjYTFXQndEQVpyUFZhalYxTGQ1b05KTEpaRFFhVmVzV3NpeTd2Ny8vNU1tVFZDbzFNakprc1pnSWd1anI2MFVRT0JRSzBEVFZFdzdaSFhZY3d3NlhkSCt4OU4xTDBBcjdxM2s1QlFBY3podi84azlPa21SWmxyVWFlbmhvc0wrL0h3UkJDQVFnRUVCUU5CRDBMNitzUEhqd3NOVnFWYXZWWjYrWG90Rm9MQmFESUlqbitZR0JnYXRYcjE2OGVJR2lhSlBKeURETXlzcHFwVkx4K2Z6dGRrc1VKUnpIczlsY3BWSXBGSXBxWUkvYW9hTmVyNitzckU1T1Rwak5Sa0VRdHJkMzc5MjcvK1RKRTFHVUVBU21hWnFtNlhRNnJiWnE1RGhPcTlXYVRDYVh5K1YydTA2ZlBtMjFXSGhCTEJaTHFWVGlndzkrTXpNek16czdpNktvR3Ntc1hxb2F3d3dBQUUzVERydmQ2WEFBZ0d3eG05UUVBeEFFWUVndGFmcTVoZ1pmWGZEcnBlU2xGY0FYOGx6c0VQaXN5eWNNUXdpQ0FBQWd5NUphM3JDbkp6dzhQRFEvdnhDTlJ0VmE1K3J2OGp6UDh6eUdZWDE5a2YvNEgvL3kwaXV2YUhWNmtpREw1ZkxPem00bWt4a2ZHN2w0NFJ4TzRJcWlNQXlUVG1maXNYZ3FuYW5YYXhpR1ZTcVYvZjM5ZXIzT2MxeUhaVW9sQ1FCQWp1c3dETk5zdGh3T3U4UGhVQ3NRRGc0TytQMStyOGRqTnBzUkZKVWxxZGxxMWV1TjVlV1ZpWWx4Tlk0L0VQQWFEWHF0bHY3MXIzOVRyOWVCUTVZcUNFSStueWNJNHMwMzM0eEVJbnE5VGhKRkVBVFZoaTRLb0NpeXVodjJNaHYzTitGNENVQUYvTHhmcEM1bkQ3NEZBRUNTSkl2Wk5EMDFtVXltYXJXYTZvVWYvaFdyMWZyV1cyK2RPM3ZXYXJVeUROdHFOUmFYRnBQSmxNdmxtSjZhOUhnOU5FMERDc0N3N1dhemxVbG4xOVkzbHBhV3pXWnpvOUY0K1BCQnZkNncyYXk5a1FoRlVUQUVLWXFpMSt0c051dVZLNWV0VnBzZ0NEaU9uVGw5SmhEMG0wMUdqWWJHTUZ6ZytYeXh1TFcxUFQ4L3Y3eThMSXBpTUJnVWVINThmSnpqdUhRcU16czMxK2wwRGk0U2hoR3oyVHc4UEh6NTFVdUJnRTh0NzZ6dTh4emN4WE9oRE1kVENjZFJBTUNoMm5JSDN4Nyt2NHFpQUlBU0RBVisrdE1md3pEOHlTYzNvdEVveTdLQW9uQThqK1A0d01EQWE2OWRBU0VvazgzcWRMcG9kQ3NhamJwY3JuZmZmZHRrTWdHQW9uYkoxdXQxUnFNeEdBd09EZzVvTlJvSWhnVkJSRkhreG8yYnNxdzRITTZCZ1FHbTNZcHViNE1nR0FxRnJsNjlxaHJ4Mk9qSXdPQVFqcU95SkNpS3JDZ0FUbUNoVU5EcGRGSVVjZVBHemJVMU9SRHdsc29sclZZYkR2ZTg4ZVliZS92N3BWSUp4M0VJZ2xBRXNUc2NwMCtmZnV1dE44K2NPYW5SYUFSQmVERjgvM0NCdmVOcC9jQ3hGUUR3bFFPZXVpMElnYURmNS9tN3YvdnIwNmRQcnE5dnhtT3hWcnUxdng5VEZHQnljb0lraUhxanFkVnF0QnA2ZVhuVlpES2ZQSG5TWkRJTFBNY3dqS0lBQklrakNDSUtJZ3lMSkltUGpZMDhlalJUcVZhZFRwZmY3OS9ZM0x4Mzc1NU9wOW5jMkpwOU1pZkx5dERRVUtWUzRUZ3VGQXowOWZXQ2dNaDFoSU5Xc0FBQTREaUc0L2owMU9UV1ZqU2R6dXp2N1lkQ29WUXF3L1BDMk9qbzBOQ1FMRXRPcDBPdjA5c2RqcjYrdm9IK1BxL1hqZU9ZTEV0Zi9SQ09yZlVEeDFrQUIzeEZDM2dZaG0xV3ExNm5pL1QyTkJwTlFaU2ZQSG1TVHFmTVprdWxXb1VnV0t1aEZVV3VWQ291bDh2bGNpSUlBZ0xBZml5UmlDZFFESjJlbmlRSVhDMTM3dlY2b3RHZGJEWXJpSkxiN1c0Mlc5bHNibVptTmg2UFF6RGtkcnNwaWtxbDBzR2dQeER3a3hUSmRUb1FDSW1TbE12bFoyZm53K0ZnWDE4dkJNRWFyY0ZzdGlZU3lYUW1NemsxbWM1a202Mm1ScU1KQmdOOWtkNnA2U21UMFVUUnBGNm5vMmthaHFFRG4rY0w3N2RMVndDZjQ4V1FDaEJVU0pLZ2Fjcmxjb0VRMm02M1pWa1NSYWxlcit2MUJnaUNPSTZEWWJqUmFGYXJGWS9ib1FCQVBwK2ZlZkpFa3VSd09PaHlPZFgzcEduYTVYTHU3TzZtOTJJVVNScU5ScFpsUC83NEV4aUdueFd1cW5RNm5OMW1jN3Rkc2lRcENvQmdTTFBkMnRqY3V2WHBaN0lpQndJK2tpVGJyVmFqMGVCNUFZSmcxYmc1anBla3BsYXJpMFI2SjhiSHRUcURvZ2l5SkVtUzlHSkQrYTcxUDBkWEFNL3ozQklaQUFCQkVGUXZHY2RsRElVVldhblY2Z2lDNERqUmFyVlJGTFZaYmZsY2ZtRmhTYS9UeW9xU3krYlNtUXpMc0tWaXlXYTFJZ2dpU1NJQUtDYXpVUzFZQkFLQXkrM2EzOSsvZCs5ZVgxK2YyNjFtcTdWTUpwUEpaTkpvTkpJa0FZQ2l0dGpZMzQvbGNybGtNcGxNcGxxdGRxRlFTaVRpRUFUWmJQWkt1ZGJwZEhpK1U2L1hZUmhHRUZTV1JhN1RPaHl5Lzl5dC9kQlA5OThkWFFGOEFjL05BNGVPU0dXSHcyNHlHYmVpMnh6SDBUVGRabGdBWUVkR2g2TmIyN3U3ZTRWQ0FjTXdTWktOQnFOV28xSGJCeDM4TmtrU0ZFVW9pc3gyV0FpQ0ZFVnBOQnJBMDZwZWZLZlRJUWljSkFrRWdaK04zSXJhdWRycjlURk01LzZEeHp6UDEydDFpcWJDNFJDT1k2MTJpMkhZWXFGWUtwZlZWcWMwVFgvaGVoZm9XditYMEJYQUYvUGN3dUJ3TDRMZTNwNTRJalU3Tzhjd3pPblRSQ2dZYkxWYU5ydE5iOUNMb2dpQ1VLUFJxTmZyRE1Od1BBOEE2dThDaWdKQUVBU0FvQ2c5elNtQllSZ0VRUXpERUFUaE9FNWRLa0N3V21GWFVSUUZBQ0ZCRU92MWVxR1ExK20wT0U3Z0dLYlZhRkFNb3lnYUFFQUVRWGQzZDVkWFZpMFd5OWpvaU12bGZLNVVmOWZvdjVhdUFMNmVnNDFDV1ZaUUJQSDV2S2RPVHRmcnRXcTFsazVubkU0blNaSWdDSFk2SGE3RENxS3M5bEhzZE5pRDZnbnEyMGlpekhPOEtJZ0VUa0FRSk11eUtJcXFmNldXOU9JNFRoVEVQOVNYQmdCSmtwck5kcUZRc052dGlxS1FCRUVRQkFRakZFV2hLQktQeDh2bGlzVnNQakU5T1RJeXJOTnBEeTk1dTliL1RlZ0s0SThBQkVGQkZDbUtuSmdZc3p2c0R4NDh6R1N5bTV1YmtVaEVOZnAydXkwSVlybGNCZ0RBWkRMaE9LRTJGQU1BQllUQU5zTTBHaTFKa21pYVZzK0oyKzEyb1ZEZ2VSNUJFTlVqYXJaYWdpQ3FlcEJsR1VWUWcwR3YxK3NZaHNsa01oUkZxWW50R0lheExMdTh2T0owT2ljbngwZEhCZ21DVkJSWkRlcjhvWi9UVWFJcmdEOE85ZVFZaGlHLzMyc3dHSmFYVjJkbjUzSzV2RWFqaFdGSU5YY1VSU09SeU9EZ1FDZ1lRRkgwWUN1bVVDamtjbGxabGpVYWpkcHlpK2Y1ZERwZHI5ZHROaHRCRU5WcUxaZk5OWnROazhrb1NaSWdDRmFyNWRLbGk1SWsxZXNOUlZFa1NRWUFzRmFySlpQSmRyc1ZDZ1ZQblR6aEQvaEJRSG5hdEwxci9YOGtYUUg4MFR3MU1rVXhHSFNqSTRNNm5TYVR5YldhclE3SFFSQUl3enEveit2eHVIdDZRanFkVnBZbENJSWdHS2xVcXRIb2RqYWJveWhhcjllclZlaEVVY3puODlsc1ZpMmJYaXFWTnJlaS9rRGc3Tm5UaUN4TGtvUmhhRTg0UkJERS9uNjhXQ3dKUEErQUFJN2pKcFBSYURUMGhJTjJ1dzJCNFJlYjFYV1Y4QTNwQ3VBYjhkeStrTG9naGlESWFEVG9EWHF2MTFNcWxobVdZVmwyWjJlWDQzbVNvbHh1anl6eHNxd29BRkNyMVdkbjU3YTNkd1ZCTkJqMGFvWEdXcTFtdDlzN25VNDJtM1U0SERhYnJkVnFwVkxwcGFWbGg4UG1jam9RQklFZ0NNZHhsK0tNYm0xelhNZm44K3EwT29vbWpVYUQxV3FsU0VLU0pKN25QN2ZoMlRYOVA0YXVBTDRwejBYT0hCd1JnQ0JvTVp2c05pc0VRZWwwOXJQUDdxVFRHVWtVQTM0dmhxRWdBRGFhemVqMjdwMDc5d3FGZ21xNEhNYzFHZzJMeFJLSlJOVFV4MHFsSEFxRnF0VnFwVkxkMk5oRVVlVDh1Yk5XbXdYRE1JRVhkdmYyN3o5NHdIRmNKQktabkpxaWFVSVVCVm1TMUpaN0I0MjZnR2ZKUUYwRmZITzZBdmdqK01JRzhXcE9GZ1JCalVaemUyYzNGb3RqR0ZZc2xYLzV5OS9vRFRwUkZDdVZTcUZRVW51Nm1NMm1nWUgrbVprbk5FMFBEUTFkdkhneGxVcmR2SG1UNDNpTmh2YjV2S0lvdE52dDdlMmRjcWxzczlzMEdvMG9pdVZ5QlFRaG5oZG1abWFHQnZ0eHpDeUt3aGNtYlFGZDYvOGo2UXJnaitiRnRLbURNR01FUVdBSXhuRWNRWkEyd3pSYVRWRVVXODFtUGwvTTViS1JTTy9JeUxCV28wMm4wMDZuODl5NWMrUGpvMTZ2cDFBbzdPL3ZKNVBKVnk1ZWtDWHA4Y3hzcTlWV0ZFQldBSUtvd3pDaUZtOERRUkJGRVJpR0FFQTlYK3NlOUg0SFFOLytMWTRoaHdzRHFsL0lzb3lnaU12bE9IbHkydWwwQWdBZ2ltS253OVZyOVhRNms4dGx6V2JUcVZPbnJGYnIwdEpTcFZJSkJnTWp3ME0ybXlVWThJK1BqeEVFTVRzNzErRzQwYkhSNGVGQmp1dWtVdWxLcGNLeUhaWmxCVUdnYWFxM3QyZHlZcHdnaU1NK0dIaUlIL3FwSEVtNkF2aFdQR3R0RFNxS0FrT2d3MkYvNDQxcjQrTWpPcDBXdzFDdGhtWVlKcC9QZ3lEd3hodXZqNCtONWZQNVR6KzdEVUdneitkek9Hd1lpdXAwbW1Bd29OZnI5L2IyN3Q2OWI3ZmIzbmpqOWY2K1NLR1FyMWFyTUF4VEpBbUNRRzl2K05LbGl5ZFBUbU1ZcXA0WkE5MGgvN3VnNndKOUo0QUFvTWl5QWdLQTFXWTVieng3K3JURU1FdzhsbWpVR3dhRC9zS0Y4MDZIL2Nuc2s5WFZ0V0F3eURDTVhxZEZVUVFBRkFSRklRaTBXaXk5dmIydFZ1dk9uWHNqSThQLzYvLzY5MDZYTTU4dk9CejJWeTlkSkNrU3gzRVVSYUFYQXZXNmZFdTZBdmoyZkw2TUFnRGlPS2JSWUFSQjdPN3NNd3dqaUdJMm0xdGRYWk5sZVd4c1RLZlRmUGpoNzBxbGNyM1JjRG9kRUFqbXNqbGU0RStjbUo2Y25OamZqODNQemR2c05sRVVHNDFtdTlYUzZiUTZuUlo0bXNML2gwaUg0NXpHOVIzU0ZjQjNodW9JeWJJc2l6S2dBSUFpYTdXMDErY3BsY3BxSzZUKy9zakV4RGlHb2h2cm04bGtLcnExNDNEWWMvbml6dTZ1b2loblRwK2FuSnd3R1EzTEs2dmxjaG1DWUxmYjVYQTZRQkJVNDRVT0tueDErUTdwQ3VEYjhtSjZNUXpENmk1TkpOSkQwVlEybTFNVXhlLzMyVzFXbXFaWmxqMTc5dlR2UDdxeHRMemljamszTmplTHhaTEg0eGtaR1NZSWJIeDh6Ty8zSlpLcGFxVnFNaGxkYmhkSmZtN1YrK0pmN1BKdEFGbW0va05mdzh2RDgxV2xBRUFCUUxYTUdneUJhcUZHRUFRRVFieDU4N1BadVFXMTJjekV4UGlGODJkN2U4TlBJeHFlaGs4cklBaUE0SE1lbHZyL3U2Yi9uZEdkVXI5TG50dU9WQUFBZ2tBVVJWQVVBUS9DL0JXQUlJanA2Y21lY0toVUtwbU14dEdSa1VBd0lFblNVN3NIQUFTR01CU0JZUmdFd0s5NC95N2ZucTRMOUIzejNDUWdTWklrU1U4OWxtZm1LMG1TM1c2Zm1wNlVaTW5uOVliQ0FSekhPaXdMUVJBQWdHcGxydWZjbm9NMzd3cmd1NlhyQW4zM0hBUXBQQ2VHd3p5dDNpNHJFUFExRmcxMnR6Ni9UN296d0hmUFY5YmIrdHpYQ0F3Qkwwd2FRRGVkOTg5SWR3M3c1K05GT3o0b1JQN1ZMK3Z5L2RHZEFmNnNmRVVScmhkZjBPWFBRSGNHK01FNDdDbDFZM3QrS0xvendBL0pTOWwyN21qUm5RRzZIR3U2QXVoeXJPa0tvTXV4cGl1QUxzZWFyZ0M2SEd1NkF1aHlyT2tLb011eHBpdUFMc2VhcmdDNkhHdTZBdWh5ck9rS29NdXhwaXVBTHNlYXJnQzZIR3U2QXVoeXJPa0tvTXV4cGl1QUxzZWFyZ0M2SEd1NkF1aHlyT2tLb011eHBpdUFMc2VhcmdDNkhHdTZBdWh5ck9rS29NdXhwaXVBTHNlYXJnQzZIR3U2QXVoeXJPa0tvTXV4cGl1QUxzZWFyZ0M2SEd1NkF1aHlyT2tLb011eHBpdUFMc2VhcmdDNkhHdTZBdWh5ck9rS29NdXhwaXVBTHNlYXJnQzZIR3U2QXVoeXJPa0tvTXV4cGl1QUxzZWFyZ0M2SEd1NkF1aHlyT2tLb011eHBpdUFMc2VhcmdDNkhHdTZBdWh5ck9rS29NdXg1djhQSC9LUkZxNG96MjRBQUFBQVNVVk9SSzVDWUlJb0FBQUFnQUFBQUFBQkFBQUJBQ0FBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE4ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rLzA5Zi8zL1B6LzlQbjYvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvNy9UMS8rLzA5UC91OC9ULytQMysvOUxXMXYvZzVPWC85dnY4Lys3ejlQL3Y5UFgvNy9UMS8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vZjgvZi81L2YzLytmejgvL1Q2L1AvazZPbi9ZMk5qLzRPRGcvLzIrdnYvOHZmNC8vcisvLy81L2YzLzlmbjYvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rM3k4Ly8zL1AzL3g4ckwvNWlabWYrNnZyNy8rL3o5LzRXRmh2L0t6TXovb2FPay82aXBxdi80K3ZyL3FxMnQvNTJmbi8vYjN0Ly85dnY4LyszeTgvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di95OS9qLzl2djcvL2I2Ky8rU2twUC9oNGlJLzZ5dXJ2OTZlbnIvZzRTRi8vLy8vLy9pNCtQL2JHMXQvNG1LaWYrenRiWC9jSEZ4LzdhNHVmLzYvdi8vOXZ2Ny8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvKzN5OHYrcnJhMy9qSXlNLzRDQWYvOUlTRWovc2JPei80V0dodjlpWW1MLyt2NysvOTNnNFA5RlJFVC9zTEt5LzRxTGkvOVVWRlQvakl5TS80dUxpLysrd2NILzgvbjYvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKzN5OC8vNS92Ly8yZHpjLzFSVFUvK0ppWW4vbVp1Yi8zWjJkdjlSVVZIL3JLNnUvMWRYV1AreXNyTC9ob2FHLzNKemMvK2JuSnovU2tsSi80ZUlpUCtkbjUvL2RuWjIvMmhwYVAvMysvdi84ZmIzLysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYvdTlQWC8rdjcrLyt6dzhmL2EzZDcvZzRTRS85VFkyZi82Ly8vLzR1Ym0vM3A2ZXY5cWFtci9hMnRyL3lBZ0lQOHJLeXYvZm41Ky8xbFpXUCthbkozLzdQSHkvL3ovLy8renRyYi9scGVYLytUbTV2L3c5ZlgvK1B6OS8rM3k4Ly93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC84dmY0Ly8zLy8vKzR1cnIvbEpTVS80Nk9qditLaTR2L3NyUzAvKy96OVAvNy8vLy8wOWZYLzFWVlZmK0VoSVQvRmhZVy96bzZPdjk0ZUhqL1ptZG4vL0R4OGYvMysvei81dXJyLzZTbHBmK0tpb3Iva1pHUi81U1ZsZi9PMHRMLy8vLy8vKy8wOWYvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9QNCtmL3I3L0QvakkyTi81V1dsdis2dkx6L242Q2cvNEdCZ2Y5RVJFUC8xZG5aLy9mOC9mL3c5UFgvYTJ4ci8zOS9mLzgrUGo3L1pHUmsvMmhuWi8rU2xKVC8rZjcvLy9yLy8vK21xS2ovUkVORC81T1VsUCtucDZmL3VicTYvNEdCZ3YrcHE2di85ZnI3Ly9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMDlmL3M4dkwvOHZmNS81T1VsUDlyYW1yL3g4akovNlNscGYrSWlZbi9rNU9ULzJSbFpmL1YyZHIvOS96OS8vTDMrUDkxZG5iL2VYbDUvMEZCUWY5bloyZi9hR2hvLzU2Z29mLzQvZjcvK3YvLy82MndzUDltWldYL21KcWEvNGFIaVArNHVyci90cmU0LzF0YlcvKzV1N3YvOWZ2OC8renc4Zi94OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3U4L1QvOGZmNC8vLy8vLy9tNXVmL2pJMk4vNnV0clAvUDB0TC9kbloyLzlMVjF2L1AwdEwvWW1KaS8rRGs1UC8yKy96LzUrdnIvM0J3Y1A5OWZIMy9VMU5ULzJob1ovOXljWEgvakkyTi8vYjYrLy80L3YvL3ViMjgvMnBxYXYvdDhmTC9ySzJ0LzRpSmlmL1YyTmovbHBhVy81V1dsdi8vLy8vLytmMysvL0QxOXYvdjlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vajkvdi9vN096L3M3YTIvNEtDZ3Y5M2VYbi92c0RBLzhyTnpmOTlmbjcvOFBIeC8rL3k4Ly9OejlELzhQWDIvLzcvLy8vRng4ai9oNGVJLzFOVFV2K3lzN1Avam8rUC8yQmdYLytPajQvLzNkL2YvLzMvLy8vbjdPei95YzNOLy8vLy8vL0t5Y24vaDRtSi85SFQwLyt4c3JML1ltTmovNWFYbVArK3dNRC84L2Y0Ly9YNisvL3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3Q4dlAvN3ZQMC8rN3k4Ly8zL1A3L3p0TFMvelkyTnY4QUFBRC9BQUFBL3hVVkZmKzR1cnIvNE9Mai81NmZuLytWbHBiLzl2bjUvLy8vLy8vNC9mMy8wdFRWLzVLU2svOXNiR3ovUkVWRi8rSGk0Lysrd01IL05UVTEvNGFIaC8rVWxaWC81ZWZvLy9yKy92Ly8vLy8vNU9mbi80R0RnLys3dmIzLzR1VGwvNDZQa1A4QUFBRC9BQUFBL3dNQ0F2OWJXMXYvNk92cy8vUDQrZi91OC9ULzd2UDAvKzd6OVAveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOHZmNC8vMy8vLy83L3Y3LzkveisvK3J2OFA5WFdGai9CUVVGL3dJQ0F2OENBZ0wvQUFBQS96TTBOUCs3dkwzLzJkcmEvNStmbi85b2FHbi9hbXBxLzFaWFYvOHVMUzMvSnljbi93Y0hCLzgrUFQzL242R2gvNUtUay84ZEhCei9FQkFRL3lrcEtmODBORFgvWVdGaS8yaG9hZjl5Y25ML3RyYTIvOWJXMXYrY25aMy9FeE1UL3dBQUFQOENBZ0wvQUFBQS93OFBELytJaVluLytmNy8vL2I2Ky8vOS8vLy8rdjMrLy9EMTl2L3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLysvMDlmL3Y5UFgvOFBYMS8vUDQrZi93OVBYL282YW0vM2w2ZXYvWDI5di93OFhGLzMxOWZmOVRVbEwvQUFBQS8wRkJRZjk1ZVhyL0h4OGYveFlXRmY5dmIyLy9lM3Q3L3pjMk4vOHdNREQvTkRRei8xSlNVdjlXVlZYL1VGQlEvODNQMFAvMCtQai85dnY4LzZhcHFmOUhSMGYvVmxaVy8wTkRRLzgzTnpmL0tDZ28vMDVPVHYrQmdZSC9YVjFkL3dBQUFQODdPenYvZkh4OC95QWdJUDhBQUFEL2RuVjEvMzE5ZmYvaTVlWC90cmk0LzNaM2QvKzd2ci8vOXZyOC8vRDE5di93OWZiLzcvVDEvKy8wOWYvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLysvMDlQLzIrL3ovK2Y3Ly8vWDYrLy92OVBYLzlmbjYvNENCZ3Y4c0t5ei9xYXFxLy9UMjl2K0hpWW4vd01MQy82T2twUDhURXhQLzV1bnAvNnFxcXY4bEpDVC9NelEwLzk3ZjMvL0J3OFQvZkh4OC82R2lvditKaUlqL2dJQ0EvNStmbi8rSmlvci84L2IyLy9yLy8vLy8vLy8vejlEUi80eU5qZitTa3BQL2ZYMTkvNUdSa2YrVWxaWC9qSTZPLzlUVzEvKy93Y0gvQ2dvSy8wVkZSZi9UMDlQL3JxK3YveFFWRmYvYTJ0ci9rWktTLzYreHNmL3c4L1AvZm45Ly95NHRMZitzcnEvLytmNy8vKzd6OVAvMy9QNy8rZjcvLy9MNCtQL3U4L1QvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3g5dmYvK3YvLy85emY0UCsrd01ILzJ0N2YvL3ovLy8vZDRlTC9mMzkvLzZxcXF2K1RsSlQvalk2UC94WVZGZis3dmI3LzRlUGsvMkppWXYrUmtwTC9pSWlJLzNSMWRmOEZCUVgvWkdSay81V1hsLzl2YjIvL3djVEUvNlNscGYrZG5wNy9tWnFhLzVDUmtmK1BrSkgvMWRqWi84dk96djk3ZTN2L3BLU2svNUdSa2YrZW5wMy9ycSt3LzZhb3FQOTJkbmIva3BPVC8wTkNRdjhURXhQL2k0dUwvNGFHaHYrRWhZWC9kWFYwLy8zLy8vOTVlbnYvS1Nnby82R2twUCtVbFpYL3FLaW8vNGFIaC8vMSt2ci85ZnI3Lzg3UTBmL0R4Y2IvNmUzdS8vbisvLy92OVBYLzhmWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOHZmNC8vTDM5Lysvd3NML25KMmQvNTJjblA5dGJXMy94TWZJLy92Ly8vK2JuSnovcUttcC82S2pvLzl3Y0hEL0N3c0wvNUdUay8vcjd1Ly9qbzJOLzA5UFR2OW1aMmovZ0lDQi8ybHBhZitwcXF2LzJkM2UvODdSMHYrZW41Ly9wS1dsLzcyK3Z2K1FrWkgvYTJ0ci8wNU9UdjlOVFUzL1EwTkQvMkppWXY5bVptYi9ycSt2LzZ5dHJmK3FxNnovbnArZy85L2o1UC9OME5IL2xaZVgvMlZrWlArRWhJVC9VbEpTLzF4Y1hQK2twYVgvOHZYMS8xSlRVLzhqSXlQL2hJT0QvNit3c1ArVmxwYi9zN2EyLy8vLy8vK2ZvS0QvZDNkMy82Q2hvZitibkp6LzBkVFUvL1g2Ky8vdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vSDI5Ly94OXZmL3E2MnQvNGFHaHYrWm1aci96TTdPLzZPa3BmK2twcWYvLy8vLy8vWDM5LysydUxuL2RIUjAveXNySy84QUFBRC9lM3Q3Ly9UNCtQK3JySzMvVEV4TS8yRmlZdis2dmIzLy8vLy8vNmVvcVA5dGJXMy9qSTJOLzNKeGNmK2dvS0QvZUhoNC8rcnM3UDlsWkdYL1NVbEovLzMrL3YvVjJOai9KaVltLzZTbnAvL1EwdFAvZDNkMy82V21wdjlxYW1yL2xKV1YvMk5qWS8vVTF0Zi8vUDcrLzUyZm9QOVBUMC8vVzF0Yi84bkx6UC9uNnV2L1EwTkQvd0FBQVA4K1BqNy9oNGVJLzh2T3ovLy8vLy8vOVBqNS80bUtpdi9CeE1UL3VydTcvNUtTay8rRmhZWC93OFhGLy9iNy9QL3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzkvejkvOXpkM2YrRWhJVC92cjYrLzVPVGsvL2Q0T0QvLy8vLy8vcjkvdi9lNHVQL3BLYW4vMlZsWmY4ckt5di9BZ0lDLzF4Y1hQK2VvS0QvdkwyKy84M1EwZjl0Ym0vLzYrdnIvLy8vLy8vUjFkWC9uWjZlLzN0N2UvL0Z5TWovaVl1TC8yZG5aLzliVzF2L2lJbUovK25zN1A5UlVWRC9tcHliLzNaM2QvOXljM1AvN083dS8xOWhZZjlvYUdqL1kyUmsvNnFycS8rdHJxNy9mWDE5LzZ1c3JmL2k1dWIvLy8vLy84REJ3Zjk0ZVhuLzNOL2cvNjZ3c1ArYW5Kei9OVFkyL3dRRUJQODZPanIvZDNsNS83TzF0Zi9xN3UvLy9mNysvLy8vLy8rOHZiMy9uWjZlLzdXMnR2K0ppWW4vOWZuNS8vSDI5Ly93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKzd6OVAvMy9QMy9xcXlzLzFaV1Z2K1hsNWYvb3FLaS8xMWRYdjk2Zkh6L1ZWVlYveTBzTFA4dUxpNy9KaVltL3lNakkvOW9hV24vM043Zi81MmRuZis0dXJyL3U3MisvNlducC8vMSt2ci9yN0d4LzdXMnR2L3o5dmIvaElTRS84WEh5UCtWbFpYL3M3YTMvLy8vLy8rWGw1Zi8wZFBULzZhbnAvK1BqbzcvZ0lDQS84ek56Zit2c0xIL3RiVzAvLy8vLy8rTGpZMy91cnU3LzVxYm0vK3NycTcvN2ZEdy82bXFxdi9GeU1qLzZlcnIvNTJmbi8vR3ljbi9yYSt2LzYydnIvL1IwOVAvUWtORC95Y25KLzhyS3l2L0x5OHYvekV4TWY5bmFHai9kSFYxLzJscGFmK3lzYkgvZlgxOS8xeGNYUC9MenMvLzl2djkvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMDlmK0dob2IvaElXRi8zbDVlZjlEUTBQL09EYzMvMHBKU2Y5MGRYVC9lWGw1LzFGUlVmOWtaR1QvZ1lHQi8vMzkvdis0dWJuL3FhcXIvNWlabWYrT2o0Ly93c1hGLzZpcXF2L1MwOVAvME5MUy8wQkFRZjg5UFQzL29LR2gvNlNtcHYvcDYrdi9zck8wLzVTVWxQK1ZscGIvam8rUS8rL3c4UC9OejlEL2tKR1IvNUtTa3YrZm9LSC92TDYvLytmcTYvK1NrNVAvbHBhWC94OGVIdjlzYlczLzQrWGwvNzIrdnYrMXRyZi91THU3LzRHQ2d2K3NycTcvbXB1Yi8rSGg0Zi9rNWVYL2JtNXUvMkppWXY5WldWbi9oWWFHLzJabVovOUZSVVgvTnpjMy8xRlJVZitEZzRQL2VIaDMvNktqby8vNS92Ly83dlAwLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOC9uNi82K3hzZjl0YlczL2FHaG8vNGlJaVArY25aMy9ucCtmLzd1OHZQOXFhMnIvd01MRC8vUDM5Lzk0ZUhqL25KMmQvNk9scGYrd3NyUC9qSTJOLzhMRnh2K29xcXIvNGVUay82S2pwUDlZV0ZqL1ZGVlYvNUNSa2YrOHZyNy83L1QxLy9EMDlmK1ptcHYvZG5kMy82bXJxLy9hMjl6Ly9mLy8vL1A0K2YrN3ZiNy9qNCtQLzNKemMvKzR1N3YvK2Y3Ly8rTG01Lyt2c0xEL2VudDcvMDlRVVA5aVltTC93Y0xDLzlQVjFmK3FxNnovdkwrLy80aUlpZisxdUxqL29xU2svNHVMaS8rV2w1Zi8rdjM5LzV1Y25QOTBkSFQveE1YRi81T1RrLytlbnA3L2VIaDQvMk5qWS85NWVYbi95TXZNLy9iNy9QL3Y5UFQvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rM3k4Ly85Ly8vL3Y4TEQvMHhNVFAram82UC95TW5KL3k0dUx2OXJiR3ovdWJxNy83UzF0Zi9OenM3LzZ1N3YvN0N6cy85SFIwZi9wS1dsLzY2dnNQL1kzTnovcWFxcS8rVGw1ZitCZ29ML2ZIMTkvL0QwOWYvLy8vLy85dnY4Ly9yKy8vL3g5dmYvNy9YMi8vLy8vLy8wOVBUL25xR2gvMUZTVXY5NWVuci83Zkx6Ly9yKy92L3o5L24vK2YzKy8vcisvdi92OVBYLzlQbjUvL3IrLy8vMysvdi8vLy8vLzlmWjJ2OWdZR0gvcDZtcS85dmQzZit4czdQLzFkalovNk9rcGYrUWtaSC9TRWhJLzk3ZzRQL1ozZDcvMWRmWC82T2twZi9IeWNqL016TXovMkZoWWYvTnpzNy9nNE9DLzFWVlZmL201K2YvOXZ2OC8rL3o5UC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzlmdjgvK0RqNVA4ek16UC9nNE9ELyszdTcvOWpaR1QvQUFBQS96MDlQZi9GeU1qL282U2svNHlOamYvejlmWC9lM3g4LzUrZ29QL3g5dmYvNU9qby82T2twUC9qNCtUL2MzUjAvNUdTa2YvLy8vLy84dmY0LyszeTgvL3Y5ZlgvN3ZQMC8rM3k4Ly8yKy96LzJkemQvMEpDUS84QUFBRC9BQUFBL3dnSUNQL0p6YzMvOWZyNy8rN3o5UC92OWZiLzd2UDAvL0gyOS8vdjlQWC83dlAwLy9EMDlmL3Q4dlAvK2Z6OS8vTDA5UDlwYW1yL21acWEvOWZaMnYrcnJLMy84dlgxLytudTcvOTVlbnIvcks2dS8rUGw1Zjk4Zkh6L3U3MisvNjJ2c1A4WEZ4Zi9BQUFBLzZDaW92L2o1T1QvVWxKUy8xaFpXZi82L3YvLzcvVDEvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKzd6OVAvKy8vLy9hbXRzL3hzYkcvL056cy8vMmR6Yy94MGNIUDhBQUFEL2RYWjIvNnFycS85dmIzRC9xNnl0LzR5T2p2OTNlSGovL3YvLy8vUDM5LytqcEtULzMrSGkvM3g4ZlArVWxKVC8vLy8vLys3ejlQL3Y5UFgvOFBYMi8vSDI5Ly91OHZULzlmdjgvK2JwNmY4M056Zi9BQUFBL3dRRUJQOEVCQVQvQUFFQi82NnVydi8vLy8vLzYvSHkvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vSDE5di90OHZQLzlQbjYvL2I0K1A5b2FXbi9wYWlvLzhuTXpQK3l0YlgvLy8vLy8rUGw1ZjloWVdIL3FLbXAvNVdXbHY5MmRuYi91THE2LzBoSlNmOEFBQUQvU0VsSi8vZjYrLytibTV2L0NRa0ovNnFzclAvOS8vLy83dlB6Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC85dnY4LzlyZDN2ODBORFQvU1VsSi8rVGw1Zi9CeE1YL0RRME4vd0FBQVA4d01ERC9wcWlvLzhIRXhQL0Z5TWovZFhWMS82R2tvLy8vLy8vL3NMR3kvOC9SMGYrVmw1Zi9oSVdGLy8vLy8vL3U4L1QvOFBYMi8vSDI5Ly94OXZmLzdmTHovL1A0K2YvMStmbi9VMVJVL3dBQUFQOEZCUVgvQUFBQS93SUNBdjhBQUFEL1MweE0vKzN4OHYvMisvei83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdTgvVC85UG41Ly9QMzkvOWhZbUwvdjhEQS83UzF0Zi9NenMvLy8vLy8vM3g5ZnYrU2s1VC94c2pKLzhMRnh2K05qWTcvRXhNVC93QUFBUDhyS3l2LzZ1M3UvOFBEdy84bUppYi9ZV0ZoLy9QMytQL3c5dmYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmLzUvdi8vczdXMS8xTlNVdjlSVVZILzVPYm0vOURTMC84WEZoYi9BQUFBLzJocGFmLy8vLy8vK1AzOS84WEh4Ly9jM3Q3L2xaYVgvOHJOemYrNXZMei92TDYvLzJ0cmEvLzQrZnIvOFBYMi8rLzA5Zi94OXZmLzhQWDIvK3p4OHYvNS92Ny84UFQxLzF4ZFhmOEFBQUQvQXdNRC93QUFBUDhBQUFEL0FBQUEvd0VCQWY4QUFBRC9ORFEwLzlIVjFmLzIrL3ovNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Q4dlAvK2Y3Ly85bmIyLzloWVdILzBkVFUvN0d5c3YrL3dNRC9vcU9rLzl2ZDN2L08wTkgvLy8vLy8rbnM3ZjgxTlRYL0FBQUEvem82T3YvMStQbi91cnU3LzBGQlFmOW5aMmYvME5UVS8vajkvdi92OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vZjcrLythbTV2L2dZR0IvekV4TWYvUjA5VC8vUC8vLzFaV1Z2OEFBQUQvV2xwYS8rL3g4Zi9tNk9uL2xwYVcvOWZYMS8rZ29hSC9rNU9ULzlqYjIvOW9hV24vMXRqWS8vbjkvZi91OC9ULzhmYjMvL0QxOXYveDlmYi8vLy8vLzlYWjJmOUJRVUgvQUFBQS93TURBLzhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dJREEvOEFBQUQvZ1lLQy8vNy8vLy9zOGZMLzhQWDIvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly9zOHZQLy8vLy8vNldscHY5K2dJRC8xZGpZLzM5L2YvL0R4c2Ivd01MQy82YW9xUC8xK2ZuLzF0bmEveWNuSi84QUFBRC9qNUdTLy8vLy8vK1ptWnIvT2pvNi80R0JnZit6dHJmLysvLy8vKzd6OVAveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly91OC9ULy9QLy8vMytBZ2YrWm1abi9RME5DLzN4OWZmLysvLy8vNU9ibS8ySmpZLzhpSWlML1cxdGMvNDJOanYvVzJOai8xTmJXLzJkblovL0J3OFAvbEpXVi81T1VsUC8vLy8vLzdQSHkvL0gyOS8veDl2Zi84ZmIzLysveTgvK0lpWW4vRkJRVS93QUFBUDhDQWdML0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQXdNRC93QUFBUDlrWkdYLy8vLy8vKzN6OVAvdzlmYi83L1QxLys3ejlQL3g5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC8rZnY4LzI1dWJ2Kyt2OEQvbloyZS8zcDdlLy92OHZML3VidTcvNFdHaHY5SFIwZi9KaVltLzRlSWlmLysvLy8vNStucC8wNU9ULzlxYW1yL2dvS0MvNlNtcC8vLy8vLy83dlAwLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKzd5OC8vLy8vLy9oWWVJLzM1K2Z2K1ZsWmIvZG5aMi81V1dsLy9jMzkvLy92Ly8vK3Z3OFAvZjVPWC82dXp0LzczQXdQOTVlbnIvbXBxYS84bk16UDlyYkd6LzUrbnAvL1A0K2YvdjlQWC84ZmIzLy9IMjkvL3g5dmYvNy9Qei80Q0JnZjhMQ3dyL0FBQUEvd0VDQXY4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhDQWdML0FBQUEveTh2TC8vZzRlTC85L3I2Ly9QNCtQLzUvZjcvKy8vLy8vSDMrUC93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLyszeTgvLzkvLy8vdmNDLy8zaDVlZi9NenMvL2hvYUYvNGFIaC8vVTFkYi81K3ZyLytMbjZQL3g5dmIvL3YvLy84UEd4ditOam83L2FtcHEvNnVzclA5Y1hWMy91YjI5Ly96Ly8vL3U4L1QvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83dlAwLy92Ly8vKy93Y0wvUlVWRi82K3dzUCtMaTR6LzFOWFcvM2Q0ZVA5L2dJSC9vS0dpLzVLVGxQOWxabWYvbEpXVi85UFcxdi9GeDhmL2w1aVovNU9Vay8vLy8vLy83UEh5Ly9IMjkvL3g5dmYvOGZiMy8vRDE5di94OXZmLy8vLy8vOG5NelA4ckt5ci9BQUFBL3dFQkFmOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3ljb0tQOUNRa0wvUTBORC8wOVFVUCtYbVpqLzhQWDIvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8rLzA5Zi8xK3Z2L2NuTnovN1MydC8vQnc4UC96cy9RLzMxOWZ2OXNiVzcvbkoyZC81NmZuLzl4Y25ML2s1U1UvODNQei8rSmlZbi9uWjZlLzBKQlFmL3E3dTcvOC9qNS8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOFBYMi8vZjcvUDlhV2xyL2FXbG8vM3Q3ZS8ra3BhWC90cmUzLzI1dWJ2L2U0T0Qva3BLVC8zdDhmUC8vLy8vL3Y4REEvNmVwcWY5eGNuTC8yTnpjLy9mOC9mL3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvcTcvSC8vLy8vLzdhNHVmOEdCUVgvQUFBQS93RUJBZjhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhCQVFIL0FBQUEveGtZR1AvWjNkNy85dnY4LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzdmTHovLy8vLy8rcHFxci9mbjkvLzZXbXB2L2c0dUwvL1B6OC8xeGNYUCsrd01EL3hjZkgvMmhvYVAvUzFOVC9nb1NFLzR5TWpQOUlTRWovaTR5TS8vLy8vLy90OHZQLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly91OC9ULy9QLy8vN2k3dS84dUxpNy9lSGg0L3pNek0vODRPRGovZzRTRS8vMysvditEaFlYL2VIbDUvN0swdGYrT2o0Ly9scGVZLzNWMWRmL1EwdFAvK1AzKy8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmL3c5ZmIvN1BEdy96TTBNLzhBQUFEL0F3TUQvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhDQWdML0F3TUQvd1VGQmY4QUFBRC9MaTR1LytUbzZmL3orUG4vOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi8rUHorLzYydXIvOTNlSGovbkoyZC80K1FrUCt6czdUL1hWeGMvN3krdnYvcDdPMy9aMmRtL3lzcksvOVBUMC8vWm1kbi96bzZPdi9qNk9qLzlQbjYvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvdzlmYi85L3I3LzFGUlVmOW5aMmYvc2JHeC8zaDRlUDk2ZW5yL2taR1IvM2QyZHYrYm5aMy8ydDdmLytqcTZ2L0p6TXova0pLUy8xWlZWZi9WMmRuLzl2djgvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBiMi8rN3k4Ly84Ly8vL2JXNXUvd0FBQVA4Q0F3UC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFmOEFBQUQvblorZi8vei8vLy90OHZQLzhmYjMvL0gyOS8veDl2Zi83dlAwLy92Ly8vK3JycTcvVWxGUi82YW9xZi9VMXRiLzUrcnEvODdSMHYrSWlZbi9mMzkvLzVHUmtQOXljM0wvaUlpSS83Q3dzUDlBUUVEL2hvZUkvLy8vLy8vczhmTC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLyszeTgvLy8vLy8vZlg5Ly93UUVCUCtIaDRmLzVPWGwvL0R5OC8vaDVPVC83ZTd2LytqcTZ2L0h5Y24vY0hCdy94c2JHLzlKU1VuL3djUEUvOTdpNHYveitQbi84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzdQSHkvLzcvLy8rWW1wci9BQUFBL3dFQkFmOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQWdJQy93QUFBUDk3ZlgzLy8vLy8vKzN5OC8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOGZiMy85YmEyLytucWFuL0xTNHQveWNuSi8rSmlvci8wTkxULys3dzhmL242ZXIvNCtibi8vUDI5Ly9TMHRML1hWMWQvd2tJQ2YrNHU3ei8rLy8vLys3ejlQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3Y5UFgvN2ZMei8vci8vLytlbjZEL0RRME4vd0lDQXY5SlNVbi9wcWVuLzluYTJ2L3I3ZTcvMTlyYS81eWNuUDlxYW1yL21weWMvMzkvZi8veDlmYi85L3Y4LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvdTgvVC8vUC8vLzJKalkvOEFBQUQvQWdJRC93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhDQWdML0FBQUEvMWxhV3YvdjlQVC84ZmIzLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly91OVBYLy92Ly8vODNPei85OGZYMy9rNVdWLzJscGFQK3lzckwvMytQai8rdnQ3di9QME5IL2tKR1IveTB0TGY4QUFBRC9LeXNyLzhyTXpmLzMvUDMvN3ZQMC8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOHZmNC8vVDUrdi93OXZmLytQcjYvNDZPai85a1pHVC9KaVltL3hRVUZQODVPVGovUmtaRy8yRmhZZjlzYTJ2L201eWMvK1hvNmYvRXhjYi9pWW1LLytudTcvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83Zkx6Ly96Ly8vK29xcXIvQlFVRi93QUFBUDhCQVFIL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9Bd01ELzBWRlJQL202dXYvOC9qNS8vRDE5di94OXZmLzhmYjMvKy8wOWYvMisvei96OUxULzRXRmhmL2c0dUwvMXRuWi80T0VoZjlxYW1yL1ZGVlYvMFJEUS84dExTMy9FeE1UL3p3OFBQOXBhR2ovc2JPei8vLy8vLy91OVBYLzlmcjcvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vTDMrUC9wN3UvLzVPanAvL2Y3L1ArL3djSC9nSUdCLzR1TGkvOStmbjMvTWpJeS96bzZPdjltWm1iL1hsNWUvNG1JaVArb3Fxci93c1RGLzR1TWpQKy93Y0gvK2Y3Ly8rN3o5UC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmLzErdnYvNE9Qay95VWxKZjhBQUFEL0FnSUMvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dJQ0F2OEFBQUQvTXpNei8rdnY4UC95OS9qLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9EMTl2LzMvUHovbnArZi81MmVudisrdjcvL25KMmQvM2g0ZVA5Ylcxdi9ZR0JnL3lZbUp2OURRMFAvaUlpSS80cUxpLytFaElYLzJkdmIvL1A0K2YvaDVlYi83L1AwLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLytmLy8vOFRHeC85dGJHei9rNVdWLzRLQ2d2K0FnSUQvbzZXbC81bVptdjk0ZUhqL0RBd00vMXBhV3YrVGs1UC9wNmVuLzhuS3l2OXljM1AvT3pzNy8rZm41Ly8wK2ZyLzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvN2ZMei8vMy8vLytOam8vL0FBQUEvd0lDQXY4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQWdJQy93QUFBUCtRa1pMLy8vLy8vKzN5OC8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvN2ZMei8vMy8vLys3dmI3L0x5OHYvNWVZbVAvSHlNai9ucDZlLzQrUGovODJOamIvR0JnWS80V0ZoZitrcGFYL2s1V1YvMzkvZi8rRWhZWC9qNUNRLzNSMWRmL2s2T24vOVBuNi8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveTkvai82L0R4LzU2Zm4vK0Rnb0wvakkyTi83SzB0UCs5d01IL242R2gvNFdHaC84NU9Ubi9kblozLzBSRVJQK1lsNWYvOGZQMC85N2g0djlUVTFQLzJ0M2QvL2I3L2YvdjlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di94OXZmLzh2YjMvejQrUHY4QUFBRC9Bd01EL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93SUNBdjhBQUFEL0xDd3IvK1BuNS8vMCt2di83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly90OHZQLy8vLy8vNmVxcXY5bFptYi8vUC8vLzkvZzRQOTJkbmIvVFUxTi8zTnpjLzh3TUREL3FhdXIvNUtVbFAvTXpzNy9uNkNnLzQyTmpmK0NnWUgvdUx1Ny8vVDUrdi93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3orUG4vK2Y3Ly8rbnU3di9yNy9ELy8vLy8vM1o0ZC85K2YzLy9lWGw2LzRlSWlQK0dob2IvUGo0OS8zTjBkUC9SMDlULy8vLy8vNnFycS8rNnZiMy8rLy8vLys3ejlQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL1g3L1AvYzMrRC9JQ0FnL3dBQUFQOENBZ0wvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0F3TUQvd0FBQVA5NWVuci8vLy8vLyt6eDh2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYvNS92Ny9tNXliLzhuTXpQLy8vLy8vdExXMS8xOWVYdjlFUTBQL21KcWEvM056Yy8rSWlZbi9ibTl2LzV5Y25QLy8vLy8vNWVucS8rL3k4Ly81L3Y3LzhmYjMvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di92OVBYLzgvbjUvL0wzK1AvdTgvVC8xdG5aLzYreHNmL1YxOWYvZzRPRC81MmZuLzkrZ0lEL3BhZW4vNkdqby8vMCtmci80ZVhsLzVlWW1QL3Y5ZlgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdTgvVC8rLy8vLzc3QndmOEtDZ3IvQUFBQS93RUJBZjhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4REF3UC9BQUFBLzBoSlN2L3k5ZmIvOGZiMy8vRDE5di94OXZmLzhmYjMvL0gyOS8vdjlQWC85L3o5LzliYTJ2K1htSm4vL1AvLy85ZmIyLytobzZQL2tKR1IvNDJPai8rT2o0Ly9uSjJkLzg3UDBQK3hzN1AvNHVibi8rLzE5di96K1BuLzh2ZjQvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QwOWYvdTh2UC83Zkx6Ly92Ly8vL1IwOVAvb0tHaS82aXFxditYbDVmLzF0alovNVNXbHYranBhYi91THE3LzcvQndmLy8vLy8vbXB1Yy85RFQwLy80L3YvLzcvVDEvL0gyOS8veDl2Zi84ZmIzLys3ejlQLzgvLy8vdTcyOS93Y0hCLzhBQUFEL0FRRUIvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dNREEvOEFBQUQvTURBdy8renc4Zi95OS9qLzcvVDEvL0gyOS8veDl2Zi84ZmIzLys3ejlQLzgvLy8vcksydS83VzR1UC8vLy8vL3BhYW4vOUxUMC85NGVYbi92OERBLzd1OHZQK2JtNXovcEthbS82T2twUC9sNXViLzkvdjgvK3p4OC8vdTgvUC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvdTgvVC84L2o1Ly9YNy9QLysvLy8veE1mSS8zMTlmZi9wN2UzLzdPN3YvNEtEZy85ZFhWMy9pSW1KLzRLRGcvL2MzTjMvbko2Zi8vLy8vLyt4czdQL3NiS3ovLzMvLy8vdTgvVC84ZmIzLy9IMjkvL3g5dmYvN3ZQMC8vei8vLyszdWJyL0JRVUYvd0FBQVA4QkFRSC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQWdJQy93QUFBUDk2ZTN6Ly92Ly8vKzN5OC8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vZjgvZitTbEpULzE5cmIvK3J1Ny8rYm5aMy80dWJtLzJscGFmK1BqNC8vVlZWVy82U2xwdi84Ly8vL3ljdk0vM2QzZC8vbDZ1di8rdi8vLy9iNy9QL3c5ZmIvN3ZQMC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi84UFgyLy96Ly8vL3E3dS8vMHRiWC85N2k0LzgrUGovL25xQ2cvLy8vLy85SlNVci9SVVZGLzlYWTJmK3JyS3ovWTJOai85M2c0UCtUbEpULzgvZjQvNzdCd2YrUmtwTC8vUC8vLys3ejlQL3g5dmYvOGZiMy8vSDI5Ly91OC9ULyt2Ly8vOFBHeHY4TkRRei9BQUFBL3dFQkFmOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93RUJBZjhBQUFEL0VCQVEvOHZPei8vMy9QMy83dlAwLy9IMjkvL3g5dmYvOGZiMy8vRDE5di95K1BqLzYrL3YvMzkvZ1AvczhmSC95Y3pMLzZhb3FQL0V4OGovWTJOai84Zkl5Zi9Cd3NML0lCOGYvNGFJaVAvLy8vLy9YMTVlLzI1dmIvL202dXYvMGRYVy8vWDMrUC80Ky96LzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmLzMvUDcvcjdHeC8yMXNiUCtrcGFYL2dZS0MveVltSnYrNXVyci8zK0RoL3hnWUdQOStmbjcvLy8vLy8vMy8vLzkwZFhYL3FxeXMvNU9VbGYvMCtQbi91THE3LzJ0c2JQLzcvLy8vN3ZQMC8vRDE5di94OXZmLzhmYjMvKy8wOWYvMCtmci81dW5xL3lzcUt2OEFBQUQvQWdJQy93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FnSUMvd0FBQVA4eE1USC81dW5xLy92Ly8vL3c5ZmIvOGZYMi8vSDI5Ly94OXZmLzdmTHovLzMvLy8rOXdNSC9PVGs1Ly9QNCtQL0h5c3IvbnFDZy80dU5qZitibkp6Ly8vLy8vLy8vLy84MU5UYi9QVDQrLy9mNy9QK0xpNHYvS0Njbi82S2pvLytSa3BML2JtMXQvODNRMGYvMy9QMy83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOS96OS85YmEyLzluWjJmL201eWMvNHVNalArL3djTC9ZR0ZoLzVpWm1mL3c4dlAvWjJoby93OE9EditzcjYvLy9QLy8vN0d4c3Y4MU5EVC9ucUNnLy8vLy8vK1ZscFgvSnljby8rdnM3UC96K1BuLzcvVDEvL0gyOS8veDl2Zi84ZmIzLys3ejlQLzkvLy8vYW10cy93QUFBUDhEQkFUL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dNREEvOHdNREQvdGJlNC8vYjcvUC92OVBYLzhmYjMvL0gxOXYvdTlQWC8rZjcrLzNoNWVmOGJHeHYvMDliVy8vTDI5djkyZDNmL1B6OC8vOTNoNGYvdzlQWC9mWDErL3dJQ0F2K2lwS1QvNit6cy8yMXRiZitFaFlYL3RMYTIvNU9Uay8rS2k0di9kWFYyLy9IMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di96K1BuLzV1dnMvK25zN1AvLy8vLy8yZDNkLzRHQmdmK2pwS1QvYW1wcS84Zkl5Zi82Ly8vL2ZvQ0EveTB0THY5V1ZsYi9kSFYxLzNsNWVmL096cy8vOC9iMy8wcExUUDhuSnliL21abVovL3ovLy8vdDgvVC84ZmIzLy9IMjkvL3g5dmYvN3ZQMC8vajkvdi9PMHRML0Z4Y1gvd0FBQVA4QkFRSC9BQUFBL3dBQUFQOEFBQUQvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQWdJQy93QUFBUDh4TVRILzYrL3cvL0wzK1AvdzlmYi83Zkx6Ly8zLy8vKzB0TFQvbFphVy8xQlFVUDl5ZEhULy8vLy8vN0N3c1A5d2NIRC9jM056LzBkSFIvODBORFQvcWF1ci8vLy8vLytpcEtUL2RuWjIvNTZmbi8rTmpZMy83L0x5Ly83Ly8vL2k1dWYvN1BIeS8vTDMrUC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveitQbi84L2o1Lyt6eDh2LzkvLy8vMU5iVy80R0RnLysxdDdmL2hJU0UvNnFycS8vbTZPbi8yZHpkLzdhM3VQK3dzYkwvemMvUC8vVDQrUCtIaUlqL0ppWW0vNWFYbC8rUGtKRC92TDI5Ly83Ly8vL3M4dlAvOGZiMy8vSDI5Ly94OXZmLzdmTHovLzcvLy8rY25aMy9BUUVCL3dJQ0F2OEJBUUgvQUFBQS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOEFBQUQvQVFFQi93SUNBdjhCQVFIL0FBQUEvMnRyYS8vMSt2di83L1QxLys3ejlQLzIrL3ovNE9IaC8zNS9mdi9QMHRML1dscGEvekV4TWYrMXVMai84ZlQwLzcrL3dQK3RycS8vdnNEQS8rUG41Ly9iM2Q3L2xaV1YvNUNSa2YrdXNMRC9oSVdGLy9IMTlmLzErdnYvN2ZMei8vVDUrdi94OXZmLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMTl2L3c5ZmIvOGZiMy8rM3k4Ly84Ly8vL3c4WEYvNGFIaC8vTjBOSC91NzI5LzY2dXIvK3p0YlgveWN2TC84L1Iwdi9SMU5UL2hZYUcvM0J3Y1A5bVptYi9kSFIwLzlQVzF2OTdlM3YvM2VEZy8vbi8vLy90OHZQLzhmYjMvL0gyOS8vdzlmYi83dlAxLy9yLy8vOXdjWEgvQUFBQS93TURBLzhEQXdQL0FRRUIvd0FBQVA4QUFBRC9BQUFBL3dBQUFQOENBZ0wvQWdJQy93TURBLzhCQVFIL0FRRUIveFVWRmYrQWdvTC85UG42Ly9IMjkvL3Y4L1QvOHZmNC8vajgvUCtCZ29ML3ZiKy8vN0N5c3Y5MWRuYi9iVzF0LzJscGFmK2VvS0QvMXRuWi84elB6Ly9IeWNuL3NiS3ovNjJ1cnYvRXg4Zi92TDYvLzRLRGcvL2k1dWYvOXZ6OS8rN3o5UC94OXZmLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKzN5OC8vOC8vLy96ZERRLzQ2UWtQK3FySzMvdHJtNi83YTV1ditmb0tIL2w1bVovNTZmbi85cmJHei93Y1BELzM5L2YvKzd2YjMvcUttcS84VEd4Lzk3ZkgzLzZlenMvL2o3L1AvdDgvVC84ZmIzLy9IMjkvL3Y5UFgvOGZiMy8vSDE5djlyYkd6L0FnSUMvd0FBQVA4QkFRSC9BZ0lDL3dNREEvOERBd1AvQWdJQy93QUFBUDhCQVFIL0FBQUEveEFQRC85VVZWWC8xTlhWLy9qOC9mL3g5L2ovN3ZQMC8vSDI5Ly84L3Y3L2pJeU4vNnl0cnYreHM3VC95OHZMLzdhM3QvK1RrNVAvc3JTMC8zQnZiLytscDZiL2xKYVcvNldvcVArM3U3di90cmk1LzZDaG9mK1VsWlgvNCtibS8vZjgvUC91OC9ULzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLys3ejlQLzMrL3ovOS92Ny82eXRyZjlvYUdqL1NFaEkvMnRzYlAvQXc4UC95czNOLzRXR2h2L056OUQvaDRpSS8rbnM3UC9PejgvL3FhdXIvOExFeGY5N2ZIei81T2pwLy96Ly8vL3Q4dlAvOFBYMi8vSDI5Ly92OVBYLzh2ZjQvL2o3Ky8rdnNyTC9SVVpHL3c0T0R2OEFBQUQvQUFBQS93RUJBZjhBQUFEL0lpSWkvM1ozZC85a1pXWC91THE2Ly9mOC9mLzIrL3ovNy9UMS8reng4di8yK3ZyLytmejgvNHlPanYranBhWC92TDYrLzZxdHJmLy8vLy8vdDdtNS82V21wdis2dmIzL2s1T1QvOHpOemYrMHRiWC9URXhNLzFoWVdQOXNiR3ovemREUS8vcisvdi8wK2ZyLzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rdng4di84Ly8vL3U3dTcvNU9Uay8rWm1aci8zZDdlLzVPVmxmK25xYXIvVWxKUy81T1ZsZi9GeDhmL3c4WEcvK250N3YrM3Vibi9xNnlzLzhQR3h2OTZlM3Yvek0vUC8vLy8vLy94OXZmLzdmTHovL0QxOXYvdzlQWC83L1QxLy96Ly8vLzArUGoveU12TC81U1dsdjkxZG5iL2IyOXcvNVdYbC8vYzRPRC8vZi8vLy9yKy92LzQvZjMvOFBYMi8reng4di91OC9ULy92Ly8vK1hvNlArQ2c0UC9xcXlzLzd5OXZ2K25xS2ovN2ZMei8rRGk0LysydDdqLzBkUFQvMlpuWi85eGNuTC9vcVdsLzZlb3FQL1MxTlQvam82Ty81YVZsZi9ZM056Lzl2ejgvKzd5OC8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL1Q1Ky8vYzRPSC9qNCtQLzRPRGcvOWxabWIveTgzTi8vLy8vLy9LeTh6L1IwaEkvNUtUay85UFRrNy9tNXljLy8vLy8vKzV2THovb0tHaC84dk96ditIaUlqL29hT2ovKy96OC8vOS8vLy84dmY0Lys3ejlQL3U4L1QvN1BIeS8vRDE5di82L3Y3Ly8vLy8vLy8vLy8vKy8vLy8vdi8vLy9YNy9QL3Q4dlAvN1BIeS8reng4di93OWZiLyt2Ny8vL2o4L1ArNXU3di9nSUNBLzdtOHZQK3ZzYkgvcUtxcS8vWDYrdi85Ly8vL2EyeHMvMmxxYXYrQmdvTC9VMU5ULy9qNStmLy8vLy8vb0tHaS8ybHBhZitIaG9iL3BLU2svK3p4OHYveDl2Zi84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFQxLy9iNy9QL2c1T1QvdTc2Ly82T2xwditlbjZEL3hzakkvNE9EZy8vRng4Zi9mSHg4L3dBQUFQOCtQajcveXM3Ty8vLy8vLy9KeTh6L21wdWIvOFhJeWYrb3Fxdi9ob2FILzdPMXR2L3I4UEgvL2YvLy8vcisvLy8wK2ZyLzcvVDEvK3p3OGYvcTcvRC82dS93LytydjhQL3E3L0QvN2ZMei8vTDMrUC80L2Y3Ly9mLy8vL1AzOS8vR3lNai9qWTJOLzVhWG1QL0R4TVgvbjZDZy83aTd1Ly81L2YzLy92Ly8vNk9scGY4YUd4di9BQUFBLzdTMXRmK2xwYVgvbHBtWi84VEd4ditVbHBYL3JiQ3cvOExFeGYvcjhQRC85UG42Ly9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vUDUrdi82Ly8vLy9mLy8vOHZOei85MGRIVC9GQlFULzRDQWdmK2FtNXYvTXpJeS95b3FLdjlFUkVUL3NiTzAvLy8vLy8vazUrai9vS0tpLzZ1dHJmL0N3OFQvb2FLaS80Mk9qditqcGFYL3lNdkwvK1RvNlAvMStmci8rdi8vLy96Ly8vLzkvLy8vL1AvLy8vci8vLy8yKy8zLzZ1N3UvOURUMC8rdXNMRC9qbytQLzVXWGwvKzR1YnIvc2JLeS81MmZuLy9UMTlqLy8vLy8vL2Y1K3YrTGpJMy9PVGc0L3ljbkovOUJRVUgvdHJpNS8wdExTLzhwS0NqL2k0dUwvK0RsNWYvKy8vLy8rUDMrLy9MMytQL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvKzN5OHYvMCtmci8zZUhpLzZpcHF2OXZjWEgvUkVSRS82dXNyUCtNaTR2L09qazUvMlZsWmY4ME5EVC9oNG1KLy9mNCtQLy8vLy8veU16Ti81MmZuLyt1c0xEL3ZjREEvNjZ2c1ArWm1wci9qNUNRLzVPVWxQK2RuNS8vbzZXbC82bXFxditrcGFYL242R2kvNWlhbXYrUmtwTC9sSldWLzZhbnFQKzN1Ym4vc0xLeS82R2lvdis4djhELzgvYjMvLy8vLy8vZjQrUC9ZbUppL3pzN08vOWhZV0gvT2pvNi82K3ZzUCtQa0pEL09UazYvNDZPai8rb3Fhbi83L1AwLys3ejlQL3U4L1QvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvbnFDZy82eXZyLy9ZMjl6L3ZyNisvMnRyYS85c2JHei9vNk9qLzU2Zm4vODRPRGYvUjBkSC84RER4UC85L3Y3LysvMzkvOURVMWYrd3NiSC9ySzZ1LzdLMHRQKzN1Ym4vdExlMy83TzF0ZitzcmE3L3JhNnUvNnV0cmYreHNyTC90YmUzLzdlNnV2K3hzN1AvcXF5cy82MnZyLy9IeXN2Lzh2WDEvLy8vLy8vdTh2TC9ucCtnL3pJeE12OVFVVkgvcTZ1cy81T1RrLzlqWTJUL2dJQ0EvOUxUMC8vTzBkSC9tcHViLzdhNHVQLzIrL3ovNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vYjYrLy9tNnV2L2EydHMvMGhJU1A5MmRuYi8yZHpjLzcvQXdQOXBhV24vMTluWi84Ykl5ZjloWVdIL0x5OHYvM0p6Yy8rNXU3ei84dmY0Ly9YNisvL2o1ZWIvMmRyYS84ck56Zit6dGJYL3M3VzEvN1MxdGYrOHZMei91TG01LzdHeXN2K3p0YlgvdjhIQi85bmMzUC9uNk9qLzhmWDIvL2o5L3YvaTV1Zi9vNldsLzExZVh2OHRMUzMvaElXRi85dmMzZis3dkx6L1pHVmwvK1RvNlArOHY3Ly9aV1ZsLzBORFEvK05qbzcvK2Y3Ly8vRDE5di94OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzkvMysvOVRYMlA5N2Vuci9sSldWLy9EeTh2LzYvLy8vN1BIeC8yaG9hUCtPajVEL3VydTgvK3JzN2Yrd3NiSC9kWFoyLzJWa1pQOVpXVm4va3BLUy8zMTlmZitBZ1lML3p0SFIvLy8vLy8vKy92Ny8vLy8vLyt2dDdmL3k4dkwvLy8vLy8vLy8vLy85Ly8vL3NMTzAvM1IwZFArQWdJRC9pNHVMLzAxTlRmOTBkSFQvY25Oei85VFcxLy9hM056L3RiZTMvM1IwZFArS2k0di8rLy8vLy8zLy8vL1oyOXYvZzRPRC80Mk9qdi92OC9ULzhmYjMvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveDkvai83Zkx6LzZ1dHJmK0doWVgvbzZTay8rdnc4Zi96K2ZyLzUrdnMvNGFIaC85NGVIai9ob2VJLzk3ZjMvK2ZvS0Qvam8rUC85dmQzZisvdjcvL2VucDYveUFnSVA4UEVCRC9YbDlmLzNaM2QvOTZlbnYvaFlhSC8zK0JnZjk0ZVhuL2RIVjEvMHBMUy84Q0FnTC9Pams1LzQyTmpmL096OC8vejgvUS8zMTlmdi9Bd2NIL3g4akovMzE5ZnY5emMzUC9vS0doLy9YNStmL3krUG4vM3VMai81Q1JrZitNaTR2L3djUEUvL1g2Ky8vdzlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3krUG4vOHZqNC85emc0Zi9pNXVmLzhQWDIvL2I3L1AvVTE5Zi9KaWNuLzZxcXF2K3RycTcvVVZGUi82aW9xUCtscHFiLzM5L2cvMDVPVHY4WkdSbi9Cd2NIL3dBQUFQOENBZ0wvQUFBQS95Z29LUC9qNXVmL3M3VzEvd2tKQ2Y4Q0FnTC9BUUVCL3dFQkFmOE1EQXovSUNBZy8zVjBkUC9vNmVyL2pvK1AvNkdnb1A5RFJFVC80dVRrLzJwcWF2OVBVRkQvOGZYMi8vSDI5Ly92OVBYLzNlSGgvK0xtNS8vMSt2di84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di93OWZiLzlmcjcvL1Q1K3YvdTgvVC8rLy8vLzdpN3UvOGdIeC8vSmlZbi96bzdPLzlQVDAvL25aNmUvNmFucHY5VFUxUC9BQUFBL3dJQ0F2OEVCQVQvR2hvYS94OGZILzh5TWpML2lJcUsvLy8vLy8veDh2UC9XRmxaL3kwdExmOGFHaHIvRkJRVS93QUFBUDhCQVFIL0FBQUEvNGFIaC8rYm01di9tNXljL3pZM04vOUNRMFAvR0JnWS8wSkNRdi9nNU9ULzlmcjcvKy8wOWYvMSt2ei85UG42LysvMDlmL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi84UFgyLy9EMTl2L3g5L2ovN2ZIeS80Mk5qZjlZVjFmL1pXVmwvNStnb1A5bFptWC95TXJLL3pJeU12OEFBQUQvQUFBQS96SXlNdjhzTEN6L0d4c2IvNE9EZy85NmZIei8vdi8vLzl6ZTN2OXViMi8vY1hGeC93VUZCZjlCUVVIL0d4c2Ivd0FBQVA4QUFBRC9hMnhzLzdLMHRQOXNiR3ovbXB1Yi8xaFhWLzlkWFYzL3FxdXMvL2I3L1AvdjlQWC84ZmIzLy9EMTl2L3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di8wK2ZyLzdmSHkvOFRGeHYrenRiYi90YmU0LzdtN3ZQK2dvYUQvU0VoSS93b0tDdjhBQUFEL2NuSnkvMTFkWGY4QUFBRC9wYVdsLzUyZG5mK2lvNkwvam8rUC83eTh2UDl4Y1hIL0FBQUEvNDZPanY4NU9Ubi9BQUFBL3d3TURQOXJiR3ovcEthbS83eS92Lyt4czdQL3VidTcvODNRMFAvMCtmci84ZmIzLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYveTkvai8rUDMrLy9UNisvLzUvdjcvKy8vLy85WFkyZjlzYlczL0d4b2Evems1T2Y5UVQwLy91N3k4L3lFaElmOGpJeVAvNGVQai80bUxpdit6dGJYL3ZMMisvd0FBQVA5WFdGai9zckt5L3pjM04vODVPVG4vSGg0ZS81T1VsUC9sNmVyLy9mLy8vL2Y4L1AvMSt2di85LzMrLy9EMTl2L3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3U4L1QvNy9UMS8rN3o5UC91OC9ULzl2djgvL2I3Ky8rVmxwZi9LaW9xLzFGUlVmOWxaV1gvaVltSy93b0tDdjg3UER6LytQbjUvOURUMC84UUVCRC9LeXNyLzQrUWtQOVpXVm4vUlVWRi96VTFOZisrd3NMLy9QLy8vL0w0K1AvdTh2UC83L1QxLysvMDlmL3U4L1QvOGZYMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi83Zkx6Ly83Ly8vOS9mMy8vTmpZMi8wMU5UZjgvUHovL2IyOXYvd0FBQVA5NWVYci9URXhNL3hvYUd2OXNiR3ovTlRRMC8wOU9Udjh6TXpQL3JhMnQvLy8vLy8vcTcvRC84dmY0Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmWC85dnY4Lzh2Tnp2K1FrSkQvMTlyYS83L0J3ZitRa1pIL1VsSlMvMlZsWmY5UFQwLy9ZbUppL3dBQUFQOFNFaEwvYzNOei8wQkFRUDl5Y25ML1JrZEgvNit4c2YvSHlNbi95c3pNLzVHU2t2L2k1ZWIvOVBuNi8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLys3ejlQLzUvLy8vdXJ5OS96NCtQdjlzYkd6L3FhcXEvM1YyZHY5MWRYWC9ob2FHL3lFZ0lQK09qbzcvSUNBZy8xQlFVUDl0YlczL0t5c3IvNXljblA5ZllHRC9qbytRLzV5ZG5mOVpXbG4vVkZSVS8rRGo1UC8xK3Z2LzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vSDI5Ly95OS9mL3BLYW0vNFNFaFArWW1abi9RVUZDLzFaVlZmOUhSa2Iva1pTVS83S3p0UDlWVlZYL2JHeHMvNzIvd1A5eWMzUC9UVXhNLzBwSlNmOVVWbGIvb0tDaC8zOS9mLy9BdzhQLzkveisvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL0gyOS8vNy8vLy84L2YzLy9YNStmL2MzK0QvcnJHdy84bk16Zi8vLy8vL3pjL1EvMVpWVmY5eGNYSC83ZkR3Ly9UNCtmKzh2cjcvdGJpNC8rdnY3Ly96OS9mLzl2djgvL245L2YvdzlmYi84ZmIyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLys3ejlQL3c5ZmIvOFBYMi8vYjYrLy85Ly8vLytQejgvKy8xOXYvMCtQbi9PRGc0LzNWM2QvLy8vLy8vN2ZMMC8vdi8vLy84Ly8vLzh2ajUvL0QxOXYvdjlQWC83dlAwLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvKzN5OC8vdTgvVC83Zkx6Ly8vLy8vOXdjWEgvcEtTay8vLy8vLy9zOGZQLzd2UDAvKzd5OVAvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOVBuNi85WFoyZi9oNWViLzlQbjYvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzl2djgvL1A1K3YvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0FBQUFFQUFBQUNBQUFBQUFRQWdBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLysvMDlmLzMvUHovOWZyNy8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi84dmY0Ly9MMytQLzgvLy8vd01QRC84ek96di84Ly8vLzh2ZjQvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi84ZmIzLysvejlQK2xwcWYvcmErdi83aTZ1dit6dGJYL3JLNnYvNnV0cmYvMCtmci84UFgyLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC85L3o5LytydjhQK1htSmovZkgxOS8zQndjZitpcEtUL21KbVovMjl3Y1ArQmdZSC9uNkNnLy9QNCtmLzArZnIvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdTgvVC85ZnI3LyticTYvK3lzN1AvbnArZy8rN3k4LytRa1pIL1FFQkEvMGRIUi8rZW9LRC83Zkh5LzVpWW1mKzZ2THovNnU3di8vVDUrdi92OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdTgvVC8vUC8vLzluYzNQK1dscGIvb0tHaC8yeHRiZi9qNXVmL3ZiKy8vMUpTVXY5WVdGai8xTmZZLzgvVDFQOXRiVzMvcEtXbC81YVhsLy9tNnVyLytmNy8vKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvdzlmYi85dnY3LytEazVQK1htSm4vc2JPei83cTl2Zi9TMWRYLytQcjcvN0d5cy85emMzUC9jM056LzhUR3h2L3c4dkwvME5QVS83ZTV1dit0cnE3L21adWIvK2pzN1AvMStmci84UFgyLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzhQWDIvL0gyOS8vMit2ci85L3o4LzhERXhQOE9EZzcvQkFRRS81bWJtLyt1cjYvL3FxMnQvNVNXbHY4OVBUMy9pNDJOLzNwN2UvOUZSVVgvbko2ZS82bXJyUCt6dExUL2hZYUgvd0FBQVA4aElTSC8xZGpaLy9UNSt2LzMrL3ovOFBYMi8vRDE5di93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzlmdjgvL2Y4L1AvMSt2di9rcE9VLzdLMHRQK3RycTcvUTBORC8zUjBkUDh4TVRIL2o0K1EvMXRiVy85WVdGai9hbXRyLytYcDZ2L1UyTmovWUdCZy8xVlZWZjlsWm1iL2hvZUgvekF3TVA5eWNuTC9TMHRMLzdxOHZQK25xS2ovbnFDZy8vdi8vLy8yKy92LzlmcjgvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzh2ZjQvOHJOenYrc3JhMy8zT0RoLzZxcnEvOThmSHovYTJ4cy83eTl2Zjl4Y1hIL1ltSmkvNWlhbS8rdXNMSC90TFcxLzR5TmpmK1FrcEwvaW95TS81V1ZsZit5c3JQL3I3R3kvNDZQa1A5aFlXSC9kSFIwLzcvQXdQOWZYMS8vaTR5TS82K3dzUC9hM04zL3FxdXIvOUhWMWYvMCtmci84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzkvMysvOERDd3YrWm1abi93TUxDLzlYWjJ2K3JycTcvSkNRay8ySmpZLy9FeHNmL2c0U0UvK1RvNmYrcnJhMy9qNUNRLzRhR2h2K2VuNS8vZm45Ly80R0NnditqcGFYL2c0T0UvNU9VbFArMXQ3Zi8zZUhpLzM1L2YvL0t6TTMvU1VsSy96SXlNdis2dmI3LzB0WFcvNzIrdi8rVmxaWC96TS9QLy9mOS92L3c5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOVArTmpvNy9jbkp5LzNWMmR2OXBhV24vUERzNy80Q0FnUCs5dnI3L25KMmUvODdSMGYvQnc4UC9kWFYxLzZXbnAvKzd2YjcvcEthbS83eSt2LytzcnE3L242Q2cvOEhEeFArWm1wdi9lWHA2LzgzUHovL0d5Y24vblo2ZS84REN3djl2Y0hEL1FFQkEvM0J3Y2Y5MWRuYi9jbkp5LzVtYW12LzErdnYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvNCsvei9qWTZPLzRHQmdmOXpjM1AvbzZTbC85RFMwdithbXByL3BxZW8vN203dS8rdXI2Ly9ucCtmLzZ1dXIvL2k1K2YvNisvdy81eWRuZitvcXF2LzQram8vN2E1dXYvbzYrei8zZURoLzZhcHFmK2NucDcvczdTMC83aTZ1LytlbjUvL3BhZW4vOC9SMHYrY25aMy9jbkp5LzM1K2Z2K2NuWjMvL1AvLy8rNzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYvNy8vLy91cjYvLzMxOWZmK01qWTMvSVNJaS82U2xwZitob3FML3JLK3YvOTdoNHYrdXI2Ly9xNnlzLy9iNit2LzUvUDMvLy8vLy83N0F3ZjhXRmhmL0FnSUMvOWZZMlAvLy8vLy84ZmIzLy9UNSt2Ly8vLy8vN3ZQei82R2pvLysydDdmLzNPRGgvNmFvcWYranBLVC9tNXlkL3hzYkcvK2hvNlAvY0hCdy85SFYxdi8zL2Y3LzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC8vLy8vLzNaM2QvK2NuWjMvZEhaMi94b2FHdi9kMytEL3E2MnQvOEhFeFArK3dNSC9vNldsLy9mNysvL3c5ZmIvLy8vLy84Zkt5djhVRkJUL0FBQUEvd0FBQVA5YlhGei82dS93LyszeTgvL3Q4dlAvN2ZMei8vVDUrdi92OVBUL21adWIvOGJJeVArNHVyci90cmk0LzlEVDFQOEVCQVQvbHBpWS80T0RnLytQa1pMLy8vLy8vKzd6OVAveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84dmY0Ly9EMDlmK0VoSVQvZzRTRS84TEZ4ZjlJU0VqL3dNTEMvOExFeFArZm9LRC9uWitmLytYcDZ2LzArZnIvOC9qNC81R1RsUDhORFEzL0FBQUEvd01EQS84Q0FnTC9BQUFBLzdhNHVQLy8vLy8vK2Z2Ny8vSDMrUC92OVBYLytQMysvOW5jM2YrWm1wci9vcU9qLzhyTXpmK3dzN1AvU2t0TC84N1Iwdjl4Y1hML2s1V1YvL2I3L1AvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2LzErdnYvalk2Ty80U0VoUCs5djcvL3ZjREEvNlducVAreHM3UC9ucCtnLzhEQ3d2LzUvdi8vN2ZMei8vWDYrLytLakl6L0JRVUYvd0FCQWY4QUFBRC9BZ0lDL3dBQUFQOU5UVTcvbTUyZC82K3lzdi93OWZiLzhmYjMvKzd6OVAvNS9mNy9zN1cxLzZHaW92K3dzYkwvcHFpby84UEZ4ZiszdWJuL2UzdDcvNXFjbmYvNi8vLy83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvL1AvLy83aTd1LzlvYUdqL2NIQncvNWFXbC8rTGpJei94c2pJLzVlWW1QL1QxOWovOXZ6OS8vRDE5di91OC9ULy8vLy8vM1ozZC84QUFBRC9Bd1FFL3dBQUFQOEFBQUQvQVFFQi93QUFBUDhZR0JqLzRPVGwvL1Q1K3YvdjgvVC8rUDcvLzhQR3gvK2VuNS8vdnNEQS80NlBqLytQa0pEL2MzUjAvMlptWnYvTHo4Ly8rZjcvLysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di94OWZiL1ZGUlUvNFNFaGYvR3g4ai95c3pNLzY2d3NQOXBhV24vdUx1Ny8vZjgvZi93OWZiLzd2UDAvL3IvLy8rOXY3Ly9BQUFBL3dFQkFmOEFBQUQvQUFBQS93TURBLzhFQkFUL0FRRUIvOGJIeC8vOS8vLy83Zkx6Ly9iNy9QK21xS24vYTJ4cy83YTN1UC9Lek16L3hjYkgvM0p5Y3Y5bloyai8rLzcvLys3ejlQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di8yKy92Ly8vLy8vMlZtWnY4bEpTWC9qNUNRLzZxcnEvK2dvcUwvbFphVy8rbnQ3di96K1BuLzhmYjMvKzd6OVAvLy8vLy9nb1NFL3dBQUFQOENBZ0wvQUFBQS93QUFBUDhBQUFEL0FnSUMvd0FBQVA5Z1lXTC84dmY0Ly9EMTl2LzErL3ovM04vZi81R1NrditobzZQL3FhcXIvNE9EaFA4ZEhSMy9nb09ELy8vLy8vL3orUG4vOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di8wK2ZyL3hzbkovNkNob3YrV2xwZi9aMmRuL3l3cksvK0dob2IvcHFlby82T2twUC80L2Y3LzcvVDEvKy8wOWYvNC9mNy8wTlBVL3d3TURQOEFBQUQvQVFFQi93QUFBUDhBQUFEL0FBQUEvd0lDQXY4QUFBRC9NREV4Ly9IMTl2L3g5dmYvOFBYMi8vUDMrUCtabXByL3E2dXIvM2QzZC84bEpTWC9kWFoyLzVPVWxQK2xwcWIvenRMVC8vWDcvUC93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzlmcjcvOUhWMXYrMXQ3Zi91cjIrLzRtS2kvOWxabWIvZTN0Ny85TFYxZitycmE3LzkvejkvL0QxOXYvdDh2UC8vLy8vLzRlSmlmOEFBQUQvQkFRRS93QUFBUDhBQUFEL0FBQUEvd0FBQVA4Q0FnTC9BQUFBLzU2Zm4vLy8vLy8vN2ZMei8vSDI5Ly93OVBYL3A2bXAvOUxVMWY5dWJtNy9hV3BxLzVDUmtmKzl3TUQvczdXMi85dmY0UC8wK3Z2LzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvMit2di8vLy8vLzl6ZTN2K3hzN1Avb2FLaS80eU5qdi9RMHRQL3pNM08vOTdpNC8vMSt2di83Zkx6Ly8vLy8vOW1aMmYvQUFBQS93TURBLzhBQUFEL0FBQUEvd0FBQVA4QUFBRC9Bd01EL3dBQUFQK1RsWmIvLy8vLy8rM3k4Ly8zL1AzLzFOalovOUhUMC8vRnhzYi9pSW1KLzZhbnFQK3dzckwvNXVmbi8vLy8vLy8xK1BuLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYveitQbi83Zkh5LzlYWjJ2K2dvcVAvc2JPei80MlBqLytlbjUvL3U3eTkvOGpLeXYvUDBkTC85LzMrLyt6eDh2Ly8vLy8vWjJoby93QUFBUDhEQXdQL0FBQUEvd0FBQVA4QUFBRC9BUUVCL3dBQUFQOEhCZ2IvemRIUi8vci8vLy90OHZQLytQejkvOFhHeC8vS3pzNy90TGEyLzZDaG92K01qWTcvdHJpNC81NmdvZi9lNHVQLzdmTHovL1A0K2YveDlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gxOXYveitQbi82TzN0LzV1Y25mK0dob2IvaTR1TS80eU5qZitDaElUL3U3MisvNDJPai8vQXdjSC9tSnFiLy8vLy8vL3E3L0QvLy8vLy81bWJuUDhBQUFEL0JBUUUvd0FBQVA4QUFBRC9BQUFBL3dFQkFmOEFBQUQvRHc4UC82cXRyZi8wK2ZyLzcvUDAvL2I3L1A5MmQzZi95OHpOLzMxK2Z2L0x6czcvYTJ4dC81eWVuLzkvZ0lEL2pZNk8vNkNpb3YvdjlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84dmY0Lyt2djhQL3M4ZkwvenRIUy80dUxpLysvd2NIL201eWQvNCtQa1AvRng4Zi9lM3g4LzJwcWF2L3Q4ZkgvOC9qNS8vRDE5di90OGZML05EVTEvd0FBQVA4RkJRWC9Bd01EL3dNREEvOERBd1AvQXdNRC93QUFBUDh3TURELzdmSHkvL24rLy8vTzBkTC9aMmhvLzVDU2t2Kzl2ci8vaTR5Ti82U21wdis0dXJyL2pJMk4vOW5jM2YvcTcvRC83UEh5Ly9MMytQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3k5L2ovOC9qNS8vZjgvZi9JeTh2L3FhcXEvN2U1dXYrNXU3ei9xS3FxLzM1K2Z2K21wNmYvcmErdi8rN3o5UC96K1BuLzkvejkvOUhUMC84ZUhoNy9BQUFBL3dFQkFmOEFBQUQvQUFBQS93SUNBdjlSVWxMLzA5ZlkvLy8vLy8vVTE5ai9wNmlvLzYydnIvOS9mMy8vcjdDdy83aTd1LyszdWJuL3BxaW8vOURVMWYvNC9mNy84dmY0Ly9MMytQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLyt2Ly8vOC9TMC85d2NIRC9vNldsLzU2Z29QK2lwS1QvM04vZi83TzF0ZitucWFuLzZlM3QvL2I4L2YvNi9mNy80ZVRsLzRDQ2d2OUJRa0wvUWtORC81R1RsUC9BeE1YLyt2ejgvLzMvLy8vUjFkYi9tcHViLzh2T3p2L2Y0dUwvbTV5Yy82V25wLytZbVpuL2RuWjIvOTdpNC8vNC9mNy83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdTh2UC9yN0d4LzYydnIvKzV1N3YvYzNSMC8xWlhWLy9oNWVYL3ZiL0EvNTJmbi8vS3pjMy82dS93Ly9uOS9mLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9mLy8vK0xtNS8rMHRyYi9tWnFhLzliYTJ2L1kzTjMvU1VsSi80Q0FnUCsvd2NIL3BhZW4vN3E4dmYveTkvai84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9qKy8vL2k1dWYvYm01di80ZUlpUDlBUUVEL2FHbHAvOHZQMFAvVjJkci9xcXVzLzZlcHFmKzB0cmYvd2NURS84dk96Ly9Kek0zL3ZML0EvNnl1cnYraG9xTC90TGEyLyticTYvL0V4OGovVmxaVy8weE1UUCtFaElYL2QzZDMvK3p4OHYvMy9QMy84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3Y5UFgvOWZyNy82ZXBxZitWbHBiL282U2svNDZQai85NGVYbi9uSjZmLzlIVTFmL0d5Y24veE1iRy83L0J3Zis1dWJyL3VMcTYvOFBGeGYvSHljbi96OUxTLzlUWTJQK1BrWkgvZkh4OC80Mk9qditwcTZ2L2pvNk8vN1MydC8vMy9QMy83dlAwLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vci8vLysydUxqL242Q2cvL2I1K3YrZ29xTC90N2k0LzVPVGsvK1ptcHIvbkp5ZC8yTmtaUCtucXFyL3RiZTMvN1czdC8raG82UC9ZV0ZpLzZXbXB2K09qbzcvbkoyZC83S3pzLytxckt6Lzl2cjYvNU9Uay8vSnpNei8rZjcvLysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvK1BuNlAvOS8vLy9nb09FLzBkSFIvK0lpWW4vcEtXbC94NGVIdjhBQUFEL0JBUUUvNmFwcXYrSmk0di9BQUFBL3dBQUFQOHdNREQvcksydC8zMStmdjlEUkVQL25aMmQvL3YvLy8vazZPbi84dmY0Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veitQbi85dnY4Lzh6UDBQK0Zob2IvcXF5cy8yaHBhZjhBQUFEL1FVRkIvMDVPVHYvQ3hNWC90N201LzBKQ1F2ODhQRHovQUFBQS8zK0FnUCtqcGFYL2lJbUovOWpjM2YvMSt2di84L2o1Ly9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2LzMrL3ovK2YzOS8vZjgvZi9TMXRiL1NrcEsvMlZsWmY4L1B6Ly9uWjZlLzRtS2l2OUhSMGYvWFYxZC8xWllXUC9mNCtULzkvejkvL3IrL3YvMSt2di84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8rLzA5Zi93OWZiLzE5cmIvN2U2dXY5Y1hGei9UMDlQL3pjNE9QODNOemYvVUZCUS8ySmlZdi9EeGNiLzJ0N2UvL0wzK1AvdTgvVC84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLytmNy8vNk9rcGYrTGk0di9ibTV1LzNGeGNmOWpZMlAvYW1wci8ydHJhLzkyZDNmL2lJaUovN1MydC8vNi8vLy83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vMisvei83Zkh5LzgvVDFQL3k5ZmIva3BPVC82cXNyUC9zOFBILzB0YlgvKy8wOWYvMisvei84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9MMytQLzIrL3ovKy8vLy84bk16Zi9UMXRiLysvLy8vL2I3L1AveDkvai84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8rLzA5Zi8xK2ZyLzlQbjUvKy8wOWYvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5LzhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ2dBQUFBd0FBQUFZQUFBQUFFQUlBQUFBQUFBQUNRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEeDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83L1QxLy9MMytQL3g5dmYvNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3g5dmYvK2YzKy8rN3k4Ly92OVBYLytQMysvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vUDQrZi9yNy9ELzFOalovOEhFeFAvRXg4ai8xZGpaLys3ejlQL3k5L2ovOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzl2djgvL0QxOXYrbnFhbi9kSFYxLzV1Y25mK1VsWlgvZDNkMy83Q3lzdi8wK2ZyLzlQbjYvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYveitQbi81ZXJxLzZ1c3JQK2hvNlQvemRIUi8weE1UUDlXVmxiLzA5ZlgvNXVjblAreXRMVC82TzN1Ly9MMytQL3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9iNisvLzArUG4vcXF5cy82U21wdiswdHJiLzZ1cnEvMmxxYXY5M2VIai83ZTd1LzZ5dXJ2K2xwcWIvcnJDeC8vbjkvZi8wK1BuLzhQYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9QNCtmL3k5L2ovOWZyNy85amIzUDhvS1NuL1hGMWQvN3U4dlArNHU3di9lM3g4LzM1L2YvOTNlSGovZzRXRi83bTd2UCs1dXJyL1NrdEwvelkzTi8vazZPbi84L2o1Ly9QNCtmL3orUG4vOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOC9qNS8rdnY4UC9XMnR2L242Q2cvNktrcFA5ZVgxLy9TVWxKLzNGeWN2OTZlbnIvWTJOai83M0F3Zit4dExUL1gxNWUvMzUvZi85cGFtci9Ta3BLLzJKalkvK3BxcXIvbnFDZy85M2k0Ly9xN3UvLzlQbjYvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly96K1BuL3c4YkcvN0d6cy8vZDRPSC9lWGw1LzFaWFYvK3l0TFQvaW95TS82MnZyLytmb2FIL25wK2YvMzErZnYrRWhZWC9vcUtqLzZDaG9mK3NycS8vaDRpSS83UzJ0djlKU2tyL2lvdUwvOXZmMy8rdXI2Ly95Y3pOLy9UNSsvL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL1Q2Ky8vaDVlYi9mWDE5LzR5TmpmOStmMy8vVlZaVy81ZVltUCtycmE3LzBOUFQvNU9VbFArYm5KMy9xNjJ0LzdXMnQvK2lwS1QvcDZtcC81aVptdithbTV2L3o5TFMvNnV0cmYrUmtwTC9WVlpXLzRTRmh2K0lpWW4vZzRPRC8rbnQ3di96K1BuLzhmWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9mOS92L1cydHYvZ1lHQi8yZG5aLytlbjUvL3M3UzEvN0N5c3YrMnQ3Zi9xcXVyLzdlN3UvL3o5L2YvdUxxNi8zMStmLy9lNHVMLzJ0N2YvK2ZyN1ArM3Vyci9xYXFxLzdpNnV2K3VzTEQvdHJlNC81YVhsLzlvYUdqL2hZV0YvK0RrNWYvMSt2di84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vdi8vLytRa1pML2o1Q1EvekV4TWYrenRiWC9xNjJ0Lzg3UjB2K3JyS3ovNSt6cy8vLy8vLy9kMytEL0pDVWwvd0FBQVArNXZMei8vZi8vLyszeDh2Ly8vLy8vNGVibi82bXFxLy9PMGRML3FxeXMvNnFzclA4d01USC9rcE9ULzVtYm5QLysvLy8vN3ZQMC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmZjQvL0gxOXY5OGZIei9xYXVzLzE5Z1lQL0V4c2IvdExXMS82Q2hvZi9kNGVMLy92Ly8vN2E1dWY4Zkh4Ly9BQUFBL3dBQUFQOGtKQ1gvOS9mMy8vLy8vLy90OHZQLytmLy8vOWJaMnYrY25aNy91N3k5LzdtOHZQOWpaV1gvcHFpby80S0RnLy8zL1AzLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9UNSt2K01qWTcvbEpXVi83R3pzLytpbzZUL3FxeXMvN3kvdi8vMy9QMy85dnY4LzdTM3VQOE9EZzcvQUFBQS93RUJBZjhEQXdQL1dsdGIvNDJQai8vdDhmTC84UFgyLy9mOC9mKzB0cmIvcksydC82R2lvdiswdHJiL2pJeU4vNVdYbC8vNC9mNy84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vdi8vLys1dkwzL1gxNWUvNlNscGYrNHVibi9tWnViLzY2eHNmLzUvdi8vNi9EeC8vLy8vLzkvZ0lEL0FBQUEvd1FFQlA4QkFRSC9BQUFBL3dvS0N2L2IzZDMvOXZ2OC8vWDcvUCtpcGFYL25xQ2cvN2U1dWYrZ29hSC9YVjFkLzhqTHpQLzUvLy8vNy9UMS8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL24rLy8vZTRlSC9QRHM3LzR1TWpQKzV1cnYvaW91TC84Ykp5di8zL2Y3LzdQSHkvLzcvLy85d2NuTC9BQUFBL3dNREEvOEFBQUQvQmdZRy93QUFBUCtMalkzLysvLy8vL1g2Ky8rN3ZiNy9qSTJOLzdxN3ZQOTlmbjcvUlVWRi8rM3g4Zi8xKy96LzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi85ZnI4LzlIVTFmK2ZvS0QvaElXRi96WTFOZitNakl6L3BxaW8vK2JyNi8veTkvai8rUDcvLzh6UDBQOEhCd2YvQUFBQS93RUJBZjhBQUFEL0F3TUQvd0FBQVA5c2JXNy8vdi8vLy9QNCtmL2U0dVAvcHFlbi80R0JnZjgyTlRYL2k0eU0vNkNob2YvWjNkMy85ZnI3Ly9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOHZmNC8rbnU3Ly9sNmVyL3U3MjkvNGFIaC8rV21Kai96ZERSLzl6ZzRmL3g5dmovLy8vLy81S1VsZjhBQUFEL0F3TUQvd0FBQVA4QUFBRC9BZ0lDL3dBQUFQK3dzckwvL2YvLy8vUDQrZi9YMjl2L3pkRFEvNDJPanYrTGpJei93TUxDLyticTYvL3I4UEgvOHZmNC8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYvVDE5ai9zYk96LzV5ZG52K2twcWYveDhqSS85UFYxZi94OXZmLy8vLy8vNGVKaWY4QUFBRC9CQVFFL3dBQUFQOEJBUUgvQUFBQS93WUZCZi9PMGRMLytQMysvL0wzK1AvTHpzNy93c1RFLzZLanBQK2VuNS8vczdXMS85amMzZi92OVBYLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84dmY0LzcvQnd2K0hoNGYvazVTVS80dU5qZitmb0tIL3JLNnYvNWFZbWYvMSt2di8rdi8vLzdpN3ZQOEFBQUQvQXdRRS93TURBLzhEQXdQL0F3TUUvd0VCQWYrWG1wdi8vUC8vLytmczdmK0tpNHovcmErdy81MmZvUCtJaW92L2twT1UvNHFMaS8vRXg4ai85UG42Ly9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvNy9UMS8vYjcvUC9aM2Q3L3A2aW8vN1MydC8rdnNiSC9tWnFhLzNaM2QvL1YyZG4vOS96OS8vci8vLzlsWm1mL0FBQUEvd0lDQS84QkFRSC9BQUFBL3dRREEvK09rWkgvLy8vLy83N0J3Zjk5ZlgzL29LR2gvNjJ2ci8rMnVMai9wcWVuLytIbDVmLzErdnYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvMisvei80dWJuLzR1TWpQK21xS2ovbXB5Yy84Zkp5Zit6dGJiL3k4L1AvL24rLy8vMitmbi9qWkNRL3pZMk52OUFRRUQvZzRXRi85Yloydi8vLy8vL3Q3bTUvNy9Cd3YvSXk4di9uSjJkLzZHam8vK1FrWkgvNmUzdS8vWDYrLy93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOWZyNy84akx6UCt6dGJYL2pZNk8vMXBhVy8vQXc4VC91NzYrLzdlNnV2L2I0T0gvK3YzKy8vajgvZi8zKy96LytmNysvOW5kM3YrcnJhMy95TXZMLzd5L3dQOVZWVlgvbHBlWC83SzB0Zi9QMHRQLzl2djgvKy8wOWYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzcvVDEvL3ovLy8vVzJ0di9nNFNFLzNSMGRQOTJkbmIvczdXMi84TEZ4ZisydUxqL3ZMNisvNzIvdi8rOHY3Ly91cnk4LzdhNHVQL0x6czcvc2JTMC8yMXVidjk1ZW5yL2hZV0cvK0hsNXYvNi8vLy83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3Y5UFQvb2FLaS85ZmEydittcUtqL2twT1QvNmlwcXYrY25aMy9pNDJOLzdTMnR2K3p0YlgvaUlxSy82U2xwZitpbzZQL2twS1QvNjZ3c1AvVDF0Yi9wYWFtLy9UNSt2L3Y5UFgvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OS9qLzZlM3UvL24rLy85L2dZSC9hbXBxLzR5TWpQOFBEdy8vQWdFQi81V1hsLytCZzRQL0FBQUEveG9aR2YrVGs1UC9ZV0ppLzVHU2t2LzYvLy8vNmU3di8vTDMrUC94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84dmY0Ly9UNSt2L2U0dVAvejlQVS81NmhvZjhxS2lyL1QwOVAvNktqby8rV2w1Zi9TMHRML3lvcUt2K3VzYkgvemRIUi8rTG42UC8wK2ZyLzh2ZjQvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vRDE5di8wK2ZyLyt2Ly8vK1RvNlArUWtwTC9URXhNLzBoSVNQOUdSa2IvVDA1Ty81dWNuZi9wN3UvLysvLy8vL1A0K2YvdzlmYi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC85ZnI3LzhmTHkvK2FtNXovaG9lSC8zQnhjZjkxZG5iL2hZYUgvNTZmb1AvUTA5VC85ZnI3LysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vZjcvUC95OXZmLysvLy8vOEhFeFAvTXo4Ly8rZjcvLy9QNCtmLzIrdnYvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0QxOXYvdzlmYi84ZmIzLy9EMTl2L3c5ZmIvOGZiMy8vRDE5di93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS84QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFvQUFBQUlBQUFBRUFBQUFBQkFDQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQThmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9QNCtmL3orUG4vOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOFBYMi8vSDI5Ly8yKy96LzZPM3QvK251Ny8vMisvdi84ZmIzLy9EMTl2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYvdzlmYi84L2o1LzY2eHNmK1ltWm4vbHBpWS83UzN0Ly8xK3Z2LzhQWDIvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3c5ZmIvOWZuNi8vajYrdit3c3JQL3Y4TEMvM3A3ZS8rRGhZWC92TDYvLzdXM3QvLzYvUHovOVBuNS8vRDE5di93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzlQbjYvL0wzK1AvbTZlbi9hR3BxLzVlWW1mKzF1TGovaG9lSC80bUtpdiszdWJyL2taR1MvMjF1Yi8vcjcvRC84ZmIzLy9UNSt2L3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMDlmL2o1K2oveXMzTi80ZUlpUDlnWUdEL2VudDgvMzUvZi8rUWtwTC9qcENRLzRLQ2d2OTJkbmYvWW1KaS80cUxqUC9PME5ILzQrZm8vL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8rLzA5Zi80L2Y3L3pjL1AvNUtTa3YrS2k0di9iMjl3LzcyL3YvK2twYWIvcHFlby82eXRyZitlbjUvL29xT2svNmlxcXYrNnZMei9iR3hzLzQrUWtQK1JrWkgvMDliWC8vZjkvdi93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi83L1QxLy9mOS92K3h0TFQvV2xwYS81bWFtdis4dnI3L3NyT3ovOWpjM2YvYjM5Ly9ZbU5qLzluZDN2L202dXYveWN6Ti83TzF0dis4dnI3L2xKV1YvMXBhV3YrNnZMMy8rUDMrLysvMDlmL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly96K1BuLzZlN3YvNU9VbGY5eWMzUC9zTEd5LzdHenMvL2U0dVAvNU9ucS96bzdPLzhBQUFEL2hJYUcvLy8vLy8vNC9mMy8xTmpaLzdPMXRmK3JyYTcvY1hOei81ZVltZi91OC9ULzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3orUG4vbEpXVy82S2pvLytzcmEzL3I3R3kvL3IvLy8vVTJObi9IaDRlL3dBQUFQOFNFaEwvWVdKaS8rdnY4UC8xK3Z2L3E2MnQvNjZ2c1ArZm9LRC9tSnFhLy9iNy9QL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzd2UDAvLzcvLy8rZG41Ly9iVzF0LzZxc3JQK3RzTEQvOC9qNS8vLy8vLzlWVmxiL0FBQUEvd1VGQmY4QUFBRC90cm02Ly8vLy8vK2xwNmYvcTZ5dC8yWm1aLytwckt6Ly9mLy8vKy96OVAveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3orUG4vNU9qcC83UzJ0djlqWTJQL2taS1MvOWJaMmYvKy8vLy94OHZNL3dNREEvOEFBQUQvQkFRRS93QUFBUCtnbzZULy8vLy8vOUxVMWYrS2k0di9aV1ZsLzdtN3UvL242K3ovOC9qNS8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vczhmTC8wTlBVLzUyZW52K3FySzMvMXRyYS8vLy8vLytwckt6L0FBQUEvd1lHQnY4QkFRSC9DUWtKLzlMVjFmLzQvdi8vMHRiVy82ZXBxZitmb0tILzA5YlgvKzN5OC8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOVBuNi85dmY0UCtibkp6L21acWIvNmVwcWYrVWxwYi84ZlgyLzluZDN2OFBEdy8vQUFBQS93SUNBdjhBQUFEL3M3ZTMvK3Z2OFArUGtKRC9xYXVyLzVlWW1mK2VuNkQvMytQay8vUDQrZi93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi85ZnY4Lyt6eDh2K3JyYTMvbjZHaC82R2lvdi9HeWNuLzl2djcvN1MzdVA4d01USC9PRGs1LzRlS2l2L1cyZHIveHNuSi82V25wLytlb0tEL3I3R3gvKy8wOWYvMSt2di84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly92OVBYLzlmcjcvK0xtNS8rcnJhMy9iVzV1LzZlcHFmL0F3OFAvNCtmby8rbnQ3Zi9vN096LzVPanAvOGJJeWYrbHFLai9iVzV1LzdDeXN2L2w2ZXIvOVByNy8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3U4L1QvL1AvLy85RFQxUCtscDZmL2taS1MvNmlwcXYrVWxaYi9wYWFuLzZLa3BQK1htSm4vcDZpcC81S1RrLyttcUtqLzFkbmEvL3IvLy8vdjlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi83L1QxLy9UNStmK2dvYUwvZzRTRS94RVJFZjkrZ0lEL2NuTnoveFlWRmYrR2g0Zi9wYWVuLy9iNy9QL3U4L1QvOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL2Y4L2YvWDI5ei9ZV0ZoLzFwYVd2OVhWMWYvWm1kbi85N2o0Ly8yKy96LzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOC9qNS8rWHA2dis1dkx6L2lveU0vNDJQai8rOHY3Ly82T3p0Ly9MMytQL3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi84L2o1Ly92Ly8vL3Y4L1AvOGZUMS8vci8vLy95OS9qLzhmWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OWZiLzcvUDAvL0gyOS8veDl2Zi83L1QxLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLQUFBQUJBQUFBQWdBQUFBQVFBZ0FBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVBIMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhQWDIvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOFBYMi8vZjgvZi8zL1AzLzhQWDIvL0QxOXYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdjlQWC84L2o1Ly9qOC9QL0l6TXoveXMzTy8vbjgvZi96OS9qLzcvVDEvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly93OWZiLytQMysvK3Z3OGYrdHNMRC9qSTJOLzQrUWtQK3ZzckwvN2ZMei8vZjgvZi93OWZiLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3c5ZmIvOVBuNi84L1MwLytTbEpUL2hvZUkvNmlwcXYrZW42RC9nb09ELzVXV2wvL1IxTlQvOWZyNy8vRDE5di94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMTl2K0tqSXovb0tHaC85dmUzLzljWGw3L3dNVEUvK2pzN2YrWm01di9qbytQLy9MMytQL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0wzK1AvdjlQWC9rcE9VLzdDeXN2L3I4UEgvR2hzYi95QWdJUC9nNU9YL3I3R3gvNVNXbHYveDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OS9qLzhQWDIvNWVZbVArOHZyLy8xOXpkL3dNREEvOEFBQUQvMHRiWC83aTZ1LytabTV2LzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOHZmNC8rN3o5UCs1dkx6L25xQ2cvOXZmNFA5SFNVbi9Penc4LzgzUjB2K2ZvYUgvdTc2Ky8rLzA5Zi94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9EMTl2L3orUG4vOHZmNC82YW9xZitlb0tEL3dzWEYvNy9Cd3YrZG41Ly9xcXlzLy9QNCtmL3k5L2ovOFBYMi8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84UFgyLy9IMjkvLzErdnIvc3JXMS8xTlRVLzlVVlZYL3Q3bTYvL1g2Ky8veDl2Zi84UFgyLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi84dmY0Ly9mOC9QL0d5c3IveU16TS8vajgvZi94OXZmLzhQWDIvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8vdzlmYi8rZjMrLy9qOS92L3c5ZmIvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvKy8wOWYvdjlQWC84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5Ly94OXZmLzhmYjMvL0gyOS8veDl2Zi84ZmIzLy9IMjkvL3g5dmYvOGZiMy8vSDI5LzhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIn0=
DGE_SETUP_PAYLOAD
"$python_bin" - "$setup_directory" <<'PY'
import base64, json, sys
from pathlib import Path
root = Path(sys.argv[1])
for name, content in json.loads(base64.b64decode((root / 'payload').read_text())).items():
    path = root / name
    if name.endswith(('.png', '.ico')):
        path.write_bytes(base64.b64decode(content))
    else:
        path.write_text(content)
PY
linux_guest=0
if [ "$os" = Linux ] && { [ -n "${DGE_GUEST_INSTALL:-}" ] || [ -d /mnt/lima-cidata ]; }; then
  linux_guest=1
fi
if [ "$linux_guest" = 1 ] && [ -f "$setup_directory/install.py" ]; then
  if [ ! -f "$setup_directory/invitation.json" ]; then
    echo 'This Linux VM is missing the worker invitation from the Mac or Windows app. Open Dorian Gray Worker on the host and try again.'
    exit 1
  fi
  "$python_bin" "$setup_directory/install.py"
elif [ -f "$setup_directory/host_gui.py" ]; then
  if [ "$os" = Darwin ]; then
    "$python_bin" "$setup_directory/host_gui.py" "$0"
  elif linux_headless; then
    "$python_bin" "$setup_directory/host_gui.py" "$0"
  elif [ -n "${gui_user:-}" ] && [ "$gui_user" != root ]; then
    sudo -u "$gui_user" -E env DISPLAY="${DISPLAY:-}" WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-}" \
      XAUTHORITY="${XAUTHORITY:-}" \
      DGE_ENROLL_NAME="${DGE_ENROLL_NAME:-}" DGE_ENROLL_EMAIL="${DGE_ENROLL_EMAIL:-}" \
      DGE_ENROLL_PHONE="${DGE_ENROLL_PHONE:-}" DGE_ENROLL_NOTE="${DGE_ENROLL_NOTE:-}" \
      DGE_ENROLL_HEADLESS="${DGE_ENROLL_HEADLESS:-}" \
      "$python_bin" "$setup_directory/host_gui.py" "$0"
  else
    "$python_bin" "$setup_directory/host_gui.py" "$0"
  fi
elif [ "$os" = Darwin ]; then
  "$python_bin" "$setup_directory/install_macos.py" "$0"
else
  "$python_bin" "$setup_directory/install.py"
fi
