mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 03:34:40 +00:00
343 lines
39 KiB
JavaScript
343 lines
39 KiB
JavaScript
// vite.config.ts
|
|
import { defineConfig } from "file:///Users/sethburkart/Documents/Coding/betterseqta-plus/node_modules/vite/dist/node/index.js";
|
|
import { join, resolve } from "path";
|
|
|
|
// lib/patchPackage.ts
|
|
import path from "node:path";
|
|
import fs from "fs";
|
|
import "file:///Users/sethburkart/Documents/Coding/betterseqta-plus/node_modules/vite/dist/node/index.js";
|
|
import "file:///Users/sethburkart/Documents/Coding/betterseqta-plus/node_modules/@crxjs/vite-plugin/dist/index.mjs";
|
|
var manifestPath = path.resolve("dist/chrome/manifest.json");
|
|
function updateManifestPlugin() {
|
|
return {
|
|
name: "update-manifest-plugin",
|
|
enforce: "post",
|
|
closeBundle() {
|
|
forceDisableUseDynamicUrl();
|
|
},
|
|
configureServer(server) {
|
|
server.httpServer?.once("listening", () => {
|
|
const updated = forceDisableUseDynamicUrl();
|
|
if (updated) {
|
|
server.ws.send({ type: "full-reload" });
|
|
console.log("** updated **");
|
|
}
|
|
fs.watchFile(manifestPath, () => {
|
|
console.log("** watchFile ** ");
|
|
const manifestContents = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
if (manifestContents.web_accessible_resources.some((resource) => resource.use_dynamic_url)) {
|
|
const updated2 = forceDisableUseDynamicUrl();
|
|
if (updated2) {
|
|
server.ws.send({ type: "full-reload" });
|
|
console.log("** updated **");
|
|
}
|
|
}
|
|
});
|
|
});
|
|
},
|
|
writeBundle() {
|
|
console.log("### writeBundle ##");
|
|
forceDisableUseDynamicUrl();
|
|
}
|
|
};
|
|
}
|
|
function forceDisableUseDynamicUrl() {
|
|
if (!fs.existsSync(manifestPath)) {
|
|
return false;
|
|
}
|
|
const manifestContents = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
if (typeof manifestContents === "function" || !manifestContents.web_accessible_resources) return false;
|
|
if (manifestContents.web_accessible_resources.every((resource) => !resource.use_dynamic_url)) return false;
|
|
manifestContents.web_accessible_resources.forEach((resource) => {
|
|
if (resource.use_dynamic_url) resource.use_dynamic_url = false;
|
|
});
|
|
fs.writeFileSync(manifestPath, JSON.stringify(manifestContents, null, 2));
|
|
return true;
|
|
}
|
|
|
|
// lib/base64loader.ts
|
|
import fs2 from "fs";
|
|
import mime from "file:///Users/sethburkart/Documents/Coding/betterseqta-plus/node_modules/mime-types/index.js";
|
|
var base64Loader = {
|
|
name: "base64-loader",
|
|
transform(_, id) {
|
|
const [filePath, query] = id.split("?");
|
|
if (query !== "base64") return null;
|
|
const data = fs2.readFileSync(filePath, { encoding: "base64" });
|
|
const mimeType = mime.lookup(filePath);
|
|
const dataURL = `data:${mimeType};base64,${data}`;
|
|
return `export default '${dataURL}';`;
|
|
}
|
|
};
|
|
|
|
// vite.config.ts
|
|
import react from "file:///Users/sethburkart/Documents/Coding/betterseqta-plus/node_modules/@vitejs/plugin-react/dist/index.mjs";
|
|
import million from "file:///Users/sethburkart/Documents/Coding/betterseqta-plus/node_modules/million/dist/packages/compiler.mjs";
|
|
import { svelte } from "file:///Users/sethburkart/Documents/Coding/betterseqta-plus/node_modules/@sveltejs/vite-plugin-svelte/src/index.js";
|
|
|
|
// lib/createManifest.ts
|
|
function createManifest(manifest, browser) {
|
|
return {
|
|
manifest,
|
|
browser
|
|
};
|
|
}
|
|
|
|
// src/manifests/manifest.json
|
|
var manifest_default = {
|
|
manifest_version: 3,
|
|
name: "BetterSEQTA+",
|
|
version: "3.4.0.4",
|
|
description: "Enhance SEQTA Learn's usability and aesthetics! A fork of BetterSEQTA to continue development add add heaps more features!",
|
|
icons: {
|
|
"32": "resources/icons/icon-32.png",
|
|
"48": "resources/icons/icon-48.png",
|
|
"64": "resources/icons/icon-64.png"
|
|
},
|
|
action: {
|
|
browser_style: true,
|
|
default_popup: "interface/index.html#settings",
|
|
default_icon: {
|
|
"32": "resources/icons/icon-32.png",
|
|
"48": "resources/icons/icon-48.png",
|
|
"64": "resources/icons/icon-64.png"
|
|
}
|
|
},
|
|
permissions: ["tabs", "notifications", "storage"],
|
|
host_permissions: ["https://newsapi.org/", "*://*/*"],
|
|
background: {
|
|
service_worker: "background.ts"
|
|
},
|
|
content_security_policy: {
|
|
extension_pages: "script-src 'self'; object-src 'self'"
|
|
},
|
|
content_scripts: [
|
|
{
|
|
matches: ["*://*/*"],
|
|
js: ["SEQTA.ts"],
|
|
run_at: "document_start"
|
|
}
|
|
],
|
|
web_accessible_resources: [
|
|
{
|
|
resources: ["*://*/*"],
|
|
matches: ["*://*/*"]
|
|
},
|
|
{
|
|
resources: ["resources/icons/*"],
|
|
matches: ["*://*/*"]
|
|
},
|
|
{
|
|
resources: ["seqta/utils/migration/migrate.html"],
|
|
matches: ["*://*/*"]
|
|
}
|
|
]
|
|
};
|
|
|
|
// src/manifests/chrome.ts
|
|
var chrome = createManifest(manifest_default, "chrome");
|
|
|
|
// src/manifests/brave.ts
|
|
var brave = createManifest(manifest_default, "brave");
|
|
|
|
// src/manifests/edge.ts
|
|
var edge = createManifest(manifest_default, "edge");
|
|
|
|
// package.json
|
|
var package_default = {
|
|
name: "betterseqtaplus",
|
|
version: "3.4.1",
|
|
type: "module",
|
|
description: "Enhance SEQTA Learn's usability and aesthetics! A fork of BetterSEQTA to continue development, while incorporating a plethora of new and improved features!",
|
|
browserslist: "> 0.5%, last 2 versions, not dead",
|
|
scripts: {
|
|
dev: "cross-env MODE=chrome vite dev",
|
|
"dev:firefox": "cross-env MODE=firefox vite build --watch",
|
|
build: "cross-env MODE=chrome vite build && cross-env MODE=firefox vite build",
|
|
"build:chrome": "cross-env MODE=chrome vite build",
|
|
"build:firefox": "cross-env MODE=firefox vite build",
|
|
"build:safari": "cross-env MODE=safari vite build",
|
|
"convert:safari": "xcrun safari-web-extension-converter dist/safari --project-location . --app-name $npm_package_name-safari",
|
|
release: "gh release create $npm_package_name@$npm_package_version ./dist/*.zip --generate-notes",
|
|
publish: "bun lib/publish.js --b",
|
|
zip: "bedframe zip"
|
|
},
|
|
targets: {
|
|
prod: {
|
|
sourceMap: {
|
|
inline: false
|
|
}
|
|
}
|
|
},
|
|
keywords: [],
|
|
author: {
|
|
name: "SethBurkart123",
|
|
email: "betterseqta@betterseqta.com",
|
|
url: "https://github.com/BetterSEQTA/BetterSEQTA-plus"
|
|
},
|
|
license: "MIT",
|
|
devDependencies: {
|
|
"@crxjs/vite-plugin": "2.0.0-beta.25",
|
|
"@types/mime-types": "^2.1.4",
|
|
"@vitejs/plugin-react-swc": "^3.7.0",
|
|
"cross-env": "^7.0.3",
|
|
eslint: "^8.57.0",
|
|
glob: "^11.0.0",
|
|
"mime-types": "^2.1.35",
|
|
prettier: "^3.3.3",
|
|
process: "^0.11.10",
|
|
sass: "^1.78.0",
|
|
"sass-loader": "^13.3.3",
|
|
semver: "^7.6.3",
|
|
url: "^0.11.4"
|
|
},
|
|
dependencies: {
|
|
"@bedframe/cli": "^0.0.85",
|
|
"@codemirror/lang-css": "^6.3.0",
|
|
"@codemirror/lang-less": "^6.0.2",
|
|
"@codemirror/theme-one-dark": "^6.1.2",
|
|
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
"@tailwindcss/forms": "^0.5.9",
|
|
"@tsconfig/svelte": "^5.0.4",
|
|
"@types/chrome": "^0.0.270",
|
|
"@types/color": "^3.0.6",
|
|
"@types/dompurify": "^3.0.5",
|
|
"@types/lodash": "^4.17.7",
|
|
"@types/node": "^20.16.5",
|
|
"@types/react": "17",
|
|
"@types/react-dom": "17",
|
|
"@types/sortablejs": "^1.15.8",
|
|
"@types/uuid": "^9.0.8",
|
|
"@types/webextension-polyfill": "^0.10.7",
|
|
"@uiw/codemirror-extensions-color": "^4.23.3",
|
|
"@uiw/codemirror-theme-github": "^4.23.3",
|
|
"@vitejs/plugin-react": "^4.3.1",
|
|
autoprefixer: "^10.4.20",
|
|
"caniuse-lite": "^1.0.30001684",
|
|
classnames: "^2.5.1",
|
|
codemirror: "^6.0.1",
|
|
color: "^4.2.3",
|
|
dompurify: "^3.1.6",
|
|
"embla-carousel-autoplay": "^8.3.1",
|
|
"embla-carousel-svelte": "^8.3.1",
|
|
"fuse.js": "^7.0.0",
|
|
idb: "^8.0.0",
|
|
kolorist: "^1.8.0",
|
|
localforage: "^1.10.0",
|
|
lodash: "^4.17.21",
|
|
million: "^3.1.11",
|
|
motion: "^11.12.0",
|
|
postcss: "^8.4.45",
|
|
"publish-browser-extension": "^2.2.1",
|
|
react: "17",
|
|
"react-best-gradient-color-picker": "^3.0.10",
|
|
"react-dom": "17",
|
|
sortablejs: "^1.15.3",
|
|
svelte: "^5.1.9",
|
|
tailwindcss: "^3.4.11",
|
|
typescript: "^5.6.2",
|
|
uuid: "^9.0.1",
|
|
vite: "^5.4.4",
|
|
"webextension-polyfill": "^0.10.0"
|
|
}
|
|
};
|
|
|
|
// src/manifests/firefox.ts
|
|
var updatedFirefoxManifest = {
|
|
...manifest_default,
|
|
background: {
|
|
scripts: [manifest_default.background.service_worker]
|
|
},
|
|
action: {
|
|
"default_popup": "interface/index.html#settings"
|
|
},
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: package_default.author.email
|
|
}
|
|
}
|
|
};
|
|
var firefox = createManifest(updatedFirefoxManifest, "firefox");
|
|
|
|
// src/manifests/opera.ts
|
|
var opera = createManifest(manifest_default, "opera");
|
|
|
|
// src/manifests/safari.ts
|
|
var updatedSafariManifest = {
|
|
...manifest_default,
|
|
browser_specific_settings: {
|
|
safari: {
|
|
strict_min_version: "15.4",
|
|
strict_max_version: "*"
|
|
}
|
|
// ^^^ https://developer.apple.com/documentation/safariservices/safari_web_extensions/optimizing_your_web_extension_for_safari#3743239
|
|
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings#safari_properties
|
|
}
|
|
};
|
|
var safari = createManifest(updatedSafariManifest, "safari");
|
|
|
|
// vite.config.ts
|
|
import { crx } from "file:///Users/sethburkart/Documents/Coding/betterseqta-plus/node_modules/@crxjs/vite-plugin/dist/index.mjs";
|
|
var __vite_injected_original_dirname = "/Users/sethburkart/Documents/Coding/betterseqta-plus";
|
|
var targets = [
|
|
chrome,
|
|
brave,
|
|
edge,
|
|
firefox,
|
|
opera,
|
|
safari
|
|
];
|
|
var mode = process.env.MODE || "chrome";
|
|
var vite_config_default = defineConfig({
|
|
plugins: [
|
|
base64Loader,
|
|
react(),
|
|
svelte({
|
|
emitCss: false
|
|
}),
|
|
million.vite({ auto: true }),
|
|
//MillionLint.vite(), /* enable for testing and debugging performance */
|
|
crx({
|
|
manifest: targets.find((t) => t.browser === mode.toLowerCase())?.manifest ?? chrome.manifest,
|
|
browser: mode.toLowerCase() === "firefox" ? "firefox" : "chrome"
|
|
}),
|
|
updateManifestPlugin()
|
|
],
|
|
root: resolve(__vite_injected_original_dirname, "./src"),
|
|
resolve: {
|
|
alias: {
|
|
"@": resolve(__vite_injected_original_dirname, "./src")
|
|
}
|
|
},
|
|
server: {
|
|
port: 5173,
|
|
hmr: {
|
|
host: "localhost",
|
|
protocol: "ws",
|
|
port: 5173
|
|
}
|
|
},
|
|
css: {
|
|
preprocessorOptions: {
|
|
scss: {
|
|
api: "modern"
|
|
}
|
|
}
|
|
},
|
|
build: {
|
|
outDir: resolve(__vite_injected_original_dirname, "dist", mode),
|
|
emptyOutDir: false,
|
|
minify: false,
|
|
rollupOptions: {
|
|
input: {
|
|
settings: join(__vite_injected_original_dirname, "src", "interface", "index.html"),
|
|
migration: join(__vite_injected_original_dirname, "src", "seqta", "utils", "migration", "migrate.html")
|
|
}
|
|
}
|
|
}
|
|
});
|
|
export {
|
|
vite_config_default as default
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAibGliL3BhdGNoUGFja2FnZS50cyIsICJsaWIvYmFzZTY0bG9hZGVyLnRzIiwgImxpYi9jcmVhdGVNYW5pZmVzdC50cyIsICJzcmMvbWFuaWZlc3RzL21hbmlmZXN0Lmpzb24iLCAic3JjL21hbmlmZXN0cy9jaHJvbWUudHMiLCAic3JjL21hbmlmZXN0cy9icmF2ZS50cyIsICJzcmMvbWFuaWZlc3RzL2VkZ2UudHMiLCAicGFja2FnZS5qc29uIiwgInNyYy9tYW5pZmVzdHMvZmlyZWZveC50cyIsICJzcmMvbWFuaWZlc3RzL29wZXJhLnRzIiwgInNyYy9tYW5pZmVzdHMvc2FmYXJpLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy92aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IHVwZGF0ZU1hbmlmZXN0UGx1Z2luIH0gZnJvbSAnLi9saWIvcGF0Y2hQYWNrYWdlJztcbmltcG9ydCB7IGJhc2U2NExvYWRlciB9IGZyb20gJy4vbGliL2Jhc2U2NGxvYWRlcic7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkVGFyZ2V0IH0gZnJvbSAnLi9saWIvdHlwZXMnO1xuXG5pbXBvcnQgcmVhY3QgZnJvbSAnQHZpdGVqcy9wbHVnaW4tcmVhY3QnO1xuaW1wb3J0IG1pbGxpb24gZnJvbSBcIm1pbGxpb24vY29tcGlsZXJcIjtcbi8vaW1wb3J0IE1pbGxpb25MaW50IGZyb20gJ0BtaWxsaW9uL2xpbnQnO1xuXG5pbXBvcnQgeyBzdmVsdGUgfSBmcm9tICdAc3ZlbHRlanMvdml0ZS1wbHVnaW4tc3ZlbHRlJ1xuXG5pbXBvcnQgeyBjaHJvbWUgfSBmcm9tICcuL3NyYy9tYW5pZmVzdHMvY2hyb21lJztcbmltcG9ydCB7IGJyYXZlIH0gZnJvbSAnLi9zcmMvbWFuaWZlc3RzL2JyYXZlJztcbmltcG9ydCB7IGVkZ2UgfSBmcm9tICcuL3NyYy9tYW5pZmVzdHMvZWRnZSc7XG5pbXBvcnQgeyBmaXJlZm94IH0gZnJvbSAnLi9zcmMvbWFuaWZlc3RzL2ZpcmVmb3gnO1xuaW1wb3J0IHsgb3BlcmEgfSBmcm9tICcuL3NyYy9tYW5pZmVzdHMvb3BlcmEnO1xuaW1wb3J0IHsgc2FmYXJpIH0gZnJvbSAnLi9zcmMvbWFuaWZlc3RzL3NhZmFyaSc7XG5pbXBvcnQgeyBjcnggfSBmcm9tICdAY3J4anMvdml0ZS1wbHVnaW4nO1xuXG5jb25zdCB0YXJnZXRzOiBCdWlsZFRhcmdldFtdID0gW1xuICBjaHJvbWUsIGJyYXZlLCBlZGdlLCBmaXJlZm94LCBvcGVyYSwgc2FmYXJpXG5dXG5cbmNvbnN0IG1vZGUgPSBwcm9jZXNzLmVudi5NT0RFIHx8ICdjaHJvbWUnO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwbHVnaW5zOiBbXG4gICAgYmFzZTY0TG9hZGVyLFxuICAgIHJlYWN0KCksXG4gICAgc3ZlbHRlKHtcbiAgICAgIGVtaXRDc3M6IGZhbHNlXG4gICAgfSksXG4gICAgbWlsbGlvbi52aXRlKHsgYXV0bzogdHJ1ZSB9KSxcbiAgICAvL01pbGxpb25MaW50LnZpdGUoKSwgLyogZW5hYmxlIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgcGVyZm9ybWFuY2UgKi9cbiAgICBjcngoe1xuICAgICAgbWFuaWZlc3Q6IHRhcmdldHMuZmluZCh0ID0+IHQuYnJvd3NlciA9PT0gbW9kZS50b0xvd2VyQ2FzZSgpKT8ubWFuaWZlc3QgPz8gY2hyb21lLm1hbmlmZXN0LFxuICAgICAgYnJvd3NlcjogbW9kZS50b0xvd2VyQ2FzZSgpID09PSBcImZpcmVmb3hcIiA/IFwiZmlyZWZveFwiIDogXCJjaHJvbWVcIlxuICAgIH0pLFxuICAgIHVwZGF0ZU1hbmlmZXN0UGx1Z2luKClcbiAgXSxcbiAgcm9vdDogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYycpLFxuICByZXNvbHZlOiB7XG4gICAgYWxpYXM6IHtcbiAgICAgICdAJzogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYycpXG4gICAgfSxcbiAgfSxcbiAgc2VydmVyOiB7XG4gICAgcG9ydDogNTE3MyxcbiAgICBobXI6IHtcbiAgICAgIGhvc3Q6IFwibG9jYWxob3N0XCIsXG4gICAgICBwcm90b2NvbDogXCJ3c1wiLFxuICAgICAgcG9ydDogNTE3M1xuICAgIH1cbiAgfSxcbiAgY3NzOiB7XG4gICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgc2Nzczoge1xuICAgICAgICBhcGk6ICdtb2Rlcm4nXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBidWlsZDoge1xuICAgIG91dERpcjogcmVzb2x2ZShfX2Rpcm5hbWUsICdkaXN0JywgbW9kZSksXG4gICAgZW1wdHlPdXREaXI6IGZhbHNlLFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgc2V0dGluZ3M6IGpvaW4oX19kaXJuYW1lLCAnc3JjJywgJ2ludGVyZmFjZScsICdpbmRleC5odG1sJyksXG4gICAgICAgIG1pZ3JhdGlvbjogam9pbihfX2Rpcm5hbWUsICdzcmMnLCAnc2VxdGEnLCAndXRpbHMnLCAnbWlncmF0aW9uJywgJ21pZ3JhdGUuaHRtbCcpXG4gICAgICB9XG4gICAgfVxuICB9XG59KTsiLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9zZXRoYnVya2FydC9Eb2N1bWVudHMvQ29kaW5nL2JldHRlcnNlcXRhLXBsdXMvbGliXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL2xpYi9wYXRjaFBhY2thZ2UudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9saWIvcGF0Y2hQYWNrYWdlLnRzXCI7LyogXG4gIFRFTVBPUkFSWSBGSVggRk9SIENIUk9NRSAxMzArIGJ1aWxkc1xuKi9cblxuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IE1hbmlmZXN0VjNFeHBvcnQgfSBmcm9tICdAY3J4anMvdml0ZS1wbHVnaW4nO1xuXG5jb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLnJlc29sdmUoJ2Rpc3QvY2hyb21lL21hbmlmZXN0Lmpzb24nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU1hbmlmZXN0UGx1Z2luKCk6IFBsdWdpbk9wdGlvbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3VwZGF0ZS1tYW5pZmVzdC1wbHVnaW4nLFxuICAgIGVuZm9yY2U6ICdwb3N0JyxcbiAgICBjbG9zZUJ1bmRsZSgpIHtcbiAgICAgIGZvcmNlRGlzYWJsZVVzZUR5bmFtaWNVcmwoKTtcbiAgICB9LFxuXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikge1xuICAgICAgc2VydmVyLmh0dHBTZXJ2ZXI/Lm9uY2UoJ2xpc3RlbmluZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGZvcmNlRGlzYWJsZVVzZUR5bmFtaWNVcmwoKTtcbiAgICAgICAgaWYgKHVwZGF0ZWQpIHtcbiAgICAgICAgICBzZXJ2ZXIud3Muc2VuZCh7IHR5cGU6ICdmdWxsLXJlbG9hZCcgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJyoqIHVwZGF0ZWQgKionKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZzLndhdGNoRmlsZShtYW5pZmVzdFBhdGgsICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnKiogd2F0Y2hGaWxlICoqICcpO1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0Q29udGVudHMgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhtYW5pZmVzdFBhdGgsICd1dGY4JykpO1xuICAgICAgICAgIGlmIChtYW5pZmVzdENvbnRlbnRzLndlYl9hY2Nlc3NpYmxlX3Jlc291cmNlcy5zb21lKChyZXNvdXJjZTogYW55KSA9PiByZXNvdXJjZS51c2VfZHluYW1pY191cmwpKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gZm9yY2VEaXNhYmxlVXNlRHluYW1pY1VybCgpO1xuICAgICAgICAgICAgaWYgKHVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgc2VydmVyLndzLnNlbmQoeyB0eXBlOiAnZnVsbC1yZWxvYWQnIH0pO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnKiogdXBkYXRlZCAqKicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgd3JpdGVCdW5kbGUoKSB7XG4gICAgICBjb25zb2xlLmxvZygnIyMjIHdyaXRlQnVuZGxlICMjJyk7XG4gICAgICBmb3JjZURpc2FibGVVc2VEeW5hbWljVXJsKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZm9yY2VEaXNhYmxlVXNlRHluYW1pY1VybCgpIHtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKG1hbmlmZXN0UGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBtYW5pZmVzdENvbnRlbnRzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCAndXRmOCcpKSBhcyBBd2FpdGVkPE1hbmlmZXN0VjNFeHBvcnQ+O1xuXG4gIGlmICh0eXBlb2YgbWFuaWZlc3RDb250ZW50cyA9PT0gJ2Z1bmN0aW9uJyB8fCAhbWFuaWZlc3RDb250ZW50cy53ZWJfYWNjZXNzaWJsZV9yZXNvdXJjZXMpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1hbmlmZXN0Q29udGVudHMud2ViX2FjY2Vzc2libGVfcmVzb3VyY2VzLmV2ZXJ5KChyZXNvdXJjZSkgPT4gIXJlc291cmNlLnVzZV9keW5hbWljX3VybCkpIHJldHVybiBmYWxzZTtcblxuICBtYW5pZmVzdENvbnRlbnRzLndlYl9hY2Nlc3NpYmxlX3Jlc291cmNlcy5mb3JFYWNoKChyZXNvdXJjZSkgPT4ge1xuICAgIGlmIChyZXNvdXJjZS51c2VfZHluYW1pY191cmwpIHJlc291cmNlLnVzZV9keW5hbWljX3VybCA9IGZhbHNlO1xuICB9KTtcblxuICBmcy53cml0ZUZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgSlNPTi5zdHJpbmdpZnkobWFuaWZlc3RDb250ZW50cywgbnVsbCwgMikpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9saWJcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9zZXRoYnVya2FydC9Eb2N1bWVudHMvQ29kaW5nL2JldHRlcnNlcXRhLXBsdXMvbGliL2Jhc2U2NGxvYWRlci50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL2xpYi9iYXNlNjRsb2FkZXIudHNcIjtpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgbWltZSBmcm9tIFwibWltZS10eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgYmFzZTY0TG9hZGVyID0ge1xuICBuYW1lOiBcImJhc2U2NC1sb2FkZXJcIixcbiAgdHJhbnNmb3JtKF86IGFueSwgaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IFtmaWxlUGF0aCwgcXVlcnldID0gaWQuc3BsaXQoXCI/XCIpO1xuICAgIGlmIChxdWVyeSAhPT0gXCJiYXNlNjRcIikgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCB7IGVuY29kaW5nOiAnYmFzZTY0JyB9KTtcbiAgICBjb25zdCBtaW1lVHlwZSA9IG1pbWUubG9va3VwKGZpbGVQYXRoKTtcbiAgICBjb25zdCBkYXRhVVJMID0gYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7ZGF0YX1gO1xuXG4gICAgcmV0dXJuIGBleHBvcnQgZGVmYXVsdCAnJHtkYXRhVVJMfSc7YDtcbiAgfSxcbn07IiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL2xpYlwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9saWIvY3JlYXRlTWFuaWZlc3QudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9saWIvY3JlYXRlTWFuaWZlc3QudHNcIjtpbXBvcnQgdHlwZSB7IEJyb3dzZXIsIEJ1aWxkVGFyZ2V0LCBNYW5pZmVzdCB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEFueUNhc2UgfSBmcm9tICcuL3V0aWxzJ1xuLyoqXG4gKlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0XG4gKiBAcGFyYW0ge0FueUNhc2U8QnJvd3Nlcj59IGJyb3dzZXJcbiAqIEByZXR1cm4geyp9ICB7QGxpbmsgQnVpbGRUYXJnZXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5pZmVzdChcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LFxuICBicm93c2VyOiBBbnlDYXNlPEJyb3dzZXI+LFxuKTogQnVpbGRUYXJnZXQge1xuICByZXR1cm4ge1xuICAgIG1hbmlmZXN0LFxuICAgIGJyb3dzZXIsXG4gIH1cbn1cblxuLyoqXG4gKiBjcmVhdGUgYSBiYXNlIE1hbmlmZXN0IHRvIGluaGVyaXQgZnJvbVxuICogdHlwZSBNYW5pZmVzdCA9IGNocm9tZS5ydW50aW1lLk1hbmlmZXN0VjNcbiAqXG4gKiB1c2UgYXMgc2hhcmVkIGJhc2UgdG8gZXh0ZW5kIGluQnJvd3NlciBtYW5pZmVzdHNcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICogQHJldHVybiB7Kn0gIHtAbGluayBNYW5pZmVzdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbmlmZXN0QmFzZShtYW5pZmVzdDogTWFuaWZlc3QpOiBNYW5pZmVzdCB7XG4gIHJldHVybiBtYW5pZmVzdFxufSIsICJ7XG4gIFwibWFuaWZlc3RfdmVyc2lvblwiOiAzLFxuICBcIm5hbWVcIjogXCJCZXR0ZXJTRVFUQStcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMy40LjAuNFwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiRW5oYW5jZSBTRVFUQSBMZWFybidzIHVzYWJpbGl0eSBhbmQgYWVzdGhldGljcyEgQSBmb3JrIG9mIEJldHRlclNFUVRBIHRvIGNvbnRpbnVlIGRldmVsb3BtZW50IGFkZCBhZGQgaGVhcHMgbW9yZSBmZWF0dXJlcyFcIixcbiAgXCJpY29uc1wiOiB7XG4gICAgXCIzMlwiOiBcInJlc291cmNlcy9pY29ucy9pY29uLTMyLnBuZ1wiLFxuICAgIFwiNDhcIjogXCJyZXNvdXJjZXMvaWNvbnMvaWNvbi00OC5wbmdcIixcbiAgICBcIjY0XCI6IFwicmVzb3VyY2VzL2ljb25zL2ljb24tNjQucG5nXCJcbiAgfSxcbiAgXCJhY3Rpb25cIjoge1xuICAgIFwiYnJvd3Nlcl9zdHlsZVwiOiB0cnVlLFxuICAgIFwiZGVmYXVsdF9wb3B1cFwiOiBcImludGVyZmFjZS9pbmRleC5odG1sI3NldHRpbmdzXCIsXG4gICAgXCJkZWZhdWx0X2ljb25cIjoge1xuICAgICAgXCIzMlwiOiBcInJlc291cmNlcy9pY29ucy9pY29uLTMyLnBuZ1wiLFxuICAgICAgXCI0OFwiOiBcInJlc291cmNlcy9pY29ucy9pY29uLTQ4LnBuZ1wiLFxuICAgICAgXCI2NFwiOiBcInJlc291cmNlcy9pY29ucy9pY29uLTY0LnBuZ1wiXG4gICAgfVxuICB9LFxuICBcInBlcm1pc3Npb25zXCI6IFtcInRhYnNcIiwgXCJub3RpZmljYXRpb25zXCIsIFwic3RvcmFnZVwiXSxcbiAgXCJob3N0X3Blcm1pc3Npb25zXCI6IFtcImh0dHBzOi8vbmV3c2FwaS5vcmcvXCIsIFwiKjovLyovKlwiXSxcbiAgXCJiYWNrZ3JvdW5kXCI6IHtcbiAgICBcInNlcnZpY2Vfd29ya2VyXCI6IFwiYmFja2dyb3VuZC50c1wiXG4gIH0sXG4gIFwiY29udGVudF9zZWN1cml0eV9wb2xpY3lcIjoge1xuICAgIFwiZXh0ZW5zaW9uX3BhZ2VzXCI6IFwic2NyaXB0LXNyYyAnc2VsZic7IG9iamVjdC1zcmMgJ3NlbGYnXCJcbiAgfSxcbiAgXCJjb250ZW50X3NjcmlwdHNcIjogW1xuICAgIHtcbiAgICAgIFwibWF0Y2hlc1wiOiBbXCIqOi8vKi8qXCJdLFxuICAgICAgXCJqc1wiOiBbXCJTRVFUQS50c1wiXSxcbiAgICAgIFwicnVuX2F0XCI6IFwiZG9jdW1lbnRfc3RhcnRcIlxuICAgIH1cbiAgXSxcbiAgXCJ3ZWJfYWNjZXNzaWJsZV9yZXNvdXJjZXNcIjogW1xuICAgIHtcbiAgICAgIFwicmVzb3VyY2VzXCI6IFtcIio6Ly8qLypcIl0sXG4gICAgICBcIm1hdGNoZXNcIjogW1wiKjovLyovKlwiXVxuICAgIH0sXG4gICAge1xuICAgICAgXCJyZXNvdXJjZXNcIjogW1wicmVzb3VyY2VzL2ljb25zLypcIl0sXG4gICAgICBcIm1hdGNoZXNcIjogW1wiKjovLyovKlwiXVxuICAgIH0sXG4gICAge1xuICAgICAgXCJyZXNvdXJjZXNcIjogW1wic2VxdGEvdXRpbHMvbWlncmF0aW9uL21pZ3JhdGUuaHRtbFwiXSxcbiAgICAgIFwibWF0Y2hlc1wiOiBbXCIqOi8vKi8qXCJdXG4gICAgfVxuICBdXG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9zZXRoYnVya2FydC9Eb2N1bWVudHMvQ29kaW5nL2JldHRlcnNlcXRhLXBsdXMvc3JjL21hbmlmZXN0c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9zcmMvbWFuaWZlc3RzL2Nocm9tZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3NyYy9tYW5pZmVzdHMvY2hyb21lLnRzXCI7aW1wb3J0IHsgY3JlYXRlTWFuaWZlc3QgfSBmcm9tICcuLi8uLi9saWIvY3JlYXRlTWFuaWZlc3QnXG5pbXBvcnQgYmFzZU1hbmlmZXN0IGZyb20gJy4vbWFuaWZlc3QuanNvbidcblxuZXhwb3J0IGNvbnN0IGNocm9tZSA9IGNyZWF0ZU1hbmlmZXN0KGJhc2VNYW5pZmVzdCwgJ2Nocm9tZScpXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9zZXRoYnVya2FydC9Eb2N1bWVudHMvQ29kaW5nL2JldHRlcnNlcXRhLXBsdXMvc3JjL21hbmlmZXN0c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9zcmMvbWFuaWZlc3RzL2JyYXZlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9zZXRoYnVya2FydC9Eb2N1bWVudHMvQ29kaW5nL2JldHRlcnNlcXRhLXBsdXMvc3JjL21hbmlmZXN0cy9icmF2ZS50c1wiO2ltcG9ydCB7IGNyZWF0ZU1hbmlmZXN0IH0gZnJvbSAnLi4vLi4vbGliL2NyZWF0ZU1hbmlmZXN0J1xuaW1wb3J0IGJhc2VNYW5pZmVzdCBmcm9tICcuL21hbmlmZXN0Lmpzb24nXG5cbmV4cG9ydCBjb25zdCBicmF2ZSA9IGNyZWF0ZU1hbmlmZXN0KGJhc2VNYW5pZmVzdCwgJ2JyYXZlJylcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9zcmMvbWFuaWZlc3RzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3NyYy9tYW5pZmVzdHMvZWRnZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3NyYy9tYW5pZmVzdHMvZWRnZS50c1wiO2ltcG9ydCB7IGNyZWF0ZU1hbmlmZXN0IH0gZnJvbSAnLi4vLi4vbGliL2NyZWF0ZU1hbmlmZXN0J1xuaW1wb3J0IGJhc2VNYW5pZmVzdCBmcm9tICcuL21hbmlmZXN0Lmpzb24nXG5cbmV4cG9ydCBjb25zdCBlZGdlID0gY3JlYXRlTWFuaWZlc3QoYmFzZU1hbmlmZXN0LCAnZWRnZScpXG4iLCAie1xuICBcIm5hbWVcIjogXCJiZXR0ZXJzZXF0YXBsdXNcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMy40LjFcIixcbiAgXCJ0eXBlXCI6IFwibW9kdWxlXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJFbmhhbmNlIFNFUVRBIExlYXJuJ3MgdXNhYmlsaXR5IGFuZCBhZXN0aGV0aWNzISBBIGZvcmsgb2YgQmV0dGVyU0VRVEEgdG8gY29udGludWUgZGV2ZWxvcG1lbnQsIHdoaWxlIGluY29ycG9yYXRpbmcgYSBwbGV0aG9yYSBvZiBuZXcgYW5kIGltcHJvdmVkIGZlYXR1cmVzIVwiLFxuICBcImJyb3dzZXJzbGlzdFwiOiBcIj4gMC41JSwgbGFzdCAyIHZlcnNpb25zLCBub3QgZGVhZFwiLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiZGV2XCI6IFwiY3Jvc3MtZW52IE1PREU9Y2hyb21lIHZpdGUgZGV2XCIsXG4gICAgXCJkZXY6ZmlyZWZveFwiOiBcImNyb3NzLWVudiBNT0RFPWZpcmVmb3ggdml0ZSBidWlsZCAtLXdhdGNoXCIsXG4gICAgXCJidWlsZFwiOiBcImNyb3NzLWVudiBNT0RFPWNocm9tZSB2aXRlIGJ1aWxkICYmIGNyb3NzLWVudiBNT0RFPWZpcmVmb3ggdml0ZSBidWlsZFwiLFxuICAgIFwiYnVpbGQ6Y2hyb21lXCI6IFwiY3Jvc3MtZW52IE1PREU9Y2hyb21lIHZpdGUgYnVpbGRcIixcbiAgICBcImJ1aWxkOmZpcmVmb3hcIjogXCJjcm9zcy1lbnYgTU9ERT1maXJlZm94IHZpdGUgYnVpbGRcIixcbiAgICBcImJ1aWxkOnNhZmFyaVwiOiBcImNyb3NzLWVudiBNT0RFPXNhZmFyaSB2aXRlIGJ1aWxkXCIsXG4gICAgXCJjb252ZXJ0OnNhZmFyaVwiOiBcInhjcnVuIHNhZmFyaS13ZWItZXh0ZW5zaW9uLWNvbnZlcnRlciBkaXN0L3NhZmFyaSAtLXByb2plY3QtbG9jYXRpb24gLiAtLWFwcC1uYW1lICRucG1fcGFja2FnZV9uYW1lLXNhZmFyaVwiLFxuICAgIFwicmVsZWFzZVwiOiBcImdoIHJlbGVhc2UgY3JlYXRlICRucG1fcGFja2FnZV9uYW1lQCRucG1fcGFja2FnZV92ZXJzaW9uIC4vZGlzdC8qLnppcCAtLWdlbmVyYXRlLW5vdGVzXCIsXG4gICAgXCJwdWJsaXNoXCI6IFwiYnVuIGxpYi9wdWJsaXNoLmpzIC0tYlwiLFxuICAgIFwiemlwXCI6IFwiYmVkZnJhbWUgemlwXCJcbiAgfSxcbiAgXCJ0YXJnZXRzXCI6IHtcbiAgICBcInByb2RcIjoge1xuICAgICAgXCJzb3VyY2VNYXBcIjoge1xuICAgICAgICBcImlubGluZVwiOiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgXCJrZXl3b3Jkc1wiOiBbXSxcbiAgXCJhdXRob3JcIjoge1xuICAgIFwibmFtZVwiOiBcIlNldGhCdXJrYXJ0MTIzXCIsXG4gICAgXCJlbWFpbFwiOiBcImJldHRlcnNlcXRhQGJldHRlcnNlcXRhLmNvbVwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL0JldHRlclNFUVRBL0JldHRlclNFUVRBLXBsdXNcIlxuICB9LFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGNyeGpzL3ZpdGUtcGx1Z2luXCI6IFwiMi4wLjAtYmV0YS4yNVwiLFxuICAgIFwiQHR5cGVzL21pbWUtdHlwZXNcIjogXCJeMi4xLjRcIixcbiAgICBcIkB2aXRlanMvcGx1Z2luLXJlYWN0LXN3Y1wiOiBcIl4zLjcuMFwiLFxuICAgIFwiY3Jvc3MtZW52XCI6IFwiXjcuMC4zXCIsXG4gICAgXCJlc2xpbnRcIjogXCJeOC41Ny4wXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwibWltZS10eXBlc1wiOiBcIl4yLjEuMzVcIixcbiAgICBcInByZXR0aWVyXCI6IFwiXjMuMy4zXCIsXG4gICAgXCJwcm9jZXNzXCI6IFwiXjAuMTEuMTBcIixcbiAgICBcInNhc3NcIjogXCJeMS43OC4wXCIsXG4gICAgXCJzYXNzLWxvYWRlclwiOiBcIl4xMy4zLjNcIixcbiAgICBcInNlbXZlclwiOiBcIl43LjYuM1wiLFxuICAgIFwidXJsXCI6IFwiXjAuMTEuNFwiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBiZWRmcmFtZS9jbGlcIjogXCJeMC4wLjg1XCIsXG4gICAgXCJAY29kZW1pcnJvci9sYW5nLWNzc1wiOiBcIl42LjMuMFwiLFxuICAgIFwiQGNvZGVtaXJyb3IvbGFuZy1sZXNzXCI6IFwiXjYuMC4yXCIsXG4gICAgXCJAY29kZW1pcnJvci90aGVtZS1vbmUtZGFya1wiOiBcIl42LjEuMlwiLFxuICAgIFwiQHN2ZWx0ZWpzL3ZpdGUtcGx1Z2luLXN2ZWx0ZVwiOiBcIl40LjAuMFwiLFxuICAgIFwiQHRhaWx3aW5kY3NzL2Zvcm1zXCI6IFwiXjAuNS45XCIsXG4gICAgXCJAdHNjb25maWcvc3ZlbHRlXCI6IFwiXjUuMC40XCIsXG4gICAgXCJAdHlwZXMvY2hyb21lXCI6IFwiXjAuMC4yNzBcIixcbiAgICBcIkB0eXBlcy9jb2xvclwiOiBcIl4zLjAuNlwiLFxuICAgIFwiQHR5cGVzL2RvbXB1cmlmeVwiOiBcIl4zLjAuNVwiLFxuICAgIFwiQHR5cGVzL2xvZGFzaFwiOiBcIl40LjE3LjdcIixcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjE2LjVcIixcbiAgICBcIkB0eXBlcy9yZWFjdFwiOiBcIjE3XCIsXG4gICAgXCJAdHlwZXMvcmVhY3QtZG9tXCI6IFwiMTdcIixcbiAgICBcIkB0eXBlcy9zb3J0YWJsZWpzXCI6IFwiXjEuMTUuOFwiLFxuICAgIFwiQHR5cGVzL3V1aWRcIjogXCJeOS4wLjhcIixcbiAgICBcIkB0eXBlcy93ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCJeMC4xMC43XCIsXG4gICAgXCJAdWl3L2NvZGVtaXJyb3ItZXh0ZW5zaW9ucy1jb2xvclwiOiBcIl40LjIzLjNcIixcbiAgICBcIkB1aXcvY29kZW1pcnJvci10aGVtZS1naXRodWJcIjogXCJeNC4yMy4zXCIsXG4gICAgXCJAdml0ZWpzL3BsdWdpbi1yZWFjdFwiOiBcIl40LjMuMVwiLFxuICAgIFwiYXV0b3ByZWZpeGVyXCI6IFwiXjEwLjQuMjBcIixcbiAgICBcImNhbml1c2UtbGl0ZVwiOiBcIl4xLjAuMzAwMDE2ODRcIixcbiAgICBcImNsYXNzbmFtZXNcIjogXCJeMi41LjFcIixcbiAgICBcImNvZGVtaXJyb3JcIjogXCJeNi4wLjFcIixcbiAgICBcImNvbG9yXCI6IFwiXjQuMi4zXCIsXG4gICAgXCJkb21wdXJpZnlcIjogXCJeMy4xLjZcIixcbiAgICBcImVtYmxhLWNhcm91c2VsLWF1dG9wbGF5XCI6IFwiXjguMy4xXCIsXG4gICAgXCJlbWJsYS1jYXJvdXNlbC1zdmVsdGVcIjogXCJeOC4zLjFcIixcbiAgICBcImZ1c2UuanNcIjogXCJeNy4wLjBcIixcbiAgICBcImlkYlwiOiBcIl44LjAuMFwiLFxuICAgIFwia29sb3Jpc3RcIjogXCJeMS44LjBcIixcbiAgICBcImxvY2FsZm9yYWdlXCI6IFwiXjEuMTAuMFwiLFxuICAgIFwibG9kYXNoXCI6IFwiXjQuMTcuMjFcIixcbiAgICBcIm1pbGxpb25cIjogXCJeMy4xLjExXCIsXG4gICAgXCJtb3Rpb25cIjogXCJeMTEuMTIuMFwiLFxuICAgIFwicG9zdGNzc1wiOiBcIl44LjQuNDVcIixcbiAgICBcInB1Ymxpc2gtYnJvd3Nlci1leHRlbnNpb25cIjogXCJeMi4yLjFcIixcbiAgICBcInJlYWN0XCI6IFwiMTdcIixcbiAgICBcInJlYWN0LWJlc3QtZ3JhZGllbnQtY29sb3ItcGlja2VyXCI6IFwiXjMuMC4xMFwiLFxuICAgIFwicmVhY3QtZG9tXCI6IFwiMTdcIixcbiAgICBcInNvcnRhYmxlanNcIjogXCJeMS4xNS4zXCIsXG4gICAgXCJzdmVsdGVcIjogXCJeNS4xLjlcIixcbiAgICBcInRhaWx3aW5kY3NzXCI6IFwiXjMuNC4xMVwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjYuMlwiLFxuICAgIFwidXVpZFwiOiBcIl45LjAuMVwiLFxuICAgIFwidml0ZVwiOiBcIl41LjQuNFwiLFxuICAgIFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMFwiXG4gIH1cbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9zcmMvbWFuaWZlc3RzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3NyYy9tYW5pZmVzdHMvZmlyZWZveC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3NyYy9tYW5pZmVzdHMvZmlyZWZveC50c1wiO2ltcG9ydCB7IGNyZWF0ZU1hbmlmZXN0IH0gZnJvbSAnLi4vLi4vbGliL2NyZWF0ZU1hbmlmZXN0J1xuaW1wb3J0IGJhc2VNYW5pZmVzdCBmcm9tICcuL21hbmlmZXN0Lmpzb24nXG5pbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbidcblxuY29uc3QgdXBkYXRlZEZpcmVmb3hNYW5pZmVzdCA9IHtcbiAgLi4uYmFzZU1hbmlmZXN0LFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgc2NyaXB0czogW2Jhc2VNYW5pZmVzdC5iYWNrZ3JvdW5kLnNlcnZpY2Vfd29ya2VyXSxcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgXCJkZWZhdWx0X3BvcHVwXCI6IFwiaW50ZXJmYWNlL2luZGV4Lmh0bWwjc2V0dGluZ3NcIixcbiAgfSxcbiAgYnJvd3Nlcl9zcGVjaWZpY19zZXR0aW5nczoge1xuICAgIGdlY2tvOiB7XG4gICAgICBpZDogcGtnLmF1dGhvci5lbWFpbCxcbiAgICB9LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaXJlZm94ID0gY3JlYXRlTWFuaWZlc3QodXBkYXRlZEZpcmVmb3hNYW5pZmVzdCwgJ2ZpcmVmb3gnKVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3NyYy9tYW5pZmVzdHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9zZXRoYnVya2FydC9Eb2N1bWVudHMvQ29kaW5nL2JldHRlcnNlcXRhLXBsdXMvc3JjL21hbmlmZXN0cy9vcGVyYS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3NyYy9tYW5pZmVzdHMvb3BlcmEudHNcIjtpbXBvcnQgeyBjcmVhdGVNYW5pZmVzdCB9IGZyb20gJy4uLy4uL2xpYi9jcmVhdGVNYW5pZmVzdCdcbmltcG9ydCBiYXNlTWFuaWZlc3QgZnJvbSAnLi9tYW5pZmVzdC5qc29uJ1xuXG5leHBvcnQgY29uc3Qgb3BlcmEgPSBjcmVhdGVNYW5pZmVzdChiYXNlTWFuaWZlc3QsICdvcGVyYScpXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9zZXRoYnVya2FydC9Eb2N1bWVudHMvQ29kaW5nL2JldHRlcnNlcXRhLXBsdXMvc3JjL21hbmlmZXN0c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3NldGhidXJrYXJ0L0RvY3VtZW50cy9Db2RpbmcvYmV0dGVyc2VxdGEtcGx1cy9zcmMvbWFuaWZlc3RzL3NhZmFyaS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvc2V0aGJ1cmthcnQvRG9jdW1lbnRzL0NvZGluZy9iZXR0ZXJzZXF0YS1wbHVzL3NyYy9tYW5pZmVzdHMvc2FmYXJpLnRzXCI7aW1wb3J0IHsgY3JlYXRlTWFuaWZlc3QgfSBmcm9tICcuLi8uLi9saWIvY3JlYXRlTWFuaWZlc3QnXG5pbXBvcnQgYmFzZU1hbmlmZXN0IGZyb20gJy4vbWFuaWZlc3QuanNvbidcblxuY29uc3QgdXBkYXRlZFNhZmFyaU1hbmlmZXN0ID0ge1xuICAuLi5iYXNlTWFuaWZlc3QsXG4gIGJyb3dzZXJfc3BlY2lmaWNfc2V0dGluZ3M6IHtcbiAgICBzYWZhcmk6IHtcbiAgICAgIHN0cmljdF9taW5fdmVyc2lvbjogJzE1LjQnLFxuICAgICAgc3RyaWN0X21heF92ZXJzaW9uOiAnKicsXG4gICAgfSxcbiAgICAvLyBeXl4gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vc2FmYXJpc2VydmljZXMvc2FmYXJpX3dlYl9leHRlbnNpb25zL29wdGltaXppbmdfeW91cl93ZWJfZXh0ZW5zaW9uX2Zvcl9zYWZhcmkjMzc0MzIzOVxuICAgIC8vICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vemlsbGEvQWRkLW9ucy9XZWJFeHRlbnNpb25zL21hbmlmZXN0Lmpzb24vYnJvd3Nlcl9zcGVjaWZpY19zZXR0aW5ncyNzYWZhcmlfcHJvcGVydGllc1xuICB9LFxufVxuXG5leHBvcnQgY29uc3Qgc2FmYXJpID0gY3JlYXRlTWFuaWZlc3QodXBkYXRlZFNhZmFyaU1hbmlmZXN0LCAnc2FmYXJpJylcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBOFUsU0FBUyxvQkFBb0I7QUFDM1csU0FBUyxNQUFNLGVBQWU7OztBQ0c5QixPQUFPLFVBQVU7QUFDakIsT0FBTyxRQUFRO0FBQ2YsT0FBNkI7QUFDN0IsT0FBaUM7QUFFakMsSUFBTSxlQUFlLEtBQUssUUFBUSwyQkFBMkI7QUFFdEQsU0FBUyx1QkFBcUM7QUFDbkQsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsY0FBYztBQUNaLGdDQUEwQjtBQUFBLElBQzVCO0FBQUEsSUFFQSxnQkFBZ0IsUUFBUTtBQUN0QixhQUFPLFlBQVksS0FBSyxhQUFhLE1BQU07QUFDekMsY0FBTSxVQUFVLDBCQUEwQjtBQUMxQyxZQUFJLFNBQVM7QUFDWCxpQkFBTyxHQUFHLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxrQkFBUSxJQUFJLGVBQWU7QUFBQSxRQUM3QjtBQUVBLFdBQUcsVUFBVSxjQUFjLE1BQU07QUFDL0Isa0JBQVEsSUFBSSxrQkFBa0I7QUFDOUIsZ0JBQU0sbUJBQW1CLEtBQUssTUFBTSxHQUFHLGFBQWEsY0FBYyxNQUFNLENBQUM7QUFDekUsY0FBSSxpQkFBaUIseUJBQXlCLEtBQUssQ0FBQyxhQUFrQixTQUFTLGVBQWUsR0FBRztBQUMvRixrQkFBTUEsV0FBVSwwQkFBMEI7QUFDMUMsZ0JBQUlBLFVBQVM7QUFDWCxxQkFBTyxHQUFHLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxzQkFBUSxJQUFJLGVBQWU7QUFBQSxZQUM3QjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxjQUFjO0FBQ1osY0FBUSxJQUFJLG9CQUFvQjtBQUNoQyxnQ0FBMEI7QUFBQSxJQUM1QjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNB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ekIsUUFBUTtBQUFBLE1BQ04sb0JBQW9CO0FBQUEsTUFDcEIsb0JBQW9CO0FBQUEsSUFDdEI7QUFBQTtBQUFBO0FBQUEsRUFHRjtBQUNGO0FBRU8sSUFBTSxTQUFTLGVBQWUsdUJBQXVCLFFBQVE7OztBWElwRSxTQUFTLFdBQVc7QUFuQnBCLElBQU0sbUNBQW1DO0FBcUJ6QyxJQUFNLFVBQXlCO0FBQUEsRUFDN0I7QUFBQSxFQUFRO0FBQUEsRUFBTztBQUFBLEVBQU07QUFBQSxFQUFTO0FBQUEsRUFBTztBQUN2QztBQUVBLElBQU0sT0FBTyxRQUFRLElBQUksUUFBUTtBQUVqQyxJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixTQUFTO0FBQUEsSUFDUDtBQUFBLElBQ0EsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLE1BQ0wsU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBLElBQ0QsUUFBUSxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFBQTtBQUFBLElBRTNCLElBQUk7QUFBQSxNQUNGLFVBQVUsUUFBUSxLQUFLLE9BQUssRUFBRSxZQUFZLEtBQUssWUFBWSxDQUFDLEdBQUcsWUFBWSxPQUFPO0FBQUEsTUFDbEYsU0FBUyxLQUFLLFlBQVksTUFBTSxZQUFZLFlBQVk7QUFBQSxJQUMxRCxDQUFDO0FBQUEsSUFDRCxxQkFBcUI7QUFBQSxFQUN2QjtBQUFBLEVBQ0EsTUFBTSxRQUFRLGtDQUFXLE9BQU87QUFBQSxFQUNoQyxTQUFTO0FBQUEsSUFDUCxPQUFPO0FBQUEsTUFDTCxLQUFLLFFBQVEsa0NBQVcsT0FBTztBQUFBLElBQ2pDO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sS0FBSztBQUFBLE1BQ0gsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLE1BQ1YsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQUEsRUFDQSxLQUFLO0FBQUEsSUFDSCxxQkFBcUI7QUFBQSxNQUNuQixNQUFNO0FBQUEsUUFDSixLQUFLO0FBQUEsTUFDUDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxRQUFRLFFBQVEsa0NBQVcsUUFBUSxJQUFJO0FBQUEsSUFDdkMsYUFBYTtBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ0wsVUFBVSxLQUFLLGtDQUFXLE9BQU8sYUFBYSxZQUFZO0FBQUEsUUFDMUQsV0FBVyxLQUFLLGtDQUFXLE9BQU8sU0FBUyxTQUFTLGFBQWEsY0FBYztBQUFBLE1BQ2pGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJ1cGRhdGVkIiwgImZzIiwgImZzIl0KfQo=
|