// vite.config.ts import { defineConfig, loadEnv } from "file:///D:/new_ops/vue3-moduls/node_modules/vite/dist/node/index.js"; import { resolve as resolve2 } from "path"; // build/getEnv.ts function wrapperEnv(envConf) { const ret = {}; for (const envName of Object.keys(envConf)) { let realName = envConf[envName].replace(/\\n/g, "\n"); realName = realName === "true" ? true : realName === "false" ? false : realName; if (envName === "VITE_PORT") realName = Number(realName); if (envName === "VITE_PROXY") { try { realName = JSON.parse(realName); } catch (error) { } } ret[envName] = realName; } return ret; } // build/proxy.ts function createProxy(list = []) { const ret = {}; for (const [prefix, target] of list) { const httpsRE = /^https:\/\//; const isHttps = httpsRE.test(target); ret[prefix] = { target, changeOrigin: true, ws: true, rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), // https is require secure=false ...isHttps ? { secure: false } : {} }; } return ret; } // build/plugins.ts import { resolve } from "path"; import { VitePWA } from "file:///D:/new_ops/vue3-moduls/node_modules/vite-plugin-pwa/dist/index.js"; import { visualizer } from "file:///D:/new_ops/vue3-moduls/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; import { createHtmlPlugin } from "file:///D:/new_ops/vue3-moduls/node_modules/vite-plugin-html/dist/index.mjs"; import { createSvgIconsPlugin } from "file:///D:/new_ops/vue3-moduls/node_modules/vite-plugin-svg-icons/dist/index.mjs"; import vue from "file:///D:/new_ops/vue3-moduls/node_modules/@vitejs/plugin-vue/dist/index.mjs"; import vueJsx from "file:///D:/new_ops/vue3-moduls/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; import eslintPlugin from "file:///D:/new_ops/vue3-moduls/node_modules/vite-plugin-eslint/dist/index.mjs"; import viteCompression from "file:///D:/new_ops/vue3-moduls/node_modules/vite-plugin-compression/dist/index.mjs"; import vueSetupExtend from "file:///D:/new_ops/vue3-moduls/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; import AutoImport from "file:///D:/new_ops/vue3-moduls/node_modules/unplugin-auto-import/dist/vite.js"; import Components from "file:///D:/new_ops/vue3-moduls/node_modules/unplugin-vue-components/dist/vite.mjs"; import { ElementPlusResolver } from "file:///D:/new_ops/vue3-moduls/node_modules/unplugin-vue-components/dist/resolvers.mjs"; import Icons from "file:///D:/new_ops/vue3-moduls/node_modules/unplugin-icons/dist/vite.mjs"; import IconsResolver from "file:///D:/new_ops/vue3-moduls/node_modules/unplugin-icons/dist/resolver.mjs"; var createVitePlugins = (viteEnv) => { const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; return [ vue(), // vue 可以使用 jsx/tsx 语法 vueJsx(), // esLint 报错信息显示在浏览器界面上 eslintPlugin(), // name 可以写在 script 标签上 vueSetupExtend({}), // 创建打包压缩配置 createCompression(viteEnv), // 注入变量到 html 文件 createHtmlPlugin({ inject: { data: { title: VITE_GLOB_APP_TITLE } } }), // 使用 svg 图标 createSvgIconsPlugin({ iconDirs: [resolve(process.cwd(), "src/assets/icons")], symbolId: "icon-[dir]-[name]" }), // element按需导入 AutoImport({ // 安装两行后你会发现在组件中不用再导入ref,reactive等 imports: ["vue", "vue-router"], dts: "src/auto-import.d.ts", // element resolvers: [ ElementPlusResolver({ importStyle: "sass" }), IconsResolver({ prefix: "Icon" }) ] }), Components({ // element resolvers: [ ElementPlusResolver({ importStyle: "sass" }), IconsResolver({ enabledCollections: ["ep"] }) ], // 默认存放位置 dts: "src/components.d.ts" }), Icons({ autoInstall: true }), // vitePWA VITE_PWA && createVitePwa(viteEnv), // 是否生成包预览,分析依赖包大小做优化处理 VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) ]; }; var createCompression = (viteEnv) => { const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; const compressList = VITE_BUILD_COMPRESS.split(","); const plugins = []; if (compressList.includes("gzip")) { plugins.push( viteCompression({ ext: ".gz", algorithm: "gzip", deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE }) ); } if (compressList.includes("brotli")) { plugins.push( viteCompression({ ext: ".br", algorithm: "brotliCompress", deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE }) ); } return plugins; }; var createVitePwa = (viteEnv) => { const { VITE_GLOB_APP_TITLE } = viteEnv; return VitePWA({ registerType: "autoUpdate", manifest: { name: VITE_GLOB_APP_TITLE, short_name: VITE_GLOB_APP_TITLE, theme_color: "#ffffff", icons: [ { src: "/logo.png", sizes: "192x192", type: "image/png" }, { src: "/logo.png", sizes: "512x512", type: "image/png" }, { src: "/logo.png", sizes: "512x512", type: "image/png", purpose: "any maskable" } ] } }); }; // package.json var package_default = { name: "yc_ops_admin_ts", private: true, version: "1.0.0", type: "module", scripts: { dev: "vite", serve: "vite", "build:dev": "vue-tsc && vite build --mode development", "build:test": "vue-tsc && vite build --mode test", "build:pro": "vue-tsc && vite build --mode production", "type:check": "vue-tsc --noEmit --skipLibCheck", preview: "npm run build:dev && vite preview", "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src", "lint:prettier": 'prettier --write "src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}"', "lint:stylelint": 'stylelint --cache --fix "**/*.{vue,less,postcss,css,scss}" --cache --cache-location node_modules/.cache/stylelint/', "lint:lint-staged": "lint-staged", prepare: "husky install", release: "standard-version", commit: "git add -A && czg && git push" }, dependencies: { "@element-plus/icons-vue": "^2.1.0", "@types/decimal.js": "^7.4.0", "@vueuse/core": "^10.1.2", "@wangeditor/editor": "^5.1.23", "@wangeditor/editor-for-vue": "^5.1.12", "async-validator": "^4.2.5", axios: "^1.4.0", "bwip-js": "^4.3.2", dayjs: "^1.11.9", decimal: "^0.0.2", "default-passive-events": "^2.0.0", "driver.js": "^0.9.8", "element-plus": "^2.7.3", "epic-designer": "1.0.1", "file-saver": "^2.0.5", "js-md5": "^0.7.3", jsbarcode: "^3.11.6", jsonpack: "^1.1.5", less: "^4.2.0", "lodash-es": "^4.17.21", mitt: "^3.0.0", "monaco-editor": "^0.50.0", nprogress: "^0.2.0", pinia: "^2.1.3", "pinia-plugin-persistedstate": "^3.1.0", "print-js": "^1.6.0", qs: "^6.11.2", sortablejs: "^1.15.0", vue: "^3.3.4", "vue-router": "^4.2.2", vuedraggable: "^4.1.0", "vxe-table": "^4.5.0-beta.10", "xe-utils": "^3.5.11", xlsx: "^0.18.5" }, devDependencies: { "@commitlint/cli": "^17.6.3", "@commitlint/config-conventional": "^17.6.3", "@iconify-json/ep": "^1.1.10", "@types/file-saver": "^2.0.5", "@types/js-md5": "^0.7.0", "@types/nprogress": "^0.2.0", "@types/qs": "^6.9.7", "@types/sortablejs": "^1.15.1", "@typescript-eslint/eslint-plugin": "^5.59.7", "@typescript-eslint/parser": "^5.59.7", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.0.1", autoprefixer: "^10.4.14", "cz-git": "^1.6.1", czg: "^1.6.1", eslint: "^8.41.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-vue": "^9.14.0", husky: "^8.0.3", "lint-staged": "^13.2.2", mockjs: "^1.1.0", postcss: "^8.4.23", "postcss-html": "^1.5.0", prettier: "^2.8.8", qrcode: "^1.5.3", "rollup-plugin-visualizer": "^5.9.0", sass: "^1.89.2", "standard-version": "^9.5.0", stylelint: "^15.6.2", "stylelint-config-html": "^1.1.0", "stylelint-config-recess-order": "^4.0.0", "stylelint-config-recommended-scss": "^12.0.0", "stylelint-config-recommended-vue": "^1.4.0", "stylelint-config-standard": "^33.0.0", "stylelint-config-standard-scss": "^9.0.0", typescript: "^5.0.2", unocss: "^66.3.3", "unplugin-auto-import": "^0.16.4", "unplugin-icons": "^0.16.3", "unplugin-vue-components": "^0.25.1", "unplugin-vue-setup-extend-plus": "^1.0.0", vite: "^4.3.9", "vite-plugin-compression": "^0.5.1", "vite-plugin-eslint": "^1.8.1", "vite-plugin-html": "^3.2.0", "vite-plugin-mock": "^3.0.2", "vite-plugin-monaco-editor": "^1.1.0", "vite-plugin-pwa": "^0.15.0", "vite-plugin-svg-icons": "^2.0.1", "vue-tsc": "^1.8.22" }, engines: { node: ">=16.0.0" }, browserslist: { production: [ "> 1%", "not dead", "not op_mini all" ], development: [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, config: { commitizen: { path: "node_modules/cz-git" } } }; // vite.config.ts import dayjs from "file:///D:/new_ops/vue3-moduls/node_modules/dayjs/dayjs.min.js"; var __vite_injected_original_dirname = "D:\\new_ops\\vue3-moduls"; var { dependencies, devDependencies, name, version } = package_default; var __APP_INFO__ = { pkg: { dependencies, devDependencies, name, version }, lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") }; var vite_config_default = defineConfig(({ mode }) => { const root = process.cwd(); const env = loadEnv(mode, root); const viteEnv = wrapperEnv(env); return { base: viteEnv.VITE_PUBLIC_PATH, root, resolve: { alias: { "@": resolve2(__vite_injected_original_dirname, "./src") } }, define: { __APP_INFO__: JSON.stringify(__APP_INFO__) }, css: { preprocessorOptions: { scss: { silenceDeprecations: ["legacy-js-api"], additionalData: `@use "@/styles/var.scss" as *;` } } }, server: { host: "0.0.0.0", port: viteEnv.VITE_PORT, open: viteEnv.VITE_OPEN, cors: true, // Load proxy configuration from .env.development proxy: createProxy(viteEnv.VITE_PROXY) }, plugins: createVitePlugins(viteEnv), esbuild: { //"console.log", pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [] }, build: { outDir: "dist", minify: "esbuild", // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log // minify: "terser", // terserOptions: { // compress: { // drop_console: viteEnv.VITE_DROP_CONSOLE, // drop_debugger: true // } // }, // 禁用 gzip 压缩大小报告,可略微减少打包时间 reportCompressedSize: false, // 规定触发警告的 chunk 大小 chunkSizeWarningLimit: 2e3, rollupOptions: { output: { // Static resource classification and packaging chunkFileNames: "assets/js/[name]-[hash].js", entryFileNames: "assets/js/[name]-[hash].js", assetFileNames: "assets/[ext]/[name]-[hash].[ext]" } } } }; }); export { vite_config_default as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFx2dWUzLW1vZHVsc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFx2dWUzLW1vZHVsc1xcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy92dWUzLW1vZHVscy92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgd3JhcHBlckVudiB9IGZyb20gXCIuL2J1aWxkL2dldEVudlwiO1xuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xuaW1wb3J0IHsgY3JlYXRlVml0ZVBsdWdpbnMgfSBmcm9tIFwiLi9idWlsZC9wbHVnaW5zXCI7XG5cbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5cbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcbmNvbnN0IF9fQVBQX0lORk9fXyA9IHtcbiAgICBwa2c6IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSxcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcbn07XG5cbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcbiAgICBjb25zdCByb290ID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xuICAgIGNvbnN0IHZpdGVFbnYgPSB3cmFwcGVyRW52KGVudik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiB2aXRlRW52LlZJVEVfUFVCTElDX1BBVEgsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgICAgXCJAXCI6IHJlc29sdmUoX19kaXJuYW1lLCBcIi4vc3JjXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXG4gICAgICAgIH0sXG4gICAgICAgIGNzczoge1xuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHNjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgc2lsZW5jZURlcHJlY2F0aW9uczogW1wibGVnYWN5LWpzLWFwaVwiXSxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyLnNjc3NcIiBhcyAqO2BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgaG9zdDogXCIwLjAuMC4wXCIsXG4gICAgICAgICAgICBwb3J0OiB2aXRlRW52LlZJVEVfUE9SVCxcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxuICAgICAgICAgICAgY29yczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIExvYWQgcHJveHkgY29uZmlndXJhdGlvbiBmcm9tIC5lbnYuZGV2ZWxvcG1lbnRcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXG4gICAgICAgIH0sXG4gICAgICAgIHBsdWdpbnM6IGNyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnYpLFxuICAgICAgICBlc2J1aWxkOiB7XG4gICAgICAgICAgICAvL1wiY29uc29sZS5sb2dcIixcbiAgICAgICAgICAgIHB1cmU6IHZpdGVFbnYuVklURV9EUk9QX0NPTlNPTEUgPyBbXCJjb25zb2xlLmxvZ1wiLCBcImRlYnVnZ2VyXCJdIDogW11cbiAgICAgICAgfSxcbiAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgIG91dERpcjogXCJkaXN0XCIsXG4gICAgICAgICAgICBtaW5pZnk6IFwiZXNidWlsZFwiLFxuICAgICAgICAgICAgLy8gZXNidWlsZCBcdTYyNTNcdTUzMDVcdTY2RjRcdTVGRUJcdUZGMENcdTRGNDZcdTY2MkZcdTRFMERcdTgwRkRcdTUzQkJcdTk2NjQgY29uc29sZS5sb2dcdUZGMEN0ZXJzZXJcdTYyNTNcdTUzMDVcdTYxNjJcdUZGMENcdTRGNDZcdTgwRkRcdTUzQkJcdTk2NjQgY29uc29sZS5sb2dcbiAgICAgICAgICAgIC8vIG1pbmlmeTogXCJ0ZXJzZXJcIixcbiAgICAgICAgICAgIC8vIHRlcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vIFx0Y29tcHJlc3M6IHtcbiAgICAgICAgICAgIC8vIFx0XHRkcm9wX2NvbnNvbGU6IHZpdGVFbnYuVklURV9EUk9QX0NPTlNPTEUsXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9kZWJ1Z2dlcjogdHJ1ZVxuICAgICAgICAgICAgLy8gXHR9XG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8gXHU3OTgxXHU3NTI4IGd6aXAgXHU1MzhCXHU3RjI5XHU1OTI3XHU1QzBGXHU2MkE1XHU1NDRBXHVGRjBDXHU1M0VGXHU3NTY1XHU1RkFFXHU1MUNGXHU1QzExXHU2MjUzXHU1MzA1XHU2NUY2XHU5NUY0XG4gICAgICAgICAgICByZXBvcnRDb21wcmVzc2VkU2l6ZTogZmFsc2UsXG4gICAgICAgICAgICAvLyBcdTg5QzRcdTVCOUFcdTg5RTZcdTUzRDFcdThCNjZcdTU0NEFcdTc2ODQgY2h1bmsgXHU1OTI3XHU1QzBGXG4gICAgICAgICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDIwMDAsXG4gICAgICAgICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXRpYyByZXNvdXJjZSBjbGFzc2lmaWNhdGlvbiBhbmQgcGFja2FnaW5nXG4gICAgICAgICAgICAgICAgICAgIGNodW5rRmlsZU5hbWVzOiBcImFzc2V0cy9qcy9bbmFtZV0tW2hhc2hdLmpzXCIsXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiBcImFzc2V0cy9qcy9bbmFtZV0tW2hhc2hdLmpzXCIsXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiBcImFzc2V0cy9bZXh0XS9bbmFtZV0tW2hhc2hdLltleHRdXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcdnVlMy1tb2R1bHNcXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcdnVlMy1tb2R1bHNcXFxcYnVpbGRcXFxcZ2V0RW52LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL3Z1ZTMtbW9kdWxzL2J1aWxkL2dldEVudi50c1wiO2ltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtb2RlID09PSBcImRldmVsb3BtZW50XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJwcm9kdWN0aW9uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJ0ZXN0XCI7XG59XG5cbi8qKlxuICogV2hldGhlciB0byBnZW5lcmF0ZSBwYWNrYWdlIHByZXZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuVklURV9SRVBPUlQgPT09IFwidHJ1ZVwiO1xufVxuXG4vLyBSZWFkIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHByb2Nlc3MuZW52XG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZW52TmFtZSBvZiBPYmplY3Qua2V5cyhlbnZDb25mKSkge1xuICAgICAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csIFwiXFxuXCIpO1xuICAgICAgICByZWFsTmFtZSA9IHJlYWxOYW1lID09PSBcInRydWVcIiA/IHRydWUgOiByZWFsTmFtZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiByZWFsTmFtZTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QT1JUXCIpIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QUk9YWVwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlYWxOYW1lID0gSlNPTi5wYXJzZShyZWFsTmFtZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgfVxuICAgICAgICByZXRbZW52TmFtZV0gPSByZWFsTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXQgdXNlciByb290IGRpcmVjdG9yeVxuICogQHBhcmFtIGRpciBmaWxlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3RQYXRoKC4uLmRpcjogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIC4uLmRpcik7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcdnVlMy1tb2R1bHNcXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcdnVlMy1tb2R1bHNcXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvdnVlMy1tb2R1bHMvYnVpbGQvcHJveHkudHNcIjtpbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCJ2aXRlXCI7XG5cbnR5cGUgUHJveHlJdGVtID0gW3N0cmluZywgc3RyaW5nXTtcblxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcblxudHlwZSBQcm94eVRhcmdldExpc3QgPSBSZWNvcmQ8c3RyaW5nLCBQcm94eU9wdGlvbnM+O1xuXG4vKipcbiAqIFx1NTIxQlx1NUVGQVx1NEVFM1x1NzQwNlx1RkYwQ1x1NzUyOFx1NEU4RVx1ODlFM1x1Njc5MCAuZW52LmRldmVsb3BtZW50IFx1NEVFM1x1NzQwNlx1OTE0RFx1N0Y2RVxuICogQHBhcmFtIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGxpc3Q6IFByb3h5TGlzdCA9IFtdKSB7XG4gICAgY29uc3QgcmV0OiBQcm94eVRhcmdldExpc3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcmVmaXgsIHRhcmdldF0gb2YgbGlzdCkge1xuICAgICAgICBjb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xuICAgICAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2h0dHAtcGFydHkvbm9kZS1odHRwLXByb3h5I29wdGlvbnNcbiAgICAgICAgcmV0W3ByZWZpeF0gPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cHJlZml4fWApLCBcIlwiKSxcbiAgICAgICAgICAgIC8vIGh0dHBzIGlzIHJlcXVpcmUgc2VjdXJlPWZhbHNlXG4gICAgICAgICAgICAuLi4oaXNIdHRwcyA/IHsgc2VjdXJlOiBmYWxzZSB9IDoge30pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcdnVlMy1tb2R1bHNcXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcdnVlMy1tb2R1bHNcXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy92dWUzLW1vZHVscy9idWlsZC9wbHVnaW5zLnRzXCI7aW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IFBsdWdpbk9wdGlvbiB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4taHRtbFwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcclxuaW1wb3J0IHZ1ZSBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI7XHJcbmltcG9ydCB2dWVKc3ggZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjtcclxuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XHJcbmltcG9ydCB2aXRlQ29tcHJlc3Npb24gZnJvbSBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI7XHJcbmltcG9ydCB2dWVTZXR1cEV4dGVuZCBmcm9tIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzL3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcclxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dWktXHU3RUM0XHU0RUY2IFx1NkJENFx1NTk4Mlx1OEJGNGFudC1kZXNpZ24tdnVlICBlbGVtZW50LXBsdXNcdTdCNDlcclxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcclxuLy8gZWxlbWVudFxyXG5pbXBvcnQgeyBFbGVtZW50UGx1c1Jlc29sdmVyIH0gZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVyc1wiO1xyXG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcclxuaW1wb3J0IEljb25zIGZyb20gXCJ1bnBsdWdpbi1pY29ucy92aXRlXCI7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gXCJ1bnBsdWdpbi1pY29ucy9yZXNvbHZlclwiO1xyXG5cclxuLyoqXHJcbiAqIFx1NTIxQlx1NUVGQSB2aXRlIFx1NjNEMlx1NEVGNlxyXG4gKiBAcGFyYW0gdml0ZUVudlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpdGVQbHVnaW5zID0gKHZpdGVFbnY6IFZpdGVFbnYpOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHZ1ZSgpLFxyXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcclxuICAgICAgICB2dWVKc3goKSxcclxuICAgICAgICAvLyBlc0xpbnQgXHU2MkE1XHU5NTE5XHU0RkUxXHU2MDZGXHU2NjNFXHU3OTNBXHU1NzI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3NTRDXHU5NzYyXHU0RTBBXHJcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXHJcbiAgICAgICAgLy8gbmFtZSBcdTUzRUZcdTRFRTVcdTUxOTlcdTU3Mjggc2NyaXB0IFx1NjgwN1x1N0I3RVx1NEUwQVxyXG4gICAgICAgIHZ1ZVNldHVwRXh0ZW5kKHt9KSxcclxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcclxuICAgICAgICBjcmVhdGVDb21wcmVzc2lvbih2aXRlRW52KSxcclxuICAgICAgICAvLyBcdTZDRThcdTUxNjVcdTUzRDhcdTkxQ0ZcdTUyMzAgaHRtbCBcdTY1ODdcdTRFRjZcclxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgICAgICAgICAgaW5qZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRpdGxlOiBWSVRFX0dMT0JfQVBQX1RJVExFIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIFx1NEY3Rlx1NzUyOCBzdmcgXHU1NkZFXHU2ODA3XHJcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgICAgICAgICBpY29uRGlyczogW3Jlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJzcmMvYXNzZXRzL2ljb25zXCIpXSxcclxuICAgICAgICAgICAgc3ltYm9sSWQ6IFwiaWNvbi1bZGlyXS1bbmFtZV1cIlxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIGVsZW1lbnRcdTYzMDlcdTk3MDBcdTVCRkNcdTUxNjVcclxuICAgICAgICBBdXRvSW1wb3J0KHtcclxuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcclxuICAgICAgICAgICAgaW1wb3J0czogW1widnVlXCIsIFwidnVlLXJvdXRlclwiXSxcclxuICAgICAgICAgICAgZHRzOiBcInNyYy9hdXRvLWltcG9ydC5kLnRzXCIsXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcclxuICAgICAgICAgICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxyXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBcIkljb25cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIENvbXBvbmVudHMoe1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xyXG4gICAgICAgICAgICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcih7IGltcG9ydFN0eWxlOiBcInNhc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogW1wiZXBcIl1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIC8vIFx1OUVEOFx1OEJBNFx1NUI1OFx1NjUzRVx1NEY0RFx1N0Y2RVxyXG4gICAgICAgICAgICBkdHM6IFwic3JjL2NvbXBvbmVudHMuZC50c1wiXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgSWNvbnMoe1xyXG4gICAgICAgICAgICBhdXRvSW5zdGFsbDogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIHZpdGVQV0FcclxuICAgICAgICBWSVRFX1BXQSAmJiBjcmVhdGVWaXRlUHdhKHZpdGVFbnYpLFxyXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxyXG4gICAgICAgIFZJVEVfUkVQT1JUICYmICh2aXN1YWxpemVyKHsgZmlsZW5hbWU6IFwic3RhdHMuaHRtbFwiLCBnemlwU2l6ZTogdHJ1ZSwgYnJvdGxpU2l6ZTogdHJ1ZSB9KSBhcyBQbHVnaW5PcHRpb24pXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XHJcbiAqIEBwYXJhbSB2aXRlRW52XHJcbiAqL1xyXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTID0gXCJub25lXCIsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xyXG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdChcIixcIik7XHJcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImd6aXBcIikpIHtcclxuICAgICAgICBwbHVnaW5zLnB1c2goXHJcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XHJcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmd6XCIsXHJcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06IFwiZ3ppcFwiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImJyb3RsaVwiKSkge1xyXG4gICAgICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcclxuICAgICAgICAgICAgICAgIGV4dDogXCIuYnJcIixcclxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJicm90bGlDb21wcmVzc1wiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBsdWdpbnM7XHJcbn07XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIFZpdGVQd2FcclxuICogQHBhcmFtIHZpdGVFbnZcclxuICovXHJcbmNvbnN0IGNyZWF0ZVZpdGVQd2EgPSAodml0ZUVudjogVml0ZUVudik6IFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdID0+IHtcclxuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcclxuICAgIHJldHVybiBWaXRlUFdBKHtcclxuICAgICAgICByZWdpc3RlclR5cGU6IFwiYXV0b1VwZGF0ZVwiLFxyXG4gICAgICAgIG1hbmlmZXN0OiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHNob3J0X25hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcclxuICAgICAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFwiMTkyeDE5MlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2UvcG5nXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBcIi9sb2dvLnBuZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlL3BuZ1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogXCIvbG9nby5wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBzaXplczogXCI1MTJ4NTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBwdXJwb3NlOiBcImFueSBtYXNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuIiwgIntcbiAgICBcIm5hbWVcIjogXCJ5Y19vcHNfYWRtaW5fdHNcIixcbiAgICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgICBcInZlcnNpb25cIjogXCIxLjAuMFwiLFxuICAgIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICAgIFwic2NyaXB0c1wiOiB7XG4gICAgICAgIFwiZGV2XCI6IFwidml0ZVwiLFxuICAgICAgICBcInNlcnZlXCI6IFwidml0ZVwiLFxuICAgICAgICBcImJ1aWxkOmRldlwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgXCJidWlsZDp0ZXN0XCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0XCIsXG4gICAgICAgIFwiYnVpbGQ6cHJvXCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSBwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcbiAgICAgICAgXCJwcmV2aWV3XCI6IFwibnBtIHJ1biBidWlsZDpkZXYgJiYgdml0ZSBwcmV2aWV3XCIsXG4gICAgICAgIFwibGludDplc2xpbnRcIjogXCJlc2xpbnQgLS1maXggLS1leHQgLmpzLC50cywudnVlIC4vc3JjXCIsXG4gICAgICAgIFwibGludDpwcmV0dGllclwiOiBcInByZXR0aWVyIC0td3JpdGUgXFxcInNyYy8qKi8qLntqcyx0cyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcbiAgICAgICAgXCJsaW50OnN0eWxlbGludFwiOiBcInN0eWxlbGludCAtLWNhY2hlIC0tZml4IFxcXCIqKi8qLnt2dWUsbGVzcyxwb3N0Y3NzLGNzcyxzY3NzfVxcXCIgLS1jYWNoZSAtLWNhY2hlLWxvY2F0aW9uIG5vZGVfbW9kdWxlcy8uY2FjaGUvc3R5bGVsaW50L1wiLFxuICAgICAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZFwiLFxuICAgICAgICBcInByZXBhcmVcIjogXCJodXNreSBpbnN0YWxsXCIsXG4gICAgICAgIFwicmVsZWFzZVwiOiBcInN0YW5kYXJkLXZlcnNpb25cIixcbiAgICAgICAgXCJjb21taXRcIjogXCJnaXQgYWRkIC1BICYmIGN6ZyAmJiBnaXQgcHVzaFwiXG4gICAgfSxcbiAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGVsZW1lbnQtcGx1cy9pY29ucy12dWVcIjogXCJeMi4xLjBcIixcbiAgICAgICAgXCJAdHlwZXMvZGVjaW1hbC5qc1wiOiBcIl43LjQuMFwiLFxuICAgICAgICBcIkB2dWV1c2UvY29yZVwiOiBcIl4xMC4xLjJcIixcbiAgICAgICAgXCJAd2FuZ2VkaXRvci9lZGl0b3JcIjogXCJeNS4xLjIzXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yLWZvci12dWVcIjogXCJeNS4xLjEyXCIsXG4gICAgICAgIFwiYXN5bmMtdmFsaWRhdG9yXCI6IFwiXjQuMi41XCIsXG4gICAgICAgIFwiYXhpb3NcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJid2lwLWpzXCI6IFwiXjQuMy4yXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRlZmF1bHQtcGFzc2l2ZS1ldmVudHNcIjogXCJeMi4wLjBcIixcbiAgICAgICAgXCJkcml2ZXIuanNcIjogXCJeMC45LjhcIixcbiAgICAgICAgXCJlbGVtZW50LXBsdXNcIjogXCJeMi43LjNcIixcbiAgICAgICAgXCJlcGljLWRlc2lnbmVyXCI6IFwiMS4wLjFcIixcbiAgICAgICAgXCJmaWxlLXNhdmVyXCI6IFwiXjIuMC41XCIsXG4gICAgICAgIFwianMtbWQ1XCI6IFwiXjAuNy4zXCIsXG4gICAgICAgIFwianNiYXJjb2RlXCI6IFwiXjMuMTEuNlwiLFxuICAgICAgICBcImpzb25wYWNrXCI6IFwiXjEuMS41XCIsXG4gICAgICAgIFwibGVzc1wiOiBcIl40LjIuMFwiLFxuICAgICAgICBcImxvZGFzaC1lc1wiOiBcIl40LjE3LjIxXCIsXG4gICAgICAgIFwibWl0dFwiOiBcIl4zLjAuMFwiLFxuICAgICAgICBcIm1vbmFjby1lZGl0b3JcIjogXCJeMC41MC4wXCIsXG4gICAgICAgIFwibnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwicGluaWFcIjogXCJeMi4xLjNcIixcbiAgICAgICAgXCJwaW5pYS1wbHVnaW4tcGVyc2lzdGVkc3RhdGVcIjogXCJeMy4xLjBcIixcbiAgICAgICAgXCJwcmludC1qc1wiOiBcIl4xLjYuMFwiLFxuICAgICAgICBcInFzXCI6IFwiXjYuMTEuMlwiLFxuICAgICAgICBcInNvcnRhYmxlanNcIjogXCJeMS4xNS4wXCIsXG4gICAgICAgIFwidnVlXCI6IFwiXjMuMy40XCIsXG4gICAgICAgIFwidnVlLXJvdXRlclwiOiBcIl40LjIuMlwiLFxuICAgICAgICBcInZ1ZWRyYWdnYWJsZVwiOiBcIl40LjEuMFwiLFxuICAgICAgICBcInZ4ZS10YWJsZVwiOiBcIl40LjUuMC1iZXRhLjEwXCIsXG4gICAgICAgIFwieGUtdXRpbHNcIjogXCJeMy41LjExXCIsXG4gICAgICAgIFwieGxzeFwiOiBcIl4wLjE4LjVcIlxuICAgIH0sXG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBjb21taXRsaW50L2NsaVwiOiBcIl4xNy42LjNcIixcbiAgICAgICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBpY29uaWZ5LWpzb24vZXBcIjogXCJeMS4xLjEwXCIsXG4gICAgICAgIFwiQHR5cGVzL2ZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJAdHlwZXMvanMtbWQ1XCI6IFwiXjAuNy4wXCIsXG4gICAgICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxuICAgICAgICBcIkB0eXBlcy9xc1wiOiBcIl42LjkuN1wiLFxuICAgICAgICBcIkB0eXBlcy9zb3J0YWJsZWpzXCI6IFwiXjEuMTUuMVwiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiXjUuNTkuN1wiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI6IFwiXjQuMi4zXCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiOiBcIl4zLjAuMVwiLFxuICAgICAgICBcImF1dG9wcmVmaXhlclwiOiBcIl4xMC40LjE0XCIsXG4gICAgICAgIFwiY3otZ2l0XCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiY3pnXCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiZXNsaW50XCI6IFwiXjguNDEuMFwiLFxuICAgICAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCJeOC44LjBcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjQuMi4xXCIsXG4gICAgICAgIFwiZXNsaW50LXBsdWdpbi12dWVcIjogXCJeOS4xNC4wXCIsXG4gICAgICAgIFwiaHVza3lcIjogXCJeOC4wLjNcIixcbiAgICAgICAgXCJsaW50LXN0YWdlZFwiOiBcIl4xMy4yLjJcIixcbiAgICAgICAgXCJtb2NranNcIjogXCJeMS4xLjBcIixcbiAgICAgICAgXCJwb3N0Y3NzXCI6IFwiXjguNC4yM1wiLFxuICAgICAgICBcInBvc3Rjc3MtaHRtbFwiOiBcIl4xLjUuMFwiLFxuICAgICAgICBcInByZXR0aWVyXCI6IFwiXjIuOC44XCIsXG4gICAgICAgIFwicXJjb2RlXCI6IFwiXjEuNS4zXCIsXG4gICAgICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuOS4wXCIsXG4gICAgICAgIFwic2Fzc1wiOiBcIl4xLjg5LjJcIixcbiAgICAgICAgXCJzdGFuZGFyZC12ZXJzaW9uXCI6IFwiXjkuNS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50XCI6IFwiXjE1LjYuMlwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctaHRtbFwiOiBcIl4xLjEuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjZXNzLW9yZGVyXCI6IFwiXjQuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC1zY3NzXCI6IFwiXjEyLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtdnVlXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1zdGFuZGFyZFwiOiBcIl4zMy4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkLXNjc3NcIjogXCJeOS4wLjBcIixcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMC4yXCIsXG4gICAgICAgIFwidW5vY3NzXCI6IFwiXjY2LjMuM1wiLFxuICAgICAgICBcInVucGx1Z2luLWF1dG8taW1wb3J0XCI6IFwiXjAuMTYuNFwiLFxuICAgICAgICBcInVucGx1Z2luLWljb25zXCI6IFwiXjAuMTYuM1wiLFxuICAgICAgICBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzXCI6IFwiXjAuMjUuMVwiLFxuICAgICAgICBcInVucGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmQtcGx1c1wiOiBcIl4xLjAuMFwiLFxuICAgICAgICBcInZpdGVcIjogXCJeNC4zLjlcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1jb21wcmVzc2lvblwiOiBcIl4wLjUuMVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWVzbGludFwiOiBcIl4xLjguMVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWh0bWxcIjogXCJeMy4yLjBcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1tb2NrXCI6IFwiXjMuMC4yXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tbW9uYWNvLWVkaXRvclwiOiBcIl4xLjEuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXB3YVwiOiBcIl4wLjE1LjBcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCJeMi4wLjFcIixcbiAgICAgICAgXCJ2dWUtdHNjXCI6IFwiXjEuOC4yMlwiXG4gICAgfSxcbiAgICBcImVuZ2luZXNcIjoge1xuICAgICAgICBcIm5vZGVcIjogXCI+PTE2LjAuMFwiXG4gICAgfSxcbiAgICBcImJyb3dzZXJzbGlzdFwiOiB7XG4gICAgICAgIFwicHJvZHVjdGlvblwiOiBbXG4gICAgICAgICAgICBcIj4gMSVcIixcbiAgICAgICAgICAgIFwibm90IGRlYWRcIixcbiAgICAgICAgICAgIFwibm90IG9wX21pbmkgYWxsXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJkZXZlbG9wbWVudFwiOiBbXG4gICAgICAgICAgICBcImxhc3QgMSBjaHJvbWUgdmVyc2lvblwiLFxuICAgICAgICAgICAgXCJsYXN0IDEgZmlyZWZveCB2ZXJzaW9uXCIsXG4gICAgICAgICAgICBcImxhc3QgMSBzYWZhcmkgdmVyc2lvblwiXG4gICAgICAgIF1cbiAgICB9LFxuICAgIFwiY29uZmlnXCI6IHtcbiAgICAgICAgXCJjb21taXRpemVuXCI6IHtcbiAgICAgICAgICAgIFwicGF0aFwiOiBcIm5vZGVfbW9kdWxlcy9jei1naXRcIlxuICAgICAgICB9XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUEwUCxTQUFTLGNBQWMsZUFBc0M7QUFDdlQsU0FBUyxXQUFBQSxnQkFBZTs7O0FDcUJqQixTQUFTLFdBQVcsU0FBOEI7QUFDckQsUUFBTSxNQUFXLENBQUM7QUFFbEIsYUFBVyxXQUFXLE9BQU8sS0FBSyxPQUFPLEdBQUc7QUFDeEMsUUFBSSxXQUFXLFFBQVEsT0FBTyxFQUFFLFFBQVEsUUFBUSxJQUFJO0FBQ3BELGVBQVcsYUFBYSxTQUFTLE9BQU8sYUFBYSxVQUFVLFFBQVE7QUFDdkUsUUFBSSxZQUFZO0FBQWEsaUJBQVcsT0FBTyxRQUFRO0FBQ3ZELFFBQUksWUFBWSxjQUFjO0FBQzFCLFVBQUk7QUFDQSxtQkFBVyxLQUFLLE1BQU0sUUFBUTtBQUFBLE1BQ2xDLFNBQVMsT0FBTztBQUFBLE1BQUM7QUFBQSxJQUNyQjtBQUNBLFFBQUksT0FBTyxJQUFJO0FBQUEsRUFDbkI7QUFDQSxTQUFPO0FBQ1g7OztBQ3pCTyxTQUFTLFlBQVksT0FBa0IsQ0FBQyxHQUFHO0FBQzlDLFFBQU0sTUFBdUIsQ0FBQztBQUM5QixhQUFXLENBQUMsUUFBUSxNQUFNLEtBQUssTUFBTTtBQUNqQyxVQUFNLFVBQVU7QUFDaEIsVUFBTSxVQUFVLFFBQVEsS0FBSyxNQUFNO0FBR25DLFFBQUksTUFBTSxJQUFJO0FBQUEsTUFDVjtBQUFBLE1BQ0EsY0FBYztBQUFBLE1BQ2QsSUFBSTtBQUFBLE1BQ0osU0FBUyxVQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQUE7QUFBQSxNQUUxRCxHQUFJLFVBQVUsRUFBRSxRQUFRLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDdkM7QUFBQSxFQUNKO0FB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