import { Cli, Command } from "clipanion";

//#region src/def/artifacts.d.ts
declare abstract class BaseArtifactsCommand extends Command {
  static paths: string[][];
  static usage: import("clipanion").Usage;
  cwd: string;
  configPath?: string;
  packageJsonPath: string;
  outputDir: string;
  npmDir: string;
  buildOutputDir?: string;
  getOptions(): {
    cwd: string;
    configPath: string | undefined;
    packageJsonPath: string;
    outputDir: string;
    npmDir: string;
    buildOutputDir: string | undefined;
  };
}
/**
 * Copy artifacts from Github Actions into npm packages and ready to publish
 */
interface ArtifactsOptions {
  /**
   * The working directory of where napi command will be executed in, all other paths options are relative to this path
   *
   * @default process.cwd()
   */
  cwd?: string;
  /**
   * Path to `napi` config json file
   */
  configPath?: string;
  /**
   * Path to `package.json`
   *
   * @default 'package.json'
   */
  packageJsonPath?: string;
  /**
   * Path to the folder where all built `.node` files put, same as `--output-dir` of build command
   *
   * @default './artifacts'
   */
  outputDir?: string;
  /**
   * Path to the folder where the npm packages put
   *
   * @default 'npm'
   */
  npmDir?: string;
  /**
   * Path to the build output dir, only needed when targets contain a WASI target
   */
  buildOutputDir?: string;
}
//#endregion
//#region src/api/artifacts.d.ts
declare function collectArtifacts(userOptions: ArtifactsOptions): Promise<void>;
//#endregion
//#region src/def/build.d.ts
declare abstract class BaseBuildCommand extends Command {
  static paths: string[][];
  static usage: import("clipanion").Usage;
  target?: string;
  cwd?: string;
  manifestPath?: string;
  configPath?: string;
  packageJsonPath?: string;
  targetDir?: string;
  outputDir?: string;
  platform?: boolean;
  jsPackageName?: string;
  constEnum?: boolean;
  runtimeStringEnum?: boolean;
  jsBinding?: string;
  noJsBinding?: boolean;
  dts?: string;
  dtsHeader?: string;
  noDtsHeader?: boolean;
  dtsCache: boolean;
  esm?: boolean;
  strip?: boolean;
  release?: boolean;
  verbose?: boolean;
  bin?: string;
  package?: string;
  profile?: string;
  crossCompile?: boolean;
  useCross?: boolean;
  useNapiCross?: boolean;
  watch?: boolean;
  features?: string[];
  allFeatures?: boolean;
  noDefaultFeatures?: boolean;
  getOptions(): {
    target: string | undefined;
    cwd: string | undefined;
    manifestPath: string | undefined;
    configPath: string | undefined;
    packageJsonPath: string | undefined;
    targetDir: string | undefined;
    outputDir: string | undefined;
    platform: boolean | undefined;
    jsPackageName: string | undefined;
    constEnum: boolean | undefined;
    runtimeStringEnum: boolean | undefined;
    jsBinding: string | undefined;
    noJsBinding: boolean | undefined;
    dts: string | undefined;
    dtsHeader: string | undefined;
    noDtsHeader: boolean | undefined;
    dtsCache: boolean;
    esm: boolean | undefined;
    strip: boolean | undefined;
    release: boolean | undefined;
    verbose: boolean | undefined;
    bin: string | undefined;
    package: string | undefined;
    profile: string | undefined;
    crossCompile: boolean | undefined;
    useCross: boolean | undefined;
    useNapiCross: boolean | undefined;
    watch: boolean | undefined;
    features: string[] | undefined;
    allFeatures: boolean | undefined;
    noDefaultFeatures: boolean | undefined;
  };
}
/**
 * Build the NAPI-RS project
 */
interface BuildOptions$1 {
  /**
   * Build for the target triple, bypassed to `cargo build --target`
   */
  target?: string;
  /**
   * The working directory of where napi command will be executed in, all other paths options are relative to this path
   */
  cwd?: string;
  /**
   * Path to `Cargo.toml`
   */
  manifestPath?: string;
  /**
   * Path to `napi` config json file
   */
  configPath?: string;
  /**
   * Path to `package.json`
   */
  packageJsonPath?: string;
  /**
   * Directory for all crate generated artifacts, see `cargo build --target-dir`
   */
  targetDir?: string;
  /**
   * Path to where all the built files would be put. Default to the crate folder
   */
  outputDir?: string;
  /**
   * Add platform triple to the generated nodejs binding file, eg: `[name].linux-x64-gnu.node`
   */
  platform?: boolean;
  /**
   * Package name in generated js binding file. Only works with `--platform` flag
   */
  jsPackageName?: string;
  /**
   * Whether generate const enum for typescript bindings
   */
  constEnum?: boolean;
  /**
   * Emit `#[napi(string_enum)]` enums as runtime enums (`export declare enum`) under `--no-const-enum`. Default: type-only union.
   */
  runtimeStringEnum?: boolean;
  /**
   * Path and filename of generated JS binding file. Only works with `--platform` flag. Relative to `--output-dir`.
   */
  jsBinding?: string;
  /**
   * Whether to disable the generation JS binding file. Only works with `--platform` flag.
   */
  noJsBinding?: boolean;
  /**
   * Path and filename of generated type def file. Relative to `--output-dir`
   */
  dts?: string;
  /**
   * Custom file header for generated type def file. Only works when `typedef` feature enabled.
   */
  dtsHeader?: string;
  /**
   * Whether to disable the default file header for generated type def file. Only works when `typedef` feature enabled.
   */
  noDtsHeader?: boolean;
  /**
   * Whether to enable the dts cache, default to true
   *
   * @default true
   */
  dtsCache?: boolean;
  /**
   * Whether to emit an ESM JS binding file instead of CJS format. Only works with `--platform` flag.
   */
  esm?: boolean;
  /**
   * Whether strip the library to achieve the minimum file size
   */
  strip?: boolean;
  /**
   * Build in release mode
   */
  release?: boolean;
  /**
   * Verbosely log build command trace
   */
  verbose?: boolean;
  /**
   * Build only the specified binary
   */
  bin?: string;
  /**
   * Build the specified library or the one at cwd
   */
  package?: string;
  /**
   * Build artifacts with the specified profile
   */
  profile?: string;
  /**
   * [experimental] cross compile by replacing the cargo subcommand: Windows MSVC targets from a non-Windows host build with `cargo-xwin` (`windows-gnu` targets are rejected, `cargo-xwin` cannot handle them), non-Windows targets build with `cargo-zigbuild` (requires `zig` on PATH). The selected subcommand is auto-installed on first use. Cannot be combined with `--use-cross`, `--use-napi-cross` or `--watch`
   */
  crossCompile?: boolean;
  /**
   * [experimental] not recommended, prefer `--cross-compile` or `--use-napi-cross`: build in a Docker or Podman container with [cross](https://github.com/cross-rs/cross), which must be installed manually and needs a running container engine. Cannot be combined with `--cross-compile`, `--use-napi-cross` or `--watch`
   */
  useCross?: boolean;
  /**
   * [experimental] download a prebuilt gcc cross toolchain from `@napi-rs/cross-toolchain` (glibc 2.17) and set linker and C compiler environment variables. Linux glibc targets only (x64, arm64, armv7, ppc64le, s390x) on a Linux x64 or arm64 host, any other target or host errors. Cannot be combined with `--cross-compile` or `--use-cross`
   */
  useNapiCross?: boolean;
  /**
   * watch the crate changes and build continuously with `cargo-watch` crates
   */
  watch?: boolean;
  /**
   * Space-separated list of features to activate
   */
  features?: string[];
  /**
   * Activate all available features
   */
  allFeatures?: boolean;
  /**
   * Do not activate the `default` feature
   */
  noDefaultFeatures?: boolean;
}
//#endregion
//#region src/utils/log.d.ts
declare module 'obug' {
  interface Debugger {
    info: typeof console.error;
    warn: typeof console.error;
    error: typeof console.error;
  }
}
//#endregion
//#region src/utils/target.d.ts
type Platform = NodeJS.Platform | 'wasm' | 'wasi' | 'openharmony';
type NodeJSArch = 'arm' | 'arm64' | 'ia32' | 'loong64' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 'riscv64' | 's390' | 's390x' | 'x32' | 'x64' | 'universal' | 'wasm32';
interface Target {
  triple: string;
  platformArchABI: string;
  platform: Platform;
  arch: NodeJSArch;
  abi: string | null;
}
/**
 * A triple is a specific format for specifying a target architecture.
 * Triples may be referred to as a target triple which is the architecture for the artifact produced, and the host triple which is the architecture that the compiler is running on.
 * The general format of the triple is `<arch><sub>-<vendor>-<sys>-<abi>` where:
 *   - `arch` = The base CPU architecture, for example `x86_64`, `i686`, `arm`, `thumb`, `mips`, etc.
 *   - `sub` = The CPU sub-architecture, for example `arm` has `v7`, `v7s`, `v5te`, etc.
 *   - `vendor` = The vendor, for example `unknown`, `apple`, `pc`, `nvidia`, etc.
 *   - `sys` = The system name, for example `linux`, `windows`, `darwin`, etc. none is typically used for bare-metal without an OS.
 *   - `abi` = The ABI, for example `gnu`, `android`, `eabi`, etc.
 */
declare function parseTriple(rawTriple: string): Target;
//#endregion
//#region src/utils/config.d.ts
interface UserNapiConfig {
  /**
   * Name of the binary to be generated, default to `index`
   */
  binaryName?: string;
  /**
   * Name of the npm package, default to the name of root package.json name
   *
   * Always given `@scope/pkg` and arch suffix will be appended like `@scope/pkg-linux-gnu-x64`
   */
  packageName?: string;
  /**
   * All targets the crate will be compiled for
   */
  targets?: string[];
  /**
   * The npm client project uses.
   */
  npmClient?: string;
  /**
   * Whether generate const enum for typescript bindings
   */
  constEnum?: boolean;
  /**
   * Emit `#[napi(string_enum)]` enums as runtime enums (`export declare enum`) under `--no-const-enum`. Default: type-only union.
   */
  runtimeStringEnum?: boolean;
  /**
   * dts header prepend to the generated dts file
   */
  dtsHeader?: string;
  /**
   * dts header file path to be prepended to the generated dts file
   * if both dtsHeader and dtsHeaderFile are provided, dtsHeaderFile will be used
   */
  dtsHeaderFile?: string;
  /**
   * wasm compilation options
   */
  wasm?: {
    /**
     * https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Memory
     * @default 4000 pages (250 MiB), or 1024 pages (64 MiB) for the deferred workerd loader
     */
    initialMemory?: number;
    /**
     * @default 65536 pages (4GiB)
     */
    maximumMemory?: number;
    /**
     * Whether the generated `<packageName>-wasm32-wasi` package is declared as
     * an `optionalDependency` of the root package.
     *
     * When native targets are configured the WASI package is a fallback for
     * hosts that cannot load a `.node` binary, so declaring it would make every
     * consumer download the `.wasm` binary they will never load. It is
     * therefore omitted by default and is expected to be installed on demand by
     * the environments that need it.
     *
     * When WASI is the only configured target it is the primary artifact and is
     * declared by default.
     *
     * Set this explicitly to override either default.
     *
     * @default true when every configured target is WASI, false otherwise
     */
    optionalDependency?: boolean;
    /**
     * Browser wasm binding configuration
     */
    browser?: {
      /**
       * Whether to use fs module in browser
       */
      fs?: boolean;
      /**
       * Whether to initialize wasm asynchronously
       */
      asyncInit?: boolean;
      /**
       * Whether to inject `buffer` to emnapi context
       */
      buffer?: boolean;
      /**
       * Whether to emit custom events for errors in worker
       */
      errorEvent?: boolean;
    };
  };
  /**
   * @deprecated binaryName instead
   */
  name?: string;
  /**
   * @deprecated use packageName instead
   */
  package?: {
    name?: string;
  };
  /**
   * @deprecated use targets instead
   */
  triples?: {
    /**
     * Whether enable default targets
     */
    defaults: boolean;
    /**
     * Additional targets to be compiled for
     */
    additional?: string[];
  };
}
interface CommonPackageJsonFields {
  name: string;
  version: string;
  description?: string;
  keywords?: string[];
  author?: string;
  authors?: string[];
  license?: string;
  cpu?: string[];
  os?: string[];
  libc?: string[];
  files?: string[];
  repository?: any;
  homepage?: any;
  engines?: Record<string, string>;
  publishConfig?: any;
  bugs?: any;
  napi?: UserNapiConfig;
  type?: 'module' | 'commonjs';
  scripts?: Record<string, string>;
  main?: string;
  module?: string;
  types?: string;
  browser?: string;
  exports?: any;
  dependencies?: Record<string, string>;
  devDependencies?: Record<string, string>;
  optionalDependencies?: Record<string, string>;
  ava?: {
    timeout?: string;
  };
}
type NapiConfig = Required<Pick<UserNapiConfig, 'binaryName' | 'packageName' | 'npmClient'>> & Pick<UserNapiConfig, 'wasm' | 'dtsHeader' | 'dtsHeaderFile' | 'constEnum' | 'runtimeStringEnum'> & {
  targets: Target[];
  packageJson: CommonPackageJsonFields;
};
declare function readNapiConfig(path: string, configPath?: string): Promise<NapiConfig>;
//#endregion
//#region src/api/build.d.ts
type OutputKind = 'js' | 'dts' | 'node' | 'exe' | 'wasm';
type Output = {
  kind: OutputKind;
  path: string;
};
type BuildOptions = BuildOptions$1 & {
  cargoOptions?: string[];
};
declare function buildProject(rawOptions: BuildOptions): Promise<{
  task: Promise<Output[]>;
  abort: () => void;
}>;
interface WriteJsBindingOptions {
  platform?: boolean;
  noJsBinding?: boolean;
  idents: string[];
  jsBinding?: string;
  esm?: boolean;
  binaryName: string;
  packageName: string;
  version: string;
  outputDir: string;
  /**
   * `platformArchABI`s of the declared WASI targets in fallback preference
   * order (threaded first). Defaults to the legacy `['wasm32-wasi']` chain
   * when omitted or empty. Generated loaders expose these exact identities
   * through `NAPI_RS_WASI_FLAVOR`.
   */
  wasiFlavors?: string[];
}
declare function writeJsBinding(options: WriteJsBindingOptions): Promise<Output | undefined>;
interface GenerateTypeDefOptions {
  typeDefDir: string;
  noDtsHeader?: boolean;
  dtsHeader?: string;
  dtsHeaderFile?: string;
  configDtsHeader?: string;
  configDtsHeaderFile?: string;
  constEnum?: boolean;
  runtimeStringEnum?: boolean;
  cwd: string;
}
/**
 * Walk the napi-derive intermediate type-def directory, render every entry
 * into TypeScript via {@link processTypeDef}, and return the concatenated
 * `.d.ts` source plus the list of identifiers to re-export from
 * `index.js`.
 */
declare function generateTypeDef(options: GenerateTypeDefOptions): Promise<{
  exports: string[];
  dts: string;
  dtsWithTypeImports: string;
}>;
//#endregion
//#region src/def/create-npm-dirs.d.ts
declare abstract class BaseCreateNpmDirsCommand extends Command {
  static paths: string[][];
  static usage: import("clipanion").Usage;
  cwd: string;
  configPath?: string;
  packageJsonPath: string;
  npmDir: string;
  dryRun: boolean;
  getOptions(): {
    cwd: string;
    configPath: string | undefined;
    packageJsonPath: string;
    npmDir: string;
    dryRun: boolean;
  };
}
/**
 * Create npm package dirs for different platforms
 */
interface CreateNpmDirsOptions {
  /**
   * The working directory of where napi command will be executed in, all other paths options are relative to this path
   *
   * @default process.cwd()
   */
  cwd?: string;
  /**
   * Path to `napi` config json file
   */
  configPath?: string;
  /**
   * Path to `package.json`
   *
   * @default 'package.json'
   */
  packageJsonPath?: string;
  /**
   * Path to the folder where the npm packages put
   *
   * @default 'npm'
   */
  npmDir?: string;
  /**
   * Dry run without touching file system
   *
   * @default false
   */
  dryRun?: boolean;
}
//#endregion
//#region src/api/create-npm-dirs.d.ts
declare function createNpmDirs(userOptions: CreateNpmDirsOptions): Promise<void>;
//#endregion
//#region src/def/new.d.ts
declare abstract class BaseNewCommand extends Command {
  static paths: string[][];
  static usage: import("clipanion").Usage;
  $$path: string | undefined;
  $$name?: string;
  minNodeApiVersion: number;
  packageManager: string;
  license: string;
  targets: string[];
  enableDefaultTargets: boolean;
  enableAllTargets: boolean;
  enableTypeDef: boolean;
  enableGithubActions: boolean;
  testFramework: string;
  dryRun: boolean;
  getOptions(): {
    path: string | undefined;
    name: string | undefined;
    minNodeApiVersion: number;
    packageManager: string;
    license: string;
    targets: string[];
    enableDefaultTargets: boolean;
    enableAllTargets: boolean;
    enableTypeDef: boolean;
    enableGithubActions: boolean;
    testFramework: string;
    dryRun: boolean;
  };
}
/**
 * Create a new project with pre-configured boilerplate
 */
interface NewOptions {
  /**
   * The path where the NAPI-RS project will be created.
   */
  path?: string;
  /**
   * The name of the project, default to the name of the directory if not provided
   */
  name?: string;
  /**
   * The minimum Node-API version to support
   *
   * @default 4
   */
  minNodeApiVersion?: number;
  /**
   * The package manager to use. Only support yarn 4.x for now.
   *
   * @default 'yarn'
   */
  packageManager?: string;
  /**
   * License for open-sourced project
   *
   * @default 'MIT'
   */
  license?: string;
  /**
   * All targets the crate will be compiled for.
   *
   * @default []
   */
  targets?: string[];
  /**
   * Whether enable default targets
   *
   * @default true
   */
  enableDefaultTargets?: boolean;
  /**
   * Whether enable all targets
   *
   * @default false
   */
  enableAllTargets?: boolean;
  /**
   * Whether enable the `type-def` feature for typescript definitions auto-generation
   *
   * @default true
   */
  enableTypeDef?: boolean;
  /**
   * Whether generate preconfigured GitHub Actions workflow
   *
   * @default true
   */
  enableGithubActions?: boolean;
  /**
   * The JavaScript test framework to use, only support `ava` for now
   *
   * @default 'ava'
   */
  testFramework?: string;
  /**
   * Whether to run the command in dry-run mode
   *
   * @default false
   */
  dryRun?: boolean;
}
//#endregion
//#region src/api/new.d.ts
declare function newProject(userOptions: NewOptions): Promise<void>;
//#endregion
//#region src/def/pre-publish.d.ts
declare abstract class BasePrePublishCommand extends Command {
  static paths: string[][];
  static usage: import("clipanion").Usage;
  cwd: string;
  configPath?: string;
  packageJsonPath: string;
  npmDir: string;
  tagStyle: string;
  ghRelease: boolean;
  ghReleaseName?: string;
  ghReleaseId?: string;
  skipOptionalPublish: boolean;
  dryRun: boolean;
  getOptions(): {
    cwd: string;
    configPath: string | undefined;
    packageJsonPath: string;
    npmDir: string;
    tagStyle: string;
    ghRelease: boolean;
    ghReleaseName: string | undefined;
    ghReleaseId: string | undefined;
    skipOptionalPublish: boolean;
    dryRun: boolean;
  };
}
/**
 * Update package.json and copy addons into per platform packages
 */
interface PrePublishOptions {
  /**
   * The working directory of where napi command will be executed in, all other paths options are relative to this path
   *
   * @default process.cwd()
   */
  cwd?: string;
  /**
   * Path to `napi` config json file
   */
  configPath?: string;
  /**
   * Path to `package.json`
   *
   * @default 'package.json'
   */
  packageJsonPath?: string;
  /**
   * Path to the folder where the npm packages put
   *
   * @default 'npm'
   */
  npmDir?: string;
  /**
   * git tag style, `npm` or `lerna`
   *
   * @default 'lerna'
   */
  tagStyle?: 'npm' | 'lerna';
  /**
   * Whether create GitHub release
   *
   * @default true
   */
  ghRelease?: boolean;
  /**
   * GitHub release name
   */
  ghReleaseName?: string;
  /**
   * Existing GitHub release id
   */
  ghReleaseId?: string;
  /**
   * Whether skip optionalDependencies packages publish
   *
   * @default false
   */
  skipOptionalPublish?: boolean;
  /**
   * Dry run without touching file system
   *
   * @default false
   */
  dryRun?: boolean;
}
//#endregion
//#region src/api/pre-publish.d.ts
declare function prePublish(userOptions: PrePublishOptions): Promise<void>;
//#endregion
//#region src/def/rename.d.ts
declare abstract class BaseRenameCommand extends Command {
  static paths: string[][];
  static usage: import("clipanion").Usage;
  cwd: string;
  configPath?: string;
  packageJsonPath: string;
  npmDir: string;
  $$name?: string;
  binaryName?: string;
  packageName?: string;
  manifestPath: string;
  repository?: string;
  description?: string;
  getOptions(): {
    cwd: string;
    configPath: string | undefined;
    packageJsonPath: string;
    npmDir: string;
    name: string | undefined;
    binaryName: string | undefined;
    packageName: string | undefined;
    manifestPath: string;
    repository: string | undefined;
    description: string | undefined;
  };
}
/**
 * Rename the NAPI-RS project
 */
interface RenameOptions {
  /**
   * The working directory of where napi command will be executed in, all other paths options are relative to this path
   *
   * @default process.cwd()
   */
  cwd?: string;
  /**
   * Path to `napi` config json file
   */
  configPath?: string;
  /**
   * Path to `package.json`
   *
   * @default 'package.json'
   */
  packageJsonPath?: string;
  /**
   * Path to the folder where the npm packages put
   *
   * @default 'npm'
   */
  npmDir?: string;
  /**
   * The new name of the project
   */
  name?: string;
  /**
   * The new binary name *.node files
   */
  binaryName?: string;
  /**
   * The new package name of the project
   */
  packageName?: string;
  /**
   * Path to `Cargo.toml`
   *
   * @default 'Cargo.toml'
   */
  manifestPath?: string;
  /**
   * The new repository of the project
   */
  repository?: string;
  /**
   * The new description of the project
   */
  description?: string;
}
//#endregion
//#region src/api/rename.d.ts
declare function renameProject(userOptions: RenameOptions): Promise<void>;
//#endregion
//#region src/def/universalize.d.ts
declare abstract class BaseUniversalizeCommand extends Command {
  static paths: string[][];
  static usage: import("clipanion").Usage;
  cwd: string;
  configPath?: string;
  packageJsonPath: string;
  outputDir: string;
  getOptions(): {
    cwd: string;
    configPath: string | undefined;
    packageJsonPath: string;
    outputDir: string;
  };
}
/**
 * Combile built binaries into one universal binary
 */
interface UniversalizeOptions {
  /**
   * The working directory of where napi command will be executed in, all other paths options are relative to this path
   *
   * @default process.cwd()
   */
  cwd?: string;
  /**
   * Path to `napi` config json file
   */
  configPath?: string;
  /**
   * Path to `package.json`
   *
   * @default 'package.json'
   */
  packageJsonPath?: string;
  /**
   * Path to the folder where all built `.node` files put, same as `--output-dir` of build command
   *
   * @default './'
   */
  outputDir?: string;
}
//#endregion
//#region src/api/universalize.d.ts
declare function universalizeBinaries(userOptions: UniversalizeOptions): Promise<void>;
//#endregion
//#region src/def/version.d.ts
declare abstract class BaseVersionCommand extends Command {
  static paths: string[][];
  static usage: import("clipanion").Usage;
  cwd: string;
  configPath?: string;
  packageJsonPath: string;
  npmDir: string;
  getOptions(): {
    cwd: string;
    configPath: string | undefined;
    packageJsonPath: string;
    npmDir: string;
  };
}
/**
 * Update version in created npm packages
 */
interface VersionOptions {
  /**
   * The working directory of where napi command will be executed in, all other paths options are relative to this path
   *
   * @default process.cwd()
   */
  cwd?: string;
  /**
   * Path to `napi` config json file
   */
  configPath?: string;
  /**
   * Path to `package.json`
   *
   * @default 'package.json'
   */
  packageJsonPath?: string;
  /**
   * Path to the folder where the npm packages put
   *
   * @default 'npm'
   */
  npmDir?: string;
}
//#endregion
//#region src/api/version.d.ts
declare function version$1(userOptions: VersionOptions): Promise<void>;
//#endregion
//#region src/commands/artifacts.d.ts
declare class ArtifactsCommand extends BaseArtifactsCommand {
  static usage: import("clipanion").Usage;
  static paths: string[][];
  execute(): Promise<void>;
}
//#endregion
//#region src/commands/build.d.ts
declare class BuildCommand extends BaseBuildCommand {
  pipe: string | undefined;
  cargoOptions: string[];
  execute(): Promise<void>;
}
//#endregion
//#region src/commands/create-npm-dirs.d.ts
declare class CreateNpmDirsCommand extends BaseCreateNpmDirsCommand {
  execute(): Promise<void>;
}
//#endregion
//#region src/commands/new.d.ts
declare class NewCommand extends BaseNewCommand {
  interactive: boolean;
  execute(): Promise<0 | 1>;
  private fetchOptions;
  private fetchName;
  private fetchLicense;
  private fetchNapiVersion;
  private fetchTargets;
  private fetchTypeDef;
  private fetchGithubActions;
}
//#endregion
//#region src/commands/pre-publish.d.ts
declare class PrePublishCommand extends BasePrePublishCommand {
  execute(): Promise<void>;
}
//#endregion
//#region src/commands/rename.d.ts
declare class RenameCommand extends BaseRenameCommand {
  execute(): Promise<void>;
}
//#endregion
//#region src/commands/universalize.d.ts
declare class UniversalizeCommand extends BaseUniversalizeCommand {
  execute(): Promise<void>;
}
//#endregion
//#region src/commands/version.d.ts
declare class VersionCommand extends BaseVersionCommand {
  execute(): Promise<void>;
}
//#endregion
//#region src/index.d.ts
declare const cli: Cli<import("clipanion").BaseContext>;
/**
 *
 * @usage
 *
 * ```ts
 * const cli = new NapiCli()
 *
 * cli.build({
 *   cwd: '/path/to/your/project',
 * })
 * ```
 */
declare class NapiCli {
  artifacts: typeof collectArtifacts;
  new: typeof newProject;
  build: typeof buildProject;
  createNpmDirs: typeof createNpmDirs;
  prePublish: typeof prePublish;
  rename: typeof renameProject;
  universalize: typeof universalizeBinaries;
  version: typeof version$1;
}
declare function createBuildCommand(args: string[]): BuildCommand;
declare function createArtifactsCommand(args: string[]): ArtifactsCommand;
declare function createCreateNpmDirsCommand(args: string[]): CreateNpmDirsCommand;
declare function createPrePublishCommand(args: string[]): PrePublishCommand;
declare function createRenameCommand(args: string[]): RenameCommand;
declare function createUniversalizeCommand(args: string[]): UniversalizeCommand;
declare function createVersionCommand(args: string[]): VersionCommand;
declare function createNewCommand(args: string[]): NewCommand;
//#endregion
export { type GenerateTypeDefOptions, NapiCli, type WriteJsBindingOptions, cli, createArtifactsCommand, createBuildCommand, createCreateNpmDirsCommand, createNewCommand, createPrePublishCommand, createRenameCommand, createUniversalizeCommand, createVersionCommand, generateTypeDef, parseTriple, readNapiConfig, writeJsBinding };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbIkJ1aWxkT3B0aW9ucyIsIlJhd0J1aWxkT3B0aW9ucyIsIlJhd05ld09wdGlvbnMiLCJ2ZXJzaW9uIiwidmVyc2lvbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWYvYXJ0aWZhY3RzLmQudHMiLCIuLi9zcmMvYXBpL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2RlZi9idWlsZC5kLnRzIiwiLi4vc3JjL3V0aWxzL2xvZy5kLnRzIiwiLi4vc3JjL3V0aWxzL3RhcmdldC5kLnRzIiwiLi4vc3JjL3V0aWxzL2NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwaS9idWlsZC5kLnRzIiwiLi4vc3JjL2RlZi9jcmVhdGUtbnBtLWRpcnMuZC50cyIsIi4uL3NyYy9hcGkvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvZGVmL25ldy5kLnRzIiwiLi4vc3JjL2FwaS9uZXcuZC50cyIsIi4uL3NyYy9kZWYvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9hcGkvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9kZWYvcmVuYW1lLmQudHMiLCIuLi9zcmMvYXBpL3JlbmFtZS5kLnRzIiwiLi4vc3JjL2RlZi91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9hcGkvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvZGVmL3ZlcnNpb24uZC50cyIsIi4uL3NyYy9hcGkvdmVyc2lvbi5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvbmV3LmQudHMiLCIuLi9zcmMvY29tbWFuZHMvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9jb21tYW5kcy9yZW5hbWUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy92ZXJzaW9uLmQudHMiLCIuLi9zcmMvaW5kZXguZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogQ29weSBhcnRpZmFjdHMgZnJvbSBHaXRodWIgQWN0aW9ucyBpbnRvIG5wbSBwYWNrYWdlcyBhbmQgcmVhZHkgdG8gcHVibGlzaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFydGlmYWN0c09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgYWxsIGJ1aWx0IGAubm9kZWAgZmlsZXMgcHV0LCBzYW1lIGFzIGAtLW91dHB1dC1kaXJgIG9mIGJ1aWxkIGNvbW1hbmRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICcuL2FydGlmYWN0cydcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBidWlsZCBvdXRwdXQgZGlyLCBvbmx5IG5lZWRlZCB3aGVuIHRhcmdldHMgY29udGFpbiBhIFdBU0kgdGFyZ2V0XG4gICAgICovXG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRBcnRpZmFjdHNPcHRpb25zKG9wdGlvbnM6IEFydGlmYWN0c09wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgYnVpbGQgb3V0cHV0IGRpciwgb25seSBuZWVkZWQgd2hlbiB0YXJnZXRzIGNvbnRhaW4gYSBXQVNJIHRhcmdldFxuICAgICAqL1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgQXJ0aWZhY3RzT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9hcnRpZmFjdHMuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdEFydGlmYWN0cyh1c2VyT3B0aW9uczogQXJ0aWZhY3RzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VCdWlsZENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIGR0cz86IHN0cmluZztcbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgc3RyaXA/OiBib29sZWFuO1xuICAgIHJlbGVhc2U/OiBib29sZWFuO1xuICAgIHZlcmJvc2U/OiBib29sZWFuO1xuICAgIGJpbj86IHN0cmluZztcbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgY3Jvc3NDb21waWxlPzogYm9vbGVhbjtcbiAgICB1c2VDcm9zcz86IGJvb2xlYW47XG4gICAgdXNlTmFwaUNyb3NzPzogYm9vbGVhbjtcbiAgICB3YXRjaD86IGJvb2xlYW47XG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICBhbGxGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgbm9EZWZhdWx0RmVhdHVyZXM/OiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICB0YXJnZXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY3dkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB0YXJnZXREaXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgb3V0cHV0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBsYXRmb3JtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBqc1BhY2thZ2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0RW51bTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgcnVudGltZVN0cmluZ0VudW06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGpzQmluZGluZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBub0pzQmluZGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgZHRzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0c0hlYWRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBub0R0c0hlYWRlcjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgZHRzQ2FjaGU6IGJvb2xlYW47XG4gICAgICAgIGVzbTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgc3RyaXA6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHJlbGVhc2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHZlcmJvc2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGJpbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHByb2ZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY3Jvc3NDb21waWxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB1c2VDcm9zczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXNlTmFwaUNyb3NzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB3YXRjaDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgZmVhdHVyZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICBhbGxGZWF0dXJlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9EZWZhdWx0RmVhdHVyZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogQnVpbGQgdGhlIE5BUEktUlMgcHJvamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQnVpbGQgZm9yIHRoZSB0YXJnZXQgdHJpcGxlLCBieXBhc3NlZCB0byBgY2FyZ28gYnVpbGQgLS10YXJnZXRgXG4gICAgICovXG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBDYXJnby50b21sYFxuICAgICAqL1xuICAgIG1hbmlmZXN0UGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERpcmVjdG9yeSBmb3IgYWxsIGNyYXRlIGdlbmVyYXRlZCBhcnRpZmFjdHMsIHNlZSBgY2FyZ28gYnVpbGQgLS10YXJnZXQtZGlyYFxuICAgICAqL1xuICAgIHRhcmdldERpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHdoZXJlIGFsbCB0aGUgYnVpbHQgZmlsZXMgd291bGQgYmUgcHV0LiBEZWZhdWx0IHRvIHRoZSBjcmF0ZSBmb2xkZXJcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWRkIHBsYXRmb3JtIHRyaXBsZSB0byB0aGUgZ2VuZXJhdGVkIG5vZGVqcyBiaW5kaW5nIGZpbGUsIGVnOiBgW25hbWVdLmxpbnV4LXg2NC1nbnUubm9kZWBcbiAgICAgKi9cbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGFja2FnZSBuYW1lIGluIGdlbmVyYXRlZCBqcyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZ1xuICAgICAqL1xuICAgIGpzUGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBjb25zdCBlbnVtIGZvciB0eXBlc2NyaXB0IGJpbmRpbmdzXG4gICAgICovXG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbWl0IGAjW25hcGkoc3RyaW5nX2VudW0pXWAgZW51bXMgYXMgcnVudGltZSBlbnVtcyAoYGV4cG9ydCBkZWNsYXJlIGVudW1gKSB1bmRlciBgLS1uby1jb25zdC1lbnVtYC4gRGVmYXVsdDogdHlwZS1vbmx5IHVuaW9uLlxuICAgICAqL1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuIFJlbGF0aXZlIHRvIGAtLW91dHB1dC1kaXJgLlxuICAgICAqL1xuICAgIGpzQmluZGluZz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gSlMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWcuXG4gICAgICovXG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhdGggYW5kIGZpbGVuYW1lIG9mIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYFxuICAgICAqL1xuICAgIGR0cz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDdXN0b20gZmlsZSBoZWFkZXIgZm9yIGdlbmVyYXRlZCB0eXBlIGRlZiBmaWxlLiBPbmx5IHdvcmtzIHdoZW4gYHR5cGVkZWZgIGZlYXR1cmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkZWZhdWx0IGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBkdHMgY2FjaGUsIGRlZmF1bHQgdG8gdHJ1ZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGR0c0NhY2hlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVtaXQgYW4gRVNNIEpTIGJpbmRpbmcgZmlsZSBpbnN0ZWFkIG9mIENKUyBmb3JtYXQuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy5cbiAgICAgKi9cbiAgICBlc20/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc3RyaXAgdGhlIGxpYnJhcnkgdG8gYWNoaWV2ZSB0aGUgbWluaW11bSBmaWxlIHNpemVcbiAgICAgKi9cbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgaW4gcmVsZWFzZSBtb2RlXG4gICAgICovXG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmVyYm9zZWx5IGxvZyBidWlsZCBjb21tYW5kIHRyYWNlXG4gICAgICovXG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgb25seSB0aGUgc3BlY2lmaWVkIGJpbmFyeVxuICAgICAqL1xuICAgIGJpbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgb3IgdGhlIG9uZSBhdCBjd2RcbiAgICAgKi9cbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGFydGlmYWN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZmlsZVxuICAgICAqL1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gY3Jvc3MgY29tcGlsZSBieSByZXBsYWNpbmcgdGhlIGNhcmdvIHN1YmNvbW1hbmQ6IFdpbmRvd3MgTVNWQyB0YXJnZXRzIGZyb20gYSBub24tV2luZG93cyBob3N0IGJ1aWxkIHdpdGggYGNhcmdvLXh3aW5gIChgd2luZG93cy1nbnVgIHRhcmdldHMgYXJlIHJlamVjdGVkLCBgY2FyZ28teHdpbmAgY2Fubm90IGhhbmRsZSB0aGVtKSwgbm9uLVdpbmRvd3MgdGFyZ2V0cyBidWlsZCB3aXRoIGBjYXJnby16aWdidWlsZGAgKHJlcXVpcmVzIGB6aWdgIG9uIFBBVEgpLiBUaGUgc2VsZWN0ZWQgc3ViY29tbWFuZCBpcyBhdXRvLWluc3RhbGxlZCBvbiBmaXJzdCB1c2UuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIG5vdCByZWNvbW1lbmRlZCwgcHJlZmVyIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1uYXBpLWNyb3NzYDogYnVpbGQgaW4gYSBEb2NrZXIgb3IgUG9kbWFuIGNvbnRhaW5lciB3aXRoIFtjcm9zc10oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3NzLXJzL2Nyb3NzKSwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgbWFudWFsbHkgYW5kIG5lZWRzIGEgcnVubmluZyBjb250YWluZXIgZW5naW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBkb3dubG9hZCBhIHByZWJ1aWx0IGdjYyBjcm9zcyB0b29sY2hhaW4gZnJvbSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCAoZ2xpYmMgMi4xNykgYW5kIHNldCBsaW5rZXIgYW5kIEMgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBMaW51eCBnbGliYyB0YXJnZXRzIG9ubHkgKHg2NCwgYXJtNjQsIGFybXY3LCBwcGM2NGxlLCBzMzkweCkgb24gYSBMaW51eCB4NjQgb3IgYXJtNjQgaG9zdCwgYW55IG90aGVyIHRhcmdldCBvciBob3N0IGVycm9ycy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLWNyb3NzYFxuICAgICAqL1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogd2F0Y2ggdGhlIGNyYXRlIGNoYW5nZXMgYW5kIGJ1aWxkIGNvbnRpbnVvdXNseSB3aXRoIGBjYXJnby13YXRjaGAgY3JhdGVzXG4gICAgICovXG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGFjdGl2YXRlXG4gICAgICovXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZSBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzXG4gICAgICovXG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBhY3RpdmF0ZSB0aGUgYGRlZmF1bHRgIGZlYXR1cmVcbiAgICAgKi9cbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRCdWlsZE9wdGlvbnMob3B0aW9uczogQnVpbGRPcHRpb25zKToge1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGZvciB0aGUgdGFyZ2V0IHRyaXBsZSwgYnlwYXNzZWQgdG8gYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0YFxuICAgICAqL1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgZm9yIGFsbCBjcmF0ZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLCBzZWUgYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0LWRpcmBcbiAgICAgKi9cbiAgICB0YXJnZXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB3aGVyZSBhbGwgdGhlIGJ1aWx0IGZpbGVzIHdvdWxkIGJlIHB1dC4gRGVmYXVsdCB0byB0aGUgY3JhdGUgZm9sZGVyXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFkZCBwbGF0Zm9ybSB0cmlwbGUgdG8gdGhlIGdlbmVyYXRlZCBub2RlanMgYmluZGluZyBmaWxlLCBlZzogYFtuYW1lXS5saW51eC14NjQtZ251Lm5vZGVgXG4gICAgICovXG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhY2thZ2UgbmFtZSBpbiBnZW5lcmF0ZWQganMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWdcbiAgICAgKi9cbiAgICBqc1BhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYC5cbiAgICAgKi9cbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLlxuICAgICAqL1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmBcbiAgICAgKi9cbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNDYWNoZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVtaXQgYW4gRVNNIEpTIGJpbmRpbmcgZmlsZSBpbnN0ZWFkIG9mIENKUyBmb3JtYXQuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy5cbiAgICAgKi9cbiAgICBlc20/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc3RyaXAgdGhlIGxpYnJhcnkgdG8gYWNoaWV2ZSB0aGUgbWluaW11bSBmaWxlIHNpemVcbiAgICAgKi9cbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgaW4gcmVsZWFzZSBtb2RlXG4gICAgICovXG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmVyYm9zZWx5IGxvZyBidWlsZCBjb21tYW5kIHRyYWNlXG4gICAgICovXG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgb25seSB0aGUgc3BlY2lmaWVkIGJpbmFyeVxuICAgICAqL1xuICAgIGJpbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgb3IgdGhlIG9uZSBhdCBjd2RcbiAgICAgKi9cbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGFydGlmYWN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZmlsZVxuICAgICAqL1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gY3Jvc3MgY29tcGlsZSBieSByZXBsYWNpbmcgdGhlIGNhcmdvIHN1YmNvbW1hbmQ6IFdpbmRvd3MgTVNWQyB0YXJnZXRzIGZyb20gYSBub24tV2luZG93cyBob3N0IGJ1aWxkIHdpdGggYGNhcmdvLXh3aW5gIChgd2luZG93cy1nbnVgIHRhcmdldHMgYXJlIHJlamVjdGVkLCBgY2FyZ28teHdpbmAgY2Fubm90IGhhbmRsZSB0aGVtKSwgbm9uLVdpbmRvd3MgdGFyZ2V0cyBidWlsZCB3aXRoIGBjYXJnby16aWdidWlsZGAgKHJlcXVpcmVzIGB6aWdgIG9uIFBBVEgpLiBUaGUgc2VsZWN0ZWQgc3ViY29tbWFuZCBpcyBhdXRvLWluc3RhbGxlZCBvbiBmaXJzdCB1c2UuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIG5vdCByZWNvbW1lbmRlZCwgcHJlZmVyIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1uYXBpLWNyb3NzYDogYnVpbGQgaW4gYSBEb2NrZXIgb3IgUG9kbWFuIGNvbnRhaW5lciB3aXRoIFtjcm9zc10oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3NzLXJzL2Nyb3NzKSwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgbWFudWFsbHkgYW5kIG5lZWRzIGEgcnVubmluZyBjb250YWluZXIgZW5naW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBkb3dubG9hZCBhIHByZWJ1aWx0IGdjYyBjcm9zcyB0b29sY2hhaW4gZnJvbSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCAoZ2xpYmMgMi4xNykgYW5kIHNldCBsaW5rZXIgYW5kIEMgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBMaW51eCBnbGliYyB0YXJnZXRzIG9ubHkgKHg2NCwgYXJtNjQsIGFybXY3LCBwcGM2NGxlLCBzMzkweCkgb24gYSBMaW51eCB4NjQgb3IgYXJtNjQgaG9zdCwgYW55IG90aGVyIHRhcmdldCBvciBob3N0IGVycm9ycy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLWNyb3NzYFxuICAgICAqL1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogd2F0Y2ggdGhlIGNyYXRlIGNoYW5nZXMgYW5kIGJ1aWxkIGNvbnRpbnVvdXNseSB3aXRoIGBjYXJnby13YXRjaGAgY3JhdGVzXG4gICAgICovXG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGFjdGl2YXRlXG4gICAgICovXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZSBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzXG4gICAgICovXG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBhY3RpdmF0ZSB0aGUgYGRlZmF1bHRgIGZlYXR1cmVcbiAgICAgKi9cbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG59O1xuIiwiZGVjbGFyZSBtb2R1bGUgJ29idWcnIHtcbiAgICBpbnRlcmZhY2UgRGVidWdnZXIge1xuICAgICAgICBpbmZvOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICAgICAgd2FybjogdHlwZW9mIGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIGVycm9yOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICB9XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWJ1Z0ZhY3Rvcnk6IChuYW1lc3BhY2U6IHN0cmluZykgPT4gaW1wb3J0KFwib2J1Z1wiKS5EZWJ1Z2dlcjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRlYnVnOiBpbXBvcnQoXCJvYnVnXCIpLkRlYnVnZ2VyO1xuIiwiZXhwb3J0IHR5cGUgUGxhdGZvcm0gPSBOb2RlSlMuUGxhdGZvcm0gfCAnd2FzbScgfCAnd2FzaScgfCAnb3Blbmhhcm1vbnknO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVU5JVkVSU0FMX1RBUkdFVFM6IHtcbiAgICByZWFkb25seSAndW5pdmVyc2FsLWFwcGxlLWRhcndpbic6IHJlYWRvbmx5IFtcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsIFwieDg2XzY0LWFwcGxlLWRhcndpblwiXTtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBBVkFJTEFCTEVfVEFSR0VUUzogcmVhZG9ubHkgW1wiYWFyY2g2NC1hcHBsZS1kYXJ3aW5cIiwgXCJhYXJjaDY0LWxpbnV4LWFuZHJvaWRcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtZ251XCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2xcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtb2hvc1wiLCBcImFhcmNoNjQtcGMtd2luZG93cy1tc3ZjXCIsIFwieDg2XzY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtcGMtd2luZG93cy1nbnVcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXCIsIFwieDg2XzY0LXVua25vd24tbGludXgtb2hvc1wiLCBcIng4Nl82NC11bmtub3duLWZyZWVic2RcIiwgXCJpNjg2LXBjLXdpbmRvd3MtbXN2Y1wiLCBcImFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmXCIsIFwiYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmXCIsIFwiYXJtdjctbGludXgtYW5kcm9pZGVhYmlcIiwgXCJ1bml2ZXJzYWwtYXBwbGUtZGFyd2luXCIsIFwibG9vbmdhcmNoNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJyaXNjdjY0Z2MtdW5rbm93bi1saW51eC1nbnVcIiwgXCJwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudVwiLCBcInMzOTB4LXVua25vd24tbGludXgtZ251XCIsIFwid2FzbTMyLXdhc2lwMVwiLCBcIndhc20zMi13YXNpcDEtdGhyZWFkc1wiXTtcbmV4cG9ydCB0eXBlIFRhcmdldFRyaXBsZSA9ICh0eXBlb2YgQVZBSUxBQkxFX1RBUkdFVFMpW251bWJlcl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBERUZBVUxUX1RBUkdFVFM6IHJlYWRvbmx5IFtcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIiwgXCJhYXJjaDY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBUQVJHRVRfTElOS0VSOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xudHlwZSBOb2RlSlNBcmNoID0gJ2FybScgfCAnYXJtNjQnIHwgJ2lhMzInIHwgJ2xvb25nNjQnIHwgJ21pcHMnIHwgJ21pcHNlbCcgfCAncHBjJyB8ICdwcGM2NCcgfCAncmlzY3Y2NCcgfCAnczM5MCcgfCAnczM5MHgnIHwgJ3gzMicgfCAneDY0JyB8ICd1bml2ZXJzYWwnIHwgJ3dhc20zMic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBOb2RlQXJjaFRvQ3B1OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVW5pQXJjaHNCeVBsYXRmb3JtOiBQYXJ0aWFsPFJlY29yZDxQbGF0Zm9ybSwgTm9kZUpTQXJjaFtdPj47XG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldCB7XG4gICAgdHJpcGxlOiBzdHJpbmc7XG4gICAgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmc7XG4gICAgcGxhdGZvcm06IFBsYXRmb3JtO1xuICAgIGFyY2g6IE5vZGVKU0FyY2g7XG4gICAgYWJpOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IHR5cGUgV2FzaUZsYXZvciA9ICdzaW5nbGUnIHwgJ3RocmVhZHMnO1xuZXhwb3J0IGludGVyZmFjZSBXYXNpVGFyZ2V0IHtcbiAgICBjYW5vbmljYWxUcmlwbGU6IHN0cmluZztcbiAgICBmbGF2b3I6IFdhc2lGbGF2b3I7XG4gICAgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmc7XG59XG4vKipcbiAqIFJlc29sdmUgaGlzdG9yaWNhbCBXQVNJIHNwZWxsaW5ncyB0byBvbmUgYnVpbGQgdGFyZ2V0IGFuZCBvbmUgYXJ0aWZhY3RcbiAqIGlkZW50aXR5LiBgd2FzbTMyLXdhc2lgIGhpc3RvcmljYWxseSBwcm9kdWNlZCB0aGUgdGhyZWFkZWQgcGFja2FnZSwgc28gaXRcbiAqIG11c3QgbmV2ZXIgYmUgaW5mZXJyZWQgYXMgdGhyZWFkbGVzcyBtZXJlbHkgYmVjYXVzZSBpdHMgbmFtZSBsYWNrcyB0aGVcbiAqIGAtdGhyZWFkc2Agc3VmZml4LlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRXYXNpVGFyZ2V0KHRhcmdldDogc3RyaW5nIHwgUGljazxUYXJnZXQsICd0cmlwbGUnPik6IFdhc2lUYXJnZXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpVGFyZ2V0SGFzVGhyZWFkcyh0YXJnZXQ6IHN0cmluZyB8IFBpY2s8VGFyZ2V0LCAndHJpcGxlJz4pOiBib29sZWFuO1xuLyoqXG4gKiBBIHRyaXBsZSBpcyBhIHNwZWNpZmljIGZvcm1hdCBmb3Igc3BlY2lmeWluZyBhIHRhcmdldCBhcmNoaXRlY3R1cmUuXG4gKiBUcmlwbGVzIG1heSBiZSByZWZlcnJlZCB0byBhcyBhIHRhcmdldCB0cmlwbGUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdHVyZSBmb3IgdGhlIGFydGlmYWN0IHByb2R1Y2VkLCBhbmQgdGhlIGhvc3QgdHJpcGxlIHdoaWNoIGlzIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB0aGUgY29tcGlsZXIgaXMgcnVubmluZyBvbi5cbiAqIFRoZSBnZW5lcmFsIGZvcm1hdCBvZiB0aGUgdHJpcGxlIGlzIGA8YXJjaD48c3ViPi08dmVuZG9yPi08c3lzPi08YWJpPmAgd2hlcmU6XG4gKiAgIC0gYGFyY2hgID0gVGhlIGJhc2UgQ1BVIGFyY2hpdGVjdHVyZSwgZm9yIGV4YW1wbGUgYHg4Nl82NGAsIGBpNjg2YCwgYGFybWAsIGB0aHVtYmAsIGBtaXBzYCwgZXRjLlxuICogICAtIGBzdWJgID0gVGhlIENQVSBzdWItYXJjaGl0ZWN0dXJlLCBmb3IgZXhhbXBsZSBgYXJtYCBoYXMgYHY3YCwgYHY3c2AsIGB2NXRlYCwgZXRjLlxuICogICAtIGB2ZW5kb3JgID0gVGhlIHZlbmRvciwgZm9yIGV4YW1wbGUgYHVua25vd25gLCBgYXBwbGVgLCBgcGNgLCBgbnZpZGlhYCwgZXRjLlxuICogICAtIGBzeXNgID0gVGhlIHN5c3RlbSBuYW1lLCBmb3IgZXhhbXBsZSBgbGludXhgLCBgd2luZG93c2AsIGBkYXJ3aW5gLCBldGMuIG5vbmUgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGJhcmUtbWV0YWwgd2l0aG91dCBhbiBPUy5cbiAqICAgLSBgYWJpYCA9IFRoZSBBQkksIGZvciBleGFtcGxlIGBnbnVgLCBgYW5kcm9pZGAsIGBlYWJpYCwgZXRjLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZVRyaXBsZShyYXdUcmlwbGU6IHN0cmluZyk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFN5c3RlbURlZmF1bHRUYXJnZXQoKTogVGFyZ2V0O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0VGFyZ2V0TGlua2VyKHRhcmdldDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBMb2FkZXItZmlsZSBzdWZmaXggZm9yIGEgV0FTSSBmbGF2b3IsIGRlcml2ZWQgZnJvbSBpdHMgYHBsYXRmb3JtQXJjaEFCSWA6XG4gKiB0aGUgbGVnYWN5IHRocmVhZGVkIGZsYXZvciBrZWVwcyB0aGUgaGlzdG9yaWNhbCBgd2FzaWAgc3RlbVxuICogKGA8YmluYXJ5TmFtZT4ud2FzaS5janNgLCBgPGJpbmFyeU5hbWU+Lndhc2ktYnJvd3Nlci5qc2ApLCB3aGlsZSBlYWNoXG4gKiBkaXN0aW5jdGx5IG5hbWVkIG5vbi10aHJlYWRlZCBmbGF2b3IgZGVyaXZlcyBpdHMgb3duXG4gKiAoYDxiaW5hcnlOYW1lPi53YXNpcDEuY2pzYCwgYDxiaW5hcnlOYW1lPi53YXNpcDEtYnJvd3Nlci5qc2AsIC4uLikuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdhc2lMb2FkZXJTdWZmaXgocGxhdGZvcm1BcmNoQUJJOiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0YXJnZXRUb0VudlZhcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IHR5cGUgVGFyZ2V0IH0gZnJvbSAnLi90YXJnZXQuanMnO1xuZXhwb3J0IHR5cGUgVmFsdWVPZkNvbnN0QXJyYXk8VD4gPSBUW0V4Y2x1ZGU8a2V5b2YgVCwga2V5b2YgQXJyYXk8YW55Pj5dO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgU3VwcG9ydGVkUGFja2FnZU1hbmFnZXJzOiByZWFkb25seSBbXCJ5YXJuXCIsIFwicG5wbVwiXTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFN1cHBvcnRlZFRlc3RGcmFtZXdvcmtzOiByZWFkb25seSBbXCJhdmFcIl07XG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlciA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlcnM+O1xuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVGVzdEZyYW1ld29yayA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBTdXBwb3J0ZWRUZXN0RnJhbWV3b3Jrcz47XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJOYXBpQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBiaW5hcnkgdG8gYmUgZ2VuZXJhdGVkLCBkZWZhdWx0IHRvIGBpbmRleGBcbiAgICAgKi9cbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIG5wbSBwYWNrYWdlLCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHJvb3QgcGFja2FnZS5qc29uIG5hbWVcbiAgICAgKlxuICAgICAqIEFsd2F5cyBnaXZlbiBgQHNjb3BlL3BrZ2AgYW5kIGFyY2ggc3VmZml4IHdpbGwgYmUgYXBwZW5kZWQgbGlrZSBgQHNjb3BlL3BrZy1saW51eC1nbnUteDY0YFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFsbCB0YXJnZXRzIHRoZSBjcmF0ZSB3aWxsIGJlIGNvbXBpbGVkIGZvclxuICAgICAqL1xuICAgIHRhcmdldHM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbnBtIGNsaWVudCBwcm9qZWN0IHVzZXMuXG4gICAgICovXG4gICAgbnBtQ2xpZW50Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogZHRzIGhlYWRlciBwcmVwZW5kIHRvIHRoZSBnZW5lcmF0ZWQgZHRzIGZpbGVcbiAgICAgKi9cbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZHRzIGhlYWRlciBmaWxlIHBhdGggdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBnZW5lcmF0ZWQgZHRzIGZpbGVcbiAgICAgKiBpZiBib3RoIGR0c0hlYWRlciBhbmQgZHRzSGVhZGVyRmlsZSBhcmUgcHJvdmlkZWQsIGR0c0hlYWRlckZpbGUgd2lsbCBiZSB1c2VkXG4gICAgICovXG4gICAgZHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiB3YXNtIGNvbXBpbGF0aW9uIG9wdGlvbnNcbiAgICAgKi9cbiAgICB3YXNtPzoge1xuICAgICAgICAvKipcbiAgICAgICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWJBc3NlbWJseS9KYXZhU2NyaXB0X2ludGVyZmFjZS9NZW1vcnlcbiAgICAgICAgICogQGRlZmF1bHQgNDAwMCBwYWdlcyAoMjUwIE1pQiksIG9yIDEwMjQgcGFnZXMgKDY0IE1pQikgZm9yIHRoZSBkZWZlcnJlZCB3b3JrZXJkIGxvYWRlclxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdGlhbE1lbW9yeT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZWZhdWx0IDY1NTM2IHBhZ2VzICg0R2lCKVxuICAgICAgICAgKi9cbiAgICAgICAgbWF4aW11bU1lbW9yeT86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBgPHBhY2thZ2VOYW1lPi13YXNtMzItd2FzaWAgcGFja2FnZSBpcyBkZWNsYXJlZCBhc1xuICAgICAgICAgKiBhbiBgb3B0aW9uYWxEZXBlbmRlbmN5YCBvZiB0aGUgcm9vdCBwYWNrYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIG5hdGl2ZSB0YXJnZXRzIGFyZSBjb25maWd1cmVkIHRoZSBXQVNJIHBhY2thZ2UgaXMgYSBmYWxsYmFjayBmb3JcbiAgICAgICAgICogaG9zdHMgdGhhdCBjYW5ub3QgbG9hZCBhIGAubm9kZWAgYmluYXJ5LCBzbyBkZWNsYXJpbmcgaXQgd291bGQgbWFrZSBldmVyeVxuICAgICAgICAgKiBjb25zdW1lciBkb3dubG9hZCB0aGUgYC53YXNtYCBiaW5hcnkgdGhleSB3aWxsIG5ldmVyIGxvYWQuIEl0IGlzXG4gICAgICAgICAqIHRoZXJlZm9yZSBvbWl0dGVkIGJ5IGRlZmF1bHQgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIGluc3RhbGxlZCBvbiBkZW1hbmQgYnlcbiAgICAgICAgICogdGhlIGVudmlyb25tZW50cyB0aGF0IG5lZWQgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gV0FTSSBpcyB0aGUgb25seSBjb25maWd1cmVkIHRhcmdldCBpdCBpcyB0aGUgcHJpbWFyeSBhcnRpZmFjdCBhbmQgaXNcbiAgICAgICAgICogZGVjbGFyZWQgYnkgZGVmYXVsdC5cbiAgICAgICAgICpcbiAgICAgICAgICogU2V0IHRoaXMgZXhwbGljaXRseSB0byBvdmVycmlkZSBlaXRoZXIgZGVmYXVsdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZSB3aGVuIGV2ZXJ5IGNvbmZpZ3VyZWQgdGFyZ2V0IGlzIFdBU0ksIGZhbHNlIG90aGVyd2lzZVxuICAgICAgICAgKi9cbiAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmN5PzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyb3dzZXIgd2FzbSBiaW5kaW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGJyb3dzZXI/OiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZXRoZXIgdG8gdXNlIGZzIG1vZHVsZSBpbiBicm93c2VyXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZzPzogYm9vbGVhbjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byBpbml0aWFsaXplIHdhc20gYXN5bmNocm9ub3VzbHlcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXN5bmNJbml0PzogYm9vbGVhbjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byBpbmplY3QgYGJ1ZmZlcmAgdG8gZW1uYXBpIGNvbnRleHRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnVmZmVyPzogYm9vbGVhbjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byBlbWl0IGN1c3RvbSBldmVudHMgZm9yIGVycm9ycyBpbiB3b3JrZXJcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXJyb3JFdmVudD86IGJvb2xlYW47XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBiaW5hcnlOYW1lIGluc3RlYWRcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBwYWNrYWdlTmFtZSBpbnN0ZWFkXG4gICAgICovXG4gICAgcGFja2FnZT86IHtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSB0YXJnZXRzIGluc3RlYWRcbiAgICAgKi9cbiAgICB0cmlwbGVzPzoge1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciBlbmFibGUgZGVmYXVsdCB0YXJnZXRzXG4gICAgICAgICAqL1xuICAgICAgICBkZWZhdWx0czogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZGl0aW9uYWwgdGFyZ2V0cyB0byBiZSBjb21waWxlZCBmb3JcbiAgICAgICAgICovXG4gICAgICAgIGFkZGl0aW9uYWw/OiBzdHJpbmdbXTtcbiAgICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBDb21tb25QYWNrYWdlSnNvbkZpZWxkcyB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBrZXl3b3Jkcz86IHN0cmluZ1tdO1xuICAgIGF1dGhvcj86IHN0cmluZztcbiAgICBhdXRob3JzPzogc3RyaW5nW107XG4gICAgbGljZW5zZT86IHN0cmluZztcbiAgICBjcHU/OiBzdHJpbmdbXTtcbiAgICBvcz86IHN0cmluZ1tdO1xuICAgIGxpYmM/OiBzdHJpbmdbXTtcbiAgICBmaWxlcz86IHN0cmluZ1tdO1xuICAgIHJlcG9zaXRvcnk/OiBhbnk7XG4gICAgaG9tZXBhZ2U/OiBhbnk7XG4gICAgZW5naW5lcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHVibGlzaENvbmZpZz86IGFueTtcbiAgICBidWdzPzogYW55O1xuICAgIG5hcGk/OiBVc2VyTmFwaUNvbmZpZztcbiAgICB0eXBlPzogJ21vZHVsZScgfCAnY29tbW9uanMnO1xuICAgIHNjcmlwdHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIG1haW4/OiBzdHJpbmc7XG4gICAgbW9kdWxlPzogc3RyaW5nO1xuICAgIHR5cGVzPzogc3RyaW5nO1xuICAgIGJyb3dzZXI/OiBzdHJpbmc7XG4gICAgZXhwb3J0cz86IGFueTtcbiAgICBkZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGRldkRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGF2YT86IHtcbiAgICAgICAgdGltZW91dD86IHN0cmluZztcbiAgICB9O1xufVxuZXhwb3J0IHR5cGUgTmFwaUNvbmZpZyA9IFJlcXVpcmVkPFBpY2s8VXNlck5hcGlDb25maWcsICdiaW5hcnlOYW1lJyB8ICdwYWNrYWdlTmFtZScgfCAnbnBtQ2xpZW50Jz4+ICYgUGljazxVc2VyTmFwaUNvbmZpZywgJ3dhc20nIHwgJ2R0c0hlYWRlcicgfCAnZHRzSGVhZGVyRmlsZScgfCAnY29uc3RFbnVtJyB8ICdydW50aW1lU3RyaW5nRW51bSc+ICYge1xuICAgIHRhcmdldHM6IFRhcmdldFtdO1xuICAgIHBhY2thZ2VKc29uOiBDb21tb25QYWNrYWdlSnNvbkZpZWxkcztcbn07XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZWFkTmFwaUNvbmZpZyhwYXRoOiBzdHJpbmcsIGNvbmZpZ1BhdGg/OiBzdHJpbmcpOiBQcm9taXNlPE5hcGlDb25maWc+O1xuIiwiaW1wb3J0IHR5cGUgeyBCdWlsZE9wdGlvbnMgYXMgUmF3QnVpbGRPcHRpb25zIH0gZnJvbSAnLi4vZGVmL2J1aWxkLmpzJztcbmltcG9ydCB7IHR5cGUgVGFyZ2V0LCB0eXBlIENhcmdvV29ya3NwYWNlTWV0YWRhdGEgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG50eXBlIE91dHB1dEtpbmQgPSAnanMnIHwgJ2R0cycgfCAnbm9kZScgfCAnZXhlJyB8ICd3YXNtJztcbnR5cGUgT3V0cHV0ID0ge1xuICAgIGtpbmQ6IE91dHB1dEtpbmQ7XG4gICAgcGF0aDogc3RyaW5nO1xufTtcbnR5cGUgQnVpbGRPcHRpb25zID0gUmF3QnVpbGRPcHRpb25zICYge1xuICAgIGNhcmdvT3B0aW9ucz86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFdBU0lfQVJUSUZBQ1RfTUVUQURBVEFfUFJFRklYID0gXCIvLyBuYXBpLXJzLWFydGlmYWN0LW1ldGFkYXRhOlwiO1xudHlwZSBDYXJnb0NvbmZpZ0ZpbmdlcnByaW50ID0gcmVhZG9ubHkgW3BhdGg6IHN0cmluZywgaGFzaDogc3RyaW5nXTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldENhcmdvRGVwZW5kZW5jeUdyYXBoRmluZ2VycHJpbnQobWV0YWRhdGE6IENhcmdvV29ya3NwYWNlTWV0YWRhdGEsIHJvb3RQYWNrYWdlSWQ6IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFR5cGVEZWZDYWNoZUZvbGRlcihvcHRpb25zOiB7XG4gICAgdGFyZ2V0RGlyOiBzdHJpbmc7XG4gICAgY3JhdGVOYW1lOiBzdHJpbmc7XG4gICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgdGFyZ2V0VHJpcGxlOiBzdHJpbmc7XG4gICAgcHJvZmlsZTogc3RyaW5nO1xuICAgIGZlYXR1cmVzPzogc3RyaW5nW107XG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIG5vRGVmYXVsdEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBjYXJnb09wdGlvbnM/OiBzdHJpbmdbXTtcbiAgICBydXN0RmxhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICAgIGNhcmdvUHJvZmlsZUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG4gICAgY2FyZ29Db25maWc/OiBDYXJnb0NvbmZpZ0ZpbmdlcnByaW50W107XG4gICAgY2FyZ29EZXBlbmRlbmN5R3JhcGg/OiBzdHJpbmc7XG59KTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlV2FzaUNvbXBpbGVyRmxhZ3Mod2FzaVNka1BhdGg6IHN0cmluZywgd2FzaVRhcmdldDogc3RyaW5nLCBoYXNUaHJlYWRzOiBib29sZWFuLCBzaGVsbEVzY2FwZWRGbGFncz86IGJvb2xlYW4pOiB7XG4gICAgY29tcGlsZUZsYWdzOiBzdHJpbmc7XG4gICAgbGlua2VyRmxhZ3M6IHN0cmluZztcbn07XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVBcnRpZmFjdERlc3RpbmF0aW9uTmFtZShiaW5hcnlOYW1lOiBzdHJpbmcsIHRhcmdldDogVGFyZ2V0LCBzb3VyY2VOYW1lOiBzdHJpbmcsIHBsYXRmb3JtOiBib29sZWFuKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc2VsZWN0V2FzaUJyb3dzZXJUYXJnZXQoYnVpbGRUYXJnZXQ6IFRhcmdldCwgY29uZmlndXJlZFRhcmdldHM6IFRhcmdldFtdLCBlbWl0dGVkVGFyZ2V0czogVGFyZ2V0W10pOiBUYXJnZXQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVXYXNpQnJvd3NlckVudHJ5KHBhY2thZ2VOYW1lOiBzdHJpbmcsIHBsYXRmb3JtQXJjaEFCSTogc3RyaW5nLCBpZGVudHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlV2FzaURlZmVycmVkQmluZGluZ1R5cGVEZWYoYmluZGluZ01vZHVsZVNwZWNpZmllcjogc3RyaW5nLCBoYXNUeXBlRGVmOiBib29sZWFuKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJlcGFyZVdhc2lCaW5kaW5nVHlwZURlZihzb3VyY2U6IHN0cmluZywgc291cmNlUGF0aDogc3RyaW5nLCBkZXN0aW5hdGlvblBhdGg6IHN0cmluZywgaGFzVGhyZWFkczogYm9vbGVhbiwgcGFja2FnZVR5cGU/OiAnbW9kdWxlJyB8ICdjb21tb25qcycpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb2xsZWN0U3RhbGVXYXNpQnVpbGRPdXRwdXROYW1lcyhiaW5hcnlOYW1lOiBzdHJpbmcsIGJ1aWxkVGFyZ2V0OiBUYXJnZXQsIGNvbmZpZ3VyZWRUYXJnZXRzOiBUYXJnZXRbXSk6IFNldDxzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVtb3ZlV2FzbUN1c3RvbVNlY3Rpb24oYmluYXJ5OiBVaW50OEFycmF5LCBzZWN0aW9uTmFtZTogc3RyaW5nKTogVWludDhBcnJheTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGJ1aWxkUHJvamVjdChyYXdPcHRpb25zOiBCdWlsZE9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICB0YXNrOiBQcm9taXNlPE91dHB1dFtdPjtcbiAgICBhYm9ydDogKCkgPT4gdm9pZDtcbn0+O1xuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgY29tYmluYXRpb24gb2YgdGhlIGNyb3NzLWNvbXBpbGF0aW9uIHJlbGF0ZWQgZmxhZ3MuXG4gKlxuICogYC0tdXNlLWNyb3NzYCwgYC0tdXNlLW5hcGktY3Jvc3NgIGFuZCBgLS1jcm9zcy1jb21waWxlYCAoYC14YCkgYXJlIHRocmVlXG4gKiBtdXR1YWxseSBleGNsdXNpdmUgY3Jvc3MtY29tcGlsYXRpb24gbWVjaGFuaXNtczsgY29tYmluaW5nIGFueSB0d28gb2YgdGhlbVxuICogbGVhdmVzIGJvdGggYWN0aXZlIGF0IG9uY2UgYW5kIHByb2R1Y2VzIGJyb2tlbiBidWlsZHMsIHNvIGl0IGlzIHJlamVjdGVkXG4gKiB1cGZyb250IGJlZm9yZSBhbnkgc2lkZSBlZmZlY3QgKGxpa2UgYXV0by1pbnN0YWxsaW5nIGNhcmdvIGJpbmFyaWVzIG9yXG4gKiBkb3dubG9hZGluZyB0b29sY2hhaW5zKSBoYXBwZW5zLlxuICpcbiAqIGAtLWNyb3NzLWNvbXBpbGVgIHdpdGggYSBgd2luZG93cy1nbnVgIHRhcmdldCBpcyByZWplY3RlZCBhcyB3ZWxsOiBvbiBhXG4gKiBub24tV2luZG93cyBob3N0IGl0IHJvdXRlcyB0aGUgYnVpbGQgdG8gYGNhcmdvIHh3aW4gYnVpbGRgLCBidXRcbiAqIGBjYXJnby14d2luYCBvbmx5IHNldHMgdXAgTVNWQyB0b29sY2hhaW5zIOKAlCBmb3IgYHdpbmRvd3MtZ251YCB0YXJnZXRzIGl0XG4gKiBzaWxlbnRseSBkb2VzIG5vdGhpbmcgYW5kIHRoZSBidWlsZCBkaWVzIG11Y2ggbGF0ZXIgd2l0aCBhIGNyeXB0aWNcbiAqIGBgZXJyb3I6IGxpbmtlciBgeDg2XzY0LXc2NC1taW5ndzMyLWdjY2Agbm90IGZvdW5kYGAgdGhhdCBuZXZlciBtZW50aW9uc1xuICogYGNhcmdvLXh3aW5gLiBPbmx5IGFuIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRhcmdldCAoYC0tdGFyZ2V0YCBvclxuICogYENBUkdPX0JVSUxEX1RBUkdFVGApIGlzIGluc3BlY3RlZCwgc28gdGhpcyB2YWxpZGF0aW9uIG5ldmVyIGhhcyB0byBzcGF3blxuICogYHJ1c3RjIC12VmA7IGEgbm9uLVdpbmRvd3MgaG9zdCdzIGRlZmF1bHQgdGFyZ2V0IGNhbiBuZXZlciBiZVxuICogYHdpbmRvd3MtZ251YCBhbnl3YXkuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlQ3Jvc3NDb21waWxlRmxhZ3Mob3B0aW9uczoge1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIHRhcmdldD86IHN0cmluZztcbn0sIGhvc3RQbGF0Zm9ybT86IHN0cmluZyk6IHZvaWQ7XG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgYC0tdXNlLW5hcGktY3Jvc3NgIGNhbiBhY3R1YWxseSBoYW5kbGUgdGhlIHJlcXVlc3RlZCB0YXJnZXRcbiAqIG9uIHRoZSBjdXJyZW50IGhvc3QuIFRoZSBzdXBwb3J0ZWQgdGFyZ2V0IHNldCBpcyByZWFkIGZyb20gdGhlXG4gKiBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCBwYWNrYWdlLCBhbmQgdGhlIHByZS1idWlsdCB0b29sY2hhaW5zIG9ubHkgcnVuXG4gKiBvbiBMaW51eCB4NjQgYW5kIExpbnV4IGFybTY0IGhvc3RzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWxpZGF0ZU5hcGlDcm9zc1N1cHBvcnQodGFyZ2V0VHJpcGxlOiBzdHJpbmcsIGhvc3RQbGF0Zm9ybT86IHN0cmluZywgaG9zdEFyY2g/OiBzdHJpbmcpOiB2b2lkO1xuLyoqXG4gKiBDb21wdXRlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCByb3V0ZSBhIGAtLXVzZS1uYXBpLWNyb3NzYCBidWlsZFxuICogdGhyb3VnaCB0aGUgYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgdG9vbGNoYWluIGV4dHJhY3RlZCBhdFxuICogYHRvb2xjaGFpblBhdGhgLlxuICpcbiAqIEZvbGxvd3MgdGhlIHNhbWUgcnVsZSBhcyBgQnVpbGRlciNzZXRFbnZJZk5vdEV4aXN0c2A6IGEgdmFyaWFibGUgdGhlIHVzZXJcbiAqIGFscmVhZHkgc2V0IGluIGBlbnZgIHdpbnMgYW5kIGlzIG5vdCByZXR1cm5lZCwgYW5kIGEgcHJlc2VudC1idXQtZW1wdHlcbiAqIHZhcmlhYmxlIGNvdW50cyBhcyB1bnNldCAoZmFsc3kgc2VtYW50aWNzKS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgdGhlXG4gKiBjbGFuZy1zcGVjaWZpYyBgVEFSR0VUX0NGTEFHU2AvYFRBUkdFVF9DWFhGTEFHU2AsIHdoaWNoIHByZXBlbmQgdGhlIHN5c3Jvb3RcbiAqIGZsYWdzIHRvIHRoZSB1c2VyJ3MgdmFsdWUsIGFuZCBgUEFUSGAsIHdoaWNoIGFsd2F5cyBnZXRzIHRoZSB0b29sY2hhaW5cbiAqIGBiaW5gIGRpcmVjdG9yeSBwcmVwZW5kZWQuXG4gKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBuYXBpQ3Jvc3NUb29sY2hhaW5FbnZzKHRvb2xjaGFpblBhdGg6IHN0cmluZywgdGFyZ2V0VHJpcGxlOiBzdHJpbmcsIGVudj86IE5vZGVKUy5Qcm9jZXNzRW52KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZlcmlmeVdhc2lSZWFjdG9yKHdhc21QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZUpzQmluZGluZ09wdGlvbnMge1xuICAgIHBsYXRmb3JtPzogYm9vbGVhbjtcbiAgICBub0pzQmluZGluZz86IGJvb2xlYW47XG4gICAgaWRlbnRzOiBzdHJpbmdbXTtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBiaW5hcnlOYW1lOiBzdHJpbmc7XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogYHBsYXRmb3JtQXJjaEFCSWBzIG9mIHRoZSBkZWNsYXJlZCBXQVNJIHRhcmdldHMgaW4gZmFsbGJhY2sgcHJlZmVyZW5jZVxuICAgICAqIG9yZGVyICh0aHJlYWRlZCBmaXJzdCkuIERlZmF1bHRzIHRvIHRoZSBsZWdhY3kgYFsnd2FzbTMyLXdhc2knXWAgY2hhaW5cbiAgICAgKiB3aGVuIG9taXR0ZWQgb3IgZW1wdHkuIEdlbmVyYXRlZCBsb2FkZXJzIGV4cG9zZSB0aGVzZSBleGFjdCBpZGVudGl0aWVzXG4gICAgICogdGhyb3VnaCBgTkFQSV9SU19XQVNJX0ZMQVZPUmAuXG4gICAgICovXG4gICAgd2FzaUZsYXZvcnM/OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdyaXRlSnNCaW5kaW5nKG9wdGlvbnM6IFdyaXRlSnNCaW5kaW5nT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0IHwgdW5kZWZpbmVkPjtcbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVUeXBlRGVmT3B0aW9ucyB7XG4gICAgdHlwZURlZkRpcjogc3RyaW5nO1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgZHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICBjb25maWdEdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgY29uZmlnRHRzSGVhZGVyRmlsZT86IHN0cmluZztcbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICBjd2Q6IHN0cmluZztcbn1cbi8qKlxuICogV2FsayB0aGUgbmFwaS1kZXJpdmUgaW50ZXJtZWRpYXRlIHR5cGUtZGVmIGRpcmVjdG9yeSwgcmVuZGVyIGV2ZXJ5IGVudHJ5XG4gKiBpbnRvIFR5cGVTY3JpcHQgdmlhIHtAbGluayBwcm9jZXNzVHlwZURlZn0sIGFuZCByZXR1cm4gdGhlIGNvbmNhdGVuYXRlZFxuICogYC5kLnRzYCBzb3VyY2UgcGx1cyB0aGUgbGlzdCBvZiBpZGVudGlmaWVycyB0byByZS1leHBvcnQgZnJvbVxuICogYGluZGV4LmpzYC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlRGVmKG9wdGlvbnM6IEdlbmVyYXRlVHlwZURlZk9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICBleHBvcnRzOiBzdHJpbmdbXTtcbiAgICBkdHM6IHN0cmluZztcbiAgICBkdHNXaXRoVHlwZUltcG9ydHM6IHN0cmluZztcbn0+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBucG0gcGFja2FnZSBkaXJzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTnBtRGlyc09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERyeSBydW4gd2l0aG91dCB0b3VjaGluZyBmaWxlIHN5c3RlbVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkcnlSdW4/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0Q3JlYXRlTnBtRGlyc09wdGlvbnMob3B0aW9uczogQ3JlYXRlTnBtRGlyc09wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xufTtcbiIsImltcG9ydCB7IHR5cGUgQ3JlYXRlTnBtRGlyc09wdGlvbnMgfSBmcm9tICcuLi9kZWYvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZU1ldGEge1xuICAgICdkaXN0LXRhZ3MnOiB7XG4gICAgICAgIFtpbmRleDogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVOcG1EaXJzKHVzZXJPcHRpb25zOiBDcmVhdGVOcG1EaXJzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VOZXdDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgICQkcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICQkbmFtZT86IHN0cmluZztcbiAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG4gICAgbGljZW5zZTogc3RyaW5nO1xuICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICBlbmFibGVHaXRodWJBY3Rpb25zOiBib29sZWFuO1xuICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgICAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nO1xuICAgICAgICBsaWNlbnNlOiBzdHJpbmc7XG4gICAgICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgICAgICBlbmFibGVEZWZhdWx0VGFyZ2V0czogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlQWxsVGFyZ2V0czogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlR2l0aHViQWN0aW9uczogYm9vbGVhbjtcbiAgICAgICAgdGVzdEZyYW1ld29yazogc3RyaW5nO1xuICAgICAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBwcmUtY29uZmlndXJlZCBib2lsZXJwbGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ld09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXRoIHdoZXJlIHRoZSBOQVBJLVJTIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkLlxuICAgICAqL1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QsIGRlZmF1bHQgdG8gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBpZiBub3QgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIE5vZGUtQVBJIHZlcnNpb24gdG8gc3VwcG9ydFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNFxuICAgICAqL1xuICAgIG1pbk5vZGVBcGlWZXJzaW9uPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBPbmx5IHN1cHBvcnQgeWFybiA0LnggZm9yIG5vdy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICd5YXJuJ1xuICAgICAqL1xuICAgIHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIExpY2Vuc2UgZm9yIG9wZW4tc291cmNlZCBwcm9qZWN0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnTUlUJ1xuICAgICAqL1xuICAgIGxpY2Vuc2U/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQWxsIHRhcmdldHMgdGhlIGNyYXRlIHdpbGwgYmUgY29tcGlsZWQgZm9yLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICB0YXJnZXRzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgZGVmYXVsdCB0YXJnZXRzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlRGVmYXVsdFRhcmdldHM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIGFsbCB0YXJnZXRzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGVuYWJsZUFsbFRhcmdldHM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIHRoZSBgdHlwZS1kZWZgIGZlYXR1cmUgZm9yIHR5cGVzY3JpcHQgZGVmaW5pdGlvbnMgYXV0by1nZW5lcmF0aW9uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlVHlwZURlZj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBwcmVjb25maWd1cmVkIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlR2l0aHViQWN0aW9ucz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIEphdmFTY3JpcHQgdGVzdCBmcmFtZXdvcmsgdG8gdXNlLCBvbmx5IHN1cHBvcnQgYGF2YWAgZm9yIG5vd1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2F2YSdcbiAgICAgKi9cbiAgICB0ZXN0RnJhbWV3b3JrPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcnVuIHRoZSBjb21tYW5kIGluIGRyeS1ydW4gbW9kZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkcnlSdW4/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0TmV3T3B0aW9ucyhvcHRpb25zOiBOZXdPcHRpb25zKToge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXRoIHdoZXJlIHRoZSBOQVBJLVJTIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkLlxuICAgICAqL1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QsIGRlZmF1bHQgdG8gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBpZiBub3QgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIG1pbk5vZGVBcGlWZXJzaW9uOiBudW1iZXI7XG4gICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbiAgICBsaWNlbnNlOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogc3RyaW5nW107XG4gICAgZW5hYmxlRGVmYXVsdFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlQWxsVGFyZ2V0czogYm9vbGVhbjtcbiAgICBlbmFibGVUeXBlRGVmOiBib29sZWFuO1xuICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM6IGJvb2xlYW47XG4gICAgdGVzdEZyYW1ld29yazogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbn07XG4iLCJpbXBvcnQgeyB0eXBlIE5ld09wdGlvbnMgYXMgUmF3TmV3T3B0aW9ucyB9IGZyb20gJy4uL2RlZi9uZXcuanMnO1xudHlwZSBOZXdPcHRpb25zID0gUmVxdWlyZWQ8UmF3TmV3T3B0aW9ucz47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBHRU5FUkFURURfV0FTSV9CSU5ESU5HOiBSZWdFeHA7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGVDYXJnb1RvbWxOb2RlQXBpVmVyc2lvbihmaWxlUGF0aDogc3RyaW5nLCBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG5ld1Byb2plY3QodXNlck9wdGlvbnM6IFJhd05ld09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IHR5cGUgeyBOZXdPcHRpb25zIH07XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VQcmVQdWJsaXNoQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIHRhZ1N0eWxlOiBzdHJpbmc7XG4gICAgZ2hSZWxlYXNlOiBib29sZWFuO1xuICAgIGdoUmVsZWFzZU5hbWU/OiBzdHJpbmc7XG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaDogYm9vbGVhbjtcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgdGFnU3R5bGU6IHN0cmluZztcbiAgICAgICAgZ2hSZWxlYXNlOiBib29sZWFuO1xuICAgICAgICBnaFJlbGVhc2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGdoUmVsZWFzZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBVcGRhdGUgcGFja2FnZS5qc29uIGFuZCBjb3B5IGFkZG9ucyBpbnRvIHBlciBwbGF0Zm9ybSBwYWNrYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZVB1Ymxpc2hPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBnaXQgdGFnIHN0eWxlLCBgbnBtYCBvciBgbGVybmFgXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbGVybmEnXG4gICAgICovXG4gICAgdGFnU3R5bGU/OiAnbnBtJyB8ICdsZXJuYSc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBjcmVhdGUgR2l0SHViIHJlbGVhc2VcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEdpdEh1YiByZWxlYXNlIG5hbWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEV4aXN0aW5nIEdpdEh1YiByZWxlYXNlIGlkXG4gICAgICovXG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBza2lwIG9wdGlvbmFsRGVwZW5kZW5jaWVzIHBhY2thZ2VzIHB1Ymxpc2hcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRHJ5IHJ1biB3aXRob3V0IHRvdWNoaW5nIGZpbGUgc3lzdGVtXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRyeVJ1bj86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRQcmVQdWJsaXNoT3B0aW9ucyhvcHRpb25zOiBQcmVQdWJsaXNoT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICB0YWdTdHlsZTogc3RyaW5nO1xuICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBHaXRIdWIgcmVsZWFzZSBuYW1lXG4gICAgICovXG4gICAgZ2hSZWxlYXNlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBFeGlzdGluZyBHaXRIdWIgcmVsZWFzZSBpZFxuICAgICAqL1xuICAgIGdoUmVsZWFzZUlkPzogc3RyaW5nO1xuICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgZHJ5UnVuOiBib29sZWFuO1xufTtcbiIsImltcG9ydCB7IHR5cGUgUHJlUHVibGlzaE9wdGlvbnMgfSBmcm9tICcuLi9kZWYvcHJlLXB1Ymxpc2guanMnO1xuaW1wb3J0IHsgdHlwZSBDb21tb25QYWNrYWdlSnNvbkZpZWxkcywgdHlwZSBUYXJnZXQsIHR5cGUgVXNlck5hcGlDb25maWcgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG4vKipcbiAqIEJ1aWxkIHRoZSByb290IHBhY2thZ2UncyBgb3B0aW9uYWxEZXBlbmRlbmNpZXNgIG1hcC5cbiAqXG4gKiBBIFdBU0kgcGFja2FnZSBpcyBhIGZhbGxiYWNrIGZvciBob3N0cyB0aGF0IGNhbm5vdCBsb2FkIGEgYC5ub2RlYCBiaW5hcnksIGFuZFxuICogdGhlIGdlbmVyYXRlZCBiaW5kaW5nIGxvYWRlciBzZWxlY3RzIGl0IGF0IHJlcXVpcmUgdGltZSByYXRoZXIgdGhhbiBucG1cbiAqIHNlbGVjdGluZyBpdCBhdCBpbnN0YWxsIHRpbWUuIERlY2xhcmluZyBpdCBhcyBhbiBgb3B0aW9uYWxEZXBlbmRlbmN5YFxuICogYWxvbmdzaWRlIHRoZSBuYXRpdmUgcGFja2FnZXMgY2Fubm90IGV4cHJlc3MgXCJpbnN0YWxsIHRoaXMgb25seSB3aGVuIG5vdGhpbmdcbiAqIGVsc2UgbWF0Y2hlZFwiOiBucG0gZXZhbHVhdGVzIGV2ZXJ5IGVudHJ5IGluZGVwZW5kZW50bHksIHNvIGV2ZXJ5IGNvbnN1bWVyXG4gKiBkb3dubG9hZHMgYSBgLndhc21gIGJpbmFyeSB0aGV5IHdpbGwgbmV2ZXIgbG9hZC5cbiAqXG4gKiBJdCBpcyB0aGVyZWZvcmUgb25seSBkZWNsYXJlZCB3aGVuIFdBU0kgaXMgdGhlIG9ubHkgY29uZmlndXJlZCB0YXJnZXQsIHdoaWNoXG4gKiBtYWtlcyBpdCB0aGUgcHJpbWFyeSBhcnRpZmFjdCByYXRoZXIgdGhhbiBhIGZhbGxiYWNrLlxuICogYG5hcGkud2FzbS5vcHRpb25hbERlcGVuZGVuY3lgIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBpbiBib3RoIGRpcmVjdGlvbnMuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsZG93bi9yb2xsZG93bi9pc3N1ZXMvMTA1NTZcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVzb2x2ZVJvb3RPcHRpb25hbERlcGVuZGVuY2llcyh7IGV4aXN0aW5nLCBtYW5hZ2VkUGFja2FnZU5hbWVzLCBwYWNrYWdlTmFtZSwgdGFyZ2V0cywgdmVyc2lvbiwgd2FzbSwgfToge1xuICAgIGV4aXN0aW5nOiB1bmtub3duO1xuICAgIG1hbmFnZWRQYWNrYWdlTmFtZXM6IEl0ZXJhYmxlPHN0cmluZz47XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICB0YXJnZXRzOiBUYXJnZXRbXTtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgd2FzbT86IFVzZXJOYXBpQ29uZmlnWyd3YXNtJ107XG59KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcmVQdWJsaXNoKHVzZXJPcHRpb25zOiBQcmVQdWJsaXNoT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5pbnRlcmZhY2UgVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlIHtcbiAgICBleHBvcnRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwdWJsaXNoQ29uZmlnRXhwb3J0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGdlbmVyYXRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICBmaWxlczogVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlRmlsZXM7XG4gICAgd2FzbVNvdXJjZVBhdGg6IHN0cmluZztcbiAgICBtYXJrZXI6IHN0cmluZztcbiAgICBmb3J3YXJkaW5nTW9kdWxlOiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25VcGRhdGU6IHtcbiAgICAgICAgZmlsZXM/OiBzdHJpbmdbXTtcbiAgICB9O1xufVxuaW50ZXJmYWNlIFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZUZpbGVzIHtcbiAgICB3b3JrZXJkRW50cnk6IHN0cmluZztcbiAgICB3b3JrZXJkVHlwZURlZjogc3RyaW5nO1xuICAgIHdhc21FbnRyeTogc3RyaW5nO1xuICAgIHdhc21UeXBlRGVmOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgUm9vdFJlbGVhc2VNYXRlcmlhbGl6YXRpb25QbGFuIHtcbiAgICBwYWNrYWdlSnNvbjogQ29tbW9uUGFja2FnZUpzb25GaWVsZHM7XG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIG5vZGVFbmdpbmU/OiBzdHJpbmc7XG4gICAgZmFjYWRlPzogVGhyZWFkbGVzc1dhc2lSb290RmFjYWRlO1xuICAgIHN0YWxlR2VuZXJhdGVkRmlsZXM6IHN0cmluZ1tdO1xufVxuaW50ZXJmYWNlIFJlbGVhc2VQYWNrYWdlTWF0ZXJpYWxpemF0aW9uUGxhbiB7XG4gICAgdGFyZ2V0OiBUYXJnZXQ7XG4gICAgcGtnRGlyOiBzdHJpbmc7XG4gICAgcm9vdERpcjogc3RyaW5nO1xuICAgIHN0YWdlZFBrZ0Rpcj86IHN0cmluZztcbiAgICBwYWNrYWdlRmlsZXM6IHN0cmluZ1tdO1xuICAgIGRlY2xhcmF0aW9uRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICB1cGRhdGVNYW5pZmVzdDogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBDb21taXRQcmVQdWJsaXNoRmlsZVN5c3RlbVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgcmVsZWFzZVBhY2thZ2VQbGFuczogUmVsZWFzZVBhY2thZ2VNYXRlcmlhbGl6YXRpb25QbGFuW107XG4gICAgcm9vdERpcjogc3RyaW5nO1xuICAgIHJvb3RSZWxlYXNlUGxhbjogUm9vdFJlbGVhc2VNYXRlcmlhbGl6YXRpb25QbGFuO1xuICAgIHN0YWdlZFJvb3RNYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgc3RhZ2VkUm9vdERpcjogc3RyaW5nO1xuICAgIHRyYW5zYWN0aW9uUm9vdD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbW1pdFByZVB1Ymxpc2hGaWxlU3lzdGVtVHJhbnNhY3Rpb24oeyBwYWNrYWdlSnNvblBhdGgsIHJlbGVhc2VQYWNrYWdlUGxhbnMsIHJvb3REaXIsIHJvb3RSZWxlYXNlUGxhbiwgc3RhZ2VkUm9vdERpciwgc3RhZ2VkUm9vdE1hbmlmZXN0UGF0aCwgdHJhbnNhY3Rpb25Sb290LCB9OiBDb21taXRQcmVQdWJsaXNoRmlsZVN5c3RlbVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VSZW5hbWVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgJCRuYW1lPzogc3RyaW5nO1xuICAgIGJpbmFyeU5hbWU/OiBzdHJpbmc7XG4gICAgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgICAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGJpbmFyeU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG4gICAgICAgIHJlcG9zaXRvcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9O1xufVxuLyoqXG4gKiBSZW5hbWUgdGhlIE5BUEktUlMgcHJvamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBiaW5hcnkgbmFtZSAqLm5vZGUgZmlsZXNcbiAgICAgKi9cbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgcGFja2FnZSBuYW1lIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdDYXJnby50b21sJ1xuICAgICAqL1xuICAgIG1hbmlmZXN0UGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHJlcG9zaXRvcnkgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgZGVzY3JpcHRpb24gb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFJlbmFtZU9wdGlvbnMob3B0aW9uczogUmVuYW1lT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgYmluYXJ5IG5hbWUgKi5ub2RlIGZpbGVzXG4gICAgICovXG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHBhY2thZ2UgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgcmVwb3NpdG9yeSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgUmVuYW1lT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9yZW5hbWUuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVuYW1lUHJvamVjdCh1c2VyT3B0aW9uczogUmVuYW1lT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICB9O1xufVxuLyoqXG4gKiBDb21iaWxlIGJ1aWx0IGJpbmFyaWVzIGludG8gb25lIHVuaXZlcnNhbCBiaW5hcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbml2ZXJzYWxpemVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIGFsbCBidWlsdCBgLm5vZGVgIGZpbGVzIHB1dCwgc2FtZSBhcyBgLS1vdXRwdXQtZGlyYCBvZiBidWlsZCBjb21tYW5kXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnLi8nXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0VW5pdmVyc2FsaXplT3B0aW9ucyhvcHRpb25zOiBVbml2ZXJzYWxpemVPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgVW5pdmVyc2FsaXplT3B0aW9ucyB9IGZyb20gJy4uL2RlZi91bml2ZXJzYWxpemUuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdW5pdmVyc2FsaXplQmluYXJpZXModXNlck9wdGlvbnM6IFVuaXZlcnNhbGl6ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlVmVyc2lvbkNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgY3dkOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgICAgIG5wbURpcjogc3RyaW5nO1xuICAgIH07XG59XG4vKipcbiAqIFVwZGF0ZSB2ZXJzaW9uIGluIGNyZWF0ZWQgbnBtIHBhY2thZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbk9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIG5wbSBwYWNrYWdlcyBwdXRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICducG0nXG4gICAgICovXG4gICAgbnBtRGlyPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXBwbHlEZWZhdWx0VmVyc2lvbk9wdGlvbnMob3B0aW9uczogVmVyc2lvbk9wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBWZXJzaW9uT3B0aW9ucyB9IGZyb20gJy4uL2RlZi92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZlcnNpb24odXNlck9wdGlvbnM6IFZlcnNpb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiIsImltcG9ydCB7IEJhc2VBcnRpZmFjdHNDb21tYW5kIH0gZnJvbSAnLi4vZGVmL2FydGlmYWN0cy5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQmFzZUFydGlmYWN0c0NvbW1hbmQge1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlQnVpbGRDb21tYW5kIH0gZnJvbSAnLi4vZGVmL2J1aWxkLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEJ1aWxkQ29tbWFuZCBleHRlbmRzIEJhc2VCdWlsZENvbW1hbmQge1xuICAgIHBpcGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjYXJnb09wdGlvbnM6IHN0cmluZ1tdO1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VDcmVhdGVOcG1EaXJzQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9jcmVhdGUtbnBtLWRpcnMuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQ3JlYXRlTnBtRGlyc0NvbW1hbmQgZXh0ZW5kcyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VOZXdDb21tYW5kIH0gZnJvbSAnLi4vZGVmL25ldy5qcyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXROYXBpVmVyc2lvbkNob2ljZXMoKToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogaW1wb3J0KFwiLi4vdXRpbHMvdmVyc2lvbi5qc1wiKS5OYXBpVmVyc2lvbjtcbn1bXTtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE5ld0NvbW1hbmQgZXh0ZW5kcyBCYXNlTmV3Q29tbWFuZCB7XG4gICAgaW50ZXJhY3RpdmU6IGJvb2xlYW47XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPDAgfCAxPjtcbiAgICBwcml2YXRlIGZldGNoT3B0aW9ucztcbiAgICBwcml2YXRlIGZldGNoTmFtZTtcbiAgICBwcml2YXRlIGZldGNoTGljZW5zZTtcbiAgICBwcml2YXRlIGZldGNoTmFwaVZlcnNpb247XG4gICAgcHJpdmF0ZSBmZXRjaFRhcmdldHM7XG4gICAgcHJpdmF0ZSBmZXRjaFR5cGVEZWY7XG4gICAgcHJpdmF0ZSBmZXRjaEdpdGh1YkFjdGlvbnM7XG59XG4iLCJpbXBvcnQgeyBCYXNlUHJlUHVibGlzaENvbW1hbmQgfSBmcm9tICcuLi9kZWYvcHJlLXB1Ymxpc2guanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUHJlUHVibGlzaENvbW1hbmQgZXh0ZW5kcyBCYXNlUHJlUHVibGlzaENvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VSZW5hbWVDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3JlbmFtZS5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBSZW5hbWVDb21tYW5kIGV4dGVuZHMgQmFzZVJlbmFtZUNvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3VuaXZlcnNhbGl6ZS5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBVbml2ZXJzYWxpemVDb21tYW5kIGV4dGVuZHMgQmFzZVVuaXZlcnNhbGl6ZUNvbW1hbmQge1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEJhc2VWZXJzaW9uQ29tbWFuZCB9IGZyb20gJy4uL2RlZi92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFZlcnNpb25Db21tYW5kIGV4dGVuZHMgQmFzZVZlcnNpb25Db21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBDbGkgfSBmcm9tICdjbGlwYW5pb24nO1xuaW1wb3J0IHsgY29sbGVjdEFydGlmYWN0cyB9IGZyb20gJy4vYXBpL2FydGlmYWN0cy5qcyc7XG5pbXBvcnQgeyBidWlsZFByb2plY3QgfSBmcm9tICcuL2FwaS9idWlsZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVOcG1EaXJzIH0gZnJvbSAnLi9hcGkvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmltcG9ydCB7IG5ld1Byb2plY3QgfSBmcm9tICcuL2FwaS9uZXcuanMnO1xuaW1wb3J0IHsgcHJlUHVibGlzaCB9IGZyb20gJy4vYXBpL3ByZS1wdWJsaXNoLmpzJztcbmltcG9ydCB7IHJlbmFtZVByb2plY3QgfSBmcm9tICcuL2FwaS9yZW5hbWUuanMnO1xuaW1wb3J0IHsgdW5pdmVyc2FsaXplQmluYXJpZXMgfSBmcm9tICcuL2FwaS91bml2ZXJzYWxpemUuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vYXBpL3ZlcnNpb24uanMnO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYXJ0aWZhY3RzLmpzJztcbmltcG9ydCB7IEJ1aWxkQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQuanMnO1xuaW1wb3J0IHsgQ3JlYXRlTnBtRGlyc0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5pbXBvcnQgeyBOZXdDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9uZXcuanMnO1xuaW1wb3J0IHsgUHJlUHVibGlzaENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3ByZS1wdWJsaXNoLmpzJztcbmltcG9ydCB7IFJlbmFtZUNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3JlbmFtZS5qcyc7XG5pbXBvcnQgeyBVbml2ZXJzYWxpemVDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy91bml2ZXJzYWxpemUuanMnO1xuaW1wb3J0IHsgVmVyc2lvbkNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb24uanMnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY2xpOiBDbGk8aW1wb3J0KFwiY2xpcGFuaW9uXCIpLkJhc2VDb250ZXh0Pjtcbi8qKlxuICpcbiAqIEB1c2FnZVxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBjbGkgPSBuZXcgTmFwaUNsaSgpXG4gKlxuICogY2xpLmJ1aWxkKHtcbiAqICAgY3dkOiAnL3BhdGgvdG8veW91ci9wcm9qZWN0JyxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTmFwaUNsaSB7XG4gICAgYXJ0aWZhY3RzOiB0eXBlb2YgY29sbGVjdEFydGlmYWN0cztcbiAgICBuZXc6IHR5cGVvZiBuZXdQcm9qZWN0O1xuICAgIGJ1aWxkOiB0eXBlb2YgYnVpbGRQcm9qZWN0O1xuICAgIGNyZWF0ZU5wbURpcnM6IHR5cGVvZiBjcmVhdGVOcG1EaXJzO1xuICAgIHByZVB1Ymxpc2g6IHR5cGVvZiBwcmVQdWJsaXNoO1xuICAgIHJlbmFtZTogdHlwZW9mIHJlbmFtZVByb2plY3Q7XG4gICAgdW5pdmVyc2FsaXplOiB0eXBlb2YgdW5pdmVyc2FsaXplQmluYXJpZXM7XG4gICAgdmVyc2lvbjogdHlwZW9mIHZlcnNpb247XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVCdWlsZENvbW1hbmQoYXJnczogc3RyaW5nW10pOiBCdWlsZENvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVBcnRpZmFjdHNDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQXJ0aWZhY3RzQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUNyZWF0ZU5wbURpcnNDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQ3JlYXRlTnBtRGlyc0NvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVQcmVQdWJsaXNoQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFByZVB1Ymxpc2hDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlUmVuYW1lQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFJlbmFtZUNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVVbml2ZXJzYWxpemVDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogVW5pdmVyc2FsaXplQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVZlcnNpb25Db21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogVmVyc2lvbkNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVOZXdDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogTmV3Q29tbWFuZDtcbmV4cG9ydCB7IHBhcnNlVHJpcGxlIH0gZnJvbSAnLi91dGlscy90YXJnZXQuanMnO1xuZXhwb3J0IHsgdHlwZSBHZW5lcmF0ZVR5cGVEZWZPcHRpb25zLCB0eXBlIFdyaXRlSnNCaW5kaW5nT3B0aW9ucywgd3JpdGVKc0JpbmRpbmcsIGdlbmVyYXRlVHlwZURlZiwgfSBmcm9tICcuL2FwaS9idWlsZC5qcyc7XG5leHBvcnQgeyByZWFkTmFwaUNvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnLmpzJztcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyx1QkFBdUI7Q0FBQztPQUFVLENBQUMsT0FBTztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtDQUFFO0FBQUM7QUFDNUgsSUFBVyxtQkFBbUI7Q0FBQztPQUFVLENBQUM7Q0FBRztFQUFDO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtDQUFFO0FBQUM7Ozs7QUNEckUsSUFBVyxtQkFBbUI7Q0FBQztPQUFVLENBQUMsa0JBQWtCLE9BQU87Q0FBRztFQUFDO0VBQUk7RUFBSTtDQUFFO0FBQUM7Ozs7QUNBbEYsSUFBVyxtQkFBbUI7Q0FBQztPQUFXLENBQUMsT0FBTztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtF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