diff --git a/creator/packages/steedos-workflow/client/lib/instance_readonly_template.coffee b/creator/packages/steedos-workflow/client/lib/instance_readonly_template.coffee index 6380a0a3d8..6d517b0e4b 100644 --- a/creator/packages/steedos-workflow/client/lib/instance_readonly_template.coffee +++ b/creator/packages/steedos-workflow/client/lib/instance_readonly_template.coffee @@ -374,7 +374,12 @@ InstanceReadOnlyTemplate.getValue = (value, field, locale, utcOffset) -> records = Steedos.objectFind("cfs_files_filerecord", { filters: [["_id", 'in', value]], fields: ["_id", "original"] }); value = _.map records, (item)-> - return "#{item.original.name}" + fileName = item.original.name; + fileUrl = Steedos.absoluteUrl('/api/files/files/'+item._id); + filePreviewHtml = ''; + if [".pdf", ".jpg", ".jpeg", ".png", ".gif"].indexOf(fileName.slice(-4)) > -1 + filePreviewHtml = " 预览" + return "
#{fileName} #{filePreviewHtml ? filePreviewHtml : ''}
" value = value.join(""); when 'lookup' @@ -392,7 +397,7 @@ InstanceReadOnlyTemplate.getValue = (value, field, locale, utcOffset) -> value = _.map records, (item)-> return "#{item[nameField]}" - value = value.join(""); + value = value.join(" , "); when 'html' value = if value then "
#{value}
" else '' diff --git a/ee/sso-oidc/package.json b/ee/sso-oidc/package.json index f1415eb67e..510405d6ab 100644 --- a/ee/sso-oidc/package.json +++ b/ee/sso-oidc/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/ee_sso-oidc", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "main": "package.service.js", "scripts": { "build": "tsc" @@ -11,14 +11,14 @@ "access": "public" }, "dependencies": { - "@steedos/accounts": "2.6.4-beta.1", - "@steedos/objectql": "2.6.4-beta.1", - "@steedos/service-package-loader": "2.6.4-beta.1", + "@steedos/accounts": "2.6.4-beta.2", + "@steedos/objectql": "2.6.4-beta.2", + "@steedos/service-package-loader": "2.6.4-beta.2", "@techpass/passport-openidconnect": "^0.3.2", "express": "4.18.1", "node-fetch": "^2.6.7", "passport": "^0.6.0", "request-ip": "^2.2.0" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/lerna.json b/lerna.json index 74789c5bae..d653d73058 100644 --- a/lerna.json +++ b/lerna.json @@ -8,5 +8,5 @@ ], "useWorkspaces": true, "npmClient": "yarn", - "version": "2.6.4-beta.1" + "version": "2.6.4-beta.2" } diff --git a/packages/accounts/package.json b/packages/accounts/package.json index 349c813ba2..0322231b88 100644 --- a/packages/accounts/package.json +++ b/packages/accounts/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/accounts", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "main": "lib/index.js", "files": [ "/package.json", @@ -55,20 +55,20 @@ "validator": "^13.6.0" }, "devDependencies": { - "@steedos/auth": "2.6.4-beta.1", - "@steedos/meteor-bundle-runner": "2.6.4-beta.1", - "@steedos/objectql": "2.6.4-beta.1", + "@steedos/auth": "2.6.4-beta.2", + "@steedos/meteor-bundle-runner": "2.6.4-beta.2", + "@steedos/objectql": "2.6.4-beta.2", "@types/dotenv-flow": "^3.0.0", "@types/node": "12.6.8", "cross-env": "^7.0.3", "dotenv": "^8.2.0", "dotenv-flow": "^3.1.0", "nodemon": "^2.0.19", - "steedos-server": "2.6.4-beta.1", + "steedos-server": "2.6.4-beta.2", "typescript": "4.6.3" }, "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/auth/package.json b/packages/auth/package.json index 7e4102ae3e..be6c5a770d 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/auth", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "main": "lib/index.js", "scripts": { "watch": "tsc --watch", @@ -13,8 +13,8 @@ "access": "public" }, "dependencies": { - "@steedos/cachers": "2.6.4-beta.1", - "@steedos/objectql": "2.6.4-beta.1", + "@steedos/cachers": "2.6.4-beta.2", + "@steedos/objectql": "2.6.4-beta.2", "cookies": "^0.8.0", "express": "^4.16.4", "ismobilejs": "^1.1.1", @@ -25,5 +25,5 @@ "devDependencies": { "typescript": "4.6.3" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/cachers/package.json b/packages/cachers/package.json index 55dacccb5b..81a162bd89 100644 --- a/packages/cachers/package.json +++ b/packages/cachers/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/cachers", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "scripts": { @@ -19,5 +19,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/cli/default.steedos.config.js b/packages/cli/default.steedos.config.js index be6fdb881a..86ce069c5b 100644 --- a/packages/cli/default.steedos.config.js +++ b/packages/cli/default.steedos.config.js @@ -33,7 +33,7 @@ if(_.isEmpty(process.env.STEEDOS_AMIS_URL)) { process.env.STEEDOS_AMIS_URL = process.env.STEEDOS_AMIS_URL.replace(/\/+$/, ""); if(_.isEmpty(process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS)) { - process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS = process.env.STEEDOS_UNPKG_URL + "/@steedos-widgets/amis-object@3.6.2-beta.1/dist/assets.json"; + process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS = process.env.STEEDOS_UNPKG_URL + "/@steedos-widgets/amis-object@3.6.2-beta.2/dist/assets.json"; } if(_.isEmpty(process.env.SERIALIZER)){ diff --git a/packages/cli/package.json b/packages/cli/package.json index 77c4a1e0d3..27a83dbf32 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "steedos-cli", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "Develop and run your enterprise apps in miniutes", "main": "dist/index.js", "scripts": { @@ -38,8 +38,8 @@ "@oclif/command": "^1.8.16", "@oclif/config": "^1.8.3", "@oclif/plugin-help": "^5.1.12", - "@steedos/metadata-core": "2.6.4-beta.1", - "@steedos/metadata-registrar": "2.6.4-beta.1", + "@steedos/metadata-core": "2.6.4-beta.2", + "@steedos/metadata-registrar": "2.6.4-beta.2", "archiver": "^5.0.2", "chalk": "2.4.2", "change-case": "^3.1.0", @@ -82,5 +82,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/client/package.json b/packages/client/package.json index 3b5e86a84b..7c6196c1d9 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@steedos/client", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "client lib for steedos", "main": "lib/index.js", "scripts": { @@ -17,8 +17,8 @@ }, "license": "MIT", "dependencies": { - "@steedos/filters": "2.6.4-beta.1", + "@steedos/filters": "2.6.4-beta.2", "node-fetch": "^2.6.7" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/core/package.json b/packages/core/package.json index c894b21c92..668677f131 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/core", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "scripts": { @@ -14,15 +14,15 @@ "author": "", "license": "ISC", "dependencies": { - "@steedos/auth": "2.6.4-beta.1", - "@steedos/filters": "2.6.4-beta.1", - "@steedos/i18n": "2.6.4-beta.1", - "@steedos/metadata-core": "2.6.4-beta.1", - "@steedos/migrate": "2.6.4-beta.1", - "@steedos/objectql": "2.6.4-beta.1", - "@steedos/odata-v4-mongodb": "2.6.4-beta.1", - "@steedos/process": "2.6.4-beta.1", - "@steedos/standard-objects": "2.6.4-beta.1", + "@steedos/auth": "2.6.4-beta.2", + "@steedos/filters": "2.6.4-beta.2", + "@steedos/i18n": "2.6.4-beta.2", + "@steedos/metadata-core": "2.6.4-beta.2", + "@steedos/migrate": "2.6.4-beta.2", + "@steedos/objectql": "2.6.4-beta.2", + "@steedos/odata-v4-mongodb": "2.6.4-beta.2", + "@steedos/process": "2.6.4-beta.2", + "@steedos/standard-objects": "2.6.4-beta.2", "body-parser": "^1.18.1", "bunyan-sfdx-no-dtrace": "^1.8.2", "clone": "^2.1.2", @@ -45,7 +45,7 @@ "devDependencies": { "@salesforce/kit": "1.0.4", "@salesforce/ts-types": "1.1.2", - "@steedos/meteor-bundle-runner": "2.6.4-beta.1", + "@steedos/meteor-bundle-runner": "2.6.4-beta.2", "@types/express": "^4.16.1", "@types/node": "^11.10.4", "@types/underscore": "^1.8.13", @@ -57,5 +57,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/create-steedos-app/package.json b/packages/create-steedos-app/package.json index 59afe03f9c..70cdebfc4c 100644 --- a/packages/create-steedos-app/package.json +++ b/packages/create-steedos-app/package.json @@ -1,6 +1,6 @@ { "name": "create-steedos-app", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "keywords": [ "react", "steedos" @@ -51,5 +51,5 @@ "engines": { "node": ">=14" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/create-steedos-package/package.json b/packages/create-steedos-package/package.json index e1f39db448..367647dda7 100644 --- a/packages/create-steedos-package/package.json +++ b/packages/create-steedos-package/package.json @@ -1,6 +1,6 @@ { "name": "create-steedos-package", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "keywords": [ "steedos" ], @@ -39,5 +39,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/data-import/package.json b/packages/data-import/package.json index f7fc6d861f..d6ca2c8d4a 100644 --- a/packages/data-import/package.json +++ b/packages/data-import/package.json @@ -1,16 +1,16 @@ { "name": "@steedos/data-import", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "main": "lib/index.js", "license": "MIT", "scripts": { "build": "rm -rf ./lib && tsc" }, "dependencies": { - "@steedos/core": "2.6.4-beta.1", - "@steedos/metadata-api": "2.6.4-beta.1", - "@steedos/metadata-core": "2.6.4-beta.1", - "@steedos/objectql": "2.6.4-beta.1", + "@steedos/core": "2.6.4-beta.2", + "@steedos/metadata-api": "2.6.4-beta.2", + "@steedos/metadata-core": "2.6.4-beta.2", + "@steedos/objectql": "2.6.4-beta.2", "bson": "4.6.4", "csvtojson": "~2.0.10", "dotenv-flow": "^3.1.0", @@ -24,5 +24,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/filters/package.json b/packages/filters/package.json index 56fbc04b6e..4d91819bf6 100644 --- a/packages/filters/package.json +++ b/packages/filters/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/filters", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "filters lib for steedos", "main": "lib/index.js", "files": [ @@ -36,5 +36,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/formula/package.json b/packages/formula/package.json index 1a8ed61fc5..e2ca99d799 100644 --- a/packages/formula/package.json +++ b/packages/formula/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/formula", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "Salesforce Formula Parser", "main": "lib/formulon.js", "files": [ @@ -46,5 +46,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 2bd95f76cb..286ad2ad1a 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/i18n", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "scripts": { @@ -11,7 +11,7 @@ "author": "", "license": "ISC", "dependencies": { - "@steedos/cachers": "2.6.4-beta.1", + "@steedos/cachers": "2.6.4-beta.2", "i18next": "^19.3.4", "i18next-sprintf-postprocessor": "^0.2.2", "underscore": "1.13.4" @@ -22,5 +22,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/metadata-api/package.json b/packages/metadata-api/package.json index bd0fe2c5f3..6a7f372bff 100644 --- a/packages/metadata-api/package.json +++ b/packages/metadata-api/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/metadata-api", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "files": [ @@ -21,10 +21,10 @@ "access": "public" }, "dependencies": { - "@steedos/auth": "2.6.4-beta.1", - "@steedos/core": "2.6.4-beta.1", - "@steedos/metadata-core": "2.6.4-beta.1", - "@steedos/objectql": "2.6.4-beta.1", + "@steedos/auth": "2.6.4-beta.2", + "@steedos/core": "2.6.4-beta.2", + "@steedos/metadata-core": "2.6.4-beta.2", + "@steedos/objectql": "2.6.4-beta.2", "chalk": "^4.1.0", "clone": "2.1.2", "compressing": "^1.5.1", @@ -36,9 +36,9 @@ "underscore": "^1.11.0" }, "devDependencies": { - "@steedos/service-meteor-package-loader": "2.6.4-beta.1", + "@steedos/service-meteor-package-loader": "2.6.4-beta.2", "javascript-obfuscator": "^2.9.1", "typescript": "4.6.3" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/metadata-core/package.json b/packages/metadata-core/package.json index e640f1e5f1..1aa3f1167d 100644 --- a/packages/metadata-core/package.json +++ b/packages/metadata-core/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/metadata-core", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "files": [ @@ -12,7 +12,7 @@ "build": "tsc" }, "dependencies": { - "@steedos/client": "2.6.4-beta.1", + "@steedos/client": "2.6.4-beta.2", "archiver": "^5.1.0", "chalk": "^4.1.0", "clone": "^2.1.2", @@ -40,5 +40,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/metadata-registrar/package.json b/packages/metadata-registrar/package.json index c13c48d450..f1d009d2e4 100644 --- a/packages/metadata-registrar/package.json +++ b/packages/metadata-registrar/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/metadata-registrar", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "files": [ @@ -13,8 +13,8 @@ }, "dependencies": { "@salesforce/ts-types": "1.1.2", - "@steedos/client": "2.6.4-beta.1", - "@steedos/metadata-core": "2.6.4-beta.1", + "@steedos/client": "2.6.4-beta.2", + "@steedos/metadata-core": "2.6.4-beta.2", "archiver": "^5.1.0", "chalk": "^4.1.0", "clone": "^2.1.2", @@ -41,5 +41,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/meteor-bundle-dependencies/package.json b/packages/meteor-bundle-dependencies/package.json index 2888de0467..21c34b3e39 100644 --- a/packages/meteor-bundle-dependencies/package.json +++ b/packages/meteor-bundle-dependencies/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/meteor-bundle-dependencies", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "index.js", "private": false, @@ -56,5 +56,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/meteor-bundle-runner/package.json b/packages/meteor-bundle-runner/package.json index a12b698363..5a4472bcd0 100644 --- a/packages/meteor-bundle-runner/package.json +++ b/packages/meteor-bundle-runner/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/meteor-bundle-runner", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "Run meteor bundles and inject your own nodejs code.", "main": "index.js", "private": false, @@ -26,5 +26,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/migrate/package.json b/packages/migrate/package.json index 5ae97d15b7..e1e125a55f 100644 --- a/packages/migrate/package.json +++ b/packages/migrate/package.json @@ -1,17 +1,17 @@ { "name": "@steedos/migrate", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "Migration scripts for steedos", "main": "index.js", "license": "MIT", "private": false, "dependencies": { - "@steedos/service-package-registry": "2.6.4-beta.1", + "@steedos/service-package-registry": "2.6.4-beta.2", "migrate": "^1.6.2", "mongodb": "^3.7.3" }, "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/objectql/package.json b/packages/objectql/package.json index 5f469a3c85..b50b0ad00e 100644 --- a/packages/objectql/package.json +++ b/packages/objectql/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/objectql", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "scripts": { @@ -16,17 +16,17 @@ "dependencies": { "@salesforce/kit": "1.0.4", "@salesforce/ts-types": "1.1.1", - "@steedos/cachers": "2.6.4-beta.1", - "@steedos/filters": "2.6.4-beta.1", - "@steedos/formula": "2.6.4-beta.1", - "@steedos/i18n": "2.6.4-beta.1", - "@steedos/metadata-core": "2.6.4-beta.1", - "@steedos/metadata-registrar": "2.6.4-beta.1", - "@steedos/odata-v4-mongodb": "2.6.4-beta.1", - "@steedos/odata-v4-sql": "2.6.4-beta.1", - "@steedos/odata-v4-typeorm": "2.6.4-beta.1", - "@steedos/schemas": "2.6.4-beta.1", - "@steedos/standard-objects": "2.6.4-beta.1", + "@steedos/cachers": "2.6.4-beta.2", + "@steedos/filters": "2.6.4-beta.2", + "@steedos/formula": "2.6.4-beta.2", + "@steedos/i18n": "2.6.4-beta.2", + "@steedos/metadata-core": "2.6.4-beta.2", + "@steedos/metadata-registrar": "2.6.4-beta.2", + "@steedos/odata-v4-mongodb": "2.6.4-beta.2", + "@steedos/odata-v4-sql": "2.6.4-beta.2", + "@steedos/odata-v4-typeorm": "2.6.4-beta.2", + "@steedos/schemas": "2.6.4-beta.2", + "@steedos/standard-objects": "2.6.4-beta.2", "app-root-path": "^2.2.1", "body-parser": "^1.18.1", "bunyan-sfdx-no-dtrace": "^1.8.2", @@ -55,7 +55,7 @@ "vm2": "^3.9.17" }, "devDependencies": { - "@steedos/meteor-bundle-runner": "2.6.4-beta.1", + "@steedos/meteor-bundle-runner": "2.6.4-beta.2", "@types/express": "^4.16.1", "@types/node": "^11.10.4", "@types/underscore": "^1.8.13", @@ -65,5 +65,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/odata-v4-mongodb/package.json b/packages/odata-v4-mongodb/package.json index 232fd070bc..33df7ad99e 100644 --- a/packages/odata-v4-mongodb/package.json +++ b/packages/odata-v4-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/odata-v4-mongodb", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "Service OData requests from a MongoDB data store", "main": "lib/index.js", "directories": { @@ -26,12 +26,12 @@ }, "homepage": "https://github.com/jaystack/odata-v4-mongodb#readme", "dependencies": { - "@steedos/odata-v4-parser": "2.6.4-beta.1", + "@steedos/odata-v4-parser": "2.6.4-beta.2", "odata-v4-literal": "^0.1.0" }, "private": false, "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/odata-v4-parser/package.json b/packages/odata-v4-parser/package.json index fa1d5a2a80..7a9c3bea10 100644 --- a/packages/odata-v4-parser/package.json +++ b/packages/odata-v4-parser/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/odata-v4-parser", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "OData v4 Parser", "main": "lib/parser.js", "repository": { @@ -20,5 +20,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/odata-v4-sql/package.json b/packages/odata-v4-sql/package.json index 818aecae09..9053c64854 100644 --- a/packages/odata-v4-sql/package.json +++ b/packages/odata-v4-sql/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/odata-v4-sql", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "OData to SQL query compiler", "main": "lib/index.js", "typings": "lib/index", @@ -27,7 +27,7 @@ }, "homepage": "https://github.com/jaystack/odata-v4-sql#readme", "dependencies": { - "@steedos/odata-v4-parser": "2.6.4-beta.1", + "@steedos/odata-v4-parser": "2.6.4-beta.2", "odata-v4-literal": "^0.1.0" }, "publishConfig": { @@ -36,5 +36,5 @@ "devDependencies": { "typescript": "4.6.3" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/odata-v4-typeorm/package.json b/packages/odata-v4-typeorm/package.json index ae5bc8da58..5abd4eb477 100644 --- a/packages/odata-v4-typeorm/package.json +++ b/packages/odata-v4-typeorm/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/odata-v4-typeorm", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "OData to TYPEORM query compiler", "main": "lib/index.js", "typings": "lib/index", @@ -29,12 +29,12 @@ }, "homepage": "https://github.com/steedos/odata-v4-typeorm#readme", "dependencies": { - "@steedos/odata-v4-parser": "2.6.4-beta.1", - "@steedos/odata-v4-sql": "2.6.4-beta.1", + "@steedos/odata-v4-parser": "2.6.4-beta.2", + "@steedos/odata-v4-sql": "2.6.4-beta.2", "odata-v4-literal": "^0.1.0" }, "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/plugin-company/package.json b/packages/plugin-company/package.json index 200de24f5c..01b71b49cd 100644 --- a/packages/plugin-company/package.json +++ b/packages/plugin-company/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/plugin-company", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "Enterprise plugin for steedos", "main": "index.js", "repository": { @@ -17,5 +17,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/process/package.json b/packages/process/package.json index 568c946eb9..70590ac74d 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/process", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "main": "lib/index.js", "repository": "https://github.com/steedos/steedos-platform.git", "scripts": { @@ -16,9 +16,9 @@ "typescript": "4.6.3" }, "dependencies": { - "@steedos/auth": "2.6.4-beta.1", - "@steedos/objectql": "2.6.4-beta.1", + "@steedos/auth": "2.6.4-beta.2", + "@steedos/objectql": "2.6.4-beta.2", "express": "4.18.1" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/router/package.json b/packages/router/package.json index 2c4efca36b..40c0737f0e 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/router", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "scripts": { @@ -18,5 +18,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/schemas/package.json b/packages/schemas/package.json index cb94549b44..9ee66744d8 100644 --- a/packages/schemas/package.json +++ b/packages/schemas/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/schemas", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "main": "index.js", "repository": "https://github.com/steedos/schemas.git", "author": "sunhaolin ", @@ -9,5 +9,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/standard-objects/base.object.js b/packages/standard-objects/base.object.js index 5db3a33586..e8a73819f8 100644 --- a/packages/standard-objects/base.object.js +++ b/packages/standard-objects/base.object.js @@ -211,6 +211,7 @@ module.exports = { }, standard_create_instance: { label: "Create Approval", + sort: -1, on: "list", type: "amis_button", visible: function(object_name, record_id, record_permissions, data){ @@ -222,7 +223,7 @@ module.exports = { "body": [ { "type": "button", - "label": "新建审批", + "label": "申请", "id": "u:standard_create_instance", "editorState": "default", "onEvent": { diff --git a/packages/standard-objects/base.object.yml b/packages/standard-objects/base.object.yml index 151e471ba5..23e99128d3 100644 --- a/packages/standard-objects/base.object.yml +++ b/packages/standard-objects/base.object.yml @@ -224,6 +224,7 @@ fields: - label: Terminated value: terminated visible_on: "{{false}}" + readonly: true sort_no: 1400 process_state: label: Process State @@ -266,6 +267,8 @@ fields: actions: standard_query: label: Search + standard_create_instance: + label: Create Approval standard_new: label: New standard_open_view: @@ -278,8 +281,6 @@ actions: label: Delete standard_approve: label: Initiate Approval - standard_create_instance: - label: Create Approval standard_view_instance: label: View Instance standard_follow: diff --git a/packages/standard-objects/objectTranslations/base.en/base.en.objectTranslation.yml b/packages/standard-objects/objectTranslations/base.en/base.en.objectTranslation.yml index 9448ab24f4..b5ea6c5033 100644 --- a/packages/standard-objects/objectTranslations/base.en/base.en.objectTranslation.yml +++ b/packages/standard-objects/objectTranslations/base.en/base.en.objectTranslation.yml @@ -137,6 +137,8 @@ fields: actions: standard_query: label: Search + standard_create_instance: + label: Create Approval standard_new: label: New standard_open_view: @@ -149,8 +151,6 @@ actions: label: Delete standard_approve: label: New Instance - standard_create_instance: - label: Create Approval standard_view_instance: label: View Instance standard_follow: diff --git a/packages/standard-objects/objectTranslations/base.zh-CN/base.zh-CN.objectTranslation.yml b/packages/standard-objects/objectTranslations/base.zh-CN/base.zh-CN.objectTranslation.yml index 0171cc774f..8228ecaf69 100644 --- a/packages/standard-objects/objectTranslations/base.zh-CN/base.zh-CN.objectTranslation.yml +++ b/packages/standard-objects/objectTranslations/base.zh-CN/base.zh-CN.objectTranslation.yml @@ -137,6 +137,8 @@ fields: actions: standard_query: label: 查找 + standard_create_instance: + label: 申请 standard_new: label: 新建 standard_open_view: @@ -149,8 +151,6 @@ actions: label: 删除 standard_approve: label: 发起审批 - standard_create_instance: - label: 新建审批 standard_view_instance: label: 查看审批单 standard_follow: diff --git a/packages/standard-objects/package.json b/packages/standard-objects/package.json index 4253512ba6..3ecfc62557 100644 --- a/packages/standard-objects/package.json +++ b/packages/standard-objects/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/standard-objects", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "Standard objects for steedos", "main": "index.js", "license": "Apache", @@ -9,13 +9,13 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9", + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac", "dependencies": { - "@steedos/auth": "2.6.4-beta.1", - "@steedos/core": "2.6.4-beta.1", - "@steedos/filters": "2.6.4-beta.1", - "@steedos/i18n": "2.6.4-beta.1", - "@steedos/metadata-core": "2.6.4-beta.1", - "@steedos/metadata-registrar": "2.6.4-beta.1" + "@steedos/auth": "2.6.4-beta.2", + "@steedos/core": "2.6.4-beta.2", + "@steedos/filters": "2.6.4-beta.2", + "@steedos/i18n": "2.6.4-beta.2", + "@steedos/metadata-core": "2.6.4-beta.2", + "@steedos/metadata-registrar": "2.6.4-beta.2" } } diff --git a/packages/standard-objects/workflow/flows.object.yml b/packages/standard-objects/workflow/flows.object.yml index 5d023a1667..1d62fead53 100644 --- a/packages/standard-objects/workflow/flows.object.yml +++ b/packages/standard-objects/workflow/flows.object.yml @@ -1151,7 +1151,7 @@ actions: "actions": [ { "actionType": "custom", - "script": "let fId = event.data._id;let newFields = _.map(event.data.fields, (field)=>{ if(field._id === fId){ field.required = event.data.required }; return field;});setTimeout(function () { doAction({ actionType: \"setValue\", componentId: \"addFormFieldsForm\", args: { value: {fields: newFields} }, });}, 300);" + "script": "let fName = event.data.name;let newFields = _.map(event.data.fields, (field)=>{ if(field.name === fName){ field.required = event.data.required }; return field;});setTimeout(function () { doAction({ actionType: \"setValue\", componentId: \"addFormFieldsForm\", args: { value: {fields: newFields} }, });}, 300);" } ] } diff --git a/packages/steedos-plugin-schema-builder/package.json b/packages/steedos-plugin-schema-builder/package.json index 8aad32f069..329b1d00d7 100644 --- a/packages/steedos-plugin-schema-builder/package.json +++ b/packages/steedos-plugin-schema-builder/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/steedos-plugin-schema-builder", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "Add Schema Builder to Steedos Object Manager.", "main": "index.js", "author": "", @@ -10,5 +10,5 @@ "access": "public" }, "homepage": "https://github.com/steedos/steedos-platform/tree/master/packages/steedos-plugin-schema-builder", - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/utils/package.json b/packages/utils/package.json index 4b1fde7d24..289137aab6 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,7 +1,7 @@ { "name": "@steedos/utils", "private": false, - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "description": "", "main": "lib/index.js", "scripts": { @@ -20,5 +20,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/workflow/package.json b/packages/workflow/package.json index b057b3f8d9..e8328a90d5 100644 --- a/packages/workflow/package.json +++ b/packages/workflow/package.json @@ -1,6 +1,6 @@ { "name": "@steedos/workflow", - "version": "2.6.4-beta.1", + "version": "2.6.4-beta.2", "main": "index.js", "repository": "https://github.com/steedos/steedos-platform/packages/workflow.git", "author": "sunhaolin ", @@ -10,17 +10,17 @@ "access": "public" }, "dependencies": { - "@steedos/auth": "2.6.4-beta.1", - "@steedos/objectql": "2.6.4-beta.1", + "@steedos/auth": "2.6.4-beta.2", + "@steedos/objectql": "2.6.4-beta.2", "@steedos/steedos-plugin-workflow": "^2.1.5", "body-parser": "^1.19.0", "express": "^4.17.1", "underscore": "^1.9.1" }, "devDependencies": { - "@steedos/core": "2.6.4-beta.1", - "@steedos/meteor-bundle-runner": "2.6.4-beta.1", - "steedos-server": "2.6.4-beta.1" + "@steedos/core": "2.6.4-beta.2", + "@steedos/meteor-bundle-runner": "2.6.4-beta.2", + "steedos-server": "2.6.4-beta.2" }, - "gitHead": "3c48181d4c11b106c75f3618d9557e628242cba9" + "gitHead": "5d9b13f761ed55f3568e220a4b031fbe906105ac" } diff --git a/packages/workflow/src/designerManager.js b/packages/workflow/src/designerManager.js index db96b28a5c..abd4b992e1 100644 --- a/packages/workflow/src/designerManager.js +++ b/packages/workflow/src/designerManager.js @@ -508,17 +508,19 @@ async function _transformObjectFieldToFormField(objField, codePrefix = '') { case 'lookup': case 'master_detail': let refObjName = objField.reference_to; + const refToField = objField.reference_to_field if (_.isString(refObjName)) { - // const refObj = objectql.getObject(refObjName); - // const nameFieldKey = await refObj.getNameFieldKey(); - // formField.type = "odata"; - // formField.url = `/api/v4/${refObjName}?$top=20`; - // formField.search_field = nameFieldKey; - // formField.formula = `{${formField.code}.${nameFieldKey}}`; - formField.type = 'lookup'; - formField.reference_to = objField.reference_to; - formField.reference_to_field = objField.reference_to_field; - formField.config = JSON.stringify({filters: objField.filters, amis: objField.amis}); + // 人员需转为选择人员字段、部门需转为选择部门字段 + if ('users' == refObjName || ('space_users' == refObjName && 'user' == refToField)) { + formField.type = 'user' + } else if ('organizations' == refObjName) { + formField.type = 'group' + } else { + formField.type = 'lookup'; + formField.reference_to = objField.reference_to; + formField.reference_to_field = objField.reference_to_field; + formField.config = JSON.stringify({filters: objField.filters, amis: objField.amis}); + } } break; diff --git a/server/bundle/programs/server/packages/modules.js b/server/bundle/programs/server/packages/modules.js index a9ce58327b..61e681b3d4 100644 --- a/server/bundle/programs/server/packages/modules.js +++ b/server/bundle/programs/server/packages/modules.js @@ -463,7 +463,7 @@ module.useNode(); // module.exports = { "name": "@steedos/objectql", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "lib/index.js" }; @@ -490,7 +490,7 @@ module.useNode(); // module.exports = { "name": "@steedos/i18n", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "lib/index.js" }; @@ -517,7 +517,7 @@ module.useNode(); // module.exports = { "name": "@steedos/core", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "lib/index.js" }; @@ -544,7 +544,7 @@ module.useNode(); // module.exports = { "name": "@steedos/service-meteor-package-loader", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "index.js" }; @@ -571,7 +571,7 @@ module.useNode(); // module.exports = { "name": "@steedos/service-api", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "index.js" }; @@ -598,7 +598,7 @@ module.useNode(); // module.exports = { "name": "@steedos/service-metadata-server", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "index.js" }; @@ -625,7 +625,7 @@ module.useNode(); // module.exports = { "name": "@steedos/service-package-registry", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "package.service.js" }; @@ -652,7 +652,7 @@ module.useNode(); // module.exports = { "name": "@steedos/service-objectql", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "package.service.js" }; @@ -679,7 +679,7 @@ module.useNode(); // module.exports = { "name": "@steedos/service-ui", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "package.service.js" }; @@ -706,7 +706,7 @@ module.useNode(); // module.exports = { "name": "@steedos/service-pages", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "package.service.js" }; @@ -733,7 +733,7 @@ module.useNode(); // module.exports = { "name": "@steedos/router", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "lib/index.js" }; @@ -760,7 +760,7 @@ module.useNode(); // module.exports = { "name": "@steedos/auth", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "lib/index.js" }; @@ -787,7 +787,7 @@ module.useNode(); // module.exports = { "name": "@steedos/workflow", - "version": "2.6.2-beta.35", + "version": "2.6.4-beta.1", "main": "index.js" }; diff --git a/server/bundle/programs/server/packages/steedos_workflow.js b/server/bundle/programs/server/packages/steedos_workflow.js index ad461b9eec..22eadf3ead 100644 --- a/server/bundle/programs/server/packages/steedos_workflow.js +++ b/server/bundle/programs/server/packages/steedos_workflow.js @@ -3038,7 +3038,18 @@ InstanceReadOnlyTemplate.getValue = function (value, field, locale, utcOffset) { } value = _.map(records, function (item) { - return "" + item.original.name + ""; + var fileName, filePreviewHtml, fileUrl; + fileName = item.original.name; + fileUrl = Steedos.absoluteUrl('/api/files/files/' + item._id); + filePreviewHtml = ''; + + if ([".pdf", ".jpg", ".jpeg", ".png", ".gif"].indexOf(fileName.slice(-4)) > -1) { + filePreviewHtml = " 预览"; + } + + return "
" + fileName + " " + (filePreviewHtml != null ? filePreviewHtml : { + filePreviewHtml: '' + }) + "
"; }); value = value.join(""); } @@ -3069,7 +3080,7 @@ InstanceReadOnlyTemplate.getValue = function (value, field, locale, utcOffset) { value = _.map(records, function (item) { return "" + item[nameField] + ""; }); - value = value.join(""); + value = value.join(" , "); } break; @@ -11972,4 +11983,4 @@ Package._define("steedos:workflow", { })(); //# sourceURL=meteor://💻app/packages/steedos_workflow.js -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9jaGVja05wbS5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9saWIvVVJJLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9jb3JlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvbGliL2NvcmUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9tb2RlbHMvaW5zdGFuY2VfdGFza3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9tb2RlbHMvYXV0aF90b2tlbnMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC9saWIvaW5zdGFuY2VfcmVhZG9ubHlfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvbGliL2luc3RhbmNlX3JlYWRvbmx5X3RlbXBsYXRlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvbGliL3RlbXBsYXRlX21hbmFnZXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvbGliL3RlbXBsYXRlX21hbmFnZXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L2NsaWVudC9jb3JlZm9ybS9pbnB1dFR5cGVzL2NvcmVmb3JtLXRhYmxlL3N0ZWVkb3MtdGFibGUuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbWFnZV9zaWduLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbWFnZV9zaWduLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3RyYWNlc19oYW5kbGVyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL190cmFjZXNfaGFuZGxlci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9mb3JtLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9mb3JtLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX2luc3RhbmNlX2F0dGFjaG1lbnRzLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC92aWV3cy9pbnN0YW5jZS9faW5zdGFuY2Vfc2lnbl90ZXh0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9zaWduX3RleHQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC92aWV3cy9pbnN0YW5jZS9fdHJhY2VzX2hlbHAuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3RyYWNlc19oZWxwLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3JlbGF0ZWRfaW5zdGFuY2VzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19yZWxhdGVkX2luc3RhbmNlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19yZWxhdGVkX3JlY29yZHMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3JlbGF0ZWRfcmVjb3Jkcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvcm91dGVzL2dldFNwYWNlVXNlcnMuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvcm91dGVzL2dldEZvcm11bGFVc2VyT2JqZWN0cy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9yb3V0ZXMvaW5pdF9mb3JtdWxhX3ZhbHVlcy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9yb3V0ZXMvYXBpX3dvcmtmbG93X2ZvcndhcmQuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvcm91dGVzL3Rlc3Rfd2ViaG9vay5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3JvdXRlcy90ZXN0X3dlYmhvb2suY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL3NldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL2dldF9pbnN0YW5jZV9kYXRhLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL3NhdmVfaW5zdGFuY2UuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvc2VydmVyL21ldGhvZHMvdHJhY2VfYXBwcm92ZV9jYy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9mb3J3YXJkX2luc3RhbmNlLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL2Nmc19pbnN0YW5jZXMuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvaW5zdGFuY2VfYXBwcm92ZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvaW5zdGFuY2VfcmV0dXJuLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV9yZW1pbmQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL25leHRfc3RlcF91c2Vyc19ub3RfZm91bmQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL2luc3RhbmNlX251bWJlcl9ydWxlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvY2hlY2tfbWFpbl9hdHRhY2guY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL3JlbGF0ZWRfaW5zdGFuY2VzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9lZGl0X2Zsb3dfcG9zaXRpb25zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9zdGFydF9mbG93LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV90cmFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL2luc3RhbmNlX2JhdGNoLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9mbG93LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9oaWRlX2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV92YWx1ZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3JvdXRlcy9pbnN0YW5jZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9yb3V0ZXMvaW5zdGFuY2UuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9yb3V0ZXMvc3RlZWRvc19jc3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcm91dGVzL3N0ZWVkb3NfY3NzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcm91dGVzL2luc3RhbmNlX2RyYWZ0X3ZpZXcuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcm91dGVzL2luc3RhbmNlX2RyYWZ0X3ZpZXcuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9saWIvMV9mb3JtX2Zvcm11bGEuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9jYXRlZ29yaWVzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9jYXRlZ29yaWVzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Nmc19pbnN0YW5jZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Nmc19pbnN0YW5jZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19wb3NpdGlvbnMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zX3RhYnVsYXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zX3RhYnVsYXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19yb2xlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19yb2xlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9mbG93cy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZm9ybXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zvcm1zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RhdGEuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RhdGEuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvaW5zdGFuY2VfbGlzdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvaW5zdGFuY2VfbGlzdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV90YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV90YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RyYWZ0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV9kcmFmdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9kaXN0cmlidXRlZF9pbnN0YW5jZXNfc3RhdGVfYnlfaWRzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9kaXN0cmlidXRlZF9pbnN0YW5jZXNfc3RhdGVfYnlfaWRzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL3JlbGF0ZWRfaW5zdGFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL3JlbGF0ZWRfaW5zdGFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvc3BhY2VfdXNlcl9zaWducy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvc3BhY2VfdXNlcl9zaWducy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy91c2VyX2luYm94X2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy91c2VyX2luYm94X2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfbWFpbl9hdHRhY2hfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfbWFpbl9hdHRhY2hfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9mbG93LXRlbXBsYXRlL3dvcmtmbG93X3RlbXBsYXRlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL2Zsb3ctdGVtcGxhdGUvd29ya2Zsb3dfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9zY2hlZHVsZS9hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24uY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvc2NoZWR1bGUvYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvc2NoZWR1bGUvdGltZW91dF9hdXRvX3N1Ym1pdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9zY2hlZHVsZS90aW1lb3V0X2F1dG9fc3VibWl0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9yZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvdGFidWxhci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3RhYnVsYXIuY29mZmVlIl0sIm5hbWVzIjpbImNoZWNrTnBtVmVyc2lvbnMiLCJtb2R1bGUiLCJsaW5rIiwidiIsInJvb3QiLCJmYWN0b3J5IiwiZGVmaW5lIiwiYW1kIiwiVVJJIiwicHVueWNvZGUiLCJJUHY2IiwiU2Vjb25kTGV2ZWxEb21haW5zIiwiU0xEIiwiX1VSSSIsInVybCIsImJhc2UiLCJfdXJsU3VwcGxpZWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJfYmFzZVN1cHBsaWVkIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwibG9jYXRpb24iLCJocmVmIiwiYWJzb2x1dGVUbyIsInZlcnNpb24iLCJwIiwicHJvdG90eXBlIiwiaGFzT3duIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJlc2NhcGVSZWdFeCIsInN0cmluZyIsInJlcGxhY2UiLCJnZXRUeXBlIiwidmFsdWUiLCJTdHJpbmciLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImlzQXJyYXkiLCJvYmoiLCJmaWx0ZXJBcnJheVZhbHVlcyIsImRhdGEiLCJsb29rdXAiLCJpIiwiX21hdGNoIiwidGVzdCIsInNwbGljZSIsImFycmF5Q29udGFpbnMiLCJsaXN0IiwiX3R5cGUiLCJtYXRjaCIsImFycmF5c0VxdWFsIiwib25lIiwidHdvIiwic29ydCIsImwiLCJ0cmltU2xhc2hlcyIsInRleHQiLCJ0cmltX2V4cHJlc3Npb24iLCJfcGFydHMiLCJwcm90b2NvbCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJob3N0bmFtZSIsInVybiIsInBvcnQiLCJwYXRoIiwicXVlcnkiLCJmcmFnbWVudCIsImR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyIsImVzY2FwZVF1ZXJ5U3BhY2UiLCJwcm90b2NvbF9leHByZXNzaW9uIiwiaWRuX2V4cHJlc3Npb24iLCJwdW55Y29kZV9leHByZXNzaW9uIiwiaXA0X2V4cHJlc3Npb24iLCJpcDZfZXhwcmVzc2lvbiIsImZpbmRfdXJpX2V4cHJlc3Npb24iLCJmaW5kVXJpIiwic3RhcnQiLCJlbmQiLCJ0cmltIiwiZGVmYXVsdFBvcnRzIiwiaHR0cCIsImh0dHBzIiwiZnRwIiwiZ29waGVyIiwid3MiLCJ3c3MiLCJpbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMiLCJkb21BdHRyaWJ1dGVzIiwiZ2V0RG9tQXR0cmlidXRlIiwibm9kZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJ0eXBlIiwiZXNjYXBlRm9yRHVtYkZpcmVmb3gzNiIsImVzY2FwZSIsInN0cmljdEVuY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSUNvbXBvbmVudCIsImVuY29kZSIsImRlY29kZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImlzbzg4NTkiLCJ1bmVzY2FwZSIsInVuaWNvZGUiLCJjaGFyYWN0ZXJzIiwicGF0aG5hbWUiLCJleHByZXNzaW9uIiwibWFwIiwicmVzZXJ2ZWQiLCJ1cm5wYXRoIiwiZW5jb2RlUXVlcnkiLCJlc2NhcGVkIiwiZGVjb2RlUXVlcnkiLCJlIiwiX3BhcnQiLCJnZW5lcmF0ZUFjY2Vzc29yIiwiX2dyb3VwIiwiYyIsImdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uIiwiX3NlcCIsIl9jb2RpbmdGdW5jTmFtZSIsIl9pbm5lckNvZGluZ0Z1bmNOYW1lIiwiYWN0dWFsQ29kaW5nRnVuYyIsInNlZ21lbnRzIiwic3BsaXQiLCJqb2luIiwiZGVjb2RlUGF0aCIsImRlY29kZVVyblBhdGgiLCJyZWNvZGVQYXRoIiwicmVjb2RlVXJuUGF0aCIsImVuY29kZVJlc2VydmVkIiwicGFyc2UiLCJwYXJ0cyIsInBvcyIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJwYXJzZUF1dGhvcml0eSIsInBhcnNlSG9zdCIsImJyYWNrZXRQb3MiLCJ0IiwiY2hhckF0IiwiZmlyc3RDb2xvbiIsImZpcnN0U2xhc2giLCJuZXh0Q29sb24iLCJwYXJzZVVzZXJpbmZvIiwibGFzdEluZGV4T2YiLCJzaGlmdCIsInBhcnNlUXVlcnkiLCJpdGVtcyIsInNwbGl0cyIsIm5hbWUiLCJwdXNoIiwiYnVpbGQiLCJidWlsZEF1dGhvcml0eSIsImJ1aWxkSG9zdCIsImJ1aWxkVXNlcmluZm8iLCJidWlsZFF1ZXJ5IiwidW5pcXVlIiwia2V5IiwiYnVpbGRRdWVyeVBhcmFtZXRlciIsImFkZFF1ZXJ5IiwiY29uY2F0IiwicmVtb3ZlUXVlcnkiLCJoYXNRdWVyeSIsIndpdGhpbkFycmF5IiwiX2Jvb2x5IiwiQm9vbGVhbiIsIm9wIiwiY29tbW9uUGF0aCIsIk1hdGgiLCJtaW4iLCJ3aXRoaW5TdHJpbmciLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJfc3RhcnQiLCJfZW5kIiwiX3RyaW0iLCJfYXR0cmlidXRlT3BlbiIsImxhc3RJbmRleCIsImV4ZWMiLCJpbmRleCIsImlnbm9yZUh0bWwiLCJhdHRyaWJ1dGVPcGVuIiwibWF4Iiwic2VhcmNoIiwiaWdub3JlIiwicmVzdWx0IiwiZW5zdXJlVmFsaWRIb3N0bmFtZSIsInRvQVNDSUkiLCJub0NvbmZsaWN0IiwicmVtb3ZlQWxsIiwidW5jb25mbGljdGVkIiwiVVJJVGVtcGxhdGUiLCJkZWZlckJ1aWxkIiwiX2RlZmVycmVkX2J1aWxkIiwiX3N0cmluZyIsImNsb25lIiwidmFsdWVPZiIsImdlbmVyYXRlU2ltcGxlQWNjZXNzb3IiLCJnZW5lcmF0ZVByZWZpeEFjY2Vzc29yIiwiX2tleSIsImhhc2giLCJyZXMiLCJfb2JqZWN0IiwiYXR0cmlidXRlIiwic3JjIiwiaXMiLCJ3aGF0IiwiaXAiLCJpcDQiLCJpcDYiLCJzbGQiLCJpZG4iLCJyZWxhdGl2ZSIsImhhcyIsIl9wcm90b2NvbCIsIl9wb3J0IiwiX2hvc3RuYW1lIiwic2NoZW1lIiwieCIsIm9yaWdpbiIsImF1dGhvcml0eSIsImhvc3QiLCJ1c2VyaW5mbyIsInJlc291cmNlIiwic3ViZG9tYWluIiwiZG9tYWluIiwic3ViIiwiUmVnRXhwIiwidGxkIiwiZ2V0IiwiUmVmZXJlbmNlRXJyb3IiLCJkaXJlY3RvcnkiLCJmaWxlbmFtZSIsImRlY29kZVBhdGhTZWdtZW50IiwibXV0YXRlZERpcmVjdG9yeSIsIm5vcm1hbGl6ZVBhdGgiLCJzdWZmaXgiLCJzIiwic2VnbWVudCIsInNlcGFyYXRvciIsImFic29sdXRlIiwiRXJyb3IiLCJwb3AiLCJ1bnNoaWZ0Iiwic2VnbWVudENvZGVkIiwicSIsInNldFF1ZXJ5Iiwic2V0U2VhcmNoIiwiYWRkU2VhcmNoIiwicmVtb3ZlU2VhcmNoIiwiaGFzU2VhcmNoIiwibm9ybWFsaXplIiwibm9ybWFsaXplUHJvdG9jb2wiLCJub3JtYWxpemVRdWVyeSIsIm5vcm1hbGl6ZUZyYWdtZW50Iiwibm9ybWFsaXplSG9zdG5hbWUiLCJub3JtYWxpemVQb3J0IiwiYmVzdCIsIl9wYXRoIiwiX3dhc19yZWxhdGl2ZSIsIl9sZWFkaW5nUGFyZW50cyIsIl9wYXJlbnQiLCJfcG9zIiwibm9ybWFsaXplUGF0aG5hbWUiLCJub3JtYWxpemVTZWFyY2giLCJub3JtYWxpemVIYXNoIiwiZCIsInJlYWRhYmxlIiwidXJpIiwidG9Vbmljb2RlIiwicXAiLCJrdiIsInJlc29sdmVkIiwicHJvcGVydGllcyIsImJhc2VkaXIiLCJyZWxhdGl2ZVRvIiwicmVsYXRpdmVQYXJ0cyIsImJhc2VQYXJ0cyIsImNvbW1vbiIsInJlbGF0aXZlUGF0aCIsImJhc2VQYXRoIiwicGFyZW50cyIsImVxdWFscyIsIm9uZV9tYXAiLCJ0d29fbWFwIiwiY2hlY2tlZCIsIm9uZV9xdWVyeSIsInR3b19xdWVyeSIsIldvcmtmbG93IiwiSW1hZ2VTaWduIiwiVHJhY2VzSGFuZGxlciIsIlRyYWNlc1RlbXBsYXRlIiwiSW5zdGFuY2Vmb3JtVGVtcGxhdGUiLCJJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZSIsIkluc3RhbmNlU2lnblRleHQiLCJSZWxhdGVkSW5zdGFuY2VzIiwiUmVsYXRlZFJlY29yZHMiLCJJbnN0YW5jZU1hY3JvIiwiY29udGV4dCIsIlRyYWNlc01hbmFnZXIiLCJpc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyIsImZpZWxkX2Zvcm11bGEiLCJpbmNsdWRlc09waW5pb25GaWVsZCIsImZvcm0iLCJmb3JtX3ZlcnNpb24iLCJfZm9ybV92ZXJzaW9uIiwiZmllbGRfZm9ybXVsYXMiLCJmaWVsZHMiLCJBcnJheSIsIk1ldGVvciIsImlzU2VydmVyIiwidXVmbG93TWFuYWdlciIsImdldEZvcm1WZXJzaW9uIiwiZGIiLCJmb3JtcyIsImZpbmRPbmUiLCJfaWQiLCJmb3JtX3ZlcnNpb25zIiwiZm9yRWFjaCIsImYiLCJyZWYiLCJjb25zb2xlIiwibG9nIiwiZjEiLCJmb3JtdWxhIiwiXyIsInNvbWUiLCJoZWxwZXJzIiwiaW5zdGFuY2VfdGFza3MiLCJDb2xsZWN0aW9uIiwiX3NpbXBsZVNjaGVtYSIsIlNpbXBsZVNjaGVtYSIsImluc3RhbmNlIiwidHJhY2UiLCJpc19maW5pc2hlZCIsInVzZXIiLCJ1c2VyX25hbWUiLCJoYW5kbGVyIiwiaGFuZGxlcl9uYW1lIiwiaGFuZGxlcl9vcmdhbml6YXRpb24iLCJoYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lIiwiaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWUiLCJzdGFydF9kYXRlIiwiRGF0ZSIsImR1ZV9kYXRlIiwiaXNfcmVhZCIsImlzX2Vycm9yIiwidmFsdWVzIiwiZGVhZGxpbmUiLCJyZW1pbmRfZGF0ZSIsInJlbWluZGVkX2NvdW50IiwiTnVtYmVyIiwicmVhZF9kYXRlIiwiZGVzY3JpcHRpb24iLCJtb2RpZmllZCIsIm1vZGlmaWVkX2J5Iiwic2lnbl9zaG93IiwianVkZ2UiLCJuZXh0X3N0ZXBzIiwiZmluaXNoX2RhdGUiLCJjb3N0X3RpbWUiLCJzcGFjZSIsImluc3RhbmNlX25hbWUiLCJzdWJtaXR0ZXIiLCJzdWJtaXR0ZXJfbmFtZSIsImFwcGxpY2FudCIsImFwcGxpY2FudF9uYW1lIiwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lIiwic3VibWl0X2RhdGUiLCJmbG93IiwiZmxvd19uYW1lIiwic3RlcCIsInN0ZXBfbmFtZSIsImNhdGVnb3J5X25hbWUiLCJpbnN0YW5jZV9zdGF0ZSIsImRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSIsImZvcndhcmRfZnJvbV9pbnN0YW5jZSIsImtleXdvcmRzIiwiaXNfYXJjaGl2ZWQiLCJjYXRlZ29yeSIsImF1dGhfdG9rZW5zIiwiX2dldExvY2FsZSIsIl9nZXRSZXF1aXJlZEZpZWxkcyIsIl9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyIsIl9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcyIsIl9nZXRUZW1wbGF0ZURhdGEiLCJfZ2V0Vmlld0h0bWwiLCJnZXRMaW5rVGV4dCIsIm1hcmtlZCIsInJlcXVpcmUiLCJJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUiLCJpbnN0YW5jZV9hdHRhY2htZW50IiwiYWZTZWxlY3RVc2VyUmVhZCIsImFmRm9ybUdyb3VwUmVhZCIsImFmRm9ybUdyb3VwIiwiY3JlYXRlIiwidGVtcGFsdGVOYW1lIiwic3RlZWRvc0RhdGEiLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlQ29tcGlsZWQiLCJ0ZW1wbGF0ZVJlbmRlckZ1bmN0aW9uIiwiU3BhY2ViYXJzQ29tcGlsZXIiLCJjb21waWxlIiwiaXNCb2R5IiwiZXZhbCIsIlRlbXBsYXRlIiwiQmxhemUiLCJjcmVhdGVJbnN0YW5jZVNpZ25UZXh0IiwiaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkIiwiaW5zdGFuY2VTaWduVGV4dEh0bWwiLCJpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZVNpZ25UZXh0IiwiY3JlYXRlSW1hZ2VTaWduIiwiaW1hZ2VTaWduQ29tcGlsZWQiLCJpbWFnZVNpZ25IdG1sIiwiaW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24iLCJpbWFnZVNpZ24iLCJjcmVhdGVUcmFjZXNIYW5sZGVyIiwidHJhY2VzSGFubGRlckNvbXBpbGVkIiwidHJhY2VzSGFubGRlckh0bWwiLCJ0cmFjZXNIYW5sZGVyUmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZV90cmFjZXNfaGFuZGxlciIsImluaXQiLCJpdGVtIiwibGFiZWwiLCJkZXRhaWxfdXJsIiwiU3RlZWRvcyIsImFic29sdXRlVXJsIiwiZ2V0VmFsdWUiLCJmaWVsZCIsImxvY2FsZSIsInV0Y09mZnNldCIsImRhdGUiLCJmaWVsZE9wdGlvbnMiLCJob3VycyIsIm1vbnRoIiwibmFtZUZpZWxkIiwicmVjb3JkcyIsInNlY29uZHMiLCJzZWxlY3RlZE9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInNwbGl0ZWRWYWx1ZXMiLCJ0MCIsInQxIiwidWlTY2hlbWEiLCJ5ZWFyIiwibiIsIml0ZW1TcGxpdHMiLCJlbmNvZGVVUkkiLCJlcnJvciIsImlzX211bHRpc2VsZWN0IiwiZ2V0UHJvcGVydHkiLCJmdWxsbmFtZSIsIlRBUGkxOG4iLCJfXyIsImZvcm1hdERhdGUiLCJpc190ZXh0YXJlYSIsIk5wbSIsIlNwYWNlYmFycyIsIlNhZmVTdHJpbmciLCJmaW5kIiwiZmlsdGVyIiwiaXNfcGVyY2VudCIsIm51bWJlclRvUGVyY2VudFN0cmluZyIsImRpZ2l0cyIsIm51bWJlclRvU3RyaW5nIiwiaXNDbGllbnQiLCJhdXRoUmVxdWVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhc3luYyIsIm9iamVjdEZpbmQiLCJmaWx0ZXJzIiwib3JpZ2luYWwiLCJDcmVhdG9yIiwiZ2V0T2JqZWN0IiwicmVmZXJlbmNlX3RvIiwiTkFNRV9GSUVMRF9LRVkiLCJyZWZlcmVuY2VfdG9fZmllbGQiLCJnZXRPYmplY3ROYW1lRmllbGRLZXkiLCJnZXRMYWJlbCIsImNvZGUiLCJmaW5kUHJvcGVydHlCeVBLIiwiZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbiIsImZvcm1fZmllbGRzIiwiY3VycmVudCIsIndoZXJlIiwiaGlzdG9yeXMiLCJnZXRGbG93VmVyc2lvbiIsImZsb3dfdmVyc2lvbiIsImZsb3dzIiwidmlld0h0bWwiLCJBc3NldHMiLCJnZXRUZXh0IiwicmVmMSIsInRvTG9jYWxlTG93ZXJDYXNlIiwicmV2IiwiaXNfcmVxdWlyZWQiLCJzdGVwcyIsImVkaXRhYmxlQ29kZSIsInN0YXJ0U3RlcCIsImtleXMiLCJwZXJtaXNzaW9ucyIsInJlcXVpcmVkRmllbGRzIiwiaW50ZXJzZWN0aW9uIiwiV29ya2Zsb3dNYW5hZ2VyIiwiV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdCIsImdldEF1dG9mb3JtU2NoZW1hVmFsdWVzIiwiaW5zbmFtZSIsImluc19zdGF0ZSIsInN0YXRlIiwiaW5zX2ZpbmFsX2RlY2lzaW9uIiwiaW5zX2NvZGUiLCJpbnNfaXNfYXJjaGl2ZWQiLCJpbnNfaXNfZGVsZXRlZCIsImFwcGxpY2FudENvbnRleHQiLCJzZXNzaW9uVXNlcklkIiwiZWRpdGFibGUiLCJzdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyIsInBhc3NpbmciLCJtb21lbnQiLCJmb3JtYXQiLCJnZXRJbnN0YW5jZVZpZXciLCJib2R5IiwiaW5zdGFuY2VDb21waWxlZCIsImluc3RhbmNlUmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZVRlbXBsYXRlIiwiVGVtcGxhdGVNYW5hZ2VyIiwiZ2V0VGVtcGxhdGUiLCJ0ZW1wbGF0ZU5hbWUiLCJpbnN0YW5jZV9yZWFkb25seV92aWV3IiwidG9IVE1MV2l0aERhdGEiLCJnZXRUcmFjZXNWaWV3IiwidHJhY2VDb21waWxlZCIsInRyYWNlUmVuZGVyRnVuY3Rpb24iLCJ0cmFjZXNIdG1sIiwiaW5zdGFuY2Vfc3R5bGUiLCJ0cmFjZV9yZWFkb25seV92aWV3IiwidHJhY2VzIiwiZ2V0QXR0YWNobWVudFZpZXciLCJhdHRhY2htZW50Q29tcGlsZWQiLCJhdHRhY2htZW50SHRtbCIsImF0dGFjaG1lbnRSZW5kZXJGdW5jdGlvbiIsImF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXciLCJnZXRSZWxhdGVkSW5zdGFuY2VzVmlldyIsInJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCIsInJlbGF0ZWRJbnN0YW5jZXNIdG1sIiwicmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uIiwicmVsYXRlZF9pbnN0YW5jZXNfdmlldyIsImdldFJlbGF0ZWRSZWNvcmRzVmlldyIsInJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQiLCJyZWxhdGVkUmVjb3Jkc0h0bWwiLCJyZWxhdGVkUmVjb3Jkc1JlbmRlckZ1bmN0aW9uIiwicmVsYXRlZF9yZWNvcmRzX3ZpZXciLCJnZXRPbkxvYWRTY3JpcHQiLCJmb3JtX3NjcmlwdCIsImdldEluc3RhbmNlSHRtbCIsImFsbENzc0xpbmsiLCJhdHRhY2htZW50IiwiY3JlYXRvclNlcnZpY2UiLCJjc3NIcmVmIiwiZm9ybURlc2NyaXB0aW9uIiwiZm9ybURlc2NyaXB0aW9uSHRtbCIsImh0bWwiLCJpbnNfcmVjb3JkX2lkcyIsImluc3RhbmNlQm94U3R5bGUiLCJqcUhyZWYiLCJvbkxvYWRTY3JpcHQiLCJvcGVuRmlsZVNjcmlwdCIsInJlbGF0ZWRfaW5zdGFuY2VzIiwicmVsYXRlZF9yZWNvcmRzIiwic2hvd1RyYWNlc0J0biIsInNob3dUcmFjZXNTY3JpcHQiLCJ0cmFjZUNoZWNrIiwid2lkdGgiLCJzZXR0aW5ncyIsIndlYnNlcnZpY2VzIiwiY3JlYXRvciIsInJlY29yZF9pZHMiLCJpc01vYmlsZSIsInNob3dUcmFjZSIsImZpbmFsX2RlY2lzaW9uIiwic2hvd0F0dGFjaG1lbnRzIiwiaXNFbXB0eSIsInRhZ2dlciIsInN0eWxlcyIsInBsdWdpbnMiLCJhZGRfc3R5bGVzIiwiZm9ybUlkIiwiaW5zdGFuY2VfdGl0bGUiLCJwYWdlVGl0bGUiLCJwYWdlVGl0bGVUckNsYXNzIiwidmFsIiwiQ29yZUZvcm0iLCJwYWdlVGl0bGVGaWVsZE5hbWUiLCJoYW5kbGVUYWJsZVRlbXBsYXRlIiwiX2V4cG9ydCIsInRhYmxlX2ZpZWxkcyIsInRhYmxlX2ZpZWxkIiwiZmllbGRfcGVybWlzc2lvbiIsInB1cmVDb2RlIiwicmVxdWlyZWQiLCJ0aXRsZV9wZXJtaXNzaW9uIiwicmVtb3ZlU3BlY2lhbENoYXJhY3RlciIsImlzT3BpbmlvbkZpZWxkIiwidHJfc3RhcnQiLCJ0ZF9jb2xzcGFuIiwidHJfZW5kIiwiaW5jbHVkZXMiLCJwZXJtaXNzaW9uIiwiX3RlbXBsYXRlIiwidGFibGUiLCJfdGVtcGxhdGVIZWxwcyIsInN0ZWVkb3NfaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsImF0dHMiLCJpZCIsInN0eWxlIiwiZGlzYWJsZWQiLCJpbnN0YW5jZUlkIiwiZm9ybV90eXBlcyIsIkFwcHJvdmVNYW5hZ2VyIiwiaXNSZWFkT25seSIsInN0ZWVkb3NfZm9ybSIsImlubmVyc3ViZm9ybUNvbnRleHQiLCJkb2NfdmFsdWVzIiwiU2Vzc2lvbiIsImEiLCJiIiwiZ2V0QXV0b2Zvcm1TY2hlbWEiLCJpbnN0YW5jZV9ib3hfc3R5bGUiLCJib3giLCJpbnMiLCJwcmludF90ZW1wbGF0ZSIsImluc3RhbmNlX3RlbXBsYXRlIiwiU3RlZWRvc1RhYmxlIiwiY2hlY2tJdGVtIiwiaXRlbV9pbmRleCIsImZpZWxkT2JqIiwiZ2V0RmllbGQiLCJmaWVsZFZhbCIsImdldEl0ZW1Nb2RhbFZhbHVlIiwic2ZfbmFtZSIsInNmaWVsZHMiLCJzZiIsIkluc3RhbmNlTWFuYWdlciIsImNoZWNrRm9ybUZpZWxkVmFsdWUiLCIkIiwic2V0VGFibGVJdGVtVmFsdWUiLCJpdGVtX3ZhbHVlIiwidGFibGVWYWx1ZSIsImdldFRhYmxlVmFsdWUiLCJnZXRUYWJsZUl0ZW1WYWx1ZSIsInJlbW92ZVRhYmxlSXRlbSIsInJlbW92ZWQiLCJzZXRUYWJsZVZhbHVlIiwiZ2V0VmFsaWRWYWx1ZSIsInZhbGlkVmFsdWUiLCJoYW5kbGVEYXRhIiwiaW5zdGFuY2VGaWVsZHMiLCJnZXRJbnN0YW5jZUZpZWxkcyIsImdldE1vZGFsRGF0YSIsIkZvcm1fZm9ybXVsYSIsImdldEZvcm11bGFGaWVsZFZhcmlhYmxlIiwiQXV0b0Zvcm0iLCJnZXRGb3JtVmFsdWVzIiwiaW5zZXJ0RG9jIiwiYWRkSXRlbSIsIl9pdGVtX3ZhbHVlIiwiZ2V0S2V5cyIsImFwcGVuZCIsImdldFRyIiwidXBkYXRlSXRlbSIsInRkcyIsImdldFJlbW92ZVRkIiwic2ZpZWxkIiwiZ2V0VGQiLCJlbXB0eSIsInJ1bkZvcm11bGEiLCJyZW1vdmVJdGVtIiwiaGlkZSIsInNob3dNb2RhbCIsIm1ldGhvZCIsIm1vZGFsRGF0YSIsInNldFRpbWVvdXQiLCJNb2RhbCIsInNob3ciLCJnZXRDdXJyZW50RGF0YUZvckZvcm0iLCJzcyIsImdldEZvcm1TY2hlbWEiLCJzY2hlbWEiLCJvYmplY3RLZXlzIiwiX21ha2VHZW5lcmljIiwiZ2V0VGhlYWQiLCJpc09iamVjdCIsInRoZWFkIiwidHJzIiwic2ZfbGVuZ3RoIiwid2lkZV9maWVsZHMiLCJmaWx0ZXJQcm9wZXJ0eSIsImlzX3dpZGUiLCJnZXRUYm9keSIsInNmaWVsZHNFZGl0YWJsZSIsInRib2R5IiwidHIiLCJ0ZCIsInRkX3ZhbHVlIiwiZ2V0VERWYWx1ZSIsInZpZXciLCJDRkRhdGFNYW5hZ2VyIiwiZ2V0Rm9ybXVsYVNwYWNlVXNlcnMiLCJ1IiwiZ2V0Rm9ybXVsYU9yZ2FuaXphdGlvbnMiLCJvIiwiZ2V0Rm9ybXVsYU9yZ2FuaXphdGlvbiIsInBsdWNrIiwiYWRkSW5wdXRUeXBlIiwidmFsdWVPdXQiLCJ2YWx1ZUNvbnZlcnRlcnMiLCJzdHJpbmdUb1N0cmluZ0FycmF5Iiwic3RyaW5nVG9OdW1iZXIiLCJzdHJpbmdUb051bWJlckFycmF5Iiwic3RyaW5nVG9Cb29sZWFuIiwic3RyaW5nVG9Cb29sZWFuQXJyYXkiLCJzdHJpbmdUb0RhdGUiLCJzdHJpbmdUb0RhdGVBcnJheSIsImNvbnRleHRBZGp1c3QiLCJtYXhsZW5ndGgiLCJhZlRhYmxlIiwiZXZlbnRzIiwiZXZlbnQiLCJuZXdfaXRlbV9pbmRleCIsImN1cnJlbnRUYXJnZXQiLCJkYXRhc2V0Iiwic2V0IiwicmVuZGVyZWQiLCJzdHIiLCJhZGRJdGVtVHIiLCJnZXRDdXJyZW50U3RlcCIsInN0ZXBfdHlwZSIsImNjSGFzRWRpdFBlcm1pc3Npb24iLCJhdXRvcnVuIiwiY3VycmVudERhdGEiLCJzcGFjZVVzZXJTaWduIiwidXNlcklkIiwic3BhY2VfdXNlcl9zaWducyIsImltYWdlVVJMIiwic2lnbiIsInNob3dTaWduSW1hZ2UiLCJ0cmFjZVNob3dTaWduSW1hZ2UiLCJvYmplY3RVcmwiLCJvYmplY3RfbmFtZSIsInJlY29yZF9pZCIsImFwcF9pZCIsImdldE9iamVjdFVybCIsInVuZW1wdHkiLCJ1bmVxdWFscyIsImluY2x1ZGUiLCJyZWYyIiwicmVmMyIsImdldEluc3RhbmNlRmxvd1ZlcnNpb24iLCJhcHByb3ZlcyIsInJlZjQiLCJhcHByb3ZlIiwianVkZ2VfbmFtZSIsIm9waW5pb25fZmllbGRzX2NvZGUiLCJzaWduX2ZpZWxkX2NvZGUiLCJhZnRlcl9maWVsZCIsImJlZm9yZV9maWVsZCIsInByZV9maWVsZHMiLCJwcmVfd2lkZV9maWVsZHMiLCJzb3J0X2FwcHJvdmUiLCJvcmRlciIsInAxIiwicDIiLCJfcDEiLCJfcDIiLCJnZXRUaW1lIiwiX3QiLCJnZXRDZkNsYXNzIiwiZ2V0VGFibGVUaGVhZCIsImdldFRhYmxlQm9keSIsInNob3dMYWJlbCIsInRlbXBsYXRlRGF0YSIsImdldE9waW5pb25GaWVsZFN0ZXBzTmFtZSIsInRvcF9rZXl3b3JkcyIsImZvbzEiLCJvcGluaW9uRmllbGRzIiwiZm9vIiwianNvbl9mb3JtdWxhIiwiczEiLCJlcnJvcjEiLCJ5aWppYW5sYW4iLCJzdGVwTmFtZSIsImltYWdlX3NpZ24iLCJvbmx5X2NjX29waW5pb24iLCJvbmx5X2NjIiwiZGVmYXVsdF9kZXNjcmlwdGlvbiIsIm9ubHlfaGFuZGxlciIsInNob3dDQ09waW5pb24iLCJtYXJrRG93blRvSHRtbCIsIm1hcmtEb3duU3RyaW5nIiwiZl9sYWJlbCIsInRoYXQiLCJpc1NlY3Rpb24iLCJyZWdpc3RlckhlbHBlciIsImluc19hdHRhY2hfZG93bmxvYWRfdXJsIiwiZ2V0UGVybWlzc2lvbnMiLCJpbnN0YW5jZWZvcm1DaGFuZ2VFdmVudCIsInByZXZlbnREZWZhdWx0Iiwib3BlbldpbmRvdyIsInRhcmdldCIsIm9uQ3JlYXRlZCIsImNvbXBpbGVkIiwiaW5zdGFuY2VDdXN0b21UZW1wbGF0ZSIsImluc3RhbmNlVmlldyIsInJlbmRlckZ1bmN0aW9uIiwiVmlldyIsImluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZSIsIm9uUmVuZGVyZWQiLCJjdXJyZW50QXBwcm92ZSIsImN1cnJlbnRTdGVwIiwiZm9ybXVsYV9maWVsZHMiLCJpbnN0YW5jZU51bWJlckZpZWxkcyIsInNldEluc3RhbmNlRm9ybUFwcGxpY2FudCIsIm5leHRTdGVwcyIsIm5leHRTdGVwVXNlcnMiLCJJbnN0YW5jZUV2ZW50IiwiaW5pdEV2ZW50cyIsImdldEN1cnJlbnRBcHByb3ZlIiwiZWFjaCIsImVsZW1lbnQiLCJzY2hlbWFLZXkiLCJ0b2FzdHIiLCJyZWFzb24iLCJnZXRGaWVsZFZhbHVlIiwiSW5zdGFuY2VOdW1iZXJSdWxlcyIsImluc3RhbmNlTnVtYmVyQnVpbGRlciIsInRyaWdnZXIiLCJydW4iLCJzaG93TWFpblRpdGxlIiwid29ya2Zsb3dNYWluQXR0YWNoVGl0bGUiLCJlbmFibGVkX2FkZF9tYWluX2F0dGFjaG1lbnQiLCJjdXJyZW50X3N0ZXAiLCJjdXJyZW50VHJhY2UiLCJnZXRDdXJyZW50VHJhY2UiLCJtYWluX2F0dGFjaF9jb3VudCIsImNmcyIsImluc3RhbmNlcyIsImNvdW50IiwiZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCIsInN0YXJ0X3N0ZXAiLCJnZXRTdGFydFN0ZXAiLCJjYW5fZWRpdF9tYWluX2F0dGFjaCIsImVuYWJsZWRfZWRpdF9ub3JtYWxfYXR0YWNobWVudCIsImdldEZsb3ciLCJ1cGxvYWRfYWZ0ZXJfYmVpbmdfZGlzdHJpYnV0ZWQiLCJpc0NDIiwiZ2V0Q0NTdGVwIiwiY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCIsIm1haW5fYXR0YWNobWVudCIsIm1haW5fYXR0YWNoIiwibm9ybWFsX2F0dGFjaG1lbnRzIiwic2VsZWN0b3IiLCIkbmUiLCJkZmlzIiwiZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcyIsIiRpbiIsImRpc3RyaWJ1dGVfbWFpbiIsImZpcnN0VmVyc2lvbk1haW4iLCJtZXRhZGF0YSIsInBhcmVudCIsImF0dGFjaG1lbnRVcGxvYWRlZEF0IiwidXBsb2FkZWRBdCIsImZpcnN0VmVyc2lvbiIsInNvcnRCeSIsImluc3RhbmNlSWRzIiwiYXR0YWNobWVudHNfY291bnQiLCJmbG93X2ZpbGVzIiwiZmlsZXMiLCJpc0RyYWZ0QW5kRmxvd2ZpbGVzRXhpc3QiLCJjb21wYWN0IiwiYXR0YWNobWVudHMiLCIkb3IiLCJmZXRjaCIsIm15QXBwcm92ZSIsIm15VHJhY2UiLCJpc0luYm94IiwiZGVmYXVsdERlc2NyaXB0aW9uIiwiYXBwcm92ZV9zb3J0IiwiYXBwcm92ZXNHcm91cCIsImFwcHJvdmVzX3NvcnRlZCIsImNvbXBsZXRlZF9kYXRlIiwiaGFzTmV4dCIsImhhdmVEZXNjcmlwdGlvbkFwcHJvdmUiLCJpc19jb21wbGV0ZWQiLCJsYXN0IiwidG9wX2FwcHJvdmVzIiwidW5pb24iLCJ0b3BfYXBwcm92ZSIsImdyb3VwQnkiLCJoYW5kbGVyQXBwcm92ZXMiLCJkZXNjcmlwdGlvbkFwcHJvdmVzIiwid29ya2Zsb3ciLCJzaG93QmxhbmtBcHByb3ZlRGVzY3JpcHRpb24iLCJfZGlzcGxheSIsImlzTXlBcHByb3ZlIiwibXlBcHByb3ZlRGVzY3JpcHRpb24iLCJhcHByb3ZlSWQiLCJub3ciLCJpc09waW5pb25PZkZpZWxkIiwiaW1hZ2VTaWduRGF0YSIsImdldExhc3RTaWduQXBwcm92ZSIsImdldEhhbmRsZXJTaWduU2hvd0FwcHJvdmVzIiwibGFzdE15QXBwcm92ZURlc2NyaXB0aW9uIiwic2hvd0FwcHJvdmUiLCJqdWRnZV9kZXNjcmlwdGlvbiIsImlzX2FwcHJvdmVkIiwiaXNfcmVqZWN0ZWQiLCJpc19yZWFkZWQiLCJhZGRDbGFzcyIsImRhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsImdldFN0ZXBOYW1lIiwic3RlcElkIiwiZ2V0SW5zdGFuY2VTdGVwIiwic2hvd0RlbGV0ZUJ1dHRvbiIsImFwcHJvdmVkIiwiZnJvbV91c2VyIiwiaXNTaG93TW9kaWZpY2F0aW9uQnV0dG9uIiwiYXBwcm92ZV9hZG1pbnMiLCJpc1Nob3ciLCJjb250YWlucyIsImlzRWRpdGluZyIsImlzX2VkaXRpbmciLCJpc1Nob3dEZXNjcmlwdGlvbiIsImdldEFwcHJvdmVTdGF0dXNJY29uIiwiYXBwcm92ZUp1ZGdlIiwiYXV0b1N1Ym1pdHRlZCIsImFwcHJvdmVTdGF0dXNJY29uIiwiZ2V0QXBwcm92ZVN0YXR1c1RleHQiLCJhcHByb3ZlU3RhdHVzVGV4dCIsImdldEFwcHJvdmVKdWRnZUNsYXNzIiwiaXNGb3J3YXJkIiwic2hvd0ZvcndhcmREZWxldGVCdXR0b24iLCJmb3J3YXJkX2luc3RhbmNlIiwiaXNEaXN0cmlidXRlIiwic2hvd0Rpc3RyaWJ1dGVEZWxldGVCdXR0b24iLCJoYXNGbG93QWRtaW5QZXJtaXNzaW9uIiwiZmluaXNoRGF0ZVNjaGVtYSIsImlzQW5kcm9pZE9ySU9TIiwiYXV0b2Zvcm0iLCJvcHRpb25hbCIsInJlYWRvbmx5IiwiZGF0ZVRpbWVQaWNrZXJPcHRpb25zIiwiaWdub3JlUmVhZG9ubHkiLCJ3aWRnZXRQb3NpdGlvbmluZyIsImhvcml6b250YWwiLCJmaW5pc2hEYXRlVmFsdWVzIiwic2hvd1RyYWNlc1ZpZXciLCJzaG93X21vZGFsX3RyYWNlc19saXN0Iiwic3BhY2Vfc2V0dGluZ3MiLCJnZXRJbnN0YW5jZVN0YXRlVGV4dCIsImluc3RhbmNlX2lkIiwiZ2V0SW5zdGFuY2VTdGF0ZUNvbG9yIiwiY2xhIiwiZmlyc3RUcmFjZSIsImxhc3RfZGlzdHJpYnV0ZV9mcm9tIiwiZGlzX2luZm8iLCIkZXhpc3RzIiwiY3JlYXRlZCIsImNyZWF0ZWRfYnkiLCJVVWZsb3dfYXBpIiwiZ2V0TmFtZUZvclVzZXIiLCJ1c2VycyIsImZyb21fdXNlcl9uYW1lIiwiaXNDQ09yRGlzdHJpYnV0ZU9yRm9yd2FyZFRlcm1pbmF0ZWQiLCJqdWRnZVRlcm1pbmF0ZWQiLCJpbnN0YW5jZUV4aXN0cyIsImFnZW50RGVzY3JpcHRpb24iLCJ1c2VyTmFtZSIsInRyYWNlTmFtZSIsInRyYWNlSWQiLCJoYW5kbGVyRG9jIiwiaGFuZGxlcklkIiwidXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyIsImdldENvbnRhY3RJbmZvRm9yVXNlciIsInN0b3BQcm9wYWdhdGlvbiIsImNhbGxpbmciLCJlcnIiLCJyZW1vdmVDbGFzcyIsInN1Y2Nlc3MiLCJhbGxvd011bHRpcGxlIiwiY2xvc2VzdCIsInRhcmdldF91c2VyX2lkIiwib3BlblNhZmVPYmplY3RVcmwiLCJmb3J3YXJkX3NwYWNlIiwiZm9yd2FyZHNwYWNlIiwiZm9yd2FyZGluc3RhbmNlIiwiVHJhY2tlciIsImFmdGVyRmx1c2giLCJvbiIsInNjcm9sbFRvcCIsImZpbmlzaF9pbnB1dCIsIm9waW5pb25faW5wdXQiLCJzaG93UmVsYXRlZEluc3RhY2VzIiwicmVsYXRlZF9pbnN0YWNlcyIsInJlbGF0ZWRfaW5zdGFjZV91cmwiLCJpc0NvcmRvdmEiLCJzaG93X2RlbGV0ZSIsInNob3dSZWxhdGVkUmVjb3JkcyIsInJlbGF0ZWRSZWNvcmRVcmwiLCJvYmpjZXROYW1lIiwiaWRzIiwicHJvY2VzcyIsImVudiIsIkNSRUFUT1JfTk9ERV9FTlYiLCJKc29uUm91dGVzIiwiYWRkIiwicmVxIiwibmV4dCIsImhhc2hEYXRhIiwiYWN0aW9uIiwidG9fdXNlcnMiLCJzZW5kUmVzdWx0Iiwic3RhY2siLCJlcnJvcnMiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwid29ya2Zsb3dNZXRob2RzIiwibWV0aG9kcyIsInNldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmUiLCJpbnNfaWQiLCJzdGVwX2FwcHJvdmUiLCJzdGVwc0FwcHJvdmVzT3B0aW9ucyIsImFwcGx5Iiwic2V0X2luc3RhbmNlX3NraXBfc3RlcHMiLCJnZXRfaW5zdGFuY2VfZGF0YSIsImZvcm1DYWNoZWQiLCJmbG93Q2FjaGVkIiwiZHJhZnRfc2F2ZV9pbnN0YW5jZSIsImluYm94X3NhdmVfaW5zdGFuY2UiLCJjY19kbyIsImNjX3VzZXJfaWRzIiwiY2NfcmVhZCIsImNjX3N1Ym1pdCIsImNjX3JlbW92ZSIsImJhdGNoX2NhbmNlbF9jYyIsImFwcHJvdmVfaWRzIiwiY2Nfc2F2ZSIsInNwYWNlX2lkIiwiZmxvd19pZCIsImhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudCIsImlzRm9yd2FyZEF0dGFjaG1lbnRzIiwic2VsZWN0ZWRVc2VycyIsImFjdGlvbl90eXBlIiwicmVsYXRlZCIsImZyb21fYXBwcm92ZV9pZCIsImZvcndhcmRfcmVtb3ZlIiwidHJhY2VfaWQiLCJhcHByb3ZlX2lkIiwiY2FuY2VsRGlzdHJpYnV0ZSIsImNmc19pbnN0YW5jZXNfcmVtb3ZlIiwiZmlsZV9pZCIsImNmc19pbnN0YW5jZXNfc2V0X2N1cnJlbnQiLCJjZnNfaW5zdGFuY2VzX2xvY2siLCJ1c2VyX2lkIiwiY2ZzX2luc3RhbmNlc191bmxvY2siLCJkb3dubG9hZF9zcGFjZV9pbnN0YW5jZV9hdHRhY2htZW50c190b19kaXNrIiwic3BhY2VJZCIsImNmc1JlY29yZElkcyIsInNldF9hcHByb3ZlX2hhdmVfcmVhZCIsImNoYW5nZV9hcHByb3ZlX2luZm8iLCJ1cGRhdGVfYXBwcm92ZV9zaWduIiwic2lnbl90eXBlIiwibGFzdFNpZ25BcHByb3ZlIiwidXBkYXRlX3NpZ25fc2hvdyIsIm9ianMiLCJteUFwcHJvdmVfaWQiLCJpbnN0YW5jZV9yZXR1cm4iLCJpbnN0YW5jZV9yZW1pbmQiLCJyZW1pbmRfdXNlcnMiLCJyZW1pbmRfY291bnQiLCJyZW1pbmRfZGVhZGxpbmUiLCJhY3Rpb25fdHlwZXMiLCJuZXh0X3N0ZXBfdXNlcnNfbm90X2ZvdW5kIiwiZGVhbF90eXBlIiwicGFyYW1zIiwiX2V2YWwiLCJjaGVja19tYWluX2F0dGFjaCIsInJlbW92ZV9yZWxhdGVkIiwicmVfaW5zX2lkIiwidXBkYXRlX2luc3RhbmNlX3JlbGF0ZWQiLCJ1cGRhdGVGbG93UG9zaXRpb24iLCJ1cGRhdGVGbG93Um9sZSIsInN0YXJ0X2Zsb3ciLCJmbG93SWQiLCJnZXRfaW5zdGFuY2VfdHJhY2VzIiwiY2F0ZWdvcnlJZCIsImZsb3dJZHMiLCJnZXRfYmF0Y2hfaW5zdGFuY2VzIiwiZ2V0X2JhdGNoX2luc3RhbmNlc19jb3VudCIsImdldF9teV9hcHByb3ZlcyIsImNoYW5nZV9mbG93X3N0YXRlIiwiaGlkZV9pbnN0YW5jZSIsImluc0lkIiwiaXNfaGlkZGVuIiwiZ2V0SW5zdGFuY2VWYWx1ZXMiLCJDb29raWVzIiwiZ2V0SW5zdGFuY2VSZWFkT25seSIsIl9oYXNQZXJtaXNzaW9uIiwiX2xvY2FsZSIsIl9wYXJlbnRfaW5zdGFuY2VzIiwiZGF0YUJ1ZiIsImhpZGVfdHJhY2VzIiwic3BhY2VVc2VyQ291bnQiLCJnZXRBUElMb2dpblVzZXIiLCJhY2Nlc3NfdG9rZW4iLCJnZXRVc2VySWRGcm9tQWNjZXNzVG9rZW4iLCJzcGFjZXMiLCJzcGFjZV91c2VycyIsImhhc0luc3RhbmNlUGVybWlzc2lvbnMiLCJfcGFyZW50X2lkIiwiX3BhcmVudF9pbnMiLCJjaGFyc2V0IiwiQnVmZmVyIiwic2V0SGVhZGVyIiwic3RhdHVzQ29kZSIsInJldF9zeW5jX3Rva2VuIiwic3BhY2VVc2VyIiwic3BhY2VVc2VyT3JnYW5pemF0aW9ucyIsInN5bmNfdG9rZW4iLCJBUElBdXRoZW50aWNhdGlvbkNoZWNrIiwiaGVhZGVycyIsImlzU3BhY2VBZG1pbiIsIm9yZ2FuaXphdGlvbnMiLCJjYW5Nb25pdG9yIiwiY2FuQWRtaW4iLCIkZ3QiLCIkbmluIiwiaW5ib3hfdWVycyIsImNjX3VzZXJzIiwib3V0Ym94X3VzZXJzIiwic2tpcCIsImxpbWl0IiwiY29waWVzIiwiYWxsQ3NzIiwiV2ViQXBwIiwiZ2V0UmVmcmVzaGFibGVBc3NldHMiLCJjc3MiLCJyb290VXJsIiwiX19tZXRlb3JfcnVudGltZV9jb25maWdfXyIsIlJPT1RfVVJMX1BBVEhfUFJFRklYIiwiUk9PVF9VUkwiLCJlbmRzV2l0aCIsImgiLCJnIiwibSIsImsiLCJnZXRFYWNoIiwidW5pcSIsIm1peGluIiwiZGVzdCIsImhhbmRlclVzZXJPYmplY3QiLCJvcmdhbml6YXRpb24iLCJociIsInNvcnRfbm8iLCJtb2JpbGUiLCJ3b3JrX3Bob25lIiwicG9zaXRpb24iLCJ1c2VyUm9sZXMiLCJyb2xlcyIsImhhbmRlck9yZ09iamVjdCIsIm9yZyIsImluaXRfZm9ybXVsYV92YWx1ZXMiLCJhdXRvRm9ybURvYyIsImFwcHJvdmVyIiwiX192YWx1ZXMiLCJ0YWJsZUZpZWxkcyIsInRhYmxlVmFsdWVzIiwiZm9ybXVsYVRhYmxlVmFsdWVzIiwiX190YWJsZVZhbHVlcyIsInRhYmxlZmllbGQiLCJnZXRGb3JtdWxhVXNlck9iamVjdHMiLCJnZXRGb3JtdWxhT3JnT2JqZWN0cyIsImdldEZvcm11bGFVc2VyT2JqZWN0IiwicHVibGlzaCIsImNoZWNrIiwicmVhZHkiLCJjYXRlZ29yaWVzIiwiYXBwIiwiZmxvd19wb3NpdGlvbnMiLCJyb2xlIiwicHVibGlzaENvbXBvc2l0ZSIsInRhYmxlTmFtZSIsIk1hdGNoIiwiT3B0aW9uYWwiLCJ1bmJsb2NrIiwiY2hpbGRyZW4iLCJmbG93X3JvbGVzIiwiY3JlYXRlVGVtcGxhdGVGb3JtQW5kRmxvdyIsInBlcm1zIiwiY29tcGFueV9pZCIsImRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnMiLCJkaXN0cmlidXRlX3RvX3NlbGYiLCJlbmFibGVfYW1pc2Zvcm0iLCJ2ZXJzaW9uSWQiLCJoYW5kbGUiLCJzZWxmIiwibGF0ZXN0Iiwib2JzZXJ2ZUNoYW5nZXMiLCJjaGFuZ2VkIiwiYWRkZWQiLCJvblN0b3AiLCJzdG9wIiwiZmxvd19pZHMiLCJkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb24iLCJhbGxvd19zZWxlY3Rfc3RlcCIsImFtaXNfc2NoZW1hIiwiZ2V0TWluaUluc3RhbmNlIiwiZ2V0TXlhcHByb3ZlTW9kaWZpZWQiLCJpbnN0YW5jZV9maWVsZHNfMCIsIm1pbmlBcHByb3ZlRmllbGRzIiwibmVlZENoYW5nZSIsInRyaWdnZXJDaGFuZ2VGaWVsZHMiLCJ0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzIiwibXlBcHByb3ZlTW9kaWZpZWRzIiwiX2luc3RhbmNlSWQiLCJfdHJhY2UiLCJjaGFuZ2VGaWVsZHMiLCJfY2hhbmdlIiwiX3JldiIsIl9teV9hcHByb3ZlX21vZGlmaWVkcyIsImlzRXF1YWwiLCJnZXRJbnN0YW5jZVRyYWNlcyIsIl9pbnNJZCIsImluYm94X3VzZXJzIiwiYXN5bmNMYXN0RmluaXNoZWRBcHByb3ZlIiwibGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZSIsImluc3RhbmNlaWQiLCJkYXRhTWFwIiwib3BlcmF0aW9uIiwicmF3Q29sbGVjdGlvbiIsImFnZ3JlZ2F0ZSIsInRvQXJyYXkiLCJkb2MiLCJpc0Z1bmN0aW9uIiwid3JhcEFzeW5jIiwiZ2V0TXlBcHByb3ZlIiwiZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlIiwiZ2V0U3RlcEN1cnJlbnROYW1lIiwibm90RmluaXNoZWRUcmFjZXMiLCJhZ2VudCIsInN0ZXBDdXJyZW50TmFtZSIsIiRzbGljZSIsIm15TGFzdEZpbmlzaGVkQXBwcm92ZSIsImFnZW50X3VzZXJfbmFtZSIsIm15X2ZpbmlzaF9kYXRlIiwiaXNfY2MiLCJjY19jb3VudCIsInRhYnVsYXJOYW1lIiwiaW5zdGFuY2VfaWRzIiwicmVsYXRlZF9pbnN0YW5jZV9pZHMiLCJfYXN5bmNfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSIsIl9nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlIiwiX2l0ZW1zIiwiJG1hdGNoIiwiJGdyb3VwIiwiJHN1bSIsIl9jaGFuZ2VEYXRhIiwiX2Zsb3dzRGF0YSIsIl9pbml0IiwiZGF0YUl0ZW0iLCJmbG93X2luc3RhbmNlIiwib2JzZXJ2ZSIsImdldENvbGxlY3Rpb24iLCJ3b3JrZmxvd1RlbXBsYXRlIiwic3RhcnR1cCIsImFic29sdXRlX3BhdGhfY24iLCJhYnNvbHV0ZV9wYXRoX3VzIiwiZmlsZXNMaXN0X2NuIiwiZmlsZXNMaXN0X3VzIiwiZnMiLCJtaW1lIiwicGF0aF9jbiIsInBhdGhfdXMiLCJyZWFkRmlsZUxpc3QiLCJwYXRoRGlyIiwiZmlsZXNMaXN0IiwicmVhZGRpclN5bmMiLCJzdGF0Iiwic3RhdFN5bmMiLCJpc0RpcmVjdG9yeSIsIndvcmtmbG93VGVtcGxhdGVzIiwicmVzb2x2ZSIsImV4aXN0c1N5bmMiLCJmaWxlIiwicmVhZEZpbGVTeW5jIiwiZ29fbmV4dCIsInJ1bGUiLCJzY2hlZHVsZSIsImNyb24iLCJhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24iLCJzY2hlZHVsZUpvYiIsImJpbmRFbnZpcm9ubWVudCIsInRpbWUiLCJwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXMiLCJ1cGRhdGUiLCJlbmFibGVkIiwiZW5kX3RpbWUiLCIkbHRlIiwiJHNldCIsIm11bHRpIiwidGltZUVuZCIsInRpbWVvdXRfYXV0b19zdWJtaXQiLCJ0aW1lb3V0QXV0b1N1Ym1pdCIsIlRhYnVsYXJUYWJsZXMiLCJyZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyIiwiVGFidWxhciIsIlRhYmxlIiwiY29sbGVjdGlvbiIsImNvbHVtbnMiLCJ0aXRsZSIsIm9yZGVyYWJsZSIsInJlbmRlciIsImlucHV0Iiwic3RlcF9jdXJyZW50X25hbWUiLCJjdXJyZW50X3N0ZXBfbmFtZSIsImRvbSIsImxlbmd0aENoYW5nZSIsImV4dHJhRmllbGRzIiwicGFnZUxlbmd0aCIsImluZm8iLCJzZWFyY2hpbmciLCJyZXNwb25zaXZlIiwiZGV0YWlscyIsImF1dG9XaWR0aCIsImNoYW5nZVNlbGVjdG9yIiwiY3VyU3BhY2VVc2VyIiwiJGFuZCIsImFkbWlucyIsImZsIiwiZXh0ZW5kIiwiR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMiLCJfZ2V0X2luYm94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMiLCJfZ2V0X291dGJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zIiwiX2hhbmRsZUxpc3RGaWVsZHMiLCJpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhciIsImluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIiLCJuZXdJbnN0YW5jZXNMaXN0VGFidWxhciIsInVwZGF0ZVRhYnVsYXJUaXRsZSIsInN1YnMiLCJTdWJzTWFuYWdlciIsImluc19maWVsZHMiLCJwdWIiLCJvblVubG9hZCIsImluc3RhbmNlX2xpc3QiLCJfdGFibGVDb2x1bW5zIiwiZHJhd0NhbGxiYWNrIiwiZWxsaXBzaXNMaW5rIiwiZW1wdHlUZCIsImNvbFNwYW4iLCJpc1BhZCIsInBlcmZlY3RTY3JvbGxiYXIiLCJvSW5zdGFuY2UiLCJhdHRyIiwiY2xpY2siLCJnb1BhZ2UiLCJoZWlnaHQiLCJwYWdlcyIsImNlaWwiLCJmblJlY29yZHNEaXNwbGF5IiwiX2lEaXNwbGF5TGVuZ3RoIiwiRGF0YVRhYmxlIiwicGFnZSIsImRyYXciLCJibHVyIiwiY3VycmVudFBhZ2UiLCJrZXlkb3duIiwia2V5Q29kZSIsImNyZWF0ZWRSb3ciLCJyb3ciLCJkYXRhSW5kZXgiLCJGbG93Um91dGVyIiwic2V0QXR0cmlidXRlIiwiYWdlbnRfdmlldyIsImNjX3ZpZXciLCJpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzIiwibW9kaWZpZWRGcm9tTm93IiwibW9kaWZpZWRTdHJpbmciLCJwcmlvcml0eUljb24iLCJwcmlvcml0eUljb25DbGFzcyIsInByaW9yaXR5VmFsdWUiLCJzdGVwX2N1cnJlbnRfbmFtZV92aWV3IiwidW5yZWFkIiwibW9tZW50UmVhY3RpdmVGcm9tTm93IiwicHJpb3JpdHkiLCJ2aXNpYmxlIiwiY2NfdGFnIiwicmVjb3JkX25lZWQiLCJsZW5ndGhNZW51Iiwic3BhY2VfdXNlciIsInBhZ2luZ1R5cGUiLCJpc19saXN0X2Rpc3BsYXkiLCJpbmJveF9pbnN0YW5jZXMiLCJvdXRib3hfaW5zdGFuY2VzIiwiZ2V0U29ydCIsImZsb3dJbnN0YW5jZXMiLCJSZWFjdGl2ZVZhciIsIl9jaGFuZ2VPcmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUlBLGdCQUFKO0FBQXFCQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxvQ0FBWixFQUFpRDtBQUFDRixrQkFBZ0IsQ0FBQ0csQ0FBRCxFQUFHO0FBQUNILG9CQUFnQixHQUFDRyxDQUFqQjtBQUFtQjs7QUFBeEMsQ0FBakQsRUFBMkYsQ0FBM0Y7QUFDckJILGdCQUFnQixDQUFDO0FBQ2hCLG1CQUFpQixRQUREO0FBRWhCLFlBQVU7QUFGTSxDQUFELEVBR2Isa0JBSGEsQ0FBaEIsQzs7Ozs7Ozs7Ozs7O0FDREE7Ozs7Ozs7Ozs7Ozs7QUFhQyxhQUFVSSxJQUFWLEVBQWdCQyxPQUFoQixFQUF5QjtBQUN6QixpQkFEeUIsQ0FFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxRQUFJLE9BQU9DLE1BQVAsS0FBa0IsVUFBbEIsSUFBZ0NBLE1BQU0sQ0FBQ0MsR0FBM0MsRUFBZ0Q7QUFDL0M7QUFDQUQsWUFBTSxDQUFDLENBQUMsWUFBRCxFQUFlLFFBQWYsRUFBeUIsc0JBQXpCLENBQUQsRUFBbURELE9BQW5ELENBQU47QUFDQSxLQUhELE1BR087QUFDTjtBQUNBRCxVQUFJLENBQUNJLEdBQUwsR0FBV0gsT0FBTyxDQUFDRCxJQUFJLENBQUNLLFFBQU4sRUFBZ0JMLElBQUksQ0FBQ00sSUFBckIsRUFBMkJOLElBQUksQ0FBQ08sa0JBQWhDLEVBQW9EUCxJQUFwRCxDQUFsQjtBQUNBO0FBQ0QsR0FkQSxFQWNDLElBZEQsRUFjTyxVQUFVSyxRQUFWLEVBQW9CQyxJQUFwQixFQUEwQkUsR0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6bUJBLElBQUc4WSxRQUFRQyxH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LDZCQUF5QixVQUFDOXNCLEdBQUQsRUFBTWlkLE1BQU47QUFDeEIsVUFBQXJ4QixNQUFBLEVBQUE4RCxJQUFBLEVBQUFqRCxHQUFBLEVBQUE4SyxJQUFBO0FBQUF1MUIsOEJBQXdCOXNCLEdBQXhCLEVBQTZCaWQsTUFBN0I7QUFFQXZ0QixhQUFPeEQsR0FBR2lMLEtBQUgsQ0FBUy9LLE9BQVQsQ0FBaUI7QUFBQ0MsYUFBSzR3QjtBQUFOLE9BQWpCLEVBQWdDO0FBQUNyeEIsZ0JBQVE7QUFBQ0osZ0JBQU07QUFBUDtBQUFULE9BQWhDLENBQVA7QUFDQUksZUFBQSxDQUFBYSxNQUFBUCxHQUFBQyxLQUFBLENBQUFDLE9BQUE7QUM0RktDLGFBQUtxRCxRQUFRLElBQVIsR0FBZUEsS0FBS2xFLElBQXBCLEdBQTJCLEtBQUs7QUQ1RjFDLFNDNkZNO0FBQ0RJLGdCQUFRO0FBQ04sNEJBQWtCO0FBRFo7QUFEUCxPRDdGTixNQ2lHVSxJRGpHVixHQ2lHaUIsQ0FBQzJMLE9BQU85SyxJQUFJcUssT0FBWixLQUF3QixJQUF4QixHQUErQlMsS0RqRzhDM0wsTUNpRzdFLEdEakc2RSxNQUE5RixHQUE4RixNQUE5RjtBQUNBLGFBQU9BLE1BQVA7QUFMRDtBQUFBLEdBREQ7QUMwR0EsQyIsImZpbGUiOiIvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNoZWNrTnBtVmVyc2lvbnMgfSBmcm9tICdtZXRlb3IvdG1lYXNkYXk6Y2hlY2stbnBtLXZlcnNpb25zJztcbmNoZWNrTnBtVmVyc2lvbnMoe1xuXHRcIm5vZGUtc2NoZWR1bGVcIjogXCJeMS4zLjFcIixcblx0XCJ4bWwyanNcIjogXCJeMC40LjE5XCIsXG59LCAnc3RlZWRvczp3b3JrZmxvdycpOyIsIi8qIVxuICogVVJJLmpzIC0gTXV0YXRpbmcgVVJMc1xuICpcbiAqIFZlcnNpb246IDEuMTcuMFxuICpcbiAqIEF1dGhvcjogUm9kbmV5IFJlaG1cbiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzL1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyXG4gKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqICAgR1BMIHYzIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9HUEwtMy4wXG4gKlxuICovXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0J3VzZSBzdHJpY3QnO1xuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vdW1kanMvdW1kL2Jsb2IvbWFzdGVyL3JldHVybkV4cG9ydHMuanNcblx0Ly8gaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuXHQvLyAgIC8vIE5vZGVcblx0Ly8gICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi9wdW55Y29kZScpLCByZXF1aXJlKCcuL0lQdjYnKSwgcmVxdWlyZSgnLi9TZWNvbmRMZXZlbERvbWFpbnMnKSk7XG5cdC8vIH0gZWxzZVxuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuXHRcdGRlZmluZShbJy4vcHVueWNvZGUnLCAnLi9JUHY2JywgJy4vU2Vjb25kTGV2ZWxEb21haW5zJ10sIGZhY3RvcnkpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG5cdFx0cm9vdC5VUkkgPSBmYWN0b3J5KHJvb3QucHVueWNvZGUsIHJvb3QuSVB2Niwgcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMsIHJvb3QpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChwdW55Y29kZSwgSVB2NiwgU0xELCByb290KSB7XG5cdCd1c2Ugc3RyaWN0Jztcblx0LypnbG9iYWwgbG9jYXRpb24sIGVzY2FwZSwgdW5lc2NhcGUgKi9cblx0Ly8gRklYTUU6IHYyLjAuMCByZW5hbWNlIG5vbi1jYW1lbENhc2UgcHJvcGVydGllcyB0byB1cHBlcmNhc2Vcblx0Lypqc2hpbnQgY2FtZWxjYXNlOiBmYWxzZSAqL1xuXG5cdC8vIHNhdmUgY3VycmVudCBVUkkgdmFyaWFibGUsIGlmIGFueVxuXHR2YXIgX1VSSSA9IHJvb3QgJiYgcm9vdC5VUkk7XG5cblx0ZnVuY3Rpb24gVVJJKHVybCwgYmFzZSkge1xuXHRcdHZhciBfdXJsU3VwcGxpZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDE7XG5cdFx0dmFyIF9iYXNlU3VwcGxpZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG5cblx0XHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0XHRpZiAoISh0aGlzIGluc3RhbmNlb2YgVVJJKSkge1xuXHRcdFx0aWYgKF91cmxTdXBwbGllZCkge1xuXHRcdFx0XHRpZiAoX2Jhc2VTdXBwbGllZCkge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgVVJJKHVybCwgYmFzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbmV3IFVSSSh1cmwpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IFVSSSgpO1xuXHRcdH1cblxuXHRcdGlmICh1cmwgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKF91cmxTdXBwbGllZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmRlZmluZWQgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIFVSSScpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHR1cmwgPSBsb2NhdGlvbi5ocmVmICsgJyc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR1cmwgPSAnJztcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmhyZWYodXJsKTtcblxuXHRcdC8vIHJlc29sdmUgdG8gYmFzZSBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb25zdHJ1Y3RvclxuXHRcdGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLmFic29sdXRlVG8oYmFzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRVUkkudmVyc2lvbiA9ICcxLjE3LjAnO1xuXG5cdHZhciBwID0gVVJJLnByb3RvdHlwZTtcblx0dmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gZXNjYXBlUmVnRXgoc3RyaW5nKSB7XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvY29tbWl0Lzg1YWMyMTc4M2MxMWY4Y2NhYjA2MTA2ZGJhOTczNWEzMWE4NjkyNGQjY29tbWl0Y29tbWVudC04MjE5NjNcblx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP149IToke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFR5cGUodmFsdWUpIHtcblx0XHQvLyBJRTggZG9lc24ndCByZXR1cm4gW09iamVjdCBVbmRlZmluZWRdIGJ1dCBbT2JqZWN0IE9iamVjdF0gZm9yIHVuZGVmaW5lZCB2YWx1ZVxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gJ1VuZGVmaW5lZCc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFN0cmluZyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpKS5zbGljZSg4LCAtMSk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0FycmF5KG9iaikge1xuXHRcdHJldHVybiBnZXRUeXBlKG9iaikgPT09ICdBcnJheSc7XG5cdH1cblxuXHRmdW5jdGlvbiBmaWx0ZXJBcnJheVZhbHVlcyhkYXRhLCB2YWx1ZSkge1xuXHRcdHZhciBsb29rdXAgPSB7fTtcblx0XHR2YXIgaSwgbGVuZ3RoO1xuXG5cdFx0aWYgKGdldFR5cGUodmFsdWUpID09PSAnUmVnRXhwJykge1xuXHRcdFx0bG9va3VwID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRsb29rdXBbdmFsdWVbaV1dID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9va3VwW3ZhbHVlXSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gZGF0YS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0Lypqc2hpbnQgbGF4YnJlYWs6IHRydWUgKi9cblx0XHRcdHZhciBfbWF0Y2ggPSBsb29rdXAgJiYgbG9va3VwW2RhdGFbaV1dICE9PSB1bmRlZmluZWRcblx0XHRcdFx0fHwgIWxvb2t1cCAmJiB2YWx1ZS50ZXN0KGRhdGFbaV0pO1xuXHRcdFx0Lypqc2hpbnQgbGF4YnJlYWs6IGZhbHNlICovXG5cdFx0XHRpZiAoX21hdGNoKSB7XG5cdFx0XHRcdGRhdGEuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRsZW5ndGgtLTtcblx0XHRcdFx0aS0tO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlDb250YWlucyhsaXN0LCB2YWx1ZSkge1xuXHRcdHZhciBpLCBsZW5ndGg7XG5cblx0XHQvLyB2YWx1ZSBtYXkgYmUgc3RyaW5nLCBudW1iZXIsIGFycmF5LCByZWdleHBcblx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdC8vIE5vdGU6IHRoaXMgY2FuIGJlIG9wdGltaXplZCB0byBPKG4pIChpbnN0ZWFkIG9mIGN1cnJlbnQgTyhtICogbikpXG5cdFx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoIWFycmF5Q29udGFpbnMobGlzdCwgdmFsdWVbaV0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IGxpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChfdHlwZSA9PT0gJ1JlZ0V4cCcpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBsaXN0W2ldID09PSAnc3RyaW5nJyAmJiBsaXN0W2ldLm1hdGNoKHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGxpc3RbaV0gPT09IHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFycmF5c0VxdWFsKG9uZSwgdHdvKSB7XG5cdFx0aWYgKCFpc0FycmF5KG9uZSkgfHwgIWlzQXJyYXkodHdvKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGFycmF5cyBjYW4ndCBiZSBlcXVhbCBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IGFtb3VudCBvZiBjb250ZW50XG5cdFx0aWYgKG9uZS5sZW5ndGggIT09IHR3by5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRvbmUuc29ydCgpO1xuXHRcdHR3by5zb3J0KCk7XG5cblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG9uZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGlmIChvbmVbaV0gIT09IHR3b1tpXSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiB0cmltU2xhc2hlcyh0ZXh0KSB7XG5cdFx0dmFyIHRyaW1fZXhwcmVzc2lvbiA9IC9eXFwvK3xcXC8rJC9nO1xuXHRcdHJldHVybiB0ZXh0LnJlcGxhY2UodHJpbV9leHByZXNzaW9uLCAnJyk7XG5cdH1cblxuXHRVUkkuX3BhcnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByb3RvY29sOiBudWxsLFxuXHRcdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRcdGhvc3RuYW1lOiBudWxsLFxuXHRcdFx0dXJuOiBudWxsLFxuXHRcdFx0cG9ydDogbnVsbCxcblx0XHRcdHBhdGg6IG51bGwsXG5cdFx0XHRxdWVyeTogbnVsbCxcblx0XHRcdGZyYWdtZW50OiBudWxsLFxuXHRcdFx0Ly8gc3RhdGVcblx0XHRcdGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVyczogVVJJLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdGVzY2FwZVF1ZXJ5U3BhY2U6IFVSSS5lc2NhcGVRdWVyeVNwYWNlXG5cdFx0fTtcblx0fTtcblx0Ly8gc3RhdGU6IGFsbG93IGR1cGxpY2F0ZSBxdWVyeSBwYXJhbWV0ZXJzIChhPTEmYT0xKVxuXHRVUkkuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzID0gZmFsc2U7XG5cdC8vIHN0YXRlOiByZXBsYWNlcyArIHdpdGggJTIwIChzcGFjZSBpbiBxdWVyeSBzdHJpbmdzKVxuXHRVUkkuZXNjYXBlUXVlcnlTcGFjZSA9IHRydWU7XG5cdC8vIHN0YXRpYyBwcm9wZXJ0aWVzXG5cdFVSSS5wcm90b2NvbF9leHByZXNzaW9uID0gL15bYS16XVthLXowLTkuKy1dKiQvaTtcblx0VVJJLmlkbl9leHByZXNzaW9uID0gL1teYS16MC05XFwuLV0vaTtcblx0VVJJLnB1bnljb2RlX2V4cHJlc3Npb24gPSAvKHhuLS0pL2k7XG5cdC8vIHdlbGwsIDMzMy40NDQuNTU1LjY2NiBtYXRjaGVzLCBidXQgaXQgc3VyZSBhaW4ndCBubyBJUHY0IC0gZG8gd2UgY2FyZT9cblx0VVJJLmlwNF9leHByZXNzaW9uID0gL15cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSQvO1xuXHQvLyBjcmVkaXRzIHRvIFJpY2ggQnJvd25cblx0Ly8gc291cmNlOiBodHRwOi8vZm9ydW1zLmludGVybWFwcGVyLmNvbS92aWV3dG9waWMucGhwP3A9MTA5NiMxMDk2XG5cdC8vIHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQyOTEudHh0XG5cdFVSSS5pcDZfZXhwcmVzc2lvbiA9IC9eXFxzKigoKFswLTlBLUZhLWZdezEsNH06KXs3fShbMC05QS1GYS1mXXsxLDR9fDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs2fSg6WzAtOUEtRmEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezV9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezR9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsM30pfCgoOlswLTlBLUZhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXszfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezJ9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNX0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7MX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoOigoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpKSglLispP1xccyokLztcblx0Ly8gZXhwcmVzc2lvbiB1c2VkIGlzIFwiZ3J1YmVyIHJldmlzZWRcIiAoQGdydWJlciB2MikgZGV0ZXJtaW5lZCB0byBiZSB0aGVcblx0Ly8gYmVzdCBzb2x1dGlvbiBpbiBhIHJlZ2V4LWdvbGYgd2UgZGlkIGEgY291cGxlIG9mIGFnZXMgYWdvIGF0XG5cdC8vICogaHR0cDovL21hdGhpYXNieW5lbnMuYmUvZGVtby91cmwtcmVnZXhcblx0Ly8gKiBodHRwOi8vcm9kbmV5cmVobS5kZS90L3VybC1yZWdleC5odG1sXG5cdFVSSS5maW5kX3VyaV9leHByZXNzaW9uID0gL1xcYigoPzpbYS16XVtcXHctXSs6KD86XFwvezEsM318W2EtejAtOSVdKXx3d3dcXGR7MCwzfVsuXXxbYS16MC05LlxcLV0rWy5dW2Etel17Miw0fVxcLykoPzpbXlxccygpPD5dK3xcXCgoW15cXHMoKTw+XSt8KFxcKFteXFxzKCk8Pl0rXFwpKSkqXFwpKSsoPzpcXCgoW15cXHMoKTw+XSt8KFxcKFteXFxzKCk8Pl0rXFwpKSkqXFwpfFteXFxzYCEoKVxcW1xcXXt9OzonXCIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaWc7XG5cdFVSSS5maW5kVXJpID0ge1xuXHRcdC8vIHZhbGlkIFwic2NoZW1lOi8vXCIgb3IgXCJ3d3cuXCJcblx0XHRzdGFydDogL1xcYig/OihbYS16XVthLXowLTkuKy1dKjpcXC9cXC8pfHd3d1xcLikvZ2ksXG5cdFx0Ly8gZXZlcnl0aGluZyB1cCB0byB0aGUgbmV4dCB3aGl0ZXNwYWNlXG5cdFx0ZW5kOiAvW1xcc1xcclxcbl18JC8sXG5cdFx0Ly8gdHJpbSB0cmFpbGluZyBwdW5jdHVhdGlvbiBjYXB0dXJlZCBieSBlbmQgUmVnRXhwXG5cdFx0dHJpbTogL1tgISgpXFxbXFxde307OidcIi4sPD4/wqvCu+KAnOKAneKAnuKAmOKAmV0rJC9cblx0fTtcblx0Ly8gaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy91cmktc2NoZW1lcy5odG1sXG5cdC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9UQ1BfYW5kX1VEUF9wb3J0X251bWJlcnMjV2VsbC1rbm93bl9wb3J0c1xuXHRVUkkuZGVmYXVsdFBvcnRzID0ge1xuXHRcdGh0dHA6ICc4MCcsXG5cdFx0aHR0cHM6ICc0NDMnLFxuXHRcdGZ0cDogJzIxJyxcblx0XHRnb3BoZXI6ICc3MCcsXG5cdFx0d3M6ICc4MCcsXG5cdFx0d3NzOiAnNDQzJ1xuXHR9O1xuXHQvLyBhbGxvd2VkIGhvc3RuYW1lIGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvIFJGQyAzOTg2XG5cdC8vIEFMUEhBIERJR0lUIFwiLVwiIFwiLlwiIFwiX1wiIFwiflwiIFwiIVwiIFwiJFwiIFwiJlwiIFwiJ1wiIFwiKFwiIFwiKVwiIFwiKlwiIFwiK1wiIFwiLFwiIFwiO1wiIFwiPVwiICVlbmNvZGVkXG5cdC8vIEkndmUgbmV2ZXIgc2VlbiBhIChub24tSUROKSBob3N0bmFtZSBvdGhlciB0aGFuOiBBTFBIQSBESUdJVCAuIC1cblx0VVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycyA9IC9bXmEtekEtWjAtOVxcLi1dLztcblx0Ly8gbWFwIERPTSBFbGVtZW50cyB0byB0aGVpciBVUkkgYXR0cmlidXRlXG5cdFVSSS5kb21BdHRyaWJ1dGVzID0ge1xuXHRcdCdhJzogJ2hyZWYnLFxuXHRcdCdibG9ja3F1b3RlJzogJ2NpdGUnLFxuXHRcdCdsaW5rJzogJ2hyZWYnLFxuXHRcdCdiYXNlJzogJ2hyZWYnLFxuXHRcdCdzY3JpcHQnOiAnc3JjJyxcblx0XHQnZm9ybSc6ICdhY3Rpb24nLFxuXHRcdCdpbWcnOiAnc3JjJyxcblx0XHQnYXJlYSc6ICdocmVmJyxcblx0XHQnaWZyYW1lJzogJ3NyYycsXG5cdFx0J2VtYmVkJzogJ3NyYycsXG5cdFx0J3NvdXJjZSc6ICdzcmMnLFxuXHRcdCd0cmFjayc6ICdzcmMnLFxuXHRcdCdpbnB1dCc6ICdzcmMnLCAvLyBidXQgb25seSBpZiB0eXBlPVwiaW1hZ2VcIlxuXHRcdCdhdWRpbyc6ICdzcmMnLFxuXHRcdCd2aWRlbyc6ICdzcmMnXG5cdH07XG5cdFVSSS5nZXREb21BdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlKSB7XG5cdFx0aWYgKCFub2RlIHx8ICFub2RlLm5vZGVOYW1lKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHQvLyA8aW5wdXQ+IHNob3VsZCBvbmx5IGV4cG9zZSBzcmMgZm9yIHR5cGU9XCJpbWFnZVwiXG5cdFx0aWYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIG5vZGUudHlwZSAhPT0gJ2ltYWdlJykge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gVVJJLmRvbUF0dHJpYnV0ZXNbbm9kZU5hbWVdO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGVzY2FwZUZvckR1bWJGaXJlZm94MzYodmFsdWUpIHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvOTFcblx0XHRyZXR1cm4gZXNjYXBlKHZhbHVlKTtcblx0fVxuXG5cdC8vIGVuY29kaW5nIC8gZGVjb2RpbmcgYWNjb3JkaW5nIHRvIFJGQzM5ODZcblx0ZnVuY3Rpb24gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZykge1xuXHRcdC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2VuY29kZVVSSUNvbXBvbmVudFxuXHRcdHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKVxuXHRcdFx0LnJlcGxhY2UoL1shJygpKl0vZywgZXNjYXBlRm9yRHVtYkZpcmVmb3gzNilcblx0XHRcdC5yZXBsYWNlKC9cXCovZywgJyUyQScpO1xuXHR9XG5cdFVSSS5lbmNvZGUgPSBzdHJpY3RFbmNvZGVVUklDb21wb25lbnQ7XG5cdFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cdFVSSS5pc284ODU5ID0gZnVuY3Rpb24oKSB7XG5cdFx0VVJJLmVuY29kZSA9IGVzY2FwZTtcblx0XHRVUkkuZGVjb2RlID0gdW5lc2NhcGU7XG5cdH07XG5cdFVSSS51bmljb2RlID0gZnVuY3Rpb24oKSB7XG5cdFx0VVJJLmVuY29kZSA9IHN0cmljdEVuY29kZVVSSUNvbXBvbmVudDtcblx0XHRVUkkuZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xuXHR9O1xuXHRVUkkuY2hhcmFjdGVycyA9IHtcblx0XHRwYXRobmFtZToge1xuXHRcdFx0ZW5jb2RlOiB7XG5cdFx0XHRcdC8vIFJGQzM5ODYgMi4xOiBGb3IgY29uc2lzdGVuY3ksIFVSSSBwcm9kdWNlcnMgYW5kIG5vcm1hbGl6ZXJzIHNob3VsZFxuXHRcdFx0XHQvLyB1c2UgdXBwZXJjYXNlIGhleGFkZWNpbWFsIGRpZ2l0cyBmb3IgYWxsIHBlcmNlbnQtZW5jb2RpbmdzLlxuXHRcdFx0XHRleHByZXNzaW9uOiAvJSgyNHwyNnwyQnwyQ3wzQnwzRHwzQXw0MCkvaWcsXG5cdFx0XHRcdG1hcDoge1xuXHRcdFx0XHRcdC8vIC0uX34hJygpKlxuXHRcdFx0XHRcdCclMjQnOiAnJCcsXG5cdFx0XHRcdFx0JyUyNic6ICcmJyxcblx0XHRcdFx0XHQnJTJCJzogJysnLFxuXHRcdFx0XHRcdCclMkMnOiAnLCcsXG5cdFx0XHRcdFx0JyUzQic6ICc7Jyxcblx0XHRcdFx0XHQnJTNEJzogJz0nLFxuXHRcdFx0XHRcdCclM0EnOiAnOicsXG5cdFx0XHRcdFx0JyU0MCc6ICdAJ1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVjb2RlOiB7XG5cdFx0XHRcdGV4cHJlc3Npb246IC9bXFwvXFw/I10vZyxcblx0XHRcdFx0bWFwOiB7XG5cdFx0XHRcdFx0Jy8nOiAnJTJGJyxcblx0XHRcdFx0XHQnPyc6ICclM0YnLFxuXHRcdFx0XHRcdCcjJzogJyUyMydcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVzZXJ2ZWQ6IHtcblx0XHRcdGVuY29kZToge1xuXHRcdFx0XHQvLyBSRkMzOTg2IDIuMTogRm9yIGNvbnNpc3RlbmN5LCBVUkkgcHJvZHVjZXJzIGFuZCBub3JtYWxpemVycyBzaG91bGRcblx0XHRcdFx0Ly8gdXNlIHVwcGVyY2FzZSBoZXhhZGVjaW1hbCBkaWdpdHMgZm9yIGFsbCBwZXJjZW50LWVuY29kaW5ncy5cblx0XHRcdFx0ZXhwcmVzc2lvbjogLyUoMjF8MjN8MjR8MjZ8Mjd8Mjh8Mjl8MkF8MkJ8MkN8MkZ8M0F8M0J8M0R8M0Z8NDB8NUJ8NUQpL2lnLFxuXHRcdFx0XHRtYXA6IHtcblx0XHRcdFx0XHQvLyBnZW4tZGVsaW1zXG5cdFx0XHRcdFx0JyUzQSc6ICc6Jyxcblx0XHRcdFx0XHQnJTJGJzogJy8nLFxuXHRcdFx0XHRcdCclM0YnOiAnPycsXG5cdFx0XHRcdFx0JyUyMyc6ICcjJyxcblx0XHRcdFx0XHQnJTVCJzogJ1snLFxuXHRcdFx0XHRcdCclNUQnOiAnXScsXG5cdFx0XHRcdFx0JyU0MCc6ICdAJyxcblx0XHRcdFx0XHQvLyBzdWItZGVsaW1zXG5cdFx0XHRcdFx0JyUyMSc6ICchJyxcblx0XHRcdFx0XHQnJTI0JzogJyQnLFxuXHRcdFx0XHRcdCclMjYnOiAnJicsXG5cdFx0XHRcdFx0JyUyNyc6ICdcXCcnLFxuXHRcdFx0XHRcdCclMjgnOiAnKCcsXG5cdFx0XHRcdFx0JyUyOSc6ICcpJyxcblx0XHRcdFx0XHQnJTJBJzogJyonLFxuXHRcdFx0XHRcdCclMkInOiAnKycsXG5cdFx0XHRcdFx0JyUyQyc6ICcsJyxcblx0XHRcdFx0XHQnJTNCJzogJzsnLFxuXHRcdFx0XHRcdCclM0QnOiAnPSdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dXJucGF0aDoge1xuXHRcdFx0Ly8gVGhlIGNoYXJhY3RlcnMgdW5kZXIgYGVuY29kZWAgYXJlIHRoZSBjaGFyYWN0ZXJzIGNhbGxlZCBvdXQgYnkgUkZDIDIxNDEgYXMgYmVpbmcgYWNjZXB0YWJsZVxuXHRcdFx0Ly8gZm9yIHVzYWdlIGluIGEgVVJOLiBSRkMyMTQxIGFsc28gY2FsbHMgb3V0IFwiLVwiLCBcIi5cIiwgYW5kIFwiX1wiIGFzIGFjY2VwdGFibGUgY2hhcmFjdGVycywgYnV0XG5cdFx0XHQvLyB0aGVzZSBhcmVuJ3QgZW5jb2RlZCBieSBlbmNvZGVVUklDb21wb25lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gY2FsbCB0aGVtIG91dCBoZXJlLiBBbHNvXG5cdFx0XHQvLyBub3RlIHRoYXQgdGhlIGNvbG9uIGNoYXJhY3RlciBpcyBub3QgZmVhdHVyZWQgaW4gdGhlIGVuY29kaW5nIG1hcDsgdGhpcyBpcyBiZWNhdXNlIFVSSS5qc1xuXHRcdFx0Ly8gZ2l2ZXMgdGhlIGNvbG9ucyBpbiBVUk5zIHNlbWFudGljIG1lYW5pbmcgYXMgdGhlIGRlbGltaXRlcnMgb2YgcGF0aCBzZWdlbWVudHMsIGFuZCBzbyBpdFxuXHRcdFx0Ly8gc2hvdWxkIG5vdCBhcHBlYXIgdW5lbmNvZGVkIGluIGEgc2VnbWVudCBpdHNlbGYuXG5cdFx0XHQvLyBTZWUgYWxzbyB0aGUgbm90ZSBhYm92ZSBhYm91dCBSRkMzOTg2IGFuZCBjYXBpdGFsYWxpemVkIGhleCBkaWdpdHMuXG5cdFx0XHRlbmNvZGU6IHtcblx0XHRcdFx0ZXhwcmVzc2lvbjogLyUoMjF8MjR8Mjd8Mjh8Mjl8MkF8MkJ8MkN8M0J8M0R8NDApL2lnLFxuXHRcdFx0XHRtYXA6IHtcblx0XHRcdFx0XHQnJTIxJzogJyEnLFxuXHRcdFx0XHRcdCclMjQnOiAnJCcsXG5cdFx0XHRcdFx0JyUyNyc6ICdcXCcnLFxuXHRcdFx0XHRcdCclMjgnOiAnKCcsXG5cdFx0XHRcdFx0JyUyOSc6ICcpJyxcblx0XHRcdFx0XHQnJTJBJzogJyonLFxuXHRcdFx0XHRcdCclMkInOiAnKycsXG5cdFx0XHRcdFx0JyUyQyc6ICcsJyxcblx0XHRcdFx0XHQnJTNCJzogJzsnLFxuXHRcdFx0XHRcdCclM0QnOiAnPScsXG5cdFx0XHRcdFx0JyU0MCc6ICdAJ1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Ly8gVGhlc2UgY2hhcmFjdGVycyBhcmUgdGhlIGNoYXJhY3RlcnMgY2FsbGVkIG91dCBieSBSRkMyMTQxIGFzIFwicmVzZXJ2ZWRcIiBjaGFyYWN0ZXJzIHRoYXRcblx0XHRcdC8vIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gYSBVUk4sIHBsdXMgdGhlIGNvbG9uIGNoYXJhY3RlciAoc2VlIG5vdGUgYWJvdmUpLlxuXHRcdFx0ZGVjb2RlOiB7XG5cdFx0XHRcdGV4cHJlc3Npb246IC9bXFwvXFw/IzpdL2csXG5cdFx0XHRcdG1hcDoge1xuXHRcdFx0XHRcdCcvJzogJyUyRicsXG5cdFx0XHRcdFx0Jz8nOiAnJTNGJyxcblx0XHRcdFx0XHQnIyc6ICclMjMnLFxuXHRcdFx0XHRcdCc6JzogJyUzQSdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0VVJJLmVuY29kZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG5cdFx0dmFyIGVzY2FwZWQgPSBVUkkuZW5jb2RlKHN0cmluZyArICcnKTtcblx0XHRpZiAoZXNjYXBlUXVlcnlTcGFjZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlc2NhcGVRdWVyeVNwYWNlID0gVVJJLmVzY2FwZVF1ZXJ5U3BhY2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVzY2FwZVF1ZXJ5U3BhY2UgPyBlc2NhcGVkLnJlcGxhY2UoLyUyMC9nLCAnKycpIDogZXNjYXBlZDtcblx0fTtcblx0VVJJLmRlY29kZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG5cdFx0c3RyaW5nICs9ICcnO1xuXHRcdGlmIChlc2NhcGVRdWVyeVNwYWNlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGVzY2FwZVF1ZXJ5U3BhY2UgPSBVUkkuZXNjYXBlUXVlcnlTcGFjZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIFVSSS5kZWNvZGUoZXNjYXBlUXVlcnlTcGFjZSA/IHN0cmluZy5yZXBsYWNlKC9cXCsvZywgJyUyMCcpIDogc3RyaW5nKTtcblx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdC8vIHdlJ3JlIG5vdCBnb2luZyB0byBtZXNzIHdpdGggd2VpcmQgZW5jb2RpbmdzLFxuXHRcdFx0Ly8gZ2l2ZSB1cCBhbmQgcmV0dXJuIHRoZSB1bmRlY29kZWQgb3JpZ2luYWwgc3RyaW5nXG5cdFx0XHQvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzg3XG5cdFx0XHQvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzkyXG5cdFx0XHRyZXR1cm4gc3RyaW5nO1xuXHRcdH1cblx0fTtcblx0Ly8gZ2VuZXJhdGUgZW5jb2RlL2RlY29kZSBwYXRoIGZ1bmN0aW9uc1xuXHR2YXIgX3BhcnRzID0geydlbmNvZGUnOidlbmNvZGUnLCAnZGVjb2RlJzonZGVjb2RlJ307XG5cdHZhciBfcGFydDtcblx0dmFyIGdlbmVyYXRlQWNjZXNzb3IgPSBmdW5jdGlvbihfZ3JvdXAsIF9wYXJ0KSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIFVSSVtfcGFydF0oc3RyaW5nICsgJycpLnJlcGxhY2UoVVJJLmNoYXJhY3RlcnNbX2dyb3VwXVtfcGFydF0uZXhwcmVzc2lvbiwgZnVuY3Rpb24oYykge1xuXHRcdFx0XHRcdHJldHVybiBVUkkuY2hhcmFjdGVyc1tfZ3JvdXBdW19wYXJ0XS5tYXBbY107XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHQvLyB3ZSdyZSBub3QgZ29pbmcgdG8gbWVzcyB3aXRoIHdlaXJkIGVuY29kaW5ncyxcblx0XHRcdFx0Ly8gZ2l2ZSB1cCBhbmQgcmV0dXJuIHRoZSB1bmRlY29kZWQgb3JpZ2luYWwgc3RyaW5nXG5cdFx0XHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvODdcblx0XHRcdFx0Ly8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2lzc3Vlcy85MlxuXHRcdFx0XHRyZXR1cm4gc3RyaW5nO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG5cblx0Zm9yIChfcGFydCBpbiBfcGFydHMpIHtcblx0XHRVUklbX3BhcnQgKyAnUGF0aFNlZ21lbnQnXSA9IGdlbmVyYXRlQWNjZXNzb3IoJ3BhdGhuYW1lJywgX3BhcnRzW19wYXJ0XSk7XG5cdFx0VVJJW19wYXJ0ICsgJ1VyblBhdGhTZWdtZW50J10gPSBnZW5lcmF0ZUFjY2Vzc29yKCd1cm5wYXRoJywgX3BhcnRzW19wYXJ0XSk7XG5cdH1cblxuXHR2YXIgZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24gPSBmdW5jdGlvbihfc2VwLCBfY29kaW5nRnVuY05hbWUsIF9pbm5lckNvZGluZ0Z1bmNOYW1lKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0Ly8gV2h5IHBhc3MgaW4gbmFtZXMgb2YgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb24gb2JqZWN0cyB0aGVtc2VsdmVzPyBUaGVcblx0XHRcdC8vIGRlZmluaXRpb25zIG9mIHNvbWUgZnVuY3Rpb25zIChidXQgaW4gcGFydGljdWxhciwgVVJJLmRlY29kZSkgd2lsbCBvY2Nhc2lvbmFsbHkgY2hhbmdlIGR1ZVxuXHRcdFx0Ly8gdG8gVVJJLmpzIGhhdmluZyBJU084ODU5IGFuZCBVbmljb2RlIG1vZGVzLiBQYXNzaW5nIGluIHRoZSBuYW1lIGFuZCBnZXR0aW5nIGl0IHdpbGwgZW5zdXJlXG5cdFx0XHQvLyB0aGF0IHRoZSBmdW5jdGlvbnMgd2UgdXNlIGhlcmUgYXJlIFwiZnJlc2hcIi5cblx0XHRcdHZhciBhY3R1YWxDb2RpbmdGdW5jO1xuXHRcdFx0aWYgKCFfaW5uZXJDb2RpbmdGdW5jTmFtZSkge1xuXHRcdFx0XHRhY3R1YWxDb2RpbmdGdW5jID0gVVJJW19jb2RpbmdGdW5jTmFtZV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhY3R1YWxDb2RpbmdGdW5jID0gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFVSSVtfY29kaW5nRnVuY05hbWVdKFVSSVtfaW5uZXJDb2RpbmdGdW5jTmFtZV0oc3RyaW5nKSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzZWdtZW50cyA9IChzdHJpbmcgKyAnJykuc3BsaXQoX3NlcCk7XG5cblx0XHRcdGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRzZWdtZW50c1tpXSA9IGFjdHVhbENvZGluZ0Z1bmMoc2VnbWVudHNbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VnbWVudHMuam9pbihfc2VwKTtcblx0XHR9O1xuXHR9O1xuXG5cdC8vIFRoaXMgdGFrZXMgcGxhY2Ugb3V0c2lkZSB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGRvbid0IHdhbnQsIGUuZy4sIGVuY29kZVVyblBhdGggZnVuY3Rpb25zLlxuXHRVUkkuZGVjb2RlUGF0aCA9IGdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uKCcvJywgJ2RlY29kZVBhdGhTZWdtZW50Jyk7XG5cdFVSSS5kZWNvZGVVcm5QYXRoID0gZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24oJzonLCAnZGVjb2RlVXJuUGF0aFNlZ21lbnQnKTtcblx0VVJJLnJlY29kZVBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignLycsICdlbmNvZGVQYXRoU2VnbWVudCcsICdkZWNvZGUnKTtcblx0VVJJLnJlY29kZVVyblBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignOicsICdlbmNvZGVVcm5QYXRoU2VnbWVudCcsICdkZWNvZGUnKTtcblxuXHRVUkkuZW5jb2RlUmVzZXJ2ZWQgPSBnZW5lcmF0ZUFjY2Vzc29yKCdyZXNlcnZlZCcsICdlbmNvZGUnKTtcblxuXHRVUkkucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcsIHBhcnRzKSB7XG5cdFx0dmFyIHBvcztcblx0XHRpZiAoIXBhcnRzKSB7XG5cdFx0XHRwYXJ0cyA9IHt9O1xuXHRcdH1cblx0XHQvLyBbcHJvdG9jb2xcIjovL1wiW3VzZXJuYW1lW1wiOlwicGFzc3dvcmRdXCJAXCJdaG9zdG5hbWVbXCI6XCJwb3J0XVwiL1wiP11bcGF0aF1bXCI/XCJxdWVyeXN0cmluZ11bXCIjXCJmcmFnbWVudF1cblxuXHRcdC8vIGV4dHJhY3QgZnJhZ21lbnRcblx0XHRwb3MgPSBzdHJpbmcuaW5kZXhPZignIycpO1xuXHRcdGlmIChwb3MgPiAtMSkge1xuXHRcdFx0Ly8gZXNjYXBpbmc/XG5cdFx0XHRwYXJ0cy5mcmFnbWVudCA9IHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSkgfHwgbnVsbDtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKTtcblx0XHR9XG5cblx0XHQvLyBleHRyYWN0IHF1ZXJ5XG5cdFx0cG9zID0gc3RyaW5nLmluZGV4T2YoJz8nKTtcblx0XHRpZiAocG9zID4gLTEpIHtcblx0XHRcdC8vIGVzY2FwaW5nP1xuXHRcdFx0cGFydHMucXVlcnkgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpIHx8IG51bGw7XG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcyk7XG5cdFx0fVxuXG5cdFx0Ly8gZXh0cmFjdCBwcm90b2NvbFxuXHRcdGlmIChzdHJpbmcuc3Vic3RyaW5nKDAsIDIpID09PSAnLy8nKSB7XG5cdFx0XHQvLyByZWxhdGl2ZS1zY2hlbWVcblx0XHRcdHBhcnRzLnByb3RvY29sID0gbnVsbDtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMik7XG5cdFx0XHQvLyBleHRyYWN0IFwidXNlcjpwYXNzQGhvc3Q6cG9ydFwiXG5cdFx0XHRzdHJpbmcgPSBVUkkucGFyc2VBdXRob3JpdHkoc3RyaW5nLCBwYXJ0cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvcyA9IHN0cmluZy5pbmRleE9mKCc6Jyk7XG5cdFx0XHRpZiAocG9zID4gLTEpIHtcblx0XHRcdFx0cGFydHMucHJvdG9jb2wgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykgfHwgbnVsbDtcblx0XHRcdFx0aWYgKHBhcnRzLnByb3RvY29sICYmICFwYXJ0cy5wcm90b2NvbC5tYXRjaChVUkkucHJvdG9jb2xfZXhwcmVzc2lvbikpIHtcblx0XHRcdFx0XHQvLyA6IG1heSBiZSB3aXRoaW4gdGhlIHBhdGhcblx0XHRcdFx0XHRwYXJ0cy5wcm90b2NvbCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEsIHBvcyArIDMpID09PSAnLy8nKSB7XG5cdFx0XHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAzKTtcblxuXHRcdFx0XHRcdC8vIGV4dHJhY3QgXCJ1c2VyOnBhc3NAaG9zdDpwb3J0XCJcblx0XHRcdFx0XHRzdHJpbmcgPSBVUkkucGFyc2VBdXRob3JpdHkoc3RyaW5nLCBwYXJ0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAxKTtcblx0XHRcdFx0XHRwYXJ0cy51cm4gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gd2hhdCdzIGxlZnQgbXVzdCBiZSB0aGUgcGF0aFxuXHRcdHBhcnRzLnBhdGggPSBzdHJpbmc7XG5cblx0XHQvLyBhbmQgd2UncmUgZG9uZVxuXHRcdHJldHVybiBwYXJ0cztcblx0fTtcblx0VVJJLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcblx0XHQvLyBDb3B5IGNocm9tZSwgSUUsIG9wZXJhIGJhY2tzbGFzaC1oYW5kbGluZyBiZWhhdmlvci5cblx0XHQvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcblx0XHQvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9ibG9iLzM4NmZkMjRmNDliMGU5ZDFhOGEwNzY1OTJhNDA0MTY4ZmFlZWNjMzQvbGliL3VybC5qcyNMMTE1LUwxMjRcblx0XHQvLyBTZWU6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yNTkxNlxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL3B1bGwvMjMzXG5cdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuXHRcdC8vIGV4dHJhY3QgaG9zdDpwb3J0XG5cdFx0dmFyIHBvcyA9IHN0cmluZy5pbmRleE9mKCcvJyk7XG5cdFx0dmFyIGJyYWNrZXRQb3M7XG5cdFx0dmFyIHQ7XG5cblx0XHRpZiAocG9zID09PSAtMSkge1xuXHRcdFx0cG9zID0gc3RyaW5nLmxlbmd0aDtcblx0XHR9XG5cblx0XHRpZiAoc3RyaW5nLmNoYXJBdCgwKSA9PT0gJ1snKSB7XG5cdFx0XHQvLyBJUHY2IGhvc3QgLSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLTZtYW4tdGV4dC1hZGRyLXJlcHJlc2VudGF0aW9uLTA0I3NlY3Rpb24tNlxuXHRcdFx0Ly8gSSBjbGFpbSBtb3N0IGNsaWVudCBzb2Z0d2FyZSBicmVha3Mgb24gSVB2NiBhbnl3YXlzLiBUbyBzaW1wbGlmeSB0aGluZ3MsIFVSSSBvbmx5IGFjY2VwdHNcblx0XHRcdC8vIElQdjYrcG9ydCBpbiB0aGUgZm9ybWF0IFsyMDAxOmRiODo6MV06ODAgKGZvciB0aGUgdGltZSBiZWluZylcblx0XHRcdGJyYWNrZXRQb3MgPSBzdHJpbmcuaW5kZXhPZignXScpO1xuXHRcdFx0cGFydHMuaG9zdG5hbWUgPSBzdHJpbmcuc3Vic3RyaW5nKDEsIGJyYWNrZXRQb3MpIHx8IG51bGw7XG5cdFx0XHRwYXJ0cy5wb3J0ID0gc3RyaW5nLnN1YnN0cmluZyhicmFja2V0UG9zICsgMiwgcG9zKSB8fCBudWxsO1xuXHRcdFx0aWYgKHBhcnRzLnBvcnQgPT09ICcvJykge1xuXHRcdFx0XHRwYXJ0cy5wb3J0ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGZpcnN0Q29sb24gPSBzdHJpbmcuaW5kZXhPZignOicpO1xuXHRcdFx0dmFyIGZpcnN0U2xhc2ggPSBzdHJpbmcuaW5kZXhPZignLycpO1xuXHRcdFx0dmFyIG5leHRDb2xvbiA9IHN0cmluZy5pbmRleE9mKCc6JywgZmlyc3RDb2xvbiArIDEpO1xuXHRcdFx0aWYgKG5leHRDb2xvbiAhPT0gLTEgJiYgKGZpcnN0U2xhc2ggPT09IC0xIHx8IG5leHRDb2xvbiA8IGZpcnN0U2xhc2gpKSB7XG5cdFx0XHRcdC8vIElQdjYgaG9zdCBjb250YWlucyBtdWx0aXBsZSBjb2xvbnMgLSBidXQgbm8gcG9ydFxuXHRcdFx0XHQvLyB0aGlzIG5vdGF0aW9uIGlzIGFjdHVhbGx5IG5vdCBhbGxvd2VkIGJ5IFJGQyAzOTg2LCBidXQgd2UncmUgYSBsaWJlcmFsIHBhcnNlclxuXHRcdFx0XHRwYXJ0cy5ob3N0bmFtZSA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKSB8fCBudWxsO1xuXHRcdFx0XHRwYXJ0cy5wb3J0ID0gbnVsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykuc3BsaXQoJzonKTtcblx0XHRcdFx0cGFydHMuaG9zdG5hbWUgPSB0WzBdIHx8IG51bGw7XG5cdFx0XHRcdHBhcnRzLnBvcnQgPSB0WzFdIHx8IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnRzLmhvc3RuYW1lICYmIHN0cmluZy5zdWJzdHJpbmcocG9zKS5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0cG9zKys7XG5cdFx0XHRzdHJpbmcgPSAnLycgKyBzdHJpbmc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0cmluZy5zdWJzdHJpbmcocG9zKSB8fCAnLyc7XG5cdH07XG5cdFVSSS5wYXJzZUF1dGhvcml0eSA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcblx0XHRzdHJpbmcgPSBVUkkucGFyc2VVc2VyaW5mbyhzdHJpbmcsIHBhcnRzKTtcblx0XHRyZXR1cm4gVVJJLnBhcnNlSG9zdChzdHJpbmcsIHBhcnRzKTtcblx0fTtcblx0VVJJLnBhcnNlVXNlcmluZm8gPSBmdW5jdGlvbihzdHJpbmcsIHBhcnRzKSB7XG5cdFx0Ly8gZXh0cmFjdCB1c2VybmFtZTpwYXNzd29yZFxuXHRcdHZhciBmaXJzdFNsYXNoID0gc3RyaW5nLmluZGV4T2YoJy8nKTtcblx0XHR2YXIgcG9zID0gc3RyaW5nLmxhc3RJbmRleE9mKCdAJywgZmlyc3RTbGFzaCA+IC0xID8gZmlyc3RTbGFzaCA6IHN0cmluZy5sZW5ndGggLSAxKTtcblx0XHR2YXIgdDtcblxuXHRcdC8vIGF1dGhvcml0eUAgbXVzdCBjb21lIGJlZm9yZSAvcGF0aFxuXHRcdGlmIChwb3MgPiAtMSAmJiAoZmlyc3RTbGFzaCA9PT0gLTEgfHwgcG9zIDwgZmlyc3RTbGFzaCkpIHtcblx0XHRcdHQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykuc3BsaXQoJzonKTtcblx0XHRcdHBhcnRzLnVzZXJuYW1lID0gdFswXSA/IFVSSS5kZWNvZGUodFswXSkgOiBudWxsO1xuXHRcdFx0dC5zaGlmdCgpO1xuXHRcdFx0cGFydHMucGFzc3dvcmQgPSB0WzBdID8gVVJJLmRlY29kZSh0LmpvaW4oJzonKSkgOiBudWxsO1xuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFydHMudXNlcm5hbWUgPSBudWxsO1xuXHRcdFx0cGFydHMucGFzc3dvcmQgPSBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdHJpbmc7XG5cdH07XG5cdFVSSS5wYXJzZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG5cdFx0aWYgKCFzdHJpbmcpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cblx0XHQvLyB0aHJvdyBvdXQgdGhlIGZ1bmt5IGJ1c2luZXNzIC0gXCI/XCJbbmFtZVwiPVwidmFsdWVcIiZcIl0rXG5cdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyYrL2csICcmJykucmVwbGFjZSgvXlxcPyomKnwmKyQvZywgJycpO1xuXG5cdFx0aWYgKCFzdHJpbmcpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cblx0XHR2YXIgaXRlbXMgPSB7fTtcblx0XHR2YXIgc3BsaXRzID0gc3RyaW5nLnNwbGl0KCcmJyk7XG5cdFx0dmFyIGxlbmd0aCA9IHNwbGl0cy5sZW5ndGg7XG5cdFx0dmFyIHYsIG5hbWUsIHZhbHVlO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0diA9IHNwbGl0c1tpXS5zcGxpdCgnPScpO1xuXHRcdFx0bmFtZSA9IFVSSS5kZWNvZGVRdWVyeSh2LnNoaWZ0KCksIGVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFx0Ly8gbm8gXCI9XCIgaXMgbnVsbCBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG5cdFx0XHR2YWx1ZSA9IHYubGVuZ3RoID8gVVJJLmRlY29kZVF1ZXJ5KHYuam9pbignPScpLCBlc2NhcGVRdWVyeVNwYWNlKSA6IG51bGw7XG5cblx0XHRcdGlmIChoYXNPd24uY2FsbChpdGVtcywgbmFtZSkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpdGVtc1tuYW1lXSA9PT0gJ3N0cmluZycgfHwgaXRlbXNbbmFtZV0gPT09IG51bGwpIHtcblx0XHRcdFx0XHRpdGVtc1tuYW1lXSA9IFtpdGVtc1tuYW1lXV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpdGVtc1tuYW1lXS5wdXNoKHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGl0ZW1zW25hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1zO1xuXHR9O1xuXG5cdFVSSS5idWlsZCA9IGZ1bmN0aW9uKHBhcnRzKSB7XG5cdFx0dmFyIHQgPSAnJztcblxuXHRcdGlmIChwYXJ0cy5wcm90b2NvbCkge1xuXHRcdFx0dCArPSBwYXJ0cy5wcm90b2NvbCArICc6Jztcblx0XHR9XG5cblx0XHRpZiAoIXBhcnRzLnVybiAmJiAodCB8fCBwYXJ0cy5ob3N0bmFtZSkpIHtcblx0XHRcdHQgKz0gJy8vJztcblx0XHR9XG5cblx0XHR0ICs9IChVUkkuYnVpbGRBdXRob3JpdHkocGFydHMpIHx8ICcnKTtcblxuXHRcdGlmICh0eXBlb2YgcGFydHMucGF0aCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGlmIChwYXJ0cy5wYXRoLmNoYXJBdCgwKSAhPT0gJy8nICYmIHR5cGVvZiBwYXJ0cy5ob3N0bmFtZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dCArPSAnLyc7XG5cdFx0XHR9XG5cblx0XHRcdHQgKz0gcGFydHMucGF0aDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHBhcnRzLnF1ZXJ5ID09PSAnc3RyaW5nJyAmJiBwYXJ0cy5xdWVyeSkge1xuXHRcdFx0dCArPSAnPycgKyBwYXJ0cy5xdWVyeTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHBhcnRzLmZyYWdtZW50ID09PSAnc3RyaW5nJyAmJiBwYXJ0cy5mcmFnbWVudCkge1xuXHRcdFx0dCArPSAnIycgKyBwYXJ0cy5mcmFnbWVudDtcblx0XHR9XG5cdFx0cmV0dXJuIHQ7XG5cdH07XG5cdFVSSS5idWlsZEhvc3QgPSBmdW5jdGlvbihwYXJ0cykge1xuXHRcdHZhciB0ID0gJyc7XG5cblx0XHRpZiAoIXBhcnRzLmhvc3RuYW1lKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fSBlbHNlIGlmIChVUkkuaXA2X2V4cHJlc3Npb24udGVzdChwYXJ0cy5ob3N0bmFtZSkpIHtcblx0XHRcdHQgKz0gJ1snICsgcGFydHMuaG9zdG5hbWUgKyAnXSc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHQgKz0gcGFydHMuaG9zdG5hbWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnRzLnBvcnQpIHtcblx0XHRcdHQgKz0gJzonICsgcGFydHMucG9ydDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdDtcblx0fTtcblx0VVJJLmJ1aWxkQXV0aG9yaXR5ID0gZnVuY3Rpb24ocGFydHMpIHtcblx0XHRyZXR1cm4gVVJJLmJ1aWxkVXNlcmluZm8ocGFydHMpICsgVVJJLmJ1aWxkSG9zdChwYXJ0cyk7XG5cdH07XG5cdFVSSS5idWlsZFVzZXJpbmZvID0gZnVuY3Rpb24ocGFydHMpIHtcblx0XHR2YXIgdCA9ICcnO1xuXG5cdFx0aWYgKHBhcnRzLnVzZXJuYW1lKSB7XG5cdFx0XHR0ICs9IFVSSS5lbmNvZGUocGFydHMudXNlcm5hbWUpO1xuXG5cdFx0XHRpZiAocGFydHMucGFzc3dvcmQpIHtcblx0XHRcdFx0dCArPSAnOicgKyBVUkkuZW5jb2RlKHBhcnRzLnBhc3N3b3JkKTtcblx0XHRcdH1cblxuXHRcdFx0dCArPSAnQCc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHQ7XG5cdH07XG5cdFVSSS5idWlsZFF1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG5cdFx0Ly8gYWNjb3JkaW5nIHRvIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYgb3IgaHR0cDovL2xhYnMuYXBhY2hlLm9yZy93ZWJhcmNoL3VyaS9yZmMvcmZjMzk4Ni5odG1sXG5cdFx0Ly8gYmVpbmcgwrstLl9+ISQmJygpKissOz06QC8/wqsgJUhFWCBhbmQgYWxudW0gYXJlIGFsbG93ZWRcblx0XHQvLyB0aGUgUkZDIGV4cGxpY2l0bHkgc3RhdGVzID8vZm9vIGJlaW5nIGEgdmFsaWQgdXNlIGNhc2UsIG5vIG1lbnRpb24gb2YgcGFyYW1ldGVyIHN5bnRheCFcblx0XHQvLyBVUkkuanMgdHJlYXRzIHRoZSBxdWVyeSBzdHJpbmcgYXMgYmVpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cdFx0Ly8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvaW50ZXJhY3QvZm9ybXMuaHRtbCNmb3JtLWNvbnRlbnQtdHlwZVxuXG5cdFx0dmFyIHQgPSAnJztcblx0XHR2YXIgdW5pcXVlLCBrZXksIGksIGxlbmd0aDtcblx0XHRmb3IgKGtleSBpbiBkYXRhKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoZGF0YSwga2V5KSAmJiBrZXkpIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkoZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdHVuaXF1ZSA9IHt9O1xuXHRcdFx0XHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IGRhdGFba2V5XS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGFba2V5XVtpXSAhPT0gdW5kZWZpbmVkICYmIHVuaXF1ZVtkYXRhW2tleV1baV0gKyAnJ10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHR0ICs9ICcmJyArIFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyKGtleSwgZGF0YVtrZXldW2ldLCBlc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRcdFx0XHRcdFx0aWYgKGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZVtkYXRhW2tleV1baV0gKyAnJ10gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dCArPSAnJicgKyBVUkkuYnVpbGRRdWVyeVBhcmFtZXRlcihrZXksIGRhdGFba2V5XSwgZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdC5zdWJzdHJpbmcoMSk7XG5cdH07XG5cdFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2ludGVyYWN0L2Zvcm1zLmh0bWwjZm9ybS1jb250ZW50LXR5cGUgLS0gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cdFx0Ly8gZG9uJ3QgYXBwZW5kIFwiPVwiIGZvciBudWxsIHZhbHVlcywgYWNjb3JkaW5nIHRvIGh0dHA6Ly9kdmNzLnczLm9yZy9oZy91cmwvcmF3LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwjdXJsLXBhcmFtZXRlci1zZXJpYWxpemF0aW9uXG5cdFx0cmV0dXJuIFVSSS5lbmNvZGVRdWVyeShuYW1lLCBlc2NhcGVRdWVyeVNwYWNlKSArICh2YWx1ZSAhPT0gbnVsbCA/ICc9JyArIFVSSS5lbmNvZGVRdWVyeSh2YWx1ZSwgZXNjYXBlUXVlcnlTcGFjZSkgOiAnJyk7XG5cdH07XG5cblx0VVJJLmFkZFF1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgbmFtZSwgdmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuXHRcdFx0XHRpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuXHRcdFx0XHRcdFVSSS5hZGRRdWVyeShkYXRhLCBrZXksIG5hbWVba2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKGRhdGFbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkYXRhW25hbWVdID0gdmFsdWU7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGRhdGFbbmFtZV0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGRhdGFbbmFtZV0gPSBbZGF0YVtuYW1lXV07XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSBbdmFsdWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRkYXRhW25hbWVdID0gKGRhdGFbbmFtZV0gfHwgW10pLmNvbmNhdCh2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5hZGRRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyJyk7XG5cdFx0fVxuXHR9O1xuXHRVUkkucmVtb3ZlUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBuYW1lLCB2YWx1ZSkge1xuXHRcdHZhciBpLCBsZW5ndGgsIGtleTtcblxuXHRcdGlmIChpc0FycmF5KG5hbWUpKSB7XG5cdFx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSBuYW1lLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGRhdGFbbmFtZVtpXV0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChnZXRUeXBlKG5hbWUpID09PSAnUmVnRXhwJykge1xuXHRcdFx0Zm9yIChrZXkgaW4gZGF0YSkge1xuXHRcdFx0XHRpZiAobmFtZS50ZXN0KGtleSkpIHtcblx0XHRcdFx0XHRkYXRhW2tleV0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Zm9yIChrZXkgaW4gbmFtZSkge1xuXHRcdFx0XHRpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuXHRcdFx0XHRcdFVSSS5yZW1vdmVRdWVyeShkYXRhLCBrZXksIG5hbWVba2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKGdldFR5cGUodmFsdWUpID09PSAnUmVnRXhwJykge1xuXHRcdFx0XHRcdGlmICghaXNBcnJheShkYXRhW25hbWVdKSAmJiB2YWx1ZS50ZXN0KGRhdGFbbmFtZV0pKSB7XG5cdFx0XHRcdFx0XHRkYXRhW25hbWVdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkYXRhW25hbWVdID0gZmlsdGVyQXJyYXlWYWx1ZXMoZGF0YVtuYW1lXSwgdmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChkYXRhW25hbWVdID09PSBTdHJpbmcodmFsdWUpICYmICghaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoID09PSAxKSkge1xuXHRcdFx0XHRcdGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNBcnJheShkYXRhW25hbWVdKSkge1xuXHRcdFx0XHRcdGRhdGFbbmFtZV0gPSBmaWx0ZXJBcnJheVZhbHVlcyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5yZW1vdmVRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcsIFJlZ0V4cCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyJyk7XG5cdFx0fVxuXHR9O1xuXHRVUkkuaGFzUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBuYW1lLCB2YWx1ZSwgd2l0aGluQXJyYXkpIHtcblx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuXHRcdFx0XHRpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuXHRcdFx0XHRcdGlmICghVVJJLmhhc1F1ZXJ5KGRhdGEsIGtleSwgbmFtZVtrZXldKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXInKTtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKGdldFR5cGUodmFsdWUpKSB7XG5cdFx0XHRjYXNlICdVbmRlZmluZWQnOlxuXHRcdFx0XHQvLyB0cnVlIGlmIGV4aXN0cyAoYnV0IG1heSBiZSBlbXB0eSlcblx0XHRcdFx0cmV0dXJuIG5hbWUgaW4gZGF0YTsgLy8gZGF0YVtuYW1lXSAhPT0gdW5kZWZpbmVkO1xuXG5cdFx0XHRjYXNlICdCb29sZWFuJzpcblx0XHRcdFx0Ly8gdHJ1ZSBpZiBleGlzdHMgYW5kIG5vbi1lbXB0eVxuXHRcdFx0XHR2YXIgX2Jvb2x5ID0gQm9vbGVhbihpc0FycmF5KGRhdGFbbmFtZV0pID8gZGF0YVtuYW1lXS5sZW5ndGggOiBkYXRhW25hbWVdKTtcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBfYm9vbHk7XG5cblx0XHRcdGNhc2UgJ0Z1bmN0aW9uJzpcblx0XHRcdFx0Ly8gYWxsb3cgY29tcGxleCBjb21wYXJpc29uXG5cdFx0XHRcdHJldHVybiAhIXZhbHVlKGRhdGFbbmFtZV0sIG5hbWUsIGRhdGEpO1xuXG5cdFx0XHRjYXNlICdBcnJheSc6XG5cdFx0XHRcdGlmICghaXNBcnJheShkYXRhW25hbWVdKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBvcCA9IHdpdGhpbkFycmF5ID8gYXJyYXlDb250YWlucyA6IGFycmF5c0VxdWFsO1xuXHRcdFx0XHRyZXR1cm4gb3AoZGF0YVtuYW1lXSwgdmFsdWUpO1xuXG5cdFx0XHRjYXNlICdSZWdFeHAnOlxuXHRcdFx0XHRpZiAoIWlzQXJyYXkoZGF0YVtuYW1lXSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gQm9vbGVhbihkYXRhW25hbWVdICYmIGRhdGFbbmFtZV0ubWF0Y2godmFsdWUpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghd2l0aGluQXJyYXkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gYXJyYXlDb250YWlucyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cblx0XHRcdGNhc2UgJ051bWJlcic6XG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdGNhc2UgJ1N0cmluZyc6XG5cdFx0XHRcdGlmICghaXNBcnJheShkYXRhW25hbWVdKSkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhW25hbWVdID09PSB2YWx1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghd2l0aGluQXJyYXkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gYXJyYXlDb250YWlucyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5oYXNRdWVyeSgpIGFjY2VwdHMgdW5kZWZpbmVkLCBib29sZWFuLCBzdHJpbmcsIG51bWJlciwgUmVnRXhwLCBGdW5jdGlvbiBhcyB0aGUgdmFsdWUgcGFyYW1ldGVyJyk7XG5cdFx0fVxuXHR9O1xuXG5cblx0VVJJLmNvbW1vblBhdGggPSBmdW5jdGlvbihvbmUsIHR3bykge1xuXHRcdHZhciBsZW5ndGggPSBNYXRoLm1pbihvbmUubGVuZ3RoLCB0d28ubGVuZ3RoKTtcblx0XHR2YXIgcG9zO1xuXG5cdFx0Ly8gZmluZCBmaXJzdCBub24tbWF0Y2hpbmcgY2hhcmFjdGVyXG5cdFx0Zm9yIChwb3MgPSAwOyBwb3MgPCBsZW5ndGg7IHBvcysrKSB7XG5cdFx0XHRpZiAob25lLmNoYXJBdChwb3MpICE9PSB0d28uY2hhckF0KHBvcykpIHtcblx0XHRcdFx0cG9zLS07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwb3MgPCAxKSB7XG5cdFx0XHRyZXR1cm4gb25lLmNoYXJBdCgwKSA9PT0gdHdvLmNoYXJBdCgwKSAmJiBvbmUuY2hhckF0KDApID09PSAnLycgPyAnLycgOiAnJztcblx0XHR9XG5cblx0XHQvLyByZXZlcnQgdG8gbGFzdCAvXG5cdFx0aWYgKG9uZS5jaGFyQXQocG9zKSAhPT0gJy8nIHx8IHR3by5jaGFyQXQocG9zKSAhPT0gJy8nKSB7XG5cdFx0XHRwb3MgPSBvbmUuc3Vic3RyaW5nKDAsIHBvcykubGFzdEluZGV4T2YoJy8nKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb25lLnN1YnN0cmluZygwLCBwb3MgKyAxKTtcblx0fTtcblxuXHRVUkkud2l0aGluU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nLCBjYWxsYmFjaywgb3B0aW9ucykge1xuXHRcdG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG5cdFx0dmFyIF9zdGFydCA9IG9wdGlvbnMuc3RhcnQgfHwgVVJJLmZpbmRVcmkuc3RhcnQ7XG5cdFx0dmFyIF9lbmQgPSBvcHRpb25zLmVuZCB8fCBVUkkuZmluZFVyaS5lbmQ7XG5cdFx0dmFyIF90cmltID0gb3B0aW9ucy50cmltIHx8IFVSSS5maW5kVXJpLnRyaW07XG5cdFx0dmFyIF9hdHRyaWJ1dGVPcGVuID0gL1thLXowLTktXT1bXCInXT8kL2k7XG5cblx0XHRfc3RhcnQubGFzdEluZGV4ID0gMDtcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0dmFyIG1hdGNoID0gX3N0YXJ0LmV4ZWMoc3RyaW5nKTtcblx0XHRcdGlmICghbWF0Y2gpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzdGFydCA9IG1hdGNoLmluZGV4O1xuXHRcdFx0aWYgKG9wdGlvbnMuaWdub3JlSHRtbCkge1xuXHRcdFx0XHQvLyBhdHRyaWJ1dChlPVtcIiddPyQpXG5cdFx0XHRcdHZhciBhdHRyaWJ1dGVPcGVuID0gc3RyaW5nLnNsaWNlKE1hdGgubWF4KHN0YXJ0IC0gMywgMCksIHN0YXJ0KTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZU9wZW4gJiYgX2F0dHJpYnV0ZU9wZW4udGVzdChhdHRyaWJ1dGVPcGVuKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHZhciBlbmQgPSBzdGFydCArIHN0cmluZy5zbGljZShzdGFydCkuc2VhcmNoKF9lbmQpO1xuXHRcdFx0dmFyIHNsaWNlID0gc3RyaW5nLnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoX3RyaW0sICcnKTtcblx0XHRcdGlmIChvcHRpb25zLmlnbm9yZSAmJiBvcHRpb25zLmlnbm9yZS50ZXN0KHNsaWNlKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0ZW5kID0gc3RhcnQgKyBzbGljZS5sZW5ndGg7XG5cdFx0XHR2YXIgcmVzdWx0ID0gY2FsbGJhY2soc2xpY2UsIHN0YXJ0LCBlbmQsIHN0cmluZyk7XG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMCwgc3RhcnQpICsgcmVzdWx0ICsgc3RyaW5nLnNsaWNlKGVuZCk7XG5cdFx0XHRfc3RhcnQubGFzdEluZGV4ID0gc3RhcnQgKyByZXN1bHQubGVuZ3RoO1xuXHRcdH1cblxuXHRcdF9zdGFydC5sYXN0SW5kZXggPSAwO1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH07XG5cblx0VVJJLmVuc3VyZVZhbGlkSG9zdG5hbWUgPSBmdW5jdGlvbih2KSB7XG5cdFx0Ly8gVGhlb3JldGljYWxseSBVUklzIGFsbG93IHBlcmNlbnQtZW5jb2RpbmcgaW4gSG9zdG5hbWVzIChhY2NvcmRpbmcgdG8gUkZDIDM5ODYpXG5cdFx0Ly8gdGhleSBhcmUgbm90IHBhcnQgb2YgRE5TIGFuZCB0aGVyZWZvcmUgaWdub3JlZCBieSBVUkkuanNcblxuXHRcdGlmICh2Lm1hdGNoKFVSSS5pbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMpKSB7XG5cdFx0XHQvLyB0ZXN0IHB1bnljb2RlXG5cdFx0XHRpZiAoIXB1bnljb2RlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0gYW5kIFB1bnljb2RlLmpzIGlzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHB1bnljb2RlLnRvQVNDSUkodikubWF0Y2goVVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvLyBub0NvbmZsaWN0XG5cdFVSSS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24ocmVtb3ZlQWxsKSB7XG5cdFx0aWYgKHJlbW92ZUFsbCkge1xuXHRcdFx0dmFyIHVuY29uZmxpY3RlZCA9IHtcblx0XHRcdFx0VVJJOiB0aGlzLm5vQ29uZmxpY3QoKVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHJvb3QuVVJJVGVtcGxhdGUgJiYgdHlwZW9mIHJvb3QuVVJJVGVtcGxhdGUubm9Db25mbGljdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR1bmNvbmZsaWN0ZWQuVVJJVGVtcGxhdGUgPSByb290LlVSSVRlbXBsYXRlLm5vQ29uZmxpY3QoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvb3QuSVB2NiAmJiB0eXBlb2Ygcm9vdC5JUHY2Lm5vQ29uZmxpY3QgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0dW5jb25mbGljdGVkLklQdjYgPSByb290LklQdjYubm9Db25mbGljdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocm9vdC5TZWNvbmRMZXZlbERvbWFpbnMgJiYgdHlwZW9mIHJvb3QuU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3QgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0dW5jb25mbGljdGVkLlNlY29uZExldmVsRG9tYWlucyA9IHJvb3QuU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3QoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuY29uZmxpY3RlZDtcblx0XHR9IGVsc2UgaWYgKHJvb3QuVVJJID09PSB0aGlzKSB7XG5cdFx0XHRyb290LlVSSSA9IF9VUkk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0cC5idWlsZCA9IGZ1bmN0aW9uKGRlZmVyQnVpbGQpIHtcblx0XHRpZiAoZGVmZXJCdWlsZCA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5fZGVmZXJyZWRfYnVpbGQgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoZGVmZXJCdWlsZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX2RlZmVycmVkX2J1aWxkKSB7XG5cdFx0XHR0aGlzLl9zdHJpbmcgPSBVUkkuYnVpbGQodGhpcy5fcGFydHMpO1xuXHRcdFx0dGhpcy5fZGVmZXJyZWRfYnVpbGQgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRwLmNsb25lID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG5ldyBVUkkodGhpcyk7XG5cdH07XG5cblx0cC52YWx1ZU9mID0gcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmJ1aWxkKGZhbHNlKS5fc3RyaW5nO1xuXHR9O1xuXG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVTaW1wbGVBY2Nlc3NvcihfcGFydCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9wYXJ0c1tfcGFydF0gfHwgJyc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9wYXJ0c1tfcGFydF0gPSB2IHx8IG51bGw7XG5cdFx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUHJlZml4QWNjZXNzb3IoX3BhcnQsIF9rZXkpe1xuXHRcdHJldHVybiBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcGFydHNbX3BhcnRdIHx8ICcnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHYgIT09IG51bGwpIHtcblx0XHRcdFx0XHR2ID0gdiArICcnO1xuXHRcdFx0XHRcdGlmICh2LmNoYXJBdCgwKSA9PT0gX2tleSkge1xuXHRcdFx0XHRcdFx0diA9IHYuc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuX3BhcnRzW19wYXJ0XSA9IHY7XG5cdFx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHAucHJvdG9jb2wgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdwcm90b2NvbCcpO1xuXHRwLnVzZXJuYW1lID0gZ2VuZXJhdGVTaW1wbGVBY2Nlc3NvcigndXNlcm5hbWUnKTtcblx0cC5wYXNzd29yZCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3Bhc3N3b3JkJyk7XG5cdHAuaG9zdG5hbWUgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdob3N0bmFtZScpO1xuXHRwLnBvcnQgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdwb3J0Jyk7XG5cdHAucXVlcnkgPSBnZW5lcmF0ZVByZWZpeEFjY2Vzc29yKCdxdWVyeScsICc/Jyk7XG5cdHAuZnJhZ21lbnQgPSBnZW5lcmF0ZVByZWZpeEFjY2Vzc29yKCdmcmFnbWVudCcsICcjJyk7XG5cblx0cC5zZWFyY2ggPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdHZhciB0ID0gdGhpcy5xdWVyeSh2LCBidWlsZCk7XG5cdFx0cmV0dXJuIHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiB0Lmxlbmd0aCA/ICgnPycgKyB0KSA6IHQ7XG5cdH07XG5cdHAuaGFzaCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHQgPSB0aGlzLmZyYWdtZW50KHYsIGJ1aWxkKTtcblx0XHRyZXR1cm4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoID8gKCcjJyArIHQpIDogdDtcblx0fTtcblxuXHRwLnBhdGhuYW1lID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcblx0XHRcdHZhciByZXMgPSB0aGlzLl9wYXJ0cy5wYXRoIHx8ICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSA/ICcvJyA6ICcnKTtcblx0XHRcdHJldHVybiB2ID8gKHRoaXMuX3BhcnRzLnVybiA/IFVSSS5kZWNvZGVVcm5QYXRoIDogVVJJLmRlY29kZVBhdGgpKHJlcykgOiByZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdFx0dGhpcy5fcGFydHMucGF0aCA9IHYgPyBVUkkucmVjb2RlVXJuUGF0aCh2KSA6ICcnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fcGFydHMucGF0aCA9IHYgPyBVUkkucmVjb2RlUGF0aCh2KSA6ICcvJztcblx0XHRcdH1cblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5wYXRoID0gcC5wYXRobmFtZTtcblx0cC5ocmVmID0gZnVuY3Rpb24oaHJlZiwgYnVpbGQpIHtcblx0XHR2YXIga2V5O1xuXG5cdFx0aWYgKGhyZWYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR0aGlzLl9zdHJpbmcgPSAnJztcblx0XHR0aGlzLl9wYXJ0cyA9IFVSSS5fcGFydHMoKTtcblxuXHRcdHZhciBfVVJJID0gaHJlZiBpbnN0YW5jZW9mIFVSSTtcblx0XHR2YXIgX29iamVjdCA9IHR5cGVvZiBocmVmID09PSAnb2JqZWN0JyAmJiAoaHJlZi5ob3N0bmFtZSB8fCBocmVmLnBhdGggfHwgaHJlZi5wYXRobmFtZSk7XG5cdFx0aWYgKGhyZWYubm9kZU5hbWUpIHtcblx0XHRcdHZhciBhdHRyaWJ1dGUgPSBVUkkuZ2V0RG9tQXR0cmlidXRlKGhyZWYpO1xuXHRcdFx0aHJlZiA9IGhyZWZbYXR0cmlidXRlXSB8fCAnJztcblx0XHRcdF9vYmplY3QgPSBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyB3aW5kb3cubG9jYXRpb24gaXMgcmVwb3J0ZWQgdG8gYmUgYW4gb2JqZWN0LCBidXQgaXQncyBub3QgdGhlIHNvcnRcblx0XHQvLyBvZiBvYmplY3Qgd2UncmUgbG9va2luZyBmb3I6XG5cdFx0Ly8gKiBsb2NhdGlvbi5wcm90b2NvbCBlbmRzIHdpdGggYSBjb2xvblxuXHRcdC8vICogbG9jYXRpb24ucXVlcnkgIT0gb2JqZWN0LnNlYXJjaFxuXHRcdC8vICogbG9jYXRpb24uaGFzaCAhPSBvYmplY3QuZnJhZ21lbnRcblx0XHQvLyBzaW1wbHkgc2VyaWFsaXppbmcgdGhlIHVua25vd24gb2JqZWN0IHNob3VsZCBkbyB0aGUgdHJpY2tcblx0XHQvLyAoZm9yIGxvY2F0aW9uLCBub3QgZm9yIGV2ZXJ5dGhpbmcuLi4pXG5cdFx0aWYgKCFfVVJJICYmIF9vYmplY3QgJiYgaHJlZi5wYXRobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRocmVmID0gaHJlZi50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgaHJlZiA9PT0gJ3N0cmluZycgfHwgaHJlZiBpbnN0YW5jZW9mIFN0cmluZykge1xuXHRcdFx0dGhpcy5fcGFydHMgPSBVUkkucGFyc2UoU3RyaW5nKGhyZWYpLCB0aGlzLl9wYXJ0cyk7XG5cdFx0fSBlbHNlIGlmIChfVVJJIHx8IF9vYmplY3QpIHtcblx0XHRcdHZhciBzcmMgPSBfVVJJID8gaHJlZi5fcGFydHMgOiBocmVmO1xuXHRcdFx0Zm9yIChrZXkgaW4gc3JjKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbCh0aGlzLl9wYXJ0cywga2V5KSkge1xuXHRcdFx0XHRcdHRoaXMuX3BhcnRzW2tleV0gPSBzcmNba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGlucHV0Jyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8vIGlkZW50aWZpY2F0aW9uIGFjY2Vzc29yc1xuXHRwLmlzID0gZnVuY3Rpb24od2hhdCkge1xuXHRcdHZhciBpcCA9IGZhbHNlO1xuXHRcdHZhciBpcDQgPSBmYWxzZTtcblx0XHR2YXIgaXA2ID0gZmFsc2U7XG5cdFx0dmFyIG5hbWUgPSBmYWxzZTtcblx0XHR2YXIgc2xkID0gZmFsc2U7XG5cdFx0dmFyIGlkbiA9IGZhbHNlO1xuXHRcdHZhciBwdW55Y29kZSA9IGZhbHNlO1xuXHRcdHZhciByZWxhdGl2ZSA9ICF0aGlzLl9wYXJ0cy51cm47XG5cblx0XHRpZiAodGhpcy5fcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdHJlbGF0aXZlID0gZmFsc2U7XG5cdFx0XHRpcDQgPSBVUkkuaXA0X2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHRpcDYgPSBVUkkuaXA2X2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHRpcCA9IGlwNCB8fCBpcDY7XG5cdFx0XHRuYW1lID0gIWlwO1xuXHRcdFx0c2xkID0gbmFtZSAmJiBTTEQgJiYgU0xELmhhcyh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHRpZG4gPSBuYW1lICYmIFVSSS5pZG5fZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdHB1bnljb2RlID0gbmFtZSAmJiBVUkkucHVueWNvZGVfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKHdoYXQudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0Y2FzZSAncmVsYXRpdmUnOlxuXHRcdFx0XHRyZXR1cm4gcmVsYXRpdmU7XG5cblx0XHRcdGNhc2UgJ2Fic29sdXRlJzpcblx0XHRcdFx0cmV0dXJuICFyZWxhdGl2ZTtcblxuXHRcdFx0Ly8gaG9zdG5hbWUgaWRlbnRpZmljYXRpb25cblx0XHRcdGNhc2UgJ2RvbWFpbic6XG5cdFx0XHRjYXNlICduYW1lJzpcblx0XHRcdFx0cmV0dXJuIG5hbWU7XG5cblx0XHRcdGNhc2UgJ3NsZCc6XG5cdFx0XHRcdHJldHVybiBzbGQ7XG5cblx0XHRcdGNhc2UgJ2lwJzpcblx0XHRcdFx0cmV0dXJuIGlwO1xuXG5cdFx0XHRjYXNlICdpcDQnOlxuXHRcdFx0Y2FzZSAnaXB2NCc6XG5cdFx0XHRjYXNlICdpbmV0NCc6XG5cdFx0XHRcdHJldHVybiBpcDQ7XG5cblx0XHRcdGNhc2UgJ2lwNic6XG5cdFx0XHRjYXNlICdpcHY2Jzpcblx0XHRcdGNhc2UgJ2luZXQ2Jzpcblx0XHRcdFx0cmV0dXJuIGlwNjtcblxuXHRcdFx0Y2FzZSAnaWRuJzpcblx0XHRcdFx0cmV0dXJuIGlkbjtcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdFx0cmV0dXJuICF0aGlzLl9wYXJ0cy51cm47XG5cblx0XHRcdGNhc2UgJ3Vybic6XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuX3BhcnRzLnVybjtcblxuXHRcdFx0Y2FzZSAncHVueWNvZGUnOlxuXHRcdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0Ly8gY29tcG9uZW50IHNwZWNpZmljIGlucHV0IHZhbGlkYXRpb25cblx0dmFyIF9wcm90b2NvbCA9IHAucHJvdG9jb2w7XG5cdHZhciBfcG9ydCA9IHAucG9ydDtcblx0dmFyIF9ob3N0bmFtZSA9IHAuaG9zdG5hbWU7XG5cblx0cC5wcm90b2NvbCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0Ly8gYWNjZXB0IHRyYWlsaW5nIDovL1xuXHRcdFx0XHR2ID0gdi5yZXBsYWNlKC86KFxcL1xcLyk/JC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXYubWF0Y2goVVJJLnByb3RvY29sX2V4cHJlc3Npb24pKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdG9jb2wgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4rLV0gb3IgZG9lc25cXCd0IHN0YXJ0IHdpdGggW0EtWl0nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gX3Byb3RvY29sLmNhbGwodGhpcywgdiwgYnVpbGQpO1xuXHR9O1xuXHRwLnNjaGVtZSA9IHAucHJvdG9jb2w7XG5cdHAucG9ydCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodiA9PT0gMCkge1xuXHRcdFx0XHR2ID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0diArPSAnJztcblx0XHRcdFx0aWYgKHYuY2hhckF0KDApID09PSAnOicpIHtcblx0XHRcdFx0XHR2ID0gdi5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodi5tYXRjaCgvW14wLTldLykpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3J0IFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFswLTldJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9wb3J0LmNhbGwodGhpcywgdiwgYnVpbGQpO1xuXHR9O1xuXHRwLmhvc3RuYW1lID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhciB4ID0ge307XG5cdFx0XHR2YXIgcmVzID0gVVJJLnBhcnNlSG9zdCh2LCB4KTtcblx0XHRcdGlmIChyZXMgIT09ICcvJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7XG5cdFx0XHR9XG5cblx0XHRcdHYgPSB4Lmhvc3RuYW1lO1xuXHRcdH1cblx0XHRyZXR1cm4gX2hvc3RuYW1lLmNhbGwodGhpcywgdiwgYnVpbGQpO1xuXHR9O1xuXG5cdC8vIGNvbXBvdW5kIGFjY2Vzc29yc1xuXHRwLm9yaWdpbiA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHBhcnRzO1xuXG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sKCk7XG5cdFx0XHR2YXIgYXV0aG9yaXR5ID0gdGhpcy5hdXRob3JpdHkoKTtcblx0XHRcdGlmICghYXV0aG9yaXR5KSByZXR1cm4gJyc7XG5cdFx0XHRyZXR1cm4gKHByb3RvY29sID8gcHJvdG9jb2wgKyAnOi8vJyA6ICcnKSArIHRoaXMuYXV0aG9yaXR5KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBvcmlnaW4gPSBVUkkodik7XG5cdFx0XHR0aGlzXG5cdFx0XHRcdC5wcm90b2NvbChvcmlnaW4ucHJvdG9jb2woKSlcblx0XHRcdFx0LmF1dGhvcml0eShvcmlnaW4uYXV0aG9yaXR5KCkpXG5cdFx0XHRcdC5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLmhvc3QgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lID8gVVJJLmJ1aWxkSG9zdCh0aGlzLl9wYXJ0cykgOiAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJlcyA9IFVSSS5wYXJzZUhvc3QodiwgdGhpcy5fcGFydHMpO1xuXHRcdFx0aWYgKHJlcyAhPT0gJy8nKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLmF1dGhvcml0eSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUgPyBVUkkuYnVpbGRBdXRob3JpdHkodGhpcy5fcGFydHMpIDogJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciByZXMgPSBVUkkucGFyc2VBdXRob3JpdHkodiwgdGhpcy5fcGFydHMpO1xuXHRcdFx0aWYgKHJlcyAhPT0gJy8nKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnVzZXJpbmZvID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMudXNlcm5hbWUpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdCA9IFVSSS5idWlsZFVzZXJpbmZvKHRoaXMuX3BhcnRzKTtcblx0XHRcdHJldHVybiB0LnN1YnN0cmluZygwLCB0Lmxlbmd0aCAtMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh2W3YubGVuZ3RoLTFdICE9PSAnQCcpIHtcblx0XHRcdFx0diArPSAnQCc7XG5cdFx0XHR9XG5cblx0XHRcdFVSSS5wYXJzZVVzZXJpbmZvKHYsIHRoaXMuX3BhcnRzKTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5yZXNvdXJjZSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHBhcnRzO1xuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGF0aCgpICsgdGhpcy5zZWFyY2goKSArIHRoaXMuaGFzaCgpO1xuXHRcdH1cblxuXHRcdHBhcnRzID0gVVJJLnBhcnNlKHYpO1xuXHRcdHRoaXMuX3BhcnRzLnBhdGggPSBwYXJ0cy5wYXRoO1xuXHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gcGFydHMucXVlcnk7XG5cdFx0dGhpcy5fcGFydHMuZnJhZ21lbnQgPSBwYXJ0cy5mcmFnbWVudDtcblx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0Ly8gZnJhY3Rpb24gYWNjZXNzb3JzXG5cdHAuc3ViZG9tYWluID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlbmllbmNlLCByZXR1cm4gXCJ3d3dcIiBmcm9tIFwid3d3LmV4YW1wbGUub3JnXCJcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBncmFiIGRvbWFpbiBhbmQgYWRkIGFub3RoZXIgc2VnbWVudFxuXHRcdFx0dmFyIGVuZCA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aCAtIHRoaXMuZG9tYWluKCkubGVuZ3RoIC0gMTtcblx0XHRcdHJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCwgZW5kKSB8fCAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGggLSB0aGlzLmRvbWFpbigpLmxlbmd0aDtcblx0XHRcdHZhciBzdWIgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCwgZSk7XG5cdFx0XHR2YXIgcmVwbGFjZSA9IG5ldyBSZWdFeHAoJ14nICsgZXNjYXBlUmVnRXgoc3ViKSk7XG5cblx0XHRcdGlmICh2ICYmIHYuY2hhckF0KHYubGVuZ3RoIC0gMSkgIT09ICcuJykge1xuXHRcdFx0XHR2ICs9ICcuJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0VVJJLmVuc3VyZVZhbGlkSG9zdG5hbWUodik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5kb21haW4gPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdGJ1aWxkID0gdjtcblx0XHRcdHYgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVuaWVuY2UsIHJldHVybiBcImV4YW1wbGUub3JnXCIgZnJvbSBcInd3dy5leGFtcGxlLm9yZ1wiXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZSB8fCB0aGlzLmlzKCdJUCcpKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0Ly8gaWYgaG9zdG5hbWUgY29uc2lzdHMgb2YgMSBvciAyIHNlZ21lbnRzLCBpdCBtdXN0IGJlIHRoZSBkb21haW5cblx0XHRcdHZhciB0ID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubWF0Y2goL1xcLi9nKTtcblx0XHRcdGlmICh0ICYmIHQubGVuZ3RoIDwgMikge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGdyYWIgdGxkIGFuZCBhZGQgYW5vdGhlciBzZWdtZW50XG5cdFx0XHR2YXIgZW5kID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoIC0gdGhpcy50bGQoYnVpbGQpLmxlbmd0aCAtIDE7XG5cdFx0XHRlbmQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZignLicsIGVuZCAtMSkgKyAxO1xuXHRcdFx0cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyhlbmQpIHx8ICcnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXYpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBkb21haW4gZW1wdHknKTtcblx0XHRcdH1cblxuXHRcdFx0VVJJLmVuc3VyZVZhbGlkSG9zdG5hbWUodik7XG5cblx0XHRcdGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHY7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgcmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy5kb21haW4oKSkgKyAnJCcpO1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC50bGQgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdGJ1aWxkID0gdjtcblx0XHRcdHYgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gcmV0dXJuIFwib3JnXCIgZnJvbSBcInd3dy5leGFtcGxlLm9yZ1wiXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZSB8fCB0aGlzLmlzKCdJUCcpKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0dmFyIHBvcyA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG5cdFx0XHR2YXIgdGxkID0gdGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKHBvcyArIDEpO1xuXG5cdFx0XHRpZiAoYnVpbGQgIT09IHRydWUgJiYgU0xEICYmIFNMRC5saXN0W3RsZC50b0xvd2VyQ2FzZSgpXSkge1xuXHRcdFx0XHRyZXR1cm4gU0xELmdldCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkgfHwgdGxkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGxkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgcmVwbGFjZTtcblxuXHRcdFx0aWYgKCF2KSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgVExEIGVtcHR5Jyk7XG5cdFx0XHR9IGVsc2UgaWYgKHYubWF0Y2goL1teYS16QS1aMC05LV0vKSkge1xuXHRcdFx0XHRpZiAoU0xEICYmIFNMRC5pcyh2KSkge1xuXHRcdFx0XHRcdHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHRoaXMudGxkKCkpICsgJyQnKTtcblx0XHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVExEIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTldJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdjYW5ub3Qgc2V0IFRMRCBvbiBub24tZG9tYWluIGhvc3QnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHRoaXMudGxkKCkpICsgJyQnKTtcblx0XHRcdFx0dGhpcy5fcGFydHMuaG9zdG5hbWUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuZGlyZWN0b3J5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5wYXRoICYmICF0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcblx0XHRcdFx0cmV0dXJuICcvJztcblx0XHRcdH1cblxuXHRcdFx0dmFyIGVuZCA9IHRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoIC0gdGhpcy5maWxlbmFtZSgpLmxlbmd0aCAtIDE7XG5cdFx0XHR2YXIgcmVzID0gdGhpcy5fcGFydHMucGF0aC5zdWJzdHJpbmcoMCwgZW5kKSB8fCAodGhpcy5fcGFydHMuaG9zdG5hbWUgPyAnLycgOiAnJyk7XG5cblx0XHRcdHJldHVybiB2ID8gVVJJLmRlY29kZVBhdGgocmVzKSA6IHJlcztcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgZSA9IHRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoIC0gdGhpcy5maWxlbmFtZSgpLmxlbmd0aDtcblx0XHRcdHZhciBkaXJlY3RvcnkgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLCBlKTtcblx0XHRcdHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cCgnXicgKyBlc2NhcGVSZWdFeChkaXJlY3RvcnkpKTtcblxuXHRcdFx0Ly8gZnVsbHkgcXVhbGlmaWVyIGRpcmVjdG9yaWVzIGJlZ2luIHdpdGggYSBzbGFzaFxuXHRcdFx0aWYgKCF0aGlzLmlzKCdyZWxhdGl2ZScpKSB7XG5cdFx0XHRcdGlmICghdikge1xuXHRcdFx0XHRcdHYgPSAnLyc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodi5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0XHRcdHYgPSAnLycgKyB2O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGRpcmVjdG9yaWVzIGFsd2F5cyBlbmQgd2l0aCBhIHNsYXNoXG5cdFx0XHRpZiAodiAmJiB2LmNoYXJBdCh2Lmxlbmd0aCAtIDEpICE9PSAnLycpIHtcblx0XHRcdFx0diArPSAnLyc7XG5cdFx0XHR9XG5cblx0XHRcdHYgPSBVUkkucmVjb2RlUGF0aCh2KTtcblx0XHRcdHRoaXMuX3BhcnRzLnBhdGggPSB0aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuZmlsZW5hbWUgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLnBhdGggfHwgdGhpcy5fcGFydHMucGF0aCA9PT0gJy8nKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0dmFyIHBvcyA9IHRoaXMuX3BhcnRzLnBhdGgubGFzdEluZGV4T2YoJy8nKTtcblx0XHRcdHZhciByZXMgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZyhwb3MrMSk7XG5cblx0XHRcdHJldHVybiB2ID8gVVJJLmRlY29kZVBhdGhTZWdtZW50KHJlcykgOiByZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBtdXRhdGVkRGlyZWN0b3J5ID0gZmFsc2U7XG5cblx0XHRcdGlmICh2LmNoYXJBdCgwKSA9PT0gJy8nKSB7XG5cdFx0XHRcdHYgPSB2LnN1YnN0cmluZygxKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHYubWF0Y2goL1xcLj9cXC8vKSkge1xuXHRcdFx0XHRtdXRhdGVkRGlyZWN0b3J5ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHRoaXMuZmlsZW5hbWUoKSkgKyAnJCcpO1xuXHRcdFx0diA9IFVSSS5yZWNvZGVQYXRoKHYpO1xuXHRcdFx0dGhpcy5fcGFydHMucGF0aCA9IHRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShyZXBsYWNlLCB2KTtcblxuXHRcdFx0aWYgKG11dGF0ZWREaXJlY3RvcnkpIHtcblx0XHRcdFx0dGhpcy5ub3JtYWxpemVQYXRoKGJ1aWxkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnN1ZmZpeCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMucGF0aCB8fCB0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZmlsZW5hbWUgPSB0aGlzLmZpbGVuYW1lKCk7XG5cdFx0XHR2YXIgcG9zID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTtcblx0XHRcdHZhciBzLCByZXM7XG5cblx0XHRcdGlmIChwb3MgPT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3VmZml4IG1heSBvbmx5IGNvbnRhaW4gYWxudW0gY2hhcmFjdGVycyAoeXVwLCBJIG1hZGUgdGhpcyB1cC4pXG5cdFx0XHRzID0gZmlsZW5hbWUuc3Vic3RyaW5nKHBvcysxKTtcblx0XHRcdHJlcyA9ICgvXlthLXowLTklXSskL2kpLnRlc3QocykgPyBzIDogJyc7XG5cdFx0XHRyZXR1cm4gdiA/IFVSSS5kZWNvZGVQYXRoU2VnbWVudChyZXMpIDogcmVzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodi5jaGFyQXQoMCkgPT09ICcuJykge1xuXHRcdFx0XHR2ID0gdi5zdWJzdHJpbmcoMSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzdWZmaXggPSB0aGlzLnN1ZmZpeCgpO1xuXHRcdFx0dmFyIHJlcGxhY2U7XG5cblx0XHRcdGlmICghc3VmZml4KSB7XG5cdFx0XHRcdGlmICghdikge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fcGFydHMucGF0aCArPSAnLicgKyBVUkkucmVjb2RlUGF0aCh2KTtcblx0XHRcdH0gZWxzZSBpZiAoIXYpIHtcblx0XHRcdFx0cmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgoJy4nICsgc3VmZml4KSArICckJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeChzdWZmaXgpICsgJyQnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlcGxhY2UpIHtcblx0XHRcdFx0diA9IFVSSS5yZWNvZGVQYXRoKHYpO1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gdGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuc2VnbWVudCA9IGZ1bmN0aW9uKHNlZ21lbnQsIHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHNlcGFyYXRvciA9IHRoaXMuX3BhcnRzLnVybiA/ICc6JyA6ICcvJztcblx0XHR2YXIgcGF0aCA9IHRoaXMucGF0aCgpO1xuXHRcdHZhciBhYnNvbHV0ZSA9IHBhdGguc3Vic3RyaW5nKDAsIDEpID09PSAnLyc7XG5cdFx0dmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdChzZXBhcmF0b3IpO1xuXG5cdFx0aWYgKHNlZ21lbnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc2VnbWVudCAhPT0gJ251bWJlcicpIHtcblx0XHRcdGJ1aWxkID0gdjtcblx0XHRcdHYgPSBzZWdtZW50O1xuXHRcdFx0c2VnbWVudCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoc2VnbWVudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzZWdtZW50ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdCYWQgc2VnbWVudCBcIicgKyBzZWdtZW50ICsgJ1wiLCBtdXN0IGJlIDAtYmFzZWQgaW50ZWdlcicpO1xuXHRcdH1cblxuXHRcdGlmIChhYnNvbHV0ZSkge1xuXHRcdFx0c2VnbWVudHMuc2hpZnQoKTtcblx0XHR9XG5cblx0XHRpZiAoc2VnbWVudCA8IDApIHtcblx0XHRcdC8vIGFsbG93IG5lZ2F0aXZlIGluZGV4ZXMgdG8gYWRkcmVzcyBmcm9tIHRoZSBlbmRcblx0XHRcdHNlZ21lbnQgPSBNYXRoLm1heChzZWdtZW50cy5sZW5ndGggKyBzZWdtZW50LCAwKTtcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvKmpzaGludCBsYXhicmVhazogdHJ1ZSAqL1xuXHRcdFx0cmV0dXJuIHNlZ21lbnQgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHNlZ21lbnRzXG5cdFx0XHRcdDogc2VnbWVudHNbc2VnbWVudF07XG5cdFx0XHQvKmpzaGludCBsYXhicmVhazogZmFsc2UgKi9cblx0XHR9IGVsc2UgaWYgKHNlZ21lbnQgPT09IG51bGwgfHwgc2VnbWVudHNbc2VnbWVudF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKGlzQXJyYXkodikpIHtcblx0XHRcdFx0c2VnbWVudHMgPSBbXTtcblx0XHRcdFx0Ly8gY29sbGFwc2UgZW1wdHkgZWxlbWVudHMgd2l0aGluIGFycmF5XG5cdFx0XHRcdGZvciAodmFyIGk9MCwgbD12Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdGlmICghdltpXS5sZW5ndGggJiYgKCFzZWdtZW50cy5sZW5ndGggfHwgIXNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtMV0ubGVuZ3RoKSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHNlZ21lbnRzLmxlbmd0aCAmJiAhc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHNlZ21lbnRzLnBvcCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNlZ21lbnRzLnB1c2godHJpbVNsYXNoZXModltpXSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHYgfHwgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHYgPSB0cmltU2xhc2hlcyh2KTtcblx0XHRcdFx0aWYgKHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtMV0gPT09ICcnKSB7XG5cdFx0XHRcdFx0Ly8gZW1wdHkgdHJhaWxpbmcgZWxlbWVudHMgaGF2ZSB0byBiZSBvdmVyd3JpdHRlblxuXHRcdFx0XHRcdC8vIHRvIHByZXZlbnQgcmVzdWx0cyBzdWNoIGFzIC9mb28vL2JhclxuXHRcdFx0XHRcdHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtMV0gPSB2O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlZ21lbnRzLnB1c2godik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0c2VnbWVudHNbc2VnbWVudF0gPSB0cmltU2xhc2hlcyh2KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlZ21lbnRzLnNwbGljZShzZWdtZW50LCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYWJzb2x1dGUpIHtcblx0XHRcdHNlZ21lbnRzLnVuc2hpZnQoJycpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnBhdGgoc2VnbWVudHMuam9pbihzZXBhcmF0b3IpLCBidWlsZCk7XG5cdH07XG5cdHAuc2VnbWVudENvZGVkID0gZnVuY3Rpb24oc2VnbWVudCwgdiwgYnVpbGQpIHtcblx0XHR2YXIgc2VnbWVudHMsIGksIGw7XG5cblx0XHRpZiAodHlwZW9mIHNlZ21lbnQgIT09ICdudW1iZXInKSB7XG5cdFx0XHRidWlsZCA9IHY7XG5cdFx0XHR2ID0gc2VnbWVudDtcblx0XHRcdHNlZ21lbnQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2VnbWVudHMgPSB0aGlzLnNlZ21lbnQoc2VnbWVudCwgdiwgYnVpbGQpO1xuXHRcdFx0aWYgKCFpc0FycmF5KHNlZ21lbnRzKSkge1xuXHRcdFx0XHRzZWdtZW50cyA9IHNlZ21lbnRzICE9PSB1bmRlZmluZWQgPyBVUkkuZGVjb2RlKHNlZ21lbnRzKSA6IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoaSA9IDAsIGwgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRzZWdtZW50c1tpXSA9IFVSSS5kZWNvZGUoc2VnbWVudHNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWdtZW50cztcblx0XHR9XG5cblx0XHRpZiAoIWlzQXJyYXkodikpIHtcblx0XHRcdHYgPSAodHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHYgaW5zdGFuY2VvZiBTdHJpbmcpID8gVVJJLmVuY29kZSh2KSA6IHY7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHR2W2ldID0gVVJJLmVuY29kZSh2W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5zZWdtZW50KHNlZ21lbnQsIHYsIGJ1aWxkKTtcblx0fTtcblxuXHQvLyBtdXRhdGluZyBxdWVyeSBzdHJpbmdcblx0dmFyIHEgPSBwLnF1ZXJ5O1xuXHRwLnF1ZXJ5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodiA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRcdHZhciByZXN1bHQgPSB2LmNhbGwodGhpcywgZGF0YSk7XG5cdFx0XHR0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KHJlc3VsdCB8fCBkYXRhLCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSBlbHNlIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KHYsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHEuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG5cdFx0fVxuXHR9O1xuXHRwLnNldFF1ZXJ5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGJ1aWxkKSB7XG5cdFx0dmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cblx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnIHx8IG5hbWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcblx0XHRcdGRhdGFbbmFtZV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBudWxsO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuXHRcdFx0XHRpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuXHRcdFx0XHRcdGRhdGFba2V5XSA9IG5hbWVba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlcicpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkoZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRidWlsZCA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5hZGRRdWVyeSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBidWlsZCkge1xuXHRcdHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFVSSS5hZGRRdWVyeShkYXRhLCBuYW1lLCB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlKTtcblx0XHR0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KGRhdGEsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuXHRcdFx0YnVpbGQgPSB2YWx1ZTtcblx0XHR9XG5cblx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAucmVtb3ZlUXVlcnkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgYnVpbGQpIHtcblx0XHR2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRVUkkucmVtb3ZlUXVlcnkoZGF0YSwgbmFtZSwgdmFsdWUpO1xuXHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkoZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRidWlsZCA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5oYXNRdWVyeSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCB3aXRoaW5BcnJheSkge1xuXHRcdHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdHJldHVybiBVUkkuaGFzUXVlcnkoZGF0YSwgbmFtZSwgdmFsdWUsIHdpdGhpbkFycmF5KTtcblx0fTtcblx0cC5zZXRTZWFyY2ggPSBwLnNldFF1ZXJ5O1xuXHRwLmFkZFNlYXJjaCA9IHAuYWRkUXVlcnk7XG5cdHAucmVtb3ZlU2VhcmNoID0gcC5yZW1vdmVRdWVyeTtcblx0cC5oYXNTZWFyY2ggPSBwLmhhc1F1ZXJ5O1xuXG5cdC8vIHNhbml0aXppbmcgVVJMc1xuXHRwLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0XHRcdC5ub3JtYWxpemVQcm90b2NvbChmYWxzZSlcblx0XHRcdFx0Lm5vcm1hbGl6ZVBhdGgoZmFsc2UpXG5cdFx0XHRcdC5ub3JtYWxpemVRdWVyeShmYWxzZSlcblx0XHRcdFx0Lm5vcm1hbGl6ZUZyYWdtZW50KGZhbHNlKVxuXHRcdFx0XHQuYnVpbGQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0Lm5vcm1hbGl6ZVByb3RvY29sKGZhbHNlKVxuXHRcdFx0Lm5vcm1hbGl6ZUhvc3RuYW1lKGZhbHNlKVxuXHRcdFx0Lm5vcm1hbGl6ZVBvcnQoZmFsc2UpXG5cdFx0XHQubm9ybWFsaXplUGF0aChmYWxzZSlcblx0XHRcdC5ub3JtYWxpemVRdWVyeShmYWxzZSlcblx0XHRcdC5ub3JtYWxpemVGcmFnbWVudChmYWxzZSlcblx0XHRcdC5idWlsZCgpO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZVByb3RvY29sID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHRpZiAodHlwZW9mIHRoaXMuX3BhcnRzLnByb3RvY29sID09PSAnc3RyaW5nJykge1xuXHRcdFx0dGhpcy5fcGFydHMucHJvdG9jb2wgPSB0aGlzLl9wYXJ0cy5wcm90b2NvbC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZUhvc3RuYW1lID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdGlmICh0aGlzLmlzKCdJRE4nKSAmJiBwdW55Y29kZSkge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHB1bnljb2RlLnRvQVNDSUkodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzKCdJUHY2JykgJiYgSVB2Nikge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IElQdjYuYmVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5ub3JtYWxpemVQb3J0ID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHQvLyByZW1vdmUgcG9ydCBvZiBpdCdzIHRoZSBwcm90b2NvbCdzIGRlZmF1bHRcblx0XHRpZiAodHlwZW9mIHRoaXMuX3BhcnRzLnByb3RvY29sID09PSAnc3RyaW5nJyAmJiB0aGlzLl9wYXJ0cy5wb3J0ID09PSBVUkkuZGVmYXVsdFBvcnRzW3RoaXMuX3BhcnRzLnByb3RvY29sXSkge1xuXHRcdFx0dGhpcy5fcGFydHMucG9ydCA9IG51bGw7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAubm9ybWFsaXplUGF0aCA9IGZ1bmN0aW9uKGJ1aWxkKSB7XG5cdFx0dmFyIF9wYXRoID0gdGhpcy5fcGFydHMucGF0aDtcblx0XHRpZiAoIV9wYXRoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gVVJJLnJlY29kZVVyblBhdGgodGhpcy5fcGFydHMucGF0aCk7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcGFydHMucGF0aCA9PT0gJy8nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3dhc19yZWxhdGl2ZTtcblx0XHR2YXIgX2xlYWRpbmdQYXJlbnRzID0gJyc7XG5cdFx0dmFyIF9wYXJlbnQsIF9wb3M7XG5cblx0XHQvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHNcblx0XHRpZiAoX3BhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdF93YXNfcmVsYXRpdmUgPSB0cnVlO1xuXHRcdFx0X3BhdGggPSAnLycgKyBfcGF0aDtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgcmVsYXRpdmUgZmlsZXMgKGFzIG9wcG9zZWQgdG8gZGlyZWN0b3JpZXMpXG5cdFx0aWYgKF9wYXRoLnNsaWNlKC0zKSA9PT0gJy8uLicgfHwgX3BhdGguc2xpY2UoLTIpID09PSAnLy4nKSB7XG5cdFx0XHRfcGF0aCArPSAnLyc7XG5cdFx0fVxuXG5cdFx0Ly8gcmVzb2x2ZSBzaW1wbGVzXG5cdFx0X3BhdGggPSBfcGF0aFxuXHRcdFx0LnJlcGxhY2UoLyhcXC8oXFwuXFwvKSspfChcXC9cXC4kKS9nLCAnLycpXG5cdFx0XHQucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpO1xuXG5cdFx0Ly8gcmVtZW1iZXIgbGVhZGluZyBwYXJlbnRzXG5cdFx0aWYgKF93YXNfcmVsYXRpdmUpIHtcblx0XHRcdF9sZWFkaW5nUGFyZW50cyA9IF9wYXRoLnN1YnN0cmluZygxKS5tYXRjaCgvXihcXC5cXC5cXC8pKy8pIHx8ICcnO1xuXHRcdFx0aWYgKF9sZWFkaW5nUGFyZW50cykge1xuXHRcdFx0XHRfbGVhZGluZ1BhcmVudHMgPSBfbGVhZGluZ1BhcmVudHNbMF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVzb2x2ZSBwYXJlbnRzXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdF9wYXJlbnQgPSBfcGF0aC5pbmRleE9mKCcvLi4nKTtcblx0XHRcdGlmIChfcGFyZW50ID09PSAtMSkge1xuXHRcdFx0XHQvLyBubyBtb3JlIC4uLyB0byByZXNvbHZlXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fSBlbHNlIGlmIChfcGFyZW50ID09PSAwKSB7XG5cdFx0XHRcdC8vIHRvcCBsZXZlbCBjYW5ub3QgYmUgcmVsYXRpdmUsIHNraXAgaXRcblx0XHRcdFx0X3BhdGggPSBfcGF0aC5zdWJzdHJpbmcoMyk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRfcG9zID0gX3BhdGguc3Vic3RyaW5nKDAsIF9wYXJlbnQpLmxhc3RJbmRleE9mKCcvJyk7XG5cdFx0XHRpZiAoX3BvcyA9PT0gLTEpIHtcblx0XHRcdFx0X3BvcyA9IF9wYXJlbnQ7XG5cdFx0XHR9XG5cdFx0XHRfcGF0aCA9IF9wYXRoLnN1YnN0cmluZygwLCBfcG9zKSArIF9wYXRoLnN1YnN0cmluZyhfcGFyZW50ICsgMyk7XG5cdFx0fVxuXG5cdFx0Ly8gcmV2ZXJ0IHRvIHJlbGF0aXZlXG5cdFx0aWYgKF93YXNfcmVsYXRpdmUgJiYgdGhpcy5pcygncmVsYXRpdmUnKSkge1xuXHRcdFx0X3BhdGggPSBfbGVhZGluZ1BhcmVudHMgKyBfcGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0X3BhdGggPSBVUkkucmVjb2RlUGF0aChfcGF0aCk7XG5cdFx0dGhpcy5fcGFydHMucGF0aCA9IF9wYXRoO1xuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5ub3JtYWxpemVQYXRobmFtZSA9IHAubm9ybWFsaXplUGF0aDtcblx0cC5ub3JtYWxpemVRdWVyeSA9IGZ1bmN0aW9uKGJ1aWxkKSB7XG5cdFx0aWYgKHR5cGVvZiB0aGlzLl9wYXJ0cy5xdWVyeSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMucXVlcnkubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gbnVsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMucXVlcnkoVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZUZyYWdtZW50ID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHRpZiAoIXRoaXMuX3BhcnRzLmZyYWdtZW50KSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5mcmFnbWVudCA9IG51bGw7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAubm9ybWFsaXplU2VhcmNoID0gcC5ub3JtYWxpemVRdWVyeTtcblx0cC5ub3JtYWxpemVIYXNoID0gcC5ub3JtYWxpemVGcmFnbWVudDtcblxuXHRwLmlzbzg4NTkgPSBmdW5jdGlvbigpIHtcblx0XHQvLyBleHBlY3QgdW5pY29kZSBpbnB1dCwgaXNvODg1OSBvdXRwdXRcblx0XHR2YXIgZSA9IFVSSS5lbmNvZGU7XG5cdFx0dmFyIGQgPSBVUkkuZGVjb2RlO1xuXG5cdFx0VVJJLmVuY29kZSA9IGVzY2FwZTtcblx0XHRVUkkuZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLm5vcm1hbGl6ZSgpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRVUkkuZW5jb2RlID0gZTtcblx0XHRcdFVSSS5kZWNvZGUgPSBkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRwLnVuaWNvZGUgPSBmdW5jdGlvbigpIHtcblx0XHQvLyBleHBlY3QgaXNvODg1OSBpbnB1dCwgdW5pY29kZSBvdXRwdXRcblx0XHR2YXIgZSA9IFVSSS5lbmNvZGU7XG5cdFx0dmFyIGQgPSBVUkkuZGVjb2RlO1xuXG5cdFx0VVJJLmVuY29kZSA9IHN0cmljdEVuY29kZVVSSUNvbXBvbmVudDtcblx0XHRVUkkuZGVjb2RlID0gdW5lc2NhcGU7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMubm9ybWFsaXplKCk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdFVSSS5lbmNvZGUgPSBlO1xuXHRcdFx0VVJJLmRlY29kZSA9IGQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdHAucmVhZGFibGUgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgdXJpID0gdGhpcy5jbG9uZSgpO1xuXHRcdC8vIHJlbW92aW5nIHVzZXJuYW1lLCBwYXNzd29yZCwgYmVjYXVzZSB0aGV5IHNob3VsZG4ndCBiZSBkaXNwbGF5ZWQgYWNjb3JkaW5nIHRvIFJGQyAzOTg2XG5cdFx0dXJpLnVzZXJuYW1lKCcnKS5wYXNzd29yZCgnJykubm9ybWFsaXplKCk7XG5cdFx0dmFyIHQgPSAnJztcblx0XHRpZiAodXJpLl9wYXJ0cy5wcm90b2NvbCkge1xuXHRcdFx0dCArPSB1cmkuX3BhcnRzLnByb3RvY29sICsgJzovLyc7XG5cdFx0fVxuXG5cdFx0aWYgKHVyaS5fcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdGlmICh1cmkuaXMoJ3B1bnljb2RlJykgJiYgcHVueWNvZGUpIHtcblx0XHRcdFx0dCArPSBwdW55Y29kZS50b1VuaWNvZGUodXJpLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHRcdGlmICh1cmkuX3BhcnRzLnBvcnQpIHtcblx0XHRcdFx0XHR0ICs9ICc6JyArIHVyaS5fcGFydHMucG9ydDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dCArPSB1cmkuaG9zdCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh1cmkuX3BhcnRzLmhvc3RuYW1lICYmIHVyaS5fcGFydHMucGF0aCAmJiB1cmkuX3BhcnRzLnBhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdHQgKz0gJy8nO1xuXHRcdH1cblxuXHRcdHQgKz0gdXJpLnBhdGgodHJ1ZSk7XG5cdFx0aWYgKHVyaS5fcGFydHMucXVlcnkpIHtcblx0XHRcdHZhciBxID0gJyc7XG5cdFx0XHRmb3IgKHZhciBpID0gMCwgcXAgPSB1cmkuX3BhcnRzLnF1ZXJ5LnNwbGl0KCcmJyksIGwgPSBxcC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0dmFyIGt2ID0gKHFwW2ldIHx8ICcnKS5zcGxpdCgnPScpO1xuXHRcdFx0XHRxICs9ICcmJyArIFVSSS5kZWNvZGVRdWVyeShrdlswXSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSlcblx0XHRcdFx0XHQucmVwbGFjZSgvJi9nLCAnJTI2Jyk7XG5cblx0XHRcdFx0aWYgKGt2WzFdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRxICs9ICc9JyArIFVSSS5kZWNvZGVRdWVyeShrdlsxXSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSlcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC8mL2csICclMjYnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dCArPSAnPycgKyBxLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHR0ICs9IFVSSS5kZWNvZGVRdWVyeSh1cmkuaGFzaCgpLCB0cnVlKTtcblx0XHRyZXR1cm4gdDtcblx0fTtcblxuXHQvLyByZXNvbHZpbmcgcmVsYXRpdmUgYW5kIGFic29sdXRlIFVSTHNcblx0cC5hYnNvbHV0ZVRvID0gZnVuY3Rpb24oYmFzZSkge1xuXHRcdHZhciByZXNvbHZlZCA9IHRoaXMuY2xvbmUoKTtcblx0XHR2YXIgcHJvcGVydGllcyA9IFsncHJvdG9jb2wnLCAndXNlcm5hbWUnLCAncGFzc3dvcmQnLCAnaG9zdG5hbWUnLCAncG9ydCddO1xuXHRcdHZhciBiYXNlZGlyLCBpLCBwO1xuXG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVUk5zIGRvIG5vdCBoYXZlIGFueSBnZW5lcmFsbHkgZGVmaW5lZCBoaWVyYXJjaGljYWwgY29tcG9uZW50cycpO1xuXHRcdH1cblxuXHRcdGlmICghKGJhc2UgaW5zdGFuY2VvZiBVUkkpKSB7XG5cdFx0XHRiYXNlID0gbmV3IFVSSShiYXNlKTtcblx0XHR9XG5cblx0XHRpZiAoIXJlc29sdmVkLl9wYXJ0cy5wcm90b2NvbCkge1xuXHRcdFx0cmVzb2x2ZWQuX3BhcnRzLnByb3RvY29sID0gYmFzZS5fcGFydHMucHJvdG9jb2w7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3BhcnRzLmhvc3RuYW1lKSB7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZWQ7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgKHAgPSBwcm9wZXJ0aWVzW2ldKTsgaSsrKSB7XG5cdFx0XHRyZXNvbHZlZC5fcGFydHNbcF0gPSBiYXNlLl9wYXJ0c1twXTtcblx0XHR9XG5cblx0XHRpZiAoIXJlc29sdmVkLl9wYXJ0cy5wYXRoKSB7XG5cdFx0XHRyZXNvbHZlZC5fcGFydHMucGF0aCA9IGJhc2UuX3BhcnRzLnBhdGg7XG5cdFx0XHRpZiAoIXJlc29sdmVkLl9wYXJ0cy5xdWVyeSkge1xuXHRcdFx0XHRyZXNvbHZlZC5fcGFydHMucXVlcnkgPSBiYXNlLl9wYXJ0cy5xdWVyeTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHJlc29sdmVkLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygtMikgPT09ICcuLicpIHtcblx0XHRcdHJlc29sdmVkLl9wYXJ0cy5wYXRoICs9ICcvJztcblx0XHR9XG5cblx0XHRpZiAocmVzb2x2ZWQucGF0aCgpLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG5cdFx0XHRiYXNlZGlyID0gYmFzZS5kaXJlY3RvcnkoKTtcblx0XHRcdGJhc2VkaXIgPSBiYXNlZGlyID8gYmFzZWRpciA6IGJhc2UucGF0aCgpLmluZGV4T2YoJy8nKSA9PT0gMCA/ICcvJyA6ICcnO1xuXHRcdFx0cmVzb2x2ZWQuX3BhcnRzLnBhdGggPSAoYmFzZWRpciA/IChiYXNlZGlyICsgJy8nKSA6ICcnKSArIHJlc29sdmVkLl9wYXJ0cy5wYXRoO1xuXHRcdFx0cmVzb2x2ZWQubm9ybWFsaXplUGF0aCgpO1xuXHRcdH1cblxuXHRcdHJlc29sdmVkLmJ1aWxkKCk7XG5cdFx0cmV0dXJuIHJlc29sdmVkO1xuXHR9O1xuXHRwLnJlbGF0aXZlVG8gPSBmdW5jdGlvbihiYXNlKSB7XG5cdFx0dmFyIHJlbGF0aXZlID0gdGhpcy5jbG9uZSgpLm5vcm1hbGl6ZSgpO1xuXHRcdHZhciByZWxhdGl2ZVBhcnRzLCBiYXNlUGFydHMsIGNvbW1vbiwgcmVsYXRpdmVQYXRoLCBiYXNlUGF0aDtcblxuXHRcdGlmIChyZWxhdGl2ZS5fcGFydHMudXJuKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzJyk7XG5cdFx0fVxuXG5cdFx0YmFzZSA9IG5ldyBVUkkoYmFzZSkubm9ybWFsaXplKCk7XG5cdFx0cmVsYXRpdmVQYXJ0cyA9IHJlbGF0aXZlLl9wYXJ0cztcblx0XHRiYXNlUGFydHMgPSBiYXNlLl9wYXJ0cztcblx0XHRyZWxhdGl2ZVBhdGggPSByZWxhdGl2ZS5wYXRoKCk7XG5cdFx0YmFzZVBhdGggPSBiYXNlLnBhdGgoKTtcblxuXHRcdGlmIChyZWxhdGl2ZVBhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVVJJIGlzIGFscmVhZHkgcmVsYXRpdmUnKTtcblx0XHR9XG5cblx0XHRpZiAoYmFzZVBhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBhIFVSSSByZWxhdGl2ZSB0byBhbm90aGVyIHJlbGF0aXZlIFVSSScpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhcnRzLnByb3RvY29sID09PSBiYXNlUGFydHMucHJvdG9jb2wpIHtcblx0XHRcdHJlbGF0aXZlUGFydHMucHJvdG9jb2wgPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhcnRzLnVzZXJuYW1lICE9PSBiYXNlUGFydHMudXNlcm5hbWUgfHwgcmVsYXRpdmVQYXJ0cy5wYXNzd29yZCAhPT0gYmFzZVBhcnRzLnBhc3N3b3JkKSB7XG5cdFx0XHRyZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcblx0XHR9XG5cblx0XHRpZiAocmVsYXRpdmVQYXJ0cy5wcm90b2NvbCAhPT0gbnVsbCB8fCByZWxhdGl2ZVBhcnRzLnVzZXJuYW1lICE9PSBudWxsIHx8IHJlbGF0aXZlUGFydHMucGFzc3dvcmQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhcnRzLmhvc3RuYW1lID09PSBiYXNlUGFydHMuaG9zdG5hbWUgJiYgcmVsYXRpdmVQYXJ0cy5wb3J0ID09PSBiYXNlUGFydHMucG9ydCkge1xuXHRcdFx0cmVsYXRpdmVQYXJ0cy5ob3N0bmFtZSA9IG51bGw7XG5cdFx0XHRyZWxhdGl2ZVBhcnRzLnBvcnQgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcblx0XHR9XG5cblx0XHRpZiAocmVsYXRpdmVQYXRoID09PSBiYXNlUGF0aCkge1xuXHRcdFx0cmVsYXRpdmVQYXJ0cy5wYXRoID0gJyc7XG5cdFx0XHRyZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcblx0XHR9XG5cblx0XHQvLyBkZXRlcm1pbmUgY29tbW9uIHN1YiBwYXRoXG5cdFx0Y29tbW9uID0gVVJJLmNvbW1vblBhdGgocmVsYXRpdmVQYXRoLCBiYXNlUGF0aCk7XG5cblx0XHQvLyBJZiB0aGUgcGF0aHMgaGF2ZSBub3RoaW5nIGluIGNvbW1vbiwgcmV0dXJuIGEgcmVsYXRpdmUgVVJMIHdpdGggdGhlIGFic29sdXRlIHBhdGguXG5cdFx0aWYgKCFjb21tb24pIHtcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdHZhciBwYXJlbnRzID0gYmFzZVBhcnRzLnBhdGhcblx0XHRcdC5zdWJzdHJpbmcoY29tbW9uLmxlbmd0aClcblx0XHRcdC5yZXBsYWNlKC9bXlxcL10qJC8sICcnKVxuXHRcdFx0LnJlcGxhY2UoLy4qP1xcLy9nLCAnLi4vJyk7XG5cblx0XHRyZWxhdGl2ZVBhcnRzLnBhdGggPSAocGFyZW50cyArIHJlbGF0aXZlUGFydHMucGF0aC5zdWJzdHJpbmcoY29tbW9uLmxlbmd0aCkpIHx8ICcuLyc7XG5cblx0XHRyZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcblx0fTtcblxuXHQvLyBjb21wYXJpbmcgVVJJc1xuXHRwLmVxdWFscyA9IGZ1bmN0aW9uKHVyaSkge1xuXHRcdHZhciBvbmUgPSB0aGlzLmNsb25lKCk7XG5cdFx0dmFyIHR3byA9IG5ldyBVUkkodXJpKTtcblx0XHR2YXIgb25lX21hcCA9IHt9O1xuXHRcdHZhciB0d29fbWFwID0ge307XG5cdFx0dmFyIGNoZWNrZWQgPSB7fTtcblx0XHR2YXIgb25lX3F1ZXJ5LCB0d29fcXVlcnksIGtleTtcblxuXHRcdG9uZS5ub3JtYWxpemUoKTtcblx0XHR0d28ubm9ybWFsaXplKCk7XG5cblx0XHQvLyBleGFjdCBtYXRjaFxuXHRcdGlmIChvbmUudG9TdHJpbmcoKSA9PT0gdHdvLnRvU3RyaW5nKCkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIGV4dHJhY3QgcXVlcnkgc3RyaW5nXG5cdFx0b25lX3F1ZXJ5ID0gb25lLnF1ZXJ5KCk7XG5cdFx0dHdvX3F1ZXJ5ID0gdHdvLnF1ZXJ5KCk7XG5cdFx0b25lLnF1ZXJ5KCcnKTtcblx0XHR0d28ucXVlcnkoJycpO1xuXG5cdFx0Ly8gZGVmaW5pdGVseSBub3QgZXF1YWwgaWYgbm90IGV2ZW4gbm9uLXF1ZXJ5IHBhcnRzIG1hdGNoXG5cdFx0aWYgKG9uZS50b1N0cmluZygpICE9PSB0d28udG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIHF1ZXJ5IHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgsIGV2ZW4gaWYgdGhleSdyZSBwZXJtdXRlZFxuXHRcdGlmIChvbmVfcXVlcnkubGVuZ3RoICE9PSB0d29fcXVlcnkubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0b25lX21hcCA9IFVSSS5wYXJzZVF1ZXJ5KG9uZV9xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0dHdvX21hcCA9IFVSSS5wYXJzZVF1ZXJ5KHR3b19xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cblx0XHRmb3IgKGtleSBpbiBvbmVfbWFwKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwob25lX21hcCwga2V5KSkge1xuXHRcdFx0XHRpZiAoIWlzQXJyYXkob25lX21hcFtrZXldKSkge1xuXHRcdFx0XHRcdGlmIChvbmVfbWFwW2tleV0gIT09IHR3b19tYXBba2V5XSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghYXJyYXlzRXF1YWwob25lX21hcFtrZXldLCB0d29fbWFwW2tleV0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2hlY2tlZFtrZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGtleSBpbiB0d29fbWFwKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwodHdvX21hcCwga2V5KSkge1xuXHRcdFx0XHRpZiAoIWNoZWNrZWRba2V5XSkge1xuXHRcdFx0XHRcdC8vIHR3byBjb250YWlucyBhIHBhcmFtZXRlciBub3QgcHJlc2VudCBpbiBvbmVcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHQvLyBzdGF0ZVxuXHRwLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyA9IGZ1bmN0aW9uKHYpIHtcblx0XHR0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMgPSAhIXY7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0cC5lc2NhcGVRdWVyeVNwYWNlID0gZnVuY3Rpb24odikge1xuXHRcdHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UgPSAhIXY7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0cmV0dXJuIFVSSTtcbn0pKTsiLCJXb3JrZmxvdyA9IHt9XG5cbkBJbWFnZVNpZ24gPSB7fTtcblxuQFRyYWNlc0hhbmRsZXIgPSB7fTtcblxuQFRyYWNlc1RlbXBsYXRlID0ge307XG5cbkBJbnN0YW5jZWZvcm1UZW1wbGF0ZSA9IHt9O1xuXG5ASW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUgPSB7fTtcblxuQEluc3RhbmNlU2lnblRleHQgPSB7fVxuXG5AUmVsYXRlZEluc3RhbmNlcyA9IHt9XG5cbkBSZWxhdGVkUmVjb3JkcyA9IHt9XG5cbkBJbnN0YW5jZU1hY3JvID0ge2NvbnRleHQ6IHt9fVxuXG5AVHJhY2VzTWFuYWdlciA9IHt9O1xuXG5JbnN0YW5jZVNpZ25UZXh0LmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nID0gKGZpZWxkX2Zvcm11bGEpLT5cblx0cmV0dXJuIChmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3RyYWNlcy5cIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpID4gLTEgfHwgZmllbGRfZm9ybXVsYT8uaW5kZXhPZihcInt5aWppYW5sYW46XCIpID4gLTEgfHwgZmllbGRfZm9ybXVsYT8uaW5kZXhPZihcIntcXFwieWlqaWFubGFuXFxcIjpcIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwieyd5aWppYW5sYW4nOlwiKSA+IC0xKVxuXG5JbnN0YW5jZVNpZ25UZXh0LmluY2x1ZGVzT3BpbmlvbkZpZWxkID0gKGZvcm0sIGZvcm1fdmVyc2lvbiktPlxuXHRmaWVsZF9mb3JtdWxhcyA9IG5ldyBBcnJheSgpO1xuXG5cdF9mb3JtX3ZlcnNpb24gPSB7fVxuXG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdF9mb3JtX3ZlcnNpb24gPSB1dWZsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGRiLmZvcm1zLmZpbmRPbmUoe19pZDogZm9ybX0pLCBmb3JtX3ZlcnNpb24pXG5cdGVsc2Vcblx0XHRfZm9ybV92ZXJzaW9uID0gZGIuZm9ybV92ZXJzaW9ucy5maW5kT25lKHtfaWQ6IGZvcm1fdmVyc2lvbiwgZm9ybTogZm9ybX0pXG5cblx0ZmllbGRzID0gX2Zvcm1fdmVyc2lvbj8uZmllbGRzIHx8IFtdXG5cblx0ZmllbGRzLmZvckVhY2ggKGYpLT5cblx0XHRpZiBmLnR5cGUgPT0gJ3RhYmxlJ1xuXHRcdFx0Y29uc29sZS5sb2cgJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJ1xuXHRcdGVsc2UgaWYgZi50eXBlID09ICdzZWN0aW9uJ1xuXHRcdFx0Zj8uZmllbGRzPy5mb3JFYWNoIChmMSktPlxuXHRcdFx0XHRmaWVsZF9mb3JtdWxhcy5wdXNoIGYxLmZvcm11bGFcblx0XHRlbHNlXG5cdFx0XHRmaWVsZF9mb3JtdWxhcy5wdXNoIGYuZm9ybXVsYVxuXG5cdF8uc29tZSBmaWVsZF9mb3JtdWxhcywgKGZpZWxkX2Zvcm11bGEpLT5cblx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKVxuXG4iLCIgICAgICAgICAgICAgXG5cbldvcmtmbG93ID0ge307XG5cbnRoaXMuSW1hZ2VTaWduID0ge307XG5cbnRoaXMuVHJhY2VzSGFuZGxlciA9IHt9O1xuXG50aGlzLlRyYWNlc1RlbXBsYXRlID0ge307XG5cbnRoaXMuSW5zdGFuY2Vmb3JtVGVtcGxhdGUgPSB7fTtcblxudGhpcy5JbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZSA9IHt9O1xuXG50aGlzLkluc3RhbmNlU2lnblRleHQgPSB7fTtcblxudGhpcy5SZWxhdGVkSW5zdGFuY2VzID0ge307XG5cbnRoaXMuUmVsYXRlZFJlY29yZHMgPSB7fTtcblxudGhpcy5JbnN0YW5jZU1hY3JvID0ge1xuICBjb250ZXh0OiB7fVxufTtcblxudGhpcy5UcmFjZXNNYW5hZ2VyID0ge307XG5cbkluc3RhbmNlU2lnblRleHQuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcgPSBmdW5jdGlvbihmaWVsZF9mb3JtdWxhKSB7XG4gIHJldHVybiAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie3RyYWNlcy5cIikgOiB2b2lkIDApID4gLTEgfHwgKGZpZWxkX2Zvcm11bGEgIT0gbnVsbCA/IGZpZWxkX2Zvcm11bGEuaW5kZXhPZihcIntzaWduYXR1cmUudHJhY2VzLlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie3lpamlhbmxhbjpcIikgOiB2b2lkIDApID4gLTEgfHwgKGZpZWxkX2Zvcm11bGEgIT0gbnVsbCA/IGZpZWxkX2Zvcm11bGEuaW5kZXhPZihcIntcXFwieWlqaWFubGFuXFxcIjpcIikgOiB2b2lkIDApID4gLTEgfHwgKGZpZWxkX2Zvcm11bGEgIT0gbnVsbCA/IGZpZWxkX2Zvcm11bGEuaW5kZXhPZihcInsneWlqaWFubGFuJzpcIikgOiB2b2lkIDApID4gLTE7XG59O1xuXG5JbnN0YW5jZVNpZ25UZXh0LmluY2x1ZGVzT3BpbmlvbkZpZWxkID0gZnVuY3Rpb24oZm9ybSwgZm9ybV92ZXJzaW9uKSB7XG4gIHZhciBfZm9ybV92ZXJzaW9uLCBmaWVsZF9mb3JtdWxhcywgZmllbGRzO1xuICBmaWVsZF9mb3JtdWxhcyA9IG5ldyBBcnJheSgpO1xuICBfZm9ybV92ZXJzaW9uID0ge307XG4gIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICBfZm9ybV92ZXJzaW9uID0gdXVmbG93TWFuYWdlci5nZXRGb3JtVmVyc2lvbihkYi5mb3Jtcy5maW5kT25lKHtcbiAgICAgIF9pZDogZm9ybVxuICAgIH0pLCBmb3JtX3ZlcnNpb24pO1xuICB9IGVsc2Uge1xuICAgIF9mb3JtX3ZlcnNpb24gPSBkYi5mb3JtX3ZlcnNpb25zLmZpbmRPbmUoe1xuICAgICAgX2lkOiBmb3JtX3ZlcnNpb24sXG4gICAgICBmb3JtOiBmb3JtXG4gICAgfSk7XG4gIH1cbiAgZmllbGRzID0gKF9mb3JtX3ZlcnNpb24gIT0gbnVsbCA/IF9mb3JtX3ZlcnNpb24uZmllbGRzIDogdm9pZCAwKSB8fCBbXTtcbiAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZikge1xuICAgIHZhciByZWY7XG4gICAgaWYgKGYudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdpZ25vcmUgb3BpbmlvbiBmaWVsZCBpbiB0YWJsZScpO1xuICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgIHJldHVybiBmICE9IG51bGwgPyAocmVmID0gZi5maWVsZHMpICE9IG51bGwgPyByZWYuZm9yRWFjaChmdW5jdGlvbihmMSkge1xuICAgICAgICByZXR1cm4gZmllbGRfZm9ybXVsYXMucHVzaChmMS5mb3JtdWxhKTtcbiAgICAgIH0pIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmllbGRfZm9ybXVsYXMucHVzaChmLmZvcm11bGEpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBfLnNvbWUoZmllbGRfZm9ybXVsYXMsIGZ1bmN0aW9uKGZpZWxkX2Zvcm11bGEpIHtcbiAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKTtcbiAgfSk7XG59O1xuIiwiZGIuaW5zdGFuY2VfdGFza3MgPSBuZXcgTWV0ZW9yLkNvbGxlY3Rpb24oJ2luc3RhbmNlX3Rhc2tzJylcblxuZGIuaW5zdGFuY2VfdGFza3MuX3NpbXBsZVNjaGVtYSA9IG5ldyBTaW1wbGVTY2hlbWFcbiAgICBpbnN0YW5jZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgdHJhY2U6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGlzX2ZpbmlzaGVkOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICB1c2VyOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICB1c2VyX25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGhhbmRsZXI6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGhhbmRsZXJfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcl9vcmdhbml6YXRpb246XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBzdGFydF9kYXRlOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgZHVlX2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBpc19yZWFkOlxuICAgICAgICB0eXBlOiBCb29sZWFuXG4gICAgaXNfZXJyb3I6XG4gICAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICB2YWx1ZXM6XG4gICAgICAgIHR5cGU6IE9iamVjdFxuICAgIGRlYWRsaW5lOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgcmVtaW5kX2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICByZW1pbmRlZF9jb3VudDpcbiAgICAgICAgdHlwZTogTnVtYmVyXG4gICAgcmVhZF9kYXRlOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIG1vZGlmaWVkOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgbW9kaWZpZWRfYnk6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHNpZ25fc2hvdzpcbiAgICAgICAgdHlwZTogQm9vbGVhblxuICAgIGp1ZGdlOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBuZXh0X3N0ZXBzOlxuICAgICAgICB0eXBlOiBBcnJheVxuICAgIFwibmV4dF9zdGVwcy4kXCI6XG4gICAgICAgIHR5cGU6IE9iamVjdFxuICAgIFwibmV4dF9zdGVwcy4kLnN0ZXBcIjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgXCJuZXh0X3N0ZXBzLiQudXNlcnNcIjpcbiAgICAgICAgdHlwZTogW1N0cmluZ11cbiAgICBmaW5pc2hfZGF0ZTpcbiAgICAgICAgdHlwZTogRGF0ZVxuICAgIGNvc3RfdGltZTpcbiAgICAgICAgdHlwZTogTnVtYmVyXG4gICAgc3BhY2U6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGluc3RhbmNlX25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHN1Ym1pdHRlcjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3VibWl0dGVyX25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGFwcGxpY2FudDpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgYXBwbGljYW50X25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGFwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3VibWl0X2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBmbG93OlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBmbG93X25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGZvcm06XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHN0ZXA6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHN0ZXBfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgY2F0ZWdvcnlfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaW5zdGFuY2Vfc3RhdGU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgZm9yd2FyZF9mcm9tX2luc3RhbmNlOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBrZXl3b3JkczpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaXNfYXJjaGl2ZWQ6XG4gICAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICBjYXRlZ29yeTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4iLCJkYi5hdXRoX3Rva2VucyA9IG5ldyBNZXRlb3IuQ29sbGVjdGlvbignYXV0aF90b2tlbnMnKSIsIm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIilcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlID0ge307XG5cblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluc3RhbmNlX2F0dGFjaG1lbnQgPSBcIlwiXCJcblx0PHRyPlxuXHRcdDx0ZCBjbGFzcz1cImlucy1hdHRhY2gtdmlld1wiPlxuXHRcdFx0PGEgaHJlZj1cInt7aW5zX2F0dGFjaF9kb3dubG9hZF91cmwgX2lkIGFic29sdXRlfX1cIiBjbGFzcz1cImluc19hdHRhY2hfaHJlZlwiIHRhcmdldD1cIl9wYXJlbnRcIiBkYXRhLW5hbWU9XCJ7e3RoaXMubmFtZX19XCIgZGF0YS10eXBlPVwie3t0aGlzLm9yaWdpbmFsLnR5cGV9fVwiIGRhdGEtaWQ9XCJ7e19pZH19XCI+e3t0aGlzLm5hbWV9fTwvYT5cblx0XHQ8L3RkPlxuXHQ8L3RyPlxuXCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5hZlNlbGVjdFVzZXJSZWFkID0gXCJcIlwiXG5cdDxkaXYgY2xhc3M9J3NlbGVjdFVzZXIgZm9ybS1jb250cm9sIGluc19hcHBsaWNhbnQnPnt7dmFsdWV9fTwvZGl2PlxuXCJcIlwiXG5cblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmRm9ybUdyb3VwUmVhZCA9IFwiXCJcIlxuXHQ8ZGl2IGNsYXNzPSdmb3JtLWdyb3VwJz5cblx0XHR7eyN3aXRoIGdldEZpZWxkIHRoaXMubmFtZX19XG5cdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VjdGlvbid9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9J3NlY3Rpb24gY2FsbG91dCBjYWxsb3V0LWRlZmF1bHQnPlxuXHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Zl9sYWJlbCB0aGlzfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0PHA+e3t7ZGVzY3JpcHRpb259fX08L3A+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndGFibGUnfX1cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdCBzdGVlZG9zLXRhYmxlXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzowcHg7XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz0nY29udHJvbC1sYWJlbCc+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3tkZXNjcmlwdGlvbn19fTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJyZWFkb25seS10YWJsZVwiIHN0eWxlPVwicGFkZGluZzowcHg7b3ZlcmZsb3cteDphdXRvO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHR5cGU9J3RhYmxlJyBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWNvbmRlbnNlZCBhdXRvZm9ybS10YWJsZVwiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBweDsnIHt7dGhpcy5hdHRzfX0gaWQ9XCJ7e3RoaXMuY29kZX19VGFibGVcIiBuYW1lPVwie3t0aGlzLmNvZGV9fVwiIGRhdGEtc2NoZW1hLWtleT1cInt7dGhpcy5uYW1lfX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoZWFkIGlkPVwie3t0aGlzLm5hbWV9fVRoZWFkXCIgbmFtZT1cInt7dGhpcy5uYW1lfX1UaGVhZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlVGhlYWQgdGhpc319fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RoZWFkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHkgaWQ9XCJ7e3RoaXMubmFtZX19VGJvZHlcIiBuYW1lPVwie3t0aGlzLm5hbWV9fVRib2R5XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3t7Z2V0VGFibGVCb2R5IHRoaXN9fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0e3sjaWYgc2hvd0xhYmVsfX1cblx0XHRcdFx0XHRcdDxsYWJlbD57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XG5cdFx0XHRcdHt7L2lmfX1cblx0XHRcdHt7L2lmfX1cblx0XHR7ey93aXRofX1cblx0PC9kaXY+XG5cIlwiXCJcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmRm9ybUdyb3VwID0gXCJcIlwiXG5cblx0e3sjd2l0aCBnZXRGaWVsZCB0aGlzLm5hbWV9fVxuXHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3NlY3Rpb24nfX1cblx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdzZWN0aW9uIGNhbGxvdXQgY2FsbG91dC1kZWZhdWx0Jz5cblx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2ZfbGFiZWwgdGhpc319PC9sYWJlbD5cblx0XHRcdFx0XHRcdDxwPnt7e2Rlc2NyaXB0aW9ufX19PC9wPlxuXHRcdFx0XHRcdDwvZGl2PlxuICBcdFx0XHRcdDwvZGl2PlxuXHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3RhYmxlJ319XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHQgc3RlZWRvcy10YWJsZVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MHB4O1wiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiID5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9J2NvbnRyb2wtbGFiZWwnPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t7ZGVzY3JpcHRpb259fX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicmVhZG9ubHktdGFibGVcIiBzdHlsZT1cInBhZGRpbmc6MHB4O292ZXJmbG93LXg6YXV0bztcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB0eXBlPSd0YWJsZScgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgYXV0b2Zvcm0tdGFibGVcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTowcHg7JyB7e3RoaXMuYXR0c319IGlkPVwie3t0aGlzLmNvZGV9fVRhYmxlXCIgbmFtZT1cInt7dGhpcy5jb2RlfX1cIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e3RoaXMubmFtZX19XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0aGVhZCBpZD1cInt7dGhpcy5uYW1lfX1UaGVhZFwiIG5hbWU9XCJ7e3RoaXMubmFtZX19VGhlYWRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZVRoZWFkIHRoaXN9fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5IGlkPVwie3t0aGlzLm5hbWV9fVRib2R5XCIgbmFtZT1cInt7dGhpcy5uYW1lfX1UYm9keVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlQm9keSB0aGlzfX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdpbnB1dCd9fVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBkYXRhLXJlcXVpcmVkPVwie3sjaWYgaXNfcmVxdWlyZWR9fXRydWV7ey9pZn19XCI+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0e3sjaWYgaXNfdGV4dGFyZWF9fVxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XG5cdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0e3sjdW5sZXNzIGlzX3RleHRhcmVhfX1cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHR7ey91bmxlc3N9fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdudW1iZXInfX1cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlJ319XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIHRpdGxlPVwie3tnZXRMYWJlbCBjb2RlfX1cIiBuYW1lPVwie3tjb2RlfX1cIiBkYXRhLXR5cGU9XCJkYXRlXCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlVGltZSd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS10eXBlPSdkYXRldGltZScgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdwYXNzd29yZCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgdGl0bGU9XCJ7e2dldExhYmVsIGNvZGV9fVwiIG5hbWU9XCJ7e2NvZGV9fVwiIGRhdGEtc2NoZW1hLWtleT1cInt7Z2V0TGFiZWwgY29kZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VsZWN0J319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzZWxlY3QgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNlYWNoIG9wdGlvbnMgdGhpc319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cInt7dmFsdWV9fVwiPnt7bGFiZWx9fTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc2VsZWN0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdyYWRpbyd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWYtcmFkaW8tZ3JvdXBcIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cbiAgICAgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwicmFkaW8taW5saW5lIGZpeC1pbmRlbnRcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJ7e3ZhbHVlfX1cIiBuYW1lPVwie3suLi9jb2RlfX1cIiBjbGFzcz1cInJhZGlvLWlubGluZSBmaXgtaW5kZW50XCI+IHt7bGFiZWx9fTwvbGFiZWw+XG4gICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cbiAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnbXVsdGlTZWxlY3QnfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFmLWNoZWNrYm94LWdyb3VwXCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwie3t2YWx1ZX19XCIgbmFtZT1cInt7Li4vY29kZX19XCIgY2xhc3M9XCJjaGVja2JveC1pbmxpbmUgZml4LWluZGVudFwiPiB7e2xhYmVsfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3VybCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInVybFwiIHRpdGxlPVwie3tnZXRMYWJlbCBjb2RlfX1cIiBuYW1lPVwie3tjb2RlfX1cIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ2VtYWlsJ319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiZW1haWxcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdjaGVja2JveCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIG5hbWU9XCJ7e2NvZGV9fVwiIGNsYXNzPVwiY2hlY2tib3gtaW5saW5lIGZpeC1pbmRlbnRcIj48L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0e3svaWZ9fVxuXHRcdHt7L3dpdGh9fVxuXCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUgPSAodGVtcGFsdGVOYW1lLCBzdGVlZG9zRGF0YSkgLT5cblx0dGVtcGxhdGUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGVbdGVtcGFsdGVOYW1lXVxuXG5cdHRlbXBsYXRlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0dGVtcGxhdGVSZW5kZXJGdW5jdGlvbiA9IGV2YWwodGVtcGxhdGVDb21waWxlZCk7XG5cblx0VGVtcGxhdGVbdGVtcGFsdGVOYW1lXSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZSh0ZW1wYWx0ZU5hbWUsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb24pO1xuXHRUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGVbdGVtcGFsdGVOYW1lXS5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZUluc3RhbmNlU2lnblRleHQgPSAoc3RlZWRvc0RhdGEpLT5cblx0aW5zdGFuY2VTaWduVGV4dEh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS9pbnN0YW5jZV9zaWduX3RleHQuaHRtbCcpXG5cblx0aW5zdGFuY2VTaWduVGV4dENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVNpZ25UZXh0SHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdGluc3RhbmNlU2lnblRleHRSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkKTtcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW5zdGFuY2VTaWduVGV4dFwiLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24pO1xuXHRUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzIEluc3RhbmNlU2lnblRleHQuaGVscGVyc1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduID0gKHN0ZWVkb3NEYXRhKSAtPlxuXHRpbWFnZVNpZ25IdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW1hZ2Vfc2lnbi5odG1sJylcblx0aW1hZ2VTaWduQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKGltYWdlU2lnbkh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblx0aW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24gPSBldmFsKGltYWdlU2lnbkNvbXBpbGVkKTtcblx0VGVtcGxhdGUuaW1hZ2VTaWduID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW1hZ2VTaWduXCIsIGltYWdlU2lnblJlbmRlckZ1bmN0aW9uKTtcblx0VGVtcGxhdGUuaW1hZ2VTaWduLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW1hZ2VTaWduLmhlbHBlcnMgSW1hZ2VTaWduLmhlbHBlcnNcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZVRyYWNlc0hhbmxkZXIgPSAoc3RlZWRvc0RhdGEpIC0+XG5cdHRyYWNlc0hhbmxkZXJIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX2hhbmRsZXIuaHRtbCcpXG5cdHRyYWNlc0hhbmxkZXJDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodHJhY2VzSGFubGRlckh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblx0dHJhY2VzSGFubGRlclJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZXNIYW5sZGVyQ29tcGlsZWQpO1xuXHRUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlciA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImluc3RhbmNlX3RyYWNlc19oYW5kbGVyXCIsIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbik7XG5cdFRlbXBsYXRlLmluc3RhbmNlX3RyYWNlc19oYW5kbGVyLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIuaGVscGVycyBUcmFjZXNIYW5kbGVyLmhlbHBlcnNcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5pdCA9IChzdGVlZG9zRGF0YSkgLT5cblx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmU2VsZWN0VXNlclJlYWRcIiwgc3RlZWRvc0RhdGEpO1xuXG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZkZvcm1Hcm91cFwiLCBzdGVlZG9zRGF0YSk7XG5cblx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmRm9ybUdyb3VwUmVhZFwiLCBzdGVlZG9zRGF0YSk7XG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJpbnN0YW5jZV9hdHRhY2htZW50XCIsIHthYnNvbHV0ZTogc3RlZWRvc0RhdGEuYWJzb2x1dGV9KTtcblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduKHN0ZWVkb3NEYXRhKVxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVUcmFjZXNIYW5sZGVyKHN0ZWVkb3NEYXRhKTtcblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dChzdGVlZG9zRGF0YSlcblxuZ2V0TGlua1RleHQgPSAoaXRlbSwgbGFiZWwsIGRldGFpbF91cmwpLT5cblx0aWYgZGV0YWlsX3VybFxuXHRcdGRldGFpbF91cmwgPSBkZXRhaWxfdXJsLnJlcGxhY2UoXCJ7X2lkfVwiLCBpdGVtLl9pZClcblx0XHRpZiAhL15odHRwKHM/KTpcXC9cXC8vLnRlc3QoZGV0YWlsX3VybClcblx0XHRcdGRldGFpbF91cmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKGRldGFpbF91cmwpXG5cdFx0cmV0dXJuICc8YSBocmVmPVwiJytkZXRhaWxfdXJsKydcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nK2xhYmVsKyc8L2E+Jztcblx0ZWxzZVxuXHRcdHJldHVybiBsYWJlbFxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgPSAodmFsdWUsIGZpZWxkLCBsb2NhbGUsIHV0Y09mZnNldCkgLT5cblx0aWYgIXZhbHVlICYmIHZhbHVlICE9IGZhbHNlXG5cdFx0cmV0dXJuICcnXG5cdGlmIFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xXG5cdFx0ZmllbGRPcHRpb25zID0gZmllbGQub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAgKG4pLT5cblx0XHRcdGl0ZW1TcGxpdHMgPSBuLnNwbGl0KFwiOlwiKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG5cdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cblx0XHRcdH1cblx0c3dpdGNoIGZpZWxkLnR5cGVcblx0XHR3aGVuICdlbWFpbCdcblx0XHRcdHZhbHVlID0gaWYgdmFsdWUgdGhlbiAnPGEgaHJlZj1cXCdtYWlsdG86JyArIHZhbHVlICsgJ1xcJz4nICsgdmFsdWUgKyAnPC9hPicgZWxzZSAnJ1xuXHRcdHdoZW4gJ3VybCdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmIHZhbHVlLmluZGV4T2YoXCJodHRwXCIpID09IDBcblx0XHRcdFx0XHR0cnlcblx0XHRcdFx0XHRcdHZhbHVlID0gXCI8YSBocmVmPSdcIiArIGVuY29kZVVSSSh2YWx1ZSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgdmFsdWUgKyBcIjwvYT5cIjtcblx0XHRcdFx0XHRjYXRjaCBlXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR2YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9ICcnXG5cdFx0d2hlbiAnZ3JvdXAnXG5cdFx0XHRpZiBmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlPy5nZXRQcm9wZXJ0eShcImZ1bGxuYW1lXCIpLnRvU3RyaW5nKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZnVsbG5hbWVcblx0XHR3aGVuICd1c2VyJ1xuXHRcdFx0aWYgZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8ubmFtZVxuXHRcdHdoZW4gJ3Bhc3N3b3JkJ1xuXHRcdFx0dmFsdWUgPSAnKioqKioqJ1xuXHRcdHdoZW4gJ2NoZWNrYm94J1xuXHRcdFx0aWYgdmFsdWUgJiYgdmFsdWUgIT0gJ2ZhbHNlJ1xuXHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiLCB7fSwgbG9jYWxlKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X25vXCIsIHt9LCBsb2NhbGUpXG5cdFx0d2hlbiAnZGF0ZVRpbWUnXG5cdFx0XHRpZiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT0gMTZcblx0XHRcdFx0dCA9IHZhbHVlLnNwbGl0KFwiVFwiKVxuXHRcdFx0XHR0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuXHRcdFx0XHR0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuXG5cdFx0XHRcdHllYXIgPSB0MFswXTtcblx0XHRcdFx0bW9udGggPSB0MFsxXTtcblx0XHRcdFx0ZGF0ZSA9IHQwWzJdO1xuXHRcdFx0XHRob3VycyA9IHQxWzBdO1xuXHRcdFx0XHRzZWNvbmRzID0gdDFbMV07XG5cblx0XHRcdFx0dmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuXG5cdFx0XHR2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlKHZhbHVlLCB1dGNPZmZzZXQpO1xuXHRcdHdoZW4gJ2lucHV0J1xuXHRcdFx0aWYgZmllbGQuaXNfdGV4dGFyZWFcblx0XHRcdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdFx0bWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpXG5cdFx0XHRcdHZhbHVlID0gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKHZhbHVlKSlcblx0XHR3aGVuICdzZWxlY3QnXG5cdFx0XHRzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKChpdGVtKSAtPiByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZSlcblx0XHRcdGlmIHNlbGVjdGVkT3B0aW9uXG5cdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWxcblx0XHR3aGVuICdyYWRpbydcblx0XHRcdHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoKGl0ZW0pIC0+IHJldHVybiBpdGVtLnZhbHVlID09IHZhbHVlKVxuXHRcdFx0aWYgc2VsZWN0ZWRPcHRpb25cblx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZE9wdGlvbi5sYWJlbFxuXHRcdHdoZW4gJ211bHRpU2VsZWN0J1xuXHRcdFx0c3BsaXRlZFZhbHVlcyA9IHZhbHVlLnNwbGl0KFwiLFwiKVxuXHRcdFx0c2VsZWN0ZWRPcHRpb25zID0gZmllbGRPcHRpb25zLmZpbHRlcigoaXRlbSkgLT4gcmV0dXJuIHNwbGl0ZWRWYWx1ZXMuaW5kZXhPZihpdGVtLnZhbHVlKSA+IC0xKVxuXHRcdFx0aWYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFxuXHRcdFx0XHR2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoKGl0ZW0pIC0+IHJldHVybiBpdGVtLmxhYmVsKS5qb2luKFwiLFwiKVxuXHRcdHdoZW4gJ251bWJlcidcblx0XHRcdGlmIHZhbHVlIG9yIHZhbHVlID09IDBcblx0XHRcdFx0aWYgZmllbGQuaXNfcGVyY2VudFxuXHRcdFx0XHRcdHZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcgdmFsdWUsIGZpZWxkLmRpZ2l0c1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dmFsdWUgPSBTdGVlZG9zLm51bWJlclRvU3RyaW5nIHZhbHVlLCBmaWVsZC5kaWdpdHNcblx0XHR3aGVuICdvZGF0YSdcblx0XHRcdGRldGFpbF91cmwgPSBmaWVsZC5kZXRhaWxfdXJsXG5cdFx0XHRpZiBmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9IF8ubWFwIHZhbHVlLCAoaXRlbSktPlxuXHRcdFx0XHRcdHJldHVybiBnZXRMaW5rVGV4dChpdGVtLCBpdGVtWydAbGFiZWwnXSwgZGV0YWlsX3VybClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSBnZXRMaW5rVGV4dCh2YWx1ZSwgdmFsdWVbJ0BsYWJlbCddLCBkZXRhaWxfdXJsKVxuXHRcdHdoZW4gJ2ltYWdlJ1xuXHRcdFx0aWYgZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0dmFsdWUgPSBfLm1hcCB2YWx1ZSwgKGl0ZW0pLT5cblx0XHRcdFx0XHRyZXR1cm4gJzxkaXYgY2xhc3M9XCJhbnRkLUltYWdlQ29udHJvbC1pdGVtIGlzLXVwbG9hZGVkXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZSBhbnRkLUltYWdlLS10aHVtYiBhbnRkLUltYWdlQ29udHJvbC1pbWFnZVwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYldyYXBcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYlwiPjxpbWcgY2xhc3M9XCJhbnRkLUltYWdlLWltYWdlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiL2FwaS9maWxlcy9pbWFnZXMvJytpdGVtKydcIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4nXG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSAnPGRpdiBjbGFzcz1cImFudGQtSW1hZ2VDb250cm9sLWl0ZW0gaXMtdXBsb2FkZWRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlIGFudGQtSW1hZ2UtLXRodW1iIGFudGQtSW1hZ2VDb250cm9sLWltYWdlXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iV3JhcFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iXCI+PGltZyBjbGFzcz1cImFudGQtSW1hZ2UtaW1hZ2VcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIvYXBpL2ZpbGVzL2ltYWdlcy8nK3ZhbHVlKydcIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4nXG5cdFx0d2hlbiAnZmlsZSdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmICFmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHRcdHZhbHVlID0gW3ZhbHVlXVxuXHRcdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0XHRyZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxL2Nmc19maWxlc19maWxlcmVjb3JkP2ZpbHRlcnM9W1tcIl9pZFwiLFwiaW5cIiwgJytKU09OLnN0cmluZ2lmeSh2YWx1ZSkrJ11dJmZpZWxkcz1bXCJfaWRcIixcIm9yaWdpbmFsXCJdJywge2FzeW5jOmZhbHNlfSlcblx0XHRcdFx0XHRyZWNvcmRzID0gcmVzLmRhdGEuaXRlbXNcblx0XHRcdFx0ZWxzZSBpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0XHRyZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKFwiY2ZzX2ZpbGVzX2ZpbGVyZWNvcmRcIiwgeyBmaWx0ZXJzOiBbW1wiX2lkXCIsICdpbicsIHZhbHVlXV0sIGZpZWxkczogW1wiX2lkXCIsIFwib3JpZ2luYWxcIl0gfSk7XG5cblx0XHRcdFx0dmFsdWUgPSBfLm1hcCByZWNvcmRzLCAoaXRlbSktPlxuXHRcdFx0XHRcdHJldHVybiBcIjxhIGhyZWY9JyN7U3RlZWRvcy5hYnNvbHV0ZVVybCgnL2FwaS9maWxlcy9maWxlcy8nK2l0ZW0uX2lkKyc/ZG93bmxvYWQ9dHJ1ZScpfScgdGFyZ2V0PSdfYmxhbmsnIHN0eWxlPSdkaXNwbGF5OiBibG9jazsnPiN7aXRlbS5vcmlnaW5hbC5uYW1lfTwvYT5cIlxuXG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcblx0XHR3aGVuICdsb29rdXAnXG5cdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRpZiAhZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0XHR2YWx1ZSA9IFt2YWx1ZV1cblx0XHRcdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRcdFx0dWlTY2hlbWEgPSBDcmVhdG9yLmdldE9iamVjdChmaWVsZC5yZWZlcmVuY2VfdG8pXG5cdFx0XHRcdFx0bmFtZUZpZWxkID0gdWlTY2hlbWE/Lk5BTUVfRklFTERfS0VZIHx8ICduYW1lJ1xuXHRcdFx0XHRcdHJlcyA9IFN0ZWVkb3MuYXV0aFJlcXVlc3QoJy9hcGkvdjEvJytmaWVsZC5yZWZlcmVuY2VfdG8rJz9maWx0ZXJzPVtbXCInKyhmaWVsZC5yZWZlcmVuY2VfdG9fZmllbGQgfHwgJ19pZCcpKydcIixcImluXCIsICcrSlNPTi5zdHJpbmdpZnkodmFsdWUpKyddXSZmaWVsZHM9W1wiX2lkXCIsXCInK25hbWVGaWVsZCsnXCJdJywge2FzeW5jOmZhbHNlfSlcblx0XHRcdFx0XHRyZWNvcmRzID0gcmVzLmRhdGEuaXRlbXNcblx0XHRcdFx0ZWxzZSBpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0XHRuYW1lRmllbGQgPSBTdGVlZG9zLmdldE9iamVjdE5hbWVGaWVsZEtleShmaWVsZC5yZWZlcmVuY2VfdG8pO1xuXHRcdFx0XHRcdHJlY29yZHMgPSBTdGVlZG9zLm9iamVjdEZpbmQoZmllbGQucmVmZXJlbmNlX3RvLCB7IGZpbHRlcnM6IFtbKGZpZWxkLnJlZmVyZW5jZV90b19maWVsZCB8fCAnX2lkJyksICdpbicsIHZhbHVlXV0sIGZpZWxkczogW1wiX2lkXCIsIG5hbWVGaWVsZF0gfSk7XG5cdFx0XHRcdHZhbHVlID0gXy5tYXAgcmVjb3JkcywgKGl0ZW0pLT5cblx0XHRcdFx0XHRyZXR1cm4gXCI8YSBocmVmPScje1N0ZWVkb3MuYWJzb2x1dGVVcmwoJy9hcHAvLS8nK2ZpZWxkLnJlZmVyZW5jZV90bysnL3ZpZXcvJytpdGVtLl9pZCl9JyB0YXJnZXQ9J19ibGFuayc+I3tpdGVtW25hbWVGaWVsZF19PC9hPlwiXG5cblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5qb2luKFwiXCIpO1x0XG5cdFx0d2hlbiAnaHRtbCdcblx0XHRcdHZhbHVlID0gaWYgdmFsdWUgdGhlbiBcIjxkaXYgY2xhc3M9XFxcInN0ZWVkb3MtaHRtbFxcXCI+I3t2YWx1ZX08L2Rpdj5cIiBlbHNlICcnXG5cblx0cmV0dXJuIHZhbHVlO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwgPSAoZmllbGRzLCBjb2RlKSAtPlxuXHRmaWVsZCA9IGZpZWxkcy5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCBjb2RlKVxuXHRpZiBmaWVsZFxuXHRcdGlmIGZpZWxkLm5hbWVcblx0XHRcdHJldHVybiBmaWVsZC5uYW1lXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGZpZWxkLmNvZGVcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbiA9IChpbnN0YW5jZSktPlxuXHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnN0YW5jZS5mb3JtKTtcblxuXHRmb3JtX3ZlcnNpb24gPSB7fVxuXG5cdGZvcm1fZmllbGRzID0gW107XG5cblx0aWYgZm9ybS5jdXJyZW50Ll9pZCA9PSBpbnN0YW5jZS5mb3JtX3ZlcnNpb25cblx0XHRmb3JtX3ZlcnNpb24gPSBmb3JtLmN1cnJlbnRcblx0ZWxzZVxuXHRcdGZvcm1fdmVyc2lvbiA9IF8ud2hlcmUoZm9ybS5oaXN0b3J5cywge19pZDogaW5zdGFuY2UuZm9ybV92ZXJzaW9ufSlbMF1cblxuXHRmb3JtX3ZlcnNpb24uZmllbGRzLmZvckVhY2ggKGZpZWxkKS0+XG5cdFx0aWYgZmllbGQudHlwZSA9PSAnc2VjdGlvbidcblx0XHRcdGZvcm1fZmllbGRzLnB1c2goZmllbGQpO1xuXHRcdFx0aWYgZmllbGQuZmllbGRzXG5cdFx0XHRcdGZpZWxkLmZpZWxkcy5mb3JFYWNoIChmKSAtPlxuXHRcdFx0XHRcdGZvcm1fZmllbGRzLnB1c2goZik7XG5cdFx0ZWxzZSBpZiBmaWVsZC50eXBlID09ICd0YWJsZSdcblx0XHRcdGZpZWxkWydzZmllbGRzJ10gPSBmaWVsZFsnZmllbGRzJ11cblx0XHRcdGRlbGV0ZSBmaWVsZFsnZmllbGRzJ11cblx0XHRcdGZvcm1fZmllbGRzLnB1c2goZmllbGQpO1xuXHRcdGVsc2Vcblx0XHRcdGZvcm1fZmllbGRzLnB1c2goZmllbGQpO1xuXG5cdGZvcm1fdmVyc2lvbi5maWVsZHMgPSBmb3JtX2ZpZWxkcztcblxuXHRyZXR1cm4gZm9ybV92ZXJzaW9uO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0Rmxvd1ZlcnNpb24gPSAoaW5zdGFuY2UpLT5cblx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoaW5zdGFuY2UuZmxvdyk7XG5cdGZsb3dfdmVyc2lvbiA9IHt9XG5cdGlmIGZsb3cuY3VycmVudC5faWQgPT0gaW5zdGFuY2UuZmxvd192ZXJzaW9uXG5cdFx0Zmxvd192ZXJzaW9uID0gZmxvdy5jdXJyZW50XG5cdGVsc2Vcblx0XHRmbG93X3ZlcnNpb24gPSBfLndoZXJlKGZsb3cuaGlzdG9yeXMsIHtfaWQ6IGluc3RhbmNlLmZsb3dfdmVyc2lvbn0pWzBdXG5cblx0cmV0dXJuIGZsb3dfdmVyc2lvbjtcblxuXG5fZ2V0Vmlld0h0bWwgPSAocGF0aCkgLT5cblx0dmlld0h0bWwgPSBBc3NldHMuZ2V0VGV4dChwYXRoKVxuXG5cdGlmIHZpZXdIdG1sXG5cdFx0dmlld0h0bWwgPSB2aWV3SHRtbC5yZXBsYWNlKC88dGVtcGxhdGVbXFx3XFxzXFxcIlxcPSddKz4vaSxcIlwiKS5yZXBsYWNlKC88XFwvdGVtcGxhdGU+L2ksXCJcIilcblxuXHRyZXR1cm4gdmlld0h0bWw7XG5cbl9nZXRMb2NhbGUgPSAodXNlciktPlxuXHRpZiB1c2VyPy5sb2NhbGU/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ3poLWNuJ1xuXHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRlbHNlIGlmIHVzZXI/LmxvY2FsZT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnZW4tdXMnXG5cdFx0bG9jYWxlID0gXCJlblwiXG5cdGVsc2Vcblx0XHRsb2NhbGUgPSBcInpoLUNOXCJcblx0cmV0dXJuIGxvY2FsZVxuXG5cbl9nZXRSZXF1aXJlZEZpZWxkcyA9IChmaWVsZHMsIHJldiktPlxuXHRpZiAhcmV2XG5cdFx0cmV2ID0gW107XG5cblx0ZmllbGRzLmZvckVhY2ggKGZpZWxkKS0+XG5cdFx0aWYgZmllbGQudHlwZSA9PSAnc2VjdGlvbidcblx0XHRcdF9nZXRSZXF1aXJlZEZpZWxkcyhmaWVsZC5maWVsZHMsIHJldilcblx0XHRlbHNlIGlmIGZpZWxkLnR5cGUgPT0gJ3RhYmxlJ1xuXG5cdFx0ZWxzZVxuXHRcdFx0aWYgZmllbGQuaXNfcmVxdWlyZWRcblx0XHRcdFx0cmV2LnB1c2ggZmllbGQuY29kZVxuXHRyZXR1cm4gcmV2O1xuXG5fZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMgPSAoZmllbGRzLCBzdGVwcyktPlxuXHRzdGFydFN0ZXAgPSBzdGVwcy5maW5kUHJvcGVydHlCeVBLKFwic3RlcF90eXBlXCIsXCJzdGFydFwiKVxuXG5cdGVkaXRhYmxlQ29kZSA9IFtdXG5cblx0Xy5rZXlzKHN0YXJ0U3RlcC5wZXJtaXNzaW9ucykuZm9yRWFjaCAoa2V5KS0+XG5cdFx0aWYgc3RhcnRTdGVwLnBlcm1pc3Npb25zW2tleV0gPT0gJ2VkaXRhYmxlJ1xuXHRcdFx0ZWRpdGFibGVDb2RlLnB1c2gga2V5XG5cblx0cmV0dXJuIGVkaXRhYmxlQ29kZVxuXG5fZ2V0U3RhcnRTdGVwUmVxdWlyZWRGaWVsZHMgPSAoZmllbGRzLCBzdGVwcyktPlxuXHRyZXF1aXJlZEZpZWxkcyA9IF9nZXRSZXF1aXJlZEZpZWxkcyhmaWVsZHMpXG5cblx0ZWRpdGFibGVDb2RlID0gX2dldFN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzKGZpZWxkcywgc3RlcHMpXG5cblx0cmV0dXJuIF8uaW50ZXJzZWN0aW9uKHJlcXVpcmVkRmllbGRzLCBlZGl0YWJsZUNvZGUpXG5cbl9nZXRUZW1wbGF0ZURhdGEgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKS0+XG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdGZvcm1fdmVyc2lvbiA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKGluc3RhbmNlKVxuXHRlbHNlXG5cdFx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oaW5zdGFuY2UpXG5cblx0bG9jYWxlID0gX2dldExvY2FsZSh1c2VyKVxuXG5cdHN0ZWVkb3NEYXRhID0ge31cblxuXHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRzdGVlZG9zRGF0YSA9IF8uY2xvbmUoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpKVxuXHRcdHN0ZWVkb3NEYXRhLmluc25hbWUgPSBpbnN0YW5jZS5uYW1lXG5cdFx0c3RlZWRvc0RhdGEuaW5zX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGVcblx0XHRzdGVlZG9zRGF0YS5pbnNfZmluYWxfZGVjaXNpb24gPSBpbnN0YW5jZS5pbnNfZmluYWxfZGVjaXNpb25cblx0XHRzdGVlZG9zRGF0YS5pbnNfY29kZSA9IGluc3RhbmNlLmNvZGVcblx0XHRzdGVlZG9zRGF0YS5pbnNfaXNfYXJjaGl2ZWQgPSBpbnN0YW5jZS5pc19hcmNoaXZlZFxuXHRcdHN0ZWVkb3NEYXRhLmluc19pc19kZWxldGVkID0gaW5zdGFuY2UuaW5zX2lzX2RlbGV0ZWRcblx0XHRzdGVlZG9zRGF0YS5hcHBsaWNhbnRfbmFtZSA9IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lXG5cdFx0c3RlZWRvc0RhdGEuYXBwbGljYW50Q29udGV4dCA9IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lXG5cblx0c3RlZWRvc0RhdGEuaW5zdGFuY2UgPSBpbnN0YW5jZVxuXHRzdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb24gPSBmb3JtX3ZlcnNpb25cblx0c3RlZWRvc0RhdGEubG9jYWxlID0gbG9jYWxlXG5cdHN0ZWVkb3NEYXRhLnV0Y09mZnNldCA9IHVzZXIudXRjT2Zmc2V0XG5cdHN0ZWVkb3NEYXRhLnNwYWNlID0gaW5zdGFuY2Uuc3BhY2Vcblx0c3RlZWRvc0RhdGEuc2Vzc2lvblVzZXJJZCA9IHVzZXIuX2lkXG5cblx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0aWYgb3B0aW9ucz8uZWRpdGFibGVcblx0XHRcdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlLmZvcm19KVxuXG5cdFx0XHRmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7X2lkOiBpbnN0YW5jZS5mbG93fSlcblxuXHRcdFx0c3RlZWRvc0RhdGEuc3RhcnRTdGVwRWRpdGFibGVGaWVsZHMgPSBfZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMoZm9ybS5jdXJyZW50LmZpZWxkcywgZmxvdy5jdXJyZW50LnN0ZXBzKTtcblxuXHRyZXR1cm4gc3RlZWRvc0RhdGE7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlID0gKGRhdGUsIHV0Y09mZnNldCktPlxuXHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRwYXNzaW5nID0gZmFsc2U7XG5cdGVsc2Vcblx0XHRwYXNzaW5nID0gdHJ1ZTtcblxuXHRpZiAhdXRjT2Zmc2V0ICYmIHV0Y09mZnNldCAhPTBcblx0XHR1dGNPZmZzZXQgPSA4XG5cblx0cmV0dXJuIG1vbWVudChkYXRlKS51dGNPZmZzZXQodXRjT2Zmc2V0LCBwYXNzaW5nKS5mb3JtYXQoXCJZWVlZLU1NLUREIEhIOm1tXCIpO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpXG5cblx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSBmYWxzZTtcblxuXHRpZiBvcHRpb25zPy5hYnNvbHV0ZVxuXHRcdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcblxuXHRpbnN0YW5jZVRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlLCBvcHRpb25zPy50ZW1wbGF0ZU5hbWUpO1xuXG5cdGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmU2VsZWN0VXNlci9nLFwiYWZTZWxlY3RVc2VyUmVhZFwiKVxuXG5cdGlmICFvcHRpb25zPy5lZGl0YWJsZVxuXHRcdGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmRm9ybUdyb3VwL2csXCJhZkZvcm1Hcm91cFJlYWRcIilcblxuXHRpbnN0YW5jZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0aW5zdGFuY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VDb21waWxlZCk7XG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImluc3RhbmNlX3JlYWRvbmx5X3ZpZXdcIiwgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldy5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhXG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuXHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5pdChzdGVlZG9zRGF0YSk7XG5cblx0Ym9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcsIHN0ZWVkb3NEYXRhKVxuXG5cdHJldHVybiBcIlwiXCJcblx0XHQ8ZGl2IGlkPSdpbnN0YW5jZWZvcm0nID5cblx0XHRcdCN7Ym9keX1cblx0XHQ8L2Rpdj5cblx0XCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRUcmFjZXNWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cblx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG5cdGlmIGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT0gXCJ0YWJsZVwiIHx8IG9wdGlvbnM/LnRlbXBsYXRlTmFtZSA9PSBcInRhYmxlXCJcblx0XHR0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX3RhYmxlLmh0bWwnKVxuXHRlbHNlXG5cdFx0dHJhY2VzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3RyYWNlcy5odG1sJylcblxuXHR0cmFjZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0cmFjZXNIdG1sLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0dHJhY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwodHJhY2VDb21waWxlZCk7XG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInRyYWNlX3JlYWRvbmx5X3ZpZXdcIiwgdHJhY2VSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhXG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzIFRyYWNlc1RlbXBsYXRlLmhlbHBlcnNcblxuXHRib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldywgaW5zdGFuY2UudHJhY2VzKVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlKS0+XG5cblx0c3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSlcblxuXHRhdHRhY2htZW50SHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL2luc3RhbmNlX2F0dGFjaG1lbnRzLmh0bWwnKVxuXG5cdGF0dGFjaG1lbnRDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoYXR0YWNobWVudEh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblxuXHRhdHRhY2htZW50UmVuZGVyRnVuY3Rpb24gPSBldmFsKGF0dGFjaG1lbnRDb21waWxlZCk7XG5cblx0VGVtcGxhdGUuYXR0YWNobWVudHNfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXdcIiwgYXR0YWNobWVudFJlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblxuXHRUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LmhlbHBlcnMgSW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVyc1xuXG5cdGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3KVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZEluc3RhbmNlc1ZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKS0+XG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cblx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSBmYWxzZTtcblxuXHRpZiBvcHRpb25zPy5hYnNvbHV0ZVxuXHRcdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcblxuXHRyZWxhdGVkSW5zdGFuY2VzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3JlbGF0ZWRfaW5zdGFuY2VzLmh0bWwnKVxuXG5cdHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUocmVsYXRlZEluc3RhbmNlc0h0bWwsIHtpc0JvZHk6IHRydWV9KTtcblxuXHRyZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCk7XG5cblx0VGVtcGxhdGUucmVsYXRlZF9pbnN0YW5jZXNfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXdcIiwgcmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblxuXHRUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LmhlbHBlcnMgUmVsYXRlZEluc3RhbmNlcy5oZWxwZXJzXG5cblx0Ym9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcsIHN0ZWVkb3NEYXRhKVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXHRzdGVlZG9zRGF0YSA9IF9nZXRUZW1wbGF0ZURhdGEodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXG5cdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG5cblx0aWYgb3B0aW9ucz8uYWJzb2x1dGVcblx0XHRzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IHRydWU7XG5cblx0cmVsYXRlZFJlY29yZHNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvcmVsYXRlZF9yZWNvcmRzLmh0bWwnKVxuXG5cdHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRSZWNvcmRzSHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdHJlbGF0ZWRSZWNvcmRzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQpO1xuXG5cdFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwicmVsYXRlZF9yZWNvcmRzX3ZpZXdcIiwgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUucmVsYXRlZF9yZWNvcmRzX3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YVxuXG5cdFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LmhlbHBlcnMgUmVsYXRlZFJlY29yZHMuaGVscGVyc1xuXG5cdGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX3JlY29yZHNfdmlldywgc3RlZWRvc0RhdGEpXG5cblx0cmV0dXJuIGJvZHk7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQgPSAoaW5zdGFuY2UpLT5cblx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbilcblxuXHRmb3JtX3NjcmlwdCA9IGZvcm1fdmVyc2lvbi5mb3JtX3NjcmlwdDtcblxuXHRpZiBmb3JtX3NjcmlwdCAmJiBmb3JtX3NjcmlwdC5yZXBsYWNlKC9cXG4vZyxcIlwiKS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5sZW5ndGggPiAwXG5cdFx0Zm9ybV9zY3JpcHQgPSBcIkNvcmVGb3JtID0ge307Q29yZUZvcm0uaW5zdGFuY2Vmb3JtID0ge307XCIgKyBmb3JtX3NjcmlwdFxuXHRcdGZvcm1fc2NyaXB0ICs9IFwiO2lmKENvcmVGb3JtLmZvcm1fT25Mb2FkKXt3aW5kb3cub25sb2FkID0gQ29yZUZvcm0uZm9ybV9PbkxvYWQoKTt9XCJcblx0ZWxzZVxuXHRcdGZvcm1fc2NyaXB0ID0gXCJcIlxuXG5cblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCA9ICh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpLT5cblxuXHRib2R5ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlVmlldyh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuXG5cdG9uTG9hZFNjcmlwdCA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQoaW5zdGFuY2UpO1xuXG5cdGNyZWF0b3JTZXJ2aWNlID0gTWV0ZW9yLnNldHRpbmdzLnB1YmxpYy53ZWJzZXJ2aWNlcz8uY3JlYXRvcj8udXJsXG5cdGluc19yZWNvcmRfaWRzID0gaW5zdGFuY2UucmVjb3JkX2lkc1xuXHRsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuXHRvcGVuRmlsZVNjcmlwdCA9IFwiXCJcIlxuXHRcdFx0aWYod2luZG93LmlzTm9kZSAmJiBpc05vZGUoKSl7XG5cdFx0XHRcdGF0dGFjaHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiaW5zX2F0dGFjaF9ocmVmXCIpO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgYXR0YWNocy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0YXR0YWNoID0gYXR0YWNoc1tpXTtcblx0XHRcdFx0XHRhdHRhY2guYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdFx0aWYoaXNJbWFnZSh0aGlzLmRhdGFzZXQudHlwZSkgfHwgaXNIdG1sKHRoaXMuZGF0YXNldC50eXBlKSl7XG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0b3BlbldpbmRvdyhcIi9hcGkvZmlsZXMvaW5zdGFuY2VzL1wiICsgdGhpcy5kYXRhc2V0LmlkKTtcblx0XHRcdFx0XHRcdH1lbHNlIGlmKG53X2NvcmUuY2FuT3BlbkZpbGUodGhpcy5kYXRhc2V0Lm5hbWUpKXtcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRud19jb3JlLm9wZW5GaWxlKHRoaXMuaHJlZiwgdGhpcy5kYXRhc2V0Lm5hbWUpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGZsb3cgPSBcIiN7aW5zdGFuY2UuZmxvd31cIjtcblx0XHRcdHZhciBzcGFjZSA9IFwiI3tpbnN0YW5jZS5zcGFjZX1cIjtcblxuXHRcdFx0ZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpe1xuXHRcdFx0XHRsZXQgcGF0dGVybiA9IFJlZ0V4cChuYW1lICsgXCI9LlteO10qXCIpXG5cdFx0XHRcdGxldCBtYXRjaGVkID0gZG9jdW1lbnQuY29va2llLm1hdGNoKHBhdHRlcm4pXG5cdFx0XHRcdGlmKG1hdGNoZWQpe1xuXHRcdFx0XHRcdGxldCBjb29raWUgPSBtYXRjaGVkWzBdLnNwbGl0KCc9Jylcblx0XHRcdFx0XHRyZXR1cm4gY29va2llWzFdXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHR9XG5cblx0XHRcdHZhciByZWNvcmRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImlucy1yZWxhdGVkLXJlY29yZHNcIik7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0dmFyIHJlY29yZCA9IHJlY29yZHNbaV07XG5cdFx0XHRcdFx0cmVjb3JkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKXtcblx0XHRcdFx0XHRcdHZhciBjcmVhdG9yU2VydmljZSA9IFwiI3tjcmVhdG9yU2VydmljZX1cIlxuXHRcdFx0XHRcdFx0dmFyIGluc19yZWNvcmRfaWRzID0gI3tKU09OLnN0cmluZ2lmeShpbnNfcmVjb3JkX2lkcyl9XG5cdFx0XHRcdFx0XHRpZihjcmVhdG9yU2VydmljZSAmJiBpbnNfcmVjb3JkX2lkcyAmJiBpbnNfcmVjb3JkX2lkcy5sZW5ndGggPiAwKXtcblx0XHRcdFx0XHRcdFx0dmFyIG9iamNldE5hbWUgPSBpbnNfcmVjb3JkX2lkc1swXS5vXG5cdFx0XHRcdFx0XHRcdHZhciBpZCA9IGluc19yZWNvcmRfaWRzWzBdLmlkc1swXVxuXHRcdFx0XHRcdFx0XHR2YXIgdW9iaiA9IHt9O1xuXHRcdFx0XHRcdFx0XHR1b2JqW1wiWC1Vc2VyLUlkXCJdID0gZ2V0Q29va2llKFwiWC1Vc2VyLUlkXCIpO1xuXHRcdFx0XHRcdFx0XHR1b2JqW1wiWC1BdXRoLVRva2VuXCJdID0gZ2V0Q29va2llKFwiWC1BdXRoLVRva2VuXCIpO1xuXHRcdFx0XHRcdFx0XHRyZWRpcmVjdFVybCA9IGNyZWF0b3JTZXJ2aWNlICsgXCJhcHAvLS9cIiArIG9iamNldE5hbWUgKyBcIi92aWV3L1wiICsgaWQgKyBcIj9cIiArICQucGFyYW0odW9iaik7XG5cdFx0XHRcdFx0XHRcdG9wZW5XaW5kb3cocmVkaXJlY3RVcmwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XCJcIlwiO1xuXG5cblx0aWYgIVN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuXHRcdGlmIGZvcm0/Lmluc3RhbmNlX3N0eWxlID09ICd0YWJsZSdcblx0XHRcdGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiXG5cblx0aWYgb3B0aW9ucz8udGVtcGxhdGVOYW1lID09ICd0YWJsZSdcblx0XHRpbnN0YW5jZV9zdHlsZSA9IFwiaW5zdGFuY2UtdGFibGVcIlxuXG5cdGlmIG9wdGlvbnM/Lmluc3RhbmNlX3N0eWxlXG5cdFx0aW5zdGFuY2Vfc3R5bGUgPSBvcHRpb25zLmluc3RhbmNlX3N0eWxlXG5cblx0aWYgIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93VHJhY2UgPT0gdHJ1ZVxuXHRcdHRyYWNlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFRyYWNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXHRlbHNlXG5cdFx0dHJhY2UgPSBcIlwiXG5cblx0aW5zdGFuY2VCb3hTdHlsZSA9IFwiXCI7XG5cblx0aWYgaW5zdGFuY2UgJiYgaW5zdGFuY2UuZmluYWxfZGVjaXNpb25cblx0XHRpZiBpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PSBcImFwcHJvdmVkXCJcblx0XHRcdGluc3RhbmNlQm94U3R5bGUgPSBcImJveC1zdWNjZXNzXCJcblx0XHRlbHNlIGlmIChpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRpbnN0YW5jZUJveFN0eWxlID0gXCJib3gtZGFuZ2VyXCJcblx0aWYgIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPT0gdHJ1ZVxuXHRcdGF0dGFjaG1lbnQgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXHRcdHJlbGF0ZWRfaW5zdGFuY2VzID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFJlbGF0ZWRJbnN0YW5jZXNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblx0XHRyZWxhdGVkX3JlY29yZHMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblx0ZWxzZVxuXHRcdGF0dGFjaG1lbnQgPSBcIlwiXG5cdFx0cmVsYXRlZF9pbnN0YW5jZXMgPSBcIlwiXG5cdFx0cmVsYXRlZF9yZWNvcmRzID0gXCJcIlxuXG5cblx0d2lkdGggPSBcIjk2MHB4XCJcblx0I1x05aaC5p6c57uZdGFibGXnmoRwYXJlbnTorr7nva53aWR0aO+8jOWImeS8muWvvOiHtOmYv+mHjOS6kemCrueuseaYvuekunRhYmxlIOW8guW4uFxuXHRpZiBvcHRpb25zPy53aWR0aFxuXHRcdHdpZHRoID0gXCJcIlxuXG5cdGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJzdGVlZG9zLWNzc1wiKVxuXHRcblx0anFIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid2Vic2l0ZS9saWJzL2pxdWVyeS5taW4uanNcIilcblxuXHRhbGxDc3NMaW5rID0gXCJcIlwiPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGNsYXNzPVwiX19tZXRlb3ItY3NzX19cIiBocmVmPVwiI3tjc3NIcmVmfVwiPlwiXCJcIlxuXG5cdHRyYWNlQ2hlY2sgPSBcIlwiXG5cdGlmICFfLmlzRW1wdHkodHJhY2UpXG5cdFx0dHJhY2VDaGVjayA9IFwiY2hlY2tlZFwiXG5cdGlmIG9wdGlvbnM/LnRhZ2dlciA9PSAnZW1haWwnIHx8IG9wdGlvbnM/LmVkaXRhYmxlXG5cdFx0c2hvd1RyYWNlc0J0biA9IFwiXCJcblx0ZWxzZVxuXHRcdHNob3dUcmFjZXNCdG4gPSBcIlwiXCJcblx0XHRcdDxkaXYgY2xhc3M9XCJuYXZpZ2F0aW9uLWJhciBidG4tZ3JvdXAgbm8tcHJpbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNjAwcHg7IHotaW5kZXg6IDk5OTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInByaW50LXRvb2xcIj5cblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJjYngtbGFiZWxcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjYngtcHJpbnQgY2J4LXByaW50LWF0dGFjaG1lbnRzXCIgaWQ9XCJjYngtcHJpbnQtYXR0YWNobWVudHNcIiBjaGVja2VkPVwiY2hlY2tlZFwiPjxzcGFuPiN7VEFQaTE4bi5fXygnaW5zdGFuY2VfYXR0YWNobWVudCcsIHt9LCBsb2NhbGUpfTwvc3Bhbj48L2xhYmVsPlxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNieC1sYWJlbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImNieC1wcmludCBjYngtcHJpbnQtdHJhY2VzXCIgaWQ9XCJjYngtcHJpbnQtdHJhY2VzXCIgY2hlY2tlZD1cIiN7dHJhY2VDaGVja31cIj48c3Bhbj4je1RBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmFsX2hpc3RvcnknLCB7fSwgbG9jYWxlKX08L3NwYW4+PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdFwiXCJcIlxuXG5cdHNob3dUcmFjZXNTY3JpcHQgPSBcIlwiXCJcblx0XHQkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYngtcHJpbnQtdHJhY2VzJyk7XG5cdFx0XHR2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2luc3RhbmNlLXRyYWNlcycpWzBdO1xuXHRcdFx0aWYgKGIgJiYgYi5jaGVja2VkICYmIHQpe1xuXHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcblx0XHRcdH0gZWxzZSBpZih0KXtcblx0XHRcdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBub25lOydcblx0XHRcdH1cblx0XHRcdGlmKGIpe1xuXHRcdFx0XHRiLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdGlmIChlLnRhcmdldC5jaGVja2VkKXtcblx0XHRcdFx0XHRcdHQuc3R5bGUgPSAnZGlzcGxheTogYmxvY2s7J1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblxuXHRcdFx0dmFyIGF0dGFjaG1lbnRzQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LWF0dGFjaG1lbnRzJyk7XG5cdFx0XHR2YXIgYXR0YWNobWVudHNWaWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0YWNobWVudHMtc2VjdGlvbicpWzBdO1xuXHRcdFx0aWYgKGF0dGFjaG1lbnRzQ2hlY2tib3ggJiYgYXR0YWNobWVudHNDaGVja2JveC5jaGVja2VkICYmIGF0dGFjaG1lbnRzVmlldyl7XG5cdFx0XHRcdGF0dGFjaG1lbnRzVmlldy5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXG5cdFx0XHR9IGVsc2UgaWYoYXR0YWNobWVudHNWaWV3KXtcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0fVxuXHRcdFx0aWYoYXR0YWNobWVudHNDaGVja2JveCl7XG5cdFx0XHRcdGF0dGFjaG1lbnRzQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpe1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XCJcIlwiXG5cblx0aWYgb3B0aW9ucz8uc3R5bGVzXG5cdFx0YWxsQ3NzTGluayA9IFwiXCJcblxuXHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZS5mb3JtfSk7XG5cdGZvcm1EZXNjcmlwdGlvbkh0bWwgPSBcIlwiXG5cdGlmIGZvcm1cblx0XHRmb3JtRGVzY3JpcHRpb24gPSBmb3JtLmRlc2NyaXB0aW9uXG5cdFx0aWYgZm9ybURlc2NyaXB0aW9uXG5cdFx0XHRmb3JtRGVzY3JpcHRpb24gPSBmb3JtRGVzY3JpcHRpb24ucmVwbGFjZSgvXFxuL2csXCI8YnIvPlwiKVxuXHRcdFx0Zm9ybURlc2NyaXB0aW9uSHRtbCA9IFwiXCJcIlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXIgaW5zdGFuY2UtaGVhZGVyXCI+XG5cdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdCN7Zm9ybURlc2NyaXB0aW9ufVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XCJcIlwiXG5cblx0aHRtbCA9IFwiXCJcIlxuXHRcdDwhRE9DVFlQRSBodG1sPlxuXHRcdDxodG1sPlxuXHRcdFx0PGhlYWQ+XG5cdFx0XHRcdDxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIvPlxuXHRcdFx0XHQje2FsbENzc0xpbmt9XG5cdFx0XHRcdDxzY3JpcHQgc3JjPVwiI3tqcUhyZWZ9XCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFx0XHQ8c2NyaXB0IHNyYz1cIi9qcy9ud19jb3JlLmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFx0XHQje29wdGlvbnMucGx1Z2lucyB8fCBcIlwifVxuXG5cdFx0XHRcdDxzdHlsZT5cblx0XHRcdFx0XHQuc3RlZWRvc3tcblx0XHRcdFx0XHRcdHdpZHRoOiAje3dpZHRofTtcblx0XHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRcdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiBhdXRvO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS1uYW1le1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmJveC10b29sc3tcblx0XHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5ib3guY29sbGFwc2VkLWJveCAuYm94LWJvZHksLmJveC5jb2xsYXBzZWQtYm94IC5ib3gtZm9vdGVyIHtcblx0XHRcdFx0XHQgIGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJvZHl7XG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiBhenVyZSAhaW1wb3J0YW50O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS10cmFjZXN7XG5cdFx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDE1cHg7XG5cdFx0XHRcdFx0XHRwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtIHtcblx0XHRcdFx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1JbWFnZUNvbnRyb2wtYWRkQnRuLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHRcdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IHZhcigtLWdhcC1iYXNlKTtcblx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOiB2YXIoLS1nYXAtYmFzZSk7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdHdpZHRoOiA3LjVyZW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtLmlzLWludmFsaWQge1xuXHRcdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1GaWxlQ29udHJvbC1kYW5nZXItY29sb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBzdmcuaWNvbi1yZWZyZXNoIHtcblx0XHRcdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZmlsZW5hbWUge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRcdFx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdFx0XHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0XHRjb2xvcjogdmFyKC0tRmlsZUNvbnRyb2wtZGFuZ2VyLWNvbG9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpbGVuYW1lID4gc3ZnLmljb24taW1hZ2Uge1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDhweDtcblx0XHRcdFx0XHR3aWR0aDogMjRweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDI0cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maWxlbmFtZSA+IHNwYW4ge1xuXHRcdFx0XHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRcdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0XHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdFx0XHRcdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pbWFnZSB7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdHRvcDogNXB4O1xuXHRcdFx0XHRcdHJpZ2h0OiA1cHg7XG5cdFx0XHRcdFx0bGluZS1oZWlnaHQ6IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIgPiBzdmcge1xuXHRcdFx0XHRcdHRvcDogMDtcblx0XHRcdFx0XHR3aWR0aDogMTBweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDEwcHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtSW5mbyB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdFx0XHRcdFx0d2lkdGg6IDExMHB4O1xuXHRcdFx0XHRcdGhlaWdodDogMTEwcHg7XG5cdFx0XHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0XHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0ZmxleC13cmFwOiB3cmFwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUluZm8gPiBwIHtcblx0XHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDVweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXByb2dyZXNzIHtcblx0XHRcdFx0XHR3aWR0aDogNzBweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDVweDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZWJlYmViO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3NWYWx1ZSB7XG5cdFx0XHRcdFx0aGVpZ2h0OiA1cHg7XG5cdFx0XHRcdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tSW1hZ2VDb250cm9sLXByb2dyZXNzLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogdmFyKC0taW5mbyk7XG5cdFx0XHRcdFx0bWluLXdpZHRoOiAxMCU7XG5cdFx0XHRcdFx0dHJhbnNpdGlvbjogZWFzZS1vdXQgd2lkdGggdmFyKC0tYW5pbWF0aW9uLWR1cmF0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0uaXMtaW52YWxpZCAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbS5pcy1pbnZhbGlkOmhvdmVyIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZXJyb3JNc2cge1xuXHRcdFx0XHRcdGNvbG9yOiB2YXIoLS1kYW5nZXIpO1xuXHRcdFx0XHRcdG1hcmdpbjogNXB4IDAgMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXVwbG9hZEJ0biB7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogNXB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcHBlcldyYXBwZXIge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWNyb3BwZXJXcmFwcGVyIGltZyB7XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdG1heC1oZWlnaHQ6IDQwMHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHJpZ2h0OiAwO1xuXHRcdFx0XHRcdGJvdHRvbTogMDtcblx0XHRcdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRcdFx0XHRcdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcblx0XHRcdFx0XHRtYXJnaW46IDAuNXJlbTtcblx0XHRcdFx0XHRib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciA+IGEge1xuXHRcdFx0XHRcdGNvbG9yOiB2YXIoLS1Gb3JtLWl0ZW0tZm9udENvbG9yKTtcblx0XHRcdFx0XHRwYWRkaW5nOiAycHggNXB4O1xuXHRcdFx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyID4gYTpob3ZlciB7XG5cdFx0XHRcdFx0Y29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtYWNjZXB0VGlwIHtcblx0XHRcdFx0XHRoZWlnaHQ6IDEyMHB4O1xuXHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXJDb2xvcik7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvKTtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZjNmOWZlO1xuXHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0bGluZS1oZWlnaHQ6IDEyMHB4O1xuXHRcdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpeGVkLXNpemUge1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbU92ZXJsYXkge1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQuYW50ZC1JbWFnZXMge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdFx0XHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRcdFx0XHRcdG1hcmdpbjogY2FsYyh2YXIoLS1nYXAteHMpICogLTEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2VzLWl0ZW0ge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdFx0XHRcdG1hcmdpbjogdmFyKC0tZ2FwLXhzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlIHtcblx0XHRcdFx0XHRcdGJvcmRlcjogdmFyKC0tYm9yZGVyV2lkdGgpIHNvbGlkIHZhcigtLWJvcmRlckNvbG9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLS10aHVtYiB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWJXcmFwIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLWltYWdlIHtcblx0XHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtaW1hZ2UtLWxvYWRpbmcge1xuXHRcdFx0XHRcdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtLW9yaWdpbmFsIC5hbnRkLUltYWdlLWltYWdlIHtcblx0XHRcdFx0XHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRcdFx0XHRcdG1heC1oZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdFx0XHRcdG1hcmdpbjogYXV0bztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iIHtcblx0XHRcdFx0XHRcdHdpZHRoOiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdGhlaWdodDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWIgPiBpbWcge1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdFx0bGVmdDogNTAlO1xuXHRcdFx0XHRcdFx0dG9wOiA1MCU7XG5cdFx0XHRcdFx0XHRtYXgtaGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLWluZm8ge1xuXHRcdFx0XHRcdFx0cGFkZGluZzogNXB4IDEwcHg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS0tdGh1bWIgLmFudGQtSW1hZ2UtaW5mbyB7XG5cdFx0XHRcdFx0XHR3aWR0aDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLTQtMyB7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDUuMTU2MjVyZW07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tMTYtOSB7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDMuODY3MTg3NXJlbTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIHtcblx0XHRcdFx0XHRcdG1pbi13aWR0aDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRtaW4taGVpZ2h0OiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIC5hbnRkLUltYWdlLXRodW1iIHtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLWZpeGVkLXNpemUgLmFudGQtSW1hZ2UtdGh1bWIgPiBpbWcge1xuXHRcdFx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tdy1mdWxsID4gaW1nIHtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0I3tvcHRpb25zPy5zdHlsZXMgfHwgXCJcIn1cblxuXHRcdFx0XHRcdCN7b3B0aW9ucz8uYWRkX3N0eWxlcyB8fCBcIlwifVxuXHRcdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PC9oZWFkPlxuXHRcdFx0PGJvZHk+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVlZG9zIHdvcmtmbG93IGluc3RhbmNlLXByaW50XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNraW4tZ3JlZW4gc2tpbi1hZG1pbi1sdGVcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQje3Nob3dUcmFjZXNCdG59XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImluc3RhbmNlLXByaW50XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5zdGFuY2UgI3tpbnN0YW5jZV9zdHlsZX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGZvcm0gbmFtZT1cImluc3RhbmNlRm9ybVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnN0YW5jZS1mb3JtIGJveCAje2luc3RhbmNlQm94U3R5bGV9XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje2Zvcm1EZXNjcmlwdGlvbkh0bWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94LWJvZHlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwiYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdhdHRhY2htZW50cy1zZWN0aW9uJz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7YXR0YWNobWVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7cmVsYXRlZF9pbnN0YW5jZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje3JlbGF0ZWRfcmVjb3Jkc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje2JvZHl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZm9ybT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0I3t0cmFjZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9ib2R5PlxuXHRcdFx0PHNjcmlwdD4je29wZW5GaWxlU2NyaXB0fTsje29uTG9hZFNjcmlwdH07I3tzaG93VHJhY2VzU2NyaXB0fTwvc2NyaXB0PlxuXHRcdDwvaHRtbD5cblx0XCJcIlwiXG5cblx0cmV0dXJuIGh0bWwiLCJ2YXIgX2dldExvY2FsZSwgX2dldFJlcXVpcmVkRmllbGRzLCBfZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMsIF9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcywgX2dldFRlbXBsYXRlRGF0YSwgX2dldFZpZXdIdG1sLCBnZXRMaW5rVGV4dCwgbWFya2VkOyAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIik7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZSA9IHt9O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5zdGFuY2VfYXR0YWNobWVudCA9IFwiPHRyPlxcblx0PHRkIGNsYXNzPVxcXCJpbnMtYXR0YWNoLXZpZXdcXFwiPlxcblx0XHQ8YSBocmVmPVxcXCJ7e2luc19hdHRhY2hfZG93bmxvYWRfdXJsIF9pZCBhYnNvbHV0ZX19XFxcIiBjbGFzcz1cXFwiaW5zX2F0dGFjaF9ocmVmXFxcIiB0YXJnZXQ9XFxcIl9wYXJlbnRcXFwiIGRhdGEtbmFtZT1cXFwie3t0aGlzLm5hbWV9fVxcXCIgZGF0YS10eXBlPVxcXCJ7e3RoaXMub3JpZ2luYWwudHlwZX19XFxcIiBkYXRhLWlkPVxcXCJ7e19pZH19XFxcIj57e3RoaXMubmFtZX19PC9hPlxcblx0PC90ZD5cXG48L3RyPlwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuYWZTZWxlY3RVc2VyUmVhZCA9IFwiPGRpdiBjbGFzcz0nc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCc+e3t2YWx1ZX19PC9kaXY+XCI7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5hZkZvcm1Hcm91cFJlYWQgPSBcIjxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAnPlxcblx0e3sjd2l0aCBnZXRGaWVsZCB0aGlzLm5hbWV9fVxcblx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VjdGlvbid9fVxcblx0XHRcdFx0PGRpdiBjbGFzcz0nc2VjdGlvbiBjYWxsb3V0IGNhbGxvdXQtZGVmYXVsdCc+XFxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tmX2xhYmVsIHRoaXN9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdDxwPnt7e2Rlc2NyaXB0aW9ufX19PC9wPlxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdHt7ZWxzZX19XFxuXHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3RhYmxlJ319XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0IHN0ZWVkb3MtdGFibGVcXFwiPlxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIiBzdHlsZT1cXFwicGFkZGluZzowcHg7XFxcIj5cXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1oZWFkaW5nXFxcIiA+XFxuXHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9J2NvbnRyb2wtbGFiZWwnPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVxcXCJkZXNjcmlwdGlvblxcXCI+e3t7ZGVzY3JpcHRpb259fX08L3NwYW4+XFxuXHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwicmVhZG9ubHktdGFibGVcXFwiIHN0eWxlPVxcXCJwYWRkaW5nOjBweDtvdmVyZmxvdy14OmF1dG87XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHR5cGU9J3RhYmxlJyBjbGFzcz1cXFwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtY29uZGVuc2VkIGF1dG9mb3JtLXRhYmxlXFxcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTowcHg7JyB7e3RoaXMuYXR0c319IGlkPVxcXCJ7e3RoaXMuY29kZX19VGFibGVcXFwiIG5hbWU9XFxcInt7dGhpcy5jb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3t0aGlzLm5hbWV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRoZWFkIGlkPVxcXCJ7e3RoaXMubmFtZX19VGhlYWRcXFwiIG5hbWU9XFxcInt7dGhpcy5uYW1lfX1UaGVhZFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZVRoZWFkIHRoaXN9fX1cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3RoZWFkPlxcblx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keSBpZD1cXFwie3t0aGlzLm5hbWV9fVRib2R5XFxcIiBuYW1lPVxcXCJ7e3RoaXMubmFtZX19VGJvZHlcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3t7Z2V0VGFibGVCb2R5IHRoaXN9fX1cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5Plxcblx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHR7eyNpZiBzaG93TGFiZWx9fVxcblx0XHRcdFx0XHQ8bGFiZWw+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0PGRpdiBjbGFzcz0ne3tnZXRDZkNsYXNzIHRoaXN9fSBmb3JtLWNvbnRyb2wnIHJlYWRvbmx5IGRpc2FibGVkPnt7e2dldFZhbHVlIGNvZGV9fX08L2Rpdj5cXG5cdFx0XHR7ey9pZn19XFxuXHRcdHt7L2lmfX1cXG5cdHt7L3dpdGh9fVxcbjwvZGl2PlwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuYWZGb3JtR3JvdXAgPSBcIlxcbnt7I3dpdGggZ2V0RmllbGQgdGhpcy5uYW1lfX1cXG5cdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3NlY3Rpb24nfX1cXG5cdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdDxkaXYgY2xhc3M9J3NlY3Rpb24gY2FsbG91dCBjYWxsb3V0LWRlZmF1bHQnPlxcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Zl9sYWJlbCB0aGlzfX08L2xhYmVsPlxcblx0XHRcdFx0XHQ8cD57e3tkZXNjcmlwdGlvbn19fTwvcD5cXG5cdFx0XHRcdDwvZGl2PlxcbiAgXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0e3tlbHNlfX1cXG5cdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndGFibGUnfX1cXG5cdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsIHBhbmVsLWRlZmF1bHQgc3RlZWRvcy10YWJsZVxcXCI+XFxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsLWJvZHlcXFwiIHN0eWxlPVxcXCJwYWRkaW5nOjBweDtcXFwiPlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsLWhlYWRpbmdcXFwiID5cXG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz0nY29udHJvbC1sYWJlbCc+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XFxcImRlc2NyaXB0aW9uXFxcIj57e3tkZXNjcmlwdGlvbn19fTwvc3Bhbj5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJyZWFkb25seS10YWJsZVxcXCIgc3R5bGU9XFxcInBhZGRpbmc6MHB4O292ZXJmbG93LXg6YXV0bztcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgdHlwZT0ndGFibGUnIGNsYXNzPVxcXCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgYXV0b2Zvcm0tdGFibGVcXFwiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBweDsnIHt7dGhpcy5hdHRzfX0gaWQ9XFxcInt7dGhpcy5jb2RlfX1UYWJsZVxcXCIgbmFtZT1cXFwie3t0aGlzLmNvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e3RoaXMubmFtZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGhlYWQgaWQ9XFxcInt7dGhpcy5uYW1lfX1UaGVhZFxcXCIgbmFtZT1cXFwie3t0aGlzLm5hbWV9fVRoZWFkXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlVGhlYWQgdGhpc319fVxcblx0XHRcdFx0XHRcdFx0XHRcdDwvdGhlYWQ+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5IGlkPVxcXCJ7e3RoaXMubmFtZX19VGJvZHlcXFwiIG5hbWU9XFxcInt7dGhpcy5uYW1lfX1UYm9keVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZUJvZHkgdGhpc319fVxcblx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XFxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XFxuXHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdpbnB1dCd9fVxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIiBkYXRhLXJlcXVpcmVkPVxcXCJ7eyNpZiBpc19yZXF1aXJlZH19dHJ1ZXt7L2lmfX1cXFwiPlxcblx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdHt7I2lmIGlzX3RleHRhcmVhfX1cXG5cdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSB0aXRsZT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIG5hbWU9XFxcInt7Y29kZX19XFxcIiB7e2dldFBlcm1pc3Npb25zIGNvZGV9fSBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj48L3RleHRhcmVhPlxcblx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHR7eyN1bmxlc3MgaXNfdGV4dGFyZWF9fVxcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIHt7Z2V0UGVybWlzc2lvbnMgY29kZX19IGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdHt7L3VubGVzc319XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ251bWJlcid9fVxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwibnVtYmVyXFxcIiB0aXRsZT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIG5hbWU9XFxcInt7Y29kZX19XFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnZGF0ZSd9fVxcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgdGl0bGU9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS10eXBlPVxcXCJkYXRlXFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj5cXG5cdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnZGF0ZVRpbWUnfX1cXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtdHlwZT0nZGF0ZXRpbWUnIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdwYXNzd29yZCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwicGFzc3dvcmRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdzZWxlY3QnfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNlbGVjdCBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjZWFjaCBvcHRpb25zIHRoaXN9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cXFwie3t2YWx1ZX19XFxcIj57e2xhYmVsfX08L29wdGlvbj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zZWxlY3Q+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3JhZGlvJ319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImFmLXJhZGlvLWdyb3VwXFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cXG4gICAgICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cXFwicmFkaW8taW5saW5lIGZpeC1pbmRlbnRcXFwiPjxpbnB1dCB0eXBlPVxcXCJyYWRpb1xcXCIgdmFsdWU9XFxcInt7dmFsdWV9fVxcXCIgbmFtZT1cXFwie3suLi9jb2RlfX1cXFwiIGNsYXNzPVxcXCJyYWRpby1pbmxpbmUgZml4LWluZGVudFxcXCI+IHt7bGFiZWx9fTwvbGFiZWw+XFxuICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XFxuICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdtdWx0aVNlbGVjdCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJhZi1jaGVja2JveC1ncm91cFxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJjaGVja2JveC1pbmxpbmUgZml4LWluZGVudFxcXCI+PGlucHV0IHR5cGU9XFxcImNoZWNrYm94XFxcIiB2YWx1ZT1cXFwie3t2YWx1ZX19XFxcIiBuYW1lPVxcXCJ7ey4uL2NvZGV9fVxcXCIgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XFxcIj4ge3tsYWJlbH19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndXJsJ319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVxcXCJ1cmxcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdlbWFpbCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwiZW1haWxcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdjaGVja2JveCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJjaGVja2JveFxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBzdHlsZT1cXFwid2lkdGg6IDEwMCU7XFxcIj48aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIHZhbHVlPVxcXCJ0cnVlXFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XFxcIj48L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHR7ey9pZn19XFxuXHRcdHt7L2lmfX1cXG5cdHt7L3dpdGh9fVwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlID0gZnVuY3Rpb24odGVtcGFsdGVOYW1lLCBzdGVlZG9zRGF0YSkge1xuICB2YXIgdGVtcGxhdGUsIHRlbXBsYXRlQ29tcGlsZWQsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb247XG4gIHRlbXBsYXRlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlW3RlbXBhbHRlTmFtZV07XG4gIHRlbXBsYXRlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICB0ZW1wbGF0ZVJlbmRlckZ1bmN0aW9uID0gZXZhbCh0ZW1wbGF0ZUNvbXBpbGVkKTtcbiAgVGVtcGxhdGVbdGVtcGFsdGVOYW1lXSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZSh0ZW1wYWx0ZU5hbWUsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIHJldHVybiBUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLmhlbHBlcnMoSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycyk7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dCA9IGZ1bmN0aW9uKHN0ZWVkb3NEYXRhKSB7XG4gIHZhciBpbnN0YW5jZVNpZ25UZXh0Q29tcGlsZWQsIGluc3RhbmNlU2lnblRleHRIdG1sLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb247XG4gIGluc3RhbmNlU2lnblRleHRIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW5zdGFuY2Vfc2lnbl90ZXh0Lmh0bWwnKTtcbiAgaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVNpZ25UZXh0SHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgaW5zdGFuY2VTaWduVGV4dFJlbmRlckZ1bmN0aW9uID0gZXZhbChpbnN0YW5jZVNpZ25UZXh0Q29tcGlsZWQpO1xuICBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW5zdGFuY2VTaWduVGV4dFwiLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMoSW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVJbWFnZVNpZ24gPSBmdW5jdGlvbihzdGVlZG9zRGF0YSkge1xuICB2YXIgaW1hZ2VTaWduQ29tcGlsZWQsIGltYWdlU2lnbkh0bWwsIGltYWdlU2lnblJlbmRlckZ1bmN0aW9uO1xuICBpbWFnZVNpZ25IdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW1hZ2Vfc2lnbi5odG1sJyk7XG4gIGltYWdlU2lnbkNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbWFnZVNpZ25IdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICBpbWFnZVNpZ25SZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW1hZ2VTaWduQ29tcGlsZWQpO1xuICBUZW1wbGF0ZS5pbWFnZVNpZ24gPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbWFnZVNpZ25cIiwgaW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbWFnZVNpZ24uc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgcmV0dXJuIFRlbXBsYXRlLmltYWdlU2lnbi5oZWxwZXJzKEltYWdlU2lnbi5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVUcmFjZXNIYW5sZGVyID0gZnVuY3Rpb24oc3RlZWRvc0RhdGEpIHtcbiAgdmFyIHRyYWNlc0hhbmxkZXJDb21waWxlZCwgdHJhY2VzSGFubGRlckh0bWwsIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbjtcbiAgdHJhY2VzSGFubGRlckh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS90cmFjZXNfaGFuZGxlci5odG1sJyk7XG4gIHRyYWNlc0hhbmxkZXJDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodHJhY2VzSGFubGRlckh0bWwsIHtcbiAgICBpc0JvZHk6IHRydWVcbiAgfSk7XG4gIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbiA9IGV2YWwodHJhY2VzSGFubGRlckNvbXBpbGVkKTtcbiAgVGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbnN0YW5jZV90cmFjZXNfaGFuZGxlclwiLCB0cmFjZXNIYW5sZGVyUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlci5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhO1xuICByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIuaGVscGVycyhUcmFjZXNIYW5kbGVyLmhlbHBlcnMpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluaXQgPSBmdW5jdGlvbihzdGVlZG9zRGF0YSkge1xuICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlKFwiYWZTZWxlY3RVc2VyUmVhZFwiLCBzdGVlZG9zRGF0YSk7XG4gIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlKFwiYWZGb3JtR3JvdXBcIiwgc3RlZWRvc0RhdGEpO1xuICB9XG4gIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZkZvcm1Hcm91cFJlYWRcIiwgc3RlZWRvc0RhdGEpO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImluc3RhbmNlX2F0dGFjaG1lbnRcIiwge1xuICAgICAgYWJzb2x1dGU6IHN0ZWVkb3NEYXRhLmFic29sdXRlXG4gICAgfSk7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZUltYWdlU2lnbihzdGVlZG9zRGF0YSk7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZVRyYWNlc0hhbmxkZXIoc3RlZWRvc0RhdGEpO1xuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dChzdGVlZG9zRGF0YSk7XG4gIH1cbn07XG5cbmdldExpbmtUZXh0ID0gZnVuY3Rpb24oaXRlbSwgbGFiZWwsIGRldGFpbF91cmwpIHtcbiAgaWYgKGRldGFpbF91cmwpIHtcbiAgICBkZXRhaWxfdXJsID0gZGV0YWlsX3VybC5yZXBsYWNlKFwie19pZH1cIiwgaXRlbS5faWQpO1xuICAgIGlmICghL15odHRwKHM/KTpcXC9cXC8vLnRlc3QoZGV0YWlsX3VybCkpIHtcbiAgICAgIGRldGFpbF91cmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKGRldGFpbF91cmwpO1xuICAgIH1cbiAgICByZXR1cm4gJzxhIGhyZWY9XCInICsgZGV0YWlsX3VybCArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsgbGFiZWwgKyAnPC9hPic7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgZmllbGQsIGxvY2FsZSwgdXRjT2Zmc2V0KSB7XG4gIHZhciBkYXRlLCBkZXRhaWxfdXJsLCBlLCBmaWVsZE9wdGlvbnMsIGhvdXJzLCBtb250aCwgbmFtZUZpZWxkLCByZWNvcmRzLCByZXMsIHNlY29uZHMsIHNlbGVjdGVkT3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIHNwbGl0ZWRWYWx1ZXMsIHQsIHQwLCB0MSwgdWlTY2hlbWEsIHllYXI7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChbXCJzZWxlY3RcIiwgXCJtdWx0aVNlbGVjdFwiLCBcInJhZGlvXCJdLmluZGV4T2YoZmllbGQudHlwZSkgPiAtMSkge1xuICAgIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pIHtcbiAgICAgIHZhciBpdGVtU3BsaXRzO1xuICAgICAgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG4gICAgICAgIHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgY2FzZSAnZW1haWwnOlxuICAgICAgdmFsdWUgPSB2YWx1ZSA/ICc8YSBocmVmPVxcJ21haWx0bzonICsgdmFsdWUgKyAnXFwnPicgKyB2YWx1ZSArICc8L2E+JyA6ICcnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXJsJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZihcImh0dHBcIikgPT09IDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWUgPSBcIjxhIGhyZWY9J1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgICAgICB2YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLmdldFByb3BlcnR5KFwiZnVsbG5hbWVcIikudG9TdHJpbmcoKSA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLmZ1bGxuYW1lIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXNlcic6XG4gICAgICBpZiAoZmllbGQuaXNfbXVsdGlzZWxlY3QpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCkgOiB2b2lkIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5uYW1lIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgdmFsdWUgPSAnKioqKioqJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJykge1xuICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiLCB7fSwgbG9jYWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIiwge30sIGxvY2FsZSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID09PSAxNikge1xuICAgICAgICB0ID0gdmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgICB0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuICAgICAgICB0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuICAgICAgICB5ZWFyID0gdDBbMF07XG4gICAgICAgIG1vbnRoID0gdDBbMV07XG4gICAgICAgIGRhdGUgPSB0MFsyXTtcbiAgICAgICAgaG91cnMgPSB0MVswXTtcbiAgICAgICAgc2Vjb25kcyA9IHQxWzFdO1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZSwgaG91cnMsIHNlY29uZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlKHZhbHVlLCB1dGNPZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaWYgKGZpZWxkLmlzX3RleHRhcmVhKSB7XG4gICAgICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICBtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUgPT09IHZhbHVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgdmFsdWUgPSBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgIHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLmxhYmVsO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbXVsdGlTZWxlY3QnOlxuICAgICAgc3BsaXRlZFZhbHVlcyA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IGZpZWxkT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gc3BsaXRlZFZhbHVlcy5pbmRleE9mKGl0ZW0udmFsdWUpID4gLTE7XG4gICAgICB9KTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICBpZiAoZmllbGQuaXNfcGVyY2VudCkge1xuICAgICAgICAgIHZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBTdGVlZG9zLm51bWJlclRvU3RyaW5nKHZhbHVlLCBmaWVsZC5kaWdpdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvZGF0YSc6XG4gICAgICBkZXRhaWxfdXJsID0gZmllbGQuZGV0YWlsX3VybDtcbiAgICAgIGlmIChmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICB2YWx1ZSA9IF8ubWFwKHZhbHVlLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGdldExpbmtUZXh0KGl0ZW0sIGl0ZW1bJ0BsYWJlbCddLCBkZXRhaWxfdXJsKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGdldExpbmtUZXh0KHZhbHVlLCB2YWx1ZVsnQGxhYmVsJ10sIGRldGFpbF91cmwpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgIHZhbHVlID0gXy5tYXAodmFsdWUsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9XCJhbnRkLUltYWdlQ29udHJvbC1pdGVtIGlzLXVwbG9hZGVkXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlIGFudGQtSW1hZ2UtLXRodW1iIGFudGQtSW1hZ2VDb250cm9sLWltYWdlXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iV3JhcFwiPiA8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYlwiPjxpbWcgY2xhc3M9XCJhbnRkLUltYWdlLWltYWdlXCIgc3JjPVwiL2FwaS9maWxlcy9pbWFnZXMvJyArIGl0ZW0gKyAnXCI+PC9kaXY+IDwvZGl2PiA8L2Rpdj4gPC9kaXY+JztcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJzxkaXYgY2xhc3M9XCJhbnRkLUltYWdlQ29udHJvbC1pdGVtIGlzLXVwbG9hZGVkXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlIGFudGQtSW1hZ2UtLXRodW1iIGFudGQtSW1hZ2VDb250cm9sLWltYWdlXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iV3JhcFwiPiA8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYlwiPjxpbWcgY2xhc3M9XCJhbnRkLUltYWdlLWltYWdlXCIgc3JjPVwiL2FwaS9maWxlcy9pbWFnZXMvJyArIHZhbHVlICsgJ1wiPjwvZGl2PiA8L2Rpdj4gPC9kaXY+IDwvZGl2Pic7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWxlJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgICAgICByZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxL2Nmc19maWxlc19maWxlcmVjb3JkP2ZpbHRlcnM9W1tcIl9pZFwiLFwiaW5cIiwgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICddXSZmaWVsZHM9W1wiX2lkXCIsXCJvcmlnaW5hbFwiXScsIHtcbiAgICAgICAgICAgIGFzeW5jOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlY29yZHMgPSByZXMuZGF0YS5pdGVtcztcbiAgICAgICAgfSBlbHNlIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICByZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKFwiY2ZzX2ZpbGVzX2ZpbGVyZWNvcmRcIiwge1xuICAgICAgICAgICAgZmlsdGVyczogW1tcIl9pZFwiLCAnaW4nLCB2YWx1ZV1dLFxuICAgICAgICAgICAgZmllbGRzOiBbXCJfaWRcIiwgXCJvcmlnaW5hbFwiXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gXy5tYXAocmVjb3JkcywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIHJldHVybiBcIjxhIGhyZWY9J1wiICsgKFN0ZWVkb3MuYWJzb2x1dGVVcmwoJy9hcGkvZmlsZXMvZmlsZXMvJyArIGl0ZW0uX2lkICsgJz9kb3dubG9hZD10cnVlJykpICsgXCInIHRhcmdldD0nX2JsYW5rJyBzdHlsZT0nZGlzcGxheTogYmxvY2s7Jz5cIiArIGl0ZW0ub3JpZ2luYWwubmFtZSArIFwiPC9hPlwiO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKFwiXCIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbG9va3VwJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgICAgICB1aVNjaGVtYSA9IENyZWF0b3IuZ2V0T2JqZWN0KGZpZWxkLnJlZmVyZW5jZV90byk7XG4gICAgICAgICAgbmFtZUZpZWxkID0gKHVpU2NoZW1hICE9IG51bGwgPyB1aVNjaGVtYS5OQU1FX0ZJRUxEX0tFWSA6IHZvaWQgMCkgfHwgJ25hbWUnO1xuICAgICAgICAgIHJlcyA9IFN0ZWVkb3MuYXV0aFJlcXVlc3QoJy9hcGkvdjEvJyArIGZpZWxkLnJlZmVyZW5jZV90byArICc/ZmlsdGVycz1bW1wiJyArIChmaWVsZC5yZWZlcmVuY2VfdG9fZmllbGQgfHwgJ19pZCcpICsgJ1wiLFwiaW5cIiwgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICddXSZmaWVsZHM9W1wiX2lkXCIsXCInICsgbmFtZUZpZWxkICsgJ1wiXScsIHtcbiAgICAgICAgICAgIGFzeW5jOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlY29yZHMgPSByZXMuZGF0YS5pdGVtcztcbiAgICAgICAgfSBlbHNlIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICBuYW1lRmllbGQgPSBTdGVlZG9zLmdldE9iamVjdE5hbWVGaWVsZEtleShmaWVsZC5yZWZlcmVuY2VfdG8pO1xuICAgICAgICAgIHJlY29yZHMgPSBTdGVlZG9zLm9iamVjdEZpbmQoZmllbGQucmVmZXJlbmNlX3RvLCB7XG4gICAgICAgICAgICBmaWx0ZXJzOiBbW2ZpZWxkLnJlZmVyZW5jZV90b19maWVsZCB8fCAnX2lkJywgJ2luJywgdmFsdWVdXSxcbiAgICAgICAgICAgIGZpZWxkczogW1wiX2lkXCIsIG5hbWVGaWVsZF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IF8ubWFwKHJlY29yZHMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gXCI8YSBocmVmPSdcIiArIChTdGVlZG9zLmFic29sdXRlVXJsKCcvYXBwLy0vJyArIGZpZWxkLnJlZmVyZW5jZV90byArICcvdmlldy8nICsgaXRlbS5faWQpKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyBpdGVtW25hbWVGaWVsZF0gKyBcIjwvYT5cIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgdmFsdWUgPSB2YWx1ZSA/IFwiPGRpdiBjbGFzcz1cXFwic3RlZWRvcy1odG1sXFxcIj5cIiArIHZhbHVlICsgXCI8L2Rpdj5cIiA6ICcnO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbCA9IGZ1bmN0aW9uKGZpZWxkcywgY29kZSkge1xuICB2YXIgZmllbGQ7XG4gIGZpZWxkID0gZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpO1xuICBpZiAoZmllbGQpIHtcbiAgICBpZiAoZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIGZpZWxkLm5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWVsZC5jb2RlO1xuICAgIH1cbiAgfVxufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlRm9ybVZlcnNpb24gPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICB2YXIgZm9ybSwgZm9ybV9maWVsZHMsIGZvcm1fdmVyc2lvbjtcbiAgZm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG4gIGZvcm1fdmVyc2lvbiA9IHt9O1xuICBmb3JtX2ZpZWxkcyA9IFtdO1xuICBpZiAoZm9ybS5jdXJyZW50Ll9pZCA9PT0gaW5zdGFuY2UuZm9ybV92ZXJzaW9uKSB7XG4gICAgZm9ybV92ZXJzaW9uID0gZm9ybS5jdXJyZW50O1xuICB9IGVsc2Uge1xuICAgIGZvcm1fdmVyc2lvbiA9IF8ud2hlcmUoZm9ybS5oaXN0b3J5cywge1xuICAgICAgX2lkOiBpbnN0YW5jZS5mb3JtX3ZlcnNpb25cbiAgICB9KVswXTtcbiAgfVxuICBmb3JtX3ZlcnNpb24uZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpIHtcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nKSB7XG4gICAgICBmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgIGlmIChmaWVsZC5maWVsZHMpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybV9maWVsZHMucHVzaChmKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICBmaWVsZFsnc2ZpZWxkcyddID0gZmllbGRbJ2ZpZWxkcyddO1xuICAgICAgZGVsZXRlIGZpZWxkWydmaWVsZHMnXTtcbiAgICAgIHJldHVybiBmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1fZmllbGRzLnB1c2goZmllbGQpO1xuICAgIH1cbiAgfSk7XG4gIGZvcm1fdmVyc2lvbi5maWVsZHMgPSBmb3JtX2ZpZWxkcztcbiAgcmV0dXJuIGZvcm1fdmVyc2lvbjtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRGbG93VmVyc2lvbiA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIHZhciBmbG93LCBmbG93X3ZlcnNpb247XG4gIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKGluc3RhbmNlLmZsb3cpO1xuICBmbG93X3ZlcnNpb24gPSB7fTtcbiAgaWYgKGZsb3cuY3VycmVudC5faWQgPT09IGluc3RhbmNlLmZsb3dfdmVyc2lvbikge1xuICAgIGZsb3dfdmVyc2lvbiA9IGZsb3cuY3VycmVudDtcbiAgfSBlbHNlIHtcbiAgICBmbG93X3ZlcnNpb24gPSBfLndoZXJlKGZsb3cuaGlzdG9yeXMsIHtcbiAgICAgIF9pZDogaW5zdGFuY2UuZmxvd192ZXJzaW9uXG4gICAgfSlbMF07XG4gIH1cbiAgcmV0dXJuIGZsb3dfdmVyc2lvbjtcbn07XG5cbl9nZXRWaWV3SHRtbCA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHZpZXdIdG1sO1xuICB2aWV3SHRtbCA9IEFzc2V0cy5nZXRUZXh0KHBhdGgpO1xuICBpZiAodmlld0h0bWwpIHtcbiAgICB2aWV3SHRtbCA9IHZpZXdIdG1sLnJlcGxhY2UoLzx0ZW1wbGF0ZVtcXHdcXHNcXFwiXFw9J10rPi9pLCBcIlwiKS5yZXBsYWNlKC88XFwvdGVtcGxhdGU+L2ksIFwiXCIpO1xuICB9XG4gIHJldHVybiB2aWV3SHRtbDtcbn07XG5cbl9nZXRMb2NhbGUgPSBmdW5jdGlvbih1c2VyKSB7XG4gIHZhciBsb2NhbGUsIHJlZiwgcmVmMTtcbiAgaWYgKCh1c2VyICE9IG51bGwgPyAocmVmID0gdXNlci5sb2NhbGUpICE9IG51bGwgPyByZWYudG9Mb2NhbGVMb3dlckNhc2UoKSA6IHZvaWQgMCA6IHZvaWQgMCkgPT09ICd6aC1jbicpIHtcbiAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gIH0gZWxzZSBpZiAoKHVzZXIgIT0gbnVsbCA/IChyZWYxID0gdXNlci5sb2NhbGUpICE9IG51bGwgPyByZWYxLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiB2b2lkIDAgOiB2b2lkIDApID09PSAnZW4tdXMnKSB7XG4gICAgbG9jYWxlID0gXCJlblwiO1xuICB9IGVsc2Uge1xuICAgIGxvY2FsZSA9IFwiemgtQ05cIjtcbiAgfVxuICByZXR1cm4gbG9jYWxlO1xufTtcblxuX2dldFJlcXVpcmVkRmllbGRzID0gZnVuY3Rpb24oZmllbGRzLCByZXYpIHtcbiAgaWYgKCFyZXYpIHtcbiAgICByZXYgPSBbXTtcbiAgfVxuICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmaWVsZCkge1xuICAgIGlmIChmaWVsZC50eXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgIHJldHVybiBfZ2V0UmVxdWlyZWRGaWVsZHMoZmllbGQuZmllbGRzLCByZXYpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYmxlJykge1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmaWVsZC5pc19yZXF1aXJlZCkge1xuICAgICAgICByZXR1cm4gcmV2LnB1c2goZmllbGQuY29kZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJldjtcbn07XG5cbl9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyA9IGZ1bmN0aW9uKGZpZWxkcywgc3RlcHMpIHtcbiAgdmFyIGVkaXRhYmxlQ29kZSwgc3RhcnRTdGVwO1xuICBzdGFydFN0ZXAgPSBzdGVwcy5maW5kUHJvcGVydHlCeVBLKFwic3RlcF90eXBlXCIsIFwic3RhcnRcIik7XG4gIGVkaXRhYmxlQ29kZSA9IFtdO1xuICBfLmtleXMoc3RhcnRTdGVwLnBlcm1pc3Npb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChzdGFydFN0ZXAucGVybWlzc2lvbnNba2V5XSA9PT0gJ2VkaXRhYmxlJykge1xuICAgICAgcmV0dXJuIGVkaXRhYmxlQ29kZS5wdXNoKGtleSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGVkaXRhYmxlQ29kZTtcbn07XG5cbl9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcyA9IGZ1bmN0aW9uKGZpZWxkcywgc3RlcHMpIHtcbiAgdmFyIGVkaXRhYmxlQ29kZSwgcmVxdWlyZWRGaWVsZHM7XG4gIHJlcXVpcmVkRmllbGRzID0gX2dldFJlcXVpcmVkRmllbGRzKGZpZWxkcyk7XG4gIGVkaXRhYmxlQ29kZSA9IF9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyhmaWVsZHMsIHN0ZXBzKTtcbiAgcmV0dXJuIF8uaW50ZXJzZWN0aW9uKHJlcXVpcmVkRmllbGRzLCBlZGl0YWJsZUNvZGUpO1xufTtcblxuX2dldFRlbXBsYXRlRGF0YSA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgZmxvdywgZm9ybSwgZm9ybV92ZXJzaW9uLCBsb2NhbGUsIHN0ZWVkb3NEYXRhO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgZm9ybV92ZXJzaW9uID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlRm9ybVZlcnNpb24oaW5zdGFuY2UpO1xuICB9IGVsc2Uge1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKGluc3RhbmNlKTtcbiAgfVxuICBsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuICBzdGVlZG9zRGF0YSA9IHt9O1xuICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgc3RlZWRvc0RhdGEgPSBfLmNsb25lKFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKSk7XG4gICAgc3RlZWRvc0RhdGEuaW5zbmFtZSA9IGluc3RhbmNlLm5hbWU7XG4gICAgc3RlZWRvc0RhdGEuaW5zX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG4gICAgc3RlZWRvc0RhdGEuaW5zX2ZpbmFsX2RlY2lzaW9uID0gaW5zdGFuY2UuaW5zX2ZpbmFsX2RlY2lzaW9uO1xuICAgIHN0ZWVkb3NEYXRhLmluc19jb2RlID0gaW5zdGFuY2UuY29kZTtcbiAgICBzdGVlZG9zRGF0YS5pbnNfaXNfYXJjaGl2ZWQgPSBpbnN0YW5jZS5pc19hcmNoaXZlZDtcbiAgICBzdGVlZG9zRGF0YS5pbnNfaXNfZGVsZXRlZCA9IGluc3RhbmNlLmluc19pc19kZWxldGVkO1xuICAgIHN0ZWVkb3NEYXRhLmFwcGxpY2FudF9uYW1lID0gaW5zdGFuY2UuYXBwbGljYW50X25hbWU7XG4gICAgc3RlZWRvc0RhdGEuYXBwbGljYW50Q29udGV4dCA9IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lO1xuICB9XG4gIHN0ZWVkb3NEYXRhLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvbiA9IGZvcm1fdmVyc2lvbjtcbiAgc3RlZWRvc0RhdGEubG9jYWxlID0gbG9jYWxlO1xuICBzdGVlZG9zRGF0YS51dGNPZmZzZXQgPSB1c2VyLnV0Y09mZnNldDtcbiAgc3RlZWRvc0RhdGEuc3BhY2UgPSBpbnN0YW5jZS5zcGFjZTtcbiAgc3RlZWRvc0RhdGEuc2Vzc2lvblVzZXJJZCA9IHVzZXIuX2lkO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgaWYgKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZWRpdGFibGUgOiB2b2lkIDApIHtcbiAgICAgIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBpbnN0YW5jZS5mb3JtXG4gICAgICB9KTtcbiAgICAgIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBpbnN0YW5jZS5mbG93XG4gICAgICB9KTtcbiAgICAgIHN0ZWVkb3NEYXRhLnN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzID0gX2dldFN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzKGZvcm0uY3VycmVudC5maWVsZHMsIGZsb3cuY3VycmVudC5zdGVwcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGVlZG9zRGF0YTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlID0gZnVuY3Rpb24oZGF0ZSwgdXRjT2Zmc2V0KSB7XG4gIHZhciBwYXNzaW5nO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgcGFzc2luZyA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHBhc3NpbmcgPSB0cnVlO1xuICB9XG4gIGlmICghdXRjT2Zmc2V0ICYmIHV0Y09mZnNldCAhPT0gMCkge1xuICAgIHV0Y09mZnNldCA9IDg7XG4gIH1cbiAgcmV0dXJuIG1vbWVudChkYXRlKS51dGNPZmZzZXQodXRjT2Zmc2V0LCBwYXNzaW5nKS5mb3JtYXQoXCJZWVlZLU1NLUREIEhIOm1tXCIpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgaW5zdGFuY2VDb21waWxlZCwgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiwgaW5zdGFuY2VUZW1wbGF0ZSwgc3RlZWRvc0RhdGE7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuICBzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IGZhbHNlO1xuICBpZiAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5hYnNvbHV0ZSA6IHZvaWQgMCkge1xuICAgIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcbiAgfVxuICBpbnN0YW5jZVRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlLCBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLnRlbXBsYXRlTmFtZSA6IHZvaWQgMCk7XG4gIGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmU2VsZWN0VXNlci9nLCBcImFmU2VsZWN0VXNlclJlYWRcIik7XG4gIGlmICghKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZWRpdGFibGUgOiB2b2lkIDApKSB7XG4gICAgaW5zdGFuY2VUZW1wbGF0ZSA9IGluc3RhbmNlVGVtcGxhdGUucmVwbGFjZSgvYWZGb3JtR3JvdXAvZywgXCJhZkZvcm1Hcm91cFJlYWRcIik7XG4gIH1cbiAgaW5zdGFuY2VDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoaW5zdGFuY2VUZW1wbGF0ZSwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VDb21waWxlZCk7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbnN0YW5jZV9yZWFkb25seV92aWV3XCIsIGluc3RhbmNlUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZV9yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcuaGVscGVycyhJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzKTtcbiAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluaXQoc3RlZWRvc0RhdGEpO1xuICBib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldywgc3RlZWRvc0RhdGEpO1xuICByZXR1cm4gXCI8ZGl2IGlkPSdpbnN0YW5jZWZvcm0nID5cXG5cdFwiICsgYm9keSArIFwiXFxuPC9kaXY+XCI7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VHJhY2VzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgZm9ybSwgc3RlZWRvc0RhdGEsIHRyYWNlQ29tcGlsZWQsIHRyYWNlUmVuZGVyRnVuY3Rpb24sIHRyYWNlc0h0bWw7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpO1xuICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnN0YW5jZS5mb3JtKTtcbiAgaWYgKGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT09IFwidGFibGVcIiB8fCAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy50ZW1wbGF0ZU5hbWUgOiB2b2lkIDApID09PSBcInRhYmxlXCIpIHtcbiAgICB0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX3RhYmxlLmh0bWwnKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzLmh0bWwnKTtcbiAgfVxuICB0cmFjZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0cmFjZXNIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICB0cmFjZVJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZUNvbXBpbGVkKTtcbiAgVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInRyYWNlX3JlYWRvbmx5X3ZpZXdcIiwgdHJhY2VSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnRyYWNlX3JlYWRvbmx5X3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzKFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMpO1xuICBib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldywgaW5zdGFuY2UudHJhY2VzKTtcbiAgcmV0dXJuIGJvZHk7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcgPSBmdW5jdGlvbih1c2VyLCBzcGFjZSwgaW5zdGFuY2UpIHtcbiAgdmFyIGF0dGFjaG1lbnRDb21waWxlZCwgYXR0YWNobWVudEh0bWwsIGF0dGFjaG1lbnRSZW5kZXJGdW5jdGlvbiwgYm9keSwgc3RlZWRvc0RhdGE7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpO1xuICBhdHRhY2htZW50SHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL2luc3RhbmNlX2F0dGFjaG1lbnRzLmh0bWwnKTtcbiAgYXR0YWNobWVudENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShhdHRhY2htZW50SHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgYXR0YWNobWVudFJlbmRlckZ1bmN0aW9uID0gZXZhbChhdHRhY2htZW50Q29tcGlsZWQpO1xuICBUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiYXR0YWNobWVudHNfcmVhZG9ubHlfdmlld1wiLCBhdHRhY2htZW50UmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcuaGVscGVycyhJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzKTtcbiAgYm9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcpO1xuICByZXR1cm4gYm9keTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRSZWxhdGVkSW5zdGFuY2VzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgcmVsYXRlZEluc3RhbmNlc0NvbXBpbGVkLCByZWxhdGVkSW5zdGFuY2VzSHRtbCwgcmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uLCBzdGVlZG9zRGF0YTtcbiAgc3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmFic29sdXRlIDogdm9pZCAwKSB7XG4gICAgc3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuICB9XG4gIHJlbGF0ZWRJbnN0YW5jZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvcmVsYXRlZF9pbnN0YW5jZXMuaHRtbCcpO1xuICByZWxhdGVkSW5zdGFuY2VzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRJbnN0YW5jZXNIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICByZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCk7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJyZWxhdGVkX2luc3RhbmNlc192aWV3XCIsIHJlbGF0ZWRJbnN0YW5jZXNSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgVGVtcGxhdGUucmVsYXRlZF9pbnN0YW5jZXNfdmlldy5oZWxwZXJzKFJlbGF0ZWRJbnN0YW5jZXMuaGVscGVycyk7XG4gIGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LCBzdGVlZG9zRGF0YSk7XG4gIHJldHVybiBib2R5O1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFJlbGF0ZWRSZWNvcmRzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgcmVsYXRlZFJlY29yZHNDb21waWxlZCwgcmVsYXRlZFJlY29yZHNIdG1sLCByZWxhdGVkUmVjb3Jkc1JlbmRlckZ1bmN0aW9uLCBzdGVlZG9zRGF0YTtcbiAgc3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmFic29sdXRlIDogdm9pZCAwKSB7XG4gICAgc3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuICB9XG4gIHJlbGF0ZWRSZWNvcmRzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3JlbGF0ZWRfcmVjb3Jkcy5odG1sJyk7XG4gIHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRSZWNvcmRzSHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbiA9IGV2YWwocmVsYXRlZFJlY29yZHNDb21waWxlZCk7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwicmVsYXRlZF9yZWNvcmRzX3ZpZXdcIiwgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LmhlbHBlcnMoUmVsYXRlZFJlY29yZHMuaGVscGVycyk7XG4gIGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX3JlY29yZHNfdmlldywgc3RlZWRvc0RhdGEpO1xuICByZXR1cm4gYm9keTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICB2YXIgZm9ybV9zY3JpcHQsIGZvcm1fdmVyc2lvbjtcbiAgZm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbik7XG4gIGZvcm1fc2NyaXB0ID0gZm9ybV92ZXJzaW9uLmZvcm1fc2NyaXB0O1xuICBpZiAoZm9ybV9zY3JpcHQgJiYgZm9ybV9zY3JpcHQucmVwbGFjZSgvXFxuL2csIFwiXCIpLnJlcGxhY2UoL1xccy9nLCBcIlwiKS5sZW5ndGggPiAwKSB7XG4gICAgZm9ybV9zY3JpcHQgPSBcIkNvcmVGb3JtID0ge307Q29yZUZvcm0uaW5zdGFuY2Vmb3JtID0ge307XCIgKyBmb3JtX3NjcmlwdDtcbiAgICByZXR1cm4gZm9ybV9zY3JpcHQgKz0gXCI7aWYoQ29yZUZvcm0uZm9ybV9PbkxvYWQpe3dpbmRvdy5vbmxvYWQgPSBDb3JlRm9ybS5mb3JtX09uTG9hZCgpO31cIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZm9ybV9zY3JpcHQgPSBcIlwiO1xuICB9XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sID0gZnVuY3Rpb24odXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKSB7XG4gIHZhciBhbGxDc3NMaW5rLCBhdHRhY2htZW50LCBib2R5LCBjcmVhdG9yU2VydmljZSwgY3NzSHJlZiwgZm9ybSwgZm9ybURlc2NyaXB0aW9uLCBmb3JtRGVzY3JpcHRpb25IdG1sLCBodG1sLCBpbnNfcmVjb3JkX2lkcywgaW5zdGFuY2VCb3hTdHlsZSwgaW5zdGFuY2Vfc3R5bGUsIGpxSHJlZiwgbG9jYWxlLCBvbkxvYWRTY3JpcHQsIG9wZW5GaWxlU2NyaXB0LCByZWYsIHJlZjEsIHJlbGF0ZWRfaW5zdGFuY2VzLCByZWxhdGVkX3JlY29yZHMsIHNob3dUcmFjZXNCdG4sIHNob3dUcmFjZXNTY3JpcHQsIHRyYWNlLCB0cmFjZUNoZWNrLCB3aWR0aDtcbiAgYm9keSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZVZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgb25Mb2FkU2NyaXB0ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldE9uTG9hZFNjcmlwdChpbnN0YW5jZSk7XG4gIGNyZWF0b3JTZXJ2aWNlID0gKHJlZiA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53ZWJzZXJ2aWNlcykgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNyZWF0b3IpICE9IG51bGwgPyByZWYxLnVybCA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgaW5zX3JlY29yZF9pZHMgPSBpbnN0YW5jZS5yZWNvcmRfaWRzO1xuICBsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuICBvcGVuRmlsZVNjcmlwdCA9IFwiaWYod2luZG93LmlzTm9kZSAmJiBpc05vZGUoKSl7XFxuXHRhdHRhY2hzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcXFwiaW5zX2F0dGFjaF9ocmVmXFxcIik7XFxuXHRmb3IodmFyIGkgPSAwOyBpIDwgYXR0YWNocy5sZW5ndGg7IGkrKyl7XFxuXHRcdGF0dGFjaCA9IGF0dGFjaHNbaV07XFxuXHRcdGF0dGFjaC5hZGRFdmVudExpc3RlbmVyKFxcXCJjbGlja1xcXCIsIGZ1bmN0aW9uKGUpe1xcblx0XHRcdGlmKGlzSW1hZ2UodGhpcy5kYXRhc2V0LnR5cGUpIHx8IGlzSHRtbCh0aGlzLmRhdGFzZXQudHlwZSkpe1xcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xcblx0XHRcdFx0b3BlbldpbmRvdyhcXFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvXFxcIiArIHRoaXMuZGF0YXNldC5pZCk7XFxuXHRcdFx0fWVsc2UgaWYobndfY29yZS5jYW5PcGVuRmlsZSh0aGlzLmRhdGFzZXQubmFtZSkpe1xcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xcblx0XHRcdFx0bndfY29yZS5vcGVuRmlsZSh0aGlzLmhyZWYsIHRoaXMuZGF0YXNldC5uYW1lKVxcblx0XHRcdH1cXG5cdFx0fSk7XFxuXHR9XFxufVxcblxcbnZhciBmbG93ID0gXFxcIlwiICsgaW5zdGFuY2UuZmxvdyArIFwiXFxcIjtcXG52YXIgc3BhY2UgPSBcXFwiXCIgKyBpbnN0YW5jZS5zcGFjZSArIFwiXFxcIjtcXG5cXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSl7XFxuXHRsZXQgcGF0dGVybiA9IFJlZ0V4cChuYW1lICsgXFxcIj0uW147XSpcXFwiKVxcblx0bGV0IG1hdGNoZWQgPSBkb2N1bWVudC5jb29raWUubWF0Y2gocGF0dGVybilcXG5cdGlmKG1hdGNoZWQpe1xcblx0XHRsZXQgY29va2llID0gbWF0Y2hlZFswXS5zcGxpdCgnPScpXFxuXHRcdHJldHVybiBjb29raWVbMV1cXG5cdH1cXG5cdHJldHVybiAnJ1xcbn1cXG5cXG52YXIgcmVjb3JkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXFxcImlucy1yZWxhdGVkLXJlY29yZHNcXFwiKTtcXG5mb3IodmFyIGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKyl7XFxuXHRcdHZhciByZWNvcmQgPSByZWNvcmRzW2ldO1xcblx0XHRyZWNvcmQuYWRkRXZlbnRMaXN0ZW5lcihcXFwiY2xpY2tcXFwiLCBmdW5jdGlvbihlKXtcXG5cdFx0XHR2YXIgY3JlYXRvclNlcnZpY2UgPSBcXFwiXCIgKyBjcmVhdG9yU2VydmljZSArIFwiXFxcIlxcblx0XHRcdHZhciBpbnNfcmVjb3JkX2lkcyA9IFwiICsgKEpTT04uc3RyaW5naWZ5KGluc19yZWNvcmRfaWRzKSkgKyBcIlxcblx0XHRcdGlmKGNyZWF0b3JTZXJ2aWNlICYmIGluc19yZWNvcmRfaWRzICYmIGluc19yZWNvcmRfaWRzLmxlbmd0aCA+IDApe1xcblx0XHRcdFx0dmFyIG9iamNldE5hbWUgPSBpbnNfcmVjb3JkX2lkc1swXS5vXFxuXHRcdFx0XHR2YXIgaWQgPSBpbnNfcmVjb3JkX2lkc1swXS5pZHNbMF1cXG5cdFx0XHRcdHZhciB1b2JqID0ge307XFxuXHRcdFx0XHR1b2JqW1xcXCJYLVVzZXItSWRcXFwiXSA9IGdldENvb2tpZShcXFwiWC1Vc2VyLUlkXFxcIik7XFxuXHRcdFx0XHR1b2JqW1xcXCJYLUF1dGgtVG9rZW5cXFwiXSA9IGdldENvb2tpZShcXFwiWC1BdXRoLVRva2VuXFxcIik7XFxuXHRcdFx0XHRyZWRpcmVjdFVybCA9IGNyZWF0b3JTZXJ2aWNlICsgXFxcImFwcC8tL1xcXCIgKyBvYmpjZXROYW1lICsgXFxcIi92aWV3L1xcXCIgKyBpZCArIFxcXCI/XFxcIiArICQucGFyYW0odW9iaik7XFxuXHRcdFx0XHRvcGVuV2luZG93KHJlZGlyZWN0VXJsKTtcXG5cdFx0XHR9XFxuXHRcdH0pO1xcblx0fVxcblwiO1xuICBpZiAoIVN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuICAgIGlmICgoZm9ybSAhPSBudWxsID8gZm9ybS5pbnN0YW5jZV9zdHlsZSA6IHZvaWQgMCkgPT09ICd0YWJsZScpIHtcbiAgICAgIGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiO1xuICAgIH1cbiAgfVxuICBpZiAoKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMudGVtcGxhdGVOYW1lIDogdm9pZCAwKSA9PT0gJ3RhYmxlJykge1xuICAgIGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiO1xuICB9XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmluc3RhbmNlX3N0eWxlIDogdm9pZCAwKSB7XG4gICAgaW5zdGFuY2Vfc3R5bGUgPSBvcHRpb25zLmluc3RhbmNlX3N0eWxlO1xuICB9XG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnNob3dUcmFjZSA9PT0gdHJ1ZSkge1xuICAgIHRyYWNlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFRyYWNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZSA9IFwiXCI7XG4gIH1cbiAgaW5zdGFuY2VCb3hTdHlsZSA9IFwiXCI7XG4gIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5maW5hbF9kZWNpc2lvbikge1xuICAgIGlmIChpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICBpbnN0YW5jZUJveFN0eWxlID0gXCJib3gtc3VjY2Vzc1wiO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuZmluYWxfZGVjaXNpb24gPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgaW5zdGFuY2VCb3hTdHlsZSA9IFwiYm94LWRhbmdlclwiO1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPT09IHRydWUpIHtcbiAgICBhdHRhY2htZW50ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEF0dGFjaG1lbnRWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gICAgcmVsYXRlZF9pbnN0YW5jZXMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZEluc3RhbmNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgICByZWxhdGVkX3JlY29yZHMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgYXR0YWNobWVudCA9IFwiXCI7XG4gICAgcmVsYXRlZF9pbnN0YW5jZXMgPSBcIlwiO1xuICAgIHJlbGF0ZWRfcmVjb3JkcyA9IFwiXCI7XG4gIH1cbiAgd2lkdGggPSBcIjk2MHB4XCI7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLndpZHRoIDogdm9pZCAwKSB7XG4gICAgd2lkdGggPSBcIlwiO1xuICB9XG4gIGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJzdGVlZG9zLWNzc1wiKTtcbiAganFIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid2Vic2l0ZS9saWJzL2pxdWVyeS5taW4uanNcIik7XG4gIGFsbENzc0xpbmsgPSBcIjxsaW5rIHJlbD1cXFwic3R5bGVzaGVldFxcXCIgdHlwZT1cXFwidGV4dC9jc3NcXFwiIGNsYXNzPVxcXCJfX21ldGVvci1jc3NfX1xcXCIgaHJlZj1cXFwiXCIgKyBjc3NIcmVmICsgXCJcXFwiPlwiO1xuICB0cmFjZUNoZWNrID0gXCJcIjtcbiAgaWYgKCFfLmlzRW1wdHkodHJhY2UpKSB7XG4gICAgdHJhY2VDaGVjayA9IFwiY2hlY2tlZFwiO1xuICB9XG4gIGlmICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy50YWdnZXIgOiB2b2lkIDApID09PSAnZW1haWwnIHx8IChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmVkaXRhYmxlIDogdm9pZCAwKSkge1xuICAgIHNob3dUcmFjZXNCdG4gPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIHNob3dUcmFjZXNCdG4gPSBcIjxkaXYgY2xhc3M9XFxcIm5hdmlnYXRpb24tYmFyIGJ0bi1ncm91cCBuby1wcmludFxcXCIgc3R5bGU9XFxcIm1pbi13aWR0aDogNjAwcHg7IHotaW5kZXg6IDk5OTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiPlxcblx0PGRpdiBjbGFzcz1cXFwicHJpbnQtdG9vbFxcXCI+XFxuXHRcdDxsYWJlbCBjbGFzcz1cXFwiY2J4LWxhYmVsXFxcIj48aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIGNsYXNzPVxcXCJjYngtcHJpbnQgY2J4LXByaW50LWF0dGFjaG1lbnRzXFxcIiBpZD1cXFwiY2J4LXByaW50LWF0dGFjaG1lbnRzXFxcIiBjaGVja2VkPVxcXCJjaGVja2VkXFxcIj48c3Bhbj5cIiArIChUQVBpMThuLl9fKCdpbnN0YW5jZV9hdHRhY2htZW50Jywge30sIGxvY2FsZSkpICsgXCI8L3NwYW4+PC9sYWJlbD5cXG5cdFx0PGxhYmVsIGNsYXNzPVxcXCJjYngtbGFiZWxcXFwiPjxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgY2xhc3M9XFxcImNieC1wcmludCBjYngtcHJpbnQtdHJhY2VzXFxcIiBpZD1cXFwiY2J4LXByaW50LXRyYWNlc1xcXCIgY2hlY2tlZD1cXFwiXCIgKyB0cmFjZUNoZWNrICsgXCJcXFwiPjxzcGFuPlwiICsgKFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmFsX2hpc3RvcnknLCB7fSwgbG9jYWxlKSkgKyBcIjwvc3Bhbj48L2xhYmVsPlxcblx0PC9kaXY+XFxuPC9kaXY+XCI7XG4gIH1cbiAgc2hvd1RyYWNlc1NjcmlwdCA9IFwiJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpe1xcblx0dmFyIGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LXRyYWNlcycpO1xcblx0dmFyIHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnN0YW5jZS10cmFjZXMnKVswXTtcXG5cdGlmIChiICYmIGIuY2hlY2tlZCAmJiB0KXtcXG5cdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXFxuXHR9IGVsc2UgaWYodCl7XFxuXHRcdHQuc3R5bGUgPSAnZGlzcGxheTogbm9uZTsnXFxuXHR9XFxuXHRpZihiKXtcXG5cdFx0Yi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXtcXG5cdFx0XHRpZiAoZS50YXJnZXQuY2hlY2tlZCl7XFxuXHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcXG5cdFx0XHR9IGVsc2Uge1xcblx0XHRcdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBub25lOydcXG5cdFx0XHR9XFxuXHRcdH0pO1xcblx0fVxcblxcblxcblx0dmFyIGF0dGFjaG1lbnRzQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LWF0dGFjaG1lbnRzJyk7XFxuXHR2YXIgYXR0YWNobWVudHNWaWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0YWNobWVudHMtc2VjdGlvbicpWzBdO1xcblx0aWYgKGF0dGFjaG1lbnRzQ2hlY2tib3ggJiYgYXR0YWNobWVudHNDaGVja2JveC5jaGVja2VkICYmIGF0dGFjaG1lbnRzVmlldyl7XFxuXHRcdGF0dGFjaG1lbnRzVmlldy5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXFxuXHR9IGVsc2UgaWYoYXR0YWNobWVudHNWaWV3KXtcXG5cdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xcblx0fVxcblx0aWYoYXR0YWNobWVudHNDaGVja2JveCl7XFxuXHRcdGF0dGFjaG1lbnRzQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7XFxuXHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpe1xcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcXG5cdFx0XHR9IGVsc2Uge1xcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xcblx0XHRcdH1cXG5cdFx0fSk7XFxuXHR9XFxufSk7XFxuXCI7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLnN0eWxlcyA6IHZvaWQgMCkge1xuICAgIGFsbENzc0xpbmsgPSBcIlwiO1xuICB9XG4gIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICBfaWQ6IGluc3RhbmNlLmZvcm1cbiAgfSk7XG4gIGZvcm1EZXNjcmlwdGlvbkh0bWwgPSBcIlwiO1xuICBpZiAoZm9ybSkge1xuICAgIGZvcm1EZXNjcmlwdGlvbiA9IGZvcm0uZGVzY3JpcHRpb247XG4gICAgaWYgKGZvcm1EZXNjcmlwdGlvbikge1xuICAgICAgZm9ybURlc2NyaXB0aW9uID0gZm9ybURlc2NyaXB0aW9uLnJlcGxhY2UoL1xcbi9nLCBcIjxici8+XCIpO1xuICAgICAgZm9ybURlc2NyaXB0aW9uSHRtbCA9IFwiPGRpdiBjbGFzcz1cXFwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXIgaW5zdGFuY2UtaGVhZGVyXFxcIj5cXG5cdDxkaXY+XFxuXHRcdFwiICsgZm9ybURlc2NyaXB0aW9uICsgXCJcXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICAgIH1cbiAgfVxuICBodG1sID0gXCI8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG5cdDxoZWFkPlxcblx0XHQ8bWV0YSBodHRwLWVxdWl2PVxcXCJDb250ZW50LVR5cGVcXFwiIGNvbnRlbnQ9XFxcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFxcXCIvPlxcblx0XHRcIiArIGFsbENzc0xpbmsgKyBcIlxcblx0XHQ8c2NyaXB0IHNyYz1cXFwiXCIgKyBqcUhyZWYgKyBcIlxcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIj48L3NjcmlwdD5cXG5cdFx0PHNjcmlwdCBzcmM9XFxcIi9qcy9ud19jb3JlLmpzXFxcIiB0eXBlPVxcXCJ0ZXh0L2phdmFzY3JpcHRcXFwiPjwvc2NyaXB0Plxcblx0XHRcIiArIChvcHRpb25zLnBsdWdpbnMgfHwgXCJcIikgKyBcIlxcblxcblx0XHQ8c3R5bGU+XFxuXHRcdFx0LnN0ZWVkb3N7XFxuXHRcdFx0XHR3aWR0aDogXCIgKyB3aWR0aCArIFwiO1xcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IGF1dG87XFxuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87XFxuXHRcdFx0fVxcblxcblx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS1uYW1le1xcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnRcXG5cdFx0XHR9XFxuXHRcdFx0LmJveC10b29sc3tcXG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XFxuXHRcdFx0fVxcblx0XHRcdC5ib3guY29sbGFwc2VkLWJveCAuYm94LWJvZHksLmJveC5jb2xsYXBzZWQtYm94IC5ib3gtZm9vdGVyIHtcXG5cdFx0XHQgIGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cXG5cdFx0XHRib2R5e1xcblx0XHRcdFx0YmFja2dyb3VuZDogYXp1cmUgIWltcG9ydGFudDtcXG5cdFx0XHR9XFxuXFxuXHRcdFx0Lmluc3RhbmNlLXZpZXcgLmluc3RhbmNlLXRyYWNlc3tcXG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMTVweDtcXG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDE1cHg7XFxuXHRcdFx0fVxcblxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtIHtcXG5cdFx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1JbWFnZUNvbnRyb2wtYWRkQnRuLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcXG5cdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG5cdFx0XHRtYXJnaW4tcmlnaHQ6IHZhcigtLWdhcC1iYXNlKTtcXG5cdFx0XHRtYXJnaW4tYm90dG9tOiB2YXIoLS1nYXAtYmFzZSk7XFxuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblx0XHRcdHdpZHRoOiA3LjVyZW07XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtLmlzLWludmFsaWQge1xcblx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1GaWxlQ29udHJvbC1kYW5nZXItY29sb3IpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBzdmcuaWNvbi1yZWZyZXNoIHtcXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZmlsZW5hbWUge1xcblx0XHRcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xcblx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cdFx0XHRjb2xvcjogdmFyKC0tRmlsZUNvbnRyb2wtZGFuZ2VyLWNvbG9yKTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpbGVuYW1lID4gc3ZnLmljb24taW1hZ2Uge1xcblx0XHRcdG1hcmdpbi1ib3R0b206IDhweDtcXG5cdFx0XHR3aWR0aDogMjRweDtcXG5cdFx0XHRoZWlnaHQ6IDI0cHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maWxlbmFtZSA+IHNwYW4ge1xcblx0XHRcdG1heC13aWR0aDogMTAwJTtcXG5cdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xcblx0XHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXHRcdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pbWFnZSB7XFxuXHRcdFx0d2lkdGg6IDEwMCU7XFxuXHRcdFx0aGVpZ2h0OiAxMDAlO1xcblx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0Ym9yZGVyOiBub25lO1xcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcXG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xcblx0XHRcdGNvbG9yOiAjOTk5O1xcblx0XHRcdHRvcDogNXB4O1xcblx0XHRcdHJpZ2h0OiA1cHg7XFxuXHRcdFx0bGluZS1oZWlnaHQ6IDE7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIgPiBzdmcge1xcblx0XHRcdHRvcDogMDtcXG5cdFx0XHR3aWR0aDogMTBweDtcXG5cdFx0XHRoZWlnaHQ6IDEwcHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtSW5mbyB7XFxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XFxuXHRcdFx0d2lkdGg6IDExMHB4O1xcblx0XHRcdGhlaWdodDogMTEwcHg7XFxuXHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cdFx0XHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0ZmxleC13cmFwOiB3cmFwO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUluZm8gPiBwIHtcXG5cdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XFxuXHRcdFx0Zm9udC1zaXplOiAxMnB4O1xcblx0XHRcdG1hcmdpbi1ib3R0b206IDVweDtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXByb2dyZXNzIHtcXG5cdFx0XHR3aWR0aDogNzBweDtcXG5cdFx0XHRoZWlnaHQ6IDVweDtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZWJlYmViO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3NWYWx1ZSB7XFxuXHRcdFx0aGVpZ2h0OiA1cHg7XFxuXHRcdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tSW1hZ2VDb250cm9sLXByb2dyZXNzLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0ZGlzcGxheTogYmxvY2s7XFxuXHRcdFx0YmFja2dyb3VuZDogdmFyKC0taW5mbyk7XFxuXHRcdFx0bWluLXdpZHRoOiAxMCU7XFxuXHRcdFx0dHJhbnNpdGlvbjogZWFzZS1vdXQgd2lkdGggdmFyKC0tYW5pbWF0aW9uLWR1cmF0aW9uKTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0uaXMtaW52YWxpZCAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcXG5cdFx0XHRkaXNwbGF5OiBub25lO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbS5pcy1pbnZhbGlkOmhvdmVyIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZXJyb3JNc2cge1xcblx0XHRcdGNvbG9yOiB2YXIoLS1kYW5nZXIpO1xcblx0XHRcdG1hcmdpbjogNXB4IDAgMDtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXVwbG9hZEJ0biB7XFxuXHRcdFx0bWFyZ2luLXRvcDogNXB4O1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcHBlcldyYXBwZXIge1xcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWNyb3BwZXJXcmFwcGVyIGltZyB7XFxuXHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xcblx0XHRcdG1heC1oZWlnaHQ6IDQwMHB4O1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciB7XFxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XFxuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xcblx0XHRcdHJpZ2h0OiAwO1xcblx0XHRcdGJvdHRvbTogMDtcXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblx0XHRcdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xcblx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcXG5cdFx0XHRtYXJnaW46IDAuNXJlbTtcXG5cdFx0XHRib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciA+IGEge1xcblx0XHRcdGNvbG9yOiB2YXIoLS1Gb3JtLWl0ZW0tZm9udENvbG9yKTtcXG5cdFx0XHRwYWRkaW5nOiAycHggNXB4O1xcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcXG5cdFx0XHRmb250LXNpemU6IDE4cHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyID4gYTpob3ZlciB7XFxuXHRcdFx0Y29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtYWNjZXB0VGlwIHtcXG5cdFx0XHRoZWlnaHQ6IDEyMHB4O1xcblx0XHRcdGNvbG9yOiAjOTk5O1xcblx0XHRcdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXJDb2xvcik7XFxuXHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvKTtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZjNmOWZlO1xcblx0XHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0bGluZS1oZWlnaHQ6IDEyMHB4O1xcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpeGVkLXNpemUge1xcblx0XHRcdHdpZHRoOiAxMDAlO1xcblx0XHRcdGhlaWdodDogMTAwJTtcXG5cdFx0XHRwYWRkaW5nOiAwO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbU92ZXJsYXkge1xcblx0XHRcdHdpZHRoOiAxMDAlO1xcblx0XHRcdGhlaWdodDogMTAwJTtcXG5cdFx0XHR9XFxuXFxuXHRcdFx0LmFudGQtSW1hZ2VzIHtcXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XFxuXHRcdFx0XHRmbGV4LXdyYXA6IHdyYXA7XFxuXHRcdFx0XHRtYXJnaW46IGNhbGModmFyKC0tZ2FwLXhzKSAqIC0xKTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlcy1pdGVtIHtcXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XFxuXHRcdFx0XHRtYXJnaW46IHZhcigtLWdhcC14cyk7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZSB7XFxuXHRcdFx0XHRib3JkZXI6IHZhcigtLWJvcmRlcldpZHRoKSBzb2xpZCB2YXIoLS1ib3JkZXJDb2xvcik7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS0tdGh1bWIge1xcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcblx0XHRcdFx0cGFkZGluZzogdmFyKC0tZ2FwLXhzKTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iV3JhcCB7XFxuXHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS1pbWFnZSB7XFxuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLWltYWdlLS1sb2FkaW5nIHtcXG5cdFx0XHRcdHZpc2liaWxpdHk6IGhpZGRlbjtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLS1vcmlnaW5hbCAuYW50ZC1JbWFnZS1pbWFnZSB7XFxuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMCU7XFxuXHRcdFx0XHRtYXgtaGVpZ2h0OiAxMDAlO1xcblx0XHRcdFx0d2lkdGg6IGF1dG87XFxuXHRcdFx0XHRtYXJnaW46IGF1dG87XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYiB7XFxuXHRcdFx0XHR3aWR0aDogNi44NzVyZW07XFxuXHRcdFx0XHRoZWlnaHQ6IDYuODc1cmVtO1xcblx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblx0XHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iID4gaW1nIHtcXG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cdFx0XHRcdGxlZnQ6IDUwJTtcXG5cdFx0XHRcdHRvcDogNTAlO1xcblx0XHRcdFx0bWF4LWhlaWdodDogMTAwJTtcXG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xcblx0XHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS1pbmZvIHtcXG5cdFx0XHRcdHBhZGRpbmc6IDVweCAxMHB4O1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtLXRodW1iIC5hbnRkLUltYWdlLWluZm8ge1xcblx0XHRcdFx0d2lkdGg6IDYuODc1cmVtO1xcblx0XHRcdFx0cGFkZGluZzogMDtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS00LTMge1xcblx0XHRcdFx0aGVpZ2h0OiA1LjE1NjI1cmVtO1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLTE2LTkge1xcblx0XHRcdFx0aGVpZ2h0OiAzLjg2NzE4NzVyZW07XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSB7XFxuXHRcdFx0XHRtaW4td2lkdGg6IDYuODc1cmVtO1xcblx0XHRcdFx0bWluLWhlaWdodDogNi44NzVyZW07XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0XHRoZWlnaHQ6IDEwMCU7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZS10aHVtYiB7XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIC5hbnRkLUltYWdlLXRodW1iID4gaW1nIHtcXG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLXctZnVsbCA+IGltZyB7XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdGhlaWdodDogYXV0bztcXG5cdFx0XHRcdH1cXG5cXG5cdFx0XHRcIiArICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5zdHlsZXMgOiB2b2lkIDApIHx8IFwiXCIpICsgXCJcXG5cXG5cdFx0XHRcIiArICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5hZGRfc3R5bGVzIDogdm9pZCAwKSB8fCBcIlwiKSArIFwiXFxuXHRcdDwvc3R5bGU+XFxuXHQ8L2hlYWQ+XFxuXHQ8Ym9keT5cXG5cdFx0PGRpdiBjbGFzcz1cXFwic3RlZWRvcyB3b3JrZmxvdyBpbnN0YW5jZS1wcmludFxcXCI+XFxuXHRcdFx0PGRpdiBjbGFzcz1cXFwic2tpbi1ncmVlbiBza2luLWFkbWluLWx0ZVxcXCI+XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJ3cmFwcGVyXFxcIj5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiY29udGVudC13cmFwcGVyXFxcIj5cXG5cdFx0XHRcdFx0XHRcIiArIHNob3dUcmFjZXNCdG4gKyBcIlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImluc3RhbmNlLXByaW50XFxcIj5cXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImluc3RhbmNlIFwiICsgaW5zdGFuY2Vfc3R5bGUgKyBcIlxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDxmb3JtIG5hbWU9XFxcImluc3RhbmNlRm9ybVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiaW5zdGFuY2UtZm9ybSBib3ggXCIgKyBpbnN0YW5jZUJveFN0eWxlICsgXCJcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyBmb3JtRGVzY3JpcHRpb25IdG1sICsgXCJcXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImJveC1ib2R5XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIiBzdHlsZT1cXFwiYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2F0dGFjaG1lbnRzLXNlY3Rpb24nPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyBhdHRhY2htZW50ICsgXCJcXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiICsgcmVsYXRlZF9pbnN0YW5jZXMgKyBcIlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyByZWxhdGVkX3JlY29yZHMgKyBcIlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiICsgYm9keSArIFwiXFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdDwvZm9ybT5cXG5cdFx0XHRcdFx0XHRcdFx0XCIgKyB0cmFjZSArIFwiXFxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXHQ8L2JvZHk+XFxuXHQ8c2NyaXB0PlwiICsgb3BlbkZpbGVTY3JpcHQgKyBcIjtcIiArIG9uTG9hZFNjcmlwdCArIFwiO1wiICsgc2hvd1RyYWNlc1NjcmlwdCArIFwiPC9zY3JpcHQ+XFxuPC9odG1sPlwiO1xuICByZXR1cm4gaHRtbDtcbn07XG4iLCJUZW1wbGF0ZU1hbmFnZXIgPSB7fTtcblxuZm9ybUlkID0gJ2luc3RhbmNlZm9ybSc7XG5cblxuVGVtcGxhdGVNYW5hZ2VyLmluc3RhbmNlX3RpdGxlID0gKCktPlxuXHRwYWdlVGl0bGUgPSBcIlwiXCJcblx0XHR7e2luc3RhbmNlLm5hbWV9fVxuXHRcIlwiXCJcblxuXHRwYWdlVGl0bGVUckNsYXNzID0gXCJpbnN0YW5jZS1uYW1lXCJcblxuXHRpZiBDb3JlRm9ybT8ucGFnZVRpdGxlRmllbGROYW1lXG5cdFx0cGFnZVRpdGxlID0gXCJcIlwiXG5cdFx0XHRcdHt7PiBhZkZvcm1Hcm91cCBuYW1lPVwiI3tDb3JlRm9ybS5wYWdlVGl0bGVGaWVsZE5hbWV9XCIgbGFiZWw9ZmFsc2V9fVxuXHRcdFwiXCJcIlxuXHRcdHBhZ2VUaXRsZVRyQ2xhc3MgPSBcIlwiXG5cblx0aWYgQ29yZUZvcm0/LnBhZ2VUaXRsZVxuXHRcdHBhZ2VUaXRsZSA9IFwiXCJcIlxuXHRcdFx0I3tDb3JlRm9ybS5wYWdlVGl0bGV9XG5cdFx0XCJcIlwiXG5cdFx0cGFnZVRpdGxlVHJDbGFzcyA9IFwiXCJcblxuXHR2YWwgPVxuXHRcdHBhZ2VUaXRsZTogcGFnZVRpdGxlXG5cdFx0cGFnZVRpdGxlVHJDbGFzczogcGFnZVRpdGxlVHJDbGFzc1xuXG5cdHJldHVybiB2YWxcblxuVGVtcGxhdGVNYW5hZ2VyLmhhbmRsZVRhYmxlVGVtcGxhdGUgPSAoaW5zdGFuY2UsIF9leHBvcnQpIC0+XG5cblx0dGVtcGxhdGUgPSBcIlwiXCJcblx0PGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlxuXHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2UtdGl0bGUgZm9ybS10YWJsZSBuby1ib3JkZXIgdGV4dC1hbGlnbi1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcIj5cblx0XHRcdDx0ciBjbGFzcz1cIiN7dGhpcy5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZVRyQ2xhc3N9XCI+XG5cdFx0XHRcdDx0ZCBjbGFzcz1cImluc3RhbmNlLXRhYmxlLW5hbWUtdGQgcGFnZS10aXRsZVwiPlxuXHRcdFx0XHRcdCN7dGhpcy5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZX1cblx0XHRcdFx0PC90ZD5cblx0XHRcdDwvdHI+XG5cblx0XHQ8L3RhYmxlPlxuXHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2UtYm9keSBmb3JtLXRhYmxlXCI+XG5cdFx0XHRcdDx0ciBzdHlsZT1cImhlaWdodDowcHhcIj5cblx0XHRcdFx0XHQ8dGggc3R5bGU9J3dpZHRoOiAxNiUnPjwvdGg+XG5cdFx0XHRcdFx0PHRoPjwvdGg+XG5cdFx0XHRcdFx0PHRoIHN0eWxlPSd3aWR0aDogMTYlJz48L3RoPlxuXHRcdFx0XHRcdDx0aD48L3RoPlxuXHRcdFx0XHQ8L3RyPlxuXHRcIlwiXCI7XG5cblx0dGFibGVfZmllbGRzID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy50YWJsZV9maWVsZHMoaW5zdGFuY2UpXG5cblx0dGFibGVfZmllbGRzICYmIHRhYmxlX2ZpZWxkcy5mb3JFYWNoICh0YWJsZV9maWVsZCktPlxuXG5cdFx0cmVxdWlyZWQgPSBcIlwiXG5cdFx0aWYgIUNvcmVGb3JtPy5wYWdlVGl0bGVGaWVsZE5hbWUgfHwgQ29yZUZvcm0/LnBhZ2VUaXRsZUZpZWxkTmFtZSAhPSB0YWJsZV9maWVsZC5jb2RlXG5cdFx0XHRpZiB0YWJsZV9maWVsZC5pc19yZXF1aXJlZFxuXHRcdFx0XHRyZXF1aXJlZCA9IFwiaXMtcmVxdWlyZWRcIlxuXG5cdFx0XHRpZiBfZXhwb3J0XG5cdFx0XHRcdHJlcXVpcmVkID0gXCJcIjtcblxuXHRcdFx0cHVyZUNvZGUgPSBTdGVlZG9zLnJlbW92ZVNwZWNpYWxDaGFyYWN0ZXIodGFibGVfZmllbGQuY29kZSk7XG5cblx0XHRcdGlmIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGQodGFibGVfZmllbGQpXG5cdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0XG5cdFx0XHRcdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdFx0XHRcdDx0ZCBjbGFzcz1cInRkLXRpdGxlICN7cmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIn19XG5cdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCBvcGluaW9uLWZpZWxkIG9waW5pb24tZmllbGQtI3twdXJlQ29kZX0gYXV0b21hdGljXCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0e3s+IGluc3RhbmNlU2lnblRleHQgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIn19XG5cdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XCJcIlwiXG5cdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRpZiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluY2x1ZGVzKHRhYmxlX2ZpZWxkLnR5cGUsICdzZWN0aW9uLHRhYmxlJylcblx0XHRcdFx0XHR0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9zdGFydFxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtY2hpbGRmaWVsZCB0ZC1jaGlsZGZpZWxkLSN7cHVyZUNvZGV9XCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0ICAge3s+IGFmRm9ybUdyb3VwIG5hbWU9XCIje3RhYmxlX2ZpZWxkLmNvZGV9XCIgbGFiZWw9ZmFsc2V9fVxuXHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0XHR0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9lbmRcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0XG5cblx0XHRcdFx0XHRpZiBfZXhwb3J0XG5cdFx0XHRcdFx0XHR0aXRsZV9wZXJtaXNzaW9uID0gXCJcIlxuXHRcdFx0XHRcdFx0ZmllbGRfcGVybWlzc2lvbiA9IFwiXCJcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0aXRsZV9wZXJtaXNzaW9uID0gXCJ0aXRsZS1cIiArIHRhYmxlX2ZpZWxkLnBlcm1pc3Npb25cblx0XHRcdFx0XHRcdGZpZWxkX3Blcm1pc3Npb24gPSBcImZpZWxkLVwiICsgdGFibGVfZmllbGQucGVybWlzc2lvblxuXG5cdFx0XHRcdFx0dGVtcGxhdGUgKz0gXCJcIlwiXG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC10aXRsZSB0ZC10aXRsZS0je3B1cmVDb2RlfSAje3RpdGxlX3Blcm1pc3Npb259ICN7cmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHRcdHt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPVwiI3t0YWJsZV9maWVsZC5jb2RlfVwifX1cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCB0ZC1maWVsZC0je3B1cmVDb2RlfSAje2ZpZWxkX3Blcm1pc3Npb259XCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIiBsYWJlbD1mYWxzZX19XG5cdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZFxuXG5cdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdDwvdGFibGU+XG5cblx0XHQ8dGFibGUgY2xhc3M9XCJ0YWJsZS1wYWdlLWZvb3RlciBmb3JtLXRhYmxlIG5vLWJvcmRlclwiPlxuXHRcdFx0PHRyIGNsYXNzPVwiYXBwbGljYW50LXdyYXBwZXJcIj5cblx0XHRcdFx0PHRkIGNsYXNzPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5saW5lLWxlZnQnPlxuXHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7X3QgXCJpbnN0YW5jZV9pbml0aWF0b3JcIn1977yaPC9sYWJlbD5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkIGlubGluZS1sZWZ0Jz5cblx0XHRcdFx0XHRcdHt7PlRlbXBsYXRlLmR5bmFtaWMgIHRlbXBsYXRlPVwiYWZTZWxlY3RVc2VyXCIgZGF0YT1hcHBsaWNhbnRDb250ZXh0fX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC90ZD5cblx0XHRcdFx0PHRkIGNsYXNzPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0ncHVsbC1sZWZ0Jz5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2lubGluZS1sZWZ0Jz5cblx0XHRcdFx0XHRcdFx0PGxhYmVsPnt7X3QgXCJpbnN0YW5jZV9zdWJtaXRfZGF0ZVwifX3vvJo8L2xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbmxpbmUtcmlnaHQnPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdHt7Zm9ybWF0RGF0ZSBpbnN0YW5jZS5zdWJtaXRfZGF0ZSAne1wiZm9ybWF0XCI6XCJZWVlZLU1NLUREXCJ9J319XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvdGQ+XG5cdFx0XHQ8L3RyPlxuXHRcdDwvdGFibGU+XG5cdDwvZGl2PlxuXHRcIlwiXCJcblx0cmV0dXJuIHRlbXBsYXRlXG5cbiPmraTlpITmqKHmnb/lhaznlKjkuI7vvJppbnN0YW5jZSDnvJbovpHjgIHmn6XnnIvjgIHmiZPljbDjgIHovazlj5Hml7bnlJ/miJDpmYTku7bjgIHlj5HpgIHpgq7ku7Zib2R56YOo5YiGKHRhYmxlIOaooeadvylcbiPlpoLmnpzmnInkv67mlLnvvIzor7fmtYvor5Xnoa7orqTlhbbku5blip/og73mmK/lkKbmraPluLjjgIJcblRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUgPVxuXHRkZWZhdWx0OiAoaW5zdGFuY2UpLT5cblxuXHRcdHRlbXBsYXRlID0gXCJcIlwiXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid2l0aC1ib3JkZXIgY29sLW1kLTEyXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnN0YW5jZS1uYW1lXCI+XG5cdFx0XHRcdFx0PGgzIGNsYXNzPVwiYm94LXRpdGxlXCI+I3tUZW1wbGF0ZU1hbmFnZXIuaW5zdGFuY2VfdGl0bGUoKS5wYWdlVGl0bGV9PC9oMz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImhlbHAtYmxvY2tcIj48L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImhlbHAtYmxvY2tcIj48L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHt7I2VhY2ggc3RlZWRvc19mb3JtLmZpZWxkc319XG5cdFx0XHRcdHt7I2lmIGlzT3BpbmlvbkZpZWxkIHRoaXN9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGF1dG9tYXRpYyBvcGluaW9uLWZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPXRoaXMuY29kZX19PC9sYWJlbD5cblxuXHRcdFx0XHRcdFx0XHR7ez4gaW5zdGFuY2VTaWduVGV4dCBuYW1lPXRoaXMuY29kZX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgZmllbGQte3t0aGlzLmNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdHt7PiBhZkZvcm1Hcm91cCBuYW1lPXRoaXMuY29kZX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7ey9pZn19XG5cdFx0XHRcdHt7L2lmfX1cblx0XHRcdHt7L2VhY2h9fVxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYXBwbGljYW50LXdyYXBwZXIgZm9ybS1ncm91cCBmb3JtLWhvcml6b250YWxcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+XG5cdFx0XHRcdFx0ICB7e190IFwiaW5zdGFuY2VfaW5pdGlhdG9yXCJ9fSZuYnNwOzpcblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cImFmU2VsZWN0VXNlclwiIGRhdGE9YXBwbGljYW50Q29udGV4dH19XG5cdFx0XHRcdCAgPC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XCJcIlwiXG5cdFx0cmV0dXJuIHRlbXBsYXRlXG5cblx0dGFibGU6IChpbnN0YW5jZSktPlxuXHRcdHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuaGFuZGxlVGFibGVUZW1wbGF0ZShpbnN0YW5jZSlcbiNcdHRhYmxlOiAnJydcbiNcdFx0PHRhYmxlIGNsYXNzPVwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcIj5cbiNcdFx0XHQ8dHIgY2xhc3M9XCJpbnN0YW5jZS1uYW1lXCI+XG4jXHRcdFx0XHQ8dGQgY2xhc3M9XCJpbnN0YW5jZS10YWJsZS1uYW1lLXRkXCI+XG4jXHRcdFx0XHRcdDxoMyBjbGFzcz1cImJveC10aXRsZVwiPnt7aW5zdGFuY2UubmFtZX19PC9oMz5cbiNcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJoZWxwLWJsb2NrXCI+PC9zcGFuPlxuI1x0XHRcdFx0PC90ZD5cbiNcdFx0XHQ8L3RyPlxuIyAgICAgICAgICAgIDx0ciBjbGFzcz1cImFwcGxpY2FudC13cmFwcGVyXCI+XG4jXHRcdFx0XHQ8dGQgY2xhc3M9XCJpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkXCI+XG4jXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e190IFwiaW5zdGFuY2VfaW5pdGlhdG9yXCJ9fSZuYnNwOzo8L2xhYmVsPlxuI1x0XHRcdFx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cImFmU2VsZWN0VXNlclwiIGRhdGE9YXBwbGljYW50Q29udGV4dH19XG4jXHRcdFx0XHQ8L3RkPlxuI1x0XHRcdDwvdHI+XG4jICAgICAgICA8L3RhYmxlPlxuI1x0XHQ8dGFibGUgY2xhc3M9XCJmb3JtLXRhYmxlXCI+XG4jXHRcdCAgICB7eyNlYWNoIHRhYmxlX2ZpZWxkc319XG4jXHRcdFx0XHR7eyNpZiBpc09waW5pb25GaWVsZCB0aGlzfX1cbiNcdFx0XHRcdFx0e3t7dHJfc3RhcnR9fX1cbiNcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC10aXRsZSB7eyNpZiBpc19yZXF1aXJlZH19aXMtcmVxdWlyZWR7ey9pZn19XCI+XG4jXHRcdFx0XHRcdFx0XHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT10aGlzLmNvZGV9fVxuI1x0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtZmllbGQgb3Bpbmlvbi1maWVsZFwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0e3s+IGluc3RhbmNlU2lnblRleHQgc3RlcD0oZ2V0T3BpbmlvbkZpZWxkU3RlcE5hbWUgdGhpcykgZGVmYXVsdD0nJ319XG4jXHRcdFx0XHRcdFx0PC90ZD5cbiNcdFx0XHRcdFx0e3t7dHJfZW5kfX19XG4jXHRcdFx0XHR7e2Vsc2V9fVxuI1x0XHRcdFx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cbiNcdFx0XHRcdFx0XHR7e3t0cl9zdGFydH19fVxuI1x0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtY2hpbGRmaWVsZFwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0ICAge3s+IGFmRm9ybUdyb3VwIG5hbWU9dGhpcy5jb2RlIGxhYmVsPWZhbHNlfX1cbiNcdFx0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0e3t7dHJfZW5kfX19XG4jXHRcdFx0XHRcdHt7ZWxzZX19XG4jXHRcdFx0XHRcdFx0e3t7dHJfc3RhcnR9fX1cbiNcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cInRkLXRpdGxlIHt7I2lmIGlzX3JlcXVpcmVkfX1pcy1yZXF1aXJlZHt7L2lmfX1cIj5cbiNcdFx0XHRcdFx0XHRcdFx0e3thZkZpZWxkTGFiZWxUZXh0IG5hbWU9dGhpcy5jb2RlfX1cbiNcdFx0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCB7e3Blcm1pc3Npb259fVwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxuI1x0XHRcdFx0XHRcdFx0PC90ZD5cbiNcdFx0XHRcdFx0XHR7e3t0cl9lbmR9fX1cbiNcdFx0XHRcdFx0e3svaWZ9fVxuI1x0XHRcdFx0e3svaWZ9fVxuI1xuI1x0XHQgICAge3svZWFjaH19XG4jXHRcdDwvdGFibGU+XG4jXHQnJydcblxuVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZUhlbHBzID1cblx0YXBwbGljYW50Q29udGV4dDogLT5cblx0XHRzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0ZGF0YSA9IHtcblx0XHRcdG5hbWU6ICdpbnNfYXBwbGljYW50Jyxcblx0XHRcdGF0dHM6IHtcblx0XHRcdFx0bmFtZTogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0XHRpZDogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0XHRjbGFzczogJ3NlbGVjdFVzZXIgZm9ybS1jb250cm9sJyxcblx0XHRcdFx0c3R5bGU6ICdwYWRkaW5nOjZweCAxMnB4O3dpZHRoOjE0MHB4O2Rpc3BsYXk6aW5saW5lJ1xuXHRcdFx0fVxuXHRcdH1cbiNcdFx0aWYgbm90IHN0ZWVkb3NfaW5zdGFuY2UgfHwgc3RlZWRvc19pbnN0YW5jZS5zdGF0ZSAhPSBcImRyYWZ0XCJcblx0XHRkYXRhLmF0dHMuZGlzYWJsZWQgPSB0cnVlXG5cdFx0cmV0dXJuIGRhdGE7XG5cbmluc3RhbmNlSWQ6IC0+XG5cdHJldHVybiAnaW5zdGFuY2Vmb3JtJzsjXCJpbnN0YW5jZV9cIiArIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKTtcblxuZm9ybV90eXBlczogLT5cblx0aWYgQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cdFx0cmV0dXJuICdkaXNhYmxlZCc7XG5cdGVsc2Vcblx0XHRyZXR1cm4gJ21ldGhvZCc7XG5cbnN0ZWVkb3NfZm9ybTogLT5cblx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0cmV0dXJuIGZvcm1fdmVyc2lvblxuXG5pbm5lcnN1YmZvcm1Db250ZXh0OiAob2JqKS0+XG5cdGRvY192YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cdG9ialtcInRhYmxlVmFsdWVzXCJdID0gaWYgZG9jX3ZhbHVlcyB0aGVuIGRvY192YWx1ZXNbb2JqLmNvZGVdIGVsc2UgW11cblx0b2JqW1wiZm9ybUlkXCJdID0gZm9ybUlkO1xuXHRyZXR1cm4gb2JqO1xuXG5pbnN0YW5jZTogLT5cblx0U2Vzc2lvbi5nZXQoXCJjaGFuZ2VfZGF0ZVwiKVxuXHRpZiAoU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpKVxuXHRcdHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRyZXR1cm4gc3RlZWRvc19pbnN0YW5jZTtcblxuZXF1YWxzOiAoYSwgYikgLT5cblx0cmV0dXJuIChhID09IGIpXG5cbmluY2x1ZGVzOiAoYSwgYikgLT5cblx0cmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcblxuZmllbGRzOiAtPlxuXHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXHRpZiBmb3JtX3ZlcnNpb25cblx0XHRyZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuXG5kb2NfdmFsdWVzOiAtPlxuXHRXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cbmluc3RhbmNlX2JveF9zdHlsZTogLT5cblx0Ym94ID0gU2Vzc2lvbi5nZXQoXCJib3hcIilcblx0aWYgYm94ID09IFwiaW5ib3hcIiB8fCBib3ggPT0gXCJkcmFmdFwiXG5cdFx0anVkZ2UgPSBTZXNzaW9uLmdldChcImp1ZGdlXCIpXG5cdFx0aWYganVkZ2Vcblx0XHRcdGlmIChqdWRnZSA9PSBcImFwcHJvdmVkXCIpXG5cdFx0XHRcdHJldHVybiBcImJveC1zdWNjZXNzXCJcblx0XHRcdGVsc2UgaWYgKGp1ZGdlID09IFwicmVqZWN0ZWRcIilcblx0XHRcdFx0cmV0dXJuIFwiYm94LWRhbmdlclwiXG5cdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRpZiBpbnMgJiYgaW5zLmZpbmFsX2RlY2lzaW9uXG5cdFx0aWYgaW5zLmZpbmFsX2RlY2lzaW9uID09IFwiYXBwcm92ZWRcIlxuXHRcdFx0cmV0dXJuIFwiYm94LXN1Y2Nlc3NcIlxuXHRcdGVsc2UgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRyZXR1cm4gXCJib3gtZGFuZ2VyXCJcblxuXG5UZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUgPSAoaW5zdGFuY2UsIHRlbXBsYXRlTmFtZSkgLT5cblx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoaW5zdGFuY2UuZmxvdyk7XG5cdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuXG5cdGlmIHRlbXBsYXRlTmFtZVxuXHRcdGlmIHRlbXBsYXRlTmFtZSA9PSAndGFibGUnXG5cdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS5kZWZhdWx0KGluc3RhbmNlKVxuXG5cdGlmIFNlc3Npb24/LmdldChcImluc3RhbmNlUHJpbnRcIilcblx0XHRpZiBmbG93Py5wcmludF90ZW1wbGF0ZVxuXHRcdFx0cmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5wcmludF90ZW1wbGF0ZSArIFwiPC9kaXY+XCJcblx0XHRlbHNlXG5cdFx0XHRpZiBmbG93Py5pbnN0YW5jZV90ZW1wbGF0ZVxuXHRcdFx0XHRyZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS10ZW1wbGF0ZSc+XCIgKyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlICsgXCI8L2Rpdj5cIlxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0ZWxzZVxuXHRcdGlmIFN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdFx0cmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUuZGVmYXVsdChpbnN0YW5jZSlcblxuXHRcdGlmIGZsb3c/Lmluc3RhbmNlX3RlbXBsYXRlXG5cdFx0XHRyZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS10ZW1wbGF0ZSc+XCIgKyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlICsgXCI8L2Rpdj5cIlxuXG5cdFx0aWYgZm9ybT8uaW5zdGFuY2Vfc3R5bGVcblx0XHRcdGlmIGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT0gJ3RhYmxlJ1xuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0XHRcdHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlLmRlZmF1bHQoaW5zdGFuY2UpXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUuZGVmYXVsdChpbnN0YW5jZSlcblxuI1RlbXBsYXRlTWFuYWdlci5leHBvcnRUZW1wbGF0ZSA9IChmbG93SWQpIC0+XG4jXHR0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXRUZW1wbGF0ZShmbG93SWQpO1xuI1xuI1x0ZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRGbG93KGZsb3dJZCk7XG4jXG4jXHRpZiBmbG93Py5pbnN0YW5jZV90ZW1wbGF0ZVxuI1x0XHRyZXR1cm4gdGVtcGxhdGU7XG4jXG4jXHRyZXR1cm4gdGVtcGxhdGU7XG5cbiIsInZhciBmb3JtSWQ7ICAgICAgICAgICAgICAgICBcblxuVGVtcGxhdGVNYW5hZ2VyID0ge307XG5cbmZvcm1JZCA9ICdpbnN0YW5jZWZvcm0nO1xuXG5UZW1wbGF0ZU1hbmFnZXIuaW5zdGFuY2VfdGl0bGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhZ2VUaXRsZSwgcGFnZVRpdGxlVHJDbGFzcywgdmFsO1xuICBwYWdlVGl0bGUgPSBcInt7aW5zdGFuY2UubmFtZX19XCI7XG4gIHBhZ2VUaXRsZVRyQ2xhc3MgPSBcImluc3RhbmNlLW5hbWVcIjtcbiAgaWYgKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkge1xuICAgIHBhZ2VUaXRsZSA9IFwie3s+IGFmRm9ybUdyb3VwIG5hbWU9XFxcIlwiICsgQ29yZUZvcm0ucGFnZVRpdGxlRmllbGROYW1lICsgXCJcXFwiIGxhYmVsPWZhbHNlfX1cIjtcbiAgICBwYWdlVGl0bGVUckNsYXNzID0gXCJcIjtcbiAgfVxuICBpZiAodHlwZW9mIENvcmVGb3JtICE9PSBcInVuZGVmaW5lZFwiICYmIENvcmVGb3JtICE9PSBudWxsID8gQ29yZUZvcm0ucGFnZVRpdGxlIDogdm9pZCAwKSB7XG4gICAgcGFnZVRpdGxlID0gXCJcIiArIENvcmVGb3JtLnBhZ2VUaXRsZTtcbiAgICBwYWdlVGl0bGVUckNsYXNzID0gXCJcIjtcbiAgfVxuICB2YWwgPSB7XG4gICAgcGFnZVRpdGxlOiBwYWdlVGl0bGUsXG4gICAgcGFnZVRpdGxlVHJDbGFzczogcGFnZVRpdGxlVHJDbGFzc1xuICB9O1xuICByZXR1cm4gdmFsO1xufTtcblxuVGVtcGxhdGVNYW5hZ2VyLmhhbmRsZVRhYmxlVGVtcGxhdGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgX2V4cG9ydCkge1xuICB2YXIgdGFibGVfZmllbGRzLCB0ZW1wbGF0ZTtcbiAgdGVtcGxhdGUgPSBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXRlbXBsYXRlJz5cXG5cdDx0YWJsZSBjbGFzcz1cXFwidGFibGUtcGFnZS10aXRsZSBmb3JtLXRhYmxlIG5vLWJvcmRlciB0ZXh0LWFsaWduLWNlbnRlclxcXCIgc3R5bGU9XFxcIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcXFwiPlxcblx0XHQ8dHIgY2xhc3M9XFxcIlwiICsgKHRoaXMuaW5zdGFuY2VfdGl0bGUoKS5wYWdlVGl0bGVUckNsYXNzKSArIFwiXFxcIj5cXG5cdFx0XHQ8dGQgY2xhc3M9XFxcImluc3RhbmNlLXRhYmxlLW5hbWUtdGQgcGFnZS10aXRsZVxcXCI+XFxuXHRcdFx0XHRcIiArICh0aGlzLmluc3RhbmNlX3RpdGxlKCkucGFnZVRpdGxlKSArIFwiXFxuXHRcdFx0PC90ZD5cXG5cdFx0PC90cj5cXG5cXG5cdDwvdGFibGU+XFxuXHQ8dGFibGUgY2xhc3M9XFxcInRhYmxlLXBhZ2UtYm9keSBmb3JtLXRhYmxlXFxcIj5cXG5cdFx0XHQ8dHIgc3R5bGU9XFxcImhlaWdodDowcHhcXFwiPlxcblx0XHRcdFx0PHRoIHN0eWxlPSd3aWR0aDogMTYlJz48L3RoPlxcblx0XHRcdFx0PHRoPjwvdGg+XFxuXHRcdFx0XHQ8dGggc3R5bGU9J3dpZHRoOiAxNiUnPjwvdGg+XFxuXHRcdFx0XHQ8dGg+PC90aD5cXG5cdFx0XHQ8L3RyPlwiO1xuICB0YWJsZV9maWVsZHMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRhYmxlX2ZpZWxkcyhpbnN0YW5jZSk7XG4gIHRhYmxlX2ZpZWxkcyAmJiB0YWJsZV9maWVsZHMuZm9yRWFjaChmdW5jdGlvbih0YWJsZV9maWVsZCkge1xuICAgIHZhciBmaWVsZF9wZXJtaXNzaW9uLCBwdXJlQ29kZSwgcmVxdWlyZWQsIHRpdGxlX3Blcm1pc3Npb247XG4gICAgcmVxdWlyZWQgPSBcIlwiO1xuICAgIGlmICghKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgfHwgKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgIT09IHRhYmxlX2ZpZWxkLmNvZGUpIHtcbiAgICAgIGlmICh0YWJsZV9maWVsZC5pc19yZXF1aXJlZCkge1xuICAgICAgICByZXF1aXJlZCA9IFwiaXMtcmVxdWlyZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChfZXhwb3J0KSB7XG4gICAgICAgIHJlcXVpcmVkID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHB1cmVDb2RlID0gU3RlZWRvcy5yZW1vdmVTcGVjaWFsQ2hhcmFjdGVyKHRhYmxlX2ZpZWxkLmNvZGUpO1xuICAgICAgaWYgKEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGQodGFibGVfZmllbGQpKSB7XG4gICAgICAgIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0O1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjx0ZCBjbGFzcz1cXFwidGQtdGl0bGUgXCIgKyByZXF1aXJlZCArIFwiXFxcIj5cXG5cdHt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCJ9fVxcbjwvdGQ+XFxuPHRkIGNsYXNzPVxcXCJ0ZC1maWVsZCBvcGluaW9uLWZpZWxkIG9waW5pb24tZmllbGQtXCIgKyBwdXJlQ29kZSArIFwiIGF1dG9tYXRpY1xcXCIgY29sc3BhbiA9IFxcXCJcIiArIHRhYmxlX2ZpZWxkLnRkX2NvbHNwYW4gKyBcIlxcXCI+XFxuXHR7ez4gaW5zdGFuY2VTaWduVGV4dCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCJ9fVxcbjwvdGQ+XCI7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9lbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbmNsdWRlcyh0YWJsZV9maWVsZC50eXBlLCAnc2VjdGlvbix0YWJsZScpKSB7XG4gICAgICAgICAgdGVtcGxhdGUgKz0gdGFibGVfZmllbGQudHJfc3RhcnQ7XG4gICAgICAgICAgdGVtcGxhdGUgKz0gXCI8dGQgY2xhc3M9XFxcInRkLWNoaWxkZmllbGQgdGQtY2hpbGRmaWVsZC1cIiArIHB1cmVDb2RlICsgXCJcXFwiIGNvbHNwYW4gPSBcXFwiXCIgKyB0YWJsZV9maWVsZC50ZF9jb2xzcGFuICsgXCJcXFwiPlxcbiAgIHt7PiBhZkZvcm1Hcm91cCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCIgbGFiZWw9ZmFsc2V9fVxcbjwvdGQ+XCI7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9zdGFydDtcbiAgICAgICAgICBpZiAoX2V4cG9ydCkge1xuICAgICAgICAgICAgdGl0bGVfcGVybWlzc2lvbiA9IFwiXCI7XG4gICAgICAgICAgICBmaWVsZF9wZXJtaXNzaW9uID0gXCJcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVfcGVybWlzc2lvbiA9IFwidGl0bGUtXCIgKyB0YWJsZV9maWVsZC5wZXJtaXNzaW9uO1xuICAgICAgICAgICAgZmllbGRfcGVybWlzc2lvbiA9IFwiZmllbGQtXCIgKyB0YWJsZV9maWVsZC5wZXJtaXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ZW1wbGF0ZSArPSBcIjx0ZCBjbGFzcz1cXFwidGQtdGl0bGUgdGQtdGl0bGUtXCIgKyBwdXJlQ29kZSArIFwiIFwiICsgdGl0bGVfcGVybWlzc2lvbiArIFwiIFwiICsgcmVxdWlyZWQgKyBcIlxcXCI+XFxuXHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT1cXFwiXCIgKyB0YWJsZV9maWVsZC5jb2RlICsgXCJcXFwifX1cXG48L3RkPlxcbjx0ZCBjbGFzcz1cXFwidGQtZmllbGQgdGQtZmllbGQtXCIgKyBwdXJlQ29kZSArIFwiIFwiICsgZmllbGRfcGVybWlzc2lvbiArIFwiXFxcIiBjb2xzcGFuID0gXFxcIlwiICsgdGFibGVfZmllbGQudGRfY29sc3BhbiArIFwiXFxcIj5cXG5cdHt7PiBhZkZvcm1Hcm91cCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCIgbGFiZWw9ZmFsc2V9fVxcbjwvdGQ+XCI7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHRlbXBsYXRlICs9IFwiXHQ8L3RhYmxlPlxcblxcblx0PHRhYmxlIGNsYXNzPVxcXCJ0YWJsZS1wYWdlLWZvb3RlciBmb3JtLXRhYmxlIG5vLWJvcmRlclxcXCI+XFxuXHRcdDx0ciBjbGFzcz1cXFwiYXBwbGljYW50LXdyYXBwZXJcXFwiPlxcblx0XHRcdDx0ZCBjbGFzcz1cXFwibm93cmFwXFxcIj5cXG5cdFx0XHRcdDxkaXYgY2xhc3M9J2lubGluZS1sZWZ0Jz5cXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e190IFxcXCJpbnN0YW5jZV9pbml0aWF0b3JcXFwifX3vvJo8L2xhYmVsPlxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkIGlubGluZS1sZWZ0Jz5cXG5cdFx0XHRcdFx0e3s+VGVtcGxhdGUuZHluYW1pYyAgdGVtcGxhdGU9XFxcImFmU2VsZWN0VXNlclxcXCIgZGF0YT1hcHBsaWNhbnRDb250ZXh0fX1cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdDwvdGQ+XFxuXHRcdFx0PHRkIGNsYXNzPVxcXCJub3dyYXBcXFwiPlxcblx0XHRcdFx0PGRpdiBjbGFzcz0ncHVsbC1sZWZ0Jz5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5saW5lLWxlZnQnPlxcblx0XHRcdFx0XHRcdDxsYWJlbD57e190IFxcXCJpbnN0YW5jZV9zdWJtaXRfZGF0ZVxcXCJ9fe+8mjwvbGFiZWw+XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbmxpbmUtcmlnaHQnPlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0e3tmb3JtYXREYXRlIGluc3RhbmNlLnN1Ym1pdF9kYXRlICd7XFxcImZvcm1hdFxcXCI6XFxcIllZWVktTU0tRERcXFwifSd9fVxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdDwvdGQ+XFxuXHRcdDwvdHI+XFxuXHQ8L3RhYmxlPlxcbjwvZGl2PlwiO1xuICByZXR1cm4gdGVtcGxhdGU7XG59O1xuXG5UZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlID0ge1xuICBcImRlZmF1bHRcIjogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICB2YXIgdGVtcGxhdGU7XG4gICAgdGVtcGxhdGUgPSBcIjxkaXYgY2xhc3M9XFxcIndpdGgtYm9yZGVyIGNvbC1tZC0xMlxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJpbnN0YW5jZS1uYW1lXFxcIj5cXG5cdFx0PGgzIGNsYXNzPVxcXCJib3gtdGl0bGVcXFwiPlwiICsgKFRlbXBsYXRlTWFuYWdlci5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZSkgKyBcIjwvaDM+XFxuXHRcdDxzcGFuIGNsYXNzPVxcXCJoZWxwLWJsb2NrXFxcIj48L3NwYW4+XFxuXHQ8L2Rpdj5cXG5cdDxzcGFuIGNsYXNzPVxcXCJoZWxwLWJsb2NrXFxcIj48L3NwYW4+XFxuPC9kaXY+XFxue3sjZWFjaCBzdGVlZG9zX2Zvcm0uZmllbGRzfX1cXG5cdHt7I2lmIGlzT3BpbmlvbkZpZWxkIHRoaXN9fVxcblx0XHQ8ZGl2IGNsYXNzPVxcXCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cXFwiPlxcblx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXAgYXV0b21hdGljIG9waW5pb24tZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0XHQ8bGFiZWwgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPXRoaXMuY29kZX19PC9sYWJlbD5cXG5cXG5cdFx0XHRcdHt7PiBpbnN0YW5jZVNpZ25UZXh0IG5hbWU9dGhpcy5jb2RlfX1cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXHR7e2Vsc2V9fVxcblx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cXG5cdFx0XHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTIgZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxcblx0XHRcdDwvZGl2Plxcblx0XHR7e2Vsc2V9fVxcblx0XHRcdDxkaXYgY2xhc3M9XFxcInt7I2lmIHRoaXMuaXNfd2lkZX19Y29sLW1kLTEye3tlbHNlfX1jb2wtbWQtNnt7L2lmfX0gZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0e3s+IGFmRm9ybUdyb3VwIG5hbWU9dGhpcy5jb2RlfX1cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0e3svaWZ9fVxcblx0e3svaWZ9fVxcbnt7L2VhY2h9fVxcbjxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJhcHBsaWNhbnQtd3JhcHBlciBmb3JtLWdyb3VwIGZvcm0taG9yaXpvbnRhbFxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cFxcXCI+XFxuXHRcdDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIj5cXG5cdFx0ICB7e190IFxcXCJpbnN0YW5jZV9pbml0aWF0b3JcXFwifX0mbmJzcDs6XFxuXHRcdDwvZGl2Plxcblx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cXFwiYWZTZWxlY3RVc2VyXFxcIiBkYXRhPWFwcGxpY2FudENvbnRleHR9fVxcblx0ICA8L2Rpdj5cXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSxcbiAgdGFibGU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlci5oYW5kbGVUYWJsZVRlbXBsYXRlKGluc3RhbmNlKTtcbiAgfVxufTtcblxuVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZUhlbHBzID0ge1xuICBhcHBsaWNhbnRDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YSwgc3RlZWRvc19pbnN0YW5jZTtcbiAgICBzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgZGF0YSA9IHtcbiAgICAgIG5hbWU6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgIGF0dHM6IHtcbiAgICAgICAgbmFtZTogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgICBpZDogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgICBcImNsYXNzXCI6ICdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCcsXG4gICAgICAgIHN0eWxlOiAncGFkZGluZzo2cHggMTJweDt3aWR0aDoxNDBweDtkaXNwbGF5OmlubGluZSdcbiAgICAgIH1cbiAgICB9O1xuICAgIGRhdGEuYXR0cy5kaXNhYmxlZCA9IHRydWU7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn07XG5cbih7XG4gIGluc3RhbmNlSWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnaW5zdGFuY2Vmb3JtJztcbiAgfSxcbiAgZm9ybV90eXBlczogZnVuY3Rpb24oKSB7XG4gICAgaWYgKEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKSkge1xuICAgICAgcmV0dXJuICdkaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbWV0aG9kJztcbiAgICB9XG4gIH0sXG4gIHN0ZWVkb3NfZm9ybTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIGlmIChmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmb3JtX3ZlcnNpb247XG4gICAgfVxuICB9LFxuICBpbm5lcnN1YmZvcm1Db250ZXh0OiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZG9jX3ZhbHVlcztcbiAgICBkb2NfdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIG9ialtcInRhYmxlVmFsdWVzXCJdID0gZG9jX3ZhbHVlcyA/IGRvY192YWx1ZXNbb2JqLmNvZGVdIDogW107XG4gICAgb2JqW1wiZm9ybUlkXCJdID0gZm9ybUlkO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGluc3RhbmNlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RlZWRvc19pbnN0YW5jZTtcbiAgICBTZXNzaW9uLmdldChcImNoYW5nZV9kYXRlXCIpO1xuICAgIGlmIChTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIikpIHtcbiAgICAgIHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIHJldHVybiBzdGVlZG9zX2luc3RhbmNlO1xuICAgIH1cbiAgfSxcbiAgZXF1YWxzOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcbiAgfSxcbiAgZmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYShmb3JtX3ZlcnNpb24pKTtcbiAgICB9XG4gIH0sXG4gIGRvY192YWx1ZXM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG4gIH0sXG4gIGluc3RhbmNlX2JveF9zdHlsZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGJveCwgaW5zLCBqdWRnZTtcbiAgICBib3ggPSBTZXNzaW9uLmdldChcImJveFwiKTtcbiAgICBpZiAoYm94ID09PSBcImluYm94XCIgfHwgYm94ID09PSBcImRyYWZ0XCIpIHtcbiAgICAgIGp1ZGdlID0gU2Vzc2lvbi5nZXQoXCJqdWRnZVwiKTtcbiAgICAgIGlmIChqdWRnZSkge1xuICAgICAgICBpZiAoanVkZ2UgPT09IFwiYXBwcm92ZWRcIikge1xuICAgICAgICAgIHJldHVybiBcImJveC1zdWNjZXNzXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoanVkZ2UgPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICAgIHJldHVybiBcImJveC1kYW5nZXJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICBpZiAoaW5zICYmIGlucy5maW5hbF9kZWNpc2lvbikge1xuICAgICAgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICAgIHJldHVybiBcImJveC1zdWNjZXNzXCI7XG4gICAgICB9IGVsc2UgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIHJldHVybiBcImJveC1kYW5nZXJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG5UZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgdGVtcGxhdGVOYW1lKSB7XG4gIHZhciBmbG93LCBmb3JtO1xuICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZShpbnN0YW5jZS5mbG93KTtcbiAgZm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG4gIGlmICh0ZW1wbGF0ZU5hbWUpIHtcbiAgICBpZiAodGVtcGxhdGVOYW1lID09PSAndGFibGUnKSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSk7XG4gICAgfVxuICAgIHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlW1wiZGVmYXVsdFwiXShpbnN0YW5jZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBTZXNzaW9uICE9PSBcInVuZGVmaW5lZFwiICYmIFNlc3Npb24gIT09IG51bGwgPyBTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgOiB2b2lkIDApIHtcbiAgICBpZiAoZmxvdyAhPSBudWxsID8gZmxvdy5wcmludF90ZW1wbGF0ZSA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5wcmludF90ZW1wbGF0ZSArIFwiPC9kaXY+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmbG93ICE9IG51bGwgPyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlIDogdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXRlbXBsYXRlJz5cIiArIGZsb3cuaW5zdGFuY2VfdGVtcGxhdGUgKyBcIjwvZGl2PlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUudGFibGUoaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH1cbiAgICBpZiAoZmxvdyAhPSBudWxsID8gZmxvdy5pbnN0YW5jZV90ZW1wbGF0ZSA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5pbnN0YW5jZV90ZW1wbGF0ZSArIFwiPC9kaXY+XCI7XG4gICAgfVxuICAgIGlmIChmb3JtICE9IG51bGwgPyBmb3JtLmluc3RhbmNlX3N0eWxlIDogdm9pZCAwKSB7XG4gICAgICBpZiAoZm9ybS5pbnN0YW5jZV9zdHlsZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufTtcbiIsIlN0ZWVkb3NUYWJsZSA9IHt9O1xuXG5TdGVlZG9zVGFibGUuZm9ybUlkID0gXCJpbnN0YW5jZWZvcm1cIjtcblxuU3RlZWRvc1RhYmxlLmNoZWNrSXRlbSA9IGZ1bmN0aW9uIChmaWVsZCwgaXRlbV9pbmRleCkge1xuICAgIHZhciBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICB2YXIgZmllbGRWYWwgPSBTdGVlZG9zVGFibGUuZ2V0SXRlbU1vZGFsVmFsdWUoZmllbGQsIGl0ZW1faW5kZXgpO1xuXG4gICAgdmFyIHNmX25hbWUgPSAnJztcbiAgICB2YXIgcmV2ID0gdHJ1ZTtcbiAgICBmaWVsZE9iai5zZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHNmKSB7XG4gICAgICAgIGlmIChzZi5wZXJtaXNzaW9uID09ICdlZGl0YWJsZScpIHtcbiAgICAgICAgICAgIHNmX25hbWUgPSBmaWVsZE9iai5jb2RlICsgXCIuXCIgKyBzZi5jb2RlO1xuICAgICAgICAgICAgaWYgKCFJbnN0YW5jZU1hbmFnZXIuY2hlY2tGb3JtRmllbGRWYWx1ZSgkKFwiW25hbWU9J1wiICsgc2ZfbmFtZSArIFwiJ11cIilbMF0sIHNmX25hbWUsIGZpZWxkVmFsW3NmLmNvZGVdKSkge1xuICAgICAgICAgICAgICAgIHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV2O1xufVxuXG5TdGVlZG9zVGFibGUuc2V0VGFibGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIGl0ZW1faW5kZXgsIGl0ZW1fdmFsdWUpIHtcblxuICAgIHZhciB0YWJsZVZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpO1xuICAgIHRhYmxlVmFsdWVbaXRlbV9pbmRleF0gPSBpdGVtX3ZhbHVlO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIGl0ZW1faW5kZXgpIHtcbiAgICByZXR1cm4gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpW2l0ZW1faW5kZXhdO1xufVxuXG5TdGVlZG9zVGFibGUucmVtb3ZlVGFibGVJdGVtID0gZnVuY3Rpb24gKGZpZWxkLCBpdGVtX2luZGV4KSB7XG4gICAgdmFyIGl0ZW1fdmFsdWUgPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUoZmllbGQsIGl0ZW1faW5kZXgpO1xuICAgIGl0ZW1fdmFsdWUucmVtb3ZlZCA9IHRydWU7XG59XG5cblN0ZWVkb3NUYWJsZS5zZXRUYWJsZVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCB2YWx1ZSkge1xuICAgICQoXCJ0YWJsZVtuYW1lPSdcIiArIGZpZWxkICsgXCInXVwiKS52YWwoe1xuICAgICAgICB2YWw6IHZhbHVlXG4gICAgfSk7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRUYWJsZVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgcmV0dXJuICQoXCJ0YWJsZVtuYW1lPSdcIiArIGZpZWxkICsgXCInXVwiKS52YWwoKS52YWw7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRWYWxpZFZhbHVlID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgdmFyIHZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgdmFsaWRWYWx1ZSA9IFtdO1xuXG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAoIXYucmVtb3ZlZCkge1xuICAgICAgICAgICAgdmFsaWRWYWx1ZS5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbGlkVmFsdWU7XG59XG5cblxuU3RlZWRvc1RhYmxlLmhhbmRsZURhdGEgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlcykge1xuXG4gICAgaWYgKCF2YWx1ZXMgfHwgISh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgZmllbGRPYmogPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpO1xuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgZmllbGRPYmouc2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgICBpZiAoZi50eXBlID09ICd1c2VyJyB8fCBmLnR5cGUgPT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZbZi5jb2RlXVxuICAgICAgICAgICAgICAgIGlmIChmLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiAodmFsdWVbMF0pID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2W2YuY29kZV0gPSB2W2YuY29kZV0uZ2V0UHJvcGVydHkoXCJpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdltmLmNvZGVdID0gdltmLmNvZGVdLmlkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT0gJ2RhdGVUaW1lJykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZbZi5jb2RlXVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHZhbHVlLnNwbGl0KFwiVFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQxID0gdFsxXS5zcGxpdChcIjpcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSB0MFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gdDBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gdDBbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBob3VycyA9IHQxWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHQxWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZbZi5jb2RlXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRGaWVsZCA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIHZhciBpbnN0YW5jZUZpZWxkcyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZpZWxkcygpO1xuICAgIGlmICghaW5zdGFuY2VGaWVsZHMpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBmaWVsZE9iaiA9IGluc3RhbmNlRmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGZpZWxkKTtcblxuICAgIHJldHVybiBmaWVsZE9iajtcbn1cblxuXG5TdGVlZG9zVGFibGUuZ2V0TW9kYWxEYXRhID0gZnVuY3Rpb24gKGZpZWxkLCBpbmRleCkge1xuXG4gICAgdmFyIGRhdGEgPSB7fTtcblxuICAgIHZhciBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICBpZiAoIWZpZWxkT2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLmZpZWxkID0gZmllbGRPYmo7XG5cbiAgICBkYXRhLmZpZWxkLmZvcm11bGEgPSBGb3JtX2Zvcm11bGEuZ2V0Rm9ybXVsYUZpZWxkVmFyaWFibGUoXCJGb3JtX2Zvcm11bGEuZmllbGRfdmFsdWVzXCIsIGZpZWxkT2JqLnNmaWVsZHMpO1xuXG4gICAgZGF0YS52YWx1ZSA9IHt9O1xuXG4gICAgZGF0YS52YWx1ZVtmaWVsZF0gPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUoZmllbGQsIGluZGV4KTtcblxuICAgIGRhdGEuaW5kZXggPSBpbmRleDtcblxuICAgIHJldHVybiBkYXRhO1xufVxuXG5cblxuU3RlZWRvc1RhYmxlLmdldEl0ZW1Nb2RhbFZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCBpdGVtX2luZGV4KSB7XG5cbiAgICBpZiAoIUF1dG9Gb3JtLmdldEZvcm1WYWx1ZXMoXCJzdGVlZG9zX3RhYmxlX21vZGFsX1wiICsgZmllbGQgKyBcIl9cIiArIGl0ZW1faW5kZXgpKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIHZhciBpdGVtX3ZhbHVlID0gQXV0b0Zvcm0uZ2V0Rm9ybVZhbHVlcyhcInN0ZWVkb3NfdGFibGVfbW9kYWxfXCIgKyBmaWVsZCArIFwiX1wiICsgaXRlbV9pbmRleCkuaW5zZXJ0RG9jW2ZpZWxkXTtcbiAgICByZXR1cm4gaXRlbV92YWx1ZTtcbn1cblxuXG5TdGVlZG9zVGFibGUuYWRkSXRlbSA9IGZ1bmN0aW9uIChmaWVsZCwgaW5kZXgsIF9pdGVtX3ZhbHVlKSB7XG4gICAgdmFyIGtleXMgPSBTdGVlZG9zVGFibGUuZ2V0S2V5cyhmaWVsZCk7XG4gICAgdmFyIGl0ZW1fdmFsdWUgPSBfaXRlbV92YWx1ZSB8fCBTdGVlZG9zVGFibGUuZ2V0SXRlbU1vZGFsVmFsdWUoZmllbGQsIGluZGV4KTtcbiAgICAkKFwidGJvZHlbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGJvZHknXVwiKS5hcHBlbmQoU3RlZWRvc1RhYmxlLmdldFRyKGtleXMsIGl0ZW1fdmFsdWUsIGluZGV4LCBmaWVsZCwgdHJ1ZSkpXG5cbn1cblxuU3RlZWRvc1RhYmxlLnVwZGF0ZUl0ZW0gPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4LCBfaXRlbV92YWx1ZSkge1xuXG4gICAgdmFyIGl0ZW0gPSAkKFwidHJbbmFtZT0nXCIgKyBmaWVsZCArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJ11cIik7XG5cbiAgICB2YXIgaXRlbV92YWx1ZSA9IF9pdGVtX3ZhbHVlIHx8IFN0ZWVkb3NUYWJsZS5nZXRJdGVtTW9kYWxWYWx1ZShmaWVsZCwgaW5kZXgpO1xuXG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gU3RlZWRvc1RhYmxlLmdldEtleXMoZmllbGQpO1xuICAgICAgICB2YXIgdGRzID0gU3RlZWRvc1RhYmxlLmdldFJlbW92ZVRkKGZpZWxkLCBpbmRleCk7XG5cbiAgICAgICAgdmFyIHNmaWVsZHMgPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpLnNmaWVsZHM7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBzZmllbGQgPSBzZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGtleSk7XG5cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1fdmFsdWVba2V5XTtcblxuICAgICAgICAgICAgdGRzID0gdGRzICsgU3RlZWRvc1RhYmxlLmdldFRkKHNmaWVsZCwgaW5kZXgsIHZhbHVlKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdGVtLmVtcHR5KCk7XG5cbiAgICAgICAgaXRlbS5hcHBlbmQodGRzKTtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgICAgU3RlZWRvc1RhYmxlLmFkZEl0ZW0oZmllbGQsIGluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpKSB7XG5cbiAgICAgICAgU3RlZWRvc1RhYmxlLnNldFRhYmxlSXRlbVZhbHVlKGZpZWxkLCBpbmRleCwgaXRlbV92YWx1ZSk7XG5cbiAgICAgICAgLy9TdGVlZG9zVGFibGUudmFsdWVIYXNoW2ZpZWxkXVtpbmRleF0gPSBpdGVtX3ZhbHVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9TdGVlZG9zVGFibGUudmFsdWVIYXNoW2ZpZWxkXSA9IFtpdGVtX3ZhbHVlXTtcblxuICAgICAgICBTdGVlZG9zVGFibGUuc2V0VGFibGVWYWx1ZShmaWVsZCwgW2l0ZW1fdmFsdWVdKVxuXG4gICAgfVxuXG4gICAgLy/miafooYzkuLvooajlhazlvI/orqHnrpdcbiAgICBJbnN0YW5jZU1hbmFnZXIucnVuRm9ybXVsYShmaWVsZCk7XG5cbn1cblxuU3RlZWRvc1RhYmxlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4KSB7XG5cbiAgICAkKFwidHJbbmFtZT0nXCIgKyBmaWVsZCArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJ11cIikuaGlkZSgpO1xuXG4gICAgU3RlZWRvc1RhYmxlLnJlbW92ZVRhYmxlSXRlbShmaWVsZCwgaW5kZXgpO1xuXG4gICAgSW5zdGFuY2VNYW5hZ2VyLnJ1bkZvcm11bGEoZmllbGQpO1xufVxuXG5TdGVlZG9zVGFibGUuc2hvd01vZGFsID0gZnVuY3Rpb24gKGZpZWxkLCBpbmRleCwgbWV0aG9kKSB7XG5cblxuICAgIHZhciBtb2RhbERhdGEgPSBTdGVlZG9zVGFibGUuZ2V0TW9kYWxEYXRhKGZpZWxkLCBpbmRleCk7XG5cbiAgICBtb2RhbERhdGEubWV0aG9kID0gbWV0aG9kO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgTW9kYWwuc2hvdyhcInN0ZWVkb3NUYWJsZU1vZGFsXCIsIG1vZGFsRGF0YSk7XG4gICAgfSwgMzAwKVxufVxuXG5TdGVlZG9zVGFibGUuZ2V0S2V5cyA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIGlmICghQXV0b0Zvcm0uZ2V0Q3VycmVudERhdGFGb3JGb3JtKFN0ZWVkb3NUYWJsZS5mb3JtSWQpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgc3MgPSBBdXRvRm9ybS5nZXRGb3JtU2NoZW1hKFN0ZWVkb3NUYWJsZS5mb3JtSWQpO1xuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmIChzcy5zY2hlbWEoZmllbGQgKyBcIi4kXCIpLnR5cGUgPT09IE9iamVjdCkge1xuICAgICAgICBrZXlzID0gc3Mub2JqZWN0S2V5cyhTaW1wbGVTY2hlbWEuX21ha2VHZW5lcmljKGZpZWxkKSArICcuJCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG5cbn1cblxuU3RlZWRvc1RhYmxlLmdldFRoZWFkID0gZnVuY3Rpb24gKGZpZWxkLCBlZGl0YWJsZSkge1xuXG4gICAgdmFyIGZpZWxkT2JqID0gZmllbGQ7XG4gICAgaWYgKCFfLmlzT2JqZWN0KGZpZWxkKSlcbiAgICAgICAgZmllbGRPYmogPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpO1xuXG4gICAgaWYgKCFmaWVsZE9iaikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIHRoZWFkID0gJycsXG4gICAgICAgIHRycyA9ICcnLFxuICAgICAgICBsYWJlbCA9ICcnLFxuICAgICAgICB3aWR0aCA9IDEwMDtcblxuICAgIGlmIChlZGl0YWJsZSkge1xuICAgICAgICAvLyB0cnMgPSBcIjx0aCBjbGFzcz0ncmVtb3ZlZCc+PC90aD5cIlxuICAgICAgICB0cnMgPSBcIlwiXG4gICAgfVxuXG4gICAgdmFyIHNmaWVsZHMgPSBmaWVsZE9iai5zZmllbGRzO1xuXG4gICAgaWYgKCFzZmllbGRzKSB7XG4gICAgICAgIHJldHVybiB0aGVhZDtcbiAgICB9XG5cbiAgICB2YXIgc2ZfbGVuZ3RoID0gc2ZpZWxkcy5sZW5ndGg7XG5cbiAgICBpZiAoc2ZfbGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgd2lkZV9maWVsZHMgPSBzZmllbGRzLmZpbHRlclByb3BlcnR5KFwiaXNfd2lkZVwiLCB0cnVlKTtcblxuICAgICAgICB3aWR0aCA9IDEwMCAvIChzZl9sZW5ndGggKyB3aWRlX2ZpZWxkcy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHNmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoc2YsIGluZGV4KSB7XG5cbiAgICAgICAgbGFiZWwgPSAoc2YubmFtZSAhPSBudWxsICYmIHNmLm5hbWUubGVuZ3RoID4gMCkgPyBzZi5uYW1lIDogc2YuY29kZTtcblxuICAgICAgICB0cnMgPSB0cnMgKyBcIjx0ZCBcIjsgLy8gbm93cmFwPSdub3dyYXAnXG5cbiAgICAgICAgdHJzID0gdHJzICsgXCIgY2xhc3M9J3RpdGxlIFwiICsgc2YudHlwZSArIFwiJ1wiO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSAoc2ZfbGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgIGlmIChzZi5pc193aWRlKSB7XG4gICAgICAgICAgICAgICAgdHJzID0gdHJzICsgXCJzdHlsZT0nd2lkdGg6XCIgKyB3aWR0aCAqIDIgKyBcIiUnXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJzID0gdHJzICsgXCJzdHlsZT0nd2lkdGg6XCIgKyB3aWR0aCArIFwiJSdcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJzID0gdHJzICsgXCI+XCIgKyBsYWJlbCArIFwiPC90ZD5cIlxuICAgIH0pO1xuXG4gICAgdGhlYWQgPSAnPHRyPicgKyB0cnMgKyAnPC90cj4nO1xuXG4gICAgcmV0dXJuIHRoZWFkO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VGJvZHkgPSBmdW5jdGlvbiAoa2V5cywgZmllbGQsIHZhbHVlcywgZWRpdGFibGUsIHNmaWVsZHNFZGl0YWJsZSkge1xuICAgIHZhciB0Ym9keSA9IFwiXCI7XG5cbiAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgICAgdGJvZHkgPSB0Ym9keSArIFN0ZWVkb3NUYWJsZS5nZXRUcihrZXlzLCB2YWx1ZSwgaW5kZXgsIGZpZWxkLCBlZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRib2R5O1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VHIgPSBmdW5jdGlvbiAoa2V5cywgaXRlbV92YWx1ZSwgaW5kZXgsIGZpZWxkLCBlZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKSB7XG5cbiAgICB2YXIgZmllbGRPYmogPSBmaWVsZDtcbiAgICBpZiAoIV8uaXNPYmplY3QoZmllbGQpKVxuICAgICAgICBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICB2YXIgdHIgPSBcIjx0ciBpZD0nXCIgKyBmaWVsZE9iai5jb2RlICsgXCJfaXRlbV9cIiArIGluZGV4ICsgXCInIG5hbWU9J1wiICsgZmllbGRPYmouY29kZSArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJyBkYXRhLWluZGV4PSdcIiArIGluZGV4ICsgXCInXCJcblxuICAgIGlmIChlZGl0YWJsZSB8fCBzZmllbGRzRWRpdGFibGUpIHtcbiAgICAgICAgdHIgPSB0ciArIFwiJyBjbGFzcz0naXRlbSBlZGl0J1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgdHIgPSB0ciArIFwiIGNsYXNzPSdpdGVtIGl0ZW0tcmVhZG9ubHknXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyID0gdHIgKyBcIiBjbGFzcz0naXRlbSAnXCJcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpdGVtX3ZhbHVlLnJlbW92ZWQpIHtcbiAgICAgICAgdHIgPSB0ciArIFwiIHN0eWxlPSdkaXNwbGF5Om5vbmUnIFwiO1xuICAgIH1cblxuICAgIHRyID0gdHIgKyBcIic+XCI7XG5cbiAgICB2YXIgdGRzID0gXCJcIjtcblxuICAgIGlmIChlZGl0YWJsZSkge1xuICAgICAgICB0ZHMgPSBTdGVlZG9zVGFibGUuZ2V0UmVtb3ZlVGQoZmllbGRPYmouY29kZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHZhciBzZmllbGRzID0gZmllbGRPYmouc2ZpZWxkcztcblxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBzZmllbGQgPSBzZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGtleSk7XG5cbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbV92YWx1ZVtrZXldO1xuXG4gICAgICAgIHRkcyA9IHRkcyArIFN0ZWVkb3NUYWJsZS5nZXRUZChzZmllbGQsIGluZGV4LCB2YWx1ZSk7XG5cbiAgICB9KTtcblxuICAgIHRyID0gdHIgKyB0ZHMgKyBcIjwvdHI+XCI7XG4gICAgcmV0dXJuIHRyO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0UmVtb3ZlVGQgPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4KSB7XG4gICAgLy8gcmV0dXJuIFwiPHRkIGNsYXNzPSdzdGVlZG9zVGFibGUtaXRlbS1yZW1vdmUgcmVtb3ZlZCcgZGF0YS1pbmRleD0nXCIgKyBpbmRleCArIFwiJz48aSBjbGFzcz0nZmEgZmEtdGltZXMnIGFyaWEtaGlkZGVuPSd0cnVlJz48L3RkPlwiO1xuICAgIHJldHVybiBcIlwiXG59XG5cblN0ZWVkb3NUYWJsZS5nZXRUZCA9IGZ1bmN0aW9uIChmaWVsZCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdmFyIHRkID0gXCI8dGQgXCI7XG5cbiAgICB0ZCA9IHRkICsgXCIgY2xhc3M9J3N0ZWVkb3NUYWJsZS1pdGVtLWZpZWxkIFwiICsgZmllbGQudHlwZSArIFwiJyBcIjtcblxuICAgIHZhciB0ZF92YWx1ZSA9IFwiXCI7XG5cbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgIHRkX3ZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFREVmFsdWUoZmllbGQsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblxuICAgICAgICB1dGNPZmZzZXQgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEudXRjT2Zmc2V0XG5cbiAgICAgICAgdGRfdmFsdWUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUodmFsdWUsIGZpZWxkLCBsb2NhbGUsIHV0Y09mZnNldClcbiAgICB9XG5cbiAgICB0ZCA9IHRkICsgXCIgZGF0YS1pbmRleD0nXCIgKyBpbmRleCArIFwiJz5cIiArIHRkX3ZhbHVlICsgXCI8L3RkPlwiXG5cbiAgICByZXR1cm4gdGQ7XG59XG5cblxuU3RlZWRvc1RhYmxlLmdldFREVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlKSB7XG4gICAgdmFyIHRkX3ZhbHVlID0gXCJcIjtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0ZF92YWx1ZVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB2YXIgZmllbGRPcHRpb25zID0gW107XG4gICAgICAgIGlmKFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xKXtcbiAgICAgICAgICAgIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pe1xuICAgICAgICAgICAgICAgIHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIilcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbVNwbGl0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiAodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhU3BhY2VVc2Vycyh2YWx1ZSkuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhU3BhY2VVc2Vycyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB1ID8gdS5uYW1lIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiAodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhT3JnYW5pemF0aW9ucyh2YWx1ZSkuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhT3JnYW5pemF0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IG8gPyBvLm5hbWUgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF95ZXNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZSA/IFwiPGEgaHJlZj0nbWFpbHRvOlwiICsgdmFsdWUgKyBcIic+XCIgKyB2YWx1ZSArIFwiPC9hPlwiIDogXCJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VybCc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiaHR0cFwiKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gXCI8YSBocmVmPSdcIiArIGVuY29kZVVSSSh2YWx1ZSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgdmFsdWUgKyBcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+aHR0cDovL1wiICsgdmFsdWUgKyBcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSAnKioqKioqJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHZhbHVlLnNwbGl0KFwiLVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSB0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IHRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gJC5mb3JtYXQuZGF0ZSh2YWx1ZSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQwID0gdFswXS5zcGxpdChcIi1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSB0WzFdLnNwbGl0KFwiOlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IHQwWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0MFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSB0MFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzID0gdDFbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gdDFbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXRlLCBob3Vycywgc2Vjb25kcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9ICQuZm9ybWF0LmRhdGUodmFsdWUsICd5eXl5LU1NLWRkIEhIOm1tJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKXsgcmV0dXJuIGl0ZW0udmFsdWUgPT0gdmFsdWU7IH0pXG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRPcHRpb24pe1xuICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFkaW8nOlxuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0peyByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZTsgfSlcbiAgICAgICAgICAgICAgICBpZihzZWxlY3RlZE9wdGlvbil7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICAgICAgICAgICAgdmFyIHNwbGl0ZWRWYWx1ZXMgPSB2YWx1ZS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IGZpZWxkT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7IHJldHVybiBzcGxpdGVkVmFsdWVzLmluZGV4T2YoaXRlbS52YWx1ZSkgPiAtMTsgfSk7XG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbihpdGVtKXsgcmV0dXJuIGl0ZW0ubGFiZWw7IH0pLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX3BlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFN0ZWVkb3MubnVtYmVyVG9TdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvZGF0YSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBfLnBsdWNrKHZhbHVlLCAnQGxhYmVsJykudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgY2FzZSAnbG9va3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRWYWx1ZSh2YWx1ZSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlO1xuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRkX3ZhbHVlO1xufTtcblxuaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgIEF1dG9Gb3JtLmFkZElucHV0VHlwZShcInRhYmxlXCIsIHtcbiAgICAgICAgdGVtcGxhdGU6IFwiYWZUYWJsZVwiLFxuICAgICAgICB2YWx1ZU91dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmRhdGEoXCJzY2hlbWFLZXlcIik7XG4gICAgICAgICAgICByZXR1cm4gU3RlZWRvc1RhYmxlLmdldFZhbGlkVmFsdWUobmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlQ29udmVydGVyczoge1xuICAgICAgICAgICAgXCJzdHJpbmdBcnJheVwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9TdHJpbmdBcnJheSxcbiAgICAgICAgICAgIFwibnVtYmVyXCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb051bWJlcixcbiAgICAgICAgICAgIFwibnVtZXJBcnJheVwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9OdW1iZXJBcnJheSxcbiAgICAgICAgICAgIFwiYm9vbGVhblwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9Cb29sZWFuLFxuICAgICAgICAgICAgXCJib29sZWFuQXJyYXlcIjogQXV0b0Zvcm0udmFsdWVDb252ZXJ0ZXJzLnN0cmluZ1RvQm9vbGVhbkFycmF5LFxuICAgICAgICAgICAgXCJkYXRlXCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb0RhdGUsXG4gICAgICAgICAgICBcImRhdGVBcnJheVwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9EYXRlQXJyYXlcbiAgICAgICAgfSxcbiAgICAgICAgY29udGV4dEFkanVzdDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dC5hdHRzLm1heGxlbmd0aCA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnRleHQubWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuYXR0cy5tYXhsZW5ndGggPSBjb250ZXh0Lm1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBUZW1wbGF0ZS5hZlRhYmxlLmV2ZW50cyh7XG4gICAgICAgICd0YXAgLnN0ZWVkb3MtdGFibGUgLnN0ZWVkb3NUYWJsZS1pdGVtLWFkZCwuYWRkLWl0ZW0tdHInOiBmdW5jdGlvbiAoZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRlbXBsYXRlLmRhdGEubmFtZTtcblxuICAgICAgICAgICAgdmFyIHRhYmxlVmFsdWUgPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVWYWx1ZShuYW1lKTtcblxuICAgICAgICAgICAgdmFyIG5ld19pdGVtX2luZGV4ID0gdGFibGVWYWx1ZSA/IHRhYmxlVmFsdWUubGVuZ3RoIDogMDtcblxuICAgICAgICAgICAgU3RlZWRvc1RhYmxlLnNob3dNb2RhbChuYW1lLCBuZXdfaXRlbV9pbmRleCwgXCJhZGRcIik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3RhcCAuc3RlZWRvcy10YWJsZSAuc3RlZWRvc1RhYmxlLWl0ZW0tZmllbGQnOiBmdW5jdGlvbiAoZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAodGVtcGxhdGUuZGF0YS5hdHRzLmVkaXRhYmxlIHx8IHRlbXBsYXRlLmRhdGEuYXR0cy5zZmllbGRzRWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSB0ZW1wbGF0ZS5kYXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmluZGV4O1xuICAgICAgICAgICAgICAgIFN0ZWVkb3NUYWJsZS5zaG93TW9kYWwoZmllbGQsIGluZGV4LCBcImVkaXRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3RhcCAuc3RlZWRvcy10YWJsZSAuc3RlZWRvc1RhYmxlLWl0ZW0tcmVtb3ZlJzogZnVuY3Rpb24gKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdmFyIGZpZWxkID0gdGVtcGxhdGUuZGF0YS5uYW1lO1xuICAgICAgICAgICAgdmFyIGl0ZW1faW5kZXggPSBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG4gICAgICAgICAgICBTZXNzaW9uLnNldChcImluc3RhbmNlX2NoYW5nZVwiLCB0cnVlKTtcbiAgICAgICAgICAgIFN0ZWVkb3NUYWJsZS5yZW1vdmVJdGVtKGZpZWxkLCBpdGVtX2luZGV4KTtcbiAgICAgICAgfSxcblxuICAgICAgICAndGFwIC5zdGVlZG9zLXRhYmxlIC5pdGVtLXJlYWRvbmx5JzogZnVuY3Rpb24gKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZS5kYXRhLmF0dHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSB0ZW1wbGF0ZS5kYXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmluZGV4O1xuICAgICAgICAgICAgICAgIFN0ZWVkb3NUYWJsZS5zaG93TW9kYWwoZmllbGQsIGluZGV4LCBcInJlYWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuXG5cbiAgICBUZW1wbGF0ZS5hZlRhYmxlLnJlbmRlcmVkID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBmaWVsZCA9IHRoaXMuZGF0YS5uYW1lO1xuXG4gICAgICAgIHZhciBzZmllbGRzRWRpdGFibGUgPSB0aGlzLmRhdGEuYXR0cy5zZmllbGRzRWRpdGFibGU7XG5cbiAgICAgICAgdmFyIGtleXMgPSBTdGVlZG9zVGFibGUuZ2V0S2V5cyhmaWVsZCk7XG4gICAgICAgIHZhciB2YWxpZFZhbHVlID0gU3RlZWRvc1RhYmxlLmhhbmRsZURhdGEoZmllbGQsIHRoaXMuZGF0YS52YWx1ZSk7XG4gICAgICAgIFN0ZWVkb3NUYWJsZS5zZXRUYWJsZVZhbHVlKGZpZWxkLCB2YWxpZFZhbHVlKTtcblxuICAgICAgICAkKFwidGhlYWRbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGhlYWQnXVwiKS5odG1sKFN0ZWVkb3NUYWJsZS5nZXRUaGVhZChmaWVsZCwgdGhpcy5kYXRhLmF0dHMuZWRpdGFibGUpKTtcblxuICAgICAgICAkKFwidGJvZHlbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGJvZHknXVwiKS5odG1sKFN0ZWVkb3NUYWJsZS5nZXRUYm9keShrZXlzLCBmaWVsZCwgU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpLCB0aGlzLmRhdGEuYXR0cy5lZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKSk7XG5cbiAgICAgICAgc3RyID0gdChcInN0ZWVkb3NfdGFibGVfYWRkX2l0ZW1cIik7XG4gICAgICAgIGFkZEl0ZW1UciA9IFwiPHRyIGNsYXNzPSdhZGQtaXRlbS10cic+PHRkIGNvbHNwYW49J1wiICsga2V5cy5sZW5ndGggKyBcIic+PGkgY2xhc3M9J2lvbiBpb24tcGx1cy1yb3VuZCc+PC9pPlwiICsgc3RyICsgXCI8L3RkPjwvdHI+XCI7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5hdHRzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAkKFwidGZvb3RbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGZvb3QnXVwiKS5hcHBlbmQoYWRkSXRlbVRyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG4gICAgICAgIGlmIChjLnN0ZXBfdHlwZSA9PSAnY291bnRlclNpZ24nIHx8IEluc3RhbmNlTWFuYWdlci5jY0hhc0VkaXRQZXJtaXNzaW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b3J1bihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBUZW1wbGF0ZS5jdXJyZW50RGF0YSgpO1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFN0ZWVkb3NUYWJsZS5nZXRLZXlzKGZpZWxkKTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRWYWx1ZSA9IFN0ZWVkb3NUYWJsZS5oYW5kbGVEYXRhKGZpZWxkLCBkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBTdGVlZG9zVGFibGUuc2V0VGFibGVWYWx1ZShmaWVsZCwgdmFsaWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgJChcInRib2R5W25hbWU9J1wiICsgZmllbGQgKyBcIlRib2R5J11cIikuaHRtbChTdGVlZG9zVGFibGUuZ2V0VGJvZHkoa2V5cywgZmllbGQsIFN0ZWVkb3NUYWJsZS5nZXRUYWJsZVZhbHVlKGZpZWxkKSwgZGF0YS5hdHRzLmVkaXRhYmxlLCBzZmllbGRzRWRpdGFibGUpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgIH07XG59IiwiSW1hZ2VTaWduLmhlbHBlcnMgPVxuXHRzcGFjZVVzZXJTaWduOiAodXNlcklkKS0+XG5cdFx0c3BhY2UgPSBcIlwiXG5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdHNwYWNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnNwYWNlXG5cdFx0ZWxzZVxuXHRcdFx0c3BhY2UgPSBTZXNzaW9uLmdldChcInNwYWNlSWRcIilcblxuXHRcdHNwYWNlVXNlclNpZ24gPSBkYi5zcGFjZV91c2VyX3NpZ25zLmZpbmRPbmUoe3NwYWNlOiBzcGFjZSwgdXNlcjogdXNlcklkfSk7XG5cdFx0cmV0dXJuIHNwYWNlVXNlclNpZ25cblxuXHRpbWFnZVVSTDogKHVzZXJJZCktPlxuXG5cdFx0c3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24odXNlcklkKTtcblxuXHRcdGFic29sdXRlID0gZmFsc2VcblxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0YWJzb2x1dGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuYWJzb2x1dGVcblxuXHRcdGlmIHNwYWNlVXNlclNpZ24/LnNpZ25cblx0XHRcdGlmIGFic29sdXRlXG5cdFx0XHRcdHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCJhcGkvZmlsZXMvYXZhdGFycy9cIiArIHNwYWNlVXNlclNpZ24uc2lnbik7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBTdGVlZG9zLmFic29sdXRlVXJsKFwiYXBpL2ZpbGVzL2F2YXRhcnMvXCIgKyBzcGFjZVVzZXJTaWduLnNpZ24pO1xuIiwiSW1hZ2VTaWduLmhlbHBlcnMgPSB7XG4gIHNwYWNlVXNlclNpZ246IGZ1bmN0aW9uKHVzZXJJZCkge1xuICAgIHZhciBzcGFjZSwgc3BhY2VVc2VyU2lnbjtcbiAgICBzcGFjZSA9IFwiXCI7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgc3BhY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuc3BhY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwYWNlID0gU2Vzc2lvbi5nZXQoXCJzcGFjZUlkXCIpO1xuICAgIH1cbiAgICBzcGFjZVVzZXJTaWduID0gZGIuc3BhY2VfdXNlcl9zaWducy5maW5kT25lKHtcbiAgICAgIHNwYWNlOiBzcGFjZSxcbiAgICAgIHVzZXI6IHVzZXJJZFxuICAgIH0pO1xuICAgIHJldHVybiBzcGFjZVVzZXJTaWduO1xuICB9LFxuICBpbWFnZVVSTDogZnVuY3Rpb24odXNlcklkKSB7XG4gICAgdmFyIGFic29sdXRlLCBzcGFjZVVzZXJTaWduO1xuICAgIHNwYWNlVXNlclNpZ24gPSBJbWFnZVNpZ24uaGVscGVycy5zcGFjZVVzZXJTaWduKHVzZXJJZCk7XG4gICAgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBhYnNvbHV0ZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5hYnNvbHV0ZTtcbiAgICB9XG4gICAgaWYgKHNwYWNlVXNlclNpZ24gIT0gbnVsbCA/IHNwYWNlVXNlclNpZ24uc2lnbiA6IHZvaWQgMCkge1xuICAgICAgaWYgKGFic29sdXRlKSB7XG4gICAgICAgIHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCJhcGkvZmlsZXMvYXZhdGFycy9cIiArIHNwYWNlVXNlclNpZ24uc2lnbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RlZWRvcy5hYnNvbHV0ZVVybChcImFwaS9maWxlcy9hdmF0YXJzL1wiICsgc3BhY2VVc2VyU2lnbi5zaWduKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCJUcmFjZXNIYW5kbGVyLmhlbHBlcnMgPVxuXHRzaG93U2lnbkltYWdlOiAoaGFuZGxlciwgaXNfZmluaXNoZWQsIGp1ZGdlLCB0cmFjZVNob3dTaWduSW1hZ2UpIC0+XG5cdFx0aWYgdHJhY2VTaG93U2lnbkltYWdlID09IGZhbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRpZiAhaXNfZmluaXNoZWRcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGlmIFsncmV0dXJuZWQnLCAndGVybWluYXRlZCcsICdyZXRyaWV2ZWQnXS5pbmNsdWRlcyhqdWRnZSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdHNwYWNlVXNlclNpZ24gPSBJbWFnZVNpZ24uaGVscGVycy5zcGFjZVVzZXJTaWduKGhhbmRsZXIpXG5cblx0XHRpZiBzcGFjZVVzZXJTaWduPy5zaWduXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdG9iamVjdFVybDogKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCktPlxuXHRcdHJldHVybiBDcmVhdG9yLmdldE9iamVjdFVybChvYmplY3RfbmFtZSwgcmVjb3JkX2lkLCBhcHBfaWQpIiwiVHJhY2VzSGFuZGxlci5oZWxwZXJzID0ge1xuICBzaG93U2lnbkltYWdlOiBmdW5jdGlvbihoYW5kbGVyLCBpc19maW5pc2hlZCwganVkZ2UsIHRyYWNlU2hvd1NpZ25JbWFnZSkge1xuICAgIHZhciBzcGFjZVVzZXJTaWduO1xuICAgIGlmICh0cmFjZVNob3dTaWduSW1hZ2UgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghaXNfZmluaXNoZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFsncmV0dXJuZWQnLCAndGVybWluYXRlZCcsICdyZXRyaWV2ZWQnXS5pbmNsdWRlcyhqdWRnZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24oaGFuZGxlcik7XG4gICAgaWYgKHNwYWNlVXNlclNpZ24gIT0gbnVsbCA/IHNwYWNlVXNlclNpZ24uc2lnbiA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIG9iamVjdFVybDogZnVuY3Rpb24ob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKSB7XG4gICAgcmV0dXJuIENyZWF0b3IuZ2V0T2JqZWN0VXJsKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCk7XG4gIH1cbn07XG4iLCJtYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpXG5JbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzID1cblx0YXBwbGljYW50Q29udGV4dDogLT5cblx0XHRzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0ZGF0YSA9IHtcblx0XHRcdG5hbWU6ICdpbnNfYXBwbGljYW50Jyxcblx0XHRcdGF0dHM6IHtuYW1lOiAnaW5zX2FwcGxpY2FudCcsIGlkOiAnaW5zX2FwcGxpY2FudCcsIGNsYXNzOiAnc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCd9LFxuXHRcdFx0dmFsdWU6IHN0ZWVkb3NfaW5zdGFuY2UuYXBwbGljYW50X25hbWVcblx0XHR9XG5cdFx0aWYgbm90IHN0ZWVkb3NfaW5zdGFuY2UgfHwgc3RlZWRvc19pbnN0YW5jZS5zdGF0ZSAhPSBcImRyYWZ0XCJcblx0XHRcdGRhdGEuYXR0cy5kaXNhYmxlZCA9IHRydWVcblx0XHRyZXR1cm4gZGF0YTtcblxuXHRpbnN0YW5jZUlkOiAtPlxuXHRcdHJldHVybiAnaW5zdGFuY2Vmb3JtJzsjXCJpbnN0YW5jZV9cIiArIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKTtcblxuXHRmb3JtX3R5cGVzOiAtPlxuXHRcdGlmIEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKVxuXHRcdFx0cmV0dXJuICdkaXNhYmxlZCc7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuICdtZXRob2QnO1xuXG5cdHN0ZWVkb3NfZm9ybTogLT5cblx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXHRcdGlmIGZvcm1fdmVyc2lvblxuXHRcdFx0cmV0dXJuIGZvcm1fdmVyc2lvblxuXG5cdGlubmVyc3ViZm9ybUNvbnRleHQ6IChvYmopLT5cblx0XHRkb2NfdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuXHRcdG9ialtcInRhYmxlVmFsdWVzXCJdID0gaWYgZG9jX3ZhbHVlcyB0aGVuIGRvY192YWx1ZXNbb2JqLmNvZGVdIGVsc2UgW11cblx0XHRvYmpbXCJmb3JtSWRcIl0gPSBcImluc3RhbmNlZm9ybVwiO1xuXHRcdHJldHVybiBvYmo7XG5cblx0aW5zdGFuY2U6IC0+XG5cdFx0U2Vzc2lvbi5nZXQoXCJjaGFuZ2VfZGF0ZVwiKVxuXHRcdGlmIChTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIikpXG5cdFx0XHRzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0XHRyZXR1cm4gc3RlZWRvc19pbnN0YW5jZTtcblxuXHRlbXB0eTogKHZhbCkgLT5cblx0XHRpZiB2YWxcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdHVuZW1wdHk6ICh2YWwpIC0+XG5cdFx0aWYgdmFsXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0ZXF1YWxzOiAoYSwgYikgLT5cblx0XHRyZXR1cm4gKGEgPT0gYilcblxuXHR1bmVxdWFsczogKGEsIGIpIC0+XG5cdFx0cmV0dXJuICEoYSA9PSBiKVxuXG5cdGluY2x1ZGVzOiAoYSwgYikgLT5cblx0XHRyZXR1cm4gYi5zcGxpdCgnLCcpLmluY2x1ZGVzKGEpO1xuXG5cdGluY2x1ZGU6IChhLCBiKSAtPlxuXHRcdHJldHVybiBiLnNwbGl0KCcsJykuaW5jbHVkZXMoYSk7XG5cblx0ZmllbGRzOiAtPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG5cdFx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0XHRyZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuXG5cdGZvcm1hdERhdGU6IChkYXRlLCBvcHRpb25zKS0+XG5cdFx0aWYgIWRhdGVcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdGlmIG9wdGlvbnMgJiYgdHlwZW9mKG9wdGlvbnMpID09ICdzdHJpbmcnXG5cdFx0XHRvcHRpb25zID0gSlNPTi5wYXJzZShvcHRpb25zKTtcblxuXHRcdGlmICFvcHRpb25zLmZvcm1hdFxuXHRcdFx0b3B0aW9ucyA9IHtmb3JtYXQ6IFwiWVlZWS1NTS1ERCBISDptbVwifVxuXG5cdFx0cmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQob3B0aW9ucy5mb3JtYXQpO1xuXG5cdHRyYWNlczogLT5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdHN0ZWVkb3NEYXRhID0gVGVtcGxhdGUuaW5zdGFuY2UoKT8udmlldz8udGVtcGxhdGU/LnN0ZWVkb3NEYXRhXG5cdFx0XHRpbnN0YW5jZSA9IHN0ZWVkb3NEYXRhPy5pbnN0YW5jZVxuXHRcdFx0ZmxvdyA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRGbG93VmVyc2lvbihpbnN0YW5jZSk7XG5cdFx0XHRsb2NhbGUgPSBzdGVlZG9zRGF0YT8ubG9jYWxlXG5cdFx0XHRpZiBsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0XHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRcdGVsc2Vcblx0XHRcdGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cblx0XHRcdGZsb3cgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGbG93VmVyc2lvbigpXG5cblx0XHRcdGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIilcblxuXHRcdGlmICFpbnN0YW5jZSB8fCAhZmxvd1xuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0c3RlcHMgPSBmbG93LnN0ZXBzO1xuXG5cdFx0dHJhY2VzID0ge307XG5cblx0XHRpbnN0YW5jZS50cmFjZXM/LmZvckVhY2ggKHRyYWNlKS0+XG5cdFx0XHRzdGVwID0gc3RlcHMuZmluZFByb3BlcnR5QnlQSyhcIl9pZFwiLCB0cmFjZS5zdGVwKVxuXG5cdFx0XHRhcHByb3ZlcyA9IFtdXG5cblx0XHRcdHRyYWNlLmFwcHJvdmVzPy5mb3JFYWNoIChhcHByb3ZlKSAtPlxuXHRcdFx0XHRpZiB0cmFjZS5pc19maW5pc2hlZCA9PSB0cnVlXG4jIOW3sue7k+adn+eahOaYvuekuuS4uuaguOWHhi/pqbPlm54v5Y+W5raI55Sz6K+3XG5cdFx0XHRcdFx0aWYgYXBwcm92ZS5qdWRnZSA9PSAnYXBwcm92ZWQnXG5cdFx0XHRcdFx0XHRqdWRnZV9uYW1lID0gVEFQaTE4bi5fXyhcIkluc3RhbmNlIFN0YXRlIGFwcHJvdmVkXCIsIHt9LCBsb2NhbGUpXG5cdFx0XHRcdFx0ZWxzZSBpZiBhcHByb3ZlLmp1ZGdlID09ICdyZWplY3RlZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVqZWN0ZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJ3Rlcm1pbmF0ZWQnXG5cdFx0XHRcdFx0XHRqdWRnZV9uYW1lID0gVEFQaTE4bi5fXyhcIkluc3RhbmNlIFN0YXRlIHRlcm1pbmF0ZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJ3JlYXNzaWduZWQnXG5cdFx0XHRcdFx0XHRqdWRnZV9uYW1lID0gVEFQaTE4bi5fXyhcIkluc3RhbmNlIFN0YXRlIHJlYXNzaWduZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJ3JlbG9jYXRlZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVsb2NhdGVkXCIsIHt9LCBsb2NhbGUpXG5cdFx0XHRcdFx0ZWxzZSBpZiBhcHByb3ZlLmp1ZGdlID09ICcnXG5cdFx0XHRcdFx0XHRqdWRnZV9uYW1lID0gXCJcIlxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBcIlwiXG5cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcGVuZGluZ1wiLCB7fSwgbG9jYWxlKVxuXG5cdFx0XHRcdGFwcHJvdmVzLnB1c2hcblx0XHRcdFx0XHRfaWQ6IGFwcHJvdmUuX2lkXG5cdFx0XHRcdFx0aGFuZGxlcjogYXBwcm92ZS51c2VyXG5cdFx0XHRcdFx0aGFuZGxlcl9uYW1lOiBhcHByb3ZlLmhhbmRsZXJfbmFtZVxuXHRcdFx0XHRcdGhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWU6IGFwcHJvdmUuaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZVxuXHRcdFx0XHRcdGhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lOiBhcHByb3ZlLmhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lXG5cdFx0XHRcdFx0ZmluaXNoX2RhdGU6IGFwcHJvdmUuZmluaXNoX2RhdGVcblx0XHRcdFx0XHRqdWRnZTogYXBwcm92ZS5qdWRnZVxuXHRcdFx0XHRcdGp1ZGdlX25hbWU6IGp1ZGdlX25hbWVcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogYXBwcm92ZS5kZXNjcmlwdGlvblxuXHRcdFx0XHRcdGlzX2ZpbmlzaGVkOiBhcHByb3ZlLmlzX2ZpbmlzaGVkXG5cdFx0XHRcdFx0dHlwZTogYXBwcm92ZS50eXBlXG5cdFx0XHRcdFx0b3Bpbmlvbl9maWVsZHNfY29kZTogYXBwcm92ZS5vcGluaW9uX2ZpZWxkc19jb2RlXG5cdFx0XHRcdFx0c2lnbl9maWVsZF9jb2RlOiBhcHByb3ZlLnNpZ25fZmllbGRfY29kZVxuXHRcdFx0XHRcdGlzX3JlYWQ6IGFwcHJvdmUuaXNfcmVhZFxuXHRcdFx0XHRcdHNpZ25fc2hvdzogYXBwcm92ZS5zaWduX3Nob3dcblxuXG5cdFx0XHRpZiBzdGVwXG5cdFx0XHRcdGlmIHN0ZXAubmFtZSBvZiB0cmFjZXNcblx0XHRcdFx0XHR0cmFjZXNbc3RlcC5uYW1lXSA9IHRyYWNlc1tzdGVwLm5hbWVdLmNvbmNhdChhcHByb3Zlcylcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRyYWNlc1tzdGVwLm5hbWVdID0gYXBwcm92ZXNcblxuXHRcdHJldHVybiB0cmFjZXM7XG5cblxuXG5cdGRvY192YWx1ZXM6IC0+XG5cdFx0V29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuXG5cdGluc3RhbmNlX2JveF9zdHlsZTogLT5cblx0XHRib3ggPSBTZXNzaW9uLmdldChcImJveFwiKVxuXHRcdGlmIGJveCA9PSBcImluYm94XCIgfHwgYm94ID09IFwiZHJhZnRcIlxuXHRcdFx0anVkZ2UgPSBTZXNzaW9uLmdldChcImp1ZGdlXCIpXG5cdFx0XHRpZiBqdWRnZVxuXHRcdFx0XHRpZiAoanVkZ2UgPT0gXCJhcHByb3ZlZFwiKVxuXHRcdFx0XHRcdHJldHVybiBcImJveC1zdWNjZXNzXCJcblx0XHRcdFx0ZWxzZSBpZiAoanVkZ2UgPT0gXCJyZWplY3RlZFwiKVxuXHRcdFx0XHRcdHJldHVybiBcImJveC1kYW5nZXJcIlxuXHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGlmIGlucyAmJiBpbnMuZmluYWxfZGVjaXNpb25cblx0XHRcdGlmIGlucy5maW5hbF9kZWNpc2lvbiA9PSBcImFwcHJvdmVkXCJcblx0XHRcdFx0cmV0dXJuIFwiYm94LXN1Y2Nlc3NcIlxuXHRcdFx0ZWxzZSBpZiAoaW5zLmZpbmFsX2RlY2lzaW9uID09IFwicmVqZWN0ZWRcIilcblx0XHRcdFx0cmV0dXJuIFwiYm94LWRhbmdlclwiXG5cbiNpc19kaXNhYmxlZDogLT5cbiMgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4jICAgIGlmICFpbnNcbiMgICAgICAgIHJldHVybjtcbiMgICAgaWYgaW5zLnN0YXRlIT1cImRyYWZ0XCJcbiMgICAgICAgIHJldHVybiBcImRpc2FibGVkXCI7XG4jICAgIHJldHVybjtcblxuXHR0YWJsZV9maWVsZHM6IChpbnN0YW5jZSktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblx0XHRlbHNlXG5cdFx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0Rm9ybVZlcnNpb24oaW5zdGFuY2UuZm9ybSwgaW5zdGFuY2UuZm9ybV92ZXJzaW9uKVxuXHRcdGlmIGZvcm1fdmVyc2lvblxuXHRcdFx0ZmllbGRzID0gXy5jbG9uZShmb3JtX3ZlcnNpb24uZmllbGRzKTtcblxuXHRcdFx0ZmllbGRzLmZvckVhY2ggKGZpZWxkLCBpbmRleCkgLT5cblx0XHRcdFx0ZmllbGQudHJfc3RhcnQgPSBcIlwiO1xuXHRcdFx0XHRmaWVsZC50cl9lbmQgPSBcIlwiO1xuXHRcdFx0XHR0ZF9jb2xzcGFuID0gMTtcbiNcdFx0XHRcdOW8uuWItuiuvue9ruagh+WktOWtl+auteS4uuWuveWtl+autVxuXHRcdFx0XHRpZiBDb3JlRm9ybT8ucGFnZVRpdGxlRmllbGROYW1lID09IGZpZWxkLmNvZGVcblx0XHRcdFx0XHRmaWVsZC5pc193aWRlID0gdHJ1ZVxuXG5cdFx0XHRcdGlmIGZpZWxkLmZvcm11bGEgJiYgZmllbGQudHlwZSAhPSAnb2RhdGEnXG5cdFx0XHRcdFx0ZmllbGQucGVybWlzc2lvbiA9IFwicmVhZG9ubHlcIjtcblxuXHRcdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcbiMg5aaC5p6c5b2T5YmN5a2X5q615piv5YiG57uE44CB6KGo5qC844CB5a695a2X5q61XG5cdFx0XHRcdFx0aWYgZmllbGQudHlwZSA9PSAnc2VjdGlvbicgfHwgZmllbGQudHlwZSA9PSAndGFibGUnXG5cdFx0XHRcdFx0XHRmaWVsZC50ZF9jb2xzcGFuID0gNDtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRmaWVsZC50ZF9jb2xzcGFuID0gMztcblxuXHRcdFx0XHRcdGlmIGluZGV4ICE9IDBcblx0XHRcdFx0XHRcdGZpZWxkLnRyX3N0YXJ0ID0gXCI8dHI+XCI7XG5cdFx0XHRcdFx0XHRmaWVsZC50cl9lbmQgPSBcIjwvdHI+XCI7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRwcmVfZmllbGRzID0gZmllbGRzLnNsaWNlKDAsIGluZGV4KTtcblxuXHRcdFx0XHRcdHByZV93aWRlX2ZpZWxkcyA9IHByZV9maWVsZHMuZmlsdGVyUHJvcGVydHkoXCJpc193aWRlXCIsIHRydWUpO1xuXG5cdFx0XHRcdFx0dHJfc3RhcnQgPSBcIlwiO1xuXG5cdFx0XHRcdFx0dHJfZW5kID0gXCJcIjtcblxuXHRcdFx0XHRcdCMg5YWI6K6h566X5b2T5YmN5a2X5q615piv5ZCm5Li65a695a2X5q61XG5cdFx0XHRcdFx0YmVmb3JlX2ZpZWxkID0gbnVsbDtcblx0XHRcdFx0XHRhZnRlcl9maWVsZCA9IG51bGw7XG5cblx0XHRcdFx0XHRpZiBpbmRleCA+IDBcblx0XHRcdFx0XHRcdGJlZm9yZV9maWVsZCA9IGZpZWxkc1tpbmRleCAtIDFdXG5cblx0XHRcdFx0XHRpZiBpbmRleCA8IGZpZWxkcy5sZW5ndGggLSAxXG5cdFx0XHRcdFx0XHRhZnRlcl9maWVsZCA9IGZpZWxkc1tpbmRleCArIDFdXG5cblx0XHRcdFx0XHQjIOWmguaenOW9k+WJjeWtl+auteaYr+WIhue7hOOAgeihqOagvOOAgeWuveWtl+autVxuXHRcdFx0XHRcdGlmIGZpZWxkLnR5cGUgPT0gJ3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT0gJ3RhYmxlJ1xuXHRcdFx0XHRcdFx0dGRfY29sc3BhbiA9IDQ7XG5cdFx0XHRcdFx0ZWxzZSBpZiBmaWVsZC5pc193aWRlXG5cdFx0XHRcdFx0XHR0ZF9jb2xzcGFuID0gMztcblx0XHRcdFx0XHRlbHNlXG4jIOWJjeWQjumDveaYr+WuveWtl+autVxuXHRcdFx0XHRcdFx0aWYgYmVmb3JlX2ZpZWxkICYmIGFmdGVyX2ZpZWxkICYmIGJlZm9yZV9maWVsZC5pc193aWRlICYmIGFmdGVyX2ZpZWxkLmlzX3dpZGVcblx0XHRcdFx0XHRcdFx0ZmllbGQuaXNfd2lkZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHRkX2NvbHNwYW4gPSAzO1xuXG5cdFx0XHRcdFx0XHQjIOW9k+WJjeaYr3RyIOS4i+eahCDnrKzkuIDkuKp0ZCAmIOWQjui+ueeahOWtl+auteaYr+WuveWtl+autVxuXHRcdFx0XHRcdFx0aWYgKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyID09IDAgJiYgYWZ0ZXJfZmllbGQgJiYgYWZ0ZXJfZmllbGQuaXNfd2lkZVxuXHRcdFx0XHRcdFx0XHRmaWVsZC5pc193aWRlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0dGRfY29sc3BhbiA9IDM7XG5cblx0XHRcdFx0XHRcdCMg5b2T5YmN5pivdHIg5LiL55qEIOesrOS4gOS4qnRkICYg5b2T5YmN5a2X5q615piv5pyA5ZCO5LiA5Liq5a2X5q61XG5cdFx0XHRcdFx0XHRpZiAocHJlX2ZpZWxkcy5sZW5ndGggKyBwcmVfd2lkZV9maWVsZHMubGVuZ3RoKSAlIDIgPT0gMCAmJiBhZnRlcl9maWVsZCA9PSBudWxsXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmlzX3dpZGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR0ZF9jb2xzcGFuID0gMztcblxuXHRcdFx0XHRcdGZpZWxkLnRkX2NvbHNwYW4gPSB0ZF9jb2xzcGFuO1xuXG5cblx0XHRcdFx0XHRpZiBpbmRleCA9PSAwXG4jIHRyX3N0YXJ0ID0gXCI8dHI+XCI7IOeUseS6jlRlbXBsYXRl55qE57yW6K+RYnVn77yM5a+86Ie05q+P5qyh57uZ5LiA5LiqdHLlvIDlp4vml7bvvIzkvJroh6rliqjooaXlpLTmiJbooaXlsL7jgILlm6DmraTlnKjnrKzkuIDooYzov5Tlm57kuIDkuKrnqbrlrZfnrKbkuLIuXG5cdFx0XHRcdFx0XHR0cl9zdGFydCA9IFwiPHRyPlwiO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGlmIChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PSAwIHx8IGZpZWxkLmlzX3dpZGVcblx0XHRcdFx0XHRcdFx0aWYgZmllbGQudHlwZSA9PSAndGFibGUnXG5cdFx0XHRcdFx0XHRcdFx0dHJfc3RhcnQgPSBcIjx0ciBjbGFzcyA9IFxcXCJ0ci1jaGlsZC10YWJsZVxcXCI+XCI7XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHR0cl9zdGFydCA9IFwiPHRyPlwiO1xuXG5cdFx0XHRcdFx0ZmllbGQudHJfc3RhcnQgPSB0cl9zdGFydDtcblxuXG5cdFx0XHRcdFx0aWYgaW5kZXggKyAxID09IGZpZWxkcy5sZW5ndGggfHwgZmllbGQudHlwZSA9PSAnc2VjdGlvbicgfHwgZmllbGQudHlwZSA9PSAndGFibGUnIHx8IGZpZWxkLmlzX3dpZGVcblx0XHRcdFx0XHRcdHRyX2VuZCA9IFwiPC90cj5cIjtcblxuXHRcdFx0XHRcdGlmIChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiAhPSAwXG5cdFx0XHRcdFx0XHR0cl9lbmQgPSBcIjwvdHI+XCI7XG5cblx0XHRcdFx0XHRmaWVsZC50cl9lbmQgPSB0cl9lbmQ7XG5cblx0XHRcdHJldHVybiBmaWVsZHM7XG5cblx0c29ydF9hcHByb3ZlOiAoYXBwcm92ZXMsIG9yZGVyKS0+XG5cdFx0aWYgIWFwcHJvdmVzXG5cdFx0XHRyZXR1cm4gW11cblxuXHRcdGlmICFhcHByb3ZlcyBpbnN0YW5jZW9mIEFycmF5XG5cdFx0XHRyZXR1cm4gW11cblx0XHRlbHNlXG5cdFx0XHRpZiBvcmRlciA9PSAnZGVzYydcblx0XHRcdFx0YXBwcm92ZXMuc29ydCAocDEsIHAyKSAtPlxuXHRcdFx0XHRcdF9wMSA9IDBcblx0XHRcdFx0XHRfcDIgPSAwXG5cblx0XHRcdFx0XHRpZiBwMS5maW5pc2hfZGF0ZVxuXHRcdFx0XHRcdFx0X3AxID0gcDEuZmluaXNoX2RhdGUuZ2V0VGltZSgpXG5cblx0XHRcdFx0XHRpZiBwMi5maW5pc2hfZGF0ZVxuXHRcdFx0XHRcdFx0X3AyID0gcDIuZmluaXNoX2RhdGUuZ2V0VGltZSgpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIF9wMiAtIF9wMVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRhcHByb3Zlcy5zb3J0IChwMSwgcDIpIC0+XG5cdFx0XHRcdFx0X3AxID0gMFxuXHRcdFx0XHRcdF9wMiA9IDBcblxuXHRcdFx0XHRcdGlmIHAxLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRfcDEgPSBwMS5maW5pc2hfZGF0ZS5nZXRUaW1lKClcblxuXHRcdFx0XHRcdGlmIHAyLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRfcDIgPSBwMi5maW5pc2hfZGF0ZS5nZXRUaW1lKCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gX3AxIC0gX3AyXG5cdFx0cmV0dXJuIGFwcHJvdmVzXG5cblx0X3Q6IChrZXkpLT5cblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXkpXG5cdGdldEZpZWxkOiAoY29kZSktPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb25cblx0XHRpZiBmb3JtX3ZlcnNpb25cblx0XHRcdHJldHVybiBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpXG5cblx0Z2V0VmFsdWU6IChjb2RlKS0+XG5cdFx0aW5zdGFuY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuaW5zdGFuY2VcblxuXHRcdGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb25cblxuXHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblxuXHRcdHV0Y09mZnNldCA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS51dGNPZmZzZXRcblxuXHRcdHZhbHVlcyA9IGluc3RhbmNlLnZhbHVlcyB8fCB7fVxuXG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHR2YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKClcblxuXHRcdHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgdmFsdWVzW2NvZGVdLCBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpLCBsb2NhbGUsIHV0Y09mZnNldFxuXG5cdGdldExhYmVsOiAoY29kZSktPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb25cblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwgZm9ybV92ZXJzaW9uLmZpZWxkcywgY29kZVxuXG5cdGdldENmQ2xhc3M6IChmaWVsZCktPlxuXHRcdGlmIGZpZWxkPy50eXBlID09IFwiaW5wdXRcIiAmJiBmaWVsZD8uaXNfdGV4dGFyZWFcblx0XHRcdHJldHVybiBcImNmVGV4dGFyZWFcIlxuXG5cdGdldFRhYmxlVGhlYWQ6IChmaWVsZCktPlxuXHRcdHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VGhlYWQoZmllbGQsIGZhbHNlKVxuXG5cdGdldFRhYmxlQm9keTogKGZpZWxkKS0+XG5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlXG5cdFx0XHR2YWx1ZXMgPSBpbnN0YW5jZS52YWx1ZXMgfHwge31cblx0XHRlbHNlXG5cdFx0XHR2YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKClcblxuXHRcdHRhYmxlVmFsdWUgPSB2YWx1ZXNbZmllbGQuY29kZV07XG5cdFx0cmV0dXJuIFN0ZWVkb3NUYWJsZS5nZXRUYm9keShmaWVsZC5zZmllbGRzLmdldFByb3BlcnR5KFwiY29kZVwiKSwgZmllbGQsIHRhYmxlVmFsdWUsIGZhbHNlKVxuXG5cdHNob3dMYWJlbDogKGZpZWxkKS0+XG5cdFx0dGVtcGxhdGVEYXRhID0gVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhXG5cdFx0aWYgdGVtcGxhdGVEYXRhLmxhYmVsID09IGZhbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRyZXR1cm4gdHJ1ZVxuXG4jXHRhZkZpZWxkTGFiZWxUZXh0OiAob3ApLT5cbiNcdFx0aWYgIVRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YVxuI1x0XHRcdHJldHVybiBBdXRvRm9ybS5nZXRMYWJlbEZvckZpZWxkKG9wLm5hbWUpXG4jXHRcdGVsc2VcbiNcdFx0XHRmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uXG4jXHRcdFx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldExhYmVsIGZvcm1fdmVyc2lvbi5maWVsZHMsIG9wPy5oYXNoPy5uYW1lXG5cblx0aXNPcGluaW9uRmllbGQ6IChmaWVsZCktPlxuXHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkLmZvcm11bGEpXG5cblx0aXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmc6IChmaWVsZF9mb3JtdWxhKS0+XG5cdFx0cmV0dXJuIEluc3RhbmNlU2lnblRleHQuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSlcblxuXHRpbmNsdWRlc09waW5pb25GaWVsZDogKGZvcm0sIGZvcm1fdmVyc2lvbiktPlxuXG5cdFx0ZmllbGRfZm9ybXVsYXMgPSBuZXcgQXJyYXkoKTtcblxuXHRcdGZpZWxkcyA9IGRiLmZvcm1fdmVyc2lvbnMuZmluZE9uZSh7X2lkOiBmb3JtX3ZlcnNpb24sIGZvcm06IGZvcm19KT8uZmllbGRzIHx8IFtdXG5cblx0XHRmaWVsZHMuZm9yRWFjaCAoZiktPlxuXHRcdFx0aWYgZi50eXBlID09ICd0YWJsZSdcblx0XHRcdFx0Y29uc29sZS5sb2cgJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJ1xuXHRcdFx0ZWxzZSBpZiBmLnR5cGUgPT0gJ3NlY3Rpb24nXG5cdFx0XHRcdGY/LmZpZWxkcz8uZm9yRWFjaCAoZjEpLT5cblx0XHRcdFx0XHRmaWVsZF9mb3JtdWxhcy5wdXNoIGYxLmZvcm11bGFcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZmllbGRfZm9ybXVsYXMucHVzaCBmLmZvcm11bGFcblxuXHRcdF8uc29tZSBmaWVsZF9mb3JtdWxhcywgKGZpZWxkX2Zvcm11bGEpLT5cblx0XHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpXG5cblx0Z2V0T3BpbmlvbkZpZWxkU3RlcHNOYW1lOiAoZmllbGRfZm9ybXVsYSwgdG9wX2tleXdvcmRzKS0+XG5cblx0XHRvcGluaW9uRmllbGRzID0gbmV3IEFycmF5KCk7XG4jXHRcdGNvbnNvbGUubG9nKFwiZmllbGRfZm9ybXVsYVwiLCBmaWVsZF9mb3JtdWxhKVxuXHRcdGlmIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSlcblx0XHRcdGlmIGZpZWxkX2Zvcm11bGFcblxuI1x0XHRcdFx0Zm9vMSA9IGZpZWxkX2Zvcm11bGEuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdGZvbzEgPSBmaWVsZF9mb3JtdWxhLnNwbGl0KFwiO1wiKVxuXG4jXHRcdFx0XHRpZiB0b3Bfa2V5d29yZHNcbiNcdFx0XHRcdFx0Zm9vMSA9IGZpZWxkX2Zvcm11bGEuc3BsaXQoXCI7XCIpXG5cblx0XHRcdFx0Zm9vMS5mb3JFYWNoIChmb28pLT5cblx0XHRcdFx0XHRqc29uX2Zvcm11bGEgPSB7fVxuXG5cdFx0XHRcdFx0dHJ5XG5cdFx0XHRcdFx0XHRqc29uX2Zvcm11bGEgPSBldmFsKFwiKFwiICsgZm9vICsgXCIpXCIpXG5cdFx0XHRcdFx0Y2F0Y2hcblx0XHRcdFx0XHRcdGpzb25fZm9ybXVsYSA9IHt9XG5cblx0XHRcdFx0XHRpZiBqc29uX2Zvcm11bGE/LnlpamlhbmxhblxuXHRcdFx0XHRcdFx0c2YgPSB7fVxuXG5cdFx0XHRcdFx0XHRzZi5zdGVwTmFtZSA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4uc3RlcFxuXG5cdFx0XHRcdFx0XHRzZi5pbWFnZV9zaWduID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5pbWFnZV9zaWduIHx8IGZhbHNlXG5cblx0XHRcdFx0XHRcdHNmLm9ubHlfY2Nfb3BpbmlvbiA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4ub25seV9jYyB8fCBmYWxzZVxuXG5cdFx0XHRcdFx0XHRzZi5kZWZhdWx0X2Rlc2NyaXB0aW9uID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5kZWZhdWx0XG5cblx0XHRcdFx0XHRcdHNmLm9ubHlfaGFuZGxlciA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4ub25seV9oYW5kbGVyXG5cblx0XHRcdFx0XHRcdHNmLnRvcF9rZXl3b3JkcyA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4udG9wX2tleXdvcmRzIHx8IHRvcF9rZXl3b3Jkc1xuXG5cdFx0XHRcdFx0XHRvcGluaW9uRmllbGRzLnB1c2goc2YpO1xuXG5cdFx0XHRcdFx0ZWxzZSBpZihmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3RyYWNlcy5cIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpID4gLTEpXG5cblx0XHRcdFx0XHRcdHNmID0ge29ubHlfY2Nfb3BpbmlvbjogZmFsc2UsIGltYWdlX3NpZ246IGZhbHNlLCB0b3Bfa2V5d29yZHM6IHRvcF9rZXl3b3Jkc31cblxuXHRcdFx0XHRcdFx0aWYgZm9vLmluZGV4T2YoXCJ7c2lnbmF0dXJlLlwiKSA+IC0xXG5cdFx0XHRcdFx0XHRcdHNmLmltYWdlX3NpZ24gPSB0cnVlXG5cdFx0XHRcdFx0XHRcdGZvbyA9IGZvby5yZXBsYWNlKFwie3NpZ25hdHVyZS5cIixcIlwiKTtcblxuXHRcdFx0XHRcdFx0czEgPSBmb28ucmVwbGFjZShcIntcIixcIlwiKS5yZXBsYWNlKFwifVwiLFwiXCIpXG5cdFx0XHRcdFx0XHRpZiBzMS5zcGxpdChcIi5cIikubGVuZ3RoID4gMVxuXHRcdFx0XHRcdFx0XHRzZi5zdGVwTmFtZSA9IHMxLnNwbGl0KFwiLlwiKVsxXVxuXHRcdFx0XHRcdFx0XHRpZiBvcGluaW9uRmllbGRzLmZpbHRlclByb3BlcnR5KFwic3RlcE5hbWVcIixzZi5zdGVwTmFtZSkubGVuZ3RoID4gMFxuXHRcdFx0XHRcdFx0XHRcdG9waW5pb25GaWVsZHMuZmluZFByb3BlcnR5QnlQSyhcInN0ZXBOYW1lXCIsIHNmLnN0ZXBOYW1lKT8ub25seV9jY19vcGluaW9uID0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0aWYgczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIHMxLnNwbGl0KFwiLlwiKVsyXT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnY2MnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNmLm9ubHlfY2Nfb3BpbmlvbiA9IHRydWVcblx0XHRcdFx0XHRcdG9waW5pb25GaWVsZHMucHVzaChzZik7XG5cblx0XHRyZXR1cm4gb3BpbmlvbkZpZWxkc1xuXG5cdHNob3dDQ09waW5pb246IChmaWVsZCktPlxuXHRcdGlmIGZpZWxkLmZvcm11bGE/LmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA+IC0xIHx8IGZpZWxkLmZvcm11bGE/LmluZGV4T2YoXCJ7c2lnbmF0dXJlLnRyYWNlcy5cIikgPiAtMVxuXHRcdFx0czEgPSBmaWVsZC5mb3JtdWxhLnJlcGxhY2UoXCJ7c2lnbmF0dXJlLlwiLFwiXCIpLnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKVxuXHRcdFx0aWYgczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDJcblx0XHRcdFx0aWYgczEuc3BsaXQoXCIuXCIpWzJdPy50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICdjYydcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdG1hcmtEb3duVG9IdG1sOiAobWFya0Rvd25TdHJpbmcpLT5cblx0XHRpZiBtYXJrRG93blN0cmluZ1xuXHRcdFx0IyByZW5kZXJlciA9IG5ldyBNYXJrZG93bi5SZW5kZXJlcigpO1xuXHRcdFx0IyByZW5kZXJlci5saW5rID0gKCBocmVmLCB0aXRsZSwgdGV4dCApIC0+XG5cdFx0XHQjIFx0cmV0dXJuIFwiPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9JyN7aHJlZn0nIHRpdGxlPScje3RpdGxlfSc+I3t0ZXh0fTwvYT5cIlxuXHRcdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdG1hcmtlZCA9IE5wbS5yZXF1aXJlKCdtYXJrZWQnKVxuXHRcdFx0cmV0dXJuIFNwYWNlYmFycy5TYWZlU3RyaW5nKG1hcmtlZC5wYXJzZShtYXJrRG93blN0cmluZykpXG5cblx0Zl9sYWJlbDogKHRoYXQpLT5cblx0XHRyZXR1cm4gdGhhdC5uYW1lIHx8IHRoYXQuY29kZVxuXG5pZiBNZXRlb3IuaXNTZXJ2ZXJcblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5zdGVlZG9zX2Zvcm0gPSAtPlxuXHRcdHJldHVybiB0aGlzLmZvcm1fdmVyc2lvblxuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNTZWN0aW9uID0gKGNvZGUpLT5cblx0XHRmb3JtX3ZlcnNpb24gPSB0aGlzLmZvcm1fdmVyc2lvblxuXHRcdHJldHVybiBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpLnR5cGUgPT0gJ3NlY3Rpb24nXG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5kb2NfdmFsdWVzID0gLT5cblx0XHRpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG5cdFx0cmV0dXJuIGluc3RhbmNlLnZhbHVlcztcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmFwcGxpY2FudENvbnRleHQgPSAtPlxuXHRcdGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZTtcblx0XHRkYXRhID0ge1xuXHRcdFx0bmFtZTogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0YXR0czoge25hbWU6ICdpbnNfYXBwbGljYW50JywgaWQ6ICdpbnNfYXBwbGljYW50JywgY2xhc3M6ICdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCBpbnNfYXBwbGljYW50J30sXG5cdFx0XHR2YWx1ZTogaW5zdGFuY2UuYXBwbGljYW50X25hbWVcblx0XHR9XG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnN0YW5jZSA9IC0+XG5cdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2VcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmZpZWxkcyA9IC0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gdGhpcy5mb3JtX3ZlcnNpb25cblx0XHRpZiBmb3JtX3ZlcnNpb25cblx0XHRcdHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWEoZm9ybV92ZXJzaW9uKSk7XG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5mb3JtX3R5cGVzID0gLT5cblx0XHRyZXR1cm4gXCJkaXNhYmxlZFwiXG5cblx0VGVtcGxhdGUucmVnaXN0ZXJIZWxwZXIgXCJhZkZpZWxkTGFiZWxUZXh0XCIsIChvcCktPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb25cblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwgZm9ybV92ZXJzaW9uLmZpZWxkcywgb3A/Lmhhc2g/Lm5hbWVcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLl90ID0gKGtleSktPlxuXHRcdGxvY2FsZSA9IHRoaXMubG9jYWxlXG5cblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpXG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnNfYXR0YWNoX2Rvd25sb2FkX3VybCA9IChfaWQsIGFic29sdXRlKS0+XG5cdFx0aWYgYWJzb2x1dGVcblx0XHRcdHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCIvYXBpL2ZpbGVzL2luc3RhbmNlcy8je19pZH0/ZG93bmxvYWQ9dHJ1ZVwiKTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gXCIvYXBpL2ZpbGVzL2luc3RhbmNlcy8je19pZH0/ZG93bmxvYWQ9dHJ1ZVwiO1xuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMub3B0aW9ucyA9IChmaWVsZCktPlxuXHRcdG9wdGlvbnMgPSBmaWVsZD8ub3B0aW9ucz8uc3BsaXQoXCJcXG5cIilcblx0XHRyZXYgPSBbXVxuXHRcdG9wdGlvbnM/LmZvckVhY2ggKGl0ZW0pLT5cblx0XHRcdHJldi5wdXNoKHtsYWJlbDogaXRlbSwgdmFsdWU6IGl0ZW19KVxuXG5cdFx0cmV0dXJuIHJldlxuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZ2V0UGVybWlzc2lvbnMgPSAoY29kZSktPlxuXHRcdGlmICFUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuc3RhcnRTdGVwRWRpdGFibGVGaWVsZHM/LmluY2x1ZGVzKGNvZGUpXG5cdFx0XHRyZXR1cm4gXCJyZWFkb25seSBkaXNhYmxlZFwiXG5cdFx0cmV0dXJuIFwiXCJcblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUuZXZlbnRzID1cblx0J2NoYW5nZSAuZm9ybS1jb250cm9sLC5jaGVja2JveCBpbnB1dCwuYWYtcmFkaW8tZ3JvdXAgaW5wdXQsLmFmLWNoZWNrYm94LWdyb3VwIGlucHV0JzogKGV2ZW50KS0+XG5cdFx0SW5zdGFuY2VNYW5hZ2VyLmluc3RhbmNlZm9ybUNoYW5nZUV2ZW50KGV2ZW50KVxuXG5cdCd0eXBlYWhlYWQ6Y2hhbmdlIC5mb3JtLWNvbnRyb2wnOiAoZXZlbnQpIC0+XG5cdFx0SW5zdGFuY2VNYW5hZ2VyLmluc3RhbmNlZm9ybUNoYW5nZUV2ZW50KGV2ZW50KVxuXG5cdCdjbGljayAuY2ZUZXh0YXJlYSBhJzogKGV2ZW50KS0+XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRTdGVlZG9zLm9wZW5XaW5kb3coZXZlbnQudGFyZ2V0LmhyZWYpO1xuXG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLm9uQ3JlYXRlZCA9ICgpLT5cblx0aW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0aWYgIWluc3RhbmNlXG5cdFx0cmV0dXJuO1xuXG5cdHRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlKTtcblxuXHR0cnlcblx0XHRjb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodGVtcGxhdGUsIHtpc0JvZHk6IHRydWV9KTtcblx0Y2F0Y2ggZVxuXHRcdGNvbnNvbGUubG9nIFwiSW5zdGFuY2UgVGVtcGxhdGUgRXJyb3JcIiwgZVxuXHRcdGNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShcIlwiLCB7aXNCb2R5OiB0cnVlfSk7XG5cblxuXHRyZW5kZXJGdW5jdGlvbiA9IGV2YWwoY29tcGlsZWQpO1xuXG5cdGluc3RhbmNlVmlldyA9IG5ldyBCbGF6ZS5WaWV3KFwiY3VzdG9tX2luc3RhbmNlX3RlbXBsYXRlXCIsIHJlbmRlckZ1bmN0aW9uKTtcblxuXHRpbnN0YW5jZUN1c3RvbVRlbXBsYXRlID0gbmV3IEJsYXplLlRlbXBsYXRlKGluc3RhbmNlVmlldy5uYW1lLCByZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfY3VzdG9tX3RlbXBsYXRlID0gaW5zdGFuY2VDdXN0b21UZW1wbGF0ZVxuXG5cdFRlbXBsYXRlLmluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZS5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuXG5cblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUub25SZW5kZXJlZCA9ICgpLT5cblx0IyB0ID0gdGhpcztcblxuXHQjdC5zdWJzY3JpYmUgXCJpbnN0YW5jZV9kYXRhXCIsIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSwgLT5cblx0IyAgICBUcmFja2VyLmFmdGVyRmx1c2ggLT5cblx0aW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0aWYgIWluc3RhbmNlXG5cdFx0cmV0dXJuO1xuXG5cdCMkKFwiI2luc19hcHBsaWNhbnRcIikuc2VsZWN0MigpLnZhbChpbnN0YW5jZS5hcHBsaWNhbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHQjJChcIiNpbnNfYXBwbGljYW50XCIpLnZhbChpbnN0YW5jZS5hcHBsaWNhbnQpO1xuXHRJbnN0YW5jZU1hbmFnZXIuc2V0SW5zdGFuY2VGb3JtQXBwbGljYW50KGluc3RhbmNlLmFwcGxpY2FudCwgaW5zdGFuY2UuYXBwbGljYW50X25hbWUpXG5cblxuXHRBcHByb3ZlTWFuYWdlci5lcnJvciA9IHtuZXh0U3RlcHM6ICcnLCBuZXh0U3RlcFVzZXJzOiAnJ307XG5cblx0IyBpbnN0YW5jZSBmcm9t57uR5a6a5LqL5Lu2XG5cdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2RyYWZ0J1xuXHRcdEluc3RhbmNlRXZlbnQuaW5pdEV2ZW50cyhpbnN0YW5jZS5mbG93KTtcblxuXHRpZiAhQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cblx0XHRjdXJyZW50QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpO1xuXG5cblx0XHRpbnN0YW5jZU51bWJlckZpZWxkcyA9ICQoXCJbZGF0YS1mb3JtdWxhXVwiLCAkKFwiI2luc3RhbmNlZm9ybVwiKSlcblxuXHRcdGluc3RhbmNlTnVtYmVyRmllbGRzLmVhY2ggKCktPlxuXHRcdFx0c2NoZW1hS2V5ID0gdGhpcy5kYXRhc2V0LnNjaGVtYUtleVxuXHRcdFx0ZWxlbWVudCA9ICQodGhpcylcblx0XHRcdGlmICEkKHRoaXMpLnZhbCgpICYmIHNjaGVtYUtleSAmJiBTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIilcblx0XHRcdFx0TWV0ZW9yLmNhbGwgJ2dldEluc3RhbmNlVmFsdWVzJywgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpLCAoZXJyb3IsIHJlc3VsdCktPlxuXHRcdFx0XHRcdGlmIGVycm9yXG5cdFx0XHRcdFx0XHR0b2FzdHIuZXJyb3IoZXJyb3IucmVhc29uKVxuXG5cdFx0XHRcdFx0aWYgIXJlc3VsdFtzY2hlbWFLZXldXG5cdFx0XHRcdFx0XHRrZXkgPSBlbGVtZW50LmRhdGEoXCJmb3JtdWxhXCIpPy5yZXBsYWNlKFwiYXV0b19udW1iZXIoXCIsIFwiXCIpLnJlcGxhY2UoXCIpXCIsIFwiXCIpXG5cblx0XHRcdFx0XHRcdGtleSA9IGtleS5yZXBsYWNlKC9cXFwiL2csIFwiXCIpLnJlcGxhY2UoL1xcJy9nLCBcIlwiKVxuXG5cdFx0XHRcdFx0XHRpZiBrZXkuaW5kZXhPZihcIntcIikgPiAtMVxuXHRcdFx0XHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZShcIntcIixcIlwiKS5yZXBsYWNlKFwifVwiLFwiXCIpXG5cdFx0XHRcdFx0XHRcdGtleSA9IGtleS50cmltKClcblx0XHRcdFx0XHRcdFx0a2V5ID0gQXV0b0Zvcm0uZ2V0RmllbGRWYWx1ZShrZXksICdpbnN0YW5jZWZvcm0nKVxuXHRcdFx0XHRcdFx0SW5zdGFuY2VOdW1iZXJSdWxlcy5pbnN0YW5jZU51bWJlckJ1aWxkZXIgZWxlbWVudCwga2V5XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0ZWxlbWVudD8udmFsKHJlc3VsdFtzY2hlbWFLZXldKS50cmlnZ2VyKFwiY2hhbmdlXCIpXG5cblx0XHRqdWRnZSA9IGN1cnJlbnRBcHByb3ZlLmp1ZGdlXG5cdFx0Y3VycmVudFN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcblx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXG5cdFx0dW5sZXNzIGZvcm1fdmVyc2lvblxuXHRcdFx0cmV0dXJuXG5cblx0XHR1bmxlc3MgZm9ybV92ZXJzaW9uLmZpZWxkc1xuXHRcdFx0cmV0dXJuXG5cblx0XHRmb3JtdWxhX2ZpZWxkcyA9IEZvcm1fZm9ybXVsYS5nZXRGb3JtdWxhRmllbGRWYXJpYWJsZShcIkZvcm1fZm9ybXVsYS5maWVsZF92YWx1ZXNcIiwgZm9ybV92ZXJzaW9uLmZpZWxkcyk7XG5cdFx0aW5zZXJ0RG9jID0gQXV0b0Zvcm0uZ2V0Rm9ybVZhbHVlcyhcImluc3RhbmNlZm9ybVwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG5cdFx0Rm9ybV9mb3JtdWxhLnJ1bihcIlwiLCBcIlwiLCBmb3JtdWxhX2ZpZWxkcywgaW5zZXJ0RG9jLCBmb3JtX3ZlcnNpb24uZmllbGRzKTtcblx0XHQj5Zyo5q2k5aSE5Yid5aeL5YyWc2Vzc2lvbiDkuK3nmoQgZm9ybV92YWx1ZXMg5Y+Y6YeP77yM55So5LqO6Kem5Y+R5LiL5LiA5q2l5q2l6aqk6K6h566XXG5cdFx0U2Vzc2lvbi5zZXQoXCJpbnN0YW5jZV9mb3JtX3ZhbHVlc1wiLCB7aW5zdGFuY2VJZDogaW5zdGFuY2UuX2lkLCB2YWx1ZXM6IGluc2VydERvY30pO1xuXG5cblxuIiwidmFyIG1hcmtlZDtcblxubWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKTtcblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycyA9IHtcbiAgYXBwbGljYW50Q29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRhdGEsIHN0ZWVkb3NfaW5zdGFuY2U7XG4gICAgc3RlZWRvc19pbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIGRhdGEgPSB7XG4gICAgICBuYW1lOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICBhdHRzOiB7XG4gICAgICAgIG5hbWU6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgICAgaWQ6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgICAgXCJjbGFzc1wiOiAnc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCdcbiAgICAgIH0sXG4gICAgICB2YWx1ZTogc3RlZWRvc19pbnN0YW5jZS5hcHBsaWNhbnRfbmFtZVxuICAgIH07XG4gICAgaWYgKCFzdGVlZG9zX2luc3RhbmNlIHx8IHN0ZWVkb3NfaW5zdGFuY2Uuc3RhdGUgIT09IFwiZHJhZnRcIikge1xuICAgICAgZGF0YS5hdHRzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH0sXG4gIGluc3RhbmNlSWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnaW5zdGFuY2Vmb3JtJztcbiAgfSxcbiAgZm9ybV90eXBlczogZnVuY3Rpb24oKSB7XG4gICAgaWYgKEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKSkge1xuICAgICAgcmV0dXJuICdkaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbWV0aG9kJztcbiAgICB9XG4gIH0sXG4gIHN0ZWVkb3NfZm9ybTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIGlmIChmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmb3JtX3ZlcnNpb247XG4gICAgfVxuICB9LFxuICBpbm5lcnN1YmZvcm1Db250ZXh0OiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZG9jX3ZhbHVlcztcbiAgICBkb2NfdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIG9ialtcInRhYmxlVmFsdWVzXCJdID0gZG9jX3ZhbHVlcyA/IGRvY192YWx1ZXNbb2JqLmNvZGVdIDogW107XG4gICAgb2JqW1wiZm9ybUlkXCJdID0gXCJpbnN0YW5jZWZvcm1cIjtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBpbnN0YW5jZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0ZWVkb3NfaW5zdGFuY2U7XG4gICAgU2Vzc2lvbi5nZXQoXCJjaGFuZ2VfZGF0ZVwiKTtcbiAgICBpZiAoU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpKSB7XG4gICAgICBzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICByZXR1cm4gc3RlZWRvc19pbnN0YW5jZTtcbiAgICB9XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbih2YWwpIHtcbiAgICBpZiAodmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSxcbiAgdW5lbXB0eTogZnVuY3Rpb24odmFsKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGVxdWFsczogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9LFxuICB1bmVxdWFsczogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiAhKGEgPT09IGIpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiLnNwbGl0KCcsJykuaW5jbHVkZXMoYSk7XG4gIH0sXG4gIGluY2x1ZGU6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYi5zcGxpdCgnLCcpLmluY2x1ZGVzKGEpO1xuICB9LFxuICBmaWVsZHM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcbiAgICBpZiAoZm9ybV92ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuICAgIH1cbiAgfSxcbiAgZm9ybWF0RGF0ZTogZnVuY3Rpb24oZGF0ZSwgb3B0aW9ucykge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IEpTT04ucGFyc2Uob3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5mb3JtYXQpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIGZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCJcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KG9wdGlvbnMuZm9ybWF0KTtcbiAgfSxcbiAgdHJhY2VzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZmxvdywgaW5zdGFuY2UsIGxvY2FsZSwgcmVmLCByZWYxLCByZWYyLCByZWYzLCBzdGVlZG9zRGF0YSwgc3RlcHMsIHRyYWNlcztcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBzdGVlZG9zRGF0YSA9IChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpKSAhPSBudWxsID8gKHJlZjEgPSByZWYudmlldykgIT0gbnVsbCA/IChyZWYyID0gcmVmMS50ZW1wbGF0ZSkgIT0gbnVsbCA/IHJlZjIuc3RlZWRvc0RhdGEgOiB2b2lkIDAgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICBpbnN0YW5jZSA9IHN0ZWVkb3NEYXRhICE9IG51bGwgPyBzdGVlZG9zRGF0YS5pbnN0YW5jZSA6IHZvaWQgMDtcbiAgICAgIGZsb3cgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0Rmxvd1ZlcnNpb24oaW5zdGFuY2UpO1xuICAgICAgbG9jYWxlID0gc3RlZWRvc0RhdGEgIT0gbnVsbCA/IHN0ZWVkb3NEYXRhLmxvY2FsZSA6IHZvaWQgMDtcbiAgICAgIGlmIChsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3poLWNuJykge1xuICAgICAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBmbG93ID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRmxvd1ZlcnNpb24oKTtcbiAgICAgIGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIik7XG4gICAgfVxuICAgIGlmICghaW5zdGFuY2UgfHwgIWZsb3cpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgc3RlcHMgPSBmbG93LnN0ZXBzO1xuICAgIHRyYWNlcyA9IHt9O1xuICAgIGlmICgocmVmMyA9IGluc3RhbmNlLnRyYWNlcykgIT0gbnVsbCkge1xuICAgICAgcmVmMy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNlKSB7XG4gICAgICAgIHZhciBhcHByb3ZlcywgcmVmNCwgc3RlcDtcbiAgICAgICAgc3RlcCA9IHN0ZXBzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdHJhY2Uuc3RlcCk7XG4gICAgICAgIGFwcHJvdmVzID0gW107XG4gICAgICAgIGlmICgocmVmNCA9IHRyYWNlLmFwcHJvdmVzKSAhPSBudWxsKSB7XG4gICAgICAgICAgcmVmNC5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICAgIHZhciBqdWRnZV9uYW1lO1xuICAgICAgICAgICAgaWYgKHRyYWNlLmlzX2ZpbmlzaGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGlmIChhcHByb3ZlLmp1ZGdlID09PSAnYXBwcm92ZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSBhcHByb3ZlZFwiLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLmp1ZGdlID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWplY3RlZFwiLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLmp1ZGdlID09PSAndGVybWluYXRlZCcpIHtcbiAgICAgICAgICAgICAgICBqdWRnZV9uYW1lID0gVEFQaTE4bi5fXyhcIkluc3RhbmNlIFN0YXRlIHRlcm1pbmF0ZWRcIiwge30sIGxvY2FsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJ3JlYXNzaWduZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWFzc2lnbmVkXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcHJvdmUuanVkZ2UgPT09ICdyZWxvY2F0ZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWxvY2F0ZWRcIiwge30sIGxvY2FsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBqdWRnZV9uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBqdWRnZV9uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSBwZW5kaW5nXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwcHJvdmVzLnB1c2goe1xuICAgICAgICAgICAgICBfaWQ6IGFwcHJvdmUuX2lkLFxuICAgICAgICAgICAgICBoYW5kbGVyOiBhcHByb3ZlLnVzZXIsXG4gICAgICAgICAgICAgIGhhbmRsZXJfbmFtZTogYXBwcm92ZS5oYW5kbGVyX25hbWUsXG4gICAgICAgICAgICAgIGhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWU6IGFwcHJvdmUuaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZSxcbiAgICAgICAgICAgICAgaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWU6IGFwcHJvdmUuaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWUsXG4gICAgICAgICAgICAgIGZpbmlzaF9kYXRlOiBhcHByb3ZlLmZpbmlzaF9kYXRlLFxuICAgICAgICAgICAgICBqdWRnZTogYXBwcm92ZS5qdWRnZSxcbiAgICAgICAgICAgICAganVkZ2VfbmFtZToganVkZ2VfbmFtZSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGFwcHJvdmUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIGlzX2ZpbmlzaGVkOiBhcHByb3ZlLmlzX2ZpbmlzaGVkLFxuICAgICAgICAgICAgICB0eXBlOiBhcHByb3ZlLnR5cGUsXG4gICAgICAgICAgICAgIG9waW5pb25fZmllbGRzX2NvZGU6IGFwcHJvdmUub3Bpbmlvbl9maWVsZHNfY29kZSxcbiAgICAgICAgICAgICAgc2lnbl9maWVsZF9jb2RlOiBhcHByb3ZlLnNpZ25fZmllbGRfY29kZSxcbiAgICAgICAgICAgICAgaXNfcmVhZDogYXBwcm92ZS5pc19yZWFkLFxuICAgICAgICAgICAgICBzaWduX3Nob3c6IGFwcHJvdmUuc2lnbl9zaG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIGlmIChzdGVwLm5hbWUgaW4gdHJhY2VzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2VzW3N0ZXAubmFtZV0gPSB0cmFjZXNbc3RlcC5uYW1lXS5jb25jYXQoYXBwcm92ZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2VzW3N0ZXAubmFtZV0gPSBhcHByb3ZlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2VzO1xuICB9LFxuICBkb2NfdmFsdWVzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICB9LFxuICBpbnN0YW5jZV9ib3hfc3R5bGU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBib3gsIGlucywganVkZ2U7XG4gICAgYm94ID0gU2Vzc2lvbi5nZXQoXCJib3hcIik7XG4gICAgaWYgKGJveCA9PT0gXCJpbmJveFwiIHx8IGJveCA9PT0gXCJkcmFmdFwiKSB7XG4gICAgICBqdWRnZSA9IFNlc3Npb24uZ2V0KFwianVkZ2VcIik7XG4gICAgICBpZiAoanVkZ2UpIHtcbiAgICAgICAgaWYgKGp1ZGdlID09PSBcImFwcHJvdmVkXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJib3gtc3VjY2Vzc1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGp1ZGdlID09PSBcInJlamVjdGVkXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJib3gtZGFuZ2VyXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgaWYgKGlucyAmJiBpbnMuZmluYWxfZGVjaXNpb24pIHtcbiAgICAgIGlmIChpbnMuZmluYWxfZGVjaXNpb24gPT09IFwiYXBwcm92ZWRcIikge1xuICAgICAgICByZXR1cm4gXCJib3gtc3VjY2Vzc1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnMuZmluYWxfZGVjaXNpb24gPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICByZXR1cm4gXCJib3gtZGFuZ2VyXCI7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICB0YWJsZV9maWVsZHM6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgdmFyIGZpZWxkcywgZm9ybV92ZXJzaW9uO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRGb3JtVmVyc2lvbihpbnN0YW5jZS5mb3JtLCBpbnN0YW5jZS5mb3JtX3ZlcnNpb24pO1xuICAgIH1cbiAgICBpZiAoZm9ybV92ZXJzaW9uKSB7XG4gICAgICBmaWVsZHMgPSBfLmNsb25lKGZvcm1fdmVyc2lvbi5maWVsZHMpO1xuICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQsIGluZGV4KSB7XG4gICAgICAgIHZhciBhZnRlcl9maWVsZCwgYmVmb3JlX2ZpZWxkLCBwcmVfZmllbGRzLCBwcmVfd2lkZV9maWVsZHMsIHRkX2NvbHNwYW4sIHRyX2VuZCwgdHJfc3RhcnQ7XG4gICAgICAgIGZpZWxkLnRyX3N0YXJ0ID0gXCJcIjtcbiAgICAgICAgZmllbGQudHJfZW5kID0gXCJcIjtcbiAgICAgICAgdGRfY29sc3BhbiA9IDE7XG4gICAgICAgIGlmICgodHlwZW9mIENvcmVGb3JtICE9PSBcInVuZGVmaW5lZFwiICYmIENvcmVGb3JtICE9PSBudWxsID8gQ29yZUZvcm0ucGFnZVRpdGxlRmllbGROYW1lIDogdm9pZCAwKSA9PT0gZmllbGQuY29kZSkge1xuICAgICAgICAgIGZpZWxkLmlzX3dpZGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5mb3JtdWxhICYmIGZpZWxkLnR5cGUgIT09ICdvZGF0YScpIHtcbiAgICAgICAgICBmaWVsZC5wZXJtaXNzaW9uID0gXCJyZWFkb25seVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIGZpZWxkLnRkX2NvbHNwYW4gPSA0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZC50ZF9jb2xzcGFuID0gMztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICBmaWVsZC50cl9zdGFydCA9IFwiPHRyPlwiO1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnRyX2VuZCA9IFwiPC90cj5cIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJlX2ZpZWxkcyA9IGZpZWxkcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgcHJlX3dpZGVfZmllbGRzID0gcHJlX2ZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcImlzX3dpZGVcIiwgdHJ1ZSk7XG4gICAgICAgICAgdHJfc3RhcnQgPSBcIlwiO1xuICAgICAgICAgIHRyX2VuZCA9IFwiXCI7XG4gICAgICAgICAgYmVmb3JlX2ZpZWxkID0gbnVsbDtcbiAgICAgICAgICBhZnRlcl9maWVsZCA9IG51bGw7XG4gICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgYmVmb3JlX2ZpZWxkID0gZmllbGRzW2luZGV4IC0gMV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRleCA8IGZpZWxkcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBhZnRlcl9maWVsZCA9IGZpZWxkc1tpbmRleCArIDFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIHRkX2NvbHNwYW4gPSA0O1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaXNfd2lkZSkge1xuICAgICAgICAgICAgdGRfY29sc3BhbiA9IDM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChiZWZvcmVfZmllbGQgJiYgYWZ0ZXJfZmllbGQgJiYgYmVmb3JlX2ZpZWxkLmlzX3dpZGUgJiYgYWZ0ZXJfZmllbGQuaXNfd2lkZSkge1xuICAgICAgICAgICAgICBmaWVsZC5pc193aWRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGRfY29sc3BhbiA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyID09PSAwICYmIGFmdGVyX2ZpZWxkICYmIGFmdGVyX2ZpZWxkLmlzX3dpZGUpIHtcbiAgICAgICAgICAgICAgZmllbGQuaXNfd2lkZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRkX2NvbHNwYW4gPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PT0gMCAmJiBhZnRlcl9maWVsZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBmaWVsZC5pc193aWRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGRfY29sc3BhbiA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpZWxkLnRkX2NvbHNwYW4gPSB0ZF9jb2xzcGFuO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdHJfc3RhcnQgPSBcIjx0cj5cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PT0gMCB8fCBmaWVsZC5pc193aWRlKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICAgICAgdHJfc3RhcnQgPSBcIjx0ciBjbGFzcyA9IFxcXCJ0ci1jaGlsZC10YWJsZVxcXCI+XCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJfc3RhcnQgPSBcIjx0cj5cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZC50cl9zdGFydCA9IHRyX3N0YXJ0O1xuICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IGZpZWxkcy5sZW5ndGggfHwgZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT09ICd0YWJsZScgfHwgZmllbGQuaXNfd2lkZSkge1xuICAgICAgICAgICAgdHJfZW5kID0gXCI8L3RyPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyICE9PSAwKSB7XG4gICAgICAgICAgICB0cl9lbmQgPSBcIjwvdHI+XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWVsZC50cl9lbmQgPSB0cl9lbmQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG4gIH0sXG4gIHNvcnRfYXBwcm92ZTogZnVuY3Rpb24oYXBwcm92ZXMsIG9yZGVyKSB7XG4gICAgaWYgKCFhcHByb3Zlcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoIWFwcHJvdmVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgICAgYXBwcm92ZXMuc29ydChmdW5jdGlvbihwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgX3AxLCBfcDI7XG4gICAgICAgICAgX3AxID0gMDtcbiAgICAgICAgICBfcDIgPSAwO1xuICAgICAgICAgIGlmIChwMS5maW5pc2hfZGF0ZSkge1xuICAgICAgICAgICAgX3AxID0gcDEuZmluaXNoX2RhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocDIuZmluaXNoX2RhdGUpIHtcbiAgICAgICAgICAgIF9wMiA9IHAyLmZpbmlzaF9kYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9wMiAtIF9wMTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHByb3Zlcy5zb3J0KGZ1bmN0aW9uKHAxLCBwMikge1xuICAgICAgICAgIHZhciBfcDEsIF9wMjtcbiAgICAgICAgICBfcDEgPSAwO1xuICAgICAgICAgIF9wMiA9IDA7XG4gICAgICAgICAgaWYgKHAxLmZpbmlzaF9kYXRlKSB7XG4gICAgICAgICAgICBfcDEgPSBwMS5maW5pc2hfZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwMi5maW5pc2hfZGF0ZSkge1xuICAgICAgICAgICAgX3AyID0gcDIuZmluaXNoX2RhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3AxIC0gX3AyO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcHJvdmVzO1xuICB9LFxuICBfdDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5KTtcbiAgfSxcbiAgZ2V0RmllbGQ6IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb247XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIGZvcm1fdmVyc2lvbi5maWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSk7XG4gICAgfVxuICB9LFxuICBnZXRWYWx1ZTogZnVuY3Rpb24oY29kZSkge1xuICAgIHZhciBmb3JtX3ZlcnNpb24sIGluc3RhbmNlLCBsb2NhbGUsIHV0Y09mZnNldCwgdmFsdWVzO1xuICAgIGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuICAgIGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb247XG4gICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICB1dGNPZmZzZXQgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEudXRjT2Zmc2V0O1xuICAgIHZhbHVlcyA9IGluc3RhbmNlLnZhbHVlcyB8fCB7fTtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICB2YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG4gICAgfVxuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUodmFsdWVzW2NvZGVdLCBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpLCBsb2NhbGUsIHV0Y09mZnNldCk7XG4gIH0sXG4gIGdldExhYmVsOiBmdW5jdGlvbihjb2RlKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uO1xuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwoZm9ybV92ZXJzaW9uLmZpZWxkcywgY29kZSk7XG4gIH0sXG4gIGdldENmQ2xhc3M6IGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgaWYgKChmaWVsZCAhPSBudWxsID8gZmllbGQudHlwZSA6IHZvaWQgMCkgPT09IFwiaW5wdXRcIiAmJiAoZmllbGQgIT0gbnVsbCA/IGZpZWxkLmlzX3RleHRhcmVhIDogdm9pZCAwKSkge1xuICAgICAgcmV0dXJuIFwiY2ZUZXh0YXJlYVwiO1xuICAgIH1cbiAgfSxcbiAgZ2V0VGFibGVUaGVhZDogZnVuY3Rpb24oZmllbGQpIHtcbiAgICByZXR1cm4gU3RlZWRvc1RhYmxlLmdldFRoZWFkKGZpZWxkLCBmYWxzZSk7XG4gIH0sXG4gIGdldFRhYmxlQm9keTogZnVuY3Rpb24oZmllbGQpIHtcbiAgICB2YXIgaW5zdGFuY2UsIHRhYmxlVmFsdWUsIHZhbHVlcztcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZTtcbiAgICAgIHZhbHVlcyA9IGluc3RhbmNlLnZhbHVlcyB8fCB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIH1cbiAgICB0YWJsZVZhbHVlID0gdmFsdWVzW2ZpZWxkLmNvZGVdO1xuICAgIHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VGJvZHkoZmllbGQuc2ZpZWxkcy5nZXRQcm9wZXJ0eShcImNvZGVcIiksIGZpZWxkLCB0YWJsZVZhbHVlLCBmYWxzZSk7XG4gIH0sXG4gIHNob3dMYWJlbDogZnVuY3Rpb24oZmllbGQpIHtcbiAgICB2YXIgdGVtcGxhdGVEYXRhO1xuICAgIHRlbXBsYXRlRGF0YSA9IFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YTtcbiAgICBpZiAodGVtcGxhdGVEYXRhLmxhYmVsID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgaXNPcGluaW9uRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGQuZm9ybXVsYSk7XG4gIH0sXG4gIGlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nOiBmdW5jdGlvbihmaWVsZF9mb3JtdWxhKSB7XG4gICAgcmV0dXJuIEluc3RhbmNlU2lnblRleHQuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSk7XG4gIH0sXG4gIGluY2x1ZGVzT3BpbmlvbkZpZWxkOiBmdW5jdGlvbihmb3JtLCBmb3JtX3ZlcnNpb24pIHtcbiAgICB2YXIgZmllbGRfZm9ybXVsYXMsIGZpZWxkcywgcmVmO1xuICAgIGZpZWxkX2Zvcm11bGFzID0gbmV3IEFycmF5KCk7XG4gICAgZmllbGRzID0gKChyZWYgPSBkYi5mb3JtX3ZlcnNpb25zLmZpbmRPbmUoe1xuICAgICAgX2lkOiBmb3JtX3ZlcnNpb24sXG4gICAgICBmb3JtOiBmb3JtXG4gICAgfSkpICE9IG51bGwgPyByZWYuZmllbGRzIDogdm9pZCAwKSB8fCBbXTtcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICB2YXIgcmVmMTtcbiAgICAgIGlmIChmLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdpZ25vcmUgb3BpbmlvbiBmaWVsZCBpbiB0YWJsZScpO1xuICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgICByZXR1cm4gZiAhPSBudWxsID8gKHJlZjEgPSBmLmZpZWxkcykgIT0gbnVsbCA/IHJlZjEuZm9yRWFjaChmdW5jdGlvbihmMSkge1xuICAgICAgICAgIHJldHVybiBmaWVsZF9mb3JtdWxhcy5wdXNoKGYxLmZvcm11bGEpO1xuICAgICAgICB9KSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaWVsZF9mb3JtdWxhcy5wdXNoKGYuZm9ybXVsYSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF8uc29tZShmaWVsZF9mb3JtdWxhcywgZnVuY3Rpb24oZmllbGRfZm9ybXVsYSkge1xuICAgICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSk7XG4gICAgfSk7XG4gIH0sXG4gIGdldE9waW5pb25GaWVsZFN0ZXBzTmFtZTogZnVuY3Rpb24oZmllbGRfZm9ybXVsYSwgdG9wX2tleXdvcmRzKSB7XG4gICAgdmFyIGZvbzEsIG9waW5pb25GaWVsZHM7XG4gICAgb3BpbmlvbkZpZWxkcyA9IG5ldyBBcnJheSgpO1xuICAgIGlmIChJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpKSB7XG4gICAgICBpZiAoZmllbGRfZm9ybXVsYSkge1xuICAgICAgICBmb28xID0gZmllbGRfZm9ybXVsYS5zcGxpdChcIjtcIik7XG4gICAgICAgIGZvbzEuZm9yRWFjaChmdW5jdGlvbihmb28pIHtcbiAgICAgICAgICB2YXIganNvbl9mb3JtdWxhLCByZWYsIHJlZjEsIHMxLCBzZjtcbiAgICAgICAgICBqc29uX2Zvcm11bGEgPSB7fTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAganNvbl9mb3JtdWxhID0gZXZhbChcIihcIiArIGZvbyArIFwiKVwiKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgICAgICAgIGpzb25fZm9ybXVsYSA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoanNvbl9mb3JtdWxhICE9IG51bGwgPyBqc29uX2Zvcm11bGEueWlqaWFubGFuIDogdm9pZCAwKSB7XG4gICAgICAgICAgICBzZiA9IHt9O1xuICAgICAgICAgICAgc2Yuc3RlcE5hbWUgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLnN0ZXA7XG4gICAgICAgICAgICBzZi5pbWFnZV9zaWduID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5pbWFnZV9zaWduIHx8IGZhbHNlO1xuICAgICAgICAgICAgc2Yub25seV9jY19vcGluaW9uID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5vbmx5X2NjIHx8IGZhbHNlO1xuICAgICAgICAgICAgc2YuZGVmYXVsdF9kZXNjcmlwdGlvbiA9IGpzb25fZm9ybXVsYS55aWppYW5sYW5bXCJkZWZhdWx0XCJdO1xuICAgICAgICAgICAgc2Yub25seV9oYW5kbGVyID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5vbmx5X2hhbmRsZXI7XG4gICAgICAgICAgICBzZi50b3Bfa2V5d29yZHMgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLnRvcF9rZXl3b3JkcyB8fCB0b3Bfa2V5d29yZHM7XG4gICAgICAgICAgICByZXR1cm4gb3BpbmlvbkZpZWxkcy5wdXNoKHNmKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKChmaWVsZF9mb3JtdWxhICE9IG51bGwgPyBmaWVsZF9mb3JtdWxhLmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xKSB7XG4gICAgICAgICAgICBzZiA9IHtcbiAgICAgICAgICAgICAgb25seV9jY19vcGluaW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgaW1hZ2Vfc2lnbjogZmFsc2UsXG4gICAgICAgICAgICAgIHRvcF9rZXl3b3JkczogdG9wX2tleXdvcmRzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGZvby5pbmRleE9mKFwie3NpZ25hdHVyZS5cIikgPiAtMSkge1xuICAgICAgICAgICAgICBzZi5pbWFnZV9zaWduID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZm9vID0gZm9vLnJlcGxhY2UoXCJ7c2lnbmF0dXJlLlwiLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMxID0gZm9vLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHMxLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHNmLnN0ZXBOYW1lID0gczEuc3BsaXQoXCIuXCIpWzFdO1xuICAgICAgICAgICAgICBpZiAob3BpbmlvbkZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcInN0ZXBOYW1lXCIsIHNmLnN0ZXBOYW1lKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKChyZWYgPSBvcGluaW9uRmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJzdGVwTmFtZVwiLCBzZi5zdGVwTmFtZSkpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHJlZi5vbmx5X2NjX29waW5pb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgoKHJlZjEgPSBzMS5zcGxpdChcIi5cIilbMl0pICE9IG51bGwgPyByZWYxLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiB2b2lkIDApID09PSAnY2MnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNmLm9ubHlfY2Nfb3BpbmlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3BpbmlvbkZpZWxkcy5wdXNoKHNmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3BpbmlvbkZpZWxkcztcbiAgfSxcbiAgc2hvd0NDT3BpbmlvbjogZnVuY3Rpb24oZmllbGQpIHtcbiAgICB2YXIgcmVmLCByZWYxLCByZWYyLCBzMTtcbiAgICBpZiAoKChyZWYgPSBmaWVsZC5mb3JtdWxhKSAhPSBudWxsID8gcmVmLmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoKHJlZjEgPSBmaWVsZC5mb3JtdWxhKSAhPSBudWxsID8gcmVmMS5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xKSB7XG4gICAgICBzMSA9IGZpZWxkLmZvcm11bGEucmVwbGFjZShcIntzaWduYXR1cmUuXCIsIFwiXCIpLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgaWYgKHMxLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAyKSB7XG4gICAgICAgIGlmICgoKHJlZjIgPSBzMS5zcGxpdChcIi5cIilbMl0pICE9IG51bGwgPyByZWYyLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiB2b2lkIDApID09PSAnY2MnKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBtYXJrRG93blRvSHRtbDogZnVuY3Rpb24obWFya0Rvd25TdHJpbmcpIHtcbiAgICBpZiAobWFya0Rvd25TdHJpbmcpIHtcbiAgICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgbWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFNwYWNlYmFycy5TYWZlU3RyaW5nKG1hcmtlZC5wYXJzZShtYXJrRG93blN0cmluZykpO1xuICAgIH1cbiAgfSxcbiAgZl9sYWJlbDogZnVuY3Rpb24odGhhdCkge1xuICAgIHJldHVybiB0aGF0Lm5hbWUgfHwgdGhhdC5jb2RlO1xuICB9XG59O1xuXG5pZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuc3RlZWRvc19mb3JtID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybV92ZXJzaW9uO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzU2VjdGlvbiA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IHRoaXMuZm9ybV92ZXJzaW9uO1xuICAgIHJldHVybiBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpLnR5cGUgPT09ICdzZWN0aW9uJztcbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5kb2NfdmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGluc3RhbmNlO1xuICAgIGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZTtcbiAgICByZXR1cm4gaW5zdGFuY2UudmFsdWVzO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmFwcGxpY2FudENvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YSwgaW5zdGFuY2U7XG4gICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgIHJldHVybiBkYXRhID0ge1xuICAgICAgbmFtZTogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgYXR0czoge1xuICAgICAgICBuYW1lOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICAgIGlkOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICAgIFwiY2xhc3NcIjogJ3NlbGVjdFVzZXIgZm9ybS1jb250cm9sIGluc19hcHBsaWNhbnQnXG4gICAgICB9LFxuICAgICAgdmFsdWU6IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lXG4gICAgfTtcbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmZpZWxkcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gdGhpcy5mb3JtX3ZlcnNpb247XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYShmb3JtX3ZlcnNpb24pKTtcbiAgICB9XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZm9ybV90eXBlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcImRpc2FibGVkXCI7XG4gIH07XG4gIFRlbXBsYXRlLnJlZ2lzdGVySGVscGVyKFwiYWZGaWVsZExhYmVsVGV4dFwiLCBmdW5jdGlvbihvcCkge1xuICAgIHZhciBmb3JtX3ZlcnNpb24sIHJlZjtcbiAgICBmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uO1xuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwoZm9ybV92ZXJzaW9uLmZpZWxkcywgb3AgIT0gbnVsbCA/IChyZWYgPSBvcC5oYXNoKSAhPSBudWxsID8gcmVmLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDApO1xuICB9KTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5fdCA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBsb2NhbGU7XG4gICAgbG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5LCB7fSwgbG9jYWxlKTtcbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnNfYXR0YWNoX2Rvd25sb2FkX3VybCA9IGZ1bmN0aW9uKF9pZCwgYWJzb2x1dGUpIHtcbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCIvYXBpL2ZpbGVzL2luc3RhbmNlcy9cIiArIF9pZCArIFwiP2Rvd25sb2FkPXRydWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIi9hcGkvZmlsZXMvaW5zdGFuY2VzL1wiICsgX2lkICsgXCI/ZG93bmxvYWQ9dHJ1ZVwiO1xuICAgIH1cbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5vcHRpb25zID0gZnVuY3Rpb24oZmllbGQpIHtcbiAgICB2YXIgb3B0aW9ucywgcmVmLCByZXY7XG4gICAgb3B0aW9ucyA9IGZpZWxkICE9IG51bGwgPyAocmVmID0gZmllbGQub3B0aW9ucykgIT0gbnVsbCA/IHJlZi5zcGxpdChcIlxcblwiKSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICByZXYgPSBbXTtcbiAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gcmV2LnB1c2goe1xuICAgICAgICAgIGxhYmVsOiBpdGVtLFxuICAgICAgICAgIHZhbHVlOiBpdGVtXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXY7XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZ2V0UGVybWlzc2lvbnMgPSBmdW5jdGlvbihjb2RlKSB7XG4gICAgdmFyIHJlZjtcbiAgICBpZiAoISgocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKGNvZGUpIDogdm9pZCAwKSkge1xuICAgICAgcmV0dXJuIFwicmVhZG9ubHkgZGlzYWJsZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLmV2ZW50cyA9IHtcbiAgJ2NoYW5nZSAuZm9ybS1jb250cm9sLC5jaGVja2JveCBpbnB1dCwuYWYtcmFkaW8tZ3JvdXAgaW5wdXQsLmFmLWNoZWNrYm94LWdyb3VwIGlucHV0JzogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gSW5zdGFuY2VNYW5hZ2VyLmluc3RhbmNlZm9ybUNoYW5nZUV2ZW50KGV2ZW50KTtcbiAgfSxcbiAgJ3R5cGVhaGVhZDpjaGFuZ2UgLmZvcm0tY29udHJvbCc6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIEluc3RhbmNlTWFuYWdlci5pbnN0YW5jZWZvcm1DaGFuZ2VFdmVudChldmVudCk7XG4gIH0sXG4gICdjbGljayAuY2ZUZXh0YXJlYSBhJzogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiBTdGVlZG9zLm9wZW5XaW5kb3coZXZlbnQudGFyZ2V0LmhyZWYpO1xuICB9XG59O1xuXG5JbnN0YW5jZWZvcm1UZW1wbGF0ZS5vbkNyZWF0ZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbXBpbGVkLCBlLCBpbnN0YW5jZSwgaW5zdGFuY2VDdXN0b21UZW1wbGF0ZSwgaW5zdGFuY2VWaWV3LCByZW5kZXJGdW5jdGlvbiwgdGVtcGxhdGU7XG4gIGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gIGlmICghaW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUoaW5zdGFuY2UpO1xuICB0cnkge1xuICAgIGNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0ZW1wbGF0ZSwge1xuICAgICAgaXNCb2R5OiB0cnVlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgIGUgPSBlcnJvcjE7XG4gICAgY29uc29sZS5sb2coXCJJbnN0YW5jZSBUZW1wbGF0ZSBFcnJvclwiLCBlKTtcbiAgICBjb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoXCJcIiwge1xuICAgICAgaXNCb2R5OiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmVuZGVyRnVuY3Rpb24gPSBldmFsKGNvbXBpbGVkKTtcbiAgaW5zdGFuY2VWaWV3ID0gbmV3IEJsYXplLlZpZXcoXCJjdXN0b21faW5zdGFuY2VfdGVtcGxhdGVcIiwgcmVuZGVyRnVuY3Rpb24pO1xuICBpbnN0YW5jZUN1c3RvbVRlbXBsYXRlID0gbmV3IEJsYXplLlRlbXBsYXRlKGluc3RhbmNlVmlldy5uYW1lLCByZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLmluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZSA9IGluc3RhbmNlQ3VzdG9tVGVtcGxhdGU7XG4gIHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZV9jdXN0b21fdGVtcGxhdGUuaGVscGVycyhJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLm9uUmVuZGVyZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGN1cnJlbnRBcHByb3ZlLCBjdXJyZW50U3RlcCwgZm9ybV92ZXJzaW9uLCBmb3JtdWxhX2ZpZWxkcywgaW5zZXJ0RG9jLCBpbnN0YW5jZSwgaW5zdGFuY2VOdW1iZXJGaWVsZHMsIGp1ZGdlO1xuICBpbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICBpZiAoIWluc3RhbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEluc3RhbmNlTWFuYWdlci5zZXRJbnN0YW5jZUZvcm1BcHBsaWNhbnQoaW5zdGFuY2UuYXBwbGljYW50LCBpbnN0YW5jZS5hcHBsaWNhbnRfbmFtZSk7XG4gIEFwcHJvdmVNYW5hZ2VyLmVycm9yID0ge1xuICAgIG5leHRTdGVwczogJycsXG4gICAgbmV4dFN0ZXBVc2VyczogJydcbiAgfTtcbiAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnZHJhZnQnKSB7XG4gICAgSW5zdGFuY2VFdmVudC5pbml0RXZlbnRzKGluc3RhbmNlLmZsb3cpO1xuICB9XG4gIGlmICghQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpKSB7XG4gICAgY3VycmVudEFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKTtcbiAgICBpbnN0YW5jZU51bWJlckZpZWxkcyA9ICQoXCJbZGF0YS1mb3JtdWxhXVwiLCAkKFwiI2luc3RhbmNlZm9ybVwiKSk7XG4gICAgaW5zdGFuY2VOdW1iZXJGaWVsZHMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlbGVtZW50LCBzY2hlbWFLZXk7XG4gICAgICBzY2hlbWFLZXkgPSB0aGlzLmRhdGFzZXQuc2NoZW1hS2V5O1xuICAgICAgZWxlbWVudCA9ICQodGhpcyk7XG4gICAgICBpZiAoISQodGhpcykudmFsKCkgJiYgc2NoZW1hS2V5ICYmIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSkge1xuICAgICAgICByZXR1cm4gTWV0ZW9yLmNhbGwoJ2dldEluc3RhbmNlVmFsdWVzJywgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpLCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KSB7XG4gICAgICAgICAgdmFyIGtleSwgcmVmO1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdG9hc3RyLmVycm9yKGVycm9yLnJlYXNvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghcmVzdWx0W3NjaGVtYUtleV0pIHtcbiAgICAgICAgICAgIGtleSA9IChyZWYgPSBlbGVtZW50LmRhdGEoXCJmb3JtdWxhXCIpKSAhPSBudWxsID8gcmVmLnJlcGxhY2UoXCJhdXRvX251bWJlcihcIiwgXCJcIikucmVwbGFjZShcIilcIiwgXCJcIikgOiB2b2lkIDA7XG4gICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxcIi9nLCBcIlwiKS5yZXBsYWNlKC9cXCcvZywgXCJcIik7XG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJ7XCIpID4gLTEpIHtcbiAgICAgICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgICAgICAgICBrZXkgPSBrZXkudHJpbSgpO1xuICAgICAgICAgICAgICBrZXkgPSBBdXRvRm9ybS5nZXRGaWVsZFZhbHVlKGtleSwgJ2luc3RhbmNlZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEluc3RhbmNlTnVtYmVyUnVsZXMuaW5zdGFuY2VOdW1iZXJCdWlsZGVyKGVsZW1lbnQsIGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50LnZhbChyZXN1bHRbc2NoZW1hS2V5XSkudHJpZ2dlcihcImNoYW5nZVwiKSA6IHZvaWQgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGp1ZGdlID0gY3VycmVudEFwcHJvdmUuanVkZ2U7XG4gICAgY3VycmVudFN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIGlmICghZm9ybV92ZXJzaW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZm9ybV92ZXJzaW9uLmZpZWxkcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3JtdWxhX2ZpZWxkcyA9IEZvcm1fZm9ybXVsYS5nZXRGb3JtdWxhRmllbGRWYXJpYWJsZShcIkZvcm1fZm9ybXVsYS5maWVsZF92YWx1ZXNcIiwgZm9ybV92ZXJzaW9uLmZpZWxkcyk7XG4gICAgaW5zZXJ0RG9jID0gQXV0b0Zvcm0uZ2V0Rm9ybVZhbHVlcyhcImluc3RhbmNlZm9ybVwiLCB2b2lkIDAsIHZvaWQgMCwgZmFsc2UpO1xuICAgIEZvcm1fZm9ybXVsYS5ydW4oXCJcIiwgXCJcIiwgZm9ybXVsYV9maWVsZHMsIGluc2VydERvYywgZm9ybV92ZXJzaW9uLmZpZWxkcyk7XG4gICAgcmV0dXJuIFNlc3Npb24uc2V0KFwiaW5zdGFuY2VfZm9ybV92YWx1ZXNcIiwge1xuICAgICAgaW5zdGFuY2VJZDogaW5zdGFuY2UuX2lkLFxuICAgICAgdmFsdWVzOiBpbnNlcnREb2NcbiAgICB9KTtcbiAgfVxufTtcbiIsIkluc3RhbmNlQXR0YWNobWVudFRlbXBsYXRlLmhlbHBlcnMgPSB7XG5cblx0c2hvd01haW5UaXRsZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkud29ya2Zsb3dNYWluQXR0YWNoVGl0bGUuZ2V0KCk7XG5cdH0sXG5cdGlzQ2xpZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gTWV0ZW9yLmlzQ2xpZW50XG5cdH0sXG5cdGVuYWJsZWRfYWRkX21haW5fYXR0YWNobWVudDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGlmICghaW5zKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRpZiAoU2Vzc2lvbiAmJiBTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uLmdldChcImJveFwiKSAhPSBcImRyYWZ0XCIgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gXCJpbmJveFwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cblx0XHQvLyDlt7Lnu4/nu5PmnZ/nmoTljZXlrZDkuI3og73mlLnpmYTku7Zcblx0XHRpZiAoaW5zLnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblxuXHRcdHZhciBjdXJyZW50X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcblxuXHRcdGlmICghY3VycmVudF9zdGVwKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8gY2PnmoTljZXlrZDvvIzlj6rmnInlnKjlvZPliY3mraXpqqTmiY3og73kv67mlLnpmYTku7Zcblx0XHR2YXIgYXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpO1xuXHRcdGlmIChhcHByb3ZlICYmIGFwcHJvdmUudHlwZSA9PSBcImNjXCIpIHtcblx0XHRcdHZhciBjdXJyZW50VHJhY2UgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFRyYWNlKCk7XG5cdFx0XHRpZihjdXJyZW50VHJhY2UgJiYgY3VycmVudFRyYWNlLl9pZCAhPSBhcHByb3ZlLnRyYWNlKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIOWIhuWPkeeahOato+aWh+aIluiAhemZhOS7tuS4jeaYvuekuui9rOS4unBkZuaMiemSrlxuXHRcdC8vIOWmguaenOacieato+aWh+adg+mZkOWImeS4uuato+aWh++8jOWQpuWImeWIhuWPkeS4uumZhOS7tlxuXHRcdC8vIOWIhuWPkeeahOmZhOS7tuS4jeWFgeiuuOS/ruaUuSDliKDpmaQg5paw5aKe54mI5pysXG5cdFx0dmFyIG1haW5fYXR0YWNoX2NvdW50ID0gY2ZzLmluc3RhbmNlcy5maW5kKHtcblx0XHRcdCdtZXRhZGF0YS5pbnN0YW5jZSc6IGlucy5faWQsXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHR9KS5jb3VudCgpO1xuXG5cdFx0dmFyIGRpc3RyaWJ1dGVfbWFpbl9hdHRhY2hfY291bnQgPSAwO1xuXG5cdFx0aWYgKGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UpIHtcblx0XHRcdHZhciBzdGFydF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldFN0YXJ0U3RlcCgpO1xuXHRcdFx0aWYgKHN0YXJ0X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2gpIHtcblx0XHRcdFx0dmFyIGRpc3RyaWJ1dGVfbWFpbl9hdHRhY2hfY291bnQgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0XHRcdCdtZXRhZGF0YS5pbnN0YW5jZSc6IGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UsXG5cdFx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZVxuXHRcdFx0XHR9KS5jb3VudCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggPT0gdHJ1ZSAmJiBtYWluX2F0dGFjaF9jb3VudCA8IDEgJiYgZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCA8IDEpIHtcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0Ly8g5q2j5paH5pyA5aSa5Y+q6IO95pyJ5LiA5LiqXG5cdFx0aWYgKG1haW5fYXR0YWNoX2NvdW50ID49IDEgfHwgZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCA+PSAxKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8g5byA5aeL6IqC54K55bm25LiU6K6+572u5LqG5Y+v5Lul5LiK5Lyg5q2j5paH5omN5pi+56S65LiK5Lyg5q2j5paH55qE5oyJ6ZKuXG5cdFx0dmFyIGN1cnJlbnRfc3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50U3RlcCgpO1xuXHRcdGlmIChjdXJyZW50X3N0ZXAgJiYgY3VycmVudF9zdGVwLnN0ZXBfdHlwZSA9PSBcInN0YXJ0XCIgJiYgY3VycmVudF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoID09IHRydWUpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0cmV0dXJuIGZhbHNlXG5cdH0sXG5cblx0ZW5hYmxlZF9lZGl0X25vcm1hbF9hdHRhY2htZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uICYmIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSlcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0dmFyIGZsb3cgPSBXb3JrZmxvd01hbmFnZXIuZ2V0RmxvdyhpbnMuZmxvdyk7XG5cdFx0aWYgKCFmbG93KVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblxuXHRcdC8vIOWIhuWPkeWQjueahCDpmYTku7bvvIzkuI3lj6/ku6XnvJbovpEv5Yig6Zmk77yM5Lmf5LiN6K6p5LiK5Lyg5paw55qE6ZmE5Lu2LCDmtYHnqIvliJfooajvvJrmt7vliqDlsZ7mgKcg4oCY6KKr5YiG5Y+R5ZCO5piv5ZCm5YWB6K645LiK5Lyg6ZmE5Lu24oCZICMxODM3XG5cdFx0aWYgKGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UgJiYgIWZsb3cudXBsb2FkX2FmdGVyX2JlaW5nX2Rpc3RyaWJ1dGVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gXCJkcmFmdFwiICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpICE9IFwiaW5ib3hcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXG5cdFx0Ly8g5bey57uP57uT5p2f55qE5Y2V5a2Q5LiN6IO95pS56ZmE5Lu2XG5cdFx0aWYgKGlucy5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cblx0XHQvLyBjY+eahOWNleWtkO+8jOWPquacieWcqOW9k+WJjeatpemqpOaJjeiDveS/ruaUuemZhOS7tlxuXHRcdHZhciBhcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKCk7XG5cdFx0aWYgKGFwcHJvdmUgJiYgYXBwcm92ZS50eXBlID09IFwiY2NcIikge1xuXHRcdFx0dmFyIGN1cnJlbnRUcmFjZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50VHJhY2UoKTtcblx0XHRcdGlmKGN1cnJlbnRUcmFjZSAmJiBjdXJyZW50VHJhY2UuX2lkICE9IGFwcHJvdmUudHJhY2Upe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKEluc3RhbmNlTWFuYWdlci5pc0NDKGlucykpIHtcblx0XHRcdHZhciBzdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldENDU3RlcCgpO1xuXHRcdFx0aWYgKHN0ZXAgJiYgKHN0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9PSB0cnVlIHx8IHN0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9PSB1bmRlZmluZWQpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgY3VycmVudF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG5cdFx0XHRpZiAoY3VycmVudF9zdGVwICYmIChjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9PSB0cnVlIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHVuZGVmaW5lZCkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlXG5cdH0sXG5cblx0bWFpbl9hdHRhY2htZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdHZhciBzdGFydF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldFN0YXJ0U3RlcCgpO1xuXG5cdFx0Ly8g5aaC5p6c5piv6KKr5YiG5Y+R55qE55Sz6K+35Y2V5bm25LiU5pyJ5L+u5pS55q2j5paH55qE5p2D6ZmQ77yM5YiZ5LyY5YWI5pi+56S65Y6f55Sz6K+35Y2V5paH5Lu2XG5cdFx0dmFyIG1haW5fYXR0YWNoID0gbnVsbDtcblx0XHRpZiAoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSAmJiBzdGFydF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoID09IHRydWUpIHtcblx0XHRcdG1haW5fYXR0YWNoID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKHtcblx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSxcblx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmICghbWFpbl9hdHRhY2gpIHtcblx0XHRcdG1haW5fYXR0YWNoID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKHtcblx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zLl9pZCxcblx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYWluX2F0dGFjaDtcblx0fSxcblxuXHRub3JtYWxfYXR0YWNobWVudHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0dmFyIHNlbGVjdG9yID0ge1xuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0J21ldGFkYXRhLm1haW4nOiB7XG5cdFx0XHRcdCRuZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHR9O1xuXG5cdFx0dmFyIGF0dHMgPSBuZXcgQXJyYXkoKTtcblxuXHRcdGlmIChpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlKSB7XG5cdFx0XHQvLyDlpoLmnpzmmK/ooqvliIblj5HnmoTnlLPor7fljZXvvIzliJnmmL7npLrljp/nlLPor7fljZXmlofku7YsIOWmguaenOmAieaLqeS6huWwhuWOn+ihqOWNleWtmOWCqOS4uumZhOS7tuS5n+imgeaYvuekuiwg5ZCM5pe25Lmf6KaB5pi+56S65paw5LiK5Lyg55qE6ZmE5Lu2XG5cdFx0XHR2YXIgZGZpcyA9IF8uY2xvbmUoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMpIHx8IFtdO1xuXHRcdFx0ZGZpcy5wdXNoKGlucy5faWQpO1xuXHRcdFx0c2VsZWN0b3JbJ21ldGFkYXRhLmluc3RhbmNlJ10gPSB7XG5cdFx0XHRcdCRpbjogZGZpc1xuXHRcdFx0fTtcblxuXG5cdFx0XHRzZWxlY3RvcltcIiRvclwiXSA9IFt7XG5cdFx0XHRcdFwibWV0YWRhdGEuaW5zdGFuY2VcIjogaW5zLl9pZFxuXHRcdFx0fSwge1xuXHRcdFx0XHRcIm1ldGFkYXRhLmluc3RhbmNlXCI6IHtcblx0XHRcdFx0XHQkaW46IGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwibWV0YWRhdGEuaXNfcHJpdmF0ZVwiOiB7XG5cdFx0XHRcdFx0JG5lOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1dXG5cblx0XHRcdC8vIOWmguaenOWOn+eUs+ivt+WNleacieato+aWh+S9huaYr+WIhuWPkeWQjuayoeacieato+aWh+adg+mZkO+8jOWImeWOn+eUs+ivt+WNleato+aWh+aYvuekuuWcqOmZhOS7tuagj1xuXHRcdFx0dmFyIHN0YXJ0X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0U3RhcnRTdGVwKCk7XG5cdFx0XHRpZiAoc3RhcnRfc3RlcCAmJiBzdGFydF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoICE9IHRydWUpIHtcblx0XHRcdFx0dmFyIGRpc3RyaWJ1dGVfbWFpbiA9IGNmcy5pbnN0YW5jZXMuZmluZE9uZSh7XG5cdFx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHRcdFx0JGluOiBpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlc1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkaXN0cmlidXRlX21haW4pIHtcblx0XHRcdFx0XHR2YXIgZmlyc3RWZXJzaW9uTWFpbiA9IGNmcy5pbnN0YW5jZXMuZmluZE9uZShkaXN0cmlidXRlX21haW4ubWV0YWRhdGEucGFyZW50KTtcblx0XHRcdFx0XHRkaXN0cmlidXRlX21haW4uYXR0YWNobWVudFVwbG9hZGVkQXQgPSBmaXJzdFZlcnNpb25NYWluID8gZmlyc3RWZXJzaW9uTWFpbi51cGxvYWRlZEF0IDogZGlzdHJpYnV0ZV9tYWluLnVwbG9hZGVkQXQ7XG5cdFx0XHRcdFx0YXR0cy5wdXNoKGRpc3RyaWJ1dGVfbWFpbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3JbJ21ldGFkYXRhLmluc3RhbmNlJ10gPSBpbnMuX2lkO1xuXHRcdH1cblxuXHRcdGNmcy5pbnN0YW5jZXMuZmluZChzZWxlY3RvcikuZm9yRWFjaChmdW5jdGlvbihjKSB7XG5cdFx0XHR2YXIgZmlyc3RWZXJzaW9uID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKGMubWV0YWRhdGEucGFyZW50KTtcblx0XHRcdGMuYXR0YWNobWVudFVwbG9hZGVkQXQgPSBmaXJzdFZlcnNpb24gPyBmaXJzdFZlcnNpb24udXBsb2FkZWRBdCA6IGMudXBsb2FkZWRBdDtcblx0XHRcdGF0dHMucHVzaChjKTtcblx0XHR9KVxuXG5cdFx0cmV0dXJuIF8uc29ydEJ5KGF0dHMsICdhdHRhY2htZW50VXBsb2FkZWRBdCcpO1xuXHR9LFxuXG5cdHNob3dBdHRhY2htZW50czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGlmICghaW5zKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8g5aaC5p6c5piv6KKr5YiG5Y+R55qE55Sz6K+35Y2V77yM5YiZ5pi+56S65Y6f55Sz6K+35Y2V5paH5Lu2IOWSjOWIhuWPkeWQjueUs+ivt+WNleaWh+S7tlxuXHRcdHZhciBpbnN0YW5jZUlkcyA9IF8uY2xvbmUoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMpIHx8IFtdO1xuXHRcdGluc3RhbmNlSWRzLnB1c2goaW5zLl9pZCk7XG5cdFx0dmFyIGF0dGFjaG1lbnRzX2NvdW50ID0gY2ZzLmluc3RhbmNlcy5maW5kKHtcblx0XHRcdCdtZXRhZGF0YS5pbnN0YW5jZSc6IHtcblx0XHRcdFx0JGluOiBpbnN0YW5jZUlkc1xuXHRcdFx0fSxcblx0XHRcdCdtZXRhZGF0YS5jdXJyZW50JzogdHJ1ZVxuXHRcdH0pLmNvdW50KCk7XG5cblx0XHRpZiAoU2Vzc2lvbiAmJiBTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgJiYgYXR0YWNobWVudHNfY291bnQgPCAxKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gXCJkcmFmdFwiIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09IFwiaW5ib3hcIiB8fCBhdHRhY2htZW50c19jb3VudCA+IDApXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0X3Q6IGZ1bmN0aW9uKGtleSkge1xuXHRcdHJldHVybiBUQVBpMThuLl9fKGtleSlcblx0fSxcblxuXHRfOiBmdW5jdGlvbihrZXkpIHtcblx0XHR2YXIgbG9jYWxlO1xuXHRcdGlmIChNZXRlb3IuaXNDbGllbnQpIHtcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKGtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG5cdFx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpO1xuXHRcdH1cblx0fSxcblxuXHRmbG93X2ZpbGVzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIGNmcy5maWxlcy5maW5kKHsgJ21ldGFkYXRhLnNwYWNlJzogaW5zLnNwYWNlLCAnbWV0YWRhdGEub2JqZWN0X25hbWUnOiAnZmxvd3MnLCAnbWV0YWRhdGEucmVjb3JkX2lkJzogaW5zLmZsb3cgfSk7XG5cdH0sXG5cblx0aXNEcmFmdEFuZEZsb3dmaWxlc0V4aXN0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIChTZXNzaW9uLmdldCgnYm94JykgPT0gJ2RyYWZ0JykgJiYgISFjZnMuZmlsZXMuZmluZCh7ICdtZXRhZGF0YS5zcGFjZSc6IGlucy5zcGFjZSwgJ21ldGFkYXRhLm9iamVjdF9uYW1lJzogJ2Zsb3dzJywgJ21ldGFkYXRhLnJlY29yZF9pZCc6IGlucy5mbG93IH0pLmNvdW50KCk7XG5cdH1cblxuXG59XG5cbmlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5fdCA9IGZ1bmN0aW9uKGtleSkge1xuXHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpXG5cdH1cblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5lbmFibGVkX2FkZF9tYWluX2F0dGFjaG1lbnQgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fTtcblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5lbmFibGVkX2VkaXRfbm9ybWFsX2F0dGFjaG1lbnQgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fTtcblxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLm1haW5fYXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZTtcblx0XHR2YXIgaW5zdGFuY2VJZHMgPSBfLmNvbXBhY3QoW2luc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSwgaW5zdGFuY2UuX2lkXSk7XG5cdFx0dmFyIGF0dGFjaG1lbnQgPSBjZnMuaW5zdGFuY2VzLmZpbmRPbmUoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHQkaW46IGluc3RhbmNlSWRzXG5cdFx0XHR9LFxuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0J21ldGFkYXRhLm1haW4nOiB0cnVlXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYXR0YWNobWVudDtcblx0fTtcblxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLm5vcm1hbF9hdHRhY2htZW50cyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdGVlZG9zRGF0YSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YVxuXHRcdHZhciBpbnN0YW5jZSA9IHN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuXHRcdHZhciBpbnN0YW5jZUlkcyA9IF8uY2xvbmUoaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcykgfHwgW107XG5cdFx0aW5zdGFuY2VJZHMucHVzaChpbnN0YW5jZS5faWQpO1xuXHRcdHZhciBhdHRhY2htZW50cyA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG5cdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdCRpbjogaW5zdGFuY2VJZHNcblx0XHRcdH0sXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHtcblx0XHRcdFx0JG5lOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0JG9yOiBbe1xuXHRcdFx0XHQnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHtcblx0XHRcdFx0XHQkbmU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fSwge1xuXHRcdFx0XHQnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHRydWUsXG5cdFx0XHRcdFwibWV0YWRhdGEub3duZXJcIjogc3RlZWRvc0RhdGEuc2Vzc2lvblVzZXJJZCB8fCBzdGVlZG9zRGF0YS51c2VySWQgfHwgJy0xJyAvLyDpmLLmraLmlbDmja7lvILluLjml7Ys5pi+56S65LqG56eB5pyJ6ZmE5Lu2XG5cdFx0XHR9XVxuXHRcdH0pLmZldGNoKCk7XG5cblx0XHRyZXR1cm4gYXR0YWNobWVudHM7XG5cdH07XG5cblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5zaG93QXR0YWNobWVudHMgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zdGFuY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuaW5zdGFuY2U7XG5cdFx0dmFyIGluc3RhbmNlSWRzID0gXy5jbG9uZShpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzKSB8fCBbXTtcblx0XHRpbnN0YW5jZUlkcy5wdXNoKGluc3RhbmNlLl9pZCk7XG5cblx0XHR2YXIgYXR0YWNobWVudHMgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHQkaW46IGluc3RhbmNlSWRzXG5cdFx0XHR9LFxuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlXG5cdFx0fSkuZmV0Y2goKTtcblxuXHRcdGlmIChhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5zaG93TWFpblRpdGxlID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuXHRcdHZhciBpbnN0YW5jZUlkcyA9IF8uY29tcGFjdChbaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlLCBpbnN0YW5jZS5faWRdKTtcblx0XHR2YXIgbWFpbl9hdHRhY2hfY291bnQgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHQkaW46IGluc3RhbmNlSWRzXG5cdFx0XHR9LFxuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0J21ldGFkYXRhLm1haW4nOiB0cnVlXG5cdFx0fSkuY291bnQoKTtcblxuXHRcdHJldHVybiBtYWluX2F0dGFjaF9jb3VudCA+IDBcblx0fVxufVxuIiwibWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKVxuSW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzID1cblx0c2hvdzogKHN0ZXBOYW1lKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpZiBTZXNzaW9uLmdldCgnaW5zdGFuY2VQcmludCcpXG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0aWYgSW5zdGFuY2VNYW5hZ2VyLmlzSW5ib3goKVxuXHRcdFx0XHRteUFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKVxuXHRcdFx0XHRpZiBteUFwcHJvdmVcblx0XHRcdFx0XHRpbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdFx0XHRcdG15VHJhY2UgPSBpbnN0YW5jZT8udHJhY2VzPy5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIG15QXBwcm92ZS50cmFjZSlcblx0XHRcdFx0XHRyZXR1cm4gbXlUcmFjZT8ubmFtZSA9PSBzdGVwTmFtZVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdGRlZmF1bHREZXNjcmlwdGlvbjogKCktPlxuI1x0XHRyZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLmRlZmF1bHRfZGVzY3JpcHRpb24gfHwgVEFQaTE4bi5fXyhcImluc3RhbmNlX2RlZmF1bHRfb3BpbmlvblwiKVxuXHRcdHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEuZGVmYXVsdF9kZXNjcmlwdGlvblxuXG5cdHRyYWNlczogKCktPlxuXHRcdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKClcblxuXHR0cmFjZTogKHN0ZXBOYW1lLCBvbmx5X2NjX29waW5pb24sIGltYWdlX3NpZ24sIHRvcF9rZXl3b3JkcyktPlxuXHRcdGluc3RhbmNlID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnN0YW5jZSgpXG5cblx0XHRpc19jb21wbGV0ZWQgPSBpbnN0YW5jZT8uc3RhdGUgPT0gXCJjb21wbGV0ZWRcIlxuXG5cdFx0Y29tcGxldGVkX2RhdGUgPSBpZiBpc19jb21wbGV0ZWQgdGhlbiBfLmxhc3QoaW5zdGFuY2UudHJhY2VzKT8uZmluaXNoX2RhdGU/LmdldFRpbWUoKSBlbHNlIDBcblxuXHRcdGlmIGlzX2NvbXBsZXRlZCAmJiBpbnN0YW5jZS5maW5pc2hfZGF0ZVxuXHRcdFx0Y29tcGxldGVkX2RhdGUgPSBpbnN0YW5jZS5maW5pc2hfZGF0ZT8uZ2V0VGltZSgpXG5cblx0XHR0cmFjZXMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRyYWNlcygpXG5cblx0XHRhcHByb3ZlcyA9IF8uY2xvbmUodHJhY2VzW3N0ZXBOYW1lXSlcblxuXHRcdGFwcHJvdmVfc29ydCA9IChhcHByb3ZlcywgdG9wX2tleXdvcmRzKS0+XG5cbiPlr7lBcHByb3Zlc+aOkuW6j++8jCDmjInnhafmj5DkuqTml7bpl7TmjpLlgJLluo/vvIzlpoLmnpzmsqHmnInmj5DkuqTliJnmmL7npLrlnKjmnIDkuIrovrlcblx0XHRcdGFwcHJvdmVzX3NvcnRlZCA9IF8uc29ydEJ5IGFwcHJvdmVzLCAoYXBwcm92ZSktPlxuXHRcdFx0XHRyZXR1cm4gLShhcHByb3ZlLmZpbmlzaF9kYXRlIHx8IG5ldyBEYXRlKCkpLmdldFRpbWUoKVxuXG5cdFx0XHQj6YCa6L+H5YWz6ZSu5a2X5o6S5bqPXG5cdFx0XHRpZiB0b3Bfa2V5d29yZHNcblx0XHRcdFx0dG9wX2FwcHJvdmVzID0gbmV3IEFycmF5KClcblxuXHRcdFx0XHR0b3Bfa2V5d29yZHMuc3BsaXQoXCIsXCIpLmZvckVhY2ggKGtleSkgLT5cblx0XHRcdFx0XHR0b3BfYXBwcm92ZXMgPSBfLnVuaW9uIHRvcF9hcHByb3ZlcywgXy5maWx0ZXIoYXBwcm92ZXNfc29ydGVkLCAoYXBwcm92ZSktPlxuXHRcdFx0XHRcdFx0cmV0dXJuIGFwcHJvdmU/LmhhbmRsZXJfbmFtZT8uaW5kZXhPZihrZXkpID4gLTFcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCMg5a+5572u6aG25oSP6KeB5oyJ54Wn5aSE55CG5LqL5Lu25o6S5YCS5bqPXG5cdFx0XHRcdHRvcF9hcHByb3ZlcyA9IF8uc29ydEJ5IHRvcF9hcHByb3ZlcywgKHRvcF9hcHByb3ZlKS0+XG5cdFx0XHRcdFx0cmV0dXJuIC0odG9wX2FwcHJvdmUuZmluaXNoX2RhdGUgfHwgbmV3IERhdGUoKSkuZ2V0VGltZSgpXG5cblx0XHRcdFx0YXBwcm92ZXNfc29ydGVkID0gXy51bmlvbiB0b3BfYXBwcm92ZXMsIGFwcHJvdmVzX3NvcnRlZFxuXHRcdFx0cmV0dXJuIGFwcHJvdmVzX3NvcnRlZCB8fCBbXVxuXG5cdFx0YXBwcm92ZXMgPSBfLmZpbHRlciBhcHByb3ZlcywgKGEpLT5cblx0XHRcdHJldHVybiBhLnR5cGUgaXNudCBcImZvcndhcmRcIiBhbmQgYS50eXBlIGlzbnQgXCJkaXN0cmlidXRlXCIgYW5kIGEudHlwZSBpc250IFwidGVybWluYXRlZFwiXG5cblx0XHRpZiBvbmx5X2NjX29waW5pb25cblx0XHRcdGFwcHJvdmVzID0gYXBwcm92ZXM/LmZpbHRlclByb3BlcnR5KFwidHlwZVwiLCBcImNjXCIpXG5cblx0XHRhcHByb3Zlc19zb3J0ZWQgPSBhcHByb3ZlX3NvcnQoYXBwcm92ZXMsIHRvcF9rZXl3b3JkcylcblxuXHRcdGFwcHJvdmVzR3JvdXAgPSBfLmdyb3VwQnkoYXBwcm92ZXMsIFwiaGFuZGxlclwiKTtcblxuXHRcdGhhc05leHQgPSAoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkgLT5cblx0XHRcdGhhbmRsZXJBcHByb3ZlcyA9IGFwcHJvdmVzR3JvdXBbYXBwcm92ZS5oYW5kbGVyXVxuXHRcdFx0cmV0dXJuIF8uaW5kZXhPZihoYW5kbGVyQXBwcm92ZXMsIGFwcHJvdmUpICsgMSA8IGhhbmRsZXJBcHByb3Zlcy5sZW5ndGhcblxuXHRcdGhhdmVEZXNjcmlwdGlvbkFwcHJvdmUgPSAoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkgLT5cblx0XHRcdGhhbmRsZXJBcHByb3ZlcyA9IGFwcHJvdmVzR3JvdXBbYXBwcm92ZS5oYW5kbGVyXVxuXG5cdFx0XHRkZXNjcmlwdGlvbkFwcHJvdmVzID0gXy5maWx0ZXIgaGFuZGxlckFwcHJvdmVzLCAoYSktPlxuXHRcdFx0XHRpZiBhLmRlc2NyaXB0aW9uXG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRcdGlmIGRlc2NyaXB0aW9uQXBwcm92ZXMubGVuZ3RoID09IDBcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRcdHJldHVybiB0cnVlXG5cblxuXHRcdGFwcHJvdmVzX3NvcnRlZC5mb3JFYWNoIChhcHByb3ZlKSAtPlxuI1x0XHRcdOaciei+k+WFpeaEj+ingSDmiJYg5pyA5paw5LiA5p2h5bm25LiU55So5oi35rKh5pyJ6L6T5YWl6L+H5oSP6KeBXG4jXHRcdFx0aWYgIWFwcHJvdmUuaXNfZmluaXNoZWQgfHwgYXBwcm92ZS5kZXNjcmlwdGlvbiB8fCAoIWhhc05leHQoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkgJiYgIWhhdmVEZXNjcmlwdGlvbkFwcHJvdmUoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkpXG4jXHRcdFx0aWYgIWhhc05leHQoYXBwcm92ZSwgYXBwcm92ZXNHcm91cClcblx0XHRcdGlmIGFwcHJvdmUuc2lnbl9zaG93ICE9IGZhbHNlICYmIChhcHByb3ZlLmRlc2NyaXB0aW9uIHx8ICghYXBwcm92ZS5kZXNjcmlwdGlvbiAmJiAhaGFzTmV4dChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSAmJiAhYXBwcm92ZS5pc19maW5pc2hlZCkgfHwgTWV0ZW9yLnNldHRpbmdzLnB1YmxpYy53b3JrZmxvdz8uc2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uKVxuXHRcdFx0XHRpZiBhcHByb3ZlLmp1ZGdlIGlzbnQgJ3Rlcm1pbmF0ZWQnXG5cdFx0XHRcdFx0YXBwcm92ZS5fZGlzcGxheSA9IHRydWVcblxuXHRcdGFwcHJvdmVzX3NvcnRlZCA9IF8uZmlsdGVyIGFwcHJvdmVzX3NvcnRlZCwgKGEpIC0+XG5cdFx0XHRpZiBpc19jb21wbGV0ZWRcblx0XHRcdFx0cmV0dXJuIGEuX2Rpc3BsYXkgPT0gdHJ1ZSAmJiBhLmlzX2ZpbmlzaGVkICYmIGEuZmluaXNoX2RhdGU/LmdldFRpbWUoKSA8PSBjb21wbGV0ZWRfZGF0ZVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gYS5fZGlzcGxheSA9PSB0cnVlXG5cdFx0cmV0dXJuIGFwcHJvdmVzX3NvcnRlZFxuXG5cdGluY2x1ZGU6IChhLCBiKSAtPlxuXHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluY2x1ZGUoYSwgYilcblxuXHR1bmVtcHR5OiAodmFsKS0+XG5cdFx0cmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudW5lbXB0eSh2YWwpIHx8IE1ldGVvci5zZXR0aW5ncy5wdWJsaWMud29ya2Zsb3c/LnNob3dCbGFua0FwcHJvdmVEZXNjcmlwdGlvblxuXG5cdGZvcm1hdERhdGU6IChkYXRlLCBvcHRpb25zKS0+XG5cdFx0aWYgIW9wdGlvbnNcblx0XHRcdG9wdGlvbnMgPSB7XCJmb3JtYXRcIjogXCJZWVlZLU1NLUREXCJ9XG5cblx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5mb3JtYXREYXRlKGRhdGUsIG9wdGlvbnMpXG5cblx0aXNNeUFwcHJvdmU6IChhcHByb3ZlLCBvbmx5X2NjX29waW5pb24pIC0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSAhPSAnaW5ib3gnXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXG5cdFx0XHRjdXJyZW50QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpXG5cblx0XHRcdGlmICFhcHByb3ZlPy5faWRcblx0XHRcdFx0YXBwcm92ZSA9IGN1cnJlbnRBcHByb3ZlXG5cblx0XHRcdGlmIGFwcHJvdmUuX2lkID09IGN1cnJlbnRBcHByb3ZlPy5faWQgJiYgY3VycmVudEFwcHJvdmU/LnR5cGUgPT0gJ2NjJyAmJiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZVxuXHRcdFx0XHRpZiBfLmluZGV4T2YoY3VycmVudEFwcHJvdmU/Lm9waW5pb25fZmllbGRzX2NvZGUsIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5uYW1lKSA+IC0xXG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0XHRpZiAhKGN1cnJlbnRBcHByb3ZlPy50eXBlID09ICdjYycpICYmIG9ubHlfY2Nfb3BpbmlvblxuXHRcdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdFx0aWYgY3VycmVudEFwcHJvdmUgJiYgYXBwcm92ZS5faWQgPT0gY3VycmVudEFwcHJvdmUuX2lkXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0bXlBcHByb3ZlRGVzY3JpcHRpb246IChhcHByb3ZlSWQpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0bXlBcHByb3ZlID0gVGVtcGxhdGUuaW5zdGFuY2UoKT8ubXlBcHByb3ZlPy5nZXQoKVxuXHRcdFx0XHRpZiBteUFwcHJvdmUgJiYgbXlBcHByb3ZlLmlkID09IGFwcHJvdmVJZFxuXHRcdFx0XHRcdGlmICFteUFwcHJvdmUuc2lnbl9maWVsZF9jb2RlIHx8IG15QXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgPT0gVGVtcGxhdGUuaW5zdGFuY2UoKT8uZGF0YT8ubmFtZVxuXHRcdFx0XHRcdFx0aWYgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VfbXlfYXBwcm92ZV9kZXNjcmlwdGlvblwiKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbXlBcHByb3ZlPy5kZXNjcmlwdGlvbiB8fCBcIlwiXG5cdFx0XHRcdFx0XHRyZXR1cm4gU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpXG5cblx0bm93OiAoKS0+XG5cdFx0cmV0dXJuIG5ldyBEYXRlKCk7XG5cblx0aXNSZWFkT25seTogKCktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0cmV0dXJuIEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdGlzT3Bpbmlvbk9mRmllbGQ6IChhcHByb3ZlKS0+XG5cdFx0aWYgYXBwcm92ZS50eXBlID09IFwiY2NcIiAmJiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZVxuXHRcdFx0aWYgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUgPT0gYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGVcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0bWFya0Rvd25Ub0h0bWw6IChtYXJrRG93blN0cmluZyktPlxuXHRcdGlmIG1hcmtEb3duU3RyaW5nXG5cdFx0XHQjIHJlbmRlcmVyID0gbmV3IE1hcmtkb3duLlJlbmRlcmVyKCk7XG5cdFx0XHQjIHJlbmRlcmVyLmxpbmsgPSAoaHJlZiwgdGl0bGUsIHRleHQpIC0+XG5cdFx0XHQjIFx0cmV0dXJuIFwiPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9JyN7aHJlZn0nIHRpdGxlPScje3RpdGxlfSc+I3t0ZXh0fTwvYT5cIlxuXHRcdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdG1hcmtlZCA9IE5wbS5yZXF1aXJlKCdtYXJrZWQnKVxuXHRcdFx0cmV0dXJuIFNwYWNlYmFycy5TYWZlU3RyaW5nKG1hcmtlZC5wYXJzZShtYXJrRG93blN0cmluZykpXG5cblx0c3RlcHM6IChmaWVsZF9mb3JtdWxhLCBzdGVwLCBvbmx5X2NjX29waW5pb24sIGltYWdlX3NpZ24pLT5cblx0XHRzdGVwcyA9IFtdXG5cdFx0aWYgIXN0ZXBcblx0XHRcdGlmICFmaWVsZF9mb3JtdWxhXG5cdFx0XHRcdGZpZWxkX2Zvcm11bGEgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpPy5maWVsZHM/LmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIHRoaXMubmFtZSkuZm9ybXVsYVxuXHRcdFx0c3RlcHMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmdldE9waW5pb25GaWVsZFN0ZXBzTmFtZShmaWVsZF9mb3JtdWxhLCBUZW1wbGF0ZS5pbnN0YW5jZSgpPy5kYXRhLnRvcF9rZXl3b3Jkcylcblx0XHRlbHNlXG5cdFx0XHRzdGVwcyA9IFt7c3RlcE5hbWU6IHN0ZXAsIG9ubHlfY2Nfb3Bpbmlvbjogb25seV9jY19vcGluaW9uLCBpbWFnZV9zaWduOiBpbWFnZV9zaWdufV1cblx0XHRyZXR1cm4gc3RlcHNcblxuXHRpbWFnZVNpZ25EYXRhOiAoaGFuZGxlcikgLT5cblx0XHRyZXR1cm4ge3VzZXI6IGhhbmRsZXJ9XG5cblx0c2hvd1NpZ25JbWFnZTogKGhhbmRsZXIsIGltYWdlX3NpZ24sIGp1ZGdlKSAtPlxuXHRcdGlmIFsncmV0dXJuZWQnLCAndGVybWluYXRlZCcsICdyZXRyaWV2ZWQnXS5pbmNsdWRlcyhqdWRnZSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdHNwYWNlVXNlclNpZ24gPSBJbWFnZVNpZ24uaGVscGVycy5zcGFjZVVzZXJTaWduKGhhbmRsZXIpXG5cblx0XHRpZiBzcGFjZVVzZXJTaWduPy5zaWduICYmIGltYWdlX3NpZ25cblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0Z2V0TGFzdFNpZ25BcHByb3ZlOiAoKS0+XG5cdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cblx0XHRyZXR1cm4gXy5sYXN0KFRyYWNlc01hbmFnZXIuZ2V0SGFuZGxlclNpZ25TaG93QXBwcm92ZXMgaW5zLCBNZXRlb3IudXNlcklkKCkpXG5cblxuXHRsYXN0TXlBcHByb3ZlRGVzY3JpcHRpb246ICgpLT5cblx0XHR0cmFjZXMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRyYWNlcygpXG5cdFx0Y3VycmVudFN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcblx0XHRhcHByb3ZlcyA9IF8uY2xvbmUodHJhY2VzW2N1cnJlbnRTdGVwLm5hbWVdKVxuXG5cdFx0YXBwcm92ZXMgPSBhcHByb3Zlcy5maWx0ZXJQcm9wZXJ0eShcImhhbmRsZXJcIiwgTWV0ZW9yLnVzZXJJZCgpKVxuXG5cdFx0aWYgYXBwcm92ZXMubGVuZ3RoID4gMVxuXHRcdFx0cmV0dXJuIGFwcHJvdmVzW2FwcHJvdmVzLmxlbmd0aCAtIDJdPy5kZXNjcmlwdGlvblxuXG5cdFx0cmV0dXJuIFwiXCI7XG5cblx0c2hvd0FwcHJvdmU6IChhcHByb3ZlKS0+XG5cdFx0aWYgIWFwcHJvdmUuc2lnbl9maWVsZF9jb2RlIHx8IGFwcHJvdmUuc2lnbl9maWVsZF9jb2RlID09IFRlbXBsYXRlLmluc3RhbmNlKCk/LmRhdGE/Lm5hbWVcblx0XHRcdGlmIGFwcHJvdmU/LmlzX3JlYWRcblx0XHRcdFx0aWYgYXBwcm92ZS5pc19maW5pc2hlZFxuXHRcdFx0XHRcdHJldHVybiBbXCJhcHByb3ZlZFwiLCBcInJlamVjdGVkXCIsIFwic3VibWl0dGVkXCIsIFwicmVhZGVkXCJdLmluY2x1ZGVzKGFwcHJvdmUuanVkZ2UpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGp1ZGdlX2Rlc2NyaXB0aW9uOiAoanVkZ2UpLT5cblx0XHRyZXR1cm4gdChqdWRnZSArIFwiX2Rlc2NyaXB0aW9uXCIpXG5cblx0aXNfYXBwcm92ZWQ6IChqdWRnZSktPlxuXHRcdHJldHVybiBcImFwcHJvdmVkXCIgPT0ganVkZ2VcblxuXHRpc19yZWplY3RlZDogKGp1ZGdlKS0+XG5cdFx0cmV0dXJuIFwicmVqZWN0ZWRcIiA9PSBqdWRnZVxuXG5cdGlzX3JlYWRlZDogKGp1ZGdlKS0+XG5cdFx0cmV0dXJuIFtcImFwcHJvdmVkXCIsIFwicmVqZWN0ZWRcIiwgXCJzdWJtaXR0ZWRcIiwgXCJyZWFkZWRcIl0uaW5jbHVkZXMoanVkZ2UpXG5cblx0YWRkQ2xhc3M6ICgpLT5cblx0XHRuYW1lID0gVGVtcGxhdGUuaW5zdGFuY2UoKT8uZGF0YT8ubmFtZVxuXHRcdHNldFRpbWVvdXQgKCkgLT5cblx0XHRcdHRyeVxuXHRcdFx0XHRlbGVtZW50ID0gJChcIi5hdXRvbWF0aWMub3Bpbmlvbi1maWVsZC1cIiArIG5hbWUpXG5cdFx0XHRcdGlmIGVsZW1lbnQubGVuZ3RoID4gMFxuXHRcdFx0XHRcdGlmIGVsZW1lbnQ/LmlzKFwidGRcIilcblx0XHRcdFx0XHRcdGVsZW1lbnQuYWRkQ2xhc3MoJ2ZpZWxkLWVkaXRhYmxlJylcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHQkKFwiLmluc3RhbmNlLXNpZ25cIiwgZWxlbWVudCkuYWRkQ2xhc3MoJ2ZpZWxkLWVkaXRhYmxlJylcblx0XHRcdGNhdGNoIGVcblx0XHRcdFx0Y29uc29sZS5sb2cgZVxuXHRcdCwgMVxuXHRcdHJldHVybiAnJ1xuXG5pZiBNZXRlb3IuaXNTZXJ2ZXJcblx0SW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzLmRlZmF1bHREZXNjcmlwdGlvbiA9IC0+XG5cdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEuZGVmYXVsdF9kZXNjcmlwdGlvbiB8fCBUQVBpMThuLl9fKFwiaW5zdGFuY2VfZGVmYXVsdF9vcGluaW9uXCIsIHt9LCBsb2NhbGUpIiwidmFyIG1hcmtlZDtcblxubWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKTtcblxuSW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzID0ge1xuICBzaG93OiBmdW5jdGlvbihzdGVwTmFtZSkge1xuICAgIHZhciBpbnN0YW5jZSwgbXlBcHByb3ZlLCBteVRyYWNlLCByZWY7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KCdpbnN0YW5jZVByaW50JykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKEluc3RhbmNlTWFuYWdlci5pc0luYm94KCkpIHtcbiAgICAgICAgbXlBcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKCk7XG4gICAgICAgIGlmIChteUFwcHJvdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICAgIG15VHJhY2UgPSBpbnN0YW5jZSAhPSBudWxsID8gKHJlZiA9IGluc3RhbmNlLnRyYWNlcykgIT0gbnVsbCA/IHJlZi5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIG15QXBwcm92ZS50cmFjZSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIChteVRyYWNlICE9IG51bGwgPyBteVRyYWNlLm5hbWUgOiB2b2lkIDApID09PSBzdGVwTmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGRlZmF1bHREZXNjcmlwdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5kZWZhdWx0X2Rlc2NyaXB0aW9uO1xuICB9LFxuICB0cmFjZXM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRyYWNlcygpO1xuICB9LFxuICB0cmFjZTogZnVuY3Rpb24oc3RlcE5hbWUsIG9ubHlfY2Nfb3BpbmlvbiwgaW1hZ2Vfc2lnbiwgdG9wX2tleXdvcmRzKSB7XG4gICAgdmFyIGFwcHJvdmVfc29ydCwgYXBwcm92ZXMsIGFwcHJvdmVzR3JvdXAsIGFwcHJvdmVzX3NvcnRlZCwgY29tcGxldGVkX2RhdGUsIGhhc05leHQsIGhhdmVEZXNjcmlwdGlvbkFwcHJvdmUsIGluc3RhbmNlLCBpc19jb21wbGV0ZWQsIHJlZiwgcmVmMSwgcmVmMiwgdHJhY2VzO1xuICAgIGluc3RhbmNlID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnN0YW5jZSgpO1xuICAgIGlzX2NvbXBsZXRlZCA9IChpbnN0YW5jZSAhPSBudWxsID8gaW5zdGFuY2Uuc3RhdGUgOiB2b2lkIDApID09PSBcImNvbXBsZXRlZFwiO1xuICAgIGNvbXBsZXRlZF9kYXRlID0gaXNfY29tcGxldGVkID8gKHJlZiA9IF8ubGFzdChpbnN0YW5jZS50cmFjZXMpKSAhPSBudWxsID8gKHJlZjEgPSByZWYuZmluaXNoX2RhdGUpICE9IG51bGwgPyByZWYxLmdldFRpbWUoKSA6IHZvaWQgMCA6IHZvaWQgMCA6IDA7XG4gICAgaWYgKGlzX2NvbXBsZXRlZCAmJiBpbnN0YW5jZS5maW5pc2hfZGF0ZSkge1xuICAgICAgY29tcGxldGVkX2RhdGUgPSAocmVmMiA9IGluc3RhbmNlLmZpbmlzaF9kYXRlKSAhPSBudWxsID8gcmVmMi5nZXRUaW1lKCkgOiB2b2lkIDA7XG4gICAgfVxuICAgIHRyYWNlcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKCk7XG4gICAgYXBwcm92ZXMgPSBfLmNsb25lKHRyYWNlc1tzdGVwTmFtZV0pO1xuICAgIGFwcHJvdmVfc29ydCA9IGZ1bmN0aW9uKGFwcHJvdmVzLCB0b3Bfa2V5d29yZHMpIHtcbiAgICAgIHZhciBhcHByb3Zlc19zb3J0ZWQsIHRvcF9hcHByb3ZlcztcbiAgICAgIGFwcHJvdmVzX3NvcnRlZCA9IF8uc29ydEJ5KGFwcHJvdmVzLCBmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgICAgIHJldHVybiAtKGFwcHJvdmUuZmluaXNoX2RhdGUgfHwgbmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAodG9wX2tleXdvcmRzKSB7XG4gICAgICAgIHRvcF9hcHByb3ZlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0b3Bfa2V5d29yZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHRvcF9hcHByb3ZlcyA9IF8udW5pb24odG9wX2FwcHJvdmVzLCBfLmZpbHRlcihhcHByb3Zlc19zb3J0ZWQsIGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICAgIHZhciByZWYzO1xuICAgICAgICAgICAgcmV0dXJuIChhcHByb3ZlICE9IG51bGwgPyAocmVmMyA9IGFwcHJvdmUuaGFuZGxlcl9uYW1lKSAhPSBudWxsID8gcmVmMy5pbmRleE9mKGtleSkgOiB2b2lkIDAgOiB2b2lkIDApID4gLTE7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdG9wX2FwcHJvdmVzID0gXy5zb3J0QnkodG9wX2FwcHJvdmVzLCBmdW5jdGlvbih0b3BfYXBwcm92ZSkge1xuICAgICAgICAgIHJldHVybiAtKHRvcF9hcHByb3ZlLmZpbmlzaF9kYXRlIHx8IG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcHJvdmVzX3NvcnRlZCA9IF8udW5pb24odG9wX2FwcHJvdmVzLCBhcHByb3Zlc19zb3J0ZWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwcHJvdmVzX3NvcnRlZCB8fCBbXTtcbiAgICB9O1xuICAgIGFwcHJvdmVzID0gXy5maWx0ZXIoYXBwcm92ZXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBhLnR5cGUgIT09IFwiZm9yd2FyZFwiICYmIGEudHlwZSAhPT0gXCJkaXN0cmlidXRlXCIgJiYgYS50eXBlICE9PSBcInRlcm1pbmF0ZWRcIjtcbiAgICB9KTtcbiAgICBpZiAob25seV9jY19vcGluaW9uKSB7XG4gICAgICBhcHByb3ZlcyA9IGFwcHJvdmVzICE9IG51bGwgPyBhcHByb3Zlcy5maWx0ZXJQcm9wZXJ0eShcInR5cGVcIiwgXCJjY1wiKSA6IHZvaWQgMDtcbiAgICB9XG4gICAgYXBwcm92ZXNfc29ydGVkID0gYXBwcm92ZV9zb3J0KGFwcHJvdmVzLCB0b3Bfa2V5d29yZHMpO1xuICAgIGFwcHJvdmVzR3JvdXAgPSBfLmdyb3VwQnkoYXBwcm92ZXMsIFwiaGFuZGxlclwiKTtcbiAgICBoYXNOZXh0ID0gZnVuY3Rpb24oYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkge1xuICAgICAgdmFyIGhhbmRsZXJBcHByb3ZlcztcbiAgICAgIGhhbmRsZXJBcHByb3ZlcyA9IGFwcHJvdmVzR3JvdXBbYXBwcm92ZS5oYW5kbGVyXTtcbiAgICAgIHJldHVybiBfLmluZGV4T2YoaGFuZGxlckFwcHJvdmVzLCBhcHByb3ZlKSArIDEgPCBoYW5kbGVyQXBwcm92ZXMubGVuZ3RoO1xuICAgIH07XG4gICAgaGF2ZURlc2NyaXB0aW9uQXBwcm92ZSA9IGZ1bmN0aW9uKGFwcHJvdmUsIGFwcHJvdmVzR3JvdXApIHtcbiAgICAgIHZhciBkZXNjcmlwdGlvbkFwcHJvdmVzLCBoYW5kbGVyQXBwcm92ZXM7XG4gICAgICBoYW5kbGVyQXBwcm92ZXMgPSBhcHByb3Zlc0dyb3VwW2FwcHJvdmUuaGFuZGxlcl07XG4gICAgICBkZXNjcmlwdGlvbkFwcHJvdmVzID0gXy5maWx0ZXIoaGFuZGxlckFwcHJvdmVzLCBmdW5jdGlvbihhKSB7XG4gICAgICAgIGlmIChhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgICBpZiAoZGVzY3JpcHRpb25BcHByb3Zlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBhcHByb3Zlc19zb3J0ZWQuZm9yRWFjaChmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgICB2YXIgcmVmMztcbiAgICAgIGlmIChhcHByb3ZlLnNpZ25fc2hvdyAhPT0gZmFsc2UgJiYgKGFwcHJvdmUuZGVzY3JpcHRpb24gfHwgKCFhcHByb3ZlLmRlc2NyaXB0aW9uICYmICFoYXNOZXh0KGFwcHJvdmUsIGFwcHJvdmVzR3JvdXApICYmICFhcHByb3ZlLmlzX2ZpbmlzaGVkKSB8fCAoKHJlZjMgPSBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0ud29ya2Zsb3cpICE9IG51bGwgPyByZWYzLnNob3dCbGFua0FwcHJvdmVEZXNjcmlwdGlvbiA6IHZvaWQgMCkpKSB7XG4gICAgICAgIGlmIChhcHByb3ZlLmp1ZGdlICE9PSAndGVybWluYXRlZCcpIHtcbiAgICAgICAgICByZXR1cm4gYXBwcm92ZS5fZGlzcGxheSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhcHByb3Zlc19zb3J0ZWQgPSBfLmZpbHRlcihhcHByb3Zlc19zb3J0ZWQsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHZhciByZWYzO1xuICAgICAgaWYgKGlzX2NvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm4gYS5fZGlzcGxheSA9PT0gdHJ1ZSAmJiBhLmlzX2ZpbmlzaGVkICYmICgocmVmMyA9IGEuZmluaXNoX2RhdGUpICE9IG51bGwgPyByZWYzLmdldFRpbWUoKSA6IHZvaWQgMCkgPD0gY29tcGxldGVkX2RhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYS5fZGlzcGxheSA9PT0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYXBwcm92ZXNfc29ydGVkO1xuICB9LFxuICBpbmNsdWRlOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5jbHVkZShhLCBiKTtcbiAgfSxcbiAgdW5lbXB0eTogZnVuY3Rpb24odmFsKSB7XG4gICAgdmFyIHJlZjtcbiAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy51bmVtcHR5KHZhbCkgfHwgKChyZWYgPSBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0ud29ya2Zsb3cpICE9IG51bGwgPyByZWYuc2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uIDogdm9pZCAwKTtcbiAgfSxcbiAgZm9ybWF0RGF0ZTogZnVuY3Rpb24oZGF0ZSwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgXCJmb3JtYXRcIjogXCJZWVlZLU1NLUREXCJcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmZvcm1hdERhdGUoZGF0ZSwgb3B0aW9ucyk7XG4gIH0sXG4gIGlzTXlBcHByb3ZlOiBmdW5jdGlvbihhcHByb3ZlLCBvbmx5X2NjX29waW5pb24pIHtcbiAgICB2YXIgY3VycmVudEFwcHJvdmUsIGlucztcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgIT09ICdpbmJveCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBjdXJyZW50QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpO1xuICAgICAgaWYgKCEoYXBwcm92ZSAhPSBudWxsID8gYXBwcm92ZS5faWQgOiB2b2lkIDApKSB7XG4gICAgICAgIGFwcHJvdmUgPSBjdXJyZW50QXBwcm92ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcHByb3ZlLl9pZCA9PT0gKGN1cnJlbnRBcHByb3ZlICE9IG51bGwgPyBjdXJyZW50QXBwcm92ZS5faWQgOiB2b2lkIDApICYmIChjdXJyZW50QXBwcm92ZSAhPSBudWxsID8gY3VycmVudEFwcHJvdmUudHlwZSA6IHZvaWQgMCkgPT09ICdjYycgJiYgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUpIHtcbiAgICAgICAgaWYgKF8uaW5kZXhPZihjdXJyZW50QXBwcm92ZSAhPSBudWxsID8gY3VycmVudEFwcHJvdmUub3Bpbmlvbl9maWVsZHNfY29kZSA6IHZvaWQgMCwgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghKChjdXJyZW50QXBwcm92ZSAhPSBudWxsID8gY3VycmVudEFwcHJvdmUudHlwZSA6IHZvaWQgMCkgPT09ICdjYycpICYmIG9ubHlfY2Nfb3Bpbmlvbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEFwcHJvdmUgJiYgYXBwcm92ZS5faWQgPT09IGN1cnJlbnRBcHByb3ZlLl9pZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBteUFwcHJvdmVEZXNjcmlwdGlvbjogZnVuY3Rpb24oYXBwcm92ZUlkKSB7XG4gICAgdmFyIG15QXBwcm92ZSwgcmVmLCByZWYxLCByZWYyLCByZWYzO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICBteUFwcHJvdmUgPSAocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLm15QXBwcm92ZSkgIT0gbnVsbCA/IHJlZjEuZ2V0KCkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICAgIGlmIChteUFwcHJvdmUgJiYgbXlBcHByb3ZlLmlkID09PSBhcHByb3ZlSWQpIHtcbiAgICAgICAgICBpZiAoIW15QXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgfHwgbXlBcHByb3ZlLnNpZ25fZmllbGRfY29kZSA9PT0gKChyZWYyID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYzID0gcmVmMi5kYXRhKSAhPSBudWxsID8gcmVmMy5uYW1lIDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgICAgICAgaWYgKCFTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChteUFwcHJvdmUgIT0gbnVsbCA/IG15QXBwcm92ZS5kZXNjcmlwdGlvbiA6IHZvaWQgMCkgfHwgXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICB9LFxuICBpc1JlYWRPbmx5OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICByZXR1cm4gQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzT3Bpbmlvbk9mRmllbGQ6IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICBpZiAoYXBwcm92ZS50eXBlID09PSBcImNjXCIgJiYgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUpIHtcbiAgICAgIGlmIChUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSA9PT0gYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSxcbiAgbWFya0Rvd25Ub0h0bWw6IGZ1bmN0aW9uKG1hcmtEb3duU3RyaW5nKSB7XG4gICAgaWYgKG1hcmtEb3duU3RyaW5nKSB7XG4gICAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgIG1hcmtlZCA9IE5wbS5yZXF1aXJlKCdtYXJrZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UobWFya0Rvd25TdHJpbmcpKTtcbiAgICB9XG4gIH0sXG4gIHN0ZXBzOiBmdW5jdGlvbihmaWVsZF9mb3JtdWxhLCBzdGVwLCBvbmx5X2NjX29waW5pb24sIGltYWdlX3NpZ24pIHtcbiAgICB2YXIgcmVmLCByZWYxLCByZWYyLCBzdGVwcztcbiAgICBzdGVwcyA9IFtdO1xuICAgIGlmICghc3RlcCkge1xuICAgICAgaWYgKCFmaWVsZF9mb3JtdWxhKSB7XG4gICAgICAgIGZpZWxkX2Zvcm11bGEgPSAocmVmID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLmZpZWxkcykgIT0gbnVsbCA/IHJlZjEuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgdGhpcy5uYW1lKS5mb3JtdWxhIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgc3RlcHMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmdldE9waW5pb25GaWVsZFN0ZXBzTmFtZShmaWVsZF9mb3JtdWxhLCAocmVmMiA9IFRlbXBsYXRlLmluc3RhbmNlKCkpICE9IG51bGwgPyByZWYyLmRhdGEudG9wX2tleXdvcmRzIDogdm9pZCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RlcHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGVwTmFtZTogc3RlcCxcbiAgICAgICAgICBvbmx5X2NjX29waW5pb246IG9ubHlfY2Nfb3BpbmlvbixcbiAgICAgICAgICBpbWFnZV9zaWduOiBpbWFnZV9zaWduXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBzdGVwcztcbiAgfSxcbiAgaW1hZ2VTaWduRGF0YTogZnVuY3Rpb24oaGFuZGxlcikge1xuICAgIHJldHVybiB7XG4gICAgICB1c2VyOiBoYW5kbGVyXG4gICAgfTtcbiAgfSxcbiAgc2hvd1NpZ25JbWFnZTogZnVuY3Rpb24oaGFuZGxlciwgaW1hZ2Vfc2lnbiwganVkZ2UpIHtcbiAgICB2YXIgc3BhY2VVc2VyU2lnbjtcbiAgICBpZiAoWydyZXR1cm5lZCcsICd0ZXJtaW5hdGVkJywgJ3JldHJpZXZlZCddLmluY2x1ZGVzKGp1ZGdlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzcGFjZVVzZXJTaWduID0gSW1hZ2VTaWduLmhlbHBlcnMuc3BhY2VVc2VyU2lnbihoYW5kbGVyKTtcbiAgICBpZiAoKHNwYWNlVXNlclNpZ24gIT0gbnVsbCA/IHNwYWNlVXNlclNpZ24uc2lnbiA6IHZvaWQgMCkgJiYgaW1hZ2Vfc2lnbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGdldExhc3RTaWduQXBwcm92ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlucztcbiAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICByZXR1cm4gXy5sYXN0KFRyYWNlc01hbmFnZXIuZ2V0SGFuZGxlclNpZ25TaG93QXBwcm92ZXMoaW5zLCBNZXRlb3IudXNlcklkKCkpKTtcbiAgfSxcbiAgbGFzdE15QXBwcm92ZURlc2NyaXB0aW9uOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXBwcm92ZXMsIGN1cnJlbnRTdGVwLCByZWYsIHRyYWNlcztcbiAgICB0cmFjZXMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRyYWNlcygpO1xuICAgIGN1cnJlbnRTdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG4gICAgYXBwcm92ZXMgPSBfLmNsb25lKHRyYWNlc1tjdXJyZW50U3RlcC5uYW1lXSk7XG4gICAgYXBwcm92ZXMgPSBhcHByb3Zlcy5maWx0ZXJQcm9wZXJ0eShcImhhbmRsZXJcIiwgTWV0ZW9yLnVzZXJJZCgpKTtcbiAgICBpZiAoYXBwcm92ZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIChyZWYgPSBhcHByb3Zlc1thcHByb3Zlcy5sZW5ndGggLSAyXSkgIT0gbnVsbCA/IHJlZi5kZXNjcmlwdGlvbiA6IHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH0sXG4gIHNob3dBcHByb3ZlOiBmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgdmFyIHJlZiwgcmVmMTtcbiAgICBpZiAoIWFwcHJvdmUuc2lnbl9maWVsZF9jb2RlIHx8IGFwcHJvdmUuc2lnbl9maWVsZF9jb2RlID09PSAoKHJlZiA9IFRlbXBsYXRlLmluc3RhbmNlKCkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5kYXRhKSAhPSBudWxsID8gcmVmMS5uYW1lIDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgaWYgKGFwcHJvdmUgIT0gbnVsbCA/IGFwcHJvdmUuaXNfcmVhZCA6IHZvaWQgMCkge1xuICAgICAgICBpZiAoYXBwcm92ZS5pc19maW5pc2hlZCkge1xuICAgICAgICAgIHJldHVybiBbXCJhcHByb3ZlZFwiLCBcInJlamVjdGVkXCIsIFwic3VibWl0dGVkXCIsIFwicmVhZGVkXCJdLmluY2x1ZGVzKGFwcHJvdmUuanVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAganVkZ2VfZGVzY3JpcHRpb246IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIHQoanVkZ2UgKyBcIl9kZXNjcmlwdGlvblwiKTtcbiAgfSxcbiAgaXNfYXBwcm92ZWQ6IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIFwiYXBwcm92ZWRcIiA9PT0ganVkZ2U7XG4gIH0sXG4gIGlzX3JlamVjdGVkOiBmdW5jdGlvbihqdWRnZSkge1xuICAgIHJldHVybiBcInJlamVjdGVkXCIgPT09IGp1ZGdlO1xuICB9LFxuICBpc19yZWFkZWQ6IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIFtcImFwcHJvdmVkXCIsIFwicmVqZWN0ZWRcIiwgXCJzdWJtaXR0ZWRcIiwgXCJyZWFkZWRcIl0uaW5jbHVkZXMoanVkZ2UpO1xuICB9LFxuICBhZGRDbGFzczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG5hbWUsIHJlZiwgcmVmMTtcbiAgICBuYW1lID0gKHJlZiA9IFRlbXBsYXRlLmluc3RhbmNlKCkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5kYXRhKSAhPSBudWxsID8gcmVmMS5uYW1lIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSwgZWxlbWVudDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVsZW1lbnQgPSAkKFwiLmF1dG9tYXRpYy5vcGluaW9uLWZpZWxkLVwiICsgbmFtZSk7XG4gICAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsID8gZWxlbWVudC5pcyhcInRkXCIpIDogdm9pZCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5hZGRDbGFzcygnZmllbGQtZWRpdGFibGUnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICQoXCIuaW5zdGFuY2Utc2lnblwiLCBlbGVtZW50KS5hZGRDbGFzcygnZmllbGQtZWRpdGFibGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKGUpO1xuICAgICAgfVxuICAgIH0sIDEpO1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICBJbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMuZGVmYXVsdERlc2NyaXB0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxvY2FsZTtcbiAgICBsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlO1xuICAgIHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEuZGVmYXVsdF9kZXNjcmlwdGlvbiB8fCBUQVBpMThuLl9fKFwiaW5zdGFuY2VfZGVmYXVsdF9vcGluaW9uXCIsIHt9LCBsb2NhbGUpO1xuICB9O1xufVxuIiwibWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKVxuVHJhY2VzVGVtcGxhdGUuaGVscGVycyA9XG5cdHRyYWNlU2hvd1NpZ25JbWFnZTogKCktPlxuXHRcdHJldHVybiBNZXRlb3Iuc2V0dGluZ3MucHVibGljLndvcmtmbG93LnRyYWNlU2hvd1NpZ25JbWFnZSAhPSBmYWxzZSAmJiBNZXRlb3Iuc2V0dGluZ3MucHVibGljLndvcmtmbG93LnRyYWNlU2hvd1NpZ25JbWFnZSAhPSAnZmFsc2UnXG5cdGVxdWFsczogKGEsIGIpIC0+XG5cdFx0YSA9PSBiXG5cdGVtcHR5OiAoYSkgLT5cblx0XHRpZiBhXG5cdFx0XHRhLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA8IDFcblx0XHRlbHNlXG5cdFx0XHR0cnVlXG5cdHVuZW1wdHk6IChhKSAtPlxuXHRcdGlmIGFcblx0XHRcdGEudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMFxuXHRcdGVsc2Vcblx0XHRcdGZhbHNlXG5cblx0YXBwZW5kOiAoYSwgYikgLT5cblx0XHRhICsgYlxuXG5cdGRhdGVGb3JtYXQ6IChkYXRlKSAtPlxuXHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpICYmIGRhdGU/LmdldEZ1bGxZZWFyKCkgPT0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpXG5cdFx0XHRcdHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdNTS1ERCBISDptbScpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXG5cdGdldFN0ZXBOYW1lOiAoc3RlcElkKSAtPlxuXHRcdHN0ZXAgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VTdGVwKHN0ZXBJZClcblx0XHRpZiBzdGVwXG5cdFx0XHRyZXR1cm4gc3RlcC5uYW1lXG5cdFx0bnVsbFxuXHRzaG93RGVsZXRlQnV0dG9uOiAoYXBwcm92ZWQpIC0+XG5cdFx0aWYgYXBwcm92ZWQgYW5kIGFwcHJvdmVkLnR5cGUgPT0gJ2NjJyBhbmQgYXBwcm92ZWQuZnJvbV91c2VyID09IE1ldGVvci51c2VySWQoKSBhbmQgYXBwcm92ZWQuaXNfZmluaXNoZWQgIT0gdHJ1ZSBhbmQgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRmYWxzZVxuXHRpc1Nob3dNb2RpZmljYXRpb25CdXR0b246IChhcHByb3ZlZCkgLT5cblx0XHRhcHByb3ZlX2FkbWlucyA9IE1ldGVvci5zZXR0aW5ncz8ucHVibGljPy53b3JrZmxvdz8uYXBwcm92ZV9hZG1pbnNcblx0XHRpZiBhcHByb3ZlX2FkbWlucz8ubGVuZ3RoXG5cdFx0XHRpc1Nob3cgPSBhcHByb3ZlX2FkbWlucz8uY29udGFpbnMgTWV0ZW9yLnVzZXJJZCgpXG5cdFx0dW5sZXNzIGlzU2hvd1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0cmV0dXJuIGFwcHJvdmVkLmhhbmRsZXIgPT0gTWV0ZW9yLnVzZXJJZCgpXG5cdGlzRWRpdGluZzogKCkgLT5cblx0XHQgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuaXNfZWRpdGluZz8uZ2V0KClcblx0aXNTaG93RGVzY3JpcHRpb246IChhcHByb3ZlZCktPlxuXHRcdCMgZGVidWdnZXJcblx0XHRpZiBUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLmlzU2hvd01vZGlmaWNhdGlvbkJ1dHRvbiBhcHByb3ZlZFxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRyZXR1cm4gYXBwcm92ZWQuZGVzY3JpcHRpb24/LnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA+IDBcblx0aXNDQzogKGFwcHJvdmVkKSAtPlxuXHRcdGlmIGFwcHJvdmVkIGFuZCBhcHByb3ZlZC50eXBlID09ICdjYydcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZmFsc2Vcblx0Z2V0QXBwcm92ZVN0YXR1c0ljb246IChhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIC0+XG5cdFx0aWYgYXV0b1N1Ym1pdHRlZCA9PSB0cnVlXG5cdFx0XHRyZXR1cm4gJ2lvbiBpb24tYW5kcm9pZC1hbGFybS1jbG9jaydcblx0XHQj5bey57uT5p2f55qE5pi+56S65Li65qC45YeGL+mps+Wbni/lj5bmtojnlLPor7fvvIzlubbmmL7npLrlpITnkIbnirbmgIHlm77moIdcblx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9IHVuZGVmaW5lZFxuXHRcdHN3aXRjaCBhcHByb3ZlSnVkZ2Vcblx0XHRcdHdoZW4gJ2FwcHJvdmVkJ1xuXHRcdFx0XHQjIOW3suaguOWHhlxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWNoZWNrbWFyay1yb3VuZCdcblx0XHRcdHdoZW4gJ3JlamVjdGVkJ1xuXHRcdFx0XHQjIOW3sumps+WbnlxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWNsb3NlLXJvdW5kJ1xuXHRcdFx0d2hlbiAndGVybWluYXRlZCdcblx0XHRcdFx0IyDlt7Llj5bmtohcblx0XHRcdFx0YXBwcm92ZVN0YXR1c0ljb24gPSAnZmEgZmEtYmFuJ1xuXHRcdFx0d2hlbiAncmVhc3NpZ25lZCdcblx0XHRcdFx0IyDovaznrb7moLhcblx0XHRcdFx0YXBwcm92ZVN0YXR1c0ljb24gPSAnaW9uIGlvbi1hbmRyb2lkLWNvbnRhY3QnXG5cdFx0XHR3aGVuICdyZWxvY2F0ZWQnXG5cdFx0XHRcdCMg6YeN5a6a5L2NXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tYXJyb3ctc2hyaW5rJ1xuXHRcdFx0d2hlbiAncmV0cmlldmVkJ1xuXHRcdFx0XHQjIOW3suWPluWbnlxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdmYSBmYS11bmRvJ1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICcnXG5cdFx0XHRcdGJyZWFrXG5cdFx0YXBwcm92ZVN0YXR1c0ljb25cblx0Z2V0QXBwcm92ZVN0YXR1c1RleHQ6IChhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIC0+XG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0XHRpZiBsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0XHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRcdGVsc2Vcblx0XHRcdGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIilcblx0XHQj5bey57uT5p2f55qE5pi+56S65Li65qC45YeGL+mps+Wbni/lj5bmtojnlLPor7fvvIzlubbmmL7npLrlpITnkIbnirbmgIHlm77moIdcblx0XHRpZiBhdXRvU3VibWl0dGVkID09IHRydWVcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKCdpbnN0YW5jZV9hcHByb3ZlX3RpbWVvdXRfYXV0b19zdWJtaXR0ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gdW5kZWZpbmVkXG5cdFx0c3dpdGNoIGFwcHJvdmVKdWRnZVxuXHRcdFx0d2hlbiAnYXBwcm92ZWQnXG5cdFx0XHRcdCMg5bey5qC45YeGXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgYXBwcm92ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmVqZWN0ZWQnXG5cdFx0XHRcdCMg5bey6amz5ZueXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVqZWN0ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAndGVybWluYXRlZCdcblx0XHRcdFx0IyDlt7Llj5bmtohcblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSB0ZXJtaW5hdGVkJywge30sIGxvY2FsZSlcblx0XHRcdHdoZW4gJ3JlYXNzaWduZWQnXG5cdFx0XHRcdCMg6L2s562+5qC4XG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVhc3NpZ25lZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICdyZWxvY2F0ZWQnXG5cdFx0XHRcdCMg6YeN5a6a5L2NXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVsb2NhdGVkJywge30sIGxvY2FsZSlcblx0XHRcdHdoZW4gJ3JldHJpZXZlZCdcblx0XHRcdFx0IyDlt7Llj5blm55cblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZXRyaWV2ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmV0dXJuZWQnXG5cdFx0XHRcdCMg5bey6YCA5ZueXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmV0dXJuZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmVhZGVkJ1xuXHRcdFx0XHQjIOW3sumYhVxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHJlYWRlZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gJydcblx0XHRcdFx0YnJlYWtcblx0XHRhcHByb3ZlU3RhdHVzVGV4dFxuXHRcblx0Z2V0QXBwcm92ZUp1ZGdlQ2xhc3M6IChhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIC0+XG5cdFx0aWYgYXV0b1N1Ym1pdHRlZCA9PSB0cnVlXG5cdFx0XHRyZXR1cm4gJ2F1dG9TdWJtaXR0ZWQnXG5cdFx0cmV0dXJuIGFwcHJvdmVKdWRnZVxuXG5cdF90OiAoa2V5KS0+XG5cdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5KVxuXG5cdG15QXBwcm92ZURlc2NyaXB0aW9uOiAoYXBwcm92ZUlkKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnXG5cdFx0XHRcdG15QXBwcm92ZSA9IFRlbXBsYXRlLmluc3RhbmNlKCk/Lm15QXBwcm92ZT8uZ2V0KClcblx0XHRcdFx0aWYgbXlBcHByb3ZlICYmIG15QXBwcm92ZS5pZCA9PSBhcHByb3ZlSWRcblx0XHRcdFx0XHRpZiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpXG5cdFx0XHRcdFx0XHRyZXR1cm4gbXlBcHByb3ZlPy5kZXNjcmlwdGlvbiB8fCBcIlwiXG5cdFx0XHRcdFx0cmV0dXJuIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VfbXlfYXBwcm92ZV9kZXNjcmlwdGlvblwiKVxuXHRpc0ZvcndhcmQ6IChhcHByb3ZlZCkgLT5cblx0XHRpZiBhcHByb3ZlZCBhbmQgYXBwcm92ZWQudHlwZSA9PSAnZm9yd2FyZCdcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZmFsc2Vcblx0c2hvd0ZvcndhcmREZWxldGVCdXR0b246IChhcHByb3ZlKSAtPlxuXHRcdGlmIGRiLmluc3RhbmNlcy5maW5kKGFwcHJvdmUuZm9yd2FyZF9pbnN0YW5jZSkuY291bnQoKSBpcyAwXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRpZiBhcHByb3ZlIGFuZCBhcHByb3ZlLnR5cGUgPT0gJ2ZvcndhcmQnIGFuZCBhcHByb3ZlLmZyb21fdXNlciA9PSBNZXRlb3IudXNlcklkKCkgYW5kICFTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgYW5kIGFwcHJvdmUuanVkZ2UgaXNudCAndGVybWluYXRlZCdcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZmFsc2Vcblx0bWFya0Rvd25Ub0h0bWw6IChtYXJrRG93blN0cmluZyktPlxuXHRcdGlmIG1hcmtEb3duU3RyaW5nXG5cdFx0XHQjIHJlbmRlcmVyID0gbmV3IE1hcmtkb3duLlJlbmRlcmVyKCk7XG5cdFx0XHQjIHJlbmRlcmVyLmxpbmsgPSAoIGhyZWYsIHRpdGxlLCB0ZXh0ICkgLT5cblx0XHRcdCMgXHRyZXR1cm4gXCI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nI3tocmVmfScgdGl0bGU9JyN7dGl0bGV9Jz4je3RleHR9PC9hPlwiXG5cdFx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0bWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpXG5cdFx0XHRyZXR1cm4gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKG1hcmtEb3duU3RyaW5nKSlcblx0aXNEaXN0cmlidXRlOiAoYXBwcm92ZSkgLT5cblx0XHRpZiBhcHByb3ZlIGFuZCBhcHByb3ZlLnR5cGUgPT0gJ2Rpc3RyaWJ1dGUnXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdGZhbHNlXG5cdHNob3dEaXN0cmlidXRlRGVsZXRlQnV0dG9uOiAoYXBwcm92ZSkgLT5cblx0XHRpZiBkYi5pbnN0YW5jZXMuZmluZChhcHByb3ZlLmZvcndhcmRfaW5zdGFuY2UpLmNvdW50KCkgaXMgMFxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRpZiBhcHByb3ZlIGFuZCBhcHByb3ZlLnR5cGUgPT0gJ2Rpc3RyaWJ1dGUnIGFuZCAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpIGFuZCBhcHByb3ZlLmp1ZGdlIGlzbnQgJ3Rlcm1pbmF0ZWQnXG5cdFx0XHQjIOa1geeoi+euoeeQhuWRmOWSjOezu+e7n+euoeeQhuWRmO+8jOWPr+S7peaJp+ihjOS7u+S9leaDheWGteS4i+eahOaWh+S7tuWPlua2iOWIhuWPkVxuXHRcdFx0aW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogYXBwcm92ZS5pbnN0YW5jZX0sIHtmaWVsZHM6IHtmbG93OiAxLCBzcGFjZTogMX19KVxuXHRcdFx0aWYgaW5zIGFuZCBpbnMuZmxvdyBhbmQgaW5zLnNwYWNlXG5cdFx0XHRcdGlmIFdvcmtmbG93TWFuYWdlci5oYXNGbG93QWRtaW5QZXJtaXNzaW9uKGlucy5mbG93LCBpbnMuc3BhY2UsIE1ldGVvci51c2VySWQoKSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0XHRpZiBhcHByb3ZlLmZyb21fdXNlciA9PSBNZXRlb3IudXNlcklkKClcblx0XHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdGZhbHNlXG5cblx0ZmluaXNoRGF0ZVNjaGVtYTogKCkgLT5cblx0XHRpZiBTdGVlZG9zLmlzQW5kcm9pZE9ySU9TKClcblx0XHRcdHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0ZmluaXNoX2RhdGU6IHtcblx0XHRcdFx0XHRhdXRvZm9ybToge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJkYXRldGltZS1sb2NhbFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvcHRpb25hbDogZmFsc2UsXG5cdFx0XHRcdFx0dHlwZTogRGF0ZVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0ZmluaXNoX2RhdGU6IHtcblx0XHRcdFx0XHRhdXRvZm9ybToge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJib290c3RyYXAtZGF0ZXRpbWVwaWNrZXJcIlxuXHRcdFx0XHRcdFx0cmVhZG9ubHk6IHRydWVcblx0XHRcdFx0XHRcdGRhdGVUaW1lUGlja2VyT3B0aW9uczp7XG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCIsXG5cdFx0XHRcdFx0XHRcdGlnbm9yZVJlYWRvbmx5OnRydWUsXG5cdFx0XHRcdFx0XHRcdGxvY2FsZTogU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKSxcblx0XHRcdFx0XHRcdFx0d2lkZ2V0UG9zaXRpb25pbmc6e1xuXHRcdFx0XHRcdFx0XHRcdGhvcml6b250YWw6ICdyaWdodCdcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3B0aW9uYWw6IGZhbHNlLFxuXHRcdFx0XHRcdHR5cGU6IERhdGVcblx0XHRcdFx0fVxuXHRcdFx0fSlcblxuXHRmaW5pc2hEYXRlVmFsdWVzOiAoKSAtPlxuXHRcdHJldHVybiB7XG5cdFx0XHRmaW5pc2hfZGF0ZTp0aGlzLmZpbmlzaF9kYXRlXG5cdFx0fTtcblxuXHQjIyNcbiAgICBcdOatpOWHveaVsOeUqOS6juaOp+WItuaYr+WQpuaYvuekunRyYWNlcyB2aWV3XG4gICAgXHR0cnVlOiDmmL7npLp0cmFjZXMgdmlldyznrb7moLjljobnqIvmjInpkq7ngrnlh7vlkI7mmK/nm7TmjqXlrprkvY3liLB0cmFjZXMgdmlld1xuICAgIFx0ZmFsc2U6IOS4jeaYvuekunRyYWNlcyB2aWV377yM562+5qC45Y6G56iL5oyJ6ZKu54K55Ye75ZCOLOS7pU1vZGFsIOaWueW8j+aYvuekunRyYWNlcyB2aWV3XG5cdCMjI1xuXHRzaG93VHJhY2VzVmlldzogKGZvcm0sIGZvcm1fdmVyc2lvbiktPlxuI1x0XHRyZXR1cm4gIShJbnN0YW5jZU1hbmFnZXIuaXNUYWJsZVN0eWxlKGZvcm0pICYmIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5jbHVkZXNPcGluaW9uRmllbGQoZm9ybSwgZm9ybV92ZXJzaW9uKSlcblxuXHRcdHNob3dfbW9kYWxfdHJhY2VzX2xpc3QgPSBkYi5zcGFjZV9zZXR0aW5ncy5maW5kT25lKHtzcGFjZTogU2Vzc2lvbi5nZXQoXCJzcGFjZUlkXCIpLCBrZXk6IFwic2hvd19tb2RhbF90cmFjZXNfbGlzdFwifSk/LnZhbHVlcyB8fCBmYWxzZVxuXG5cdFx0cmV0dXJuICFzaG93X21vZGFsX3RyYWNlc19saXN0XG5cblx0Z2V0SW5zdGFuY2VTdGF0ZVRleHQ6IChpbnN0YW5jZV9pZCktPlxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdFx0aWYgbG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ3poLWNuJ1xuXHRcdFx0XHRsb2NhbGUgPSBcInpoLUNOXCJcblx0XHRlbHNlXG5cdFx0XHRsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpXG5cblx0XHRpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZV9pZH0sIHtmaWVsZHM6IHtzdGF0ZTogMSwgaXNfcmVhZDogMX19KVxuXHRcdGlmIG5vdCBpbnNcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKCdpbnN0YW5jZV9kZWxldGVkJywge30sIGxvY2FsZSlcblxuXHRcdHRleHQgPSAnJ1xuXHRcdGlmIGlucy5zdGF0ZSBpcyAnY29tcGxldGVkJ1xuXHRcdFx0dGV4dCA9IFRBUGkxOG4uX18oJ2NvbXBsZXRlZCcsIHt9LCBsb2NhbGUpXG5cdFx0ZWxzZSBpZiBpbnMuc3RhdGUgaXMgJ3BlbmRpbmcnXG5cdFx0XHR0ZXh0ID0gVEFQaTE4bi5fXygncGVuZGluZycsIHt9LCBsb2NhbGUpXG5cdFx0ZWxzZSBpZiBpbnMuc3RhdGUgaXMgJ2RyYWZ0J1xuXHRcdFx0aWYgaW5zLmlzX3JlYWRcblx0XHRcdFx0dGV4dCA9IFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfcmVhZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRleHQgPSBUQVBpMThuLl9fKCdpbnN0YW5jZV9hcHByb3ZlX25vdF95ZXRfaGFuZGxlZCcsIHt9LCBsb2NhbGUpXG5cblx0XHRyZXR1cm4gdGV4dFxuXG5cdGdldEluc3RhbmNlU3RhdGVDb2xvcjogKGluc3RhbmNlX2lkKS0+XG5cdFx0aW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaW5zdGFuY2VfaWR9LCB7ZmllbGRzOiB7c3RhdGU6IDEsIGlzX3JlYWQ6IDF9fSlcblx0XHRpZiBub3QgaW5zXG5cdFx0XHRyZXR1cm4gXCJcIlxuXG5cdFx0Y2xhID0gJydcblx0XHRpZiBpbnMuc3RhdGUgaXMgJ2RyYWZ0J1xuXHRcdFx0aWYgaW5zLmlzX3JlYWRcblx0XHRcdFx0Y2xhID0gJ2JsdWUnXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNsYSA9ICdyZWQnXG5cdFx0cmV0dXJuIGNsYVxuXG5cdGZpcnN0VHJhY2U6IChpbmRleCktPlxuXHRcdHJldHVybiBpbmRleCBpcyAwXG5cblx0bGFzdF9kaXN0cmlidXRlX2Zyb206IChpbnN0YW5jZV9pZCktPlxuXHRcdGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlX2lkLCBkaXN0cmlidXRlX2Zyb21faW5zdGFuY2U6IHskZXhpc3RzOiB0cnVlfX0se2ZpZWxkczp7Y3JlYXRlZDogMSwgY3JlYXRlZF9ieTogMX19KVxuXHRcdGlmIGluc1xuXHRcdFx0ZGlzX2luZm8gPSB7fVxuXHRcdFx0dXNlciA9IHt9XG5cdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0dXNlciA9IFVVZmxvd19hcGkuZ2V0TmFtZUZvclVzZXIoaW5zLmNyZWF0ZWRfYnkpXG5cdFx0XHRlbHNlIGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHR1c2VyID0gZGIudXNlcnMuZmluZE9uZSh7X2lkOiBpbnMuY3JlYXRlZF9ieX0sIHtmaWVsZHM6IHtuYW1lOiAxfX0pXG5cblx0XHRcdGlmIHVzZXIubmFtZVxuXHRcdFx0XHRkaXNfaW5mby5mcm9tX3VzZXIgPSB1c2VyLl9pZFxuXHRcdFx0XHRkaXNfaW5mby5mcm9tX3VzZXJfbmFtZSA9IHVzZXIubmFtZVxuXHRcdFx0XHRkaXNfaW5mby5jcmVhdGVkID0gaW5zLmNyZWF0ZWRcblxuXHRcdFx0aWYgbm90IF8uaXNFbXB0eShkaXNfaW5mbylcblx0XHRcdFx0cmV0dXJuIGRpc19pbmZvXG5cdFx0cmV0dXJuXG5cblx0aXNDQ09yRGlzdHJpYnV0ZU9yRm9yd2FyZFRlcm1pbmF0ZWQ6IChhcHByb3ZlKS0+XG5cdFx0aWYgKGFwcHJvdmUudHlwZSBpcyAnY2MnIG9yIGFwcHJvdmUudHlwZSBpcyAnZGlzdHJpYnV0ZScgb3IgYXBwcm92ZS50eXBlIGlzICdmb3J3YXJkJykgYW5kIGFwcHJvdmUuanVkZ2UgaXMgJ3Rlcm1pbmF0ZWQnXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdGp1ZGdlVGVybWluYXRlZDogKGp1ZGdlKS0+XG5cdFx0cmV0dXJuIGp1ZGdlIGlzICd0ZXJtaW5hdGVkJ1xuXG5cdGluc3RhbmNlRXhpc3RzOiAoaW5zdGFuY2VfaWQpLT5cblx0XHRyZXR1cm4gISFkYi5pbnN0YW5jZXMuZmluZChpbnN0YW5jZV9pZCkuY291bnQoKVxuXG5cdGFnZW50RGVzY3JpcHRpb246ICh1c2VyTmFtZSktPlxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdFx0aWYgbG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ3poLWNuJ1xuXHRcdFx0XHRsb2NhbGUgPSBcInpoLUNOXCJcblx0XHRlbHNlXG5cdFx0XHRsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpXG5cblx0XHRyZXR1cm4gVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge3VzZXJOYW1lOiB1c2VyTmFtZX0sIGxvY2FsZSlcblx0XG5cdHRyYWNlTmFtZTogKGluc3RhbmNlX2lkLCB0cmFjZUlkKS0+XG5cdFx0cmV0dXJuIF8uZmluZChkYi5pbnN0YW5jZXMuZmluZE9uZShpbnN0YW5jZV9pZCwge2ZpZWxkczoge3RyYWNlczogMX19KT8udHJhY2VzLCAodHJhY2UpLT5cblx0XHRcdFx0XHRyZXR1cm4gdHJhY2UuX2lkID09ICB0cmFjZUlkXG5cdFx0KT8ubmFtZVxuXG5cdG9iamVjdFVybDogKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCktPlxuXHRcdHJldHVybiBDcmVhdG9yLmdldE9iamVjdFVybChvYmplY3RfbmFtZSwgcmVjb3JkX2lkLCBhcHBfaWQpXG5cblx0aGFuZGxlckRvYzogKGhhbmRsZXJJZCktPlxuXHRcdHVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8gPSBNZXRlb3Iuc2V0dGluZ3MucHVibGljPy53b3JrZmxvdz8udXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mb1xuXHRcdGlmICF1c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvIG9yICF1c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvLmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSlcblx0XHRcdHJldHVyblxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0cmV0dXJuIFVVZmxvd19hcGkuZ2V0Q29udGFjdEluZm9Gb3JVc2VyKGhhbmRsZXJJZCwgU2Vzc2lvbi5nZXQoJ3NwYWNlSWQnKSlcblx0XHRlbHNlIGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0cmV0dXJuIGRiLnVzZXJzLmZpbmRPbmUoaGFuZGxlcklkKVxuXG5pZiBNZXRlb3IuaXNTZXJ2ZXJcblx0VHJhY2VzVGVtcGxhdGUuaGVscGVycy5kYXRlRm9ybWF0ID0gKGRhdGUpLT5cblx0XHRpZiBkYXRlXG5cdFx0XHR1dGNPZmZzZXQgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEudXRjT2Zmc2V0XG5cdFx0XHRyZXR1cm4gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmZvcm1hdERhdGUoZGF0ZSwgdXRjT2Zmc2V0KTtcblxuXHRUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLl90ID0gKGtleSktPlxuXHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpXG5cblx0VHJhY2VzVGVtcGxhdGUuaGVscGVycy5zaG93RGVsZXRlQnV0dG9uID0gKGFwcHJvdmVkKSAtPlxuXHRcdHJldHVybiBmYWxzZTtcblxuVHJhY2VzVGVtcGxhdGUuZXZlbnRzID1cblx0J2NsaWNrIC5jYy1hcHByb3ZlLXJlbW92ZSc6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRpZiBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyAqIDEgIT0gMVxuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNhbGxpbmcgPSAxXG5cdFx0XHQkKFwiaVwiLGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKFwiZmEtc3BpblwiKVxuXHRcdFx0aW5zdGFuY2VJZCA9IFNlc3Npb24uZ2V0KCdpbnN0YW5jZUlkJylcblx0XHRcdGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmVcblx0XHRcdCMgQ0FMTCDliKDpmaRhcHByb3Zl5Ye95pWw44CCXG5cdFx0XHQkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIilcblx0XHRcdE1ldGVvci5jYWxsICdjY19yZW1vdmUnLCBpbnN0YW5jZUlkLCBhcHByb3ZlSWQsIChlcnIsIHJlc3VsdCkgLT5cblx0XHRcdFx0JChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0XHRcdGlmIGVyclxuXHRcdFx0XHRcdHRvYXN0ci5lcnJvciBlcnJcblx0XHRcdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyA9IDBcblx0XHRcdFx0XHQkKFwiaVwiLGV2ZW50LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKFwiZmEtc3BpblwiKVxuXHRcdFx0XHRpZiByZXN1bHQgPT0gdHJ1ZVxuXHRcdFx0XHRcdHRvYXN0ci5zdWNjZXNzKFRBUGkxOG4uX18oXCJyZW1vdmVfY2NfYXBwcm92ZVwiKSk7XG5cdFx0XHRcdFx0aWYgJChcIi5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWxcIikubGVuZ3RoXG5cdFx0XHRcdFx0XHRNb2RhbC5oaWRlIFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCJcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHRyZXR1cm5cblxuXHQnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWNjLWFwcHJvdmUtcmVtb3ZlJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHRpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKVxuXHRcdGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmVcblx0XHQjICMgQ0FMTCDliKDpmaRhcHByb3Zl5Ye95pWw44CCXG5cdFx0IyAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIilcblx0XHQjIE1ldGVvci5jYWxsICdjY19yZW1vdmUnLCBpbnN0YW5jZUlkLCBhcHByb3ZlSWQsIChlcnIsIHJlc3VsdCkgLT5cblx0XHQjIFx0JChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0IyBcdGlmIGVyclxuXHRcdCMgXHRcdHRvYXN0ci5lcnJvciBlcnJcblx0XHQjIFx0aWYgcmVzdWx0ID09IHRydWVcblx0XHQjIFx0XHR0b2FzdHIuc3VjY2VzcyhUQVBpMThuLl9fKFwicmVtb3ZlX2NjX2FwcHJvdmVcIikpO1xuXHRcdCMgXHRcdE1vZGFsLmhpZGUgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIlxuXHRcdCMgXHRyZXR1cm5cblx0XHQjIHJldHVyblxuXHRcdE1vZGFsLmFsbG93TXVsdGlwbGUgPSB0cnVlXG5cdFx0TW9kYWwuc2hvdyAnY2FuY2VsX2NjX21vZGFsJ1xuXG5cdCdjbGljayAuYXBwcm92ZS1pdGVtLC5hcHByb3ZlLWRlc2NyaXB0aW9uJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHQjIFBD5LiK6ZO+5o6l5YWB6K6455u05o6l54K55byA77yM5LiN5YaN5omT5byA562+5om55Y6G56iL6K+m57uGXG5cdFx0dW5sZXNzICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYS5idG4tbGlua1wiKS5sZW5ndGhcblx0XHRcdE1vZGFsLnNob3cgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIiwgdGhpc1xuXG5cdCd0YXBob2xkIC5hcHByb3ZlLWl0ZW0sLmFwcHJvdmUtZGVzY3JpcHRpb24nOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdCMg5omL5py65LiK6ZW/5oyJ5omT5byA562+5om55Y6G56iL6K+m57uG77yM5aaC5p6c5piv6ZO+5o6l6ZW/5oyJ5omT5byA5ZCO5LiA5pS+5omL56qX5Y+j5bCx5Y+I5YWz5o6J5LqG77yM5omA5Lul5LiN6K6p6ZO+5o6l5omT5byA562+5om55Y6G56iL6K+m57uGXG5cdFx0dW5sZXNzICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYS5idG4tbGlua1wiKS5sZW5ndGhcblx0XHRcdE1vZGFsLnNob3cgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIiwgdGhpc1xuXG5cdCdjbGljayAuYXBwcm92ZS1pdGVtIGEuYnRuLWxpbmssLmFwcHJvdmUtZGVzY3JpcHRpb24gYS5idG4tbGluaywuYXBwcm92ZS1pdGVtLWRpc3RyaWJ1dGUgYS5idG4tbGluayc6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0IyDmiYvmnLrkuIrngrnlh7vpk77mjqXvvIzlvLnlh7rmlrDnqpflj6PvvIzkuI3mlK/mjIHvvIzlm6DkuLphbmRyb2lk5LiK5Lya5by55Ye655m75b2V55WM6Z2iXG5cdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHR1c2VySWQgPSBldmVudC50YXJnZXQuZGF0YXNldD8udGFyZ2V0X3VzZXJfaWRcblx0XHRcdENyZWF0b3Iub3BlblNhZmVPYmplY3RVcmwoJ3VzZXJzJywgdXNlcklkKVxuXG5cdCd0YXBlbmQgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0IyDkuIrov7Dplb/mjInmiZPlvIBhcHByb3Zl6K+m57uG56qX5Y+j55qE5LqL5Lu2dGFwaG9sZOS8muinpuWPkeaJk+W8gOeql+WPo+WQjueahHRvdWNoZW5k5LqL5Lu277yM6YCg5oiQ6ZW/5oyJ5omT5byA56qX5Y+j5ZCO5LiA5pS+5omL56qX5Y+j5bCx5Y+I5YWz5o6J5LqGXG5cdFx0IyDov5nph4zlj6rog73pgJrov4fpmLvmraJ0YXBlbmTkuovku7Yo5LiN5Y+v5Lul55SodG91Y2hlbmTkuovku7bvvIzlm6DkuLrkvJrlvbHlk410YXBob2xk5Yqf6IO977yM6YCg5oiQ5rKh5pyJ6ZW/5oyJ5pWI5p6c5pe25Lmf5Lya6Kem5Y+RdGFwaG9sZOS6i+S7tinlhpLms6HmnaXpgb/lhY3pl67popjjgIJcblx0XHQjIOmTvuaOpeWFgeiuuOebtOaOpeeCueW8gFxuXHRcdHVubGVzcyAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChcImEuYnRuLWxpbmtcIikubGVuZ3RoXG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0J2NsaWNrIC5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWwgLmJ0bi1mb3J3YXJkLWFwcHJvdmUtcmVtb3ZlJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHRpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKVxuXHRcdGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmVcblx0XHR0cmFjZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQudHJhY2Vcblx0XHQjIENBTEwg5Yig6ZmkYXBwcm92ZeWHveaVsOOAglxuXHRcdCQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9hZGluZ1wiKVxuXHRcdE1ldGVvci5jYWxsICdmb3J3YXJkX3JlbW92ZScsIGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgKGVyciwgcmVzdWx0KSAtPlxuXHRcdFx0JChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0XHRpZiBlcnJcblx0XHRcdFx0dG9hc3RyLmVycm9yIFRBUGkxOG4uX18oZXJyLnJlYXNvbilcblx0XHRcdGlmIHJlc3VsdCA9PSB0cnVlXG5cdFx0XHRcdHRvYXN0ci5zdWNjZXNzKFRBUGkxOG4uX18oXCJpbnN0YW5jZV9hcHByb3ZlX2ZvcndhcmRfcmVtb3ZlX3N1Y2Nlc3NcIikpO1xuXHRcdFx0XHRNb2RhbC5oaWRlIFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCJcblx0XHRcdHJldHVyblxuXHRcdHJldHVyblxuXG5cdCdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tZm9yd2FyZC1pbnN0YW5jZS1sb29rJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHRmb3J3YXJkX3NwYWNlID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuZm9yd2FyZHNwYWNlXG5cdFx0Zm9yd2FyZF9pbnN0YW5jZSA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmZvcndhcmRpbnN0YW5jZVxuXHRcdFN0ZWVkb3Mub3BlbldpbmRvdyhTdGVlZG9zLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIgKyBmb3J3YXJkX3NwYWNlICsgXCIvdmlldy9yZWFkb25seS9cIiArIGZvcndhcmRfaW5zdGFuY2UpKVxuXG5cdCdjbGljayAuYnRuLW1vZGlmaWNhdGlvbidcdDogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHR0ZW1wbGF0ZS5pc19lZGl0aW5nLnNldCghdGVtcGxhdGUuaXNfZWRpdGluZy5nZXQoKSk7XG5cdFx0dW5sZXNzIFN0ZWVkb3MuaXNBbmRyb2lkT3JJT1MoKVxuXHRcdFx0VHJhY2tlci5hZnRlckZsdXNoIC0+XG5cdFx0XHRcdCMg5pi+56S65pel5b+X55qE5pe25YCZ5oqK5rua5Yqo5p2h5b6A5LiL56e754K577yM6K6p5pel5pyf5o6n5Lu25pi+56S65Ye65LiA6YOo5YiG77yM5Lul6YG/5YWN55So5oi355yL5LiN5Yiw5pel5pyf5o6n5Lu2XG5cdFx0XHRcdCQoXCIjaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsICNmaW5pc2hfaW5wdXRcIikub24gXCJkcC5zaG93XCIsICgpIC0+XG5cdFx0XHRcdFx0JChcIi5tb2RhbC1ib2R5XCIpLnNjcm9sbFRvcCgxMDApXG5cblx0J2NsaWNrIC5idG4tY2FuY2VsQnV0JyA6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cblx0XHR0ZW1wbGF0ZS5pc19lZGl0aW5nLnNldCghdGVtcGxhdGUuaXNfZWRpdGluZy5nZXQoKSk7XG5cblx0J2NsaWNrIC5idG4tc2F2ZUJ1dCcgOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdCMgdGVtcGxhdGUuaXNfZWRpdGluZy5zZXQoIXRlbXBsYXRlLmlzX2VkaXRpbmcuZ2V0KCkpXG5cblx0XHRpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKVxuXHRcdGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmVcblx0XHR0cmFjZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQudHJhY2Vcblx0XHRvcGluaW9uX2lucHV0ID0gJCgnI29waW5pb25faW5wdXQnKS52YWwoKVxuXHRcdGZpbmlzaF9pbnB1dCA9IEF1dG9Gb3JtLmdldEZpZWxkVmFsdWUoXCJmaW5pc2hfZGF0ZVwiLCBcImZpbmlzaERhdGVBdXRvRm9ybVwiKVxuXG5cdFx0JChcImJvZHlcIikuYWRkQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0TWV0ZW9yLmNhbGwgJ2NoYW5nZV9hcHByb3ZlX2luZm8nLCBpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQsIG9waW5pb25faW5wdXQsIGZpbmlzaF9pbnB1dCwgKGVyciwgcmVzdWx0KS0+XG5cdFx0XHQkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIilcblx0XHRcdGlmIGVyclxuXHRcdFx0XHR0b2FzdHIuZXJyb3IgVEFQaTE4bi5fXyhlcnIucmVhc29uKVxuXHRcdFx0aWYgcmVzdWx0ID09IHRydWVcblx0XHRcdFx0dG9hc3RyLnN1Y2Nlc3ModChcImluc3RhbmNlX2FwcHJvdmVfbW9kYWxfbW9kaWZpY2F0aW9uc2F2ZVwiKSlcblx0XHRcdFx0TW9kYWwuaGlkZSBcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiXG5cdFx0XHRyZXR1cm5cblxuXHQnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWRpc3RyaWJ1dGUtYXBwcm92ZS1yZW1vdmUnOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdE1vZGFsLmFsbG93TXVsdGlwbGUgPSB0cnVlXG5cdFx0TW9kYWwuc2hvdyAnY2FuY2VsX2Rpc3RyaWJ1dGVfbW9kYWwnXG4iLCJ2YXIgbWFya2VkO1xuXG5tYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpO1xuXG5UcmFjZXNUZW1wbGF0ZS5oZWxwZXJzID0ge1xuICB0cmFjZVNob3dTaWduSW1hZ2U6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0ud29ya2Zsb3cudHJhY2VTaG93U2lnbkltYWdlICE9PSBmYWxzZSAmJiBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0ud29ya2Zsb3cudHJhY2VTaG93U2lnbkltYWdlICE9PSAnZmFsc2UnO1xuICB9LFxuICBlcXVhbHM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfSxcbiAgZW1wdHk6IGZ1bmN0aW9uKGEpIHtcbiAgICBpZiAoYSkge1xuICAgICAgcmV0dXJuIGEudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoIDwgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LFxuICB1bmVtcHR5OiBmdW5jdGlvbihhKSB7XG4gICAgaWYgKGEpIHtcbiAgICAgIHJldHVybiBhLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGFwcGVuZDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBhICsgYjtcbiAgfSxcbiAgZGF0ZUZvcm1hdDogZnVuY3Rpb24oZGF0ZSkge1xuICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkgJiYgKGRhdGUgIT0gbnVsbCA/IGRhdGUuZ2V0RnVsbFllYXIoKSA6IHZvaWQgMCkgPT09IChuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgcmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoJ01NLUREIEhIOm1tJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgfVxuICB9LFxuICBnZXRTdGVwTmFtZTogZnVuY3Rpb24oc3RlcElkKSB7XG4gICAgdmFyIHN0ZXA7XG4gICAgc3RlcCA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZVN0ZXAoc3RlcElkKTtcbiAgICBpZiAoc3RlcCkge1xuICAgICAgcmV0dXJuIHN0ZXAubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHNob3dEZWxldGVCdXR0b246IGZ1bmN0aW9uKGFwcHJvdmVkKSB7XG4gICAgaWYgKGFwcHJvdmVkICYmIGFwcHJvdmVkLnR5cGUgPT09ICdjYycgJiYgYXBwcm92ZWQuZnJvbV91c2VyID09PSBNZXRlb3IudXNlcklkKCkgJiYgYXBwcm92ZWQuaXNfZmluaXNoZWQgIT09IHRydWUgJiYgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNTaG93TW9kaWZpY2F0aW9uQnV0dG9uOiBmdW5jdGlvbihhcHByb3ZlZCkge1xuICAgIHZhciBhcHByb3ZlX2FkbWlucywgaXNTaG93LCByZWYsIHJlZjEsIHJlZjI7XG4gICAgYXBwcm92ZV9hZG1pbnMgPSAocmVmID0gTWV0ZW9yLnNldHRpbmdzKSAhPSBudWxsID8gKHJlZjEgPSByZWZbXCJwdWJsaWNcIl0pICE9IG51bGwgPyAocmVmMiA9IHJlZjEud29ya2Zsb3cpICE9IG51bGwgPyByZWYyLmFwcHJvdmVfYWRtaW5zIDogdm9pZCAwIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIGlmIChhcHByb3ZlX2FkbWlucyAhPSBudWxsID8gYXBwcm92ZV9hZG1pbnMubGVuZ3RoIDogdm9pZCAwKSB7XG4gICAgICBpc1Nob3cgPSBhcHByb3ZlX2FkbWlucyAhPSBudWxsID8gYXBwcm92ZV9hZG1pbnMuY29udGFpbnMoTWV0ZW9yLnVzZXJJZCgpKSA6IHZvaWQgMDtcbiAgICB9XG4gICAgaWYgKCFpc1Nob3cpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcHJvdmVkLmhhbmRsZXIgPT09IE1ldGVvci51c2VySWQoKTtcbiAgfSxcbiAgaXNFZGl0aW5nOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVmO1xuICAgIHJldHVybiAocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKS5pc19lZGl0aW5nKSAhPSBudWxsID8gcmVmLmdldCgpIDogdm9pZCAwO1xuICB9LFxuICBpc1Nob3dEZXNjcmlwdGlvbjogZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICB2YXIgcmVmO1xuICAgIGlmIChUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLmlzU2hvd01vZGlmaWNhdGlvbkJ1dHRvbihhcHByb3ZlZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gKChyZWYgPSBhcHByb3ZlZC5kZXNjcmlwdGlvbikgIT0gbnVsbCA/IHJlZi50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggOiB2b2lkIDApID4gMDtcbiAgfSxcbiAgaXNDQzogZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICBpZiAoYXBwcm92ZWQgJiYgYXBwcm92ZWQudHlwZSA9PT0gJ2NjJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgZ2V0QXBwcm92ZVN0YXR1c0ljb246IGZ1bmN0aW9uKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkge1xuICAgIHZhciBhcHByb3ZlU3RhdHVzSWNvbjtcbiAgICBpZiAoYXV0b1N1Ym1pdHRlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICdpb24gaW9uLWFuZHJvaWQtYWxhcm0tY2xvY2snO1xuICAgIH1cbiAgICBhcHByb3ZlU3RhdHVzSWNvbiA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKGFwcHJvdmVKdWRnZSkge1xuICAgICAgY2FzZSAnYXBwcm92ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWNoZWNrbWFyay1yb3VuZCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVqZWN0ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWNsb3NlLXJvdW5kJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXJtaW5hdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c0ljb24gPSAnZmEgZmEtYmFuJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWFzc2lnbmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c0ljb24gPSAnaW9uIGlvbi1hbmRyb2lkLWNvbnRhY3QnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlbG9jYXRlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tYXJyb3ctc2hyaW5rJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXRyaWV2ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdmYSBmYS11bmRvJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGFwcHJvdmVTdGF0dXNJY29uO1xuICB9LFxuICBnZXRBcHByb3ZlU3RhdHVzVGV4dDogZnVuY3Rpb24oYXBwcm92ZUp1ZGdlLCBhdXRvU3VibWl0dGVkKSB7XG4gICAgdmFyIGFwcHJvdmVTdGF0dXNUZXh0LCBsb2NhbGU7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICAgIGlmIChsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3poLWNuJykge1xuICAgICAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIik7XG4gICAgfVxuICAgIGlmIChhdXRvU3VibWl0dGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gVEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92ZV90aW1lb3V0X2F1dG9fc3VibWl0dGVkJywge30sIGxvY2FsZSk7XG4gICAgfVxuICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAoYXBwcm92ZUp1ZGdlKSB7XG4gICAgICBjYXNlICdhcHByb3ZlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgYXBwcm92ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWplY3RlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVqZWN0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXJtaW5hdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSB0ZXJtaW5hdGVkJywge30sIGxvY2FsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVhc3NpZ25lZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVhc3NpZ25lZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlbG9jYXRlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVsb2NhdGVkJywge30sIGxvY2FsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmV0cmlldmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZXRyaWV2ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXR1cm5lZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmV0dXJuZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWFkZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHJlYWRlZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcm92ZVN0YXR1c1RleHQ7XG4gIH0sXG4gIGdldEFwcHJvdmVKdWRnZUNsYXNzOiBmdW5jdGlvbihhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIHtcbiAgICBpZiAoYXV0b1N1Ym1pdHRlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICdhdXRvU3VibWl0dGVkJztcbiAgICB9XG4gICAgcmV0dXJuIGFwcHJvdmVKdWRnZTtcbiAgfSxcbiAgX3Q6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBUQVBpMThuLl9fKGtleSk7XG4gIH0sXG4gIG15QXBwcm92ZURlc2NyaXB0aW9uOiBmdW5jdGlvbihhcHByb3ZlSWQpIHtcbiAgICB2YXIgbXlBcHByb3ZlLCByZWYsIHJlZjE7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgIG15QXBwcm92ZSA9IChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpKSAhPSBudWxsID8gKHJlZjEgPSByZWYubXlBcHByb3ZlKSAhPSBudWxsID8gcmVmMS5nZXQoKSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgICAgaWYgKG15QXBwcm92ZSAmJiBteUFwcHJvdmUuaWQgPT09IGFwcHJvdmVJZCkge1xuICAgICAgICAgIGlmICghU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gKG15QXBwcm92ZSAhPSBudWxsID8gbXlBcHByb3ZlLmRlc2NyaXB0aW9uIDogdm9pZCAwKSB8fCBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc0ZvcndhcmQ6IGZ1bmN0aW9uKGFwcHJvdmVkKSB7XG4gICAgaWYgKGFwcHJvdmVkICYmIGFwcHJvdmVkLnR5cGUgPT09ICdmb3J3YXJkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgc2hvd0ZvcndhcmREZWxldGVCdXR0b246IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICBpZiAoZGIuaW5zdGFuY2VzLmZpbmQoYXBwcm92ZS5mb3J3YXJkX2luc3RhbmNlKS5jb3VudCgpID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcHByb3ZlICYmIGFwcHJvdmUudHlwZSA9PT0gJ2ZvcndhcmQnICYmIGFwcHJvdmUuZnJvbV91c2VyID09PSBNZXRlb3IudXNlcklkKCkgJiYgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSAmJiBhcHByb3ZlLmp1ZGdlICE9PSAndGVybWluYXRlZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIG1hcmtEb3duVG9IdG1sOiBmdW5jdGlvbihtYXJrRG93blN0cmluZykge1xuICAgIGlmIChtYXJrRG93blN0cmluZykge1xuICAgICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgICBtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKG1hcmtEb3duU3RyaW5nKSk7XG4gICAgfVxuICB9LFxuICBpc0Rpc3RyaWJ1dGU6IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICBpZiAoYXBwcm92ZSAmJiBhcHByb3ZlLnR5cGUgPT09ICdkaXN0cmlidXRlJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgc2hvd0Rpc3RyaWJ1dGVEZWxldGVCdXR0b246IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICB2YXIgaW5zO1xuICAgIGlmIChkYi5pbnN0YW5jZXMuZmluZChhcHByb3ZlLmZvcndhcmRfaW5zdGFuY2UpLmNvdW50KCkgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFwcHJvdmUgJiYgYXBwcm92ZS50eXBlID09PSAnZGlzdHJpYnV0ZScgJiYgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSAmJiBhcHByb3ZlLmp1ZGdlICE9PSAndGVybWluYXRlZCcpIHtcbiAgICAgIGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBhcHByb3ZlLmluc3RhbmNlXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIGZsb3c6IDEsXG4gICAgICAgICAgc3BhY2U6IDFcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoaW5zICYmIGlucy5mbG93ICYmIGlucy5zcGFjZSkge1xuICAgICAgICBpZiAoV29ya2Zsb3dNYW5hZ2VyLmhhc0Zsb3dBZG1pblBlcm1pc3Npb24oaW5zLmZsb3csIGlucy5zcGFjZSwgTWV0ZW9yLnVzZXJJZCgpKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYXBwcm92ZS5mcm9tX3VzZXIgPT09IE1ldGVvci51c2VySWQoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBmaW5pc2hEYXRlU2NoZW1hOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoU3RlZWRvcy5pc0FuZHJvaWRPcklPUygpKSB7XG4gICAgICByZXR1cm4gbmV3IFNpbXBsZVNjaGVtYSh7XG4gICAgICAgIGZpbmlzaF9kYXRlOiB7XG4gICAgICAgICAgYXV0b2Zvcm06IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgIHR5cGU6IERhdGVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKHtcbiAgICAgICAgZmluaXNoX2RhdGU6IHtcbiAgICAgICAgICBhdXRvZm9ybToge1xuICAgICAgICAgICAgdHlwZTogXCJib290c3RyYXAtZGF0ZXRpbWVwaWNrZXJcIixcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgICAgICAgZGF0ZVRpbWVQaWNrZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgIGZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCIsXG4gICAgICAgICAgICAgIGlnbm9yZVJlYWRvbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBsb2NhbGU6IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIiksXG4gICAgICAgICAgICAgIHdpZGdldFBvc2l0aW9uaW5nOiB7XG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgICAgdHlwZTogRGF0ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGZpbmlzaERhdGVWYWx1ZXM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaW5pc2hfZGF0ZTogdGhpcy5maW5pc2hfZGF0ZVxuICAgIH07XG4gIH0sXG5cbiAgLypcbiAgICAgXHTmraTlh73mlbDnlKjkuo7mjqfliLbmmK/lkKbmmL7npLp0cmFjZXMgdmlld1xuICAgICBcdHRydWU6IOaYvuekunRyYWNlcyB2aWV3LOetvuaguOWOhueoi+aMiemSrueCueWHu+WQjuaYr+ebtOaOpeWumuS9jeWIsHRyYWNlcyB2aWV3XG4gICAgIFx0ZmFsc2U6IOS4jeaYvuekunRyYWNlcyB2aWV377yM562+5qC45Y6G56iL5oyJ6ZKu54K55Ye75ZCOLOS7pU1vZGFsIOaWueW8j+aYvuekunRyYWNlcyB2aWV3XG4gICAqL1xuICBzaG93VHJhY2VzVmlldzogZnVuY3Rpb24oZm9ybSwgZm9ybV92ZXJzaW9uKSB7XG4gICAgdmFyIHJlZiwgc2hvd19tb2RhbF90cmFjZXNfbGlzdDtcbiAgICBzaG93X21vZGFsX3RyYWNlc19saXN0ID0gKChyZWYgPSBkYi5zcGFjZV9zZXR0aW5ncy5maW5kT25lKHtcbiAgICAgIHNwYWNlOiBTZXNzaW9uLmdldChcInNwYWNlSWRcIiksXG4gICAgICBrZXk6IFwic2hvd19tb2RhbF90cmFjZXNfbGlzdFwiXG4gICAgfSkpICE9IG51bGwgPyByZWYudmFsdWVzIDogdm9pZCAwKSB8fCBmYWxzZTtcbiAgICByZXR1cm4gIXNob3dfbW9kYWxfdHJhY2VzX2xpc3Q7XG4gIH0sXG4gIGdldEluc3RhbmNlU3RhdGVUZXh0OiBmdW5jdGlvbihpbnN0YW5jZV9pZCkge1xuICAgIHZhciBpbnMsIGxvY2FsZSwgdGV4dDtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlO1xuICAgICAgaWYgKGxvY2FsZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnemgtY24nKSB7XG4gICAgICAgIGxvY2FsZSA9IFwiemgtQ05cIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxlID0gU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKTtcbiAgICB9XG4gICAgaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpbnN0YW5jZV9pZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBzdGF0ZTogMSxcbiAgICAgICAgaXNfcmVhZDogMVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghaW5zKSB7XG4gICAgICByZXR1cm4gVEFQaTE4bi5fXygnaW5zdGFuY2VfZGVsZXRlZCcsIHt9LCBsb2NhbGUpO1xuICAgIH1cbiAgICB0ZXh0ID0gJyc7XG4gICAgaWYgKGlucy5zdGF0ZSA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgIHRleHQgPSBUQVBpMThuLl9fKCdjb21wbGV0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICB9IGVsc2UgaWYgKGlucy5zdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICB0ZXh0ID0gVEFQaTE4bi5fXygncGVuZGluZycsIHt9LCBsb2NhbGUpO1xuICAgIH0gZWxzZSBpZiAoaW5zLnN0YXRlID09PSAnZHJhZnQnKSB7XG4gICAgICBpZiAoaW5zLmlzX3JlYWQpIHtcbiAgICAgICAgdGV4dCA9IFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfcmVhZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfbm90X3lldF9oYW5kbGVkJywge30sIGxvY2FsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xuICB9LFxuICBnZXRJbnN0YW5jZVN0YXRlQ29sb3I6IGZ1bmN0aW9uKGluc3RhbmNlX2lkKSB7XG4gICAgdmFyIGNsYSwgaW5zO1xuICAgIGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgIF9pZDogaW5zdGFuY2VfaWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgc3RhdGU6IDEsXG4gICAgICAgIGlzX3JlYWQ6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWlucykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNsYSA9ICcnO1xuICAgIGlmIChpbnMuc3RhdGUgPT09ICdkcmFmdCcpIHtcbiAgICAgIGlmIChpbnMuaXNfcmVhZCkge1xuICAgICAgICBjbGEgPSAnYmx1ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGEgPSAncmVkJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsYTtcbiAgfSxcbiAgZmlyc3RUcmFjZTogZnVuY3Rpb24oaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXggPT09IDA7XG4gIH0sXG4gIGxhc3RfZGlzdHJpYnV0ZV9mcm9tOiBmdW5jdGlvbihpbnN0YW5jZV9pZCkge1xuICAgIHZhciBkaXNfaW5mbywgaW5zLCB1c2VyO1xuICAgIGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgIF9pZDogaW5zdGFuY2VfaWQsXG4gICAgICBkaXN0cmlidXRlX2Zyb21faW5zdGFuY2U6IHtcbiAgICAgICAgJGV4aXN0czogdHJ1ZVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBjcmVhdGVkOiAxLFxuICAgICAgICBjcmVhdGVkX2J5OiAxXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGlucykge1xuICAgICAgZGlzX2luZm8gPSB7fTtcbiAgICAgIHVzZXIgPSB7fTtcbiAgICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgICAgdXNlciA9IFVVZmxvd19hcGkuZ2V0TmFtZUZvclVzZXIoaW5zLmNyZWF0ZWRfYnkpO1xuICAgICAgfSBlbHNlIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgdXNlciA9IGRiLnVzZXJzLmZpbmRPbmUoe1xuICAgICAgICAgIF9pZDogaW5zLmNyZWF0ZWRfYnlcbiAgICAgICAgfSwge1xuICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgbmFtZTogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodXNlci5uYW1lKSB7XG4gICAgICAgIGRpc19pbmZvLmZyb21fdXNlciA9IHVzZXIuX2lkO1xuICAgICAgICBkaXNfaW5mby5mcm9tX3VzZXJfbmFtZSA9IHVzZXIubmFtZTtcbiAgICAgICAgZGlzX2luZm8uY3JlYXRlZCA9IGlucy5jcmVhdGVkO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzRW1wdHkoZGlzX2luZm8pKSB7XG4gICAgICAgIHJldHVybiBkaXNfaW5mbztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGlzQ0NPckRpc3RyaWJ1dGVPckZvcndhcmRUZXJtaW5hdGVkOiBmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgaWYgKChhcHByb3ZlLnR5cGUgPT09ICdjYycgfHwgYXBwcm92ZS50eXBlID09PSAnZGlzdHJpYnV0ZScgfHwgYXBwcm92ZS50eXBlID09PSAnZm9yd2FyZCcpICYmIGFwcHJvdmUuanVkZ2UgPT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAganVkZ2VUZXJtaW5hdGVkOiBmdW5jdGlvbihqdWRnZSkge1xuICAgIHJldHVybiBqdWRnZSA9PT0gJ3Rlcm1pbmF0ZWQnO1xuICB9LFxuICBpbnN0YW5jZUV4aXN0czogZnVuY3Rpb24oaW5zdGFuY2VfaWQpIHtcbiAgICByZXR1cm4gISFkYi5pbnN0YW5jZXMuZmluZChpbnN0YW5jZV9pZCkuY291bnQoKTtcbiAgfSxcbiAgYWdlbnREZXNjcmlwdGlvbjogZnVuY3Rpb24odXNlck5hbWUpIHtcbiAgICB2YXIgbG9jYWxlO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgICBpZiAobG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICd6aC1jbicpIHtcbiAgICAgICAgbG9jYWxlID0gXCJ6aC1DTlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpO1xuICAgIH1cbiAgICByZXR1cm4gVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge1xuICAgICAgdXNlck5hbWU6IHVzZXJOYW1lXG4gICAgfSwgbG9jYWxlKTtcbiAgfSxcbiAgdHJhY2VOYW1lOiBmdW5jdGlvbihpbnN0YW5jZV9pZCwgdHJhY2VJZCkge1xuICAgIHZhciByZWYsIHJlZjE7XG4gICAgcmV0dXJuIChyZWYgPSBfLmZpbmQoKHJlZjEgPSBkYi5pbnN0YW5jZXMuZmluZE9uZShpbnN0YW5jZV9pZCwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIHRyYWNlczogMVxuICAgICAgfVxuICAgIH0pKSAhPSBudWxsID8gcmVmMS50cmFjZXMgOiB2b2lkIDAsIGZ1bmN0aW9uKHRyYWNlKSB7XG4gICAgICByZXR1cm4gdHJhY2UuX2lkID09PSB0cmFjZUlkO1xuICAgIH0pKSAhPSBudWxsID8gcmVmLm5hbWUgOiB2b2lkIDA7XG4gIH0sXG4gIG9iamVjdFVybDogZnVuY3Rpb24ob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKSB7XG4gICAgcmV0dXJuIENyZWF0b3IuZ2V0T2JqZWN0VXJsKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCk7XG4gIH0sXG4gIGhhbmRsZXJEb2M6IGZ1bmN0aW9uKGhhbmRsZXJJZCkge1xuICAgIHZhciByZWYsIHJlZjEsIHVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm87XG4gICAgdXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyA9IChyZWYgPSBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0pICE9IG51bGwgPyAocmVmMSA9IHJlZi53b3JrZmxvdykgIT0gbnVsbCA/IHJlZjEudXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICBpZiAoIXVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8gfHwgIXVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8uaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICByZXR1cm4gVVVmbG93X2FwaS5nZXRDb250YWN0SW5mb0ZvclVzZXIoaGFuZGxlcklkLCBTZXNzaW9uLmdldCgnc3BhY2VJZCcpKTtcbiAgICB9IGVsc2UgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgcmV0dXJuIGRiLnVzZXJzLmZpbmRPbmUoaGFuZGxlcklkKTtcbiAgICB9XG4gIH1cbn07XG5cbmlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgVHJhY2VzVGVtcGxhdGUuaGVscGVycy5kYXRlRm9ybWF0ID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHZhciB1dGNPZmZzZXQ7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHV0Y09mZnNldCA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS51dGNPZmZzZXQ7XG4gICAgICByZXR1cm4gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmZvcm1hdERhdGUoZGF0ZSwgdXRjT2Zmc2V0KTtcbiAgICB9XG4gIH07XG4gIFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMuX3QgPSBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgbG9jYWxlO1xuICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5LCB7fSwgbG9jYWxlKTtcbiAgfTtcbiAgVHJhY2VzVGVtcGxhdGUuaGVscGVycy5zaG93RGVsZXRlQnV0dG9uID0gZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cblRyYWNlc1RlbXBsYXRlLmV2ZW50cyA9IHtcbiAgJ2NsaWNrIC5jYy1hcHByb3ZlLXJlbW92ZSc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHZhciBhcHByb3ZlSWQsIGluc3RhbmNlSWQ7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jYWxsaW5nICogMSAhPT0gMSkge1xuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNhbGxpbmcgPSAxO1xuICAgICAgJChcImlcIiwgZXZlbnQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJmYS1zcGluXCIpO1xuICAgICAgaW5zdGFuY2VJZCA9IFNlc3Npb24uZ2V0KCdpbnN0YW5jZUlkJyk7XG4gICAgICBhcHByb3ZlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC5hcHByb3ZlO1xuICAgICAgJChcImJvZHlcIikuYWRkQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgICAgTWV0ZW9yLmNhbGwoJ2NjX3JlbW92ZScsIGluc3RhbmNlSWQsIGFwcHJvdmVJZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdG9hc3RyLmVycm9yKGVycik7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNhbGxpbmcgPSAwO1xuICAgICAgICAgICQoXCJpXCIsIGV2ZW50LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKFwiZmEtc3BpblwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgICAgdG9hc3RyLnN1Y2Nlc3MoVEFQaTE4bi5fXyhcInJlbW92ZV9jY19hcHByb3ZlXCIpKTtcbiAgICAgICAgICBpZiAoJChcIi5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWxcIikubGVuZ3RoKSB7XG4gICAgICAgICAgICBNb2RhbC5oaWRlKFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWNjLWFwcHJvdmUtcmVtb3ZlJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGFwcHJvdmVJZCwgaW5zdGFuY2VJZDtcbiAgICBpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKTtcbiAgICBhcHByb3ZlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC5hcHByb3ZlO1xuICAgIE1vZGFsLmFsbG93TXVsdGlwbGUgPSB0cnVlO1xuICAgIHJldHVybiBNb2RhbC5zaG93KCdjYW5jZWxfY2NfbW9kYWwnKTtcbiAgfSxcbiAgJ2NsaWNrIC5hcHByb3ZlLWl0ZW0sLmFwcHJvdmUtZGVzY3JpcHRpb24nOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICBpZiAoISQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYS5idG4tbGlua1wiKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBNb2RhbC5zaG93KFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCIsIHRoaXMpO1xuICAgIH1cbiAgfSxcbiAgJ3RhcGhvbGQgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIE1vZGFsLnNob3coXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIiwgdGhpcyk7XG4gICAgfVxuICB9LFxuICAnY2xpY2sgLmFwcHJvdmUtaXRlbSBhLmJ0bi1saW5rLC5hcHByb3ZlLWRlc2NyaXB0aW9uIGEuYnRuLWxpbmssLmFwcHJvdmUtaXRlbS1kaXN0cmlidXRlIGEuYnRuLWxpbmsnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICB2YXIgcmVmLCB1c2VySWQ7XG4gICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgdXNlcklkID0gKHJlZiA9IGV2ZW50LnRhcmdldC5kYXRhc2V0KSAhPSBudWxsID8gcmVmLnRhcmdldF91c2VyX2lkIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIENyZWF0b3Iub3BlblNhZmVPYmplY3RVcmwoJ3VzZXJzJywgdXNlcklkKTtcbiAgICB9XG4gIH0sXG4gICd0YXBlbmQgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgJ2NsaWNrIC5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWwgLmJ0bi1mb3J3YXJkLWFwcHJvdmUtcmVtb3ZlJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGFwcHJvdmVJZCwgaW5zdGFuY2VJZCwgdHJhY2VJZDtcbiAgICBpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKTtcbiAgICBhcHByb3ZlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC5hcHByb3ZlO1xuICAgIHRyYWNlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC50cmFjZTtcbiAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgTWV0ZW9yLmNhbGwoJ2ZvcndhcmRfcmVtb3ZlJywgaW5zdGFuY2VJZCwgdHJhY2VJZCwgYXBwcm92ZUlkLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0b2FzdHIuZXJyb3IoVEFQaTE4bi5fXyhlcnIucmVhc29uKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIHRvYXN0ci5zdWNjZXNzKFRBUGkxOG4uX18oXCJpbnN0YW5jZV9hcHByb3ZlX2ZvcndhcmRfcmVtb3ZlX3N1Y2Nlc3NcIikpO1xuICAgICAgICBNb2RhbC5oaWRlKFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWZvcndhcmQtaW5zdGFuY2UtbG9vayc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHZhciBmb3J3YXJkX2luc3RhbmNlLCBmb3J3YXJkX3NwYWNlO1xuICAgIGZvcndhcmRfc3BhY2UgPSBldmVudC50YXJnZXQuZGF0YXNldC5mb3J3YXJkc3BhY2U7XG4gICAgZm9yd2FyZF9pbnN0YW5jZSA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmZvcndhcmRpbnN0YW5jZTtcbiAgICByZXR1cm4gU3RlZWRvcy5vcGVuV2luZG93KFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIiArIGZvcndhcmRfc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgZm9yd2FyZF9pbnN0YW5jZSkpO1xuICB9LFxuICAnY2xpY2sgLmJ0bi1tb2RpZmljYXRpb24nOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICB0ZW1wbGF0ZS5pc19lZGl0aW5nLnNldCghdGVtcGxhdGUuaXNfZWRpdGluZy5nZXQoKSk7XG4gICAgaWYgKCFTdGVlZG9zLmlzQW5kcm9pZE9ySU9TKCkpIHtcbiAgICAgIHJldHVybiBUcmFja2VyLmFmdGVyRmx1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAkKFwiI2luc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbCAjZmluaXNoX2lucHV0XCIpLm9uKFwiZHAuc2hvd1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChcIi5tb2RhbC1ib2R5XCIpLnNjcm9sbFRvcCgxMDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgJ2NsaWNrIC5idG4tY2FuY2VsQnV0JzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLmlzX2VkaXRpbmcuc2V0KCF0ZW1wbGF0ZS5pc19lZGl0aW5nLmdldCgpKTtcbiAgfSxcbiAgJ2NsaWNrIC5idG4tc2F2ZUJ1dCc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHZhciBhcHByb3ZlSWQsIGZpbmlzaF9pbnB1dCwgaW5zdGFuY2VJZCwgb3Bpbmlvbl9pbnB1dCwgdHJhY2VJZDtcbiAgICBpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKTtcbiAgICBhcHByb3ZlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC5hcHByb3ZlO1xuICAgIHRyYWNlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC50cmFjZTtcbiAgICBvcGluaW9uX2lucHV0ID0gJCgnI29waW5pb25faW5wdXQnKS52YWwoKTtcbiAgICBmaW5pc2hfaW5wdXQgPSBBdXRvRm9ybS5nZXRGaWVsZFZhbHVlKFwiZmluaXNoX2RhdGVcIiwgXCJmaW5pc2hEYXRlQXV0b0Zvcm1cIik7XG4gICAgJChcImJvZHlcIikuYWRkQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgIHJldHVybiBNZXRlb3IuY2FsbCgnY2hhbmdlX2FwcHJvdmVfaW5mbycsIGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgb3Bpbmlvbl9pbnB1dCwgZmluaXNoX2lucHV0LCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0b2FzdHIuZXJyb3IoVEFQaTE4bi5fXyhlcnIucmVhc29uKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIHRvYXN0ci5zdWNjZXNzKHQoXCJpbnN0YW5jZV9hcHByb3ZlX21vZGFsX21vZGlmaWNhdGlvbnNhdmVcIikpO1xuICAgICAgICBNb2RhbC5oaWRlKFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWRpc3RyaWJ1dGUtYXBwcm92ZS1yZW1vdmUnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICBNb2RhbC5hbGxvd011bHRpcGxlID0gdHJ1ZTtcbiAgICByZXR1cm4gTW9kYWwuc2hvdygnY2FuY2VsX2Rpc3RyaWJ1dGVfbW9kYWwnKTtcbiAgfVxufTtcbiIsIlJlbGF0ZWRJbnN0YW5jZXMuaGVscGVycyA9XG5cdHNob3dSZWxhdGVkSW5zdGFjZXM6IC0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRlbHNlXG5cdFx0XHRpbnMgPSB0aGlzLmluc3RhbmNlXG5cdFx0aWYgaW5zPy5yZWxhdGVkX2luc3RhbmNlcyAmJiBfLmlzQXJyYXkoaW5zPy5yZWxhdGVkX2luc3RhbmNlcylcblx0XHRcdGlmIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IHskaW46IGlucy5yZWxhdGVkX2luc3RhbmNlc319LCB7ZmllbGRzOiB7c3BhY2U6IDEsIG5hbWU6IDF9fSkuY291bnQoKSA+IDBcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdHJlbGF0ZWRfaW5zdGFjZXM6IC0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRlbHNlXG5cdFx0XHRpbnMgPSB0aGlzLmluc3RhbmNlXG5cdFx0aWYgaW5zPy5yZWxhdGVkX2luc3RhbmNlcyAmJiBfLmlzQXJyYXkoaW5zPy5yZWxhdGVkX2luc3RhbmNlcylcblx0XHRcdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiB7JGluOiBpbnMucmVsYXRlZF9pbnN0YW5jZXN9fSwge2ZpZWxkczoge3NwYWNlOiAxLCBuYW1lOiAxfX0pLmZldGNoKClcblxuXHRyZWxhdGVkX2luc3RhY2VfdXJsOiAoaW5zKSAtPlxuXG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50ICYmIChTdGVlZG9zLmlzTW9iaWxlKCkgfHwgU3RlZWRvcy5pc0NvcmRvdmEoKSlcblx0XHRcdHJldHVybiAnJ1xuXG5cdFx0YWJzb2x1dGUgPSBmYWxzZVxuXG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRhYnNvbHV0ZSA9IHRoaXMuYWJzb2x1dGVcblx0XHRpZiBhYnNvbHV0ZVxuXHRcdFx0cmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiK2lucy5zcGFjZStcIi92aWV3L3JlYWRvbmx5L1wiICsgaW5zLl9pZCArICc/aGlkZV90cmFjZXM9MCcpXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIitpbnMuc3BhY2UrXCIvdmlldy9yZWFkb25seS9cIiArIGlucy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKVxuXG5cdF90OiAoa2V5KS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXkpXG5cdFx0ZWxzZVxuXHRcdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5LCB7fSwgbG9jYWxlKVxuXG5cdHNob3dfZGVsZXRlOiAoKS0+XG5cdFx0aWYgIU1ldGVvci5pc0NsaWVudFxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gXCJkcmFmdFwiIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0Y3VycmVudF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKClcblx0XHRcdFx0aWYgY3VycmVudF9zdGVwXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9tYWluX2F0dGFjaCB8fCBjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9PSB0cnVlIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlIiwiUmVsYXRlZEluc3RhbmNlcy5oZWxwZXJzID0ge1xuICBzaG93UmVsYXRlZEluc3RhY2VzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnMgPSB0aGlzLmluc3RhbmNlO1xuICAgIH1cbiAgICBpZiAoKGlucyAhPSBudWxsID8gaW5zLnJlbGF0ZWRfaW5zdGFuY2VzIDogdm9pZCAwKSAmJiBfLmlzQXJyYXkoaW5zICE9IG51bGwgPyBpbnMucmVsYXRlZF9pbnN0YW5jZXMgOiB2b2lkIDApKSB7XG4gICAgICBpZiAoZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgICAgICBfaWQ6IHtcbiAgICAgICAgICAkaW46IGlucy5yZWxhdGVkX2luc3RhbmNlc1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIHNwYWNlOiAxLFxuICAgICAgICAgIG5hbWU6IDFcbiAgICAgICAgfVxuICAgICAgfSkuY291bnQoKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIHJlbGF0ZWRfaW5zdGFjZXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnM7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucyA9IHRoaXMuaW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoaW5zICE9IG51bGwgPyBpbnMucmVsYXRlZF9pbnN0YW5jZXMgOiB2b2lkIDApICYmIF8uaXNBcnJheShpbnMgIT0gbnVsbCA/IGlucy5yZWxhdGVkX2luc3RhbmNlcyA6IHZvaWQgMCkpIHtcbiAgICAgIHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogaW5zLnJlbGF0ZWRfaW5zdGFuY2VzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgbmFtZTogMVxuICAgICAgICB9XG4gICAgICB9KS5mZXRjaCgpO1xuICAgIH1cbiAgfSxcbiAgcmVsYXRlZF9pbnN0YWNlX3VybDogZnVuY3Rpb24oaW5zKSB7XG4gICAgdmFyIGFic29sdXRlO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZTtcbiAgICB9XG4gICAgaWYgKGFic29sdXRlKSB7XG4gICAgICByZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIgKyBpbnMuc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgaW5zLl9pZCArICc/aGlkZV90cmFjZXM9MCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiICsgaW5zLnNwYWNlICsgXCIvdmlldy9yZWFkb25seS9cIiArIGlucy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKTtcbiAgICB9XG4gIH0sXG4gIF90OiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgbG9jYWxlO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIHJldHVybiBUQVBpMThuLl9fKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgICByZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpO1xuICAgIH1cbiAgfSxcbiAgc2hvd19kZWxldGU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjdXJyZW50X3N0ZXA7XG4gICAgaWYgKCFNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSBcImRyYWZ0XCIgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgY3VycmVudF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG4gICAgICAgIGlmIChjdXJyZW50X3N0ZXApIHtcbiAgICAgICAgICBpZiAoY3VycmVudF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09PSB0cnVlIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIlJlbGF0ZWRSZWNvcmRzLmhlbHBlcnMgPVxuXHRzaG93UmVsYXRlZFJlY29yZHM6ICgpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGVsc2Vcblx0XHRcdGlucyA9IHRoaXMuaW5zdGFuY2Vcblx0XHRpZiAhaW5zXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRyZXR1cm4gIV8uaXNFbXB0eShpbnMucmVjb3JkX2lkcylcblx0cmVsYXRlZFJlY29yZFVybDogKCktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudCAmJiAoU3RlZWRvcy5pc01vYmlsZSgpIHx8IFN0ZWVkb3MuaXNDb3Jkb3ZhKCkpXG5cdFx0XHRyZXR1cm4gJydcblxuXHRcdGFic29sdXRlID0gZmFsc2Vcblx0XHRcblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdGlucyA9IHRoaXMuaW5zdGFuY2Vcblx0XHRcdGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZVxuXHRcdGVsc2Vcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcblx0XHRvYmpjZXROYW1lID0gaW5zLnJlY29yZF9pZHNbMF0ub1xuXHRcdGlkID0gaW5zLnJlY29yZF9pZHNbMF0uaWRzWzBdXG5cblx0XHRpZiBhYnNvbHV0ZVxuXHRcdFx0cmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcImFwcC8tLyN7b2JqY2V0TmFtZX0vdmlldy8je2lkfVwiKVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBTdGVlZG9zLmFic29sdXRlVXJsKFwiYXBwLy0vI3tvYmpjZXROYW1lfS92aWV3LyN7aWR9XCIpIiwiUmVsYXRlZFJlY29yZHMuaGVscGVycyA9IHtcbiAgc2hvd1JlbGF0ZWRSZWNvcmRzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnMgPSB0aGlzLmluc3RhbmNlO1xuICAgIH1cbiAgICBpZiAoIWlucykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gIV8uaXNFbXB0eShpbnMucmVjb3JkX2lkcyk7XG4gIH0sXG4gIHJlbGF0ZWRSZWNvcmRVcmw6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhYnNvbHV0ZSwgaWQsIGlucywgb2JqY2V0TmFtZTtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50ICYmIChTdGVlZG9zLmlzTW9iaWxlKCkgfHwgU3RlZWRvcy5pc0NvcmRvdmEoKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBpbnMgPSB0aGlzLmluc3RhbmNlO1xuICAgICAgYWJzb2x1dGUgPSB0aGlzLmFic29sdXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9XG4gICAgb2JqY2V0TmFtZSA9IGlucy5yZWNvcmRfaWRzWzBdLm87XG4gICAgaWQgPSBpbnMucmVjb3JkX2lkc1swXS5pZHNbMF07XG4gICAgaWYgKGFic29sdXRlKSB7XG4gICAgICByZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwiYXBwLy0vXCIgKyBvYmpjZXROYW1lICsgXCIvdmlldy9cIiArIGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJhcHAvLS9cIiArIG9iamNldE5hbWUgKyBcIi92aWV3L1wiICsgaWQpO1xuICAgIH1cbiAgfVxufTtcbiIsIi8qXG4gKiBAQXV0aG9yOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBARGF0ZTogMjAyMS0wNS0yNCAxMjozMjo1NlxuICogQExhc3RFZGl0b3JzOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIyLTEyLTI0IDE1OjI5OjIyXG4gKiBARGVzY3JpcHRpb246IFxuICovXG4vLyBKc29uUm91dGVzLmFkZChcInBvc3RcIiwgXCIvYXBpL3dvcmtmbG93L2dldFNwYWNlVXNlcnNcIiwgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4vLyAgIHZhclxuLy8gICAgIHVzZXJJZHMgPSByZXEuYm9keS51c2VySWRzLFxuLy8gICAgIHNwYWNlSWQgPSByZXEucXVlcnkuc3BhY2VJZCxcbi8vICAgICBzcGFjZVVzZXJzID0gW11cbi8vICAgO1xuXG4vLyAgIGlmICghdXNlcklkcyB8fCAhc3BhY2VJZCkge1xuLy8gICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vICAgICAgIGNvZGU6IDIwMCxcbi8vICAgICAgIGRhdGE6IHtcbi8vICAgICAgICAgJ2Vycm9ycyc6ICfnvLrlsJHlj4LmlbAnXG4vLyAgICAgICB9XG4vLyAgICAgfSk7XG4vLyAgIH1cblxuLy8gICBzcGFjZVVzZXJzID0gV29ya2Zsb3dNYW5hZ2VyLmdldFVzZXJzKHNwYWNlSWQsIHVzZXJJZHMpO1xuXG4vLyAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vICAgICBjb2RlOiAyMDAsXG4vLyAgICAgZGF0YToge1xuLy8gICAgICAgJ3NwYWNlVXNlcnMnOiBzcGFjZVVzZXJzXG4vLyAgICAgfVxuLy8gICB9KTtcbi8vIH0pXG5cblxuICBcbiAgIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjQgMTU6MjM6MTRcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbi8vIEpzb25Sb3V0ZXMuYWRkKFwicG9zdFwiLCBcIi9hcGkvd29ya2Zsb3cvZ2V0Rm9ybXVsYVVzZXJPYmplY3RzXCIsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuLy8gICB2YXJcbi8vICAgICB1c2VySWRzID0gcmVxLmJvZHkudXNlcklkcyxcbi8vICAgICBzcGFjZUlkID0gcmVxLnF1ZXJ5LnNwYWNlSWQsXG4vLyAgICAgc3BhY2VVc2VycyA9IFtdXG4vLyAgIDtcblxuLy8gICBpZiAoIXVzZXJJZHMgfHwgIXNwYWNlSWQpIHtcbi8vICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4vLyAgICAgICBjb2RlOiAyMDAsXG4vLyAgICAgICBkYXRhOiB7XG4vLyAgICAgICAgICdlcnJvcnMnOiAn57y65bCR5Y+C5pWwJ1xuLy8gICAgICAgfVxuLy8gICAgIH0pO1xuLy8gICB9XG5cbi8vICAgdmFyIHVzZXJzID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFVc2VyT2JqZWN0KHNwYWNlSWQsIHVzZXJJZHMpO1xuXG4vLyAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vICAgICBjb2RlOiAyMDAsXG4vLyAgICAgZGF0YToge1xuLy8gICAgICAgJ3NwYWNlVXNlcnMnOiB1c2Vyc1xuLy8gICAgIH1cbi8vICAgfSk7XG4vLyB9KVxuXG5cbiAgXG4gICIsIi8qXG4gKiBAQXV0aG9yOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBARGF0ZTogMjAyMS0wNS0yNCAxMjozMjo1NlxuICogQExhc3RFZGl0b3JzOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIyLTEyLTI0IDE1OjM4OjU0XG4gKiBARGVzY3JpcHRpb246IFxuICovXG4vLyBKc29uUm91dGVzLmFkZChcInBvc3RcIiwgXCIvYXBpL3dvcmtmbG93L2luaXRfZm9ybXVsYV92YWx1ZXNcIiwgZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbi8vIFx0dmFyXG4vLyBcdFx0ZmllbGRzID0gcmVxLmJvZHkuZmllbGRzLFxuLy8gXHRcdGF1dG9Gb3JtRG9jID0gcmVxLmJvZHkuYXV0b0Zvcm1Eb2MsXG4vLyBcdFx0YXBwcm92ZXIgPSByZXEuYm9keS5hcHByb3Zlcixcbi8vIFx0XHRhcHBsaWNhbnQgPSByZXEuYm9keS5hcHBsaWNhbnQsXG5cbi8vIFx0XHRzcGFjZUlkID0gcmVxLnF1ZXJ5LnNwYWNlSWQsXG5cbi8vIFx0XHRzcGFjZVVzZXJzID0gW107XG5cbi8vIFx0aWYgKCFmaWVsZHMgfHwgIXNwYWNlSWQgfHwgIWF1dG9Gb3JtRG9jIHx8ICFhcHByb3ZlciB8fCAhYXBwbGljYW50KSB7XG4vLyBcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gXHRcdFx0Y29kZTogMjAwLFxuLy8gXHRcdFx0ZGF0YToge1xuLy8gXHRcdFx0XHQnZXJyb3JzJzogJ+e8uuWwkeWPguaVsCdcbi8vIFx0XHRcdH1cbi8vIFx0XHR9KTtcbi8vIFx0XHRyZXR1cm47XG4vLyBcdH1cblxuLy8gXHRmb3JtdWxhX3ZhbHVlcyA9IEZvcm1fZm9ybXVsYS5pbml0X2Zvcm11bGFfdmFsdWVzKGZpZWxkcywgYXV0b0Zvcm1Eb2MsIGFwcHJvdmVyLCBhcHBsaWNhbnQsIHNwYWNlSWQpO1xuXG4vLyBcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vIFx0XHRjb2RlOiAyMDAsXG4vLyBcdFx0ZGF0YToge1xuLy8gXHRcdFx0J2Zvcm11bGFfdmFsdWVzJzogZm9ybXVsYV92YWx1ZXNcbi8vIFx0XHR9XG4vLyBcdH0pO1xuLy8gfSlcbiIsIi8vIEpzb25Sb3V0ZXMuYWRkKCdwb3N0JywgJy9hcGkvd29ya2Zsb3cvZm9yd2FyZCcsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuLy8gXHR0cnkge1xuLy8gXHRcdHZhciBjdXJyZW50X3VzZXJfaW5mbyA9IHV1Zmxvd01hbmFnZXIuY2hlY2tfYXV0aG9yaXphdGlvbihyZXEpO1xuLy8gXHRcdHZhciBjdXJyZW50X3VzZXJfaWQgPSBjdXJyZW50X3VzZXJfaW5mby5faWQ7XG5cbi8vIFx0XHR2YXIgaGFzaERhdGEgPSByZXEuYm9keTtcbi8vIFx0XHR2YXIgaW5zdGFuY2VfaWQgPSBoYXNoRGF0YS5pbnN0YW5jZV9pZDtcbi8vIFx0XHR2YXIgc3BhY2VfaWQgPSBoYXNoRGF0YS5zcGFjZV9pZDtcbi8vIFx0XHR2YXIgZmxvd19pZCA9IGhhc2hEYXRhLmZsb3dfaWQ7XG4vLyBcdFx0dmFyIGhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudCA9IGhhc2hEYXRhLmhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudDtcbi8vIFx0XHR2YXIgZGVzY3JpcHRpb24gPSBoYXNoRGF0YS5kZXNjcmlwdGlvbjtcbi8vIFx0XHR2YXIgaXNGb3J3YXJkQXR0YWNobWVudHMgPSBoYXNoRGF0YS5pc0ZvcndhcmRBdHRhY2htZW50cztcbi8vIFx0XHR2YXIgc2VsZWN0ZWRVc2VycyA9IGhhc2hEYXRhLnNlbGVjdGVkVXNlcnM7XG4vLyBcdFx0dmFyIGFjdGlvbl90eXBlID0gaGFzaERhdGEuYWN0aW9uX3R5cGU7XG4vLyBcdFx0dmFyIHJlbGF0ZWQgPSBoYXNoRGF0YS5yZWxhdGVkO1xuLy8gXHRcdHZhciBmcm9tX2FwcHJvdmVfaWQgPSBoYXNoRGF0YS5mcm9tX2FwcHJvdmVfaWQ7XG5cbi8vIFx0XHRjaGVjayhpbnN0YW5jZV9pZCwgU3RyaW5nKTtcbi8vIFx0XHRjaGVjayhzcGFjZV9pZCwgU3RyaW5nKTtcbi8vIFx0XHRjaGVjayhmbG93X2lkLCBTdHJpbmcpO1xuLy8gXHRcdGNoZWNrKGhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudCwgQm9vbGVhbik7XG4vLyBcdFx0Y2hlY2soZGVzY3JpcHRpb24sIFN0cmluZyk7XG4vLyBcdFx0Y2hlY2soaXNGb3J3YXJkQXR0YWNobWVudHMsIEJvb2xlYW4pO1xuLy8gXHRcdGNoZWNrKHNlbGVjdGVkVXNlcnMsIEFycmF5KTtcbi8vIFx0XHRjaGVjayhhY3Rpb25fdHlwZSwgTWF0Y2guT25lT2YoJ2ZvcndhcmQnLCAnZGlzdHJpYnV0ZScpKTtcblxuLy8gXHRcdGlmIChhY3Rpb25fdHlwZSA9PSBcImRpc3RyaWJ1dGVcIilcbi8vIFx0XHRcdGNoZWNrKGZyb21fYXBwcm92ZV9pZCwgU3RyaW5nKTtcblxuLy8gXHRcdHZhciBpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZShpbnN0YW5jZV9pZCk7XG4vLyBcdFx0dmFyIG9sZF9zcGFjZV9pZCA9IGlucy5zcGFjZTtcblxuLy8gXHRcdHZhciBmbG93ID0gZGIuZmxvd3MuZmluZE9uZShmbG93X2lkKTtcblxuLy8gXHRcdHZhciBzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHNwYWNlX2lkKTtcblxuLy8gXHRcdGlmICghaW5zIHx8ICFmbG93IHx8ICFzcGFjZSkge1xuLy8gXHRcdFx0dGhyb3cgbmV3IE1ldGVvci5FcnJvcigncGFyYW1zIGVycm9yIScsICdyZWNvcmQgbm90IGV4aXN0cyEnKTtcbi8vIFx0XHR9XG5cbi8vIFx0XHR2YXIgZm9yd2FyZF91c2VycyA9IG5ldyBBcnJheTtcbi8vIFx0XHRpZiAoXy5pc0VtcHR5KHNlbGVjdGVkVXNlcnMpKSB7XG4vLyBcdFx0XHRmb3J3YXJkX3VzZXJzID0gW2N1cnJlbnRfdXNlcl9pZF07XG4vLyBcdFx0fSBlbHNlIHtcbi8vIFx0XHRcdGZvcndhcmRfdXNlcnMgPSBzZWxlY3RlZFVzZXJzO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIOagoemqjOWIhuWPkeWvueixoeaYr+WQpuacieWIhuWPkea1geeoi+eahOaPkOS6pOadg+mZkFxuLy8gXHRcdHZhciBub19wZXJtaXNzaW9uX3VzZXJfaWRzID0gbmV3IEFycmF5KCk7XG4vLyBcdFx0Xy5lYWNoKGZvcndhcmRfdXNlcnMsIGZ1bmN0aW9uICh1aWQpIHtcbi8vIFx0XHRcdHZhciBwZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25NYW5hZ2VyLmdldEZsb3dQZXJtaXNzaW9ucyhmbG93X2lkLCB1aWQpO1xuLy8gXHRcdFx0aWYgKCFwZXJtaXNzaW9ucy5pbmNsdWRlcyhcImFkZFwiKSkge1xuLy8gXHRcdFx0XHQvLyB0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKCdlcnJvciEnLCBcIuivpeeUs+ivt+S6uuayoeacieaPkOS6pOatpOeUs+ivt+WNleeahOadg+mZkOOAglwiKVxuLy8gXHRcdFx0XHRub19wZXJtaXNzaW9uX3VzZXJfaWRzLnB1c2godWlkKTtcbi8vIFx0XHRcdH1cbi8vIFx0XHR9KVxuLy8gXHRcdGlmICghXy5pc0VtcHR5KG5vX3Blcm1pc3Npb25fdXNlcl9pZHMpKSB7XG4vLyBcdFx0XHR2YXIgbm9fcGVybWlzc2lvbl91c2Vyc19uYW1lID0gbmV3IEFycmF5KCk7XG4vLyBcdFx0XHRkYi51c2Vycy5maW5kKHtcbi8vIFx0XHRcdFx0X2lkOiB7XG4vLyBcdFx0XHRcdFx0JGluOiBub19wZXJtaXNzaW9uX3VzZXJfaWRzXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0ZmllbGRzOiB7XG4vLyBcdFx0XHRcdFx0bmFtZTogMVxuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9KS5mb3JFYWNoKGZ1bmN0aW9uICh1KSB7XG4vLyBcdFx0XHRcdG5vX3Blcm1pc3Npb25fdXNlcnNfbmFtZS5wdXNoKHUubmFtZSk7XG4vLyBcdFx0XHR9KTtcbi8vIFx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoJ25vX3Blcm1pc3Npb24nLCBcIuivpeaPkOS6pOS6uuayoeacieaPkOS6pOatpOeUs+ivt+WNleeahOadg+mZkOOAglwiLCBub19wZXJtaXNzaW9uX3VzZXJzX25hbWUuam9pbignLCcpKVxuLy8gXHRcdH1cblxuLy8gXHRcdHZhciBuZXdfaW5zX2lkcyA9IG5ldyBBcnJheTtcblxuLy8gXHRcdHZhciBjdXJyZW50X3RyYWNlID0gbnVsbDtcbi8vIFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gXCJkaXN0cmlidXRlXCIpIHtcbi8vIFx0XHRcdF8uZWFjaChpbnMudHJhY2VzLCBmdW5jdGlvbiAodCkge1xuLy8gXHRcdFx0XHRpZiAoIWN1cnJlbnRfdHJhY2UpIHtcbi8vIFx0XHRcdFx0XHRfLmVhY2godC5hcHByb3ZlcywgZnVuY3Rpb24gKGEpIHtcbi8vIFx0XHRcdFx0XHRcdGlmICghY3VycmVudF90cmFjZSkge1xuLy8gXHRcdFx0XHRcdFx0XHRpZiAoYS5faWQgPT0gZnJvbV9hcHByb3ZlX2lkKVxuLy8gXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRfdHJhY2UgPSB0O1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pXG4vLyBcdFx0fSBlbHNlIHtcbi8vIFx0XHRcdGN1cnJlbnRfdHJhY2UgPSBfLmxhc3QoaW5zLnRyYWNlcyk7XG4vLyBcdFx0fVxuLy8gXHRcdHZhciBjdXJyZW50X3RyYWNlX2lkID0gY3VycmVudF90cmFjZS5faWQ7XG4vLyBcdFx0dmFyIGZvcndhcmRfYXBwcm92ZXMgPSBbXTtcbi8vIFx0XHR2YXIgZnJvbV91c2VyX25hbWUgPSBkYi51c2Vycy5maW5kT25lKGN1cnJlbnRfdXNlcl9pZCwge1xuLy8gXHRcdFx0ZmllbGRzOiB7XG4vLyBcdFx0XHRcdG5hbWU6IDFcbi8vIFx0XHRcdH1cbi8vIFx0XHR9KS5uYW1lXG4vLyBcdFx0dmFyIHNldF9vYmogPSBuZXcgT2JqZWN0O1xuXG4vLyBcdFx0Ly8g6K6h566XdmFsdWVzXG4vLyBcdFx0dmFyIG9sZF92YWx1ZXMgPSBpbnMudmFsdWVzLFxuLy8gXHRcdFx0bmV3X3ZhbHVlcyA9IHt9O1xuLy8gXHRcdHZhciBmb3JtID0gZGIuZm9ybXMuZmluZE9uZShmbG93LmZvcm0pO1xuLy8gXHRcdHZhciBmaWVsZHMgPSBmb3JtLmN1cnJlbnQuZmllbGRzIHx8IFtdO1xuXG4vLyBcdFx0dmFyIG9sZF9mb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnMuZm9ybSk7XG4vLyBcdFx0dmFyIG9sZF9mb3JtX3ZlcnNpb24gPSBpbnMuZm9ybV92ZXJzaW9uLFxuLy8gXHRcdFx0b2xkX2ZpZWxkcyA9IFtdLFxuLy8gXHRcdFx0Y29tbW9uX2ZpZWxkcyA9IFtdO1xuXG4vLyBcdFx0dmFyIHNlbGVjdF90b19pbnB1dF9maWVsZHMgPSBbXTtcblxuLy8gXHRcdGlmIChvbGRfZm9ybS5jdXJyZW50Ll9pZCA9PSBvbGRfZm9ybV92ZXJzaW9uKSB7XG4vLyBcdFx0XHRvbGRfZmllbGRzID0gb2xkX2Zvcm0uY3VycmVudC5maWVsZHM7XG4vLyBcdFx0fSBlbHNlIHtcbi8vIFx0XHRcdGlmIChvbGRfZm9ybS5oaXN0b3J5cykge1xuLy8gXHRcdFx0XHRvbGRfZm9ybS5oaXN0b3J5cy5mb3JFYWNoKGZ1bmN0aW9uIChoKSB7XG4vLyBcdFx0XHRcdFx0aWYgKGguX2lkID09IG9sZF9mb3JtX3ZlcnNpb24pXG4vLyBcdFx0XHRcdFx0XHRvbGRfZmllbGRzID0gaC5maWVsZHM7XG4vLyBcdFx0XHRcdH0pXG4vLyBcdFx0XHR9XG4vLyBcdFx0fVxuXG4vLyBcdFx0ZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4vLyBcdFx0XHR2YXIgZXhpc3RzX2ZpZWxkID0gXy5maW5kKG9sZF9maWVsZHMsIGZ1bmN0aW9uIChmKSB7XG4vLyBcdFx0XHRcdHJldHVybiBmLnR5cGUgPT0gZmllbGQudHlwZSAmJiBmLmNvZGUgPT0gZmllbGQuY29kZTtcbi8vIFx0XHRcdH0pXG4vLyBcdFx0XHRpZiAoZXhpc3RzX2ZpZWxkKVxuLy8gXHRcdFx0XHRjb21tb25fZmllbGRzLnB1c2goZmllbGQpO1xuLy8gXHRcdFx0dmFyIHNlbGVjdF9pbnB1dF9maWVsZCA9IF8uZmluZChvbGRfZmllbGRzLCBmdW5jdGlvbiAoZikge1xuLy8gXHRcdFx0XHRyZXR1cm4gZi50eXBlID09ICdzZWxlY3QnICYmIGZpZWxkLnR5cGUgPT0gJ2lucHV0JyAmJiBmLmNvZGUgPT0gZmllbGQuY29kZTtcbi8vIFx0XHRcdH0pXG4vLyBcdFx0XHRpZiAoc2VsZWN0X2lucHV0X2ZpZWxkKVxuLy8gXHRcdFx0XHRzZWxlY3RfdG9faW5wdXRfZmllbGRzLnB1c2goc2VsZWN0X2lucHV0X2ZpZWxkKTtcbi8vIFx0XHR9KVxuXG4vLyBcdFx0c2VsZWN0X3RvX2lucHV0X2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuLy8gXHRcdFx0aWYgKG9sZF92YWx1ZXNbZmllbGQuY29kZV0pIHtcbi8vIFx0XHRcdFx0bmV3X3ZhbHVlc1tmaWVsZC5jb2RlXSA9IG9sZF92YWx1ZXNbZmllbGQuY29kZV07XG4vLyBcdFx0XHR9XG4vLyBcdFx0fSlcblxuLy8gXHRcdGNvbW1vbl9maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbi8vIFx0XHRcdGlmIChmaWVsZC50eXBlID09ICdzZWN0aW9uJykge1xuLy8gXHRcdFx0XHRpZiAoZmllbGQuZmllbGRzKSB7XG4vLyBcdFx0XHRcdFx0ZmllbGQuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbi8vIFx0XHRcdFx0XHRcdC8vIOi3qOW3peS9nOWMuui9rOWPkeS4jeWkjeWItumAieS6uumAiee7hFxuLy8gXHRcdFx0XHRcdFx0aWYgKFsnZ3JvdXAnLCAndXNlciddLmluY2x1ZGVzKGYudHlwZSkgJiYgb2xkX3NwYWNlX2lkICE9IHNwYWNlX2lkKSB7XG4vLyBcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdHZhciBrZXkgPSBmLmNvZGU7XG4vLyBcdFx0XHRcdFx0XHR2YXIgb2xkX3YgPSBvbGRfdmFsdWVzW2tleV07XG4vLyBcdFx0XHRcdFx0XHRpZiAob2xkX3YpIHtcbi8vIFx0XHRcdFx0XHRcdFx0dmFyIGZpZWxkT3B0aW9ucyA9IGYub3B0aW9ucyAmJiBmLm9wdGlvbnMuc3BsaXQgJiYgZi5vcHRpb25zLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbihuKXtcbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogaXRlbVNwbGl0c1swXSxcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbi8vIFx0XHRcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdFx0XHQvLyDmoKHpqowg5Y2V6YCJ77yM5aSa6YCJ77yM5LiL5ouJ5qGGIOWtl+auteWAvOaYr+WQpuWcqOaWsOihqOWNleWvueW6lOWtl+auteeahOWPr+mAieWAvOiMg+WbtOWGhVxuLy8gXHRcdFx0XHRcdFx0XHRpZiAoZi50eXBlID09ICdzZWxlY3QnIHx8IGYudHlwZSA9PSAncmFkaW8nKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0dmFyIHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoZnVuY3Rpb24oaXRlbSkge1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWUgPT09IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdFx0XHRcdGlmKCFzZWxlY3RlZE9wdGlvbil7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRcdFx0aWYgKGYudHlwZSA9PSAnbXVsdGlTZWxlY3QnKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0dmFyIG9sZF9tdWx0aVNlbGVjdGVkID0gb2xkX3Yuc3BsaXQoJywnKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3X211bHRpU2VsZWN0ZWQgPSBfLmludGVyc2VjdGlvbihmaWVsZE9wdGlvbnMubWFwKGZ1bmN0aW9uKG4peyByZXR1cm4gbi52YWx1ZTsgfSksIG9sZF9tdWx0aVNlbGVjdGVkKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRvbGRfdiA9IG5ld19tdWx0aVNlbGVjdGVkLmpvaW4oJywnKTtcbi8vIFx0XHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRcdG5ld192YWx1ZXNba2V5XSA9IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PSAndGFibGUnKSB7XG4vLyBcdFx0XHRcdGlmICghXy5pc0VtcHR5KG9sZF92YWx1ZXNbZmllbGQuY29kZV0pKSB7XG4vLyBcdFx0XHRcdFx0bmV3X3ZhbHVlc1tmaWVsZC5jb2RlXSA9IG5ldyBBcnJheTtcbi8vIFx0XHRcdFx0XHRvbGRfdmFsdWVzW2ZpZWxkLmNvZGVdLmZvckVhY2goZnVuY3Rpb24gKG9sZF90YWJsZV9yb3dfdmFsdWVzKSB7XG4vLyBcdFx0XHRcdFx0XHR2YXIgbmV3X3RhYmxlX3Jvd192YWx1ZXMgPSB7fTtcblxuLy8gXHRcdFx0XHRcdFx0aWYgKCFfLmlzRW1wdHkoZmllbGQuZmllbGRzKSkge1xuLy8gXHRcdFx0XHRcdFx0XHRmaWVsZC5maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZikge1xuLy8gXHRcdFx0XHRcdFx0XHRcdC8vIOi3qOW3peS9nOWMuui9rOWPkeS4jeWkjeWItumAieS6uumAiee7hFxuLy8gXHRcdFx0XHRcdFx0XHRcdGlmIChbJ2dyb3VwJywgJ3VzZXInXS5pbmNsdWRlcyhmLnR5cGUpICYmIG9sZF9zcGFjZV9pZCAhPSBzcGFjZV9pZCkge1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIga2V5ID0gZi5jb2RlO1xuLy8gXHRcdFx0XHRcdFx0XHRcdHZhciBvbGRfdiA9IG9sZF90YWJsZV9yb3dfdmFsdWVzW2tleV07XG4vLyBcdFx0XHRcdFx0XHRcdFx0aWYgKG9sZF92KSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmllbGRPcHRpb25zID0gZi5vcHRpb25zICYmIGYub3B0aW9ucy5zcGxpdCAmJiBmLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pe1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBpdGVtU3BsaXRzWzBdLFxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHQvLyDmoKHpqowg5Y2V6YCJ77yM5aSa6YCJ77yM5LiL5ouJ5qGGIOWtl+auteWAvOaYr+WQpuWcqOaWsOihqOWNleWvueW6lOWtl+auteeahOWPr+mAieWAvOiMg+WbtOWGhVxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGYudHlwZSA9PSAnc2VsZWN0JyB8fCBmLnR5cGUgPT0gJ3JhZGlvJykge1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWUgPT09IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoIXNlbGVjdGVkT3B0aW9uKXtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGYudHlwZSA9PSAnbXVsdGlTZWxlY3QnKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBvbGRfbXVsdGlTZWxlY3RlZCA9IG9sZF92LnNwbGl0KCcsJyk7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBuZXdfbXVsdGlTZWxlY3RlZCA9IF8uaW50ZXJzZWN0aW9uKGZpZWxkT3B0aW9ucy5tYXAoZnVuY3Rpb24obil7IHJldHVybiBuLnZhbHVlOyB9KSwgb2xkX211bHRpU2VsZWN0ZWQpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRvbGRfdiA9IG5ld19tdWx0aVNlbGVjdGVkLmpvaW4oJywnKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0bmV3X3RhYmxlX3Jvd192YWx1ZXNba2V5XSA9IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdFx0aWYgKG9sZF90YWJsZV9yb3dfdmFsdWVzLl9pZCkge1xuLy8gXHRcdFx0XHRcdFx0XHRuZXdfdGFibGVfcm93X3ZhbHVlcy5faWQgPSBuZXcgTW9uZ28uT2JqZWN0SUQoKS5fc3RyO1xuLy8gXHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRpZiAoIV8uaXNFbXB0eShuZXdfdGFibGVfcm93X3ZhbHVlcykpIHtcbi8vIFx0XHRcdFx0XHRcdFx0bmV3X3ZhbHVlc1tmaWVsZC5jb2RlXS5wdXNoKG5ld190YWJsZV9yb3dfdmFsdWVzKTtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHR9KVxuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0XHQvLyDot6jlt6XkvZzljLrovazlj5HkuI3lpI3liLbpgInkurrpgInnu4Rcbi8vIFx0XHRcdFx0aWYgKFsnZ3JvdXAnLCAndXNlciddLmluY2x1ZGVzKGZpZWxkLnR5cGUpICYmIG9sZF9zcGFjZV9pZCAhPSBzcGFjZV9pZCkge1xuLy8gXHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0XHR2YXIga2V5ID0gZmllbGQuY29kZTtcbi8vIFx0XHRcdFx0dmFyIG9sZF92ID0gb2xkX3ZhbHVlc1trZXldO1xuLy8gXHRcdFx0XHRpZiAob2xkX3YpIHtcbi8vIFx0XHRcdFx0XHQvLyDmoKHpqowg5Y2V6YCJ77yM5aSa6YCJ77yM5LiL5ouJ5qGGIOWtl+auteWAvOaYr+WQpuWcqOaWsOihqOWNleWvueW6lOWtl+auteeahOWPr+mAieWAvOiMg+WbtOWGhVxuLy8gXHRcdFx0XHRcdHZhciBmaWVsZE9wdGlvbnMgPSBmaWVsZC5vcHRpb25zICYmIGZpZWxkLm9wdGlvbnMuc3BsaXQgJiYgZmllbGQub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24obil7XG4vLyBcdFx0XHRcdFx0XHR2YXIgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuLy8gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8vIFx0XHRcdFx0XHRcdFx0bGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG4vLyBcdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHR9KTtcbi8vIFx0XHRcdFx0XHRpZiAoZmllbGQudHlwZSA9PSAnc2VsZWN0JyB8fCBmaWVsZC50eXBlID09ICdyYWRpbycpIHtcbi8vIFx0XHRcdFx0XHRcdHZhciBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0pIHtcbi8vIFx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWUgPT09IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdFx0XHRpZighc2VsZWN0ZWRPcHRpb24pe1xuLy8gXHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT0gJ211bHRpU2VsZWN0Jykge1xuLy8gXHRcdFx0XHRcdFx0dmFyIG9sZF9tdWx0aVNlbGVjdGVkID0gb2xkX3Yuc3BsaXQoJywnKTtcbi8vIFx0XHRcdFx0XHRcdHZhciBuZXdfbXVsdGlTZWxlY3RlZCA9IF8uaW50ZXJzZWN0aW9uKGZpZWxkT3B0aW9ucy5tYXAoZnVuY3Rpb24obil7IHJldHVybiBuLnZhbHVlOyB9KSwgb2xkX211bHRpU2VsZWN0ZWQpO1xuLy8gXHRcdFx0XHRcdFx0b2xkX3YgPSBuZXdfbXVsdGlTZWxlY3RlZC5qb2luKCcsJyk7XG4vLyBcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0bmV3X3ZhbHVlc1trZXldID0gb2xkX3Y7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH1cblxuLy8gXHRcdH0pXG5cbi8vIFx0XHQvL+WmguaenOaYr+WIhuWPke+8jOWImXZhbHVl5Lit55qEcmVjb3JkX25lZWTjgIFGT05EU0lE5LiN6ZyA6KaB5YiG5Y+R5Yiw5paw55Sz6K+35Y2V5LitXG4vLyBcdFx0aWYgKGFjdGlvbl90eXBlID09PSAnZGlzdHJpYnV0ZScpIHtcbi8vIFx0XHRcdGRlbGV0ZSBuZXdfdmFsdWVzLnJlY29yZF9uZWVkO1xuLy8gXHRcdFx0ZGVsZXRlIG5ld192YWx1ZXMuRk9ORFNJRDtcbi8vIFx0XHR9XG5cbi8vIFx0XHQvLyDorqHnrpfnlLPor7fljZXmoIfpophcbi8vIFx0XHR2YXIgaW5zdGFuY2VfbmFtZSA9IFwiXCI7XG4vLyBcdFx0dmFyIG5hbWVfZm9ydW1sYSA9IGZvcm0uY3VycmVudC5uYW1lX2ZvcnVtbGE7XG4vLyBcdFx0aWYgKG5hbWVfZm9ydW1sYSkge1xuLy8gXHRcdFx0dHJ5IHtcbi8vIFx0XHRcdFx0dmFyIGlzY3JpcHQgPSBuYW1lX2ZvcnVtbGEucmVwbGFjZSgvXFx7L2csIFwiKG5ld192YWx1ZXNbJ1wiKS5yZXBsYWNlKC9cXH0vZywgXCInXSB8fCAnJylcIik7XG4vLyBcdFx0XHRcdHZhciByZXYgPSBldmFsKGlzY3JpcHQpO1xuLy8gXHRcdFx0XHRpbnN0YW5jZV9uYW1lID0gcmV2IHx8IGZsb3cubmFtZTtcbi8vIFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG4vLyBcdFx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoJ2NhY3VsYXRlX2luc3RhbmNlX25hbWUnLCBcIuiuoeeul+eUs+ivt+WNleagh+mimOWHuumUmeivt+ajgOafpeihqOWNleagh+mimOiEmuacrOOAglwiKTtcbi8vIFx0XHRcdH1cbi8vIFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0aW5zdGFuY2VfbmFtZSA9IGZsb3cubmFtZTtcbi8vIFx0XHR9XG5cbi8vIFx0XHQvLyBpbnN0YW5jZeS4reiusOW9leW9k+WJjeatpemqpOWQjeensCAjMTMxNFxuLy8gXHRcdHZhciBzdGFydF9zdGVwID0gXy5maW5kKGZsb3cuY3VycmVudC5zdGVwcywgZnVuY3Rpb24gKHN0ZXApIHtcbi8vIFx0XHRcdHJldHVybiBzdGVwLnN0ZXBfdHlwZSA9PSAnc3RhcnQnO1xuLy8gXHRcdH0pXG5cbi8vIFx0XHQvLyDmtYHnqIvovazlj5Hlip/og73kv67mlLnkuLrvvIzlvIDlp4voioLngrnmnInnvJbovpHmnYPpmZDnmoTlrZfmrrXnmoTlgLzov5vooYzlpI3liLbvvIzml6DnvJbovpHmnYPpmZDnmoTlrZfmrrXlgLzkuI3ov5vooYzlpI3liLYgIzM3NDhcbi8vIFx0XHRpZiAoYWN0aW9uX3R5cGUgPT09ICdmb3J3YXJkJykge1xuLy8gXHRcdFx0bmV3X3ZhbHVlcyA9IHV1Zmxvd01hbmFnZXIuZ2V0QXBwcm92ZVZhbHVlcyhuZXdfdmFsdWVzLCBzdGFydF9zdGVwLnBlcm1pc3Npb25zLCBmbG93LmZvcm0sIGZsb3cuY3VycmVudC5mb3JtX3ZlcnNpb24pO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIOaWsOW7uueUs+ivt+WNleaXtu+8jGluc3RhbmNlc+iusOW9lea1geeoi+WQjeensOOAgea1geeoi+WIhuexu+WQjeensCAjMTMxM1xuLy8gXHRcdHZhciBjYXRlZ29yeV9uYW1lID0gXCJcIjtcbi8vIFx0XHRpZiAoZm9ybS5jYXRlZ29yeSkge1xuLy8gXHRcdFx0dmFyIGNhdGVnb3J5ID0gdXVmbG93TWFuYWdlci5nZXRDYXRlZ29yeShmb3JtLmNhdGVnb3J5KTtcbi8vIFx0XHRcdGlmIChjYXRlZ29yeSlcbi8vIFx0XHRcdFx0Y2F0ZWdvcnlfbmFtZSA9IGNhdGVnb3J5Lm5hbWU7XG4vLyBcdFx0fVxuXG4vLyBcdFx0Xy5lYWNoKGZvcndhcmRfdXNlcnMsIGZ1bmN0aW9uICh1c2VyX2lkKSB7XG5cbi8vIFx0XHRcdHZhciB1c2VyX2luZm8gPSBkYi51c2Vycy5maW5kT25lKHVzZXJfaWQpO1xuXG4vLyBcdFx0XHR2YXIgc3BhY2VfdXNlciA9IGRiLnNwYWNlX3VzZXJzLmZpbmRPbmUoe1xuLy8gXHRcdFx0XHRzcGFjZTogc3BhY2VfaWQsXG4vLyBcdFx0XHRcdHVzZXI6IHVzZXJfaWRcbi8vIFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0ZmllbGRzOiB7XG4vLyBcdFx0XHRcdFx0b3JnYW5pemF0aW9uOiAxXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pO1xuLy8gXHRcdFx0dmFyIHNwYWNlX3VzZXJfb3JnX2luZm8gPSBkYi5vcmdhbml6YXRpb25zLmZpbmRPbmUoe1xuLy8gXHRcdFx0XHRfaWQ6IHNwYWNlX3VzZXIub3JnYW5pemF0aW9uXG4vLyBcdFx0XHR9LCB7XG4vLyBcdFx0XHRcdGZpZWxkczoge1xuLy8gXHRcdFx0XHRcdG5hbWU6IDEsXG4vLyBcdFx0XHRcdFx0ZnVsbG5hbWU6IDFcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSk7XG5cbi8vIFx0XHRcdHZhciBub3cgPSBuZXcgRGF0ZSgpO1xuLy8gXHRcdFx0dmFyIGluc19vYmogPSB7fTtcblxuLy8gXHRcdFx0dmFyIGFnZW50ID0gdXVmbG93TWFuYWdlci5nZXRBZ2VudChzcGFjZV9pZCwgdXNlcl9pZCk7XG4vLyBcdFx0XHR2YXIgaGFuZGxlcl9pZCA9IHVzZXJfaWQ7XG4vLyBcdFx0XHR2YXIgaGFuZGxlcl9pbmZvID0gdXNlcl9pbmZvO1xuLy8gXHRcdFx0dmFyIGhhbmRsZXJfc3BhY2VfdXNlciA9IHNwYWNlX3VzZXI7XG4vLyBcdFx0XHR2YXIgaGFuZGxlcl9vcmdfaW5mbyA9IHNwYWNlX3VzZXJfb3JnX2luZm87XG4vLyBcdFx0XHRpZiAoYWdlbnQpIHtcbi8vIFx0XHRcdFx0aGFuZGxlcl9pZCA9IGFnZW50O1xuLy8gXHRcdFx0XHRoYW5kbGVyX2luZm8gPSBkYi51c2Vycy5maW5kT25lKGFnZW50KTtcbi8vIFx0XHRcdFx0aGFuZGxlcl9zcGFjZV91c2VyID0gdXVmbG93TWFuYWdlci5nZXRTcGFjZVVzZXIoc3BhY2VfaWQsIGFnZW50KTtcbi8vIFx0XHRcdFx0aGFuZGxlcl9vcmdfaW5mbyA9IHV1Zmxvd01hbmFnZXIuZ2V0U3BhY2VVc2VyT3JnSW5mbyhoYW5kbGVyX3NwYWNlX3VzZXIpO1xuLy8gXHRcdFx0fVxuLy8gXHRcdFx0aW5zX29iai5faWQgPSBkYi5pbnN0YW5jZXMuX21ha2VOZXdJRCgpO1xuLy8gXHRcdFx0aW5zX29iai5zcGFjZSA9IHNwYWNlX2lkO1xuLy8gXHRcdFx0aW5zX29iai5mbG93ID0gZmxvd19pZDtcbi8vIFx0XHRcdGluc19vYmouZmxvd192ZXJzaW9uID0gZmxvdy5jdXJyZW50Ll9pZDtcbi8vIFx0XHRcdGluc19vYmouZm9ybSA9IGZsb3cuZm9ybTtcbi8vIFx0XHRcdGluc19vYmouZm9ybV92ZXJzaW9uID0gZmxvdy5jdXJyZW50LmZvcm1fdmVyc2lvbjtcbi8vIFx0XHRcdGluc19vYmoubmFtZSA9IGluc3RhbmNlX25hbWU7XG4vLyBcdFx0XHRpbnNfb2JqLnN1Ym1pdHRlciA9IGhhbmRsZXJfaWQ7XG4vLyBcdFx0XHRpbnNfb2JqLnN1Ym1pdHRlcl9uYW1lID0gaGFuZGxlcl9pbmZvLm5hbWU7XG4vLyBcdFx0XHRpbnNfb2JqLmFwcGxpY2FudCA9IHVzZXJfaWQ7XG4vLyBcdFx0XHRpbnNfb2JqLmFwcGxpY2FudF9uYW1lID0gdXNlcl9pbmZvLm5hbWU7XG4vLyBcdFx0XHRpbnNfb2JqLmFwcGxpY2FudF9vcmdhbml6YXRpb24gPSBzcGFjZV91c2VyLm9yZ2FuaXphdGlvbjtcbi8vIFx0XHRcdGluc19vYmouYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lID0gc3BhY2VfdXNlcl9vcmdfaW5mby5uYW1lO1xuLy8gXHRcdFx0aW5zX29iai5hcHBsaWNhbnRfb3JnYW5pemF0aW9uX2Z1bGxuYW1lID0gc3BhY2VfdXNlcl9vcmdfaW5mby5mdWxsbmFtZTtcbi8vIFx0XHRcdGluc19vYmouc3RhdGUgPSBcImRyYWZ0XCI7XG4vLyBcdFx0XHRpbnNfb2JqLmNvZGUgPSBcIlwiO1xuLy8gXHRcdFx0aW5zX29iai5pc19hcmNoaXZlZCA9IGZhbHNlO1xuLy8gXHRcdFx0aW5zX29iai5pc19kZWxldGVkID0gZmFsc2U7XG4vLyBcdFx0XHRpbnNfb2JqLmNyZWF0ZWQgPSBub3c7XG4vLyBcdFx0XHRpbnNfb2JqLmNyZWF0ZWRfYnkgPSBjdXJyZW50X3VzZXJfaWQ7XG4vLyBcdFx0XHRpbnNfb2JqLm1vZGlmaWVkID0gbm93O1xuLy8gXHRcdFx0aW5zX29iai5tb2RpZmllZF9ieSA9IGN1cnJlbnRfdXNlcl9pZDtcbi8vIFx0XHRcdGluc19vYmouaW5ib3hfdXNlcnMgPSBbaGFuZGxlcl9pZF07XG4vLyBcdFx0XHRpbnNfb2JqLnZhbHVlcyA9IG5ld192YWx1ZXM7XG4vLyBcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ2Rpc3RyaWJ1dGUnKSB7XG4vLyBcdFx0XHRcdC8vIOino+WGs+WkmuasoeWIhuWPkeeci+S4jeWIsOato+aWh+OAgemZhOS7tumXrumimFxuLy8gXHRcdFx0XHRpZiAoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSkge1xuLy8gXHRcdFx0XHRcdGluc19vYmouZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlID0gaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZTtcbi8vIFx0XHRcdFx0fSBlbHNlIHtcbi8vIFx0XHRcdFx0XHRpbnNfb2JqLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSA9IGluc3RhbmNlX2lkO1xuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHRcdGluc19vYmouZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcyA9IF8uY2xvbmUoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMpIHx8IFtdO1xuLy8gXHRcdFx0XHRpbnNfb2JqLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMucHVzaChpbnN0YW5jZV9pZCk7XG5cbi8vIFx0XHRcdFx0aWYgKHJlbGF0ZWQpIHtcbi8vIFx0XHRcdFx0XHRpbnNfb2JqLnJlbGF0ZWRfaW5zdGFuY2VzID0gW2luc3RhbmNlX2lkXVxuLy8gXHRcdFx0XHR9XG5cbi8vIFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uX3R5cGUgPT0gJ2ZvcndhcmQnKSB7XG4vLyBcdFx0XHRcdGluc19vYmouZm9yd2FyZF9mcm9tX2luc3RhbmNlID0gaW5zdGFuY2VfaWRcbi8vIFx0XHRcdH1cblxuLy8gXHRcdFx0Ly8g5paw5bu6VHJhY2Vcbi8vIFx0XHRcdHZhciB0cmFjZV9vYmogPSB7fTtcbi8vIFx0XHRcdHRyYWNlX29iai5faWQgPSBuZXcgTW9uZ28uT2JqZWN0SUQoKS5fc3RyO1xuLy8gXHRcdFx0dHJhY2Vfb2JqLmluc3RhbmNlID0gaW5zX29iai5faWQ7XG4vLyBcdFx0XHR0cmFjZV9vYmouaXNfZmluaXNoZWQgPSBmYWxzZTtcblxuLy8gXHRcdFx0Ly8g5b2T5YmN5pyA5paw54mIZmxvd+S4reW8gOWni+iKgueCueeahHN0ZXBfaWRcbi8vIFx0XHRcdHZhciBzdGVwX2lkLCBzdGVwX25hbWUsIGNhbl9lZGl0X21haW5fYXR0YWNoLCBjYW5fZWRpdF9ub3JtYWxfYXR0YWNoO1xuLy8gXHRcdFx0Zmxvdy5jdXJyZW50LnN0ZXBzLmZvckVhY2goZnVuY3Rpb24gKHN0ZXApIHtcbi8vIFx0XHRcdFx0aWYgKHN0ZXAuc3RlcF90eXBlID09IFwic3RhcnRcIikge1xuLy8gXHRcdFx0XHRcdHN0ZXBfaWQgPSBzdGVwLl9pZDtcbi8vIFx0XHRcdFx0XHRzdGVwX25hbWUgPSBzdGVwLm5hbWU7XG4vLyBcdFx0XHRcdFx0Y2FuX2VkaXRfbWFpbl9hdHRhY2ggPSBzdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoO1xuLy8gXHRcdFx0XHRcdGNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPSBzdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2g7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pXG4vLyBcdFx0XHR0cmFjZV9vYmouc3RlcCA9IHN0ZXBfaWQ7XG4vLyBcdFx0XHR0cmFjZV9vYmouc3RhcnRfZGF0ZSA9IG5vdztcbi8vIFx0XHRcdHRyYWNlX29iai5uYW1lID0gc3RlcF9uYW1lO1xuXG4vLyBcdFx0XHQvLyDmlrDlu7pBcHByb3ZlXG4vLyBcdFx0XHR2YXIgYXBwcl9vYmogPSB7fTtcbi8vIFx0XHRcdGFwcHJfb2JqLl9pZCA9IG5ldyBNb25nby5PYmplY3RJRCgpLl9zdHI7XG4vLyBcdFx0XHRhcHByX29iai5pbnN0YW5jZSA9IGluc19vYmouX2lkO1xuLy8gXHRcdFx0YXBwcl9vYmoudHJhY2UgPSB0cmFjZV9vYmouX2lkO1xuLy8gXHRcdFx0YXBwcl9vYmouaXNfZmluaXNoZWQgPSBmYWxzZTtcbi8vIFx0XHRcdGFwcHJfb2JqLnVzZXIgPSB1c2VyX2lkO1xuLy8gXHRcdFx0YXBwcl9vYmoudXNlcl9uYW1lID0gdXNlcl9pbmZvLm5hbWU7XG4vLyBcdFx0XHRhcHByX29iai5oYW5kbGVyID0gaGFuZGxlcl9pZDtcbi8vIFx0XHRcdGFwcHJfb2JqLmhhbmRsZXJfbmFtZSA9IGhhbmRsZXJfaW5mby5uYW1lO1xuLy8gXHRcdFx0YXBwcl9vYmouaGFuZGxlcl9vcmdhbml6YXRpb24gPSBoYW5kbGVyX3NwYWNlX3VzZXIub3JnYW5pemF0aW9uO1xuLy8gXHRcdFx0YXBwcl9vYmouaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZSA9IGhhbmRsZXJfb3JnX2luZm8ubmFtZTtcbi8vIFx0XHRcdGFwcHJfb2JqLmhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lID0gaGFuZGxlcl9vcmdfaW5mby5mdWxsbmFtZTtcbi8vIFx0XHRcdGFwcHJfb2JqLnR5cGUgPSBcImRyYWZ0XCI7XG4vLyBcdFx0XHRhcHByX29iai5zdGFydF9kYXRlID0gbm93O1xuLy8gXHRcdFx0YXBwcl9vYmoucmVhZF9kYXRlID0gbm93O1xuLy8gXHRcdFx0YXBwcl9vYmouaXNfcmVhZCA9IGZhbHNlO1xuLy8gXHRcdFx0YXBwcl9vYmouaXNfZXJyb3IgPSBmYWxzZTtcblxuLy8gXHRcdFx0YXBwcl9vYmoudmFsdWVzID0gbmV3X3ZhbHVlcztcblxuLy8gXHRcdFx0aWYgKGFnZW50KSB7XG4vLyBcdFx0XHRcdGFwcHJfb2JqLmFnZW50ID0gYWdlbnQ7XG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdHRyYWNlX29iai5hcHByb3ZlcyA9IFthcHByX29ial07XG4vLyBcdFx0XHRpbnNfb2JqLnRyYWNlcyA9IFt0cmFjZV9vYmpdO1xuXG4vLyBcdFx0XHRpZiAoZmxvdy5hdXRvX3JlbWluZCA9PSB0cnVlKVxuLy8gXHRcdFx0XHRpbnNfb2JqLmF1dG9fcmVtaW5kID0gdHJ1ZTtcblxuLy8gXHRcdFx0aW5zX29iai5jdXJyZW50X3N0ZXBfbmFtZSA9IHN0YXJ0X3N0ZXAubmFtZTtcblxuLy8gXHRcdFx0aW5zX29iai5mbG93X25hbWUgPSBmbG93Lm5hbWU7XG4vLyBcdFx0XHRpZiAoY2F0ZWdvcnlfbmFtZSkge1xuLy8gXHRcdFx0XHRpbnNfb2JqLmNhdGVnb3J5X25hbWUgPSBjYXRlZ29yeS5uYW1lO1xuLy8gXHRcdFx0XHRpbnNfb2JqLmNhdGVnb3J5ID0gY2F0ZWdvcnkuX2lkO1xuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHRuZXdfaW5zX2lkID0gZGIuaW5zdGFuY2VzLmluc2VydChpbnNfb2JqKTtcblxuLy8gXHRcdFx0Ly8g5aSN5Yi26ZmE5Lu2XG4vLyBcdFx0XHR2YXIgY29sbGVjdGlvbiA9IGNmcy5pbnN0YW5jZXM7XG5cbi8vIFx0XHRcdC8v5bCG5Y6f6KGo5Y2V5YaF5a655a2Y5YKo5Li656ys5LiA5Liq6ZmE5Lu2XG4vLyBcdFx0XHRpZiAoaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50KSB7XG4vLyBcdFx0XHRcdC8vIHRyeSB7XG5cbi8vIFx0XHRcdFx0aW5zdGFuY2VIdG1sID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCh1c2VyX2luZm8sIHNwYWNlX2lkLCBpbnMsIHtcbi8vIFx0XHRcdFx0XHRhYnNvbHV0ZTogdHJ1ZSxcbi8vIFx0XHRcdFx0XHRzaG93VHJhY2U6IHRydWVcbi8vIFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0dmFyIGluc3RhbmNlRmlsZSA9IG5ldyBGUy5GaWxlKCk7XG4vLyBcdFx0XHRcdGluc3RhbmNlRmlsZS5hdHRhY2hEYXRhKEJ1ZmZlci5mcm9tKGluc3RhbmNlSHRtbCwgXCJ1dGYtOFwiKSwge1xuLy8gXHRcdFx0XHRcdHR5cGU6IFwidGV4dC9odG1sXCJcbi8vIFx0XHRcdFx0fSwgZnVuY3Rpb24gKGVycm9yKSB7XG4vLyBcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG4vLyBcdFx0XHRcdFx0XHR0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKGVycm9yLmVycm9yLCBlcnJvci5yZWFzb24pO1xuLy8gXHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdGluc3RhbmNlRmlsZS5uYW1lKGlucy5uYW1lICsgXCIuaHRtbFwiKTtcbi8vIFx0XHRcdFx0XHRpbnN0YW5jZUZpbGUuc2l6ZShpbnN0YW5jZUh0bWwubGVuZ3RoKTtcblxuLy8gXHRcdFx0XHRcdHZhciBtZXRhZGF0YSA9IHtcbi8vIFx0XHRcdFx0XHRcdG93bmVyOiB1c2VyX2lkLFxuLy8gXHRcdFx0XHRcdFx0b3duZXJfbmFtZTogdXNlcl9pbmZvLm5hbWUsXG4vLyBcdFx0XHRcdFx0XHRzcGFjZTogc3BhY2VfaWQsXG4vLyBcdFx0XHRcdFx0XHRpbnN0YW5jZTogbmV3X2luc19pZCxcbi8vIFx0XHRcdFx0XHRcdGFwcHJvdmU6IGFwcHJfb2JqLl9pZCxcbi8vIFx0XHRcdFx0XHRcdGN1cnJlbnQ6IHRydWVcbi8vIFx0XHRcdFx0XHR9O1xuLy8gXHRcdFx0XHRcdGluc3RhbmNlRmlsZS5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuLy8gXHRcdFx0XHRcdHZhciBmaWxlT2JqID0gY29sbGVjdGlvbi5pbnNlcnQoaW5zdGFuY2VGaWxlKTtcbi8vIFx0XHRcdFx0XHRmaWxlT2JqLnVwZGF0ZSh7XG4vLyBcdFx0XHRcdFx0XHQkc2V0OiB7XG4vLyBcdFx0XHRcdFx0XHRcdCdtZXRhZGF0YS5wYXJlbnQnOiBmaWxlT2JqLl9pZFxuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pXG4vLyBcdFx0XHRcdH0pXG5cbi8vIFx0XHRcdFx0Ly8gfSBjYXRjaCAoZSkge1xuLy8gXHRcdFx0XHQvLyAgICAgY29uc29sZS5lcnJvcihlKTtcbi8vIFx0XHRcdFx0Ly8gfVxuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHRpZiAoaXNGb3J3YXJkQXR0YWNobWVudHMgJiYgYWN0aW9uX3R5cGUgPT0gJ2ZvcndhcmQnKSB7XG4vLyBcdFx0XHRcdHZhciBmaWxlcyA9IGNvbGxlY3Rpb24uZmluZCh7XG4vLyBcdFx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zdGFuY2VfaWQsXG4vLyBcdFx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlXG4vLyBcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRmaWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4vLyBcdFx0XHRcdFx0Ly8g5Yik5pat5paw55qE5rWB56iL5byA5aeL6IqC54K55piv5ZCm5pyJ57yW6L6R5q2j5paH5ZKM57yW6L6R6ZmE5Lu25p2D6ZmQXG4vLyBcdFx0XHRcdFx0aWYgKGYubWV0YWRhdGEubWFpbiA9PSB0cnVlKSB7XG4vLyBcdFx0XHRcdFx0XHRpZiAoY2FuX2VkaXRfbWFpbl9hdHRhY2ggIT0gdHJ1ZSAmJiBjYW5fZWRpdF9ub3JtYWxfYXR0YWNoICE9IHRydWUpXG4vLyBcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0XHRcdFx0aWYgKGNhbl9lZGl0X25vcm1hbF9hdHRhY2ggIT0gdHJ1ZSlcbi8vIFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdHZhciBuZXdGaWxlID0gbmV3IEZTLkZpbGUoKTtcbi8vIFx0XHRcdFx0XHRuZXdGaWxlLmF0dGFjaERhdGEoZi5jcmVhdGVSZWFkU3RyZWFtKCdpbnN0YW5jZXMnKSwge1xuLy8gXHRcdFx0XHRcdFx0dHlwZTogZi5vcmlnaW5hbC50eXBlXG4vLyBcdFx0XHRcdFx0fSwgZnVuY3Rpb24gKGVycikge1xuLy8gXHRcdFx0XHRcdFx0aWYgKGVycikge1xuLy8gXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKGVyci5lcnJvciwgZXJyLnJlYXNvbik7XG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHRuZXdGaWxlLm5hbWUoZi5uYW1lKCkpO1xuLy8gXHRcdFx0XHRcdFx0bmV3RmlsZS5zaXplKGYuc2l6ZSgpKTtcbi8vIFx0XHRcdFx0XHRcdHZhciBtZXRhZGF0YSA9IHtcbi8vIFx0XHRcdFx0XHRcdFx0b3duZXI6IHVzZXJfaWQsXG4vLyBcdFx0XHRcdFx0XHRcdG93bmVyX25hbWU6IHVzZXJfaW5mby5uYW1lLFxuLy8gXHRcdFx0XHRcdFx0XHRzcGFjZTogc3BhY2VfaWQsXG4vLyBcdFx0XHRcdFx0XHRcdGluc3RhbmNlOiBuZXdfaW5zX2lkLFxuLy8gXHRcdFx0XHRcdFx0XHRhcHByb3ZlOiBhcHByX29iai5faWQsXG4vLyBcdFx0XHRcdFx0XHRcdGN1cnJlbnQ6IHRydWVcbi8vIFx0XHRcdFx0XHRcdH07XG4vLyBcdFx0XHRcdFx0XHRpZiAoZi5tZXRhZGF0YS5tYWluID09IHRydWUgJiYgY2FuX2VkaXRfbWFpbl9hdHRhY2ggPT0gdHJ1ZSkge1xuLy8gXHRcdFx0XHRcdFx0XHRtZXRhZGF0YS5tYWluID0gdHJ1ZTtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdG5ld0ZpbGUubWV0YWRhdGEgPSBtZXRhZGF0YTtcbi8vIFx0XHRcdFx0XHRcdHZhciBmaWxlT2JqID0gY29sbGVjdGlvbi5pbnNlcnQobmV3RmlsZSk7XG4vLyBcdFx0XHRcdFx0XHRmaWxlT2JqLnVwZGF0ZSh7XG4vLyBcdFx0XHRcdFx0XHRcdCRzZXQ6IHtcbi8vIFx0XHRcdFx0XHRcdFx0XHQnbWV0YWRhdGEucGFyZW50JzogZmlsZU9iai5faWRcbi8vIFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0XHR9KVxuXG4vLyBcdFx0XHRcdH0pXG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PT0gJ2Rpc3RyaWJ1dGUnKSB7XG4vLyBcdFx0XHRcdC8vIOe7meW9k+WJjeeahOeUs+ivt+WNleWinuWKoOWIhuWPkeiusOW9lVxuLy8gXHRcdFx0XHR2YXIgYXBwciA9IHtcbi8vIFx0XHRcdFx0XHQnX2lkJzogbmV3IE1vbmdvLk9iamVjdElEKCkuX3N0cixcbi8vIFx0XHRcdFx0XHQnaW5zdGFuY2UnOiBpbnN0YW5jZV9pZCxcbi8vIFx0XHRcdFx0XHQndHJhY2UnOiBjdXJyZW50X3RyYWNlX2lkLFxuLy8gXHRcdFx0XHRcdCdpc19maW5pc2hlZCc6IHRydWUsXG4vLyBcdFx0XHRcdFx0J3VzZXInOiB1c2VyX2lkLFxuLy8gXHRcdFx0XHRcdCd1c2VyX25hbWUnOiB1c2VyX2luZm8ubmFtZSxcbi8vIFx0XHRcdFx0XHQnaGFuZGxlcic6IHVzZXJfaWQsXG4vLyBcdFx0XHRcdFx0J2hhbmRsZXJfbmFtZSc6IHVzZXJfaW5mby5uYW1lLFxuLy8gXHRcdFx0XHRcdCdoYW5kbGVyX29yZ2FuaXphdGlvbic6IHNwYWNlX3VzZXIub3JnYW5pemF0aW9uLFxuLy8gXHRcdFx0XHRcdCdoYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lJzogc3BhY2VfdXNlcl9vcmdfaW5mby5uYW1lLFxuLy8gXHRcdFx0XHRcdCdoYW5kbGVyX29yZ2FuaXphdGlvbl9mdWxsbmFtZSc6IHNwYWNlX3VzZXJfb3JnX2luZm8uZnVsbG5hbWUsXG4vLyBcdFx0XHRcdFx0J3R5cGUnOiBhY3Rpb25fdHlwZSxcbi8vIFx0XHRcdFx0XHQnc3RhcnRfZGF0ZSc6IG5ldyBEYXRlKCksXG4vLyBcdFx0XHRcdFx0J2ZpbmlzaF9kYXRlJzogbmV3IERhdGUoKSxcbi8vIFx0XHRcdFx0XHQnaXNfcmVhZCc6IGZhbHNlLFxuLy8gXHRcdFx0XHRcdCdqdWRnZSc6ICdzdWJtaXR0ZWQnLFxuLy8gXHRcdFx0XHRcdCdmcm9tX3VzZXInOiBjdXJyZW50X3VzZXJfaWQsXG4vLyBcdFx0XHRcdFx0J2Zyb21fdXNlcl9uYW1lJzogZnJvbV91c2VyX25hbWUsXG4vLyBcdFx0XHRcdFx0J2ZvcndhcmRfc3BhY2UnOiBzcGFjZV9pZCxcbi8vIFx0XHRcdFx0XHQnZm9yd2FyZF9pbnN0YW5jZSc6IG5ld19pbnNfaWQsXG4vLyBcdFx0XHRcdFx0J2Rlc2NyaXB0aW9uJzogZGVzY3JpcHRpb24sXG4vLyBcdFx0XHRcdFx0J2Zyb21fYXBwcm92ZV9pZCc6IGZyb21fYXBwcm92ZV9pZFxuLy8gXHRcdFx0XHR9O1xuXG4vLyBcdFx0XHRcdGZvcndhcmRfYXBwcm92ZXMucHVzaChhcHByKTtcbi8vIFx0XHRcdH1cblxuLy8gXHRcdFx0bmV3X2luc19pZHMucHVzaChuZXdfaW5zX2lkKTtcbi8vIFx0XHRcdHB1c2hNYW5hZ2VyLnNlbmRfbWVzc2FnZV90b19zcGVjaWZ5VXNlcihcImN1cnJlbnRfdXNlclwiLCB1c2VyX2lkKTtcbi8vIFx0XHR9KVxuXG4vLyBcdFx0aWYgKCFfLmlzRW1wdHkoZm9yd2FyZF9hcHByb3ZlcykpIHtcbi8vIFx0XHRcdHNldF9vYmoubW9kaWZpZWQgPSBuZXcgRGF0ZSgpO1xuLy8gXHRcdFx0c2V0X29iai5tb2RpZmllZF9ieSA9IGN1cnJlbnRfdXNlcl9pZDtcbi8vIFx0XHRcdHZhciByID0gZGIuaW5zdGFuY2VzLnVwZGF0ZSh7XG4vLyBcdFx0XHRcdF9pZDogaW5zdGFuY2VfaWQsXG4vLyBcdFx0XHRcdFwidHJhY2VzLl9pZFwiOiBjdXJyZW50X3RyYWNlX2lkXG4vLyBcdFx0XHR9LCB7XG4vLyBcdFx0XHRcdCRzZXQ6IHNldF9vYmosXG4vLyBcdFx0XHRcdCRhZGRUb1NldDoge1xuLy8gXHRcdFx0XHRcdCd0cmFjZXMuJC5hcHByb3Zlcyc6IHtcbi8vIFx0XHRcdFx0XHRcdCRlYWNoOiBmb3J3YXJkX2FwcHJvdmVzXG4vLyBcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9KTtcbi8vIFx0XHR9XG5cblxuLy8gXHRcdGlmIChyKSB7XG4vLyBcdFx0XHRfLmVhY2goY3VycmVudF90cmFjZS5hcHByb3ZlcywgZnVuY3Rpb24gKGEsIGlkeCkge1xuLy8gXHRcdFx0XHRpZiAoYS5faWQgPT0gZnJvbV9hcHByb3ZlX2lkKSB7XG4vLyBcdFx0XHRcdFx0dmFyIHVwZGF0ZV9yZWFkID0ge307XG4vLyBcdFx0XHRcdFx0dXBkYXRlX3JlYWRbXCJ0cmFjZXMuJC5hcHByb3Zlcy5cIiArIGlkeCArIFwiLnJlYWRfZGF0ZVwiXSA9IG5ldyBEYXRlKCk7XG4vLyBcdFx0XHRcdFx0ZGIuaW5zdGFuY2VzLnVwZGF0ZSh7XG4vLyBcdFx0XHRcdFx0XHRfaWQ6IGluc3RhbmNlX2lkLFxuLy8gXHRcdFx0XHRcdFx0XCJ0cmFjZXMuX2lkXCI6IGN1cnJlbnRfdHJhY2VfaWRcbi8vIFx0XHRcdFx0XHR9LCB7XG4vLyBcdFx0XHRcdFx0XHQkc2V0OiB1cGRhdGVfcmVhZFxuLy8gXHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9KVxuXG4vLyBcdFx0fVxuXG4vLyBcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gXHRcdFx0Y29kZTogMjAwLFxuLy8gXHRcdFx0ZGF0YTogeyBuZXdfaW5zX2lkczogbmV3X2luc19pZHMgfVxuLy8gXHRcdH0pXG4vLyBcdH0gY2F0Y2ggKGUpIHtcbi8vIFx0XHRjb25zb2xlLmVycm9yKGUuc3RhY2spXG4vLyBcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gXHRcdFx0Y29kZTogMjAwLFxuLy8gXHRcdFx0ZGF0YToge1xuLy8gXHRcdFx0XHRlcnJvcnM6IFtlXVxuLy8gXHRcdFx0fVxuLy8gXHRcdH0pXG4vLyBcdH1cblxuLy8gfSkiLCJpZiBwcm9jZXNzLmVudi5DUkVBVE9SX05PREVfRU5WID09ICdkZXZlbG9wbWVudCdcbiAgICBKc29uUm91dGVzLmFkZCAncG9zdCcsICcvdGVzdC93ZWJob29rJywgKHJlcSwgcmVzLCBuZXh0KSAtPlxuICAgICAgICB0cnlcblxuICAgICAgICAgICAgaGFzaERhdGEgPSByZXEuYm9keVxuICAgICAgICAgICAgY29uc29sZS5sb2cgJ2FjdGlvbjogJywgaGFzaERhdGEuYWN0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyAnZnJvbV91c2VyOiAnLCBoYXNoRGF0YS5mcm9tX3VzZXJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nICd0b191c2VyczogJywgaGFzaERhdGEudG9fdXNlcnNcblxuXG4gICAgICAgICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAyMDBcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge31cbiAgICAgICAgY2F0Y2ggZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvciBlLnN0YWNrXG4gICAgICAgICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuICAgICAgICAgICAgICAgIGNvZGU6IDIwMFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgZXJyb3JzOiBbe2Vycm9yTWVzc2FnZTogZS5tZXNzYWdlfV0gfSIsImlmIChwcm9jZXNzLmVudi5DUkVBVE9SX05PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gIEpzb25Sb3V0ZXMuYWRkKCdwb3N0JywgJy90ZXN0L3dlYmhvb2snLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuICAgIHZhciBlLCBoYXNoRGF0YTtcbiAgICB0cnkge1xuICAgICAgaGFzaERhdGEgPSByZXEuYm9keTtcbiAgICAgIGNvbnNvbGUubG9nKCdhY3Rpb246ICcsIGhhc2hEYXRhLmFjdGlvbik7XG4gICAgICBjb25zb2xlLmxvZygnZnJvbV91c2VyOiAnLCBoYXNoRGF0YS5mcm9tX3VzZXIpO1xuICAgICAgY29uc29sZS5sb2coJ3RvX3VzZXJzOiAnLCBoYXNoRGF0YS50b191c2Vycyk7XG4gICAgICByZXR1cm4gSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgICBjb2RlOiAyMDAsXG4gICAgICAgIGRhdGE6IHt9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZSA9IGVycm9yO1xuICAgICAgY29uc29sZS5lcnJvcihlLnN0YWNrKTtcbiAgICAgIHJldHVybiBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgIGNvZGU6IDIwMCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IGUubWVzc2FnZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRzZXRfaW5zdGFuY2Vfc3RlcF9hcHByb3ZlOiAoaW5zX2lkLCBzdGVwX2FwcHJvdmUsIHN0ZXBzQXBwcm92ZXNPcHRpb25zKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5zZXRfaW5zdGFuY2Vfc3RlcF9hcHByb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0c2V0X2luc3RhbmNlX3NraXBfc3RlcHM6IChpbnNfaWQsIHN0ZXBJZCwgYWN0aW9uKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5zZXRfaW5zdGFuY2Vfc2tpcF9zdGVwcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjIgMTU6MTg6NTlcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbmNvbnN0IHsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kcyh7XG5cblx0Z2V0X2luc3RhbmNlX2RhdGE6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgZm9ybUNhY2hlZCwgZmxvd0NhY2hlZCkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuZ2V0X2luc3RhbmNlX2RhdGEuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9XG5cbn0pO1xuIiwiY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcblxuXHRkcmFmdF9zYXZlX2luc3RhbmNlOiBmdW5jdGlvbiAoaW5zKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5kcmFmdF9zYXZlX2luc3RhbmNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRpbmJveF9zYXZlX2luc3RhbmNlOiBmdW5jdGlvbiAoYXBwcm92ZSkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuaW5ib3hfc2F2ZV9pbnN0YW5jZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH1cblxufSkiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjMtMDEtMTMgMTc6MzU6MTNcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMy0wMy0xMSAxMDo1MToyOVxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcblx0Y2NfZG86IGZ1bmN0aW9uIChhcHByb3ZlLCBjY191c2VyX2lkcywgZGVzY3JpcHRpb24pIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNjX2RvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRjY19yZWFkOiBmdW5jdGlvbiAoYXBwcm92ZSkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2NfcmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH0sXG5cblx0Y2Nfc3VibWl0OiBmdW5jdGlvbiAoaW5zX2lkLCBkZXNjcmlwdGlvbiwgbXlBcHByb3ZlLCBjY0hhc0VkaXRQZXJtaXNzaW9uKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jY19zdWJtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGNjX3JlbW92ZTogZnVuY3Rpb24gKGluc3RhbmNlSWQsIGFwcHJvdmVJZCkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2NfcmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRiYXRjaF9jYW5jZWxfY2M6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgYXBwcm92ZV9pZHMpIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmJhdGNoX2NhbmNlbF9jYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH0sXG5cblx0Y2Nfc2F2ZTogZnVuY3Rpb24gKGluc19pZCwgZGVzY3JpcHRpb24sIG15QXBwcm92ZSwgY2NIYXNFZGl0UGVybWlzc2lvbikge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2Nfc2F2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH1cbn0pIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjIgMTU6MTg6MzhcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbmNvbnN0IHsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kcyh7XG5cdC8vIOaUueS4uumAmui/h2Fwaeiwg+eUqFxuXHRmb3J3YXJkX2luc3RhbmNlOiBmdW5jdGlvbiAoaW5zdGFuY2VfaWQsIHNwYWNlX2lkLCBmbG93X2lkLCBoYXNTYXZlSW5zdGFuY2VUb0F0dGFjaG1lbnQsIGRlc2NyaXB0aW9uLCBpc0ZvcndhcmRBdHRhY2htZW50cywgc2VsZWN0ZWRVc2VycywgYWN0aW9uX3R5cGUsIHJlbGF0ZWQsIGZyb21fYXBwcm92ZV9pZCkge1xuXHRcdGlmICghdGhpcy51c2VySWQpXG5cdFx0XHR0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKCdub3QtYXV0aG9yaXplZCcpO1xuXG5cdFx0cmV0dXJuO1xuXHR9LFxuXG5cblx0Zm9yd2FyZF9yZW1vdmU6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgdHJhY2VfaWQsIGFwcHJvdmVfaWQpIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmZvcndhcmRfcmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRjYW5jZWxEaXN0cmlidXRlOiBmdW5jdGlvbiAoaW5zdGFuY2VfaWQsIGFwcHJvdmVfaWRzKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jYW5jZWxEaXN0cmlidXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxuXG5cbn0pIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjIgMTU6MTc6NTRcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbmNvbnN0IHsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kcyh7XG4gICAgY2ZzX2luc3RhbmNlc19yZW1vdmU6IGZ1bmN0aW9uIChmaWxlX2lkKSB7XG4gICAgICAgIHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2ZzX2luc3RhbmNlc19yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH0sXG5cbiAgICBjZnNfaW5zdGFuY2VzX3NldF9jdXJyZW50OiBmdW5jdGlvbiAoZmlsZV9pZCkge1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNmc19pbnN0YW5jZXNfc2V0X2N1cnJlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH0sXG5cbiAgICBjZnNfaW5zdGFuY2VzX2xvY2s6IGZ1bmN0aW9uIChmaWxlX2lkLCB1c2VyX2lkLCB1c2VyX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jZnNfaW5zdGFuY2VzX2xvY2suYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH0sXG5cbiAgICBjZnNfaW5zdGFuY2VzX3VubG9jazogZnVuY3Rpb24gKGZpbGVfaWQpIHtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jZnNfaW5zdGFuY2VzX3VubG9jay5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGRvd25sb2FkX3NwYWNlX2luc3RhbmNlX2F0dGFjaG1lbnRzX3RvX2Rpc2s6IGZ1bmN0aW9uIChzcGFjZUlkLCBjZnNSZWNvcmRJZHMpIHtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93TWV0aG9kcy5kb3dubG9hZF9zcGFjZV9pbnN0YW5jZV9hdHRhY2htZW50c190b19kaXNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9XG59KSIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRzZXRfYXBwcm92ZV9oYXZlX3JlYWQ6IChpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5zZXRfYXBwcm92ZV9oYXZlX3JlYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdGNoYW5nZV9hcHByb3ZlX2luZm86IChpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQsIGRlc2NyaXB0aW9uLCBmaW5pc2hfZGF0ZSkgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNoYW5nZV9hcHByb3ZlX2luZm8uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdHVwZGF0ZV9hcHByb3ZlX3NpZ246IChpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQsIHNpZ25fZmllbGRfY29kZSwgZGVzY3JpcHRpb24sIHNpZ25fdHlwZSwgbGFzdFNpZ25BcHByb3ZlKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy51cGRhdGVfYXBwcm92ZV9zaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuXG5cdHVwZGF0ZV9zaWduX3Nob3c6IChvYmpzLCBteUFwcHJvdmVfaWQpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy51cGRhdGVfc2lnbl9zaG93LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRpbnN0YW5jZV9yZXR1cm46IChhcHByb3ZlLCByZWFzb24pLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmluc3RhbmNlX3JldHVybi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGluc3RhbmNlX3JlbWluZDogKHJlbWluZF91c2VycywgcmVtaW5kX2NvdW50LCByZW1pbmRfZGVhZGxpbmUsIGluc3RhbmNlX2lkLCBhY3Rpb25fdHlwZXMsIHRyYWNlX2lkKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5pbnN0YW5jZV9yZW1pbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdG5leHRfc3RlcF91c2Vyc19ub3RfZm91bmQ6IChkZWFsX3R5cGUsIHN0ZXBfbmFtZSwgcGFyYW1zKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMubmV4dF9zdGVwX3VzZXJzX25vdF9mb3VuZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuX2V2YWwgPSByZXF1aXJlKCdldmFsJylcblxuTWV0ZW9yLm1ldGhvZHNcblx0aW5zdGFuY2VOdW1iZXJCdWlsZGVyOiAoc3BhY2VJZCwgbmFtZSktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuaW5zdGFuY2VOdW1iZXJCdWlsZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRjaGVja19tYWluX2F0dGFjaDogKGluc19pZCwgbmFtZSktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2hlY2tfbWFpbl9hdHRhY2guYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHJlbW92ZV9yZWxhdGVkOiAoaW5zX2lkLCByZV9pbnNfaWQpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnJlbW92ZV9yZWxhdGVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuXHR1cGRhdGVfaW5zdGFuY2VfcmVsYXRlZDogKGluc19pZCwgcmVsYXRlZF9pbnN0YW5jZXMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnVwZGF0ZV9pbnN0YW5jZV9yZWxhdGVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHR1cGRhdGVGbG93UG9zaXRpb246IChkYXRhKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMudXBkYXRlRmxvd1Bvc2l0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuXHR1cGRhdGVGbG93Um9sZTogKGRhdGEpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy51cGRhdGVGbG93Um9sZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHN0YXJ0X2Zsb3c6IChzcGFjZSwgZmxvd0lkLCBzdGFydCkgLT5cblxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuc3RhcnRfZmxvdy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRnZXRfaW5zdGFuY2VfdHJhY2VzOiAoaW5zX2lkKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5nZXRfaW5zdGFuY2VfdHJhY2VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0J2dldF9iYXRjaF9pbnN0YW5jZXMnOiAoc3BhY2UsIGNhdGVnb3J5SWQsIGZsb3dJZHMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldF9iYXRjaF9pbnN0YW5jZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdCdnZXRfYmF0Y2hfaW5zdGFuY2VzX2NvdW50JzogKHNwYWNlLCBjYXRlZ29yeUlkLCBmbG93SWRzKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5nZXRfYmF0Y2hfaW5zdGFuY2VzX2NvdW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuXHQnZ2V0X215X2FwcHJvdmVzJzogKGluc3RhbmNlSWRzKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5nZXRfbXlfYXBwcm92ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cblxuXG5cblxuXG5cblxuXG5cbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRjaGFuZ2VfZmxvd19zdGF0ZTogKGZsb3dzKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2hhbmdlX2Zsb3dfc3RhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cblxuXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblxuXHRoaWRlX2luc3RhbmNlOiAoaW5zSWQsIGlzX2hpZGRlbikgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmhpZGVfaW5zdGFuY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGdldEluc3RhbmNlVmFsdWVzOiAoaW5zSWQpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldEluc3RhbmNlVmFsdWVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCJDb29raWVzID0gcmVxdWlyZShcImNvb2tpZXNcIilcblxuZ2V0SW5zdGFuY2VSZWFkT25seSA9IChyZXEsIHJlcywgbmV4dCwgb3B0aW9ucykgLT5cblxuXHR1c2VyID0gU3RlZWRvcy5nZXRBUElMb2dpblVzZXIocmVxLCByZXMpXG5cblx0aWYgcmVxPy5xdWVyeT8uYWNjZXNzX3Rva2VuXG5cdFx0dXNlcklkID0gU3RlZWRvcy5nZXRVc2VySWRGcm9tQWNjZXNzVG9rZW4ocmVxLnF1ZXJ5LmFjY2Vzc190b2tlbilcblx0XHRpZiB1c2VySWRcblx0XHRcdHVzZXIgPSBNZXRlb3IudXNlcnMuZmluZE9uZSh7X2lkOiB1c2VySWR9KVxuXG5cdHNwYWNlSWQgPSByZXEucGFyYW1zLnNwYWNlXG5cblx0aW5zdGFuY2VJZCA9IHJlcS5wYXJhbXMuaW5zdGFuY2VfaWRcblxuXHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlSWR9KTtcblxuXHRzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHtfaWQ6IHNwYWNlSWR9KTtcblxuXHRoaWRlX3RyYWNlcyA9IHJlcS5xdWVyeT8uaGlkZV90cmFjZXNcblxuXHRpZiAhb3B0aW9uc1xuXHRcdG9wdGlvbnMgPSB7c2hvd1RyYWNlOiB0cnVlfVxuXHRlbHNlXG5cdFx0b3B0aW9ucy5zaG93VHJhY2UgPSB0cnVlXG5cblx0aWYgaGlkZV90cmFjZXMgaXMgXCIxXCJcblx0XHRpZiBvcHRpb25zXG5cdFx0XHRvcHRpb25zLnNob3dUcmFjZSA9IGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0b3B0aW9ucyA9IHtzaG93VHJhY2U6IGZhbHNlfVxuXG5cdGlmICFvcHRpb25zLnNob3dBdHRhY2htZW50c1xuXHRcdG9wdGlvbnMuc2hvd0F0dGFjaG1lbnRzID0gdHJ1ZVxuXG5cdGlmICFzcGFjZVxuXHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRkYXRhOlxuXHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIHNwYWNlXCIsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXHRpZiAgIWluc3RhbmNlXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3NpbmcgaW5zdGFuY2VcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdGlmICF1c2VyXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3NpbmcgWC1BdXRoLVRva2VuLFgtVXNlci1JZFwiLFxuXHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRyZXR1cm47XG5cblx0aWYgaW5zdGFuY2Uuc3BhY2UgIT0gc3BhY2VJZFxuXHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRkYXRhOlxuXHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIHNwYWNlIG9yIGluc3RhbmNlXCIsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXG5cblx0c3BhY2VVc2VyQ291bnQgPSBkYi5zcGFjZV91c2Vycy5maW5kKHsgdXNlcjogdXNlci5faWQsIHNwYWNlOiBzcGFjZUlkIH0pLmNvdW50KClcblxuXHRpZiBzcGFjZVVzZXJDb3VudCBpcyAwXG5cdFx0aWYgIXNwYWNlXG5cdFx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRcdGRhdGE6XG5cdFx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBzYXBjZVVzZXJcIixcblx0XHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRcdHJldHVybjtcblxuXHQj5qCh6aqMdXNlcuaYr+WQpuWvuWluc3RhbmNl5pyJ5p+l55yL5p2D6ZmQXG5cdF9oYXNQZXJtaXNzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmhhc0luc3RhbmNlUGVybWlzc2lvbnModXNlciwgaW5zdGFuY2UpXG5cblx0aWYgIV9oYXNQZXJtaXNzaW9uICAmJiBpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2Vcblx0XHRfcGFyZW50X2luc3RhbmNlcyA9IF8udW5pb24oW2luc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZV0sIGluc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMgfHwgW10pXG5cblx0XHRfaGFzUGVybWlzc2lvbiA9IF8uZmluZCBfcGFyZW50X2luc3RhbmNlcywgKF9wYXJlbnRfaWQpLT5cblx0XHRcdF9wYXJlbnRfaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDpfcGFyZW50X2lkfSwge2ZpZWxkczoge3RyYWNlczogMH19KVxuXG5cdFx0XHRyZXR1cm4gV29ya2Zsb3dNYW5hZ2VyLmhhc0luc3RhbmNlUGVybWlzc2lvbnModXNlciwgX3BhcmVudF9pbnMpXG5cblx0aWYgIV9oYXNQZXJtaXNzaW9uXG5cdFx0X2xvY2FsZSA9IFN0ZWVkb3MubG9jYWxlKHVzZXIuX2lkLCB0cnVlKVxuXHRcdGVycm9yID0gVEFQaTE4bi5fXyhcImluc3RhbmNlX3Blcm1pc3Npb25zX2Vycm9yXCIsIHt9LCBfbG9jYWxlKVxuXHRcdHJlcy5jaGFyc2V0ID0gXCJ1dGYtOFwiXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogZXJyb3IsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXHRodG1sID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpXG5cdGRhdGFCdWYgPSBuZXcgQnVmZmVyKGh0bWwpO1xuXHRyZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Jyk7XG5cdHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YUJ1Zi5sZW5ndGgpXG5cdHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtcmFuZ2UnLCBcImJ5dGVzIDAtI3tkYXRhQnVmLmxlbmd0aCAtIDF9LyN7ZGF0YUJ1Zi5sZW5ndGh9XCIpXG5cdHJlcy5zdGF0dXNDb2RlID0gMjAwXG5cdHJlcy5lbmQoaHRtbClcblxuSnNvblJvdXRlcy5hZGQgXCJnZXRcIiwgXCIvd29ya2Zsb3cvc3BhY2UvOnNwYWNlL3ZpZXcvcmVhZG9ubHkvOmluc3RhbmNlX2lkXCIsIGdldEluc3RhbmNlUmVhZE9ubHlcblxuSnNvblJvdXRlcy5hZGQgXCJnZXRcIiwgXCIvd29ya2Zsb3cvc3BhY2UvOnNwYWNlL3ZpZXcvcmVhZG9ubHkvOmluc3RhbmNlX2lkLzppbnN0YW5jZV9uYW1lXCIsIChyZXEsIHJlcywgbmV4dCktPlxuXHRyZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyk7XG5cdHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudDtmaWxlbmFtZT0nK2VuY29kZVVSSShyZXEucGFyYW1zLmluc3RhbmNlX25hbWUpKTtcblx0cmVzLnNldEhlYWRlcignVHJhbnNmZXItRW5jb2RpbmcnLCAnJylcblxuXHRvcHRpb25zID0ge2Fic29sdXRlOiB0cnVlfVxuXG5cdHJldHVybiBnZXRJbnN0YW5jZVJlYWRPbmx5KHJlcSwgcmVzLCBuZXh0LCBvcHRpb25zKVxuIyMjXG5cdOiOt+WPlueUs+ivt+WNleWIl+ihqO+8mlxuICAgIGZpbmFsX2RlY2lzaW9u77ya5a6h5om557uT5p6cXG4gICAgc3RhdGU6IOeUs+ivt+WNleeKtuaAgVxuIyMjXG5Kc29uUm91dGVzLmFkZCBcImdldFwiLCBcIi9hcGkvd29ya2Zsb3cvaW5zdGFuY2VzXCIsIChyZXEsIHJlcywgbmV4dCkgLT5cblxuXHRpZiAhU3RlZWRvcy5BUElBdXRoZW50aWNhdGlvbkNoZWNrKHJlcSwgcmVzKVxuXHRcdHJldHVybiA7XG5cblx0dXNlcl9pZCA9IHJlcS51c2VySWRcblxuXHRzcGFjZUlkID0gcmVxLmhlYWRlcnNbXCJ4LXNwYWNlLWlkXCJdXG5cblx0aWYgbm90IHNwYWNlSWRcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBYLVNwYWNlLUlkXCIsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXHRmbG93SWQgPSByZXEucXVlcnk/LmZsb3dJZFxuXG5cdGlmICFmbG93SWRcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAwLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBmbG93SWRcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdHF1ZXJ5ID0ge31cblxuXHRyZXRfc3luY190b2tlbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG5cblx0Zmxvd0lkcyA9IGZsb3dJZC5zcGxpdChcIixcIilcblxuXG5cdGZsb3dzID0gZGIuZmxvd3MuZmluZCh7X2lkOiB7JGluOiBmbG93SWRzfX0pLmZldGNoKClcblxuXHRpID0gMFxuXHR3aGlsZSBpIDwgZmxvd3MubGVuZ3RoXG5cdFx0ZiA9IGZsb3dzW2ldXG5cdFx0c3BhY2VVc2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7c3BhY2U6IGYuc3BhY2UsIHVzZXI6IHVzZXJfaWR9KVxuXHRcdGlmICFzcGFjZVVzZXJcblx0XHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdFx0ZGF0YTpcblx0XHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBObyBwZXJtaXNzaW9uLCBmbG93IGlzICN7Zi5faWR9XCIsXG5cdFx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0ZWxzZVxuXG5cdCNcdOaYr+WQpuW3peS9nOWMuueuoeeQhuWRmFxuXHRcdGlmICFTdGVlZG9zLmlzU3BhY2VBZG1pbihzcGFjZUlkLCB1c2VyX2lkKVxuXHRcdFx0c3BhY2VVc2VyT3JnYW5pemF0aW9ucyA9IGRiLm9yZ2FuaXphdGlvbnMuZmluZCh7XG5cdFx0XHRcdF9pZDoge1xuXHRcdFx0XHRcdCRpbjogc3BhY2VVc2VyLm9yZ2FuaXphdGlvbnNcblx0XHRcdFx0fVxuXHRcdFx0fSkuZmV0Y2goKTtcblxuXHRcdFx0aWYgIVdvcmtmbG93TWFuYWdlci5jYW5Nb25pdG9yKGYsIHNwYWNlVXNlciwgc3BhY2VVc2VyT3JnYW5pemF0aW9ucykgJiYgIVdvcmtmbG93TWFuYWdlci5jYW5BZG1pbihmLCBzcGFjZVVzZXIsIHNwYWNlVXNlck9yZ2FuaXphdGlvbnMpXG5cdFx0XHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0XHRcdGRhdGE6XG5cdFx0XHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBObyBwZXJtaXNzaW9uLCBmbG93IGlzICN7Zi5faWR9XCIsXG5cdFx0XHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRcdFx0cmV0dXJuO1xuXHRcdGkrK1xuXG5cblx0cXVlcnkuZmxvdyA9IHskaW46IGZsb3dJZHN9XG5cblx0cXVlcnkuc3BhY2UgPSBzcGFjZUlkXG5cblx0aWYgcmVxLnF1ZXJ5Py5zeW5jX3Rva2VuXG5cdFx0c3luY190b2tlbiA9IG5ldyBEYXRlKE51bWJlcihyZXEucXVlcnkuc3luY190b2tlbikpXG5cdFx0cXVlcnkubW9kaWZpZWQgPSB7JGd0OiBzeW5jX3Rva2VufVxuXG5cdGlmIHJlcS5xdWVyeT8uZmluYWxfZGVjaXNpb25cblx0XHRxdWVyeS5maW5hbF9kZWNpc2lvbiA9IHskaW4gOiByZXEucXVlcnkuZmluYWxfZGVjaXNpb24uc3BsaXQoXCIsXCIpfVxuXHRlbHNlXG5cdFx0cXVlcnkuZmluYWxfZGVjaXNpb24gPSB7JG5pbjogW1widGVybWluYXRlZFwiLCBcInJlamVjdGVkXCJdfVxuXG5cdGlmIHJlcS5xdWVyeT8uc3RhdGVcblx0XHRxdWVyeS5zdGF0ZSA9IHskaW46IHJlcS5xdWVyeS5zdGF0ZS5zcGxpdChcIixcIil9XG5cdGVsc2Vcblx0XHRxdWVyeS5zdGF0ZSA9IFwiY29tcGxldGVkXCJcblxuI1x05pyA5aSa6L+U5ZueNTAw5p2h5pWw5o2uXG5cdGluc3RhbmNlcyA9IGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7ZmllbGRzOiB7aW5ib3hfdWVyczogMCwgY2NfdXNlcnM6IDAsIG91dGJveF91c2VyczogMCwgdHJhY2VzOiAwLCBhdHRhY2htZW50czogMH0sIHNraXA6IDAsIGxpbWl0OiA1MDB9KS5mZXRjaCgpXG5cdGluc3RhbmNlcy5mb3JFYWNoIChpbnN0YW5jZSktPlxuXG5cdFx0YXR0YWNobWVudHMgPSBjZnMuaW5zdGFuY2VzLmZpbmQoeydtZXRhZGF0YS5pbnN0YW5jZSc6IGluc3RhbmNlLl9pZCwnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsIFwibWV0YWRhdGEuaXNfcHJpdmF0ZVwiOiB7JG5lOiB0cnVlfX0sIHtmaWVsZHM6IHtjb3BpZXM6IDB9fSkuZmV0Y2goKVxuXG5cdFx0aW5zdGFuY2UuYXR0YWNobWVudHMgPSBhdHRhY2htZW50c1xuXG5cblx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDIwMCxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwic3RhdHVzXCI6IFwic3VjY2Vzc1wiLFxuXHRcdFx0XHRcInN5bmNfdG9rZW5cIjogcmV0X3N5bmNfdG9rZW5cblx0XHRcdFx0XCJkYXRhXCI6IGluc3RhbmNlc1xuXHRyZXR1cm47XG4iLCJ2YXIgQ29va2llcywgZ2V0SW5zdGFuY2VSZWFkT25seTtcblxuQ29va2llcyA9IHJlcXVpcmUoXCJjb29raWVzXCIpO1xuXG5nZXRJbnN0YW5jZVJlYWRPbmx5ID0gZnVuY3Rpb24ocmVxLCByZXMsIG5leHQsIG9wdGlvbnMpIHtcbiAgdmFyIF9oYXNQZXJtaXNzaW9uLCBfbG9jYWxlLCBfcGFyZW50X2luc3RhbmNlcywgZGF0YUJ1ZiwgZXJyb3IsIGhpZGVfdHJhY2VzLCBodG1sLCBpbnN0YW5jZSwgaW5zdGFuY2VJZCwgcmVmLCByZWYxLCBzcGFjZSwgc3BhY2VJZCwgc3BhY2VVc2VyQ291bnQsIHVzZXIsIHVzZXJJZDtcbiAgdXNlciA9IFN0ZWVkb3MuZ2V0QVBJTG9naW5Vc2VyKHJlcSwgcmVzKTtcbiAgaWYgKHJlcSAhPSBudWxsID8gKHJlZiA9IHJlcS5xdWVyeSkgIT0gbnVsbCA/IHJlZi5hY2Nlc3NfdG9rZW4gOiB2b2lkIDAgOiB2b2lkIDApIHtcbiAgICB1c2VySWQgPSBTdGVlZG9zLmdldFVzZXJJZEZyb21BY2Nlc3NUb2tlbihyZXEucXVlcnkuYWNjZXNzX3Rva2VuKTtcbiAgICBpZiAodXNlcklkKSB7XG4gICAgICB1c2VyID0gTWV0ZW9yLnVzZXJzLmZpbmRPbmUoe1xuICAgICAgICBfaWQ6IHVzZXJJZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHNwYWNlSWQgPSByZXEucGFyYW1zLnNwYWNlO1xuICBpbnN0YW5jZUlkID0gcmVxLnBhcmFtcy5pbnN0YW5jZV9pZDtcbiAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgX2lkOiBpbnN0YW5jZUlkXG4gIH0pO1xuICBzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHtcbiAgICBfaWQ6IHNwYWNlSWRcbiAgfSk7XG4gIGhpZGVfdHJhY2VzID0gKHJlZjEgPSByZXEucXVlcnkpICE9IG51bGwgPyByZWYxLmhpZGVfdHJhY2VzIDogdm9pZCAwO1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgc2hvd1RyYWNlOiB0cnVlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLnNob3dUcmFjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGhpZGVfdHJhY2VzID09PSBcIjFcIikge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBvcHRpb25zLnNob3dUcmFjZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBzaG93VHJhY2U6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMuc2hvd0F0dGFjaG1lbnRzKSB7XG4gICAgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPSB0cnVlO1xuICB9XG4gIGlmICghc3BhY2UpIHtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc3BhY2VcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghaW5zdGFuY2UpIHtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3NpbmcgaW5zdGFuY2VcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdXNlcikge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBYLUF1dGgtVG9rZW4sWC1Vc2VyLUlkXCIsXG4gICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5zdGFuY2Uuc3BhY2UgIT09IHNwYWNlSWQpIHtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc3BhY2Ugb3IgaW5zdGFuY2VcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNwYWNlVXNlckNvdW50ID0gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG4gICAgdXNlcjogdXNlci5faWQsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSkuY291bnQoKTtcbiAgaWYgKHNwYWNlVXNlckNvdW50ID09PSAwKSB7XG4gICAgaWYgKCFzcGFjZSkge1xuICAgICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgICBjb2RlOiA0MDEsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIHNhcGNlVXNlclwiLFxuICAgICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgX2hhc1Blcm1pc3Npb24gPSBXb3JrZmxvd01hbmFnZXIuaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyh1c2VyLCBpbnN0YW5jZSk7XG4gIGlmICghX2hhc1Blcm1pc3Npb24gJiYgaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlKSB7XG4gICAgX3BhcmVudF9pbnN0YW5jZXMgPSBfLnVuaW9uKFtpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VdLCBpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzIHx8IFtdKTtcbiAgICBfaGFzUGVybWlzc2lvbiA9IF8uZmluZChfcGFyZW50X2luc3RhbmNlcywgZnVuY3Rpb24oX3BhcmVudF9pZCkge1xuICAgICAgdmFyIF9wYXJlbnRfaW5zO1xuICAgICAgX3BhcmVudF9pbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICAgIF9pZDogX3BhcmVudF9pZFxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICB0cmFjZXM6IDBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gV29ya2Zsb3dNYW5hZ2VyLmhhc0luc3RhbmNlUGVybWlzc2lvbnModXNlciwgX3BhcmVudF9pbnMpO1xuICAgIH0pO1xuICB9XG4gIGlmICghX2hhc1Blcm1pc3Npb24pIHtcbiAgICBfbG9jYWxlID0gU3RlZWRvcy5sb2NhbGUodXNlci5faWQsIHRydWUpO1xuICAgIGVycm9yID0gVEFQaTE4bi5fXyhcImluc3RhbmNlX3Blcm1pc3Npb25zX2Vycm9yXCIsIHt9LCBfbG9jYWxlKTtcbiAgICByZXMuY2hhcnNldCA9IFwidXRmLThcIjtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogZXJyb3IsXG4gICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBodG1sID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuICBkYXRhQnVmID0gbmV3IEJ1ZmZlcihodG1sKTtcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCcpO1xuICByZXMuc2V0SGVhZGVyKCdjb250ZW50LWxlbmd0aCcsIGRhdGFCdWYubGVuZ3RoKTtcbiAgcmVzLnNldEhlYWRlcignY29udGVudC1yYW5nZScsIFwiYnl0ZXMgMC1cIiArIChkYXRhQnVmLmxlbmd0aCAtIDEpICsgXCIvXCIgKyBkYXRhQnVmLmxlbmd0aCk7XG4gIHJlcy5zdGF0dXNDb2RlID0gMjAwO1xuICByZXR1cm4gcmVzLmVuZChodG1sKTtcbn07XG5cbkpzb25Sb3V0ZXMuYWRkKFwiZ2V0XCIsIFwiL3dvcmtmbG93L3NwYWNlLzpzcGFjZS92aWV3L3JlYWRvbmx5LzppbnN0YW5jZV9pZFwiLCBnZXRJbnN0YW5jZVJlYWRPbmx5KTtcblxuSnNvblJvdXRlcy5hZGQoXCJnZXRcIiwgXCIvd29ya2Zsb3cvc3BhY2UvOnNwYWNlL3ZpZXcvcmVhZG9ubHkvOmluc3RhbmNlX2lkLzppbnN0YW5jZV9uYW1lXCIsIGZ1bmN0aW9uKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBvcHRpb25zO1xuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyk7XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudDtmaWxlbmFtZT0nICsgZW5jb2RlVVJJKHJlcS5wYXJhbXMuaW5zdGFuY2VfbmFtZSkpO1xuICByZXMuc2V0SGVhZGVyKCdUcmFuc2Zlci1FbmNvZGluZycsICcnKTtcbiAgb3B0aW9ucyA9IHtcbiAgICBhYnNvbHV0ZTogdHJ1ZVxuICB9O1xuICByZXR1cm4gZ2V0SW5zdGFuY2VSZWFkT25seShyZXEsIHJlcywgbmV4dCwgb3B0aW9ucyk7XG59KTtcblxuXG4vKlxuXHTojrflj5bnlLPor7fljZXliJfooajvvJpcbiAgICBmaW5hbF9kZWNpc2lvbu+8muWuoeaJuee7k+aenFxuICAgIHN0YXRlOiDnlLPor7fljZXnirbmgIFcbiAqL1xuXG5Kc29uUm91dGVzLmFkZChcImdldFwiLCBcIi9hcGkvd29ya2Zsb3cvaW5zdGFuY2VzXCIsIGZ1bmN0aW9uKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBmLCBmbG93SWQsIGZsb3dJZHMsIGZsb3dzLCBpLCBpbnN0YW5jZXMsIHF1ZXJ5LCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHJldF9zeW5jX3Rva2VuLCBzcGFjZUlkLCBzcGFjZVVzZXIsIHNwYWNlVXNlck9yZ2FuaXphdGlvbnMsIHN5bmNfdG9rZW4sIHVzZXJfaWQ7XG4gIGlmICghU3RlZWRvcy5BUElBdXRoZW50aWNhdGlvbkNoZWNrKHJlcSwgcmVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB1c2VyX2lkID0gcmVxLnVzZXJJZDtcbiAgc3BhY2VJZCA9IHJlcS5oZWFkZXJzW1wieC1zcGFjZS1pZFwiXTtcbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgY29kZTogNDAxLFxuICAgICAgZGF0YToge1xuICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIFgtU3BhY2UtSWRcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZsb3dJZCA9IChyZWYgPSByZXEucXVlcnkpICE9IG51bGwgPyByZWYuZmxvd0lkIDogdm9pZCAwO1xuICBpZiAoIWZsb3dJZCkge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBmbG93SWRcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHF1ZXJ5ID0ge307XG4gIHJldF9zeW5jX3Rva2VuID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIGZsb3dJZHMgPSBmbG93SWQuc3BsaXQoXCIsXCIpO1xuICBmbG93cyA9IGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDoge1xuICAgICAgJGluOiBmbG93SWRzXG4gICAgfVxuICB9KS5mZXRjaCgpO1xuICBpID0gMDtcbiAgd2hpbGUgKGkgPCBmbG93cy5sZW5ndGgpIHtcbiAgICBmID0gZmxvd3NbaV07XG4gICAgc3BhY2VVc2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG4gICAgICBzcGFjZTogZi5zcGFjZSxcbiAgICAgIHVzZXI6IHVzZXJfaWRcbiAgICB9KTtcbiAgICBpZiAoIXNwYWNlVXNlcikge1xuICAgICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgICBjb2RlOiA0MDEsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBObyBwZXJtaXNzaW9uLCBmbG93IGlzIFwiICsgZi5faWQsXG4gICAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICB9XG4gICAgaWYgKCFTdGVlZG9zLmlzU3BhY2VBZG1pbihzcGFjZUlkLCB1c2VyX2lkKSkge1xuICAgICAgc3BhY2VVc2VyT3JnYW5pemF0aW9ucyA9IGRiLm9yZ2FuaXphdGlvbnMuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogc3BhY2VVc2VyLm9yZ2FuaXphdGlvbnNcbiAgICAgICAgfVxuICAgICAgfSkuZmV0Y2goKTtcbiAgICAgIGlmICghV29ya2Zsb3dNYW5hZ2VyLmNhbk1vbml0b3IoZiwgc3BhY2VVc2VyLCBzcGFjZVVzZXJPcmdhbml6YXRpb25zKSAmJiAhV29ya2Zsb3dNYW5hZ2VyLmNhbkFkbWluKGYsIHNwYWNlVXNlciwgc3BhY2VVc2VyT3JnYW5pemF0aW9ucykpIHtcbiAgICAgICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgICAgIGNvZGU6IDQwMSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBObyBwZXJtaXNzaW9uLCBmbG93IGlzIFwiICsgZi5faWQsXG4gICAgICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGkrKztcbiAgfVxuICBxdWVyeS5mbG93ID0ge1xuICAgICRpbjogZmxvd0lkc1xuICB9O1xuICBxdWVyeS5zcGFjZSA9IHNwYWNlSWQ7XG4gIGlmICgocmVmMSA9IHJlcS5xdWVyeSkgIT0gbnVsbCA/IHJlZjEuc3luY190b2tlbiA6IHZvaWQgMCkge1xuICAgIHN5bmNfdG9rZW4gPSBuZXcgRGF0ZShOdW1iZXIocmVxLnF1ZXJ5LnN5bmNfdG9rZW4pKTtcbiAgICBxdWVyeS5tb2RpZmllZCA9IHtcbiAgICAgICRndDogc3luY190b2tlblxuICAgIH07XG4gIH1cbiAgaWYgKChyZWYyID0gcmVxLnF1ZXJ5KSAhPSBudWxsID8gcmVmMi5maW5hbF9kZWNpc2lvbiA6IHZvaWQgMCkge1xuICAgIHF1ZXJ5LmZpbmFsX2RlY2lzaW9uID0ge1xuICAgICAgJGluOiByZXEucXVlcnkuZmluYWxfZGVjaXNpb24uc3BsaXQoXCIsXCIpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBxdWVyeS5maW5hbF9kZWNpc2lvbiA9IHtcbiAgICAgICRuaW46IFtcInRlcm1pbmF0ZWRcIiwgXCJyZWplY3RlZFwiXVxuICAgIH07XG4gIH1cbiAgaWYgKChyZWYzID0gcmVxLnF1ZXJ5KSAhPSBudWxsID8gcmVmMy5zdGF0ZSA6IHZvaWQgMCkge1xuICAgIHF1ZXJ5LnN0YXRlID0ge1xuICAgICAgJGluOiByZXEucXVlcnkuc3RhdGUuc3BsaXQoXCIsXCIpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBxdWVyeS5zdGF0ZSA9IFwiY29tcGxldGVkXCI7XG4gIH1cbiAgaW5zdGFuY2VzID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIGluYm94X3VlcnM6IDAsXG4gICAgICBjY191c2VyczogMCxcbiAgICAgIG91dGJveF91c2VyczogMCxcbiAgICAgIHRyYWNlczogMCxcbiAgICAgIGF0dGFjaG1lbnRzOiAwXG4gICAgfSxcbiAgICBza2lwOiAwLFxuICAgIGxpbWl0OiA1MDBcbiAgfSkuZmV0Y2goKTtcbiAgaW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICB2YXIgYXR0YWNobWVudHM7XG4gICAgYXR0YWNobWVudHMgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuICAgICAgJ21ldGFkYXRhLmluc3RhbmNlJzogaW5zdGFuY2UuX2lkLFxuICAgICAgJ21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuICAgICAgXCJtZXRhZGF0YS5pc19wcml2YXRlXCI6IHtcbiAgICAgICAgJG5lOiB0cnVlXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIGNvcGllczogMFxuICAgICAgfVxuICAgIH0pLmZldGNoKCk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmF0dGFjaG1lbnRzID0gYXR0YWNobWVudHM7XG4gIH0pO1xuICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgY29kZTogMjAwLFxuICAgIGRhdGE6IHtcbiAgICAgIFwic3RhdHVzXCI6IFwic3VjY2Vzc1wiLFxuICAgICAgXCJzeW5jX3Rva2VuXCI6IHJldF9zeW5jX3Rva2VuLFxuICAgICAgXCJkYXRhXCI6IGluc3RhbmNlc1xuICAgIH1cbiAgfSk7XG59KTtcbiIsIlxuSnNvblJvdXRlcy5hZGQgXCJnZXRcIiwgXCIvc3RlZWRvcy1jc3NcIiwgKHJlcSwgcmVzLCBuZXh0KS0+XG5cdHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2NzcycpO1xuXHRhbGxDc3MgPSBXZWJBcHAuZ2V0UmVmcmVzaGFibGVBc3NldHMoKVxuXG5cdGFsbENzc0xpbmsgPSBcIlwiXG5cblx0YWxsQ3NzLmZvckVhY2ggKGNzcykgLT5cblx0XHRpZiBfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMX1BBVEhfUFJFRklYXG5cdFx0XHRyb290VXJsID0gX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTFxuXHRcdFx0aWYgcm9vdFVybC5lbmRzV2l0aChcIi9cIilcblx0XHRcdFx0Y3NzSHJlZiA9IHJvb3RVcmwucmVwbGFjZShfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMX1BBVEhfUFJFRklYICsgXCIvXCIsIFwiXCIpICsgY3NzLnVybFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjc3NIcmVmID0gcm9vdFVybC5yZXBsYWNlKF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVgsIFwiXCIpICsgY3NzLnVybFxuXHRcdGVsc2Vcblx0XHRcdGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoY3NzLnVybClcblx0XHRhbGxDc3NMaW5rICs9IFwiQGltcG9ydCB1cmwoI3tjc3NIcmVmfSk7XCJcblxuXHRyZXMuc3RhdHVzQ29kZSA9IDIwMFxuXHRyZXMuZW5kKGFsbENzc0xpbmspIiwiSnNvblJvdXRlcy5hZGQoXCJnZXRcIiwgXCIvc3RlZWRvcy1jc3NcIiwgZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIGFsbENzcywgYWxsQ3NzTGluaztcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvY3NzJyk7XG4gIGFsbENzcyA9IFdlYkFwcC5nZXRSZWZyZXNoYWJsZUFzc2V0cygpO1xuICBhbGxDc3NMaW5rID0gXCJcIjtcbiAgYWxsQ3NzLmZvckVhY2goZnVuY3Rpb24oY3NzKSB7XG4gICAgdmFyIGNzc0hyZWYsIHJvb3RVcmw7XG4gICAgaWYgKF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVgpIHtcbiAgICAgIHJvb3RVcmwgPSBfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMO1xuICAgICAgaWYgKHJvb3RVcmwuZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIGNzc0hyZWYgPSByb290VXJsLnJlcGxhY2UoX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTF9QQVRIX1BSRUZJWCArIFwiL1wiLCBcIlwiKSArIGNzcy51cmw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjc3NIcmVmID0gcm9vdFVybC5yZXBsYWNlKF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVgsIFwiXCIpICsgY3NzLnVybDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3NzSHJlZiA9IE1ldGVvci5hYnNvbHV0ZVVybChjc3MudXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbENzc0xpbmsgKz0gXCJAaW1wb3J0IHVybChcIiArIGNzc0hyZWYgKyBcIik7XCI7XG4gIH0pO1xuICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgcmV0dXJuIHJlcy5lbmQoYWxsQ3NzTGluayk7XG59KTtcbiIsIkpzb25Sb3V0ZXMuYWRkIFwiZ2V0XCIsIFwiL2FwaS93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9kcmFmdC86Zmxvd1wiLCAocmVxLCByZXMsIG5leHQpIC0+XG5cdGlmICFTdGVlZG9zLkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2socmVxLCByZXMpXG5cdFx0cmV0dXJuXG5cblx0dXNlcl9pZCA9IHJlcS51c2VySWRcblxuXHR1c2VyID0gZGIudXNlcnMuZmluZE9uZSh7IF9pZDogdXNlcl9pZCB9KVxuXG5cdHNwYWNlSWQgPSByZXEucGFyYW1zLnNwYWNlXG5cblx0Zmxvd0lkID0gcmVxLnBhcmFtcy5mbG93XG5cblx0c3BhY2UgPSBkYi5zcGFjZXMuZmluZE9uZSh7IF9pZDogc3BhY2VJZCB9KVxuXG5cdGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHsgX2lkOiBmbG93SWQgfSwgeyBmaWVsZHM6IHsgbmFtZTogMSwgJ2N1cnJlbnQuX2lkJzogMSwgZm9ybTogMSB9IH0pXG5cblx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoeyBfaWQ6IGZsb3cuZm9ybSB9LCB7IGZpZWxkczogeyAnY3VycmVudC5faWQnOiAxIH0gfSlcblxuXHRvcHRpb25zID0ge1xuXHRcdHNob3dUcmFjZTogZmFsc2UsXG5cdFx0c2hvd0F0dGFjaG1lbnRzOiBmYWxzZSxcblx0XHR0ZW1wbGF0ZU5hbWU6IFwiZGVmYXVsdFwiLFxuXHRcdGVkaXRhYmxlOiB0cnVlLFxuXHRcdHdpZHRoOiBcIjEwMCVcIixcblx0XHRpbnN0YW5jZV9zdHlsZTogXCJpbnN0YW5jZS1kZWZhdWx0XCIsXG5cdFx0cGx1Z2luczogXCJcIlwiXG5cblx0XHRcdDxtZXRhIGh0dHAtZXF1aXY9XCJYLVVBLUNvbXBhdGlibGVcIiBjb250ZW50PVwiSUU9ZWRnZSxjaHJvbWU9MVwiIC8+XG5cdFx0XHQ8bWV0YSBuYW1lPVwiZm9ybWF0LWRldGVjdGlvblwiIGNvbnRlbnQ9XCJ0ZWxlcGhvbmU9bm9cIj5cblx0XHRcdDxtZXRhIGh0dHAtZXF1aXY9XCJ4LXJpbS1hdXRvLW1hdGNoXCIgY29udGVudD1cIm5vbmVcIj5cblx0XHRcdDx0aXRsZT4je2Zsb3cubmFtZX08L3RpdGxlPlxuXHRcdFx0PG1ldGEgY29udGVudD0nd2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCcgbmFtZT0ndmlld3BvcnQnIC8+XG5cdFx0XHQ8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoXCIgLz5cblxuXHRcdFx0PGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvY3NzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci5taW4uY3NzXCI+XG5cblx0XHRcdDxzY3JpcHQgc3JjPVwiL3BsdWdpbnMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyL2pzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci5taW4uanNcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+PC9zY3JpcHQ+XG5cblx0XHRcdDxzY3JpcHQgc3JjPVwiL3BsdWdpbnMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyL2pzL2xvY2FsZXMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLnpoLUNOLmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIGNoYXJzZXQ9XCJVVEYtOFwiPjwvc2NyaXB0PlxuXG5cdFx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIi9wbHVnaW5zL3RvYXN0ci90b2FzdHIubWluLmNzc1wiPlxuXHRcdFx0PHNjcmlwdCBzcmM9XCIvcGx1Z2lucy90b2FzdHIvdG9hc3RyLm1pbi5qc1wiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj48L3NjcmlwdD5cblx0XHRcdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiL2pzL3dvcmtmbG93X2NsaWVudC5jc3NcIj5cblx0XHRcdDxzY3JpcHQgc3JjPVwiL2pzL3dvcmtmbG93X2NsaWVudC5qc1wiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj48L3NjcmlwdD5cblx0XHRcIlwiXCJcblx0fVxuXG5cdGluc3RhbmNlID0ge1xuXHRcdGZsb3c6IGZsb3cuX2lkLFxuXHRcdGZsb3dfdmVyc2lvbjogZmxvdy5jdXJyZW50Ll9pZCxcblx0XHRmb3JtOiBmb3JtLl9pZCxcblx0XHRmb3JtX3ZlcnNpb246IGZvcm0uY3VycmVudC5faWQsXG5cdFx0dmFsdWVzOiB7fSxcblx0XHRuYW1lOiBmbG93Lm5hbWUsXG5cdFx0c3BhY2U6IHNwYWNlSWRcblx0fVxuXG5cdGh0bWwgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblxuXHRkYXRhQnVmID0gbmV3IEJ1ZmZlcihodG1sKVxuXG5cdHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YUJ1Zi5sZW5ndGgpXG5cblx0cmVzLnNldEhlYWRlcignY29udGVudC1yYW5nZScsIFwiYnl0ZXMgMC0je2RhdGFCdWYubGVuZ3RoIC0gMX0vI3tkYXRhQnVmLmxlbmd0aH1cIilcblxuXHRyZXMuc3RhdHVzQ29kZSA9IDIwMFxuXG5cdHJlcy5lbmQoaHRtbClcbiIsIkpzb25Sb3V0ZXMuYWRkKFwiZ2V0XCIsIFwiL2FwaS93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9kcmFmdC86Zmxvd1wiLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuICB2YXIgZGF0YUJ1ZiwgZmxvdywgZmxvd0lkLCBmb3JtLCBodG1sLCBpbnN0YW5jZSwgb3B0aW9ucywgc3BhY2UsIHNwYWNlSWQsIHVzZXIsIHVzZXJfaWQ7XG4gIGlmICghU3RlZWRvcy5BUElBdXRoZW50aWNhdGlvbkNoZWNrKHJlcSwgcmVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB1c2VyX2lkID0gcmVxLnVzZXJJZDtcbiAgdXNlciA9IGRiLnVzZXJzLmZpbmRPbmUoe1xuICAgIF9pZDogdXNlcl9pZFxuICB9KTtcbiAgc3BhY2VJZCA9IHJlcS5wYXJhbXMuc3BhY2U7XG4gIGZsb3dJZCA9IHJlcS5wYXJhbXMuZmxvdztcbiAgc3BhY2UgPSBkYi5zcGFjZXMuZmluZE9uZSh7XG4gICAgX2lkOiBzcGFjZUlkXG4gIH0pO1xuICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgX2lkOiBmbG93SWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgICdjdXJyZW50Ll9pZCc6IDEsXG4gICAgICBmb3JtOiAxXG4gICAgfVxuICB9KTtcbiAgZm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoe1xuICAgIF9pZDogZmxvdy5mb3JtXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgICdjdXJyZW50Ll9pZCc6IDFcbiAgICB9XG4gIH0pO1xuICBvcHRpb25zID0ge1xuICAgIHNob3dUcmFjZTogZmFsc2UsXG4gICAgc2hvd0F0dGFjaG1lbnRzOiBmYWxzZSxcbiAgICB0ZW1wbGF0ZU5hbWU6IFwiZGVmYXVsdFwiLFxuICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBpbnN0YW5jZV9zdHlsZTogXCJpbnN0YW5jZS1kZWZhdWx0XCIsXG4gICAgcGx1Z2luczogXCJcXG48bWV0YSBodHRwLWVxdWl2PVxcXCJYLVVBLUNvbXBhdGlibGVcXFwiIGNvbnRlbnQ9XFxcIklFPWVkZ2UsY2hyb21lPTFcXFwiIC8+XFxuPG1ldGEgbmFtZT1cXFwiZm9ybWF0LWRldGVjdGlvblxcXCIgY29udGVudD1cXFwidGVsZXBob25lPW5vXFxcIj5cXG48bWV0YSBodHRwLWVxdWl2PVxcXCJ4LXJpbS1hdXRvLW1hdGNoXFxcIiBjb250ZW50PVxcXCJub25lXFxcIj5cXG48dGl0bGU+XCIgKyBmbG93Lm5hbWUgKyBcIjwvdGl0bGU+XFxuPG1ldGEgY29udGVudD0nd2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCcgbmFtZT0ndmlld3BvcnQnIC8+XFxuPG1ldGEgbmFtZT1cXFwidmlld3BvcnRcXFwiIGNvbnRlbnQ9XFxcIndpZHRoPWRldmljZS13aWR0aFxcXCIgLz5cXG5cXG48bGluayByZWw9XFxcInN0eWxlc2hlZXRcXFwiIHR5cGU9XFxcInRleHQvY3NzXFxcIiBocmVmPVxcXCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvY3NzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci5taW4uY3NzXFxcIj5cXG5cXG48c2NyaXB0IHNyYz1cXFwiL3BsdWdpbnMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyL2pzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci5taW4uanNcXFwiIHR5cGU9XFxcInRleHQvamF2YXNjcmlwdFxcXCI+PC9zY3JpcHQ+XFxuXFxuPHNjcmlwdCBzcmM9XFxcIi9wbHVnaW5zL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci9qcy9sb2NhbGVzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci56aC1DTi5qc1xcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIiBjaGFyc2V0PVxcXCJVVEYtOFxcXCI+PC9zY3JpcHQ+XFxuXFxuPGxpbmsgcmVsPVxcXCJzdHlsZXNoZWV0XFxcIiB0eXBlPVxcXCJ0ZXh0L2Nzc1xcXCIgaHJlZj1cXFwiL3BsdWdpbnMvdG9hc3RyL3RvYXN0ci5taW4uY3NzXFxcIj5cXG48c2NyaXB0IHNyYz1cXFwiL3BsdWdpbnMvdG9hc3RyL3RvYXN0ci5taW4uanNcXFwiIHR5cGU9XFxcInRleHQvamF2YXNjcmlwdFxcXCI+PC9zY3JpcHQ+XFxuPGxpbmsgcmVsPVxcXCJzdHlsZXNoZWV0XFxcIiB0eXBlPVxcXCJ0ZXh0L2Nzc1xcXCIgaHJlZj1cXFwiL2pzL3dvcmtmbG93X2NsaWVudC5jc3NcXFwiPlxcbjxzY3JpcHQgc3JjPVxcXCIvanMvd29ya2Zsb3dfY2xpZW50LmpzXFxcIiB0eXBlPVxcXCJ0ZXh0L2phdmFzY3JpcHRcXFwiPjwvc2NyaXB0PlwiXG4gIH07XG4gIGluc3RhbmNlID0ge1xuICAgIGZsb3c6IGZsb3cuX2lkLFxuICAgIGZsb3dfdmVyc2lvbjogZmxvdy5jdXJyZW50Ll9pZCxcbiAgICBmb3JtOiBmb3JtLl9pZCxcbiAgICBmb3JtX3ZlcnNpb246IGZvcm0uY3VycmVudC5faWQsXG4gICAgdmFsdWVzOiB7fSxcbiAgICBuYW1lOiBmbG93Lm5hbWUsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfTtcbiAgaHRtbCA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUh0bWwodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgZGF0YUJ1ZiA9IG5ldyBCdWZmZXIoaHRtbCk7XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YUJ1Zi5sZW5ndGgpO1xuICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXJhbmdlJywgXCJieXRlcyAwLVwiICsgKGRhdGFCdWYubGVuZ3RoIC0gMSkgKyBcIi9cIiArIGRhdGFCdWYubGVuZ3RoKTtcbiAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gIHJldHVybiByZXMuZW5kKGh0bWwpO1xufSk7XG4iLCJBcnJheS5wcm90b3R5cGUuZmlsdGVyUHJvcGVydHkgPSBmdW5jdGlvbihoLCBsKXtcbiAgICB2YXIgZyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtcbiAgICAgICAgdmFyIG0gPSB0PyB0W2hdOm51bGw7XG4gICAgICAgIHZhciBkID0gZmFsc2U7XG4gICAgICAgIGlmKG0gaW5zdGFuY2VvZiBBcnJheSl7XG4gICAgICAgICAgICBkID0gbS5pbmNsdWRlcyhsKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBkID0gKGwgPT09IHVuZGVmaW5lZCk/IGZhbHNlOm09PWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZCl7XG4gICAgICAgICAgICBnLnB1c2godCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZztcbn07XG5cbkFycmF5LnByb3RvdHlwZS5nZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uKGspe1xuICAgIHZhciB2ID0gbmV3IEFycmF5KCk7XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe1xuICAgICAgICB2YXIgbSA9IHQ/IHRba106bnVsbDtcbiAgICAgICAgdi5wdXNoKG0pO1xuICAgIH0pO1xuICAgIHJldHVybiB2O1xufVxuXG5BcnJheS5wcm90b3R5cGUuZ2V0RWFjaCA9IGZ1bmN0aW9uKGNvZGUpe1xuICAgIHZhciByZXYgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwIDsgaSA8IHRoaXMubGVuZ3RoIDsgaSsrKXtcbiAgICAgICAgcmV2LnB1c2godGhpc1tpXVtjb2RlXSk7XG4gICAgfVxuICAgIHJldHVybiByZXY7XG59O1xuXG5BcnJheS5wcm90b3R5cGUudW5pcSA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIGEgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24oYil7IFxuICAgICAgICBpZihhLmluZGV4T2YoYikgPCAwKVxuICAgICAgICAgICAge2FbYS5sZW5ndGhdID0gYn1cbiAgICB9KTtcbiAgICByZXR1cm4gYTtcbn07XG5cbkZvcm1fZm9ybXVsYSA9IHt9O1xuXG5cbkZvcm1fZm9ybXVsYS5taXhpbiA9IGZ1bmN0aW9uKGRlc3QsIHNyYyl7XG4gICAgZm9yKHZhciBrZXkgaW4gc3JjKXtcbiAgICAgICAgZGVzdFtrZXldID0gc3JjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBkZXN0O1xufTtcblxuXG5Gb3JtX2Zvcm11bGEuaGFuZGVyVXNlck9iamVjdCA9IGZ1bmN0aW9uKHUpe1xuXG4gICAgaWYodSBpbnN0YW5jZW9mIEFycmF5KXtcbiAgICAgICAgdmFyIHVzZXIgPSB7fTtcblxuICAgICAgICB1c2VyLm5hbWUgPSB1LmdldFByb3BlcnR5KFwibmFtZVwiKVxuICAgICAgICB1c2VyLm9yZ2FuaXphdGlvbiA9IHt9O1xuICAgICAgICB1c2VyLm9yZ2FuaXphdGlvbi5uYW1lID0gdS5nZXRQcm9wZXJ0eShcIm9yZ2FuaXphdGlvblwiKS5nZXRQcm9wZXJ0eShcIm5hbWVcIik7XG4gICAgICAgIHVzZXIub3JnYW5pemF0aW9uLmZ1bGxuYW1lID0gdS5nZXRQcm9wZXJ0eShcIm9yZ2FuaXphdGlvblwiKS5nZXRQcm9wZXJ0eShcImZ1bGxuYW1lXCIpO1xuXG4gICAgICAgIHVzZXIuaHIgPSB1LmdldFByb3BlcnR5KFwiaHJcIilcblxuICAgICAgICB1c2VyLnNvcnRfbm8gPSB1LmdldFByb3BlcnR5KFwic29ydF9ub1wiKVxuXG5cdFx0dXNlci5tb2JpbGUgPSB1LmdldFByb3BlcnR5KFwibW9iaWxlXCIpXG5cblx0XHR1c2VyLndvcmtfcGhvbmUgPSB1LmdldFByb3BlcnR5KFwid29ya19waG9uZVwiKVxuXG5cdFx0dXNlci5wb3NpdGlvbiA9IHUuZ2V0UHJvcGVydHkoXCJwb3NpdGlvblwiKVxuXG4gICAgICAgIHZhciB1c2VyUm9sZXMgPSB1LmdldFByb3BlcnR5KFwicm9sZXNcIik7XG4gICAgICAgIHZhciByb2xlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB1c2VyUm9sZXMuZm9yRWFjaChmdW5jdGlvbihpKXtcbiAgICAgICAgICAgIHJvbGVzID0gcm9sZXMuY29uY2F0KGkpO1xuICAgICAgICB9KTsgXG4gICAgICAgIHJvbGVzLnVuaXEoKTtcbiAgICAgICAgdXNlci5yb2xlcyA9IHJvbGVzO1xuICAgICAgICByZXR1cm4gdXNlcjtcbiAgICB9ZWxzZXtcbiAgICAgICAgcmV0dXJuIHU7XG4gICAgfVxufVxuXG5Gb3JtX2Zvcm11bGEuaGFuZGVyT3JnT2JqZWN0ID0gZnVuY3Rpb24obyl7XG5cbiAgICBpZihvIGluc3RhbmNlb2YgQXJyYXkpe1xuICAgICAgICB2YXIgb3JnID0ge307XG5cdFx0b3JnLmlkID0gby5nZXRQcm9wZXJ0eShcIl9pZFwiKTtcbiAgICAgICAgb3JnLm5hbWUgPSBvLmdldFByb3BlcnR5KFwibmFtZVwiKTtcbiAgICAgICAgb3JnLmZ1bGxuYW1lID0gby5nZXRQcm9wZXJ0eShcImZ1bGxuYW1lXCIpO1xuXG4gICAgICAgIHJldHVybiBvcmc7XG4gICAgfWVsc2V7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cbn1cblxuXG5cbi8qKlxuICAgICog6I635b6X5YWs5byP6ZyA6KaB55So5Yiw55qE5Yid5aeL5YC8XG4gICAgKiDovpPlhaXvvJpmaWVsZHMsIHZhbHVlcywgYXBwbGljYW50XG4gICAgKiDovpPlh7rvvJpfX3ZhbHVlc1xuKiovXG5Gb3JtX2Zvcm11bGEuaW5pdF9mb3JtdWxhX3ZhbHVlcyA9IGZ1bmN0aW9uKGZpZWxkcywgYXV0b0Zvcm1Eb2MsIGFwcHJvdmVyLCBhcHBsaWNhbnQsIHNwYWNlSWQpe1xuICAgIHZhciBfX3ZhbHVlcyA9IHt9O1xuICAgIC8v55Sz6K+35Y2V5Lit5aGr55qE5YC85aSE55CGXG4gICAgaWYoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggJiYgYXV0b0Zvcm1Eb2MpIHtcbiAgICAgICAgLy9kZWJ1Z2dlcjtcbiAgICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpe1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWVsZC50eXBlO1xuICAgICAgICAgICAgaWYodHlwZSkge1xuICAgICAgICAgICAgICAgIGlmKHR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgKiDlsIbooajmoLzlrZfmrrXnmoTlgLzov5vooYzovazmjaLlkI7kvKDlhaVfX3ZhbHVlc+S4rVxuICAgICAgICAgICAgICAgICAgICAqIHZhbHVlc+S4reihqOagvOeahOWAvOagvOW8j+S4ulxuICAgICAgICAgICAgICAgICAgICAqIFt7XCJhXCI6MSxcImJcIjo0fSx7XCJhXCI6MixcImJcIjo1fSx7XCJhXCI6MyxcImJcIjo2fV1cbiAgICAgICAgICAgICAgICAgICAgKiBfX3ZhbHVlc+mcgOimgei9rOWMluS4uuS4i+mdouagvOW8j+S4lOWSjOS4u+ihqOeahOWAvOS4gOagt+aUvuWIsOesrOS4gOWxglxuICAgICAgICAgICAgICAgICAgICAqIHtcImFcIjpbMSwyLDNdLFwiYlwiOls0LDUsNl19XG4gICAgICAgICAgICAgICAgICAgICoqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVGaWVsZHMgPSBmaWVsZC5zZmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVWYWx1ZXMgPSBhdXRvRm9ybURvY1tmaWVsZC5jb2RlXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFUYWJsZVZhbHVlcyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgX190YWJsZVZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAvL+aMieWFrOW8j+eahOagvOW8j+i9rOaNouWAvOS4ul9fdGFibGVWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgaWYodGFibGVGaWVsZHMgJiYgdGFibGVGaWVsZHMubGVuZ3RoICYmIHRhYmxlVmFsdWVzICYmIHRhYmxlVmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlVmFsdWVzLmZvckVhY2goZnVuY3Rpb24odGFibGVWYWx1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYVRhYmxlVmFsdWVzLnB1c2goRm9ybV9mb3JtdWxhLmluaXRfZm9ybXVsYV92YWx1ZXModGFibGVGaWVsZHMsIHRhYmxlVmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/mjInkuLvooajnmoTmoLzlvI/ovazmjaJfX3RhYmxlVmFsdWVz5Yqg5YiwXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKHRhYmxlZmllbGQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGFibGVWYWx1ZXNbdGFibGVmaWVsZC5jb2RlXSA9IGZvcm11bGFUYWJsZVZhbHVlcy5nZXRFYWNoKHRhYmxlZmllbGQuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVzID0gRm9ybV9mb3JtdWxhLm1peGluKF9fdmFsdWVzLCBfX3RhYmxlVmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAndXNlcicpe1xuICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlc1tmaWVsZC5jb2RlXSA9IEZvcm1fZm9ybXVsYS5oYW5kZXJVc2VyT2JqZWN0KFdvcmtmbG93TWFuYWdlci5nZXRGb3JtdWxhVXNlck9iamVjdHMoc3BhY2VJZCwgYXV0b0Zvcm1Eb2NbZmllbGQuY29kZV0pKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnZ3JvdXAnKXtcbiAgICAgICAgICAgICAgICAgICAgX192YWx1ZXNbZmllbGQuY29kZV0gPSBGb3JtX2Zvcm11bGEuaGFuZGVyT3JnT2JqZWN0KFdvcmtmbG93TWFuYWdlci5nZXRGb3JtdWxhT3JnT2JqZWN0cyhhdXRvRm9ybURvY1tmaWVsZC5jb2RlXSkpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdvZGF0YScpe1xuXHRcdFx0XHRcdF9fdmFsdWVzW2ZpZWxkLmNvZGVdID0gYXV0b0Zvcm1Eb2NbZmllbGQuY29kZV0gfHwge31cblxuXHRcdFx0XHR9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+atpOWkhOS8oHNwYWNlSWTnu5npgInkurrmjqfku7bnmoTml6fmlbDmja7orqHnrpdyb2xlc+WSjG9yZ2FuaXphdGlvblxuICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlc1tmaWVsZC5jb2RlXSA9IGF1dG9Gb3JtRG9jW2ZpZWxkLmNvZGVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICAgIC8v5b2T5YmN5aSE55CG5Lq6XG4gICAgX192YWx1ZXNbXCJhcHByb3ZlclwiXSA9IFdvcmtmbG93TWFuYWdlci5nZXRGb3JtdWxhVXNlck9iamVjdChzcGFjZUlkLCBhcHByb3Zlcik7XG4gICAgLy/nlLPor7fkurpcbiAgICBfX3ZhbHVlc1tcImFwcGxpY2FudFwiXSA9IFdvcmtmbG93TWFuYWdlci5nZXRGb3JtdWxhVXNlck9iamVjdChzcGFjZUlkLCBhcHBsaWNhbnQpO1xuXG4gICAgcmV0dXJuIF9fdmFsdWVzO1xufTtcblxuIiwiTWV0ZW9yLnB1Ymxpc2ggJ2NhdGVnb3JpZXMnLCAoc3BhY2VJZCkgLT5cblx0Y2hlY2sgc3BhY2VJZCwgU3RyaW5nXG5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cblx0cmV0dXJuIGRiLmNhdGVnb3JpZXMuZmluZCh7IHNwYWNlOiBzcGFjZUlkIH0sIHsgZmllbGRzOiB7IG5hbWU6IDEsIHNwYWNlOiAxLCBzb3J0X25vOiAxLCBhcHA6IDEgfSB9KSIsIk1ldGVvci5wdWJsaXNoKCdjYXRlZ29yaWVzJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICBjaGVjayhzcGFjZUlkLCBTdHJpbmcpO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBkYi5jYXRlZ29yaWVzLmZpbmQoe1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIHNvcnRfbm86IDEsXG4gICAgICBhcHA6IDFcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJcbk1ldGVvci5wdWJsaXNoICdjZnNfaW5zdGFuY2VzJywgKGluc3RhbmNlSWRzKS0+XG5cdGNoZWNrKGluc3RhbmNlSWRzLCBBcnJheSlcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGluc3RhbmNlSWRzXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIGNmcy5pbnN0YW5jZXMuZmluZCh7J21ldGFkYXRhLmluc3RhbmNlJzogeyRpbjogaW5zdGFuY2VJZHN9ICwgJG9yOiBbeydtZXRhZGF0YS5pc19wcml2YXRlJzogeyRuZTogdHJ1ZX19LHsnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHRydWUsIFwibWV0YWRhdGEub3duZXJcIjogdGhpcy51c2VySWR9XX0pXG4iLCJNZXRlb3IucHVibGlzaCgnY2ZzX2luc3RhbmNlcycsIGZ1bmN0aW9uKGluc3RhbmNlSWRzKSB7XG4gIGNoZWNrKGluc3RhbmNlSWRzLCBBcnJheSk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghaW5zdGFuY2VJZHMpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuICAgICdtZXRhZGF0YS5pbnN0YW5jZSc6IHtcbiAgICAgICRpbjogaW5zdGFuY2VJZHNcbiAgICB9LFxuICAgICRvcjogW1xuICAgICAge1xuICAgICAgICAnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHtcbiAgICAgICAgICAkbmU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICAnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHRydWUsXG4gICAgICAgIFwibWV0YWRhdGEub3duZXJcIjogdGhpcy51c2VySWRcbiAgICAgIH1cbiAgICBdXG4gIH0pO1xufSk7XG4iLCJcblxuTWV0ZW9yLnB1Ymxpc2ggJ2Zsb3dfcG9zaXRpb25zJywgKHNwYWNlSWQpLT5cblx0XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblx0XG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHJldHVybiBkYi5mbG93X3Bvc2l0aW9ucy5maW5kKHtzcGFjZTogc3BhY2VJZH0sIHtmaWVsZHM6IHtyb2xlOjEsIHVzZXJzOiAxLCBvcmc6IDF9fSk7XG4iLCJNZXRlb3IucHVibGlzaCgnZmxvd19wb3NpdGlvbnMnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dfcG9zaXRpb25zLmZpbmQoe1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIHJvbGU6IDEsXG4gICAgICB1c2VyczogMSxcbiAgICAgIG9yZzogMVxuICAgIH1cbiAgfSk7XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlICdmbG93X3Bvc2l0aW9uc190YWJ1bGFyJywgKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpLT5cblx0Y2hlY2sodGFibGVOYW1lLCBTdHJpbmcpO1xuXHRjaGVjayhpZHMsIEFycmF5KTtcblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dGhpcy51bmJsb2NrKClcblxuXHRmaW5kOiAtPlxuXHRcdHRoaXMudW5ibG9jaygpXG5cdFx0ZGIuZmxvd19wb3NpdGlvbnMuZmluZCB7X2lkOiB7JGluOiBpZHN9fSwgZmllbGRzOiBmaWVsZHNcblxuXHRjaGlsZHJlbjogW1xuXHRcdHtcblx0XHRcdGZpbmQ6IChwb3NpdGlvbikgLT5cblx0XHRcdFx0QHVuYmxvY2soKVxuXHRcdFx0XHQjIFB1Ymxpc2ggdGhlIHJlbGF0ZWQgZmxvd19yb2xlc1xuXHRcdFx0XHRkYi5mbG93X3JvbGVzLmZpbmQgeyBfaWQ6IHBvc2l0aW9uLnJvbGUgfSwgZmllbGRzOiBuYW1lOiAxXG5cdFx0fVxuXHRcdHtcblx0XHRcdGZpbmQ6IChwb3NpdGlvbikgLT5cblx0XHRcdFx0QHVuYmxvY2soKVxuXHRcdFx0XHQjIFB1Ymxpc2ggdGhlIHJlbGF0ZWQgb3JnYW5pemF0aW9uc1xuXHRcdFx0XHRkYi5vcmdhbml6YXRpb25zLmZpbmQgeyBfaWQ6IHBvc2l0aW9uLm9yZyB9LCBmaWVsZHM6IGZ1bGxuYW1lOiAxXG5cdFx0fVxuXHRcdHtcblx0XHRcdGZpbmQ6IChwb3NpdGlvbikgLT5cblx0XHRcdFx0QHVuYmxvY2soKVxuXHRcdFx0XHQjIFB1Ymxpc2ggdGhlIHJlbGF0ZWQgdXNlclxuXHRcdFx0XHRkYi5zcGFjZV91c2Vycy5maW5kIHtcblx0XHRcdFx0XHRzcGFjZTogcG9zaXRpb24uc3BhY2Vcblx0XHRcdFx0XHR1c2VyOiAkaW46IHBvc2l0aW9uLnVzZXJzXG5cdFx0XHRcdH0sIGZpZWxkczpcblx0XHRcdFx0XHRzcGFjZTogMVxuXHRcdFx0XHRcdHVzZXI6IDFcblx0XHRcdFx0XHRuYW1lOiAxXG5cdFx0fVxuXHRdIiwiTWV0ZW9yLnB1Ymxpc2hDb21wb3NpdGUoJ2Zsb3dfcG9zaXRpb25zX3RhYnVsYXInLCBmdW5jdGlvbih0YWJsZU5hbWUsIGlkcywgZmllbGRzKSB7XG4gIGNoZWNrKHRhYmxlTmFtZSwgU3RyaW5nKTtcbiAgY2hlY2soaWRzLCBBcnJheSk7XG4gIGNoZWNrKGZpZWxkcywgTWF0Y2guT3B0aW9uYWwoT2JqZWN0KSk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHRoaXMudW5ibG9jaygpO1xuICByZXR1cm4ge1xuICAgIGZpbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy51bmJsb2NrKCk7XG4gICAgICByZXR1cm4gZGIuZmxvd19wb3NpdGlvbnMuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogaWRzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiBmaWVsZHNcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIuZmxvd19yb2xlcy5maW5kKHtcbiAgICAgICAgICAgIF9pZDogcG9zaXRpb24ucm9sZVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBuYW1lOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIub3JnYW5pemF0aW9ucy5maW5kKHtcbiAgICAgICAgICAgIF9pZDogcG9zaXRpb24ub3JnXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIGZ1bGxuYW1lOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogcG9zaXRpb24uc3BhY2UsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICRpbjogcG9zaXRpb24udXNlcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgICAgIHVzZXI6IDEsXG4gICAgICAgICAgICAgIG5hbWU6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn0pO1xuIiwiXG5cblx0TWV0ZW9yLnB1Ymxpc2ggJ2Zsb3dfcm9sZXMnLCAoc3BhY2VJZCktPlxuXHRcdFxuXHRcdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXHRcdFxuXHRcdHVubGVzcyBzcGFjZUlkXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRcdHJldHVybiBkYi5mbG93X3JvbGVzLmZpbmQoe3NwYWNlOiBzcGFjZUlkfSwge2ZpZWxkczoge25hbWU6MX19KTtcbiIsIk1ldGVvci5wdWJsaXNoKCdmbG93X3JvbGVzJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBkYi5mbG93X3JvbGVzLmZpbmQoe1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDFcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJNZXRlb3IucHVibGlzaCAnZmxvd3MnLCAoc3BhY2VJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0IyDnrKzkuIDmrKHorqLpmIXml7bliJ3lp4vljJblt6XkvZzljLpcblx0aWYgZGIuZmxvd3MuZmluZCh7c3BhY2U6IHNwYWNlSWR9KS5jb3VudCgpID09IDBcblx0XHRkYi5zcGFjZXMuY3JlYXRlVGVtcGxhdGVGb3JtQW5kRmxvdyhzcGFjZUlkKVxuXG5cdHJldHVybiBkYi5mbG93cy5maW5kKHtzcGFjZTogc3BhY2VJZH0sIHtcblx0XHRmaWVsZHM6IHtcblx0XHRcdG5hbWU6IDEsXG5cdFx0XHRmb3JtOiAxLFxuXHRcdFx0c3RhdGU6IDEsXG5cdFx0XHRwZXJtczogMSxcblx0XHRcdHNwYWNlOiAxLFxuXHRcdFx0Y29tcGFueV9pZDogMSxcblx0XHRcdHNvcnRfbm86IDEsXG5cdFx0XHRkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuXHRcdFx0ZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuXHRcdFx0ZW5hYmxlX2FtaXNmb3JtOiAxXG5cdFx0fVxuXHR9KVxuXG5NZXRlb3IucHVibGlzaCAnaW5zdGFuY2VfZmxvdycsIChzcGFjZUlkLCBmbG93SWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIGRiLmZsb3dzLmZpbmQoe19pZDogZmxvd0lkLCBzcGFjZTogc3BhY2VJZH0sIHtcblx0XHRmaWVsZHM6IHtcblx0XHRcdG5hbWU6IDEsXG5cdFx0XHRmb3JtOiAxLFxuXHRcdFx0c3RhdGU6IDEsXG5cdFx0XHRwZXJtczogMSxcblx0XHRcdHNwYWNlOiAxLFxuXHRcdFx0Y29tcGFueV9pZDogMSxcblx0XHRcdHNvcnRfbm86IDEsXG5cdFx0XHRkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuXHRcdFx0ZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuXHRcdFx0ZW5hYmxlX2FtaXNmb3JtOiAxXG5cdFx0fVxuXHR9KVxuXG5cbk1ldGVvci5wdWJsaXNoICdmbG93X3ZlcnNpb24nLCAoc3BhY2VJZCwgZmxvd0lkLCB2ZXJzaW9uSWQpIC0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgZmxvd0lkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyB2ZXJzaW9uSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRzZWxmID0gdGhpcztcblxuXHRnZXRGbG93VmVyc2lvbiA9IChpZCAsIHZlcnNpb25JZCktPlxuXHRcdGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtfaWQgOiBpZH0pO1xuXHRcdGlmIGZsb3dcblx0XHRcdGZsb3dfdmVyc2lvbiA9IGZsb3cuY3VycmVudFxuXHRcdFx0Zmxvd192ZXJzaW9uLmxhdGVzdCA9IHRydWVcblxuXHRcdFx0aWYgZmxvd192ZXJzaW9uLl9pZCAhPSB2ZXJzaW9uSWRcblx0XHRcdFx0Zmxvd192ZXJzaW9uID0gZmxvdy5oaXN0b3J5cy5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIHZlcnNpb25JZClcblx0XHRcdFx0Zmxvd192ZXJzaW9uLmxhdGVzdCA9IGZhbHNlXG5cblx0XHRcdHJldHVybiBmbG93X3ZlcnNpb25cblx0aGFuZGxlID0gZGIuZmxvd3MuZmluZCh7X2lkOiBmbG93SWR9LCB7ZmllbGRzOiB7X2lkOiAxLCBcImN1cnJlbnQubW9kaWZpZWRcIjogMX19KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRzZWxmLmNoYW5nZWQoXCJmbG93X3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rmxvd1ZlcnNpb24oaWQsIHZlcnNpb25JZCkpO1xuXHR9XG5cblxuXHRzZWxmLmFkZGVkKFwiZmxvd192ZXJzaW9uc1wiLCB2ZXJzaW9uSWQsIGdldEZsb3dWZXJzaW9uKGZsb3dJZCwgdmVyc2lvbklkKSk7XG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKClcblxuTWV0ZW9yLnB1Ymxpc2ggJ2Rpc3RyaWJ1dGVfb3B0aW9uYWxfZmxvd3MnLCAoZmxvd19pZHMpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93X2lkc1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRyZXR1cm4gZGIuZmxvd3MuZmluZCh7X2lkOiB7JGluOiBmbG93X2lkc319LCB7XG5cdFx0ZmllbGRzOiB7XG5cdFx0XHRuYW1lOiAxLFxuXHRcdFx0Zm9ybTogMSxcblx0XHRcdHN0YXRlOiAxLFxuXHRcdFx0cGVybXM6IDEsXG5cdFx0XHRzcGFjZTogMSxcblx0XHRcdGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG5cdFx0XHRkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG5cdFx0XHRkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb246IDEsXG5cdFx0XHRjb21wYW55X2lkOiAxLFxuXHRcdFx0ZW5hYmxlX2FtaXNmb3JtOiAxXG5cdFx0fVxuXHR9KVxuXG5NZXRlb3IucHVibGlzaCAnZmxvdycsIChzcGFjZUlkLCBmbG93SWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRyZXR1cm4gZGIuZmxvd3MuZmluZCh7X2lkOiBmbG93SWQsIHNwYWNlOiBzcGFjZUlkfSwge1xuXHRcdGZpZWxkczoge1xuXHRcdFx0cHJpbnRfdGVtcGxhdGU6IDEsXG5cdFx0XHRpbnN0YW5jZV90ZW1wbGF0ZTogMSxcblx0XHRcdGV2ZW50czogMSxcblx0XHRcdGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG5cdFx0XHRkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG5cdFx0XHR1cGxvYWRfYWZ0ZXJfYmVpbmdfZGlzdHJpYnV0ZWQ6IDEsXG5cdFx0XHRkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb246IDEsXG5cdFx0XHRjb21wYW55X2lkOiAxLFxuXHRcdFx0YWxsb3dfc2VsZWN0X3N0ZXA6IDEsXG5cdFx0XHRlbmFibGVfYW1pc2Zvcm06IDFcblx0XHR9XG5cdH0pXG5NZXRlb3IucHVibGlzaCAnZmxvd19maWxlcycsIChzcGFjZUlkLCBmbG93SWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIGNmcy5maWxlcy5maW5kKHsgJ21ldGFkYXRhLnNwYWNlJzogc3BhY2VJZCwgJ21ldGFkYXRhLm9iamVjdF9uYW1lJzogJ2Zsb3dzJywgJ21ldGFkYXRhLnJlY29yZF9pZCc6IGZsb3dJZCB9KVxuXG5NZXRlb3IucHVibGlzaENvbXBvc2l0ZSAnZmxvd3NfdGFidWxhcicsICh0YWJsZU5hbWUsIGlkcywgZmllbGRzKS0+XG5cdGNoZWNrKHRhYmxlTmFtZSwgU3RyaW5nKTtcblx0Y2hlY2soaWRzLCBBcnJheSk7XG5cdGNoZWNrKGZpZWxkcywgTWF0Y2guT3B0aW9uYWwoT2JqZWN0KSk7XG5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHRoaXMudW5ibG9jaygpXG5cblx0ZmluZDogLT5cblx0XHR0aGlzLnVuYmxvY2soKVxuXHRcdGRiLmZsb3dzLmZpbmQge19pZDogeyRpbjogaWRzfX0sIGZpZWxkczogZmllbGRzXG5cblx0Y2hpbGRyZW46IFtcblx0XHR7XG5cdFx0XHRmaW5kOiAoZmxvdykgLT5cblx0XHRcdFx0QHVuYmxvY2soKVxuXHRcdFx0XHQjIFB1Ymxpc2ggdGhlIHJlbGF0ZWQgdXNlclxuXHRcdFx0XHRkYi5zcGFjZV91c2Vycy5maW5kIHtcblx0XHRcdFx0XHRzcGFjZTogZmxvdy5zcGFjZSxcblx0XHRcdFx0XHR1c2VyOiBmbG93LmN1cnJlbnQubW9kaWZpZWRfYnlcblx0XHRcdFx0fSwgZmllbGRzOlxuXHRcdFx0XHRcdHNwYWNlOiAxXG5cdFx0XHRcdFx0dXNlcjogMVxuXHRcdFx0XHRcdG5hbWU6IDFcblx0XHR9LFxuXHRcdHtcblx0XHRcdGZpbmQ6IChmbG93KSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCB1c2VyXG5cdFx0XHRcdGRiLmZvcm1zLmZpbmQge1xuXHRcdFx0XHRcdHNwYWNlOiBmbG93LnNwYWNlLFxuXHRcdFx0XHRcdF9pZDogZmxvdy5mb3JtXG5cdFx0XHRcdH0sIGZpZWxkczpcblx0XHRcdFx0XHRzcGFjZTogMVxuXHRcdFx0XHRcdF9pZDogMVxuXHRcdFx0XHRcdG5hbWU6IDEsXG5cdFx0XHRcdFx0Y2F0ZWdvcnk6IDFcblx0XHR9LFxuXHRcdHtcblx0XHRcdGZpbmQ6IChmbG93KSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCB1c2VyXG5cdFx0XHRcdGRiLmNhdGVnb3JpZXMuZmluZCB7XG5cdFx0XHRcdFx0c3BhY2U6IGZsb3cuc3BhY2Vcblx0XHRcdFx0fSwgZmllbGRzOlxuXHRcdFx0XHRcdHNwYWNlOiAxXG5cdFx0XHRcdFx0X2lkOiAxXG5cdFx0XHRcdFx0bmFtZTogMVxuXHRcdH1cblx0XSIsIk1ldGVvci5wdWJsaXNoKCdmbG93cycsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoZGIuZmxvd3MuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSkuY291bnQoKSA9PT0gMCkge1xuICAgIGRiLnNwYWNlcy5jcmVhdGVUZW1wbGF0ZUZvcm1BbmRGbG93KHNwYWNlSWQpO1xuICB9XG4gIHJldHVybiBkYi5mbG93cy5maW5kKHtcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgZm9ybTogMSxcbiAgICAgIHN0YXRlOiAxLFxuICAgICAgcGVybXM6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIGNvbXBhbnlfaWQ6IDEsXG4gICAgICBzb3J0X25vOiAxLFxuICAgICAgZGlzdHJpYnV0ZV9vcHRpb25hbF91c2VyczogMSxcbiAgICAgIGRpc3RyaWJ1dGVfdG9fc2VsZjogMSxcbiAgICAgIGVuYWJsZV9hbWlzZm9ybTogMVxuICAgIH1cbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goJ2luc3RhbmNlX2Zsb3cnLCBmdW5jdGlvbihzcGFjZUlkLCBmbG93SWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZsb3dJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDogZmxvd0lkLFxuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBmb3JtOiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBwZXJtczogMSxcbiAgICAgIHNwYWNlOiAxLFxuICAgICAgY29tcGFueV9pZDogMSxcbiAgICAgIHNvcnRfbm86IDEsXG4gICAgICBkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuICAgICAgZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuICAgICAgZW5hYmxlX2FtaXNmb3JtOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnZmxvd192ZXJzaW9uJywgZnVuY3Rpb24oc3BhY2VJZCwgZmxvd0lkLCB2ZXJzaW9uSWQpIHtcbiAgdmFyIGdldEZsb3dWZXJzaW9uLCBoYW5kbGUsIHNlbGY7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFmbG93SWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghdmVyc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBzZWxmID0gdGhpcztcbiAgZ2V0Rmxvd1ZlcnNpb24gPSBmdW5jdGlvbihpZCwgdmVyc2lvbklkKSB7XG4gICAgdmFyIGZsb3csIGZsb3dfdmVyc2lvbjtcbiAgICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgICBfaWQ6IGlkXG4gICAgfSk7XG4gICAgaWYgKGZsb3cpIHtcbiAgICAgIGZsb3dfdmVyc2lvbiA9IGZsb3cuY3VycmVudDtcbiAgICAgIGZsb3dfdmVyc2lvbi5sYXRlc3QgPSB0cnVlO1xuICAgICAgaWYgKGZsb3dfdmVyc2lvbi5faWQgIT09IHZlcnNpb25JZCkge1xuICAgICAgICBmbG93X3ZlcnNpb24gPSBmbG93Lmhpc3RvcnlzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdmVyc2lvbklkKTtcbiAgICAgICAgZmxvd192ZXJzaW9uLmxhdGVzdCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZsb3dfdmVyc2lvbjtcbiAgICB9XG4gIH07XG4gIGhhbmRsZSA9IGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDogZmxvd0lkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIF9pZDogMSxcbiAgICAgIFwiY3VycmVudC5tb2RpZmllZFwiOiAxXG4gICAgfVxuICB9KS5vYnNlcnZlQ2hhbmdlcyh7XG4gICAgY2hhbmdlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJmbG93X3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rmxvd1ZlcnNpb24oaWQsIHZlcnNpb25JZCkpO1xuICAgIH1cbiAgfSk7XG4gIHNlbGYuYWRkZWQoXCJmbG93X3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rmxvd1ZlcnNpb24oZmxvd0lkLCB2ZXJzaW9uSWQpKTtcbiAgc2VsZi5yZWFkeSgpO1xuICByZXR1cm4gc2VsZi5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdkaXN0cmlidXRlX29wdGlvbmFsX2Zsb3dzJywgZnVuY3Rpb24oZmxvd19pZHMpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFmbG93X2lkcykge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDoge1xuICAgICAgJGluOiBmbG93X2lkc1xuICAgIH1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIGZvcm06IDEsXG4gICAgICBzdGF0ZTogMSxcbiAgICAgIHBlcm1zOiAxLFxuICAgICAgc3BhY2U6IDEsXG4gICAgICBkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuICAgICAgZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuICAgICAgZGlzdHJpYnV0ZV9lbmRfbm90aWZpY2F0aW9uOiAxLFxuICAgICAgY29tcGFueV9pZDogMSxcbiAgICAgIGVuYWJsZV9hbWlzZm9ybTogMVxuICAgIH1cbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goJ2Zsb3cnLCBmdW5jdGlvbihzcGFjZUlkLCBmbG93SWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZsb3dJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDogZmxvd0lkLFxuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIHByaW50X3RlbXBsYXRlOiAxLFxuICAgICAgaW5zdGFuY2VfdGVtcGxhdGU6IDEsXG4gICAgICBldmVudHM6IDEsXG4gICAgICBkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuICAgICAgZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuICAgICAgdXBsb2FkX2FmdGVyX2JlaW5nX2Rpc3RyaWJ1dGVkOiAxLFxuICAgICAgZGlzdHJpYnV0ZV9lbmRfbm90aWZpY2F0aW9uOiAxLFxuICAgICAgY29tcGFueV9pZDogMSxcbiAgICAgIGFsbG93X3NlbGVjdF9zdGVwOiAxLFxuICAgICAgZW5hYmxlX2FtaXNmb3JtOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnZmxvd19maWxlcycsIGZ1bmN0aW9uKHNwYWNlSWQsIGZsb3dJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghZmxvd0lkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gY2ZzLmZpbGVzLmZpbmQoe1xuICAgICdtZXRhZGF0YS5zcGFjZSc6IHNwYWNlSWQsXG4gICAgJ21ldGFkYXRhLm9iamVjdF9uYW1lJzogJ2Zsb3dzJyxcbiAgICAnbWV0YWRhdGEucmVjb3JkX2lkJzogZmxvd0lkXG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlKCdmbG93c190YWJ1bGFyJywgZnVuY3Rpb24odGFibGVOYW1lLCBpZHMsIGZpZWxkcykge1xuICBjaGVjayh0YWJsZU5hbWUsIFN0cmluZyk7XG4gIGNoZWNrKGlkcywgQXJyYXkpO1xuICBjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICB0aGlzLnVuYmxvY2soKTtcbiAgcmV0dXJuIHtcbiAgICBmaW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgICAgICBfaWQ6IHtcbiAgICAgICAgICAkaW46IGlkc1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczogZmllbGRzXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICB7XG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKGZsb3cpIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogZmxvdy5zcGFjZSxcbiAgICAgICAgICAgIHVzZXI6IGZsb3cuY3VycmVudC5tb2RpZmllZF9ieVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBzcGFjZTogMSxcbiAgICAgICAgICAgICAgdXNlcjogMSxcbiAgICAgICAgICAgICAgbmFtZTogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKGZsb3cpIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIuZm9ybXMuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogZmxvdy5zcGFjZSxcbiAgICAgICAgICAgIF9pZDogZmxvdy5mb3JtXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIHNwYWNlOiAxLFxuICAgICAgICAgICAgICBfaWQ6IDEsXG4gICAgICAgICAgICAgIG5hbWU6IDEsXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24oZmxvdykge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5jYXRlZ29yaWVzLmZpbmQoe1xuICAgICAgICAgICAgc3BhY2U6IGZsb3cuc3BhY2VcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgICAgIF9pZDogMSxcbiAgICAgICAgICAgICAgbmFtZTogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufSk7XG4iLCJNZXRlb3IucHVibGlzaCAnZm9ybXMnLCAoc3BhY2VJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRyZXR1cm4gZGIuZm9ybXMuZmluZCh7c3BhY2U6IHNwYWNlSWR9LCB7ZmllbGRzOiB7bmFtZTogMSwgY2F0ZWdvcnk6IDEsIHN0YXRlOiAxLCBkZXNjcmlwdGlvbjogMSwgaW5zdGFuY2Vfc3R5bGU6IDEsIGFtaXNfc2NoZW1hOiAxfX0pXG5cbk1ldGVvci5wdWJsaXNoICdpbnN0YW5jZV9mb3JtJywgKHNwYWNlSWQsIGZvcm1JZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRyZXR1cm4gZGIuZm9ybXMuZmluZCh7X2lkOiBmb3JtSWQsIHNwYWNlOiBzcGFjZUlkfSwge2ZpZWxkczoge25hbWU6IDEsIGNhdGVnb3J5OiAxLCBzdGF0ZTogMSwgZGVzY3JpcHRpb246IDEsIGluc3RhbmNlX3N0eWxlOiAxLCBhbWlzX3NjaGVtYTogMX19KVxuXG5cbk1ldGVvci5wdWJsaXNoICdmb3JtX3ZlcnNpb24nLCAoc3BhY2VJZCwgZm9ybUlkLCB2ZXJzaW9uSWQpIC0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgZm9ybUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyB2ZXJzaW9uSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRzZWxmID0gdGhpcztcblxuXHRnZXRGb3JtVmVyc2lvbiA9IChpZCAsIHZlcnNpb25JZCktPlxuXHRcdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtfaWQgOiBpZH0pO1xuXHRcdGlmICFmb3JtXG5cdFx0XHRyZXR1cm4ge31cblx0XHRmb3JtX3ZlcnNpb24gPSBmb3JtLmN1cnJlbnRcblx0XHRmb3JtX3ZlcnNpb24ubGF0ZXN0ID0gdHJ1ZVxuXHRcdGlmIGZvcm1fdmVyc2lvbi5faWQgIT0gdmVyc2lvbklkXG5cdFx0XHRmb3JtX3ZlcnNpb24gPSBmb3JtLmhpc3RvcnlzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdmVyc2lvbklkKVxuXHRcdFx0Zm9ybV92ZXJzaW9uLmxhdGVzdCA9IGZhbHNlXG5cdFx0cmV0dXJuIGZvcm1fdmVyc2lvblxuXG5cdGhhbmRsZSA9IGRiLmZvcm1zLmZpbmQoe19pZDogZm9ybUlkfSwge2ZpZWxkczoge19pZDogMSwgXCJjdXJyZW50Lm1vZGlmaWVkXCI6IDF9fSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGNoYW5nZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5jaGFuZ2VkKFwiZm9ybV92ZXJzaW9uc1wiLCB2ZXJzaW9uSWQsIGdldEZvcm1WZXJzaW9uKGlkLCB2ZXJzaW9uSWQpKTtcblx0fVxuXG5cdHNlbGYuYWRkZWQoXCJmb3JtX3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rm9ybVZlcnNpb24oZm9ybUlkLCB2ZXJzaW9uSWQpKTtcblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKSIsIk1ldGVvci5wdWJsaXNoKCdmb3JtcycsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZm9ybXMuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIGNhdGVnb3J5OiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogMSxcbiAgICAgIGluc3RhbmNlX3N0eWxlOiAxLFxuICAgICAgYW1pc19zY2hlbWE6IDFcbiAgICB9XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdpbnN0YW5jZV9mb3JtJywgZnVuY3Rpb24oc3BhY2VJZCwgZm9ybUlkKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZvcm1zLmZpbmQoe1xuICAgIF9pZDogZm9ybUlkLFxuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBjYXRlZ29yeTogMSxcbiAgICAgIHN0YXRlOiAxLFxuICAgICAgZGVzY3JpcHRpb246IDEsXG4gICAgICBpbnN0YW5jZV9zdHlsZTogMSxcbiAgICAgIGFtaXNfc2NoZW1hOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnZm9ybV92ZXJzaW9uJywgZnVuY3Rpb24oc3BhY2VJZCwgZm9ybUlkLCB2ZXJzaW9uSWQpIHtcbiAgdmFyIGdldEZvcm1WZXJzaW9uLCBoYW5kbGUsIHNlbGY7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFmb3JtSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghdmVyc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBzZWxmID0gdGhpcztcbiAgZ2V0Rm9ybVZlcnNpb24gPSBmdW5jdGlvbihpZCwgdmVyc2lvbklkKSB7XG4gICAgdmFyIGZvcm0sIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGlkXG4gICAgfSk7XG4gICAgaWYgKCFmb3JtKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGZvcm1fdmVyc2lvbiA9IGZvcm0uY3VycmVudDtcbiAgICBmb3JtX3ZlcnNpb24ubGF0ZXN0ID0gdHJ1ZTtcbiAgICBpZiAoZm9ybV92ZXJzaW9uLl9pZCAhPT0gdmVyc2lvbklkKSB7XG4gICAgICBmb3JtX3ZlcnNpb24gPSBmb3JtLmhpc3RvcnlzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdmVyc2lvbklkKTtcbiAgICAgIGZvcm1fdmVyc2lvbi5sYXRlc3QgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1fdmVyc2lvbjtcbiAgfTtcbiAgaGFuZGxlID0gZGIuZm9ybXMuZmluZCh7XG4gICAgX2lkOiBmb3JtSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgX2lkOiAxLFxuICAgICAgXCJjdXJyZW50Lm1vZGlmaWVkXCI6IDFcbiAgICB9XG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHNlbGYuY2hhbmdlZChcImZvcm1fdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGb3JtVmVyc2lvbihpZCwgdmVyc2lvbklkKSk7XG4gICAgfVxuICB9KTtcbiAgc2VsZi5hZGRlZChcImZvcm1fdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGb3JtVmVyc2lvbihmb3JtSWQsIHZlcnNpb25JZCkpO1xuICBzZWxmLnJlYWR5KCk7XG4gIHJldHVybiBzZWxmLm9uU3RvcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaGFuZGxlLnN0b3AoKTtcbiAgfSk7XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoICdpbnN0YW5jZV9kYXRhJywgKGluc3RhbmNlSWQsIGJveCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIChpbnN0YW5jZUlkICYmIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IGluc3RhbmNlSWR9KS5jb3VudCgpKVxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpcztcblxuXHRtaW5pQXBwcm92ZUZpZWxkcyA9IFsnX2lkJywgJ2lzX2ZpbmlzaGVkJywgJ3VzZXInLCAnaGFuZGxlcicsICdoYW5kbGVyX25hbWUnLCAndHlwZScsICdzdGFydF9kYXRlJywgJ2Rlc2NyaXB0aW9uJyxcblx0XHQnaXNfcmVhZCcsICdqdWRnZScsICdmaW5pc2hfZGF0ZScsICdmcm9tX3VzZXJfbmFtZScsICdmcm9tX3VzZXInLCAnY2NfZGVzY3JpcHRpb24nLCAnYXV0b19zdWJtaXR0ZWQnXVxuXG5cdHRyaWdnZXJDaGFuZ2VGaWVsZHMgPSBbJ2Zvcm1fdmVyc2lvbicsICdmbG93X3ZlcnNpb24nLCAncmVsYXRlZF9pbnN0YW5jZXMnLCAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycsICd2YWx1ZXMnLCAnY2hhbmdlX3RpbWUnXVxuXG5cdHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXMgPSB7fVxuXG5cdGluc3RhbmNlX2ZpZWxkc18wID0ge1xuXHRcdFwicmVjb3JkX3N5bmNlZFwiOiAwLFxuXG4jXHRcdFwidHJhY2VzLmFwcHJvdmVzLmhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmhhbmRsZXJfb3JnYW5pemF0aW9uXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuY29zdF90aW1lXCI6IDAsXG4jXHRcdFwidHJhY2VzLmFwcHJvdmVzLnJlYWRfZGF0ZVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmlzX2Vycm9yXCI6IDAsXG5cdFx0IyBcInRyYWNlcy5hcHByb3Zlcy51c2VyX25hbWVcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5kZWFkbGluZVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLnJlbWluZF9kYXRlXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMucmVtaW5kZWRfY291bnRcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5tb2RpZmllZF9ieVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLm1vZGlmaWVkXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuZ2VvbG9jYXRpb25cIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5jY191c2Vyc1wiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmZyb21fYXBwcm92ZV9pZFwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLnZhbHVlc19oaXN0b3J5XCI6IDBcblx0fVxuXG5cdGdldE15YXBwcm92ZU1vZGlmaWVkID0gKHRyYWNlcyktPlxuXHRcdG15QXBwcm92ZU1vZGlmaWVkcyA9IG5ldyBBcnJheSgpXG5cblx0XHR0cmFjZXM/LmZvckVhY2ggKHRyYWNlKS0+XG5cdFx0XHR0cmFjZT8uYXBwcm92ZXM/LmZvckVhY2ggKGFwcHJvdmUpLT5cblx0XHRcdFx0aWYgKGFwcHJvdmUudXNlciA9PSBzZWxmLnVzZXJJZCB8fCBhcHByb3ZlLmhhbmRsZXIgPT0gc2VsZi51c2VySWQpXG5cdFx0XHRcdCMgJiYgIWFwcHJvdmUuaXNfZmluaXNoZWRcbiNcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJhcHByb3ZlXCIsIGFwcHJvdmUuX2lkLCBhcHByb3ZlLnJlYWRfZGF0ZSlcblxuXHRcdFx0XHRcdG15QXBwcm92ZU1vZGlmaWVkcy5wdXNoKGFwcHJvdmUucmVhZF9kYXRlKVxuXG5cdFx0cmV0dXJuIG15QXBwcm92ZU1vZGlmaWVkc1xuXG5cblx0Z2V0TWluaUluc3RhbmNlID0gKF9pbnN0YW5jZUlkKS0+XG5cdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBfaW5zdGFuY2VJZH0sIHtmaWVsZHM6IGluc3RhbmNlX2ZpZWxkc18wfSlcblxuXHRcdGlmIGluc3RhbmNlXG5cblx0XHRcdHRyaWdnZXJDaGFuZ2VGaWVsZHMuZm9yRWFjaCAoa2V5KS0+XG5cdFx0XHRcdGlmIGtleSA9PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcydcblx0XHRcdFx0XHR0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0gPSBnZXRNeWFwcHJvdmVNb2RpZmllZChpbnN0YW5jZS50cmFjZXMpXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0gPSBpbnN0YW5jZVtrZXldXG5cbiNcdFx0XHRoYXNPcGluaW9uRmllbGQgPSBJbnN0YW5jZVNpZ25UZXh0LmluY2x1ZGVzT3BpbmlvbkZpZWxkKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbilcblxuXHRcdFx0c2hvd19tb2RhbF90cmFjZXNfbGlzdCA9IGRiLnNwYWNlX3NldHRpbmdzLmZpbmRPbmUoeyBzcGFjZTogaW5zdGFuY2Uuc3BhY2UsIGtleTogXCJzaG93X21vZGFsX3RyYWNlc19saXN0XCIgfSwgeyBmaWVsZHM6IHsgdmFsdWVzOiAxIH0gfSk/LnZhbHVlcyB8fCBmYWxzZVxuXG5cdFx0XHRpZiBzaG93X21vZGFsX3RyYWNlc19saXN0XG5cblx0XHRcdFx0dHJhY2VzID0gbmV3IEFycmF5KCk7XG5cblx0XHRcdFx0aW5zdGFuY2U/LnRyYWNlcz8uZm9yRWFjaCAodHJhY2UpLT5cblx0XHRcdFx0XHRfdHJhY2UgPSBfLmNsb25lKHRyYWNlKVxuXG5cdFx0XHRcdFx0YXBwcm92ZXMgPSBuZXcgQXJyYXkoKVxuXG5cdFx0XHRcdFx0dHJhY2U/LmFwcHJvdmVzPy5mb3JFYWNoIChhcHByb3ZlKS0+XG5cdFx0XHRcdFx0XHRpZiBhcHByb3ZlLnR5cGUgIT0gJ2NjJyB8fCBhcHByb3ZlLnVzZXIgPT0gc2VsZi51c2VySWQgfHwgYXBwcm92ZS5oYW5kbGVyID09IHNlbGYudXNlcklkIHx8ICghXy5pc0VtcHR5KGFwcHJvdmUuc2lnbl9maWVsZF9jb2RlKSlcblx0XHRcdFx0XHRcdFx0YXBwcm92ZXMucHVzaChhcHByb3ZlKVxuXG5cdFx0XHRcdFx0X3RyYWNlLmFwcHJvdmVzID0gYXBwcm92ZXNcblxuXHRcdFx0XHRcdHRyYWNlcy5wdXNoKF90cmFjZSlcblxuXHRcdFx0XHRpbnN0YW5jZS50cmFjZXMgPSB0cmFjZXM7XG5cblx0XHRyZXR1cm4gaW5zdGFuY2VcblxuXG5cdG5lZWRDaGFuZ2UgPSAoY2hhbmdlRmllbGRzKS0+XG5cdFx0aWYgY2hhbmdlRmllbGRzXG5cblx0XHRcdF9jaGFuZ2UgPSBmYWxzZVxuXG5cdFx0XHRfcmV2ID0gXy5maW5kIHRyaWdnZXJDaGFuZ2VGaWVsZHMsIChrZXkpLT5cblx0XHRcdFx0X2tleSA9IGtleVxuXG5cdFx0XHRcdGlmIGtleSA9PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcydcblx0XHRcdFx0XHRfa2V5ID0gJ3RyYWNlcydcblxuXHRcdFx0XHRpZiBfLmhhcyhjaGFuZ2VGaWVsZHMsIF9rZXkpXG5cblx0XHRcdFx0XHRpZiBrZXkgPT0gJ19teV9hcHByb3ZlX3JlYWRfZGF0ZXMnXG5cblx0XHRcdFx0XHRcdF9teV9hcHByb3ZlX21vZGlmaWVkcyA9IGdldE15YXBwcm92ZU1vZGlmaWVkKGNoYW5nZUZpZWxkcy50cmFjZXMpXG5cbiNcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0sIF9teV9hcHByb3ZlX21vZGlmaWVkcylcblxuXHRcdFx0XHRcdFx0cmV0dXJuICFfLmlzRXF1YWwodHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldLCBfbXlfYXBwcm92ZV9tb2RpZmllZHMpXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0cmV0dXJuICFfLmlzRXF1YWwodHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldLCBjaGFuZ2VGaWVsZHNba2V5XSlcblxuXHRcdFx0aWYgX3JldlxuXHRcdFx0XHRfY2hhbmdlID0gdHJ1ZVxuXG4jXHRcdFx0Y29uc29sZS5sb2coX3JldiwgX2NoYW5nZSlcblxuXHRcdFx0cmV0dXJuIF9jaGFuZ2VcblxuXHRcdHJldHVybiB0cnVlXG5cdCPmraTlpITkuI3og73mt7vliqBmaWVsZHPpmZDliLbvvIzlkKbliJnkvJrlr7zoh7TmlbDmja7kuI3lrp7ml7Zcblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogaW5zdGFuY2VJZH0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRjaGFuZ2VkOiAoaWQsIGZpZWxkcyktPlxuXHRcdFx0aWYoYm94ICE9ICdpbmJveCcgfHwgbmVlZENoYW5nZShmaWVsZHMpKVxuXHRcdFx0XHRzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGdldE1pbmlJbnN0YW5jZShpZCkpO1xuXHRcdHJlbW92ZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcblx0fVxuXG5cdGluc3RhbmNlID0gZ2V0TWluaUluc3RhbmNlKGluc3RhbmNlSWQpXG5cblx0c2VsZi5hZGRlZChcImluc3RhbmNlc1wiLCBpbnN0YW5jZT8uX2lkLCBpbnN0YW5jZSk7XG5cblx0c2VsZi5yZWFkeSgpO1xuXG5cdHNlbGYub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpXG5cblxuTWV0ZW9yLnB1Ymxpc2ggJ2luc3RhbmNlX3RyYWNlcycsIChpbnN0YW5jZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgaW5zdGFuY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpc1xuXG5cdGdldEluc3RhbmNlVHJhY2VzID0gKF9pbnNJZCktPlxuXHRcdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBfaW5zSWR9LCB7ZmllbGRzOiB7X2lkOiAxLCB0cmFjZXM6IDF9fSlcblxuXG5cdGhhbmRsZSA9ICBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiBpbnN0YW5jZUlkfSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGNoYW5nZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VfdHJhY2VzXCIsIGluc3RhbmNlSWQsIGdldEluc3RhbmNlVHJhY2VzKGluc3RhbmNlSWQpKTtcblx0fVxuXG5cdHNlbGYuYWRkZWQoXCJpbnN0YW5jZV90cmFjZXNcIiwgaW5zdGFuY2VJZCwgZ2V0SW5zdGFuY2VUcmFjZXMoaW5zdGFuY2VJZCkpO1xuXG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKCkiLCJNZXRlb3IucHVibGlzaCgnaW5zdGFuY2VfZGF0YScsIGZ1bmN0aW9uKGluc3RhbmNlSWQsIGJveCkge1xuICB2YXIgZ2V0TWluaUluc3RhbmNlLCBnZXRNeWFwcHJvdmVNb2RpZmllZCwgaGFuZGxlLCBpbnN0YW5jZSwgaW5zdGFuY2VfZmllbGRzXzAsIG1pbmlBcHByb3ZlRmllbGRzLCBuZWVkQ2hhbmdlLCBzZWxmLCB0cmlnZ2VyQ2hhbmdlRmllbGRzLCB0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIShpbnN0YW5jZUlkICYmIGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IGluc3RhbmNlSWRcbiAgfSkuY291bnQoKSkpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBtaW5pQXBwcm92ZUZpZWxkcyA9IFsnX2lkJywgJ2lzX2ZpbmlzaGVkJywgJ3VzZXInLCAnaGFuZGxlcicsICdoYW5kbGVyX25hbWUnLCAndHlwZScsICdzdGFydF9kYXRlJywgJ2Rlc2NyaXB0aW9uJywgJ2lzX3JlYWQnLCAnanVkZ2UnLCAnZmluaXNoX2RhdGUnLCAnZnJvbV91c2VyX25hbWUnLCAnZnJvbV91c2VyJywgJ2NjX2Rlc2NyaXB0aW9uJywgJ2F1dG9fc3VibWl0dGVkJ107XG4gIHRyaWdnZXJDaGFuZ2VGaWVsZHMgPSBbJ2Zvcm1fdmVyc2lvbicsICdmbG93X3ZlcnNpb24nLCAncmVsYXRlZF9pbnN0YW5jZXMnLCAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycsICd2YWx1ZXMnLCAnY2hhbmdlX3RpbWUnXTtcbiAgdHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlcyA9IHt9O1xuICBpbnN0YW5jZV9maWVsZHNfMCA9IHtcbiAgICBcInJlY29yZF9zeW5jZWRcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5oYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMuaGFuZGxlcl9vcmdhbml6YXRpb25cIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5jb3N0X3RpbWVcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5pc19lcnJvclwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmRlYWRsaW5lXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMucmVtaW5kX2RhdGVcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5yZW1pbmRlZF9jb3VudFwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLm1vZGlmaWVkX2J5XCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMubW9kaWZpZWRcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5nZW9sb2NhdGlvblwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmNjX3VzZXJzXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMuZnJvbV9hcHByb3ZlX2lkXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMudmFsdWVzX2hpc3RvcnlcIjogMFxuICB9O1xuICBnZXRNeWFwcHJvdmVNb2RpZmllZCA9IGZ1bmN0aW9uKHRyYWNlcykge1xuICAgIHZhciBteUFwcHJvdmVNb2RpZmllZHM7XG4gICAgbXlBcHByb3ZlTW9kaWZpZWRzID0gbmV3IEFycmF5KCk7XG4gICAgaWYgKHRyYWNlcyAhPSBudWxsKSB7XG4gICAgICB0cmFjZXMuZm9yRWFjaChmdW5jdGlvbih0cmFjZSkge1xuICAgICAgICB2YXIgcmVmO1xuICAgICAgICByZXR1cm4gdHJhY2UgIT0gbnVsbCA/IChyZWYgPSB0cmFjZS5hcHByb3ZlcykgIT0gbnVsbCA/IHJlZi5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICBpZiAoYXBwcm92ZS51c2VyID09PSBzZWxmLnVzZXJJZCB8fCBhcHByb3ZlLmhhbmRsZXIgPT09IHNlbGYudXNlcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gbXlBcHByb3ZlTW9kaWZpZWRzLnB1c2goYXBwcm92ZS5yZWFkX2RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG15QXBwcm92ZU1vZGlmaWVkcztcbiAgfTtcbiAgZ2V0TWluaUluc3RhbmNlID0gZnVuY3Rpb24oX2luc3RhbmNlSWQpIHtcbiAgICB2YXIgaW5zdGFuY2UsIHJlZiwgcmVmMSwgc2hvd19tb2RhbF90cmFjZXNfbGlzdCwgdHJhY2VzO1xuICAgIGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBfaW5zdGFuY2VJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczogaW5zdGFuY2VfZmllbGRzXzBcbiAgICB9KTtcbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIHRyaWdnZXJDaGFuZ2VGaWVsZHMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ19teV9hcHByb3ZlX3JlYWRfZGF0ZXMnKSB7XG4gICAgICAgICAgcmV0dXJuIHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSA9IGdldE15YXBwcm92ZU1vZGlmaWVkKGluc3RhbmNlLnRyYWNlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSA9IGluc3RhbmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2hvd19tb2RhbF90cmFjZXNfbGlzdCA9ICgocmVmID0gZGIuc3BhY2Vfc2V0dGluZ3MuZmluZE9uZSh7XG4gICAgICAgIHNwYWNlOiBpbnN0YW5jZS5zcGFjZSxcbiAgICAgICAga2V5OiBcInNob3dfbW9kYWxfdHJhY2VzX2xpc3RcIlxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICB2YWx1ZXM6IDFcbiAgICAgICAgfVxuICAgICAgfSkpICE9IG51bGwgPyByZWYudmFsdWVzIDogdm9pZCAwKSB8fCBmYWxzZTtcbiAgICAgIGlmIChzaG93X21vZGFsX3RyYWNlc19saXN0KSB7XG4gICAgICAgIHRyYWNlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICgocmVmMSA9IGluc3RhbmNlLnRyYWNlcykgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmVmMS5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNlKSB7XG4gICAgICAgICAgICAgIHZhciBfdHJhY2UsIGFwcHJvdmVzLCByZWYyO1xuICAgICAgICAgICAgICBfdHJhY2UgPSBfLmNsb25lKHRyYWNlKTtcbiAgICAgICAgICAgICAgYXBwcm92ZXMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgICAgICAgaWYgKHRyYWNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHJlZjIgPSB0cmFjZS5hcHByb3ZlcykgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgcmVmMi5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcHJvdmUudHlwZSAhPT0gJ2NjJyB8fCBhcHByb3ZlLnVzZXIgPT09IHNlbGYudXNlcklkIHx8IGFwcHJvdmUuaGFuZGxlciA9PT0gc2VsZi51c2VySWQgfHwgKCFfLmlzRW1wdHkoYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHByb3Zlcy5wdXNoKGFwcHJvdmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RyYWNlLmFwcHJvdmVzID0gYXBwcm92ZXM7XG4gICAgICAgICAgICAgIHJldHVybiB0cmFjZXMucHVzaChfdHJhY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlLnRyYWNlcyA9IHRyYWNlcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuICBuZWVkQ2hhbmdlID0gZnVuY3Rpb24oY2hhbmdlRmllbGRzKSB7XG4gICAgdmFyIF9jaGFuZ2UsIF9yZXY7XG4gICAgaWYgKGNoYW5nZUZpZWxkcykge1xuICAgICAgX2NoYW5nZSA9IGZhbHNlO1xuICAgICAgX3JldiA9IF8uZmluZCh0cmlnZ2VyQ2hhbmdlRmllbGRzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgdmFyIF9rZXksIF9teV9hcHByb3ZlX21vZGlmaWVkcztcbiAgICAgICAgX2tleSA9IGtleTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ19teV9hcHByb3ZlX3JlYWRfZGF0ZXMnKSB7XG4gICAgICAgICAgX2tleSA9ICd0cmFjZXMnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmhhcyhjaGFuZ2VGaWVsZHMsIF9rZXkpKSB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ19teV9hcHByb3ZlX3JlYWRfZGF0ZXMnKSB7XG4gICAgICAgICAgICBfbXlfYXBwcm92ZV9tb2RpZmllZHMgPSBnZXRNeWFwcHJvdmVNb2RpZmllZChjaGFuZ2VGaWVsZHMudHJhY2VzKTtcbiAgICAgICAgICAgIHJldHVybiAhXy5pc0VxdWFsKHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSwgX215X2FwcHJvdmVfbW9kaWZpZWRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICFfLmlzRXF1YWwodHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldLCBjaGFuZ2VGaWVsZHNba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChfcmV2KSB7XG4gICAgICAgIF9jaGFuZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jaGFuZ2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgX2lkOiBpbnN0YW5jZUlkXG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCwgZmllbGRzKSB7XG4gICAgICBpZiAoYm94ICE9PSAnaW5ib3gnIHx8IG5lZWRDaGFuZ2UoZmllbGRzKSkge1xuICAgICAgICByZXR1cm4gc2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VzXCIsIGlkLCBnZXRNaW5pSW5zdGFuY2UoaWQpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZWQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgICByZXR1cm4gc2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcbiAgICB9XG4gIH0pO1xuICBpbnN0YW5jZSA9IGdldE1pbmlJbnN0YW5jZShpbnN0YW5jZUlkKTtcbiAgc2VsZi5hZGRlZChcImluc3RhbmNlc1wiLCBpbnN0YW5jZSAhPSBudWxsID8gaW5zdGFuY2UuX2lkIDogdm9pZCAwLCBpbnN0YW5jZSk7XG4gIHNlbGYucmVhZHkoKTtcbiAgcmV0dXJuIHNlbGYub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnaW5zdGFuY2VfdHJhY2VzJywgZnVuY3Rpb24oaW5zdGFuY2VJZCkge1xuICB2YXIgZ2V0SW5zdGFuY2VUcmFjZXMsIGhhbmRsZSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFpbnN0YW5jZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBzZWxmID0gdGhpcztcbiAgZ2V0SW5zdGFuY2VUcmFjZXMgPSBmdW5jdGlvbihfaW5zSWQpIHtcbiAgICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBfaW5zSWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgX2lkOiAxLFxuICAgICAgICB0cmFjZXM6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgaGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgIF9pZDogaW5zdGFuY2VJZFxuICB9KS5vYnNlcnZlQ2hhbmdlcyh7XG4gICAgY2hhbmdlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZV90cmFjZXNcIiwgaW5zdGFuY2VJZCwgZ2V0SW5zdGFuY2VUcmFjZXMoaW5zdGFuY2VJZCkpO1xuICAgIH1cbiAgfSk7XG4gIHNlbGYuYWRkZWQoXCJpbnN0YW5jZV90cmFjZXNcIiwgaW5zdGFuY2VJZCwgZ2V0SW5zdGFuY2VUcmFjZXMoaW5zdGFuY2VJZCkpO1xuICBzZWxmLnJlYWR5KCk7XG4gIHJldHVybiBzZWxmLm9uU3RvcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaGFuZGxlLnN0b3AoKTtcbiAgfSk7XG59KTtcbiIsIlxuXHRNZXRlb3IucHVibGlzaCAnaW5zdGFuY2VzX2xpc3QnLCAoc3BhY2VJZCwgYm94LCBmbG93SWQpLT5cblxuXHRcdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXHRcdFxuXHRcdHVubGVzcyBzcGFjZUlkXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0XHRxdWVyeSA9IHtzcGFjZTogc3BhY2VJZH1cblx0XHRpZiBib3ggPT0gXCJpbmJveFwiXG5cdFx0XHRxdWVyeS5pbmJveF91c2VycyA9IHRoaXMudXNlcklkO1xuXHRcdGVsc2UgaWYgYm94ID09IFwib3V0Ym94XCJcblx0XHRcdHF1ZXJ5Lm91dGJveF91c2VycyA9IHRoaXMudXNlcklkO1xuXHRcdGVsc2UgaWYgYm94ID09IFwiZHJhZnRcIlxuXHRcdFx0cXVlcnkuc3VibWl0dGVyID0gdGhpcy51c2VySWQ7XG5cdFx0XHRxdWVyeS5zdGF0ZSA9IFwiZHJhZnRcIlxuXHRcdGVsc2UgaWYgYm94ID09IFwicGVuZGluZ1wiXG5cdFx0XHRxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcblx0XHRcdHF1ZXJ5LnN0YXRlID0gXCJwZW5kaW5nXCJcblx0XHRlbHNlIGlmIGJveCA9PSBcImNvbXBsZXRlZFwiXG5cdFx0XHRxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcblx0XHRcdHF1ZXJ5LnN0YXRlID0gXCJjb21wbGV0ZWRcIlxuXHRcdGVsc2UgaWYgYm94ID09IFwibW9uaXRvclwiXG5cdFx0XHRxdWVyeS5mbG93ID0gZmxvd0lkO1xuXHRcdFx0cXVlcnkuc3RhdGUgPSB7JGluOiBbXCJwZW5kaW5nXCIsXCJjb21wbGV0ZWRcIl19O1xuXHRcdGVsc2Vcblx0XHRcdHF1ZXJ5LnN0YXRlID0gXCJub25lXCJcblxuXHRcdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZChxdWVyeSwge2ZpZWxkczoge25hbWU6MSwgY3JlYXRlZDoxLCBmb3JtOjEsIGZsb3c6IDEsIHNwYWNlOjEsIG1vZGlmaWVkOjEsIGFwcGxpY2FudDogMSwgaXNfYXJjaGl2ZWQ6MSwgZm9ybV92ZXJzaW9uOiAxLCBmbG93X3ZlcnNpb246IDF9fSlcblxuIiwiTWV0ZW9yLnB1Ymxpc2goJ2luc3RhbmNlc19saXN0JywgZnVuY3Rpb24oc3BhY2VJZCwgYm94LCBmbG93SWQpIHtcbiAgdmFyIHF1ZXJ5O1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHF1ZXJ5ID0ge1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH07XG4gIGlmIChib3ggPT09IFwiaW5ib3hcIikge1xuICAgIHF1ZXJ5LmluYm94X3VzZXJzID0gdGhpcy51c2VySWQ7XG4gIH0gZWxzZSBpZiAoYm94ID09PSBcIm91dGJveFwiKSB7XG4gICAgcXVlcnkub3V0Ym94X3VzZXJzID0gdGhpcy51c2VySWQ7XG4gIH0gZWxzZSBpZiAoYm94ID09PSBcImRyYWZ0XCIpIHtcbiAgICBxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcbiAgICBxdWVyeS5zdGF0ZSA9IFwiZHJhZnRcIjtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwicGVuZGluZ1wiKSB7XG4gICAgcXVlcnkuc3VibWl0dGVyID0gdGhpcy51c2VySWQ7XG4gICAgcXVlcnkuc3RhdGUgPSBcInBlbmRpbmdcIjtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICBxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcbiAgICBxdWVyeS5zdGF0ZSA9IFwiY29tcGxldGVkXCI7XG4gIH0gZWxzZSBpZiAoYm94ID09PSBcIm1vbml0b3JcIikge1xuICAgIHF1ZXJ5LmZsb3cgPSBmbG93SWQ7XG4gICAgcXVlcnkuc3RhdGUgPSB7XG4gICAgICAkaW46IFtcInBlbmRpbmdcIiwgXCJjb21wbGV0ZWRcIl1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHF1ZXJ5LnN0YXRlID0gXCJub25lXCI7XG4gIH1cbiAgcmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgY3JlYXRlZDogMSxcbiAgICAgIGZvcm06IDEsXG4gICAgICBmbG93OiAxLFxuICAgICAgc3BhY2U6IDEsXG4gICAgICBtb2RpZmllZDogMSxcbiAgICAgIGFwcGxpY2FudDogMSxcbiAgICAgIGlzX2FyY2hpdmVkOiAxLFxuICAgICAgZm9ybV92ZXJzaW9uOiAxLFxuICAgICAgZmxvd192ZXJzaW9uOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuIiwibGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZSA9IChpbnN0YW5jZWlkLCB1c2VySWQsIGRhdGFNYXAsIGNhbGxiYWNrKS0+XG5cdG9wZXJhdGlvbiA9IFt7XG5cdFx0XCIkbWF0Y2hcIjoge1xuXHRcdFx0XCJfaWRcIjogaW5zdGFuY2VpZFxuXHRcdH1cblx0fSwge1wiJHByb2plY3RcIjoge1wibmFtZVwiOiAxLCBcIl9hcHByb3ZlXCI6IFwiJHRyYWNlcy5hcHByb3Zlc1wifX0sIHtcIiR1bndpbmRcIjogXCIkX2FwcHJvdmVcIn0sIHtcIiR1bndpbmRcIjogXCIkX2FwcHJvdmVcIn0sXG5cdFx0e1wiJG1hdGNoXCI6IHtcIl9hcHByb3ZlLmlzX2ZpbmlzaGVkXCI6IHRydWUsICRvcjpbe1wiX2FwcHJvdmUuaGFuZGxlclwiOiB1c2VySWR9LHtcIl9hcHByb3ZlLnVzZXJcIjogdXNlcklkfV19fSxcblx0XHR7XCIkZ3JvdXBcIjoge1wiX2lkXCI6IFwiJF9pZFwiLCBcImZpbmlzaF9kYXRlXCI6IHtcIiRsYXN0XCI6IFwiJF9hcHByb3ZlLmZpbmlzaF9kYXRlXCJ9fX1cblx0XVxuXG5cdGRiLmluc3RhbmNlcy5yYXdDb2xsZWN0aW9uKCkuYWdncmVnYXRlKG9wZXJhdGlvbikudG9BcnJheSAoZXJyLCBkYXRhKS0+XG5cdFx0aWYgZXJyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyKVxuXG5cdFx0ZGF0YS5mb3JFYWNoIChkb2MpIC0+XG5cdFx0XHRkYXRhTWFwLnB1c2ggZG9jXG5cblx0XHRpZiBjYWxsYmFjayAmJiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spXG5cdFx0XHRjYWxsYmFjaygpXG5cdFx0cmV0dXJuXG5cbmFzeW5jTGFzdEZpbmlzaGVkQXBwcm92ZSA9IE1ldGVvci53cmFwQXN5bmMobGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZSlcblxuTWV0ZW9yLnB1Ymxpc2ggXCJpbnN0YW5jZV90YWJ1bGFyXCIsICh0YWJsZU5hbWUsIGlkcywgZmllbGRzKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRjaGVjayh0YWJsZU5hbWUsIFN0cmluZyk7XG5cblx0Y2hlY2soaWRzLCBBcnJheSk7XG5cblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKVxuXG5cdGZpZWxkcy5jY191c2VycyA9IDFcblxuXHRzZWxmID0gdGhpcztcblxuXHRnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUgPSAodXNlcklkLCBpbnN0YW5jZUlkKS0+XG5cdFx0ZGF0YSA9IFtdXG5cdFx0YXN5bmNMYXN0RmluaXNoZWRBcHByb3ZlKGluc3RhbmNlSWQsIHVzZXJJZCwgZGF0YSlcblx0XHRpZiBkYXRhLmxlbmd0aCA+IDBcblx0XHRcdHJldHVybiBkYXRhWzBdXG5cblxuXHRnZXRNeUFwcHJvdmUgPSAodXNlcklkLCBpbnN0YW5jZUlkKS0+XG5cdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZUlkfSwge2ZpZWxkczoge3RyYWNlczogMX19KVxuXHRcdG15QXBwcm92ZSA9IG51bGxcblxuXHRcdGlmICFpbnN0YW5jZVxuXHRcdFx0cmV0dXJuXG5cblx0XHRpZiAhaW5zdGFuY2UudHJhY2VzIHx8IGluc3RhbmNlLnRyYWNlcy5sZW5ndGggPCAxXG5cdFx0XHRyZXR1cm5cblxuXHRcdG5vdEZpbmlzaGVkVHJhY2VzID0gaW5zdGFuY2UudHJhY2VzLmZpbHRlclByb3BlcnR5KFwiaXNfZmluaXNoZWRcIiwgZmFsc2UpXG5cblx0XHRpZiBub3RGaW5pc2hlZFRyYWNlcy5sZW5ndGggPiAwXG5cdFx0XHRhcHByb3ZlcyA9IG5vdEZpbmlzaGVkVHJhY2VzWzBdLmFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwiaXNfZmluaXNoZWRcIiwgZmFsc2UpLmZpbHRlclByb3BlcnR5KFwiaGFuZGxlclwiLCB1c2VySWQpO1xuXG5cdFx0XHRpZiBhcHByb3Zlcy5sZW5ndGggPiAwXG5cdFx0XHRcdGFwcHJvdmUgPSBhcHByb3Zlc1swXVxuXHRcdFx0XHRteUFwcHJvdmUgPSB7XG5cdFx0XHRcdFx0aWQ6IGFwcHJvdmUuX2lkLFxuXHRcdFx0XHRcdGluc3RhbmNlOiBhcHByb3ZlLmluc3RhbmNlLFxuXHRcdFx0XHRcdHRyYWNlOiBhcHByb3ZlLnRyYWNlLFxuXHRcdFx0XHRcdGlzX3JlYWQ6IGFwcHJvdmUuaXNfcmVhZCxcblx0XHRcdFx0XHRzdGFydF9kYXRlOiBhcHByb3ZlLnN0YXJ0X2RhdGVcblx0XHRcdFx0XHRhZ2VudDogYXBwcm92ZS5hZ2VudFxuXHRcdFx0XHRcdHVzZXJfbmFtZTogYXBwcm92ZS51c2VyX25hbWVcblx0XHRcdFx0fVxuXG5cdFx0aWYgIW15QXBwcm92ZVxuXHRcdFx0aXNfcmVhZCA9IGZhbHNlXG5cdFx0XHRpbnN0YW5jZS50cmFjZXMuZm9yRWFjaCAodHJhY2UpIC0+XG5cdFx0XHRcdHRyYWNlPy5hcHByb3Zlcz8uZm9yRWFjaCAoYXBwcm92ZSkgLT5cblx0XHRcdFx0XHRpZiBhcHByb3ZlLnR5cGUgPT0gJ2NjJyBhbmQgYXBwcm92ZS51c2VyID09IHVzZXJJZCBhbmQgYXBwcm92ZS5pc19maW5pc2hlZCA9PSBmYWxzZVxuXHRcdFx0XHRcdFx0aWYgYXBwcm92ZS5pc19yZWFkXG5cdFx0XHRcdFx0XHRcdGlzX3JlYWQgPSB0cnVlXG5cdFx0XHRcdFx0XHRteUFwcHJvdmUgPSB7aWQ6IGFwcHJvdmUuX2lkLCBpc19yZWFkOiBpc19yZWFkLCBzdGFydF9kYXRlOiBhcHByb3ZlLnN0YXJ0X2RhdGUsIGFnZW50OiBhcHByb3ZlLmFnZW50LCB1c2VyX25hbWU6IGFwcHJvdmUudXNlcl9uYW1lfVxuXG5cdFx0cmV0dXJuIG15QXBwcm92ZVxuXG5cdGdldFN0ZXBDdXJyZW50TmFtZSA9IChpbnN0YW5jZUlkKSAtPlxuXHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaW5zdGFuY2VJZH0sIHtmaWVsZHM6IHtcInRyYWNlcy5uYW1lXCI6IDEsIFwidHJhY2VzXCI6IHskc2xpY2U6IC0xfX19KVxuXHRcdGlmIGluc3RhbmNlXG5cdFx0XHRzdGVwQ3VycmVudE5hbWUgPSBpbnN0YW5jZS50cmFjZXM/WzBdPy5uYW1lXG5cblx0XHRyZXR1cm4gc3RlcEN1cnJlbnROYW1lXG5cblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogeyRpbjogaWRzfX0sIHtmaWVsZHM6IHt0cmFjZXM6IDB9fSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGNoYW5nZWQ6IChpZCktPlxuXHRcdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpZH0sIHtmaWVsZHM6IGZpZWxkc30pXG5cdFx0XHRyZXR1cm4gaWYgbm90IGluc3RhbmNlXG5cdFx0XHRteUFwcHJvdmUgPSBnZXRNeUFwcHJvdmUoc2VsZi51c2VySWQsIGlkKVxuXHRcdFx0bXlMYXN0RmluaXNoZWRBcHByb3ZlID0gZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlKHNlbGYudXNlcklkLCBpZClcblx0XHRcdGlmIG15QXBwcm92ZVxuXHRcdFx0XHRpbnN0YW5jZS5pc19yZWFkID0gbXlBcHByb3ZlLmlzX3JlYWRcblx0XHRcdFx0aW5zdGFuY2Uuc3RhcnRfZGF0ZSA9IG15QXBwcm92ZS5zdGFydF9kYXRlXG5cdFx0XHRcdGlmIG15QXBwcm92ZS5hZ2VudFxuXHRcdFx0XHRcdGluc3RhbmNlLmFnZW50X3VzZXJfbmFtZSA9IG15QXBwcm92ZS51c2VyX25hbWVcblx0XHRcdGVsc2Vcblx0XHRcdFx0aW5zdGFuY2UuaXNfcmVhZCA9IHRydWVcblxuXHRcdFx0aWYgbXlMYXN0RmluaXNoZWRBcHByb3ZlXG5cdFx0XHRcdGluc3RhbmNlLm15X2ZpbmlzaF9kYXRlID0gbXlMYXN0RmluaXNoZWRBcHByb3ZlLmZpbmlzaF9kYXRlXG5cblx0XHRcdGluc3RhbmNlLmlzX2NjID0gaW5zdGFuY2UuY2NfdXNlcnM/LmluY2x1ZGVzKHNlbGYudXNlcklkKSB8fCBmYWxzZVxuXHRcdFx0aW5zdGFuY2UuY2NfY291bnQgPSBpbnN0YW5jZS5jY191c2Vycz8ubGVuZ3RoIHx8IDBcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZS5jY191c2Vyc1xuXHRcdFx0dHJ5XG5cdFx0XHRcdHNlbGYuY2hhbmdlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpO1xuXHRcdFx0Y2F0Y2ggZXJyb3Jcblx0XHRcdFx0Y29uc29sZS5sb2coJ2luc3RhbmNlIG9ic2VydmVDaGFuZ2VzIGVycm9yOiAnLCBlcnJvci5tZXNzYWdlKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ3NlbGYudXNlcklkOiAnLCBzZWxmLnVzZXJJZCk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCd0YWJsZU5hbWU6ICcsIHRhYmxlTmFtZSk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdpZHM6ICcsIEpTT04uc3RyaW5naWZ5KGlkcykpO1xuXHRcdFx0XHRjb25zb2xlLmxvZygnbXlBcHByb3ZlOiAnLCBKU09OLnN0cmluZ2lmeShteUFwcHJvdmUpKTtcblx0XHRyZW1vdmVkOiAoaWQpLT5cblx0XHRcdHNlbGYucmVtb3ZlZChcImluc3RhbmNlc1wiLCBpZCk7XG5cdH1cblxuXHRpZHMuZm9yRWFjaCAoaWQpLT5cblx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRyZXR1cm4gaWYgbm90IGluc3RhbmNlXG5cdFx0bXlBcHByb3ZlID0gZ2V0TXlBcHByb3ZlKHNlbGYudXNlcklkLCBpZClcblx0XHRteUxhc3RGaW5pc2hlZEFwcHJvdmUgPSBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUoc2VsZi51c2VySWQsIGlkKVxuXHRcdGlmIG15QXBwcm92ZVxuXHRcdFx0aW5zdGFuY2UuaXNfcmVhZCA9IG15QXBwcm92ZS5pc19yZWFkXG5cdFx0XHRpbnN0YW5jZS5zdGFydF9kYXRlID0gbXlBcHByb3ZlLnN0YXJ0X2RhdGVcblx0XHRcdGlmIG15QXBwcm92ZS5hZ2VudFxuXHRcdFx0XHRcdGluc3RhbmNlLmFnZW50X3VzZXJfbmFtZSA9IG15QXBwcm92ZS51c2VyX25hbWVcblx0XHRlbHNlXG5cdFx0XHRpbnN0YW5jZS5pc19yZWFkID0gdHJ1ZVxuXG5cdFx0aWYgbXlMYXN0RmluaXNoZWRBcHByb3ZlXG5cdFx0XHRpbnN0YW5jZS5teV9maW5pc2hfZGF0ZSA9IG15TGFzdEZpbmlzaGVkQXBwcm92ZS5maW5pc2hfZGF0ZVxuXG5cdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0aW5zdGFuY2UuY2NfY291bnQgPSBpbnN0YW5jZS5jY191c2Vycz8ubGVuZ3RoIHx8IDBcblx0XHRkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnNcblx0XHRzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG5cblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKVxuXG5NZXRlb3IucHVibGlzaCBcImluc3RhbmNlX3Rhc2tzX3RhYnVsYXJcIiwgKHRhYnVsYXJOYW1lLCBpZHMsIGZpZWxkcyktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0Y2hlY2sodGFidWxhck5hbWUsIFN0cmluZyk7XG5cblx0Y2hlY2soaWRzLCBBcnJheSk7XG5cblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKVxuXG5cdCMgY29uc29sZS5sb2coJ3RhYnVsYXJOYW1lOiAnLCB0YWJ1bGFyTmFtZSk7XG5cdCMgY29uc29sZS5sb2coJ2lkczogJywgSlNPTi5zdHJpbmdpZnkoaWRzKSk7XG5cdCMgY29uc29sZS5sb2coJ2ZpZWxkczogJywgSlNPTi5zdHJpbmdpZnkoZmllbGRzKSk7XG5cblx0ZGIuaW5zdGFuY2VfdGFza3MuZmluZCh7XG5cdFx0X2lkOiB7XG5cdFx0XHQkaW46IGlkc1xuXHRcdH1cblx0fSwge1xuXHRcdGZpZWxkczogZmllbGRzXG5cdH0pXG5cbk1ldGVvci5wdWJsaXNoIFwiaW5zdGFuY2VzX3RhYnVsYXJcIiwgKHRhYnVsYXJOYW1lLCBpZHMsIGZpZWxkcyktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0Y2hlY2sodGFidWxhck5hbWUsIFN0cmluZyk7XG5cblx0Y2hlY2soaWRzLCBBcnJheSk7XG5cblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKVxuXG5cdCMgY29uc29sZS5sb2coJ3RhYnVsYXJOYW1lOiAnLCB0YWJ1bGFyTmFtZSk7XG5cdCMgY29uc29sZS5sb2coJ2lkczogJywgSlNPTi5zdHJpbmdpZnkoaWRzKSk7XG5cdCMgY29uc29sZS5sb2coJ2ZpZWxkczogJywgSlNPTi5zdHJpbmdpZnkoZmllbGRzKSk7XG5cblx0ZGIuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdF9pZDoge1xuXHRcdFx0JGluOiBpZHNcblx0XHR9XG5cdH0sIHtcblx0XHRmaWVsZHM6IGZpZWxkc1xuXHR9KSIsInZhciBhc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUsIGxhc3RGaW5pc2hlZEFwcHJvdmVBZ2dyZWdhdGU7XG5cbmxhc3RGaW5pc2hlZEFwcHJvdmVBZ2dyZWdhdGUgPSBmdW5jdGlvbihpbnN0YW5jZWlkLCB1c2VySWQsIGRhdGFNYXAsIGNhbGxiYWNrKSB7XG4gIHZhciBvcGVyYXRpb247XG4gIG9wZXJhdGlvbiA9IFtcbiAgICB7XG4gICAgICBcIiRtYXRjaFwiOiB7XG4gICAgICAgIFwiX2lkXCI6IGluc3RhbmNlaWRcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBcIiRwcm9qZWN0XCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IDEsXG4gICAgICAgIFwiX2FwcHJvdmVcIjogXCIkdHJhY2VzLmFwcHJvdmVzXCJcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBcIiR1bndpbmRcIjogXCIkX2FwcHJvdmVcIlxuICAgIH0sIHtcbiAgICAgIFwiJHVud2luZFwiOiBcIiRfYXBwcm92ZVwiXG4gICAgfSwge1xuICAgICAgXCIkbWF0Y2hcIjoge1xuICAgICAgICBcIl9hcHByb3ZlLmlzX2ZpbmlzaGVkXCI6IHRydWUsXG4gICAgICAgICRvcjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiX2FwcHJvdmUuaGFuZGxlclwiOiB1c2VySWRcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBcIl9hcHByb3ZlLnVzZXJcIjogdXNlcklkXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgXCIkZ3JvdXBcIjoge1xuICAgICAgICBcIl9pZFwiOiBcIiRfaWRcIixcbiAgICAgICAgXCJmaW5pc2hfZGF0ZVwiOiB7XG4gICAgICAgICAgXCIkbGFzdFwiOiBcIiRfYXBwcm92ZS5maW5pc2hfZGF0ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG4gIHJldHVybiBkYi5pbnN0YW5jZXMucmF3Q29sbGVjdGlvbigpLmFnZ3JlZ2F0ZShvcGVyYXRpb24pLnRvQXJyYXkoZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkb2MpIHtcbiAgICAgIHJldHVybiBkYXRhTWFwLnB1c2goZG9jKTtcbiAgICB9KTtcbiAgICBpZiAoY2FsbGJhY2sgJiYgXy5pc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH0pO1xufTtcblxuYXN5bmNMYXN0RmluaXNoZWRBcHByb3ZlID0gTWV0ZW9yLndyYXBBc3luYyhsYXN0RmluaXNoZWRBcHByb3ZlQWdncmVnYXRlKTtcblxuTWV0ZW9yLnB1Ymxpc2goXCJpbnN0YW5jZV90YWJ1bGFyXCIsIGZ1bmN0aW9uKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpIHtcbiAgdmFyIGdldE15QXBwcm92ZSwgZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlLCBnZXRTdGVwQ3VycmVudE5hbWUsIGhhbmRsZSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgY2hlY2sodGFibGVOYW1lLCBTdHJpbmcpO1xuICBjaGVjayhpZHMsIEFycmF5KTtcbiAgY2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcbiAgZmllbGRzLmNjX3VzZXJzID0gMTtcbiAgc2VsZiA9IHRoaXM7XG4gIGdldE15TGFzdEZpbmlzaGVkQXBwcm92ZSA9IGZ1bmN0aW9uKHVzZXJJZCwgaW5zdGFuY2VJZCkge1xuICAgIHZhciBkYXRhO1xuICAgIGRhdGEgPSBbXTtcbiAgICBhc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUoaW5zdGFuY2VJZCwgdXNlcklkLCBkYXRhKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZGF0YVswXTtcbiAgICB9XG4gIH07XG4gIGdldE15QXBwcm92ZSA9IGZ1bmN0aW9uKHVzZXJJZCwgaW5zdGFuY2VJZCkge1xuICAgIHZhciBhcHByb3ZlLCBhcHByb3ZlcywgaW5zdGFuY2UsIGlzX3JlYWQsIG15QXBwcm92ZSwgbm90RmluaXNoZWRUcmFjZXM7XG4gICAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGluc3RhbmNlSWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgdHJhY2VzOiAxXG4gICAgICB9XG4gICAgfSk7XG4gICAgbXlBcHByb3ZlID0gbnVsbDtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaW5zdGFuY2UudHJhY2VzIHx8IGluc3RhbmNlLnRyYWNlcy5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5vdEZpbmlzaGVkVHJhY2VzID0gaW5zdGFuY2UudHJhY2VzLmZpbHRlclByb3BlcnR5KFwiaXNfZmluaXNoZWRcIiwgZmFsc2UpO1xuICAgIGlmIChub3RGaW5pc2hlZFRyYWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBhcHByb3ZlcyA9IG5vdEZpbmlzaGVkVHJhY2VzWzBdLmFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwiaXNfZmluaXNoZWRcIiwgZmFsc2UpLmZpbHRlclByb3BlcnR5KFwiaGFuZGxlclwiLCB1c2VySWQpO1xuICAgICAgaWYgKGFwcHJvdmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXBwcm92ZSA9IGFwcHJvdmVzWzBdO1xuICAgICAgICBteUFwcHJvdmUgPSB7XG4gICAgICAgICAgaWQ6IGFwcHJvdmUuX2lkLFxuICAgICAgICAgIGluc3RhbmNlOiBhcHByb3ZlLmluc3RhbmNlLFxuICAgICAgICAgIHRyYWNlOiBhcHByb3ZlLnRyYWNlLFxuICAgICAgICAgIGlzX3JlYWQ6IGFwcHJvdmUuaXNfcmVhZCxcbiAgICAgICAgICBzdGFydF9kYXRlOiBhcHByb3ZlLnN0YXJ0X2RhdGUsXG4gICAgICAgICAgYWdlbnQ6IGFwcHJvdmUuYWdlbnQsXG4gICAgICAgICAgdXNlcl9uYW1lOiBhcHByb3ZlLnVzZXJfbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW15QXBwcm92ZSkge1xuICAgICAgaXNfcmVhZCA9IGZhbHNlO1xuICAgICAgaW5zdGFuY2UudHJhY2VzLmZvckVhY2goZnVuY3Rpb24odHJhY2UpIHtcbiAgICAgICAgdmFyIHJlZjtcbiAgICAgICAgcmV0dXJuIHRyYWNlICE9IG51bGwgPyAocmVmID0gdHJhY2UuYXBwcm92ZXMpICE9IG51bGwgPyByZWYuZm9yRWFjaChmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgICAgICAgaWYgKGFwcHJvdmUudHlwZSA9PT0gJ2NjJyAmJiBhcHByb3ZlLnVzZXIgPT09IHVzZXJJZCAmJiBhcHByb3ZlLmlzX2ZpbmlzaGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKGFwcHJvdmUuaXNfcmVhZCkge1xuICAgICAgICAgICAgICBpc19yZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBteUFwcHJvdmUgPSB7XG4gICAgICAgICAgICAgIGlkOiBhcHByb3ZlLl9pZCxcbiAgICAgICAgICAgICAgaXNfcmVhZDogaXNfcmVhZCxcbiAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogYXBwcm92ZS5zdGFydF9kYXRlLFxuICAgICAgICAgICAgICBhZ2VudDogYXBwcm92ZS5hZ2VudCxcbiAgICAgICAgICAgICAgdXNlcl9uYW1lOiBhcHByb3ZlLnVzZXJfbmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBteUFwcHJvdmU7XG4gIH07XG4gIGdldFN0ZXBDdXJyZW50TmFtZSA9IGZ1bmN0aW9uKGluc3RhbmNlSWQpIHtcbiAgICB2YXIgaW5zdGFuY2UsIHJlZiwgcmVmMSwgc3RlcEN1cnJlbnROYW1lO1xuICAgIGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpbnN0YW5jZUlkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIFwidHJhY2VzLm5hbWVcIjogMSxcbiAgICAgICAgXCJ0cmFjZXNcIjoge1xuICAgICAgICAgICRzbGljZTogLTFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgc3RlcEN1cnJlbnROYW1lID0gKHJlZiA9IGluc3RhbmNlLnRyYWNlcykgIT0gbnVsbCA/IChyZWYxID0gcmVmWzBdKSAhPSBudWxsID8gcmVmMS5uYW1lIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcEN1cnJlbnROYW1lO1xuICB9O1xuICBoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGlkc1xuICAgIH1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgdHJhY2VzOiAwXG4gICAgfVxuICB9KS5vYnNlcnZlQ2hhbmdlcyh7XG4gICAgY2hhbmdlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHZhciBlcnJvciwgaW5zdGFuY2UsIG15QXBwcm92ZSwgbXlMYXN0RmluaXNoZWRBcHByb3ZlLCByZWYsIHJlZjE7XG4gICAgICBpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBpZFxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IGZpZWxkc1xuICAgICAgfSk7XG4gICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG15QXBwcm92ZSA9IGdldE15QXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpO1xuICAgICAgbXlMYXN0RmluaXNoZWRBcHByb3ZlID0gZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlKHNlbGYudXNlcklkLCBpZCk7XG4gICAgICBpZiAobXlBcHByb3ZlKSB7XG4gICAgICAgIGluc3RhbmNlLmlzX3JlYWQgPSBteUFwcHJvdmUuaXNfcmVhZDtcbiAgICAgICAgaW5zdGFuY2Uuc3RhcnRfZGF0ZSA9IG15QXBwcm92ZS5zdGFydF9kYXRlO1xuICAgICAgICBpZiAobXlBcHByb3ZlLmFnZW50KSB7XG4gICAgICAgICAgaW5zdGFuY2UuYWdlbnRfdXNlcl9uYW1lID0gbXlBcHByb3ZlLnVzZXJfbmFtZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdGFuY2UuaXNfcmVhZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAobXlMYXN0RmluaXNoZWRBcHByb3ZlKSB7XG4gICAgICAgIGluc3RhbmNlLm15X2ZpbmlzaF9kYXRlID0gbXlMYXN0RmluaXNoZWRBcHByb3ZlLmZpbmlzaF9kYXRlO1xuICAgICAgfVxuICAgICAgaW5zdGFuY2UuaXNfY2MgPSAoKHJlZiA9IGluc3RhbmNlLmNjX3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKHNlbGYudXNlcklkKSA6IHZvaWQgMCkgfHwgZmFsc2U7XG4gICAgICBpbnN0YW5jZS5jY19jb3VudCA9ICgocmVmMSA9IGluc3RhbmNlLmNjX3VzZXJzKSAhPSBudWxsID8gcmVmMS5sZW5ndGggOiB2b2lkIDApIHx8IDA7XG4gICAgICBkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbnN0YW5jZSBvYnNlcnZlQ2hhbmdlcyBlcnJvcjogJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzZWxmLnVzZXJJZDogJywgc2VsZi51c2VySWQpO1xuICAgICAgICBjb25zb2xlLmxvZygndGFibGVOYW1lOiAnLCB0YWJsZU5hbWUpO1xuICAgICAgICBjb25zb2xlLmxvZygnaWRzOiAnLCBKU09OLnN0cmluZ2lmeShpZHMpKTtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdteUFwcHJvdmU6ICcsIEpTT04uc3RyaW5naWZ5KG15QXBwcm92ZSkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiBzZWxmLnJlbW92ZWQoXCJpbnN0YW5jZXNcIiwgaWQpO1xuICAgIH1cbiAgfSk7XG4gIGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgdmFyIGluc3RhbmNlLCBteUFwcHJvdmUsIG15TGFzdEZpbmlzaGVkQXBwcm92ZSwgcmVmLCByZWYxO1xuICAgIGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczogZmllbGRzXG4gICAgfSk7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBteUFwcHJvdmUgPSBnZXRNeUFwcHJvdmUoc2VsZi51c2VySWQsIGlkKTtcbiAgICBteUxhc3RGaW5pc2hlZEFwcHJvdmUgPSBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUoc2VsZi51c2VySWQsIGlkKTtcbiAgICBpZiAobXlBcHByb3ZlKSB7XG4gICAgICBpbnN0YW5jZS5pc19yZWFkID0gbXlBcHByb3ZlLmlzX3JlYWQ7XG4gICAgICBpbnN0YW5jZS5zdGFydF9kYXRlID0gbXlBcHByb3ZlLnN0YXJ0X2RhdGU7XG4gICAgICBpZiAobXlBcHByb3ZlLmFnZW50KSB7XG4gICAgICAgIGluc3RhbmNlLmFnZW50X3VzZXJfbmFtZSA9IG15QXBwcm92ZS51c2VyX25hbWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLmlzX3JlYWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobXlMYXN0RmluaXNoZWRBcHByb3ZlKSB7XG4gICAgICBpbnN0YW5jZS5teV9maW5pc2hfZGF0ZSA9IG15TGFzdEZpbmlzaGVkQXBwcm92ZS5maW5pc2hfZGF0ZTtcbiAgICB9XG4gICAgaW5zdGFuY2UuaXNfY2MgPSAoKHJlZiA9IGluc3RhbmNlLmNjX3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKHNlbGYudXNlcklkKSA6IHZvaWQgMCkgfHwgZmFsc2U7XG4gICAgaW5zdGFuY2UuY2NfY291bnQgPSAoKHJlZjEgPSBpbnN0YW5jZS5jY191c2VycykgIT0gbnVsbCA/IHJlZjEubGVuZ3RoIDogdm9pZCAwKSB8fCAwO1xuICAgIGRlbGV0ZSBpbnN0YW5jZS5jY191c2VycztcbiAgICByZXR1cm4gc2VsZi5hZGRlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpO1xuICB9KTtcbiAgc2VsZi5yZWFkeSgpO1xuICByZXR1cm4gc2VsZi5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKFwiaW5zdGFuY2VfdGFza3NfdGFidWxhclwiLCBmdW5jdGlvbih0YWJ1bGFyTmFtZSwgaWRzLCBmaWVsZHMpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgY2hlY2sodGFidWxhck5hbWUsIFN0cmluZyk7XG4gIGNoZWNrKGlkcywgQXJyYXkpO1xuICBjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuICByZXR1cm4gZGIuaW5zdGFuY2VfdGFza3MuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGlkc1xuICAgIH1cbiAgfSwge1xuICAgIGZpZWxkczogZmllbGRzXG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKFwiaW5zdGFuY2VzX3RhYnVsYXJcIiwgZnVuY3Rpb24odGFidWxhck5hbWUsIGlkcywgZmllbGRzKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGNoZWNrKHRhYnVsYXJOYW1lLCBTdHJpbmcpO1xuICBjaGVjayhpZHMsIEFycmF5KTtcbiAgY2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcbiAgcmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IHtcbiAgICAgICRpbjogaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiBmaWVsZHNcbiAgfSk7XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoICdpbnN0YW5jZXNfZHJhZnQnLCAoc3BhY2VJZCkgLT5cblx0Y2hlY2sgc3BhY2VJZCwgU3RyaW5nXG5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVzZXJJZCA9IHRoaXMudXNlcklkXG5cdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7c3RhdGU6XCJkcmFmdFwiLHNwYWNlOnNwYWNlSWQsc3VibWl0dGVyOnVzZXJJZCwkb3I6W3tpbmJveF91c2VyczogeyRleGlzdHM6ZmFsc2V9fSwge2luYm94X3VzZXJzOiBbXX1dfSwge2ZpZWxkczoge19pZDogMSwgc3RhdGU6IDEsIHNwYWNlOiAxLCBzdWJtaXR0ZXI6IDEsIGluYm94X3VzZXJzOiAxLCBtb2RpZmllZDogMSwgbmFtZTogMX0sIHNvcnQ6e21vZGlmaWVkOiAtMX19KSIsIk1ldGVvci5wdWJsaXNoKCdpbnN0YW5jZXNfZHJhZnQnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIHZhciB1c2VySWQ7XG4gIGNoZWNrKHNwYWNlSWQsIFN0cmluZyk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHVzZXJJZCA9IHRoaXMudXNlcklkO1xuICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgIHN0YXRlOiBcImRyYWZ0XCIsXG4gICAgc3BhY2U6IHNwYWNlSWQsXG4gICAgc3VibWl0dGVyOiB1c2VySWQsXG4gICAgJG9yOiBbXG4gICAgICB7XG4gICAgICAgIGluYm94X3VzZXJzOiB7XG4gICAgICAgICAgJGV4aXN0czogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBpbmJveF91c2VyczogW11cbiAgICAgIH1cbiAgICBdXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIF9pZDogMSxcbiAgICAgIHN0YXRlOiAxLFxuICAgICAgc3BhY2U6IDEsXG4gICAgICBzdWJtaXR0ZXI6IDEsXG4gICAgICBpbmJveF91c2VyczogMSxcbiAgICAgIG1vZGlmaWVkOiAxLFxuICAgICAgbmFtZTogMVxuICAgIH0sXG4gICAgc29ydDoge1xuICAgICAgbW9kaWZpZWQ6IC0xXG4gICAgfVxuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2ggJ2Rpc3RyaWJ1dGVkX2luc3RhbmNlc19zdGF0ZV9ieV9pZHMnLCAoaW5zdGFuY2VfaWRzKS0+XG5cdGNoZWNrKGluc3RhbmNlX2lkcywgQXJyYXkpXG5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXHRcblx0dW5sZXNzIGluc3RhbmNlX2lkc1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRpZiBfLmlzRW1wdHkoaW5zdGFuY2VfaWRzKVxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpc1xuXG5cdGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IHskaW46IGluc3RhbmNlX2lkc319LCB7ZmllbGRzOiB7c3RhdGU6IDEsIHRyYWNlczp7JHNsaWNlOiAxfSB9IH0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRhZGRlZDogKGlkLCBmaWVsZHMpLT5cblx0XHRcdHNlbGYuYWRkZWQoJ2luc3RhbmNlcycsIGlkLCB7c3RhdGU6IGZpZWxkcy5zdGF0ZSwgaXNfcmVhZDogZmllbGRzLnRyYWNlc1swXS5hcHByb3Zlc1swXS5pc19yZWFkfSlcblxuXHRcdGNoYW5nZWQ6IChpZCwgZmllbGRzKS0+XG5cdFx0XHRpZiBmaWVsZHMuc3RhdGVcblx0XHRcdFx0c2VsZi5jaGFuZ2VkKCdpbnN0YW5jZXMnLCBpZCwge3N0YXRlOiBmaWVsZHMuc3RhdGV9KVxuXHRcdFx0aWYgZmllbGRzLnRyYWNlc1xuXHRcdFx0XHRzZWxmLmNoYW5nZWQoJ2luc3RhbmNlcycsIGlkLCB7aXNfcmVhZDogZmllbGRzLnRyYWNlc1swXS5hcHByb3Zlc1swXS5pc19yZWFkfSlcblx0fVxuXG5cdHRoaXMucmVhZHkoKVxuXHR0aGlzLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKVxuIiwiTWV0ZW9yLnB1Ymxpc2goJ2Rpc3RyaWJ1dGVkX2luc3RhbmNlc19zdGF0ZV9ieV9pZHMnLCBmdW5jdGlvbihpbnN0YW5jZV9pZHMpIHtcbiAgdmFyIGhhbmRsZSwgc2VsZjtcbiAgY2hlY2soaW5zdGFuY2VfaWRzLCBBcnJheSk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghaW5zdGFuY2VfaWRzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KGluc3RhbmNlX2lkcykpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGluc3RhbmNlX2lkc1xuICAgIH1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgc3RhdGU6IDEsXG4gICAgICB0cmFjZXM6IHtcbiAgICAgICAgJHNsaWNlOiAxXG4gICAgICB9XG4gICAgfVxuICB9KS5vYnNlcnZlQ2hhbmdlcyh7XG4gICAgYWRkZWQ6IGZ1bmN0aW9uKGlkLCBmaWVsZHMpIHtcbiAgICAgIHJldHVybiBzZWxmLmFkZGVkKCdpbnN0YW5jZXMnLCBpZCwge1xuICAgICAgICBzdGF0ZTogZmllbGRzLnN0YXRlLFxuICAgICAgICBpc19yZWFkOiBmaWVsZHMudHJhY2VzWzBdLmFwcHJvdmVzWzBdLmlzX3JlYWRcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hhbmdlZDogZnVuY3Rpb24oaWQsIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkcy5zdGF0ZSkge1xuICAgICAgICBzZWxmLmNoYW5nZWQoJ2luc3RhbmNlcycsIGlkLCB7XG4gICAgICAgICAgc3RhdGU6IGZpZWxkcy5zdGF0ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZHMudHJhY2VzKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoJ2luc3RhbmNlcycsIGlkLCB7XG4gICAgICAgICAgaXNfcmVhZDogZmllbGRzLnRyYWNlc1swXS5hcHByb3Zlc1swXS5pc19yZWFkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHRoaXMucmVhZHkoKTtcbiAgcmV0dXJuIHRoaXMub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2ggJ3JlbGF0ZWRfaW5zdGFjZXMnLCAoaW5zdGFuY2VJZCwgcmVsYXRlZF9pbnN0YW5jZXMpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBpbnN0YW5jZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHJlbGF0ZWRfaW5zdGFuY2VfaWRzID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoaW5zdGFuY2VJZCx7ZmllbGRzOiB7cmVsYXRlZF9pbnN0YW5jZXM6IDF9fSk/LnJlbGF0ZWRfaW5zdGFuY2VzXG5cblx0aWYgcmVsYXRlZF9pbnN0YW5jZV9pZHMgJiYgXy5pc0FycmF5KHJlbGF0ZWRfaW5zdGFuY2VfaWRzKVxuXHRcdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiB7JGluIDogcmVsYXRlZF9pbnN0YW5jZV9pZHN9fSwge2ZpZWxkczoge19pZDogMSwgbmFtZTogMSwgc3BhY2U6IDF9fSlcblx0ZWxzZVxuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkiLCJNZXRlb3IucHVibGlzaCgncmVsYXRlZF9pbnN0YWNlcycsIGZ1bmN0aW9uKGluc3RhbmNlSWQsIHJlbGF0ZWRfaW5zdGFuY2VzKSB7XG4gIHZhciByZWYsIHJlbGF0ZWRfaW5zdGFuY2VfaWRzO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWluc3RhbmNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJlbGF0ZWRfaW5zdGFuY2VfaWRzID0gKHJlZiA9IGRiLmluc3RhbmNlcy5maW5kT25lKGluc3RhbmNlSWQsIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIHJlbGF0ZWRfaW5zdGFuY2VzOiAxXG4gICAgfVxuICB9KSkgIT0gbnVsbCA/IHJlZi5yZWxhdGVkX2luc3RhbmNlcyA6IHZvaWQgMDtcbiAgaWYgKHJlbGF0ZWRfaW5zdGFuY2VfaWRzICYmIF8uaXNBcnJheShyZWxhdGVkX2luc3RhbmNlX2lkcykpIHtcbiAgICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgICAgX2lkOiB7XG4gICAgICAgICRpbjogcmVsYXRlZF9pbnN0YW5jZV9pZHNcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgX2lkOiAxLFxuICAgICAgICBuYW1lOiAxLFxuICAgICAgICBzcGFjZTogMVxuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbn0pO1xuIiwiaWYgTWV0ZW9yLmlzU2VydmVyXG4gICAgTWV0ZW9yLnB1Ymxpc2ggJ3NwYWNlX3VzZXJfc2lnbnMnLCAoc3BhY2VJZCkgLT5cbiAgICAgICAgY2hlY2sgc3BhY2VJZCwgU3RyaW5nXG5cbiAgICAgICAgdW5sZXNzIHRoaXMudXNlcklkXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkeSgpXG5cbiAgICAgICAgcmV0dXJuIGRiLnNwYWNlX3VzZXJfc2lnbnMuZmluZCh7IHNwYWNlOiBzcGFjZUlkIH0sIHtmaWVsZHM6IHtjcmVhdGVkX2J5OiAwLCBjcmVhdGVkOiAwLCBtb2RpZmllZF9ieTogMH19KVxuIiwiaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICBNZXRlb3IucHVibGlzaCgnc3BhY2VfdXNlcl9zaWducycsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgICBjaGVjayhzcGFjZUlkLCBTdHJpbmcpO1xuICAgIGlmICghdGhpcy51c2VySWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gICAgfVxuICAgIHJldHVybiBkYi5zcGFjZV91c2VyX3NpZ25zLmZpbmQoe1xuICAgICAgc3BhY2U6IHNwYWNlSWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgY3JlYXRlZF9ieTogMCxcbiAgICAgICAgY3JlYXRlZDogMCxcbiAgICAgICAgbW9kaWZpZWRfYnk6IDBcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iLCIjIyNcbk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlIFwidXNlcl9pbmJveF9pbnN0YW5jZVwiLCAoKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1c2VyU3BhY2VJZHMgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcblx0XHR1c2VyOiB0aGlzLnVzZXJJZCxcblx0XHR1c2VyX2FjY2VwdGVkOiB0cnVlXG5cdH0sIHtmaWVsZHM6IHtzcGFjZTogMX19KS5mZXRjaCgpLmdldEVhY2goXCJzcGFjZVwiKTtcblx0cXVlcnkgPSB7c3BhY2U6IHskaW46IHVzZXJTcGFjZUlkc319XG5cblx0cXVlcnkuJG9yID0gW3tpbmJveF91c2VyczogdGhpcy51c2VySWR9LCB7Y2NfdXNlcnM6IHRoaXMudXNlcklkfV1cblxuXHRmaW5kOiAtPlxuXHRcdGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7XG5cdFx0XHRmaWVsZHM6IHtcblx0XHRcdFx0c3BhY2U6IDEsXG5cdFx0XHRcdGFwcGxpY2FudF9uYW1lOiAxLFxuXHRcdFx0XHRmbG93OiAxLFxuXHRcdFx0XHRpbmJveF91c2VyczogMSxcblx0XHRcdFx0Y2NfdXNlcnM6IDEsXG5cdFx0XHRcdHN0YXRlOiAxLFxuXHRcdFx0XHRuYW1lOiAxLFxuXHRcdFx0XHRtb2RpZmllZDogMSxcblx0XHRcdFx0Zm9ybTogMVxuXHRcdFx0fSwgc29ydDoge21vZGlmaWVkOiAtMX0sIHNraXA6IDAsIGxpbWl0OiAyMDBcblx0XHR9KTtcblx0Y2hpbGRyZW46IFtcblx0XHR7XG5cdFx0XHRmaW5kOiAoaW5zdGFuY2UsIHBvc3QpLT5cblx0XHRcdFx0ZGIuZmxvd3MuZmluZCh7X2lkOiBpbnN0YW5jZS5mbG93fSwge2ZpZWxkczoge25hbWU6IDEsIHNwYWNlOiAxfX0pO1xuXHRcdH1cblx0XVxuIyMjXG5cbiMjI1xuTWV0ZW9yLnB1Ymxpc2ggJ215X2luYm94X2luc3RhbmNlcycsIChzcGFjZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpcztcblxuXHQjXHR1c2VyU3BhY2VJZHMgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcblx0I1x0XHR1c2VyOiB0aGlzLnVzZXJJZCxcblx0I1x0XHR1c2VyX2FjY2VwdGVkOiB0cnVlXG5cdCNcdH0sIHtmaWVsZHM6IHtzcGFjZTogMX19KS5mZXRjaCgpLmdldEVhY2goXCJzcGFjZVwiKTtcblxuXHRxdWVyeSA9IHtzcGFjZTogc3BhY2VJZH1cblxuXHRxdWVyeS4kb3IgPSBbe2luYm94X3VzZXJzOiB0aGlzLnVzZXJJZH0sIHtjY191c2VyczogdGhpcy51c2VySWR9XVxuXG5cdGZpZWxkcyA9IHtcblx0XHRzcGFjZTogMSxcbiNcdFx0YXBwbGljYW50X25hbWU6IDEsXG5cdFx0ZmxvdzogMSxcblx0XHRpbmJveF91c2VyczogMSxcblx0XHRjY191c2VyczogMSxcblx0XHRzdGF0ZTogMSxcbiNcdFx0bmFtZTogMSxcbiNcdFx0bW9kaWZpZWQ6IDEsXG5cdFx0Zm9ybTogMVxuXHR9XG5cblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtzb3J0OiB7bW9kaWZpZWQ6IC0xfSwgc2tpcDogMCwgbGltaXQ6IDUwMH0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRhZGRlZDogKGlkKS0+XG5cdFx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRcdGluc3RhbmNlLmlzX2NjID0gaW5zdGFuY2UuY2NfdXNlcnM/LmluY2x1ZGVzKHNlbGYudXNlcklkKSB8fCBmYWxzZVxuXHRcdFx0ZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzXG5cdFx0XHRzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSlcblx0XHRjaGFuZ2VkOiAoaWQpLT5cblx0XHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaWR9LCB7ZmllbGRzOiBmaWVsZHN9KVxuXHRcdFx0cmV0dXJuIGlmIG5vdCBpbnN0YW5jZVxuXHRcdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0XHRkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnNcblx0XHRcdHNlbGYuY2hhbmdlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpO1xuXHRcdHJlbW92ZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcblx0fVxuXG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKClcbiMjI1xuXG5fZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSA9IChzcGFjZUlkLCB1c2VySWQsIF9pdGVtcywgY2FsbGJhY2spLT5cblx0ZGIuaW5zdGFuY2VzLnJhd0NvbGxlY3Rpb24oKS5hZ2dyZWdhdGUoW1xuXHRcdHtcblx0XHRcdCRtYXRjaDoge1xuXHRcdFx0XHRzcGFjZTogc3BhY2VJZCxcblx0XHRcdFx0JG9yOiBbe2luYm94X3VzZXJzOiB1c2VySWR9LCB7Y2NfdXNlcnM6IHVzZXJJZH1dXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHQkZ3JvdXA6IHtcblx0XHRcdFx0X2lkOiB7ZmxvdzogXCIkZmxvd1wiLCBjYXRlZ29yeTogXCIkY2F0ZWdvcnlcIn0sIGNvdW50OiB7JHN1bTogMX1cblx0XHRcdH1cblx0XHR9XG5cdF0pLnRvQXJyYXkgKGVyciwgZGF0YSktPlxuXHRcdGlmIGVyclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycilcblxuXHRcdGRhdGEuZm9yRWFjaCAoZG9jKSAtPlxuXHRcdFx0X2l0ZW1zLnB1c2ggZG9jXG5cblx0XHRpZiBjYWxsYmFjayAmJiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spXG5cdFx0XHRjYWxsYmFjaygpXG5cdFx0cmV0dXJuXG5cbl9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlID0gTWV0ZW9yLndyYXBBc3luYyhfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSlcblxuTWV0ZW9yLnB1Ymxpc2ggJ215X2luYm94X2Zsb3dfaW5zdGFuY2VzX2NvdW50JywgKHNwYWNlSWQpLT5cblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0c2VsZiA9IHRoaXM7XG5cblx0cXVlcnkgPSB7c3BhY2U6IHNwYWNlSWR9XG5cblx0cXVlcnkuJG9yID0gW3tpbmJveF91c2VyczogdGhpcy51c2VySWR9LCB7Y2NfdXNlcnM6IHRoaXMudXNlcklkfV1cblxuXHRkYXRhID0gW10gICPmlbDmja7moLzlvI/vvJpbe19pZDpmbG93SWQsIGNvdW50OiDlvoXlip7mlbDph499LCB7X2lkOmZsb3dJZDIsIGNvdW50OiDlvoXlip7mlbDph48yfV1cblx0X2FzeW5jX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUoc3BhY2VJZCwgc2VsZi51c2VySWQsIGRhdGEpXG5cblx0X2Zsb3dzRGF0YSA9IFtdXG5cblx0Xy5lYWNoIGRhdGEsIChkYXRhSXRlbSktPlxuXHRcdF9mbG93c0RhdGEucHVzaCh7X2lkOiBkYXRhSXRlbS5faWQuZmxvdywgY2F0ZWdvcnk6IGRhdGFJdGVtLl9pZC5jYXRlZ29yeSwgY291bnQ6IGRhdGFJdGVtLmNvdW50fSlcblxuXHRzZWxmLmFkZGVkKFwiZmxvd19pbnN0YW5jZXNcIiwgc3BhY2VJZCwge2Zsb3dzOiBfZmxvd3NEYXRhfSk7XG5cblx0X2NoYW5nZURhdGEgPSAoZG9jLCBhY3Rpb24pLT5cblx0XHRmbG93X2luc3RhbmNlID0gXy5maW5kIF9mbG93c0RhdGEsIChmKS0+XG5cdFx0XHRyZXR1cm4gZi5faWQgPT0gZG9jLmZsb3dcblx0XHRpZiBmbG93X2luc3RhbmNlXG5cdFx0XHRpZiBhY3Rpb24gPT0gXCJhZGRlZFwiXG5cdFx0XHRcdGZsb3dfaW5zdGFuY2UuY291bnQrK1xuXHRcdFx0ZWxzZSBpZiBhY3Rpb24gPT0gXCJyZW1vdmVkXCJcblx0XHRcdFx0Zmxvd19pbnN0YW5jZS5jb3VudC0tXG5cdFx0ZWxzZSBpZiBhY3Rpb24gPT0gXCJhZGRlZFwiXG5cdFx0XHRfZmxvd3NEYXRhLnB1c2gge19pZDogZG9jLmZsb3csIGNhdGVnb3J5OiBkb2MuY2F0ZWdvcnksIGNvdW50OiAxfVxuXG5cdFx0c2VsZi5jaGFuZ2VkKFwiZmxvd19pbnN0YW5jZXNcIiwgc3BhY2VJZCwge2Zsb3dzOiBfZmxvd3NEYXRhfSk7XG5cblx0X2luaXQgPSB0cnVlXG5cdGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7ZmllbGRzOiB7X2lkOiAxLCBpbmJveF91c2VyczogMSwgY2NfdXNlcnM6IDEsIGZsb3c6IDEsIGNhdGVnb3J5OiAxfX0pLm9ic2VydmUge1xuXHRcdGFkZGVkOiAoZG9jKS0+XG5cdFx0XHRpZiAhX2luaXRcblx0XHRcdFx0X2NoYW5nZURhdGEoZG9jLCBcImFkZGVkXCIpXG5cdFx0cmVtb3ZlZDogKGRvYyktPlxuXHRcdFx0aWYgIV9pbml0XG5cdFx0XHRcdF9jaGFuZ2VEYXRhKGRvYywgXCJyZW1vdmVkXCIpXG5cdH1cblx0X2luaXQgPSBmYWxzZVxuXG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKCkiLCJcbi8qXG5NZXRlb3IucHVibGlzaENvbXBvc2l0ZSBcInVzZXJfaW5ib3hfaW5zdGFuY2VcIiwgKCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dXNlclNwYWNlSWRzID0gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG5cdFx0dXNlcjogdGhpcy51c2VySWQsXG5cdFx0dXNlcl9hY2NlcHRlZDogdHJ1ZVxuXHR9LCB7ZmllbGRzOiB7c3BhY2U6IDF9fSkuZmV0Y2goKS5nZXRFYWNoKFwic3BhY2VcIik7XG5cdHF1ZXJ5ID0ge3NwYWNlOiB7JGluOiB1c2VyU3BhY2VJZHN9fVxuXG5cdHF1ZXJ5LiRvciA9IFt7aW5ib3hfdXNlcnM6IHRoaXMudXNlcklkfSwge2NjX3VzZXJzOiB0aGlzLnVzZXJJZH1dXG5cblx0ZmluZDogLT5cblx0XHRkYi5pbnN0YW5jZXMuZmluZChxdWVyeSwge1xuXHRcdFx0ZmllbGRzOiB7XG5cdFx0XHRcdHNwYWNlOiAxLFxuXHRcdFx0XHRhcHBsaWNhbnRfbmFtZTogMSxcblx0XHRcdFx0ZmxvdzogMSxcblx0XHRcdFx0aW5ib3hfdXNlcnM6IDEsXG5cdFx0XHRcdGNjX3VzZXJzOiAxLFxuXHRcdFx0XHRzdGF0ZTogMSxcblx0XHRcdFx0bmFtZTogMSxcblx0XHRcdFx0bW9kaWZpZWQ6IDEsXG5cdFx0XHRcdGZvcm06IDFcblx0XHRcdH0sIHNvcnQ6IHttb2RpZmllZDogLTF9LCBza2lwOiAwLCBsaW1pdDogMjAwXG5cdFx0fSk7XG5cdGNoaWxkcmVuOiBbXG5cdFx0e1xuXHRcdFx0ZmluZDogKGluc3RhbmNlLCBwb3N0KS0+XG5cdFx0XHRcdGRiLmZsb3dzLmZpbmQoe19pZDogaW5zdGFuY2UuZmxvd30sIHtmaWVsZHM6IHtuYW1lOiAxLCBzcGFjZTogMX19KTtcblx0XHR9XG5cdF1cbiAqL1xuXG4vKlxuTWV0ZW9yLnB1Ymxpc2ggJ215X2luYm94X2luc3RhbmNlcycsIChzcGFjZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpcztcblxuXHQgKlx0dXNlclNwYWNlSWRzID0gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG5cdCAqXHRcdHVzZXI6IHRoaXMudXNlcklkLFxuXHQgKlx0XHR1c2VyX2FjY2VwdGVkOiB0cnVlXG5cdCAqXHR9LCB7ZmllbGRzOiB7c3BhY2U6IDF9fSkuZmV0Y2goKS5nZXRFYWNoKFwic3BhY2VcIik7XG5cblx0cXVlcnkgPSB7c3BhY2U6IHNwYWNlSWR9XG5cblx0cXVlcnkuJG9yID0gW3tpbmJveF91c2VyczogdGhpcy51c2VySWR9LCB7Y2NfdXNlcnM6IHRoaXMudXNlcklkfV1cblxuXHRmaWVsZHMgPSB7XG5cdFx0c3BhY2U6IDEsXG4gKlx0XHRhcHBsaWNhbnRfbmFtZTogMSxcblx0XHRmbG93OiAxLFxuXHRcdGluYm94X3VzZXJzOiAxLFxuXHRcdGNjX3VzZXJzOiAxLFxuXHRcdHN0YXRlOiAxLFxuICpcdFx0bmFtZTogMSxcbiAqXHRcdG1vZGlmaWVkOiAxLFxuXHRcdGZvcm06IDFcblx0fVxuXG5cdGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7c29ydDoge21vZGlmaWVkOiAtMX0sIHNraXA6IDAsIGxpbWl0OiA1MDB9KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0YWRkZWQ6IChpZCktPlxuXHRcdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpZH0sIHtmaWVsZHM6IGZpZWxkc30pXG5cdFx0XHRyZXR1cm4gaWYgbm90IGluc3RhbmNlXG5cdFx0XHRpbnN0YW5jZS5pc19jYyA9IGluc3RhbmNlLmNjX3VzZXJzPy5pbmNsdWRlcyhzZWxmLnVzZXJJZCkgfHwgZmFsc2Vcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZS5jY191c2Vyc1xuXHRcdFx0c2VsZi5hZGRlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpXG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRcdGluc3RhbmNlLmlzX2NjID0gaW5zdGFuY2UuY2NfdXNlcnM/LmluY2x1ZGVzKHNlbGYudXNlcklkKSB8fCBmYWxzZVxuXHRcdFx0ZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzXG5cdFx0XHRzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGluc3RhbmNlKTtcblx0XHRyZW1vdmVkOiAoaWQpLT5cblx0XHRcdHNlbGYucmVtb3ZlZChcImluc3RhbmNlc1wiLCBpZCk7XG5cdH1cblxuXHRzZWxmLnJlYWR5KCk7XG5cdHNlbGYub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpXG4gKi9cbnZhciBfYXN5bmNfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSwgX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGU7XG5cbl9nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlID0gZnVuY3Rpb24oc3BhY2VJZCwgdXNlcklkLCBfaXRlbXMsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBkYi5pbnN0YW5jZXMucmF3Q29sbGVjdGlvbigpLmFnZ3JlZ2F0ZShbXG4gICAge1xuICAgICAgJG1hdGNoOiB7XG4gICAgICAgIHNwYWNlOiBzcGFjZUlkLFxuICAgICAgICAkb3I6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbmJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgY2NfdXNlcnM6IHVzZXJJZFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgICRncm91cDoge1xuICAgICAgICBfaWQ6IHtcbiAgICAgICAgICBmbG93OiBcIiRmbG93XCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiJGNhdGVnb3J5XCJcbiAgICAgICAgfSxcbiAgICAgICAgY291bnQ6IHtcbiAgICAgICAgICAkc3VtOiAxXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF0pLnRvQXJyYXkoZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkb2MpIHtcbiAgICAgIHJldHVybiBfaXRlbXMucHVzaChkb2MpO1xuICAgIH0pO1xuICAgIGlmIChjYWxsYmFjayAmJiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5fYXN5bmNfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSA9IE1ldGVvci53cmFwQXN5bmMoX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUpO1xuXG5NZXRlb3IucHVibGlzaCgnbXlfaW5ib3hfZmxvd19pbnN0YW5jZXNfY291bnQnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIHZhciBfY2hhbmdlRGF0YSwgX2Zsb3dzRGF0YSwgX2luaXQsIGRhdGEsIGhhbmRsZSwgcXVlcnksIHNlbGY7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBxdWVyeSA9IHtcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9O1xuICBxdWVyeS4kb3IgPSBbXG4gICAge1xuICAgICAgaW5ib3hfdXNlcnM6IHRoaXMudXNlcklkXG4gICAgfSwge1xuICAgICAgY2NfdXNlcnM6IHRoaXMudXNlcklkXG4gICAgfVxuICBdO1xuICBkYXRhID0gW107XG4gIF9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlKHNwYWNlSWQsIHNlbGYudXNlcklkLCBkYXRhKTtcbiAgX2Zsb3dzRGF0YSA9IFtdO1xuICBfLmVhY2goZGF0YSwgZnVuY3Rpb24oZGF0YUl0ZW0pIHtcbiAgICByZXR1cm4gX2Zsb3dzRGF0YS5wdXNoKHtcbiAgICAgIF9pZDogZGF0YUl0ZW0uX2lkLmZsb3csXG4gICAgICBjYXRlZ29yeTogZGF0YUl0ZW0uX2lkLmNhdGVnb3J5LFxuICAgICAgY291bnQ6IGRhdGFJdGVtLmNvdW50XG4gICAgfSk7XG4gIH0pO1xuICBzZWxmLmFkZGVkKFwiZmxvd19pbnN0YW5jZXNcIiwgc3BhY2VJZCwge1xuICAgIGZsb3dzOiBfZmxvd3NEYXRhXG4gIH0pO1xuICBfY2hhbmdlRGF0YSA9IGZ1bmN0aW9uKGRvYywgYWN0aW9uKSB7XG4gICAgdmFyIGZsb3dfaW5zdGFuY2U7XG4gICAgZmxvd19pbnN0YW5jZSA9IF8uZmluZChfZmxvd3NEYXRhLCBmdW5jdGlvbihmKSB7XG4gICAgICByZXR1cm4gZi5faWQgPT09IGRvYy5mbG93O1xuICAgIH0pO1xuICAgIGlmIChmbG93X2luc3RhbmNlKSB7XG4gICAgICBpZiAoYWN0aW9uID09PSBcImFkZGVkXCIpIHtcbiAgICAgICAgZmxvd19pbnN0YW5jZS5jb3VudCsrO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IFwicmVtb3ZlZFwiKSB7XG4gICAgICAgIGZsb3dfaW5zdGFuY2UuY291bnQtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJhZGRlZFwiKSB7XG4gICAgICBfZmxvd3NEYXRhLnB1c2goe1xuICAgICAgICBfaWQ6IGRvYy5mbG93LFxuICAgICAgICBjYXRlZ29yeTogZG9jLmNhdGVnb3J5LFxuICAgICAgICBjb3VudDogMVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJmbG93X2luc3RhbmNlc1wiLCBzcGFjZUlkLCB7XG4gICAgICBmbG93czogX2Zsb3dzRGF0YVxuICAgIH0pO1xuICB9O1xuICBfaW5pdCA9IHRydWU7XG4gIGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBfaWQ6IDEsXG4gICAgICBpbmJveF91c2VyczogMSxcbiAgICAgIGNjX3VzZXJzOiAxLFxuICAgICAgZmxvdzogMSxcbiAgICAgIGNhdGVnb3J5OiAxXG4gICAgfVxuICB9KS5vYnNlcnZlKHtcbiAgICBhZGRlZDogZnVuY3Rpb24oZG9jKSB7XG4gICAgICBpZiAoIV9pbml0KSB7XG4gICAgICAgIHJldHVybiBfY2hhbmdlRGF0YShkb2MsIFwiYWRkZWRcIik7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVkOiBmdW5jdGlvbihkb2MpIHtcbiAgICAgIGlmICghX2luaXQpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFuZ2VEYXRhKGRvYywgXCJyZW1vdmVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIF9pbml0ID0gZmFsc2U7XG4gIHNlbGYucmVhZHkoKTtcbiAgcmV0dXJuIHNlbGYub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuIiwiXG5NZXRlb3IucHVibGlzaCAnZmxvd19tYWluX2F0dGFjaF90ZW1wbGF0ZScsIChzcGFjZUlkLCBmbG93SWQpLT5cblx0Y2hlY2soc3BhY2VJZCwgU3RyaW5nKVxuXHRjaGVjayhmbG93SWQsIFN0cmluZylcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWQgJiYgZmxvd0lkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHJldHVybiBDcmVhdG9yLmdldENvbGxlY3Rpb24oJ2Ntc19maWxlcycpLmZpbmQoeyBzcGFjZTogc3BhY2VJZCwgJ3BhcmVudC5vJzogJ2Zsb3dzJywgJ3BhcmVudC5pZHMnOiBmbG93SWQsICBuYW1lOiAn5q2j5paHLmRvY3gnIH0pXG4iLCJNZXRlb3IucHVibGlzaCgnZmxvd19tYWluX2F0dGFjaF90ZW1wbGF0ZScsIGZ1bmN0aW9uKHNwYWNlSWQsIGZsb3dJZCkge1xuICBjaGVjayhzcGFjZUlkLCBTdHJpbmcpO1xuICBjaGVjayhmbG93SWQsIFN0cmluZyk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghKHNwYWNlSWQgJiYgZmxvd0lkKSkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIENyZWF0b3IuZ2V0Q29sbGVjdGlvbignY21zX2ZpbGVzJykuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWQsXG4gICAgJ3BhcmVudC5vJzogJ2Zsb3dzJyxcbiAgICAncGFyZW50Lmlkcyc6IGZsb3dJZCxcbiAgICBuYW1lOiAn5q2j5paHLmRvY3gnXG4gIH0pO1xufSk7XG4iLCJ3b3JrZmxvd1RlbXBsYXRlID0ge31cblxuI+WPr+eUqOatpOiEmuacrOS7juaooeadv+W3peS9nOWMuuWBmuaJuemHj+WvvOWHuu+8mlxuI+S9v+eUqOeuoeeQhuWRmOi0puaIt+eZu+W9leWQju+8jOi/m+WFpUZsb3dNb2R1bGVz77yM5Zyo5o6n5Yi25Y+w5omn6KGM5Lul5LiL6ISa5pys5Y2z5Y+vXG4jZGIuZm9ybXMuZmluZCh7c3RhdGU6XCJlbmFibGVkXCJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGZvcm0pe3dpbmRvdy5vcGVuKE1ldGVvci5hYnNvbHV0ZVVybChcImFwaS93b3JrZmxvdy9leHBvcnQvZm9ybT9mb3JtPVwiK2Zvcm0uX2lkKSl9KVxud29ya2Zsb3dUZW1wbGF0ZVtcImVuXCJdID1bXVxuXG4j5Y+v55So5q2k6ISa5pys5LuO5qih5p2/5bel5L2c5Yy65YGa5om56YeP5a+85Ye677yaXG4j5L2/55So566h55CG5ZGY6LSm5oi355m75b2V5ZCO77yM6L+b5YWl5qih5p2/5LiT5Yy677yM5Zyo5o6n5Yi25Y+w5omn6KGM5Lul5LiL6ISa5pys5Y2z5Y+vXG4jZGIuZm9ybXMuZmluZCh7c3RhdGU6XCJlbmFibGVkXCJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGZvcm0pe3dpbmRvdy5vcGVuKE1ldGVvci5hYnNvbHV0ZVVybChcImFwaS93b3JrZmxvdy9leHBvcnQvZm9ybT9mb3JtPVwiK2Zvcm0uX2lkKSl9KVxud29ya2Zsb3dUZW1wbGF0ZVtcInpoLUNOXCJdID1bXVxuXG5NZXRlb3Iuc3RhcnR1cCAoKS0+XG5cdGZzID0gcmVxdWlyZSgnZnMnKVxuXHRwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cdG1pbWUgPSByZXF1aXJlKCdtaW1lJylcblx0cmVhZEZpbGVMaXN0ID0gKHBhdGhEaXIsIGZpbGVzTGlzdCktPlxuXHRcdGZpbGVzID0gZnMucmVhZGRpclN5bmMocGF0aERpcilcblx0XHRmaWxlcy5mb3JFYWNoIChuYW1lLCBpbmRleCktPlxuXHRcdFx0c3RhdCA9IGZzLnN0YXRTeW5jKHBhdGguam9pbihwYXRoRGlyLCBuYW1lKSlcblx0XHRcdGlmIHN0YXQuaXNEaXJlY3RvcnkoKVxuXHRcdFx0XHQjIOmAkuW9kuivu+WPluaWh+S7tlxuXHRcdFx0XHRyZWFkRmlsZUxpc3QocGF0aC5qb2luKHBhdGhEaXIsIG5hbWUpLCBmaWxlc0xpc3QpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdG9iaiA9IHt9XG5cdFx0XHRcdG9iai5wYXRoID0gcGF0aERpclxuXHRcdFx0XHRvYmoubmFtZSA9IG5hbWVcblx0XHRcdFx0ZmlsZXNMaXN0LnB1c2gob2JqKVxuXG5cdCPojrflj5Z6aC1jbuaWh+S7tuWkueS4i+eahOaJgOacieaWh+S7tlxuXHRmaWxlc0xpc3RfY24gPSBbXVxuXHRwYXRoX2NuID0gTWV0ZW9yLnNldHRpbmdzLndvcmtmbG93VGVtcGxhdGVzPy5wYXRoX2NuXG5cdGlmIHBhdGhfY25cblx0XHRhYnNvbHV0ZV9wYXRoX2NuID0gcGF0aC5yZXNvbHZlKHBhdGhfY24pXG5cdFx0Y29uc29sZS5sb2cgXCJhYnNvbHV0ZV9wYXRoX2NuXCIsIGFic29sdXRlX3BhdGhfY25cblx0XHRpZiBmcy5leGlzdHNTeW5jKGFic29sdXRlX3BhdGhfY24pXG5cdFx0XHRyZWFkRmlsZUxpc3QoYWJzb2x1dGVfcGF0aF9jbiwgZmlsZXNMaXN0X2NuKVxuXHRcdFx0ZmlsZXNMaXN0X2NuLmZvckVhY2ggKGZpbGUpLT5cblx0XHRcdFx0dHJ5XG5cdFx0XHRcdFx0aWYgbWltZS5nZXRUeXBlKGZpbGUubmFtZSkgaXMgXCJhcHBsaWNhdGlvbi9qc29uXCJcblx0XHRcdFx0XHRcdGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGZpbGUucGF0aCwgZmlsZS5uYW1lKSwgJ3V0ZjgnKVxuXHRcdFx0XHRcdFx0d29ya2Zsb3dUZW1wbGF0ZVtcInpoLUNOXCJdLnB1c2goSlNPTi5wYXJzZShkYXRhKSlcblx0XHRcdFx0Y2F0Y2ggZVxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IgXCLojrflj5Z6aC1jbuaWh+S7tuWkueS4i+eahOaJgOacieaWh+S7tlwiLCBwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciBlLnN0YWNrXG5cblx0I+iOt+WPlmVuLXVz5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XG5cdGZpbGVzTGlzdF91cyA9IFtdXG5cdHBhdGhfdXMgPSBNZXRlb3Iuc2V0dGluZ3Mud29ya2Zsb3dUZW1wbGF0ZXM/LnBhdGhfdXNcblx0aWYgcGF0aF91c1xuXHRcdGFic29sdXRlX3BhdGhfdXMgPSBwYXRoLnJlc29sdmUocGF0aF91cylcblx0XHRjb25zb2xlLmxvZyBcImFic29sdXRlX3BhdGhfdXNcIiwgYWJzb2x1dGVfcGF0aF91c1xuXHRcdGlmIGZzLmV4aXN0c1N5bmMoYWJzb2x1dGVfcGF0aF91cylcblx0XHRcdHJlYWRGaWxlTGlzdChhYnNvbHV0ZV9wYXRoX3VzLCBmaWxlc0xpc3RfdXMpXG5cdFx0XHRmaWxlc0xpc3RfdXMuZm9yRWFjaCAoZmlsZSktPlxuXHRcdFx0XHR0cnlcblx0XHRcdFx0XHRpZiBtaW1lLmdldFR5cGUoZmlsZS5uYW1lKSBpcyBcImFwcGxpY2F0aW9uL2pzb25cIlxuXHRcdFx0XHRcdFx0ZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpLCAndXRmOCcpXG5cdFx0XHRcdFx0XHR3b3JrZmxvd1RlbXBsYXRlW1wiZW5cIl0ucHVzaChKU09OLnBhcnNlKGRhdGEpKVxuXHRcdFx0XHRjYXRjaCBlXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciBcIuiOt+WPlmVuLXVz5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XCIsIHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSlcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yIGUuc3RhY2tcblx0XHRcdFx0XG5cdFx0XHRcdFx0XG5cblxuIiwiICAgICAgICAgICAgICAgICAgICAgXG5cbndvcmtmbG93VGVtcGxhdGUgPSB7fTtcblxud29ya2Zsb3dUZW1wbGF0ZVtcImVuXCJdID0gW107XG5cbndvcmtmbG93VGVtcGxhdGVbXCJ6aC1DTlwiXSA9IFtdO1xuXG5NZXRlb3Iuc3RhcnR1cChmdW5jdGlvbigpIHtcbiAgdmFyIGFic29sdXRlX3BhdGhfY24sIGFic29sdXRlX3BhdGhfdXMsIGZpbGVzTGlzdF9jbiwgZmlsZXNMaXN0X3VzLCBmcywgbWltZSwgcGF0aCwgcGF0aF9jbiwgcGF0aF91cywgcmVhZEZpbGVMaXN0LCByZWYsIHJlZjE7XG4gIGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgbWltZSA9IHJlcXVpcmUoJ21pbWUnKTtcbiAgcmVhZEZpbGVMaXN0ID0gZnVuY3Rpb24ocGF0aERpciwgZmlsZXNMaXN0KSB7XG4gICAgdmFyIGZpbGVzO1xuICAgIGZpbGVzID0gZnMucmVhZGRpclN5bmMocGF0aERpcik7XG4gICAgcmV0dXJuIGZpbGVzLmZvckVhY2goZnVuY3Rpb24obmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBvYmosIHN0YXQ7XG4gICAgICBzdGF0ID0gZnMuc3RhdFN5bmMocGF0aC5qb2luKHBhdGhEaXIsIG5hbWUpKTtcbiAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRGaWxlTGlzdChwYXRoLmpvaW4ocGF0aERpciwgbmFtZSksIGZpbGVzTGlzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSB7fTtcbiAgICAgICAgb2JqLnBhdGggPSBwYXRoRGlyO1xuICAgICAgICBvYmoubmFtZSA9IG5hbWU7XG4gICAgICAgIHJldHVybiBmaWxlc0xpc3QucHVzaChvYmopO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBmaWxlc0xpc3RfY24gPSBbXTtcbiAgcGF0aF9jbiA9IChyZWYgPSBNZXRlb3Iuc2V0dGluZ3Mud29ya2Zsb3dUZW1wbGF0ZXMpICE9IG51bGwgPyByZWYucGF0aF9jbiA6IHZvaWQgMDtcbiAgaWYgKHBhdGhfY24pIHtcbiAgICBhYnNvbHV0ZV9wYXRoX2NuID0gcGF0aC5yZXNvbHZlKHBhdGhfY24pO1xuICAgIGNvbnNvbGUubG9nKFwiYWJzb2x1dGVfcGF0aF9jblwiLCBhYnNvbHV0ZV9wYXRoX2NuKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhhYnNvbHV0ZV9wYXRoX2NuKSkge1xuICAgICAgcmVhZEZpbGVMaXN0KGFic29sdXRlX3BhdGhfY24sIGZpbGVzTGlzdF9jbik7XG4gICAgICBmaWxlc0xpc3RfY24uZm9yRWFjaChmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgIHZhciBkYXRhLCBlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChtaW1lLmdldFR5cGUoZmlsZS5uYW1lKSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcbiAgICAgICAgICAgIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGZpbGUucGF0aCwgZmlsZS5uYW1lKSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIHJldHVybiB3b3JrZmxvd1RlbXBsYXRlW1wiemgtQ05cIl0ucHVzaChKU09OLnBhcnNlKGRhdGEpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZSA9IGVycm9yO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCLojrflj5Z6aC1jbuaWh+S7tuWkueS4i+eahOaJgOacieaWh+S7tlwiLCBwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpKTtcbiAgICAgICAgICByZXR1cm4gY29uc29sZS5lcnJvcihlLnN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGZpbGVzTGlzdF91cyA9IFtdO1xuICBwYXRoX3VzID0gKHJlZjEgPSBNZXRlb3Iuc2V0dGluZ3Mud29ya2Zsb3dUZW1wbGF0ZXMpICE9IG51bGwgPyByZWYxLnBhdGhfdXMgOiB2b2lkIDA7XG4gIGlmIChwYXRoX3VzKSB7XG4gICAgYWJzb2x1dGVfcGF0aF91cyA9IHBhdGgucmVzb2x2ZShwYXRoX3VzKTtcbiAgICBjb25zb2xlLmxvZyhcImFic29sdXRlX3BhdGhfdXNcIiwgYWJzb2x1dGVfcGF0aF91cyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYWJzb2x1dGVfcGF0aF91cykpIHtcbiAgICAgIHJlYWRGaWxlTGlzdChhYnNvbHV0ZV9wYXRoX3VzLCBmaWxlc0xpc3RfdXMpO1xuICAgICAgcmV0dXJuIGZpbGVzTGlzdF91cy5mb3JFYWNoKGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgdmFyIGRhdGEsIGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG1pbWUuZ2V0VHlwZShmaWxlLm5hbWUpID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpLCAndXRmOCcpO1xuICAgICAgICAgICAgcmV0dXJuIHdvcmtmbG93VGVtcGxhdGVbXCJlblwiXS5wdXNoKEpTT04ucGFyc2UoZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIuiOt+WPlmVuLXVz5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XCIsIHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSkpO1xuICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiIyMjXG4qICAgICogICAgKiAgICAqICAgICogICAgKlxu4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAgfFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJQgZGF5IG9mIHdlZWsgKDAgLSA3KSAoMCBvciA3IGlzIFN1bilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIAgbW9udGggKDEgLSAxMilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBkYXkgb2YgbW9udGggKDEgLSAzMSlcbuKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGhvdXIgKDAgLSAyMylcbuKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgbWludXRlICgwIC0gNTkpXG7ilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgc2Vjb25kICgwIC0gNTksIE9QVElPTkFMKVxuIyMjXG5NZXRlb3Iuc3RhcnR1cCAtPlxuXHRpZiBNZXRlb3Iuc2V0dGluZ3MuY3Jvbj8uYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uXG5cdFx0c2NoZWR1bGUgPSByZXF1aXJlKCdub2RlLXNjaGVkdWxlJylcblx0XHQjIOWumuaXtuaJp+ihjOWQjOatpVxuXHRcdHJ1bGUgPSBNZXRlb3Iuc2V0dGluZ3MuY3Jvbi5hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb25cblx0XHRnb19uZXh0ID0gdHJ1ZVxuXHRcdHNjaGVkdWxlLnNjaGVkdWxlSm9iIHJ1bGUsIE1ldGVvci5iaW5kRW52aXJvbm1lbnQgKCktPlxuXHRcdFx0dHJ5XG5cdFx0XHRcdGlmICFnb19uZXh0XG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGdvX25leHQgPSBmYWxzZVxuXHRcdFx0XHRjb25zb2xlLnRpbWUgJ2F1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbidcblxuXHRcdFx0XHRub3cgPSBuZXcgRGF0ZVxuXG5cdFx0XHRcdCMg5bCG5aeU5omY6KeE5YiZ6K6+572u5Li65LiN5Y+v55SoXG5cdFx0XHRcdGRiLnByb2Nlc3NfZGVsZWdhdGlvbl9ydWxlcy51cGRhdGUoeyBlbmFibGVkOiB0cnVlLCBlbmRfdGltZTogeyAkbHRlOiBub3cgfSB9LCB7ICRzZXQ6IHsgZW5hYmxlZDogZmFsc2UgfSB9LCB7IG11bHRpIDp0cnVlIH0pXG5cblx0XHRcdFx0Y29uc29sZS50aW1lRW5kICdhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24nXG5cdFx0XHRcdGdvX25leHQgPSB0cnVlXG5cblx0XHRcdGNhdGNoIGVcblx0XHRcdFx0Y29uc29sZS5lcnJvciBcIkFVVE8gQVVUT19GSU5JU0hfUFJPQ0VTU19ERUxFR0FUSU9OIEVSUk9SOiBcIlxuXHRcdFx0XHRjb25zb2xlLmVycm9yIGUuc3RhY2tcblx0XHRcdFx0Z29fbmV4dCA9IHRydWVcblxuXHRcdCwgKGUpLT5cblx0XHRcdGNvbnNvbGUubG9nICdGYWlsZWQgdG8gYmluZCBlbnZpcm9ubWVudDogYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uLmNvZmZlZSdcblx0XHRcdGNvbnNvbGUubG9nIGUuc3RhY2tcbiIsIlxuLypcbiogICAgKiAgICAqICAgICogICAgKiAgICAqXG7ilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICB8XG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUlCBkYXkgb2Ygd2VlayAoMCAtIDcpICgwIG9yIDcgaXMgU3VuKVxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgCBtb250aCAoMSAtIDEyKVxu4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGRheSBvZiBtb250aCAoMSAtIDMxKVxu4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgaG91ciAoMCAtIDIzKVxu4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBtaW51dGUgKDAgLSA1OSlcbuKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBzZWNvbmQgKDAgLSA1OSwgT1BUSU9OQUwpXG4gKi9cbk1ldGVvci5zdGFydHVwKGZ1bmN0aW9uKCkge1xuICB2YXIgZ29fbmV4dCwgcmVmLCBydWxlLCBzY2hlZHVsZTtcbiAgaWYgKChyZWYgPSBNZXRlb3Iuc2V0dGluZ3MuY3JvbikgIT0gbnVsbCA/IHJlZi5hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24gOiB2b2lkIDApIHtcbiAgICBzY2hlZHVsZSA9IHJlcXVpcmUoJ25vZGUtc2NoZWR1bGUnKTtcbiAgICBydWxlID0gTWV0ZW9yLnNldHRpbmdzLmNyb24uYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uO1xuICAgIGdvX25leHQgPSB0cnVlO1xuICAgIHJldHVybiBzY2hlZHVsZS5zY2hlZHVsZUpvYihydWxlLCBNZXRlb3IuYmluZEVudmlyb25tZW50KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGUsIG5vdztcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZ29fbmV4dCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBnb19uZXh0ID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUudGltZSgnYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uJyk7XG4gICAgICAgIG5vdyA9IG5ldyBEYXRlO1xuICAgICAgICBkYi5wcm9jZXNzX2RlbGVnYXRpb25fcnVsZXMudXBkYXRlKHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGVuZF90aW1lOiB7XG4gICAgICAgICAgICAkbHRlOiBub3dcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAkc2V0OiB7XG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2F1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbicpO1xuICAgICAgICByZXR1cm4gZ29fbmV4dCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBVVRPIEFVVE9fRklOSVNIX1BST0NFU1NfREVMRUdBVElPTiBFUlJPUjogXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICByZXR1cm4gZ29fbmV4dCA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBiaW5kIGVudmlyb25tZW50OiBhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24uY29mZmVlJyk7XG4gICAgICByZXR1cm4gY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgfSkpO1xuICB9XG59KTtcbiIsIiMjI1xuKiAgICAqICAgICogICAgKiAgICAqICAgICpcbuKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIHxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSUIGRheSBvZiB3ZWVrICgwIC0gNykgKDAgb3IgNyBpcyBTdW4pXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSAIG1vbnRoICgxIC0gMTIpXG7ilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgZGF5IG9mIG1vbnRoICgxIC0gMzEpXG7ilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBob3VyICgwIC0gMjMpXG7ilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIG1pbnV0ZSAoMCAtIDU5KVxu4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHNlY29uZCAoMCAtIDU5LCBPUFRJT05BTClcbiMjI1xuTWV0ZW9yLnN0YXJ0dXAgLT5cblx0aWYgTWV0ZW9yLnNldHRpbmdzLmNyb24/LnRpbWVvdXRfYXV0b19zdWJtaXRcblx0XHRzY2hlZHVsZSA9IHJlcXVpcmUoJ25vZGUtc2NoZWR1bGUnKVxuXHRcdCMg5a6a5pe25omn6KGM5ZCM5q2lXG5cdFx0cnVsZSA9IE1ldGVvci5zZXR0aW5ncy5jcm9uLnRpbWVvdXRfYXV0b19zdWJtaXRcblx0XHRnb19uZXh0ID0gdHJ1ZVxuXHRcdHNjaGVkdWxlLnNjaGVkdWxlSm9iIHJ1bGUsIE1ldGVvci5iaW5kRW52aXJvbm1lbnQgKCktPlxuXHRcdFx0dHJ5XG5cdFx0XHRcdGlmICFnb19uZXh0XG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGdvX25leHQgPSBmYWxzZVxuXHRcdFx0XHRjb25zb2xlLnRpbWUgJ3RpbWVvdXRfYXV0b19zdWJtaXQnXG5cblx0XHRcdFx0dXVmbG93TWFuYWdlci50aW1lb3V0QXV0b1N1Ym1pdCgpXG5cblx0XHRcdFx0Y29uc29sZS50aW1lRW5kICd0aW1lb3V0X2F1dG9fc3VibWl0J1xuXHRcdFx0XHRnb19uZXh0ID0gdHJ1ZVxuXG5cdFx0XHRjYXRjaCBlXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IgXCJBVVRPIFRJTUVPVVRfQVVUT19TVUJNSVQgRVJST1I6IFwiXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IgZS5zdGFja1xuXHRcdFx0XHRnb19uZXh0ID0gdHJ1ZVxuXG5cdFx0LCAoZSktPlxuXHRcdFx0Y29uc29sZS5sb2cgJ0ZhaWxlZCB0byBiaW5kIGVudmlyb25tZW50OiB0aW1lb3V0X2F1dG9fc3VibWl0LmNvZmZlZSdcblx0XHRcdGNvbnNvbGUubG9nIGUuc3RhY2tcblxuTWV0ZW9yLm1ldGhvZHNcblx0dGltZW91dF9hdXRvX3N1Ym1pdDogKGluc19pZCktPlxuXHRcdHV1Zmxvd01hbmFnZXIudGltZW91dEF1dG9TdWJtaXQoaW5zX2lkKVxuXHRcdHJldHVybiB0cnVlXG5cblxuIiwiXG4vKlxuKiAgICAqICAgICogICAgKiAgICAqICAgICpcbuKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIHxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSUIGRheSBvZiB3ZWVrICgwIC0gNykgKDAgb3IgNyBpcyBTdW4pXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSAIG1vbnRoICgxIC0gMTIpXG7ilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgZGF5IG9mIG1vbnRoICgxIC0gMzEpXG7ilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBob3VyICgwIC0gMjMpXG7ilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIG1pbnV0ZSAoMCAtIDU5KVxu4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHNlY29uZCAoMCAtIDU5LCBPUFRJT05BTClcbiAqL1xuTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIHZhciBnb19uZXh0LCByZWYsIHJ1bGUsIHNjaGVkdWxlO1xuICBpZiAoKHJlZiA9IE1ldGVvci5zZXR0aW5ncy5jcm9uKSAhPSBudWxsID8gcmVmLnRpbWVvdXRfYXV0b19zdWJtaXQgOiB2b2lkIDApIHtcbiAgICBzY2hlZHVsZSA9IHJlcXVpcmUoJ25vZGUtc2NoZWR1bGUnKTtcbiAgICBydWxlID0gTWV0ZW9yLnNldHRpbmdzLmNyb24udGltZW91dF9hdXRvX3N1Ym1pdDtcbiAgICBnb19uZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm4gc2NoZWR1bGUuc2NoZWR1bGVKb2IocnVsZSwgTWV0ZW9yLmJpbmRFbnZpcm9ubWVudChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFnb19uZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdvX25leHQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS50aW1lKCd0aW1lb3V0X2F1dG9fc3VibWl0Jyk7XG4gICAgICAgIHV1Zmxvd01hbmFnZXIudGltZW91dEF1dG9TdWJtaXQoKTtcbiAgICAgICAgY29uc29sZS50aW1lRW5kKCd0aW1lb3V0X2F1dG9fc3VibWl0Jyk7XG4gICAgICAgIHJldHVybiBnb19uZXh0ID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFVVE8gVElNRU9VVF9BVVRPX1NVQk1JVCBFUlJPUjogXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICByZXR1cm4gZ29fbmV4dCA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBiaW5kIGVudmlyb25tZW50OiB0aW1lb3V0X2F1dG9fc3VibWl0LmNvZmZlZScpO1xuICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKGUuc3RhY2spO1xuICAgIH0pKTtcbiAgfVxufSk7XG5cbk1ldGVvci5tZXRob2RzKHtcbiAgdGltZW91dF9hdXRvX3N1Ym1pdDogZnVuY3Rpb24oaW5zX2lkKSB7XG4gICAgdXVmbG93TWFuYWdlci50aW1lb3V0QXV0b1N1Ym1pdChpbnNfaWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsIk1ldGVvci5zdGFydHVwICgpLT5cblx0VGFidWxhclRhYmxlcy5yZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyID0gbmV3IFRhYnVsYXIuVGFibGVcblx0XHRuYW1lOiBcInJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXJcIlxuXHRcdGNvbGxlY3Rpb246IGRiLmluc3RhbmNlc1xuXHRcdGNvbHVtbnM6IFtcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJfaWRcIixcblx0XHRcdFx0dGl0bGU6ICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInJldmVyc2VcIiBpZD1cInJldmVyc2VcIj4nLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlLFxuXHRcdFx0XHR3aWR0aDogJzFweCcsXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlucHV0ID0gJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInJlbGF0ZWQtaW5zdGFuY2VzLWxpc3QtY2hlY2tib3hcIiBuYW1lPVwicmVsYXRlZF9pbnN0YW5jZXNfaWRzXCIgaWQ9XCJyZWxhdGVkX2luc3RhbmNlc19pZHNcIiB2YWx1ZT1cIicgKyBkb2MuX2lkICsgJ1wiJ1xuXG5cdFx0XHRcdFx0aWYgVGFidWxhclRhYmxlcy5yZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyLnJlbGF0ZWRfaW5zdGFuY2VzPy5pbmNsdWRlcyhkb2MuX2lkKVxuXHRcdFx0XHRcdFx0aW5wdXQgKz0gXCIgY2hlY2tlZCBcIlxuXG5cdFx0XHRcdFx0aW5wdXQgKz0gXCI+XCJcblx0XHRcdFx0XHRyZXR1cm4gaW5wdXRcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwibmFtZVwiLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlLFxuXHRcdFx0XHR3aWR0aDogJzQ1JScsXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGhyZWYgPSAnJztcblx0XHRcdFx0XHRpZiBNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKVxuXHRcdFx0XHRcdFx0aHJlZiA9ICcnXG5cblx0XHRcdFx0XHRhYnNvbHV0ZSA9IGZhbHNlXG5cblx0XHRcdFx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0XHRcdGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZVxuXHRcdFx0XHRcdGlmIGFic29sdXRlXG5cdFx0XHRcdFx0XHRocmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIrZG9jLnNwYWNlK1wiL3ZpZXcvcmVhZG9ubHkvXCIgKyBkb2MuX2lkICsgJz9oaWRlX3RyYWNlcz0wJylcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRocmVmID0gU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiK2RvYy5zcGFjZStcIi92aWV3L3JlYWRvbmx5L1wiICsgZG9jLl9pZCArICc/aGlkZV90cmFjZXM9MCcpXG5cdFx0XHRcdFx0cmV0dXJuIFwiPGEgZGF0YS1pZD0nI3tkb2MuX2lkfScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J1wiK2hyZWYrXCInPlwiICsgZG9jLm5hbWUgKyBcIjwvYT5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJmbG93X25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJjdXJyZW50X3N0ZXBfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3RhdGUgPT0gXCJjb21wbGV0ZWRcIlxuXHRcdFx0XHRcdFx0anVkZ2UgPSBkb2MuZmluYWxfZGVjaXNpb24gfHwgXCJhcHByb3ZlZFwiXG5cblx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZSA9IGRvYy5jdXJyZW50X3N0ZXBfbmFtZSB8fCAnJ1xuXG5cdFx0XHRcdFx0cmV0dXJuIFwiXCJcIlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcC1jdXJyZW50LXN0YXRlICN7anVkZ2V9XCI+I3tzdGVwX2N1cnJlbnRfbmFtZX08L2Rpdj5cblx0XHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0fVxuXHRcdF1cblxuXHRcdGRvbTogXCJ0cFwiLFxuXHRcdGxlbmd0aENoYW5nZTogZmFsc2UsXG5cdFx0ZXh0cmFGaWVsZHM6IFtcInN0YXRlXCIsIFwiZmluYWxfZGVjaXNpb25cIiwgXCJzcGFjZVwiLCBcImtleXdvcmRzXCJdLFxuXHRcdHBhZ2VMZW5ndGg6IDEwLFxuXHRcdGluZm86IGZhbHNlLFxuXHRcdHNlYXJjaGluZzogdHJ1ZSxcblx0XHRyZXNwb25zaXZlOlxuXHRcdFx0ZGV0YWlsczogZmFsc2Vcblx0XHRhdXRvV2lkdGg6IGZhbHNlLFxuXHRcdGNoYW5nZVNlbGVjdG9yOiAoc2VsZWN0b3IsIHVzZXJJZCkgLT5cblx0XHRcdHVubGVzcyB1c2VySWRcblx0XHRcdFx0cmV0dXJuIHtfaWQ6IC0xfVxuXG5cdFx0XHRzcGFjZUlkID0gc2VsZWN0b3Iuc3BhY2Vcblx0XHRcdHVubGVzcyBzcGFjZUlkXG5cdFx0XHRcdGlmIHNlbGVjdG9yPy4kYW5kPy5sZW5ndGggPiAwXG5cdFx0XHRcdFx0c3BhY2VJZCA9IHNlbGVjdG9yLiRhbmQuZ2V0UHJvcGVydHkoJ3NwYWNlJylbMF1cblx0XHRcdHVubGVzcyBzcGFjZUlkXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlID0gZGIuc3BhY2VzLmZpbmRPbmUoc3BhY2VJZClcblx0XHRcdGlmICFzcGFjZVxuXHRcdFx0XHRzZWxlY3Rvci5zdGF0ZSA9IFwibm9uZVwiXG5cdFx0XHRpZiAhc3BhY2UuYWRtaW5zLmluY2x1ZGVzKHVzZXJJZClcblxuXHRcdFx0XHRmbG93X2lkcyA9IFtdXG5cdFx0XHRcdGN1clNwYWNlVXNlciA9IGRiLnNwYWNlX3VzZXJzLmZpbmRPbmUoe1xuXHRcdFx0XHRcdHNwYWNlOiBzcGFjZUlkLFxuXHRcdFx0XHRcdCd1c2VyJzogdXNlcklkXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGlmIGN1clNwYWNlVXNlclxuXHRcdFx0XHRcdG9yZ2FuaXphdGlvbnMgPSBkYi5vcmdhbml6YXRpb25zLmZpbmQoe1xuXHRcdFx0XHRcdFx0X2lkOiB7XG5cdFx0XHRcdFx0XHRcdCRpbjogY3VyU3BhY2VVc2VyLm9yZ2FuaXphdGlvbnNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5mZXRjaCgpXG5cdFx0XHRcdFx0Zmxvd3MgPSBkYi5mbG93cy5maW5kKHsgc3BhY2U6IHNwYWNlSWQgfSlcblx0XHRcdFx0XHRmbG93cy5mb3JFYWNoIChmbCktPlxuXHRcdFx0XHRcdFx0aWYgV29ya2Zsb3dNYW5hZ2VyLmNhbk1vbml0b3IoZmwsIGN1clNwYWNlVXNlciwgb3JnYW5pemF0aW9ucykgfHwgV29ya2Zsb3dNYW5hZ2VyLmNhbkFkbWluKGZsLCBjdXJTcGFjZVVzZXIsIG9yZ2FuaXphdGlvbnMpXG5cdFx0XHRcdFx0XHRcdGZsb3dfaWRzLnB1c2goZmwuX2lkKVxuXG5cdFx0XHRcdGlmIHNlbGVjdG9yPy4kYW5kPy5sZW5ndGggPiAwXG5cdFx0XHRcdFx0c2VsZWN0b3IuJGFuZFswXS4kb3IgPSBbe3N1Ym1pdHRlcjogdXNlcklkfSwge2FwcGxpY2FudDogdXNlcklkfSwge2luYm94X3VzZXJzOiB1c2VySWR9LCB7b3V0Ym94X3VzZXJzOiB1c2VySWR9LFxuXHRcdFx0XHRcdFx0XHR7Y2NfdXNlcnM6IHVzZXJJZH0sIHsgZmxvdzogeyAkaW46IGZsb3dfaWRzIH0gfV1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdF8uZXh0ZW5kIHNlbGVjdG9yLCB7XG5cdFx0XHRcdFx0XHQkb3I6IFt7c3VibWl0dGVyOiB1c2VySWR9LCB7YXBwbGljYW50OiB1c2VySWR9LCB7aW5ib3hfdXNlcnM6IHVzZXJJZH0sIHtvdXRib3hfdXNlcnM6IHVzZXJJZH0sXG5cdFx0XHRcdFx0XHRcdHtjY191c2VyczogdXNlcklkfSwgeyBmbG93OiB7ICRpbjogZmxvd19pZHMgfSB9XVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGVjdG9yIiwiTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBUYWJ1bGFyVGFibGVzLnJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIgPSBuZXcgVGFidWxhci5UYWJsZSh7XG4gICAgbmFtZTogXCJyZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyXCIsXG4gICAgY29sbGVjdGlvbjogZGIuaW5zdGFuY2VzLFxuICAgIGNvbHVtbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZGF0YTogXCJfaWRcIixcbiAgICAgICAgdGl0bGU6ICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInJldmVyc2VcIiBpZD1cInJldmVyc2VcIj4nLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICB3aWR0aDogJzFweCcsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgaW5wdXQsIHJlZjtcbiAgICAgICAgICBpbnB1dCA9ICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJyZWxhdGVkLWluc3RhbmNlcy1saXN0LWNoZWNrYm94XCIgbmFtZT1cInJlbGF0ZWRfaW5zdGFuY2VzX2lkc1wiIGlkPVwicmVsYXRlZF9pbnN0YW5jZXNfaWRzXCIgdmFsdWU9XCInICsgZG9jLl9pZCArICdcIic7XG4gICAgICAgICAgaWYgKChyZWYgPSBUYWJ1bGFyVGFibGVzLnJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIucmVsYXRlZF9pbnN0YW5jZXMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoZG9jLl9pZCkgOiB2b2lkIDApIHtcbiAgICAgICAgICAgIGlucHV0ICs9IFwiIGNoZWNrZWQgXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0ICs9IFwiPlwiO1xuICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcIm5hbWVcIixcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6ICc0NSUnLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGFic29sdXRlLCBocmVmO1xuICAgICAgICAgIGhyZWYgPSAnJztcbiAgICAgICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50ICYmIChTdGVlZG9zLmlzTW9iaWxlKCkgfHwgU3RlZWRvcy5pc0NvcmRvdmEoKSkpIHtcbiAgICAgICAgICAgIGhyZWYgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgICAgICBhYnNvbHV0ZSA9IHRoaXMuYWJzb2x1dGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhYnNvbHV0ZSkge1xuICAgICAgICAgICAgaHJlZiA9IE1ldGVvci5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiICsgZG9jLnNwYWNlICsgXCIvdmlldy9yZWFkb25seS9cIiArIGRvYy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHJlZiA9IFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIiArIGRvYy5zcGFjZSArIFwiL3ZpZXcvcmVhZG9ubHkvXCIgKyBkb2MuX2lkICsgJz9oaWRlX3RyYWNlcz0wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoXCI8YSBkYXRhLWlkPSdcIiArIGRvYy5faWQgKyBcIicgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J1wiKSArIGhyZWYgKyBcIic+XCIgKyBkb2MubmFtZSArIFwiPC9hPlwiO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiYXBwbGljYW50X25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X25hbWVcIiksXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJmbG93X25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImN1cnJlbnRfc3RlcF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIganVkZ2UsIHN0ZXBfY3VycmVudF9uYW1lO1xuICAgICAgICAgIGlmIChkb2Muc3RhdGUgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGp1ZGdlID0gZG9jLmZpbmFsX2RlY2lzaW9uIHx8IFwiYXBwcm92ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWUgPSBkb2MuY3VycmVudF9zdGVwX25hbWUgfHwgJyc7XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz1cXFwic3RlcC1jdXJyZW50LXN0YXRlIFwiICsganVkZ2UgKyBcIlxcXCI+XCIgKyBzdGVwX2N1cnJlbnRfbmFtZSArIFwiPC9kaXY+XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGRvbTogXCJ0cFwiLFxuICAgIGxlbmd0aENoYW5nZTogZmFsc2UsXG4gICAgZXh0cmFGaWVsZHM6IFtcInN0YXRlXCIsIFwiZmluYWxfZGVjaXNpb25cIiwgXCJzcGFjZVwiLCBcImtleXdvcmRzXCJdLFxuICAgIHBhZ2VMZW5ndGg6IDEwLFxuICAgIGluZm86IGZhbHNlLFxuICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICByZXNwb25zaXZlOiB7XG4gICAgICBkZXRhaWxzOiBmYWxzZVxuICAgIH0sXG4gICAgYXV0b1dpZHRoOiBmYWxzZSxcbiAgICBjaGFuZ2VTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IsIHVzZXJJZCkge1xuICAgICAgdmFyIGN1clNwYWNlVXNlciwgZmxvd19pZHMsIGZsb3dzLCBvcmdhbml6YXRpb25zLCByZWYsIHJlZjEsIHNwYWNlLCBzcGFjZUlkO1xuICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZUlkID0gc2VsZWN0b3Iuc3BhY2U7XG4gICAgICBpZiAoIXNwYWNlSWQpIHtcbiAgICAgICAgaWYgKChzZWxlY3RvciAhPSBudWxsID8gKHJlZiA9IHNlbGVjdG9yLiRhbmQpICE9IG51bGwgPyByZWYubGVuZ3RoIDogdm9pZCAwIDogdm9pZCAwKSA+IDApIHtcbiAgICAgICAgICBzcGFjZUlkID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzcGFjZUlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc3BhY2UgPSBkYi5zcGFjZXMuZmluZE9uZShzcGFjZUlkKTtcbiAgICAgIGlmICghc3BhY2UpIHtcbiAgICAgICAgc2VsZWN0b3Iuc3RhdGUgPSBcIm5vbmVcIjtcbiAgICAgIH1cbiAgICAgIGlmICghc3BhY2UuYWRtaW5zLmluY2x1ZGVzKHVzZXJJZCkpIHtcbiAgICAgICAgZmxvd19pZHMgPSBbXTtcbiAgICAgICAgY3VyU3BhY2VVc2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG4gICAgICAgICAgc3BhY2U6IHNwYWNlSWQsXG4gICAgICAgICAgJ3VzZXInOiB1c2VySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdXJTcGFjZVVzZXIpIHtcbiAgICAgICAgICBvcmdhbml6YXRpb25zID0gZGIub3JnYW5pemF0aW9ucy5maW5kKHtcbiAgICAgICAgICAgIF9pZDoge1xuICAgICAgICAgICAgICAkaW46IGN1clNwYWNlVXNlci5vcmdhbml6YXRpb25zXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuZmV0Y2goKTtcbiAgICAgICAgICBmbG93cyA9IGRiLmZsb3dzLmZpbmQoe1xuICAgICAgICAgICAgc3BhY2U6IHNwYWNlSWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmbG93cy5mb3JFYWNoKGZ1bmN0aW9uKGZsKSB7XG4gICAgICAgICAgICBpZiAoV29ya2Zsb3dNYW5hZ2VyLmNhbk1vbml0b3IoZmwsIGN1clNwYWNlVXNlciwgb3JnYW5pemF0aW9ucykgfHwgV29ya2Zsb3dNYW5hZ2VyLmNhbkFkbWluKGZsLCBjdXJTcGFjZVVzZXIsIG9yZ2FuaXphdGlvbnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmbG93X2lkcy5wdXNoKGZsLl9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzZWxlY3RvciAhPSBudWxsID8gKHJlZjEgPSBzZWxlY3Rvci4kYW5kKSAhPSBudWxsID8gcmVmMS5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgICAgICAgIHNlbGVjdG9yLiRhbmRbMF0uJG9yID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdWJtaXR0ZXI6IHVzZXJJZFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBhcHBsaWNhbnQ6IHVzZXJJZFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBpbmJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIG91dGJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIGNjX3VzZXJzOiB1c2VySWRcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgZmxvdzoge1xuICAgICAgICAgICAgICAgICRpbjogZmxvd19pZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgXy5leHRlbmQoc2VsZWN0b3IsIHtcbiAgICAgICAgICAgICRvcjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3VibWl0dGVyOiB1c2VySWRcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGFwcGxpY2FudDogdXNlcklkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBpbmJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBvdXRib3hfdXNlcnM6IHVzZXJJZFxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgY2NfdXNlcnM6IHVzZXJJZFxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgZmxvdzoge1xuICAgICAgICAgICAgICAgICAgJGluOiBmbG93X2lkc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiU3RlZWRvcy5zdWJzW1wiSW5zdGFuY2VUYWJ1bGFyXCJdID0gbmV3IFN1YnNNYW5hZ2VyKClcblxuXG5faGFuZGxlTGlzdEZpZWxkcyA9IChmaWVsZHMpIC0+XG5cdGluc19maWVsZHMgPSBuZXcgQXJyYXkoKTtcblxuXHRmaWVsZHM/LmZvckVhY2ggKGYpLT5cblx0XHRpZiBmLnR5cGUgPT0gJ3RhYmxlJ1xuXHRcdFx0Y29uc29sZS5sb2cgJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJ1xuXHRcdGVsc2UgaWYgZi50eXBlID09ICdzZWN0aW9uJ1xuXHRcdFx0Zj8uZmllbGRzPy5mb3JFYWNoIChmMSktPlxuXHRcdFx0XHRpbnNfZmllbGRzLnB1c2ggZjFcblx0XHRlbHNlXG5cdFx0XHRpbnNfZmllbGRzLnB1c2ggZlxuXG5cdHJldHVybiBpbnNfZmllbGRzXG5cblxudXBkYXRlVGFidWxhclRpdGxlID0gKCktPlxuXG4jIOWmguaenGNvbHVtbnPmnInliqDlh4/vvIzor7fkv67mlLlUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMg5Ye95pWwXG5pbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyID0gKGZsb3dJZCwgZmllbGRzKS0+XG5cdG9wdGlvbnMgPSB7XG5cdFx0bmFtZTogXCJpbnN0YW5jZXNcIixcblx0XHRjb2xsZWN0aW9uOiBkYi5pbnN0YW5jZXMsXG5cdFx0cHViOiBcImluc3RhbmNlX3RhYnVsYXJcIixcblx0XHRvblVubG9hZDogKCktPlxuXHRcdFx0TWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApXG5cblx0XHRkcmF3Q2FsbGJhY2s6IChzZXR0aW5ncyktPlxuXHRcdFx0ZW1wdHlUZCA9ICQoXCIuZGF0YVRhYmxlc19lbXB0eVwiKVxuXHRcdFx0aWYgZW1wdHlUZC5sZW5ndGhcblx0XHRcdFx0ZW1wdHlUZFswXS5jb2xTcGFuID0gXCI2XCJcblx0XHRcdGlmICFTdGVlZG9zLmlzTW9iaWxlKCkgJiYgIVN0ZWVkb3MuaXNQYWQoKVxuXHRcdFx0XHRNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MClcblx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnNjcm9sbFRvcCgwKS5yZWFkeSAtPlxuXHRcdFx0XHRcdCQoXCIuaW5zdGFuY2UtbGlzdFwiKS5wZXJmZWN0U2Nyb2xsYmFyKFwidXBkYXRlXCIpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdCQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMClcblxuXHRcdFx0dGl0bGUgPSB0IFwicGFnZXJfaW5wdXRfaGludFwiXG5cdFx0XHRlbGxpcHNpc0xpbmsgPSBzZXR0aW5ncy5vSW5zdGFuY2UucGFyZW50KCkuZmluZCgnLnBhZ2luZ19udW1iZXJzIC5wYWdpbmF0aW9uIC5kaXNhYmxlZCBhJylcblx0XHRcdGVsbGlwc2lzTGluay5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmNzcyhcImN1cnNvclwiLCBcInBvaW50ZXJcIikuY2xpY2sgLT5cblx0XHRcdFx0aWYgISQodGhpcykuZmluZCgnaW5wdXQnKS5sZW5ndGhcblx0XHRcdFx0XHRpbnB1dCA9ICQoJzxpbnB1dCBjbGFzcz1cInBhZ2luYXRlX2lucHV0IGZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHBhZGRpbmc6MCAycHg7XCIvPicpXG5cdFx0XHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRcdFx0XHRpbnB1dC5jc3Moe1xuXHRcdFx0XHRcdFx0XHR3aWR0aDpcIjUycHhcIlxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiMjBweFwiXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGlucHV0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOlwiNTJweFwiXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogXCIxNnB4XCJcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0aW5wdXQuYXR0cihcInRpdGxlXCIsIHRpdGxlKS5hdHRyKFwicGxhY2Vob2xkZXJcIiwgdGl0bGUpXG5cdFx0XHRcdFx0JCh0aGlzKS5lbXB0eSgpLmFwcGVuZCBpbnB1dFxuXHRcdFx0XHRcdGdvUGFnZSA9IChpbmRleCktPlxuXHRcdFx0XHRcdFx0aWYgaW5kZXggPiAwXG5cdFx0XHRcdFx0XHRcdHBhZ2VzID0gTWF0aC5jZWlsKHNldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSAvIHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aClcblx0XHRcdFx0XHRcdFx0aWYgaW5kZXggPiBwYWdlc1xuXHRcdFx0XHRcdFx0XHRcdCMg6aG156CB6LaF5Ye657Si5byV5pe26Lez6L2s5Yiw5pyA5ZCO5LiA6aG1XG5cdFx0XHRcdFx0XHRcdFx0aW5kZXggPSBwYWdlc1xuXHRcdFx0XHRcdFx0XHRpbmRleC0tXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLm9JbnN0YW5jZS5EYXRhVGFibGUoKS5wYWdlKGluZGV4KS5kcmF3KCdwYWdlJylcblx0XHRcdFx0XHRpbnB1dC5ibHVyIChlKS0+XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKClcblx0XHRcdFx0XHRcdGdvUGFnZSBjdXJyZW50UGFnZVxuXHRcdFx0XHRcdFx0JCh0aGlzKS5wYXJlbnQoKS5odG1sICcuLi4nXG5cdFx0XHRcdFx0aW5wdXQua2V5ZG93biAoZSktPlxuXHRcdFx0XHRcdFx0aWYoZS5rZXlDb2RlLnRvU3RyaW5nKCkgPT0gXCIxM1wiKVxuXHRcdFx0XHRcdFx0XHRjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKClcblx0XHRcdFx0XHRcdFx0Z29QYWdlIGN1cnJlbnRQYWdlXG5cblx0XHRjcmVhdGVkUm93OiAocm93LCBkYXRhLCBkYXRhSW5kZXgpIC0+XG5cdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0aWYgZGF0YS5faWQgPT0gRmxvd1JvdXRlci5jdXJyZW50KCkucGFyYW1zLmluc3RhbmNlSWRcblx0XHRcdFx0XHRyb3cuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJzZWxlY3RlZFwiKVxuXHRcdGNvbHVtbnM6IFtcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJfaWRcIixcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRtb2RpZmllZFN0cmluZyA9IG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuXG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBkb2MubW9kaWZpZWRcblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnICYmIGRvYy5zdGF0ZSAhPSAnZHJhZnQnXG5cdFx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5zdGFydF9kYXRlIHx8IGRvYy5tb2RpZmllZFxuXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ291dGJveCcgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ21vbml0b3InXG5cdFx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5zdWJtaXRfZGF0ZSB8fCBkb2Muc3VibWl0X2RhdGVcblxuXHRcdFx0XHRcdG1vZGlmaWVkRnJvbU5vdyA9IFN0ZWVkb3MubW9tZW50UmVhY3RpdmVGcm9tTm93KG1vZGlmaWVkKTtcblx0XHRcdFx0XHRmbG93X25hbWUgPSBkb2MuZmxvd19uYW1lXG5cdFx0XHRcdFx0Y2NfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0IyDlvZPliY3nlKjmiLflnKhjYyB1c2Vy5Lit77yM5L2G5piv5LiN5ZyoaW5ib3ggdXNlcnPml7bmiY3mmL7npLon5Lyg6ZiFJ+aWh+Wtl1xuXHRcdFx0XHRcdGlmIGRvYy5pc19jYyAmJiAhZG9jLmluYm94X3VzZXJzPy5pbmNsdWRlcyhNZXRlb3IudXNlcklkKCkpICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiXG5cdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTxzcGFuPigje2RvYy5jdXJyZW50X3N0ZXBfbmFtZX0pPC9zcGFuPjwvZGl2PlwiXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gJ2RyYWZ0JyAmJiBkb2MuY3VycmVudF9zdGVwX25hbWVcblx0XHRcdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz4je2Zsb3dfbmFtZX08c3Bhbj4oI3tkb2MuY3VycmVudF9zdGVwX25hbWV9KTwvc3Bhbj48L2Rpdj5cIlxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTwvZGl2PlwiXG5cblx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRpZiBkb2MuYWdlbnRfdXNlcl9uYW1lICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHt1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZX0pICsgXCIpPC9sYWJlbD5cIlxuXG5cdFx0XHRcdFx0dW5yZWFkID0gJydcblxuXHRcdFx0XHRcdCMgaXNGYXZvcml0ZVNlbGVjdGVkID0gRmF2b3JpdGVzLmlzUmVjb3JkU2VsZWN0ZWQoXCJpbnN0YW5jZXNcIiwgZG9jLl9pZClcblx0XHRcdFx0XHQjIGlmIEZhdm9yaXRlcy5pc1JlY29yZFNlbGVjdGVkKFwiaW5zdGFuY2VzXCIsIGRvYy5faWQpXG5cdFx0XHRcdFx0IyBcdHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24taW9zLXN0YXItb3V0bGluZSBpbnN0YW5jZS1mYXZvcml0ZS1zZWxlY3RlZFwiPjwvaT4nXG5cdFx0XHRcdFx0IyBlbHNlIFxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT0gZmFsc2Vcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nXG5cdFx0XHRcdFx0ZWxzZSBpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PSB0cnVlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPidcblxuXHRcdFx0XHRcdHByaW9yaXR5SWNvbiA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eVZhbHVlID0gZG9jLnZhbHVlcz8ucHJpb3JpdHlcblx0XHRcdFx0XHRzd2l0Y2ggcHJpb3JpdHlWYWx1ZVxuXHRcdFx0XHRcdFx0d2hlbiBcIueJueaApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIue0p+aApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLlip7mlodcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIlxuXHRcdFx0XHRcdGlmIHByaW9yaXR5SWNvbkNsYXNzXG5cdFx0XHRcdFx0XHRpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS0je3ByaW9yaXR5SWNvbkNsYXNzfVwiXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPiN7dW5yZWFkfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgI3tpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzfSc+I3tkb2MubmFtZX0je2NjX3ZpZXd9I3thZ2VudF92aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+I3tkb2MuYXBwbGljYW50X25hbWV9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLWRldGFpbCc+I3tzdGVwX2N1cnJlbnRfbmFtZV92aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9J2luc3RhbmNlLW1vZGlmaWVkJyB0aXRsZT0nI3ttb2RpZmllZFN0cmluZ30nPiN7bW9kaWZpZWRGcm9tTm93fTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XCJcIlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImFwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJuYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX25hbWVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGNjX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdCMg5b2T5YmN55So5oi35ZyoY2MgdXNlcuS4re+8jOS9huaYr+S4jeWcqGluYm94IHVzZXJz5pe25omN5pi+56S6J+S8oOmYhSfmloflrZdcblx0XHRcdFx0XHRpZiBkb2MuaXNfY2MgJiYgIWRvYy5pbmJveF91c2Vycz8uaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnXG5cdFx0XHRcdFx0XHRjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIlxuXG5cdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgZG9jLmFnZW50X3VzZXJfbmFtZVxuXHRcdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge3VzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lfSkgKyBcIik8L2xhYmVsPlwiXG5cblx0XHRcdFx0XHR1bnJlYWQgPSAnJ1xuXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PSBmYWxzZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPidcblx0XHRcdFx0XHRlbHNlIGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09IHRydWVcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+J1xuXG5cdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiXG5cdFx0XHRcdFx0cHJpb3JpdHlWYWx1ZSA9IGRvYy52YWx1ZXM/LnByaW9yaXR5XG5cdFx0XHRcdFx0c3dpdGNoIHByaW9yaXR5VmFsdWVcblx0XHRcdFx0XHRcdHdoZW4gXCLnibnmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLntKfmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiXG5cdFx0XHRcdFx0XHR3aGVuIFwi5Yqe5paHXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCJcblx0XHRcdFx0XHRpZiBwcmlvcml0eUljb25DbGFzc1xuXHRcdFx0XHRcdFx0aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktI3twcmlvcml0eUljb25DbGFzc31cIlxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPiN7dW5yZWFkfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lICN7aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzc30nPiN7ZG9jLm5hbWV9I3tjY192aWV3fSN7YWdlbnRfdmlld308L2Rpdj5cblx0XHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwic3VibWl0X2RhdGVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3VibWl0X2RhdGVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5zdWJtaXRfZGF0ZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2Muc3VibWl0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiZmxvd19uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImN1cnJlbnRfc3RlcF9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0ZXBfY3VycmVudF9uYW1lXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3RhdGUgPT0gXCJjb21wbGV0ZWRcIlxuXHRcdFx0XHRcdFx0anVkZ2UgPSBkb2MuZmluYWxfZGVjaXNpb24gfHwgXCJhcHByb3ZlZFwiXG5cblx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZSA9IGRvYy5jdXJyZW50X3N0ZXBfbmFtZSB8fCAnJ1xuXG5cdFx0XHRcdFx0Y2NfdGFnID0gJydcblxuXHRcdFx0XHRcdGlmIGRvYy5jY19jb3VudCA+IDBcblx0XHRcdFx0XHRcdGNjX3RhZyA9IFRBUGkxOG4uX18oJ2NjX3RhZycpXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcC1jdXJyZW50LXN0YXRlICN7anVkZ2V9XCI+I3tzdGVwX2N1cnJlbnRfbmFtZX0je2NjX3RhZ308L2Rpdj5cblx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwibW9kaWZpZWRcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfbW9kaWZpZWRcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcInN0YXJ0X2RhdGVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RhcnRfZGF0ZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLnN0YXJ0X2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLnN0YXJ0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwibXlfZmluaXNoX2RhdGVcIixcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLm15X2ZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRyZXR1cm4gbW9tZW50KGRvYy5teV9maW5pc2hfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJtb2RpZmllZFwiLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJrZXl3b3Jkc1wiLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJpc19hcmNoaXZlZFwiLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2M/LnZhbHVlcz8ucmVjb3JkX25lZWQgJiYgZG9jLnZhbHVlcy5yZWNvcmRfbmVlZCA9PSBcInRydWVcIlxuXHRcdFx0XHRcdFx0aWYgZG9jPy5pc19hcmNoaXZlZFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdChcIllFU1wiKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHQoXCJOT1wiKVxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRkb206IGRvIC0+XG5cdFx0XHQjIOaJi+acuuS4iuS4jeaYvuekuuS4gOmhteaYvuekuuWkmuWwkeadoeiusOW9lemAiemhuVxuXHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRcdCd0cCdcblx0XHRcdGVsc2Vcblx0XHRcdFx0J3RwbCdcblx0XHRvcmRlcjogW1s0LCBcImRlc2NcIl1dLFxuXHRcdGV4dHJhRmllbGRzOiBbXCJmb3JtXCIsIFwiZmxvd1wiLCBcImluYm94X3VzZXJzXCIsIFwic3RhdGVcIiwgXCJzcGFjZVwiLCBcImFwcGxpY2FudFwiLCBcImZvcm1fdmVyc2lvblwiLFxuXHRcdFx0XCJmbG93X3ZlcnNpb25cIiwgXCJpc19jY1wiLCBcImNjX2NvdW50XCIsIFwiaXNfcmVhZFwiLCBcImN1cnJlbnRfc3RlcF9uYW1lXCIsIFwidmFsdWVzXCIsIFwia2V5d29yZHNcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcImZsb3dfbmFtZVwiLCBcImlzX2hpZGRlblwiLCBcImFnZW50X3VzZXJfbmFtZVwiXSxcblx0XHRsZW5ndGhDaGFuZ2U6IHRydWUsXG5cdFx0bGVuZ3RoTWVudTogWzEwLDE1LDIwLDI1LDUwLDEwMF0sXG5cdFx0cGFnZUxlbmd0aDogMTAsXG5cdFx0aW5mbzogZmFsc2UsXG5cdFx0c2VhcmNoaW5nOiB0cnVlLFxuXHRcdHJlc3BvbnNpdmU6XG5cdFx0XHRkZXRhaWxzOiBmYWxzZVxuXHRcdGF1dG9XaWR0aDogZmFsc2UsXG5cdFx0Y2hhbmdlU2VsZWN0b3I6IChzZWxlY3RvciwgdXNlcklkKSAtPlxuXHRcdFx0dW5sZXNzIHVzZXJJZFxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRzcGFjZSA9IHNlbGVjdG9yLnNwYWNlXG5cdFx0XHR1bmxlc3Mgc3BhY2Vcblx0XHRcdFx0aWYgc2VsZWN0b3I/LiRhbmQ/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRzcGFjZSA9IHNlbGVjdG9yLiRhbmQuZ2V0UHJvcGVydHkoJ3NwYWNlJylbMF1cblx0XHRcdHVubGVzcyBzcGFjZVxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRzcGFjZV91c2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7dXNlcjogdXNlcklkLCBzcGFjZTogc3BhY2V9LCB7ZmllbGRzOiB7X2lkOiAxfX0pXG5cdFx0XHR1bmxlc3Mgc3BhY2VfdXNlclxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRyZXR1cm4gc2VsZWN0b3Jcblx0XHRwYWdpbmdUeXBlOiBcIm51bWJlcnNcIlxuXHRcdFxuXHRcdCMgZ2V0U29ydDogKHNlbGVjdG9yLCBzb3J0KSAtPiBcblx0XHQjIFx0Y29uc29sZS5sb2coJ3NlbGVjdG9yOicsc2VsZWN0b3IpXG5cdFx0IyBcdGNvbnNvbGUubG9nKCdzb3J0Oicsc29ydClcblx0XHQjIFx0bmV3U29ydCA9IFtdXG5cdFx0IyBcdF8uZWFjaCBzZWxlY3RvciwgKHYsIGspIC0+XG5cdFx0IyBcdFx0bmV3U29ydC5wdXNoKFtrLCAxXSlcblx0XHQjIFx0bmV3U29ydCA9IG5ld1NvcnQuY29uY2F0KHNvcnQpXG5cdFx0IyBcdGNvbnNvbGUubG9nKCduZXdTb3J0OicsbmV3U29ydClcblx0XHQjIFx0cmV0dXJuIG5ld1NvcnRcblx0fVxuXG5cdGlmIGZsb3dJZFxuXHRcdGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBmbG93SWRcblxuXHRcdG9wdGlvbnMubmFtZSA9IGtleVxuXG5cdFx0VGFidWxhclRhYmxlcy5pbnN0YW5jZXMuZmllbGRzID0gZmllbGRzXG5cblx0XHRpbnNfZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMgVGFidWxhclRhYmxlcy5pbnN0YW5jZXMuZmllbGRzXG5cblx0XHRpbnNfZmllbGRzLmZvckVhY2ggKGYpLT5cblx0XHRcdGlmIGYudHlwZSAhPSAndGFibGUnICYmIGYuaXNfbGlzdF9kaXNwbGF5XG5cdFx0XHRcdG9wdGlvbnMuY29sdW1ucy5wdXNoXG5cdFx0XHRcdFx0ZGF0YTogKGYubmFtZSB8fCBmLmNvZGUpLFxuXHRcdFx0XHRcdHRpdGxlOiB0KGYubmFtZSB8fCBmLmNvZGUpLFxuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblxuXHRcdFx0XHRcdFx0dmFsdWVzID0gZG9jLnZhbHVlcyB8fCB7fVxuXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlc1tmLmNvZGVdXG5cblx0XHRcdFx0XHRcdHN3aXRjaCBmLnR5cGVcblx0XHRcdFx0XHRcdFx0d2hlbiAndXNlcidcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlPy5uYW1lXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2dyb3VwJ1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWU/LmZ1bGxuYW1lXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2RhdGUnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdFx0XHRcdFx0XHR3aGVuICdkYXRlVGltZSdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2NoZWNrYm94J1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlID09IHRydWUgfHwgdmFsdWUgPT0gJ3RydWUnXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X25vXCIpO1xuXHRcdFx0XHRcdFx0XHR3aGVuICdvZGF0YSdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgXy5pc0FycmF5KHZhbHVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IF8ucGx1Y2sodmFsdWUsICdAbGFiZWwnKS50b1N0cmluZygpXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbJ0BsYWJlbCddXG5cblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXG5cblx0cmV0dXJuIG9wdGlvbnM7XG5cblxuIyDlpoLmnpxjb2x1bW5z5pyJ5Yqg5YeP77yM6K+35L+u5pS5VGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zIOWHveaVsFxuaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIgPSAoZmxvd0lkLCBmaWVsZHMpLT5cblx0b3B0aW9ucyA9IHtcblx0XHRuYW1lOiBcImluc3RhbmNlX3Rhc2tzXCIsXG5cdFx0Y29sbGVjdGlvbjogZGIuaW5zdGFuY2VfdGFza3MsXG5cdFx0cHViOiBcImluc3RhbmNlX3Rhc2tzX3RhYnVsYXJcIixcblx0XHRvblVubG9hZDogKCktPlxuXHRcdFx0TWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApXG5cblx0XHRkcmF3Q2FsbGJhY2s6IChzZXR0aW5ncyktPlxuXHRcdFx0ZW1wdHlUZCA9ICQoXCIuZGF0YVRhYmxlc19lbXB0eVwiKVxuXHRcdFx0aWYgZW1wdHlUZC5sZW5ndGhcblx0XHRcdFx0ZW1wdHlUZFswXS5jb2xTcGFuID0gXCI2XCJcblx0XHRcdGlmICFTdGVlZG9zLmlzTW9iaWxlKCkgJiYgIVN0ZWVkb3MuaXNQYWQoKVxuXHRcdFx0XHRNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MClcblx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnNjcm9sbFRvcCgwKS5yZWFkeSAtPlxuXHRcdFx0XHRcdCQoXCIuaW5zdGFuY2UtbGlzdFwiKS5wZXJmZWN0U2Nyb2xsYmFyKFwidXBkYXRlXCIpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdCQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMClcblxuXHRcdFx0dGl0bGUgPSB0IFwicGFnZXJfaW5wdXRfaGludFwiXG5cdFx0XHRlbGxpcHNpc0xpbmsgPSBzZXR0aW5ncy5vSW5zdGFuY2UucGFyZW50KCkuZmluZCgnLnBhZ2luZ19udW1iZXJzIC5wYWdpbmF0aW9uIC5kaXNhYmxlZCBhJylcblx0XHRcdGVsbGlwc2lzTGluay5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmNzcyhcImN1cnNvclwiLCBcInBvaW50ZXJcIikuY2xpY2sgLT5cblx0XHRcdFx0aWYgISQodGhpcykuZmluZCgnaW5wdXQnKS5sZW5ndGhcblx0XHRcdFx0XHRpbnB1dCA9ICQoJzxpbnB1dCBjbGFzcz1cInBhZ2luYXRlX2lucHV0IGZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHBhZGRpbmc6MCAycHg7XCIvPicpXG5cdFx0XHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRcdFx0XHRpbnB1dC5jc3Moe1xuXHRcdFx0XHRcdFx0XHR3aWR0aDpcIjUycHhcIlxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiMjBweFwiXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGlucHV0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOlwiNTJweFwiXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogXCIxNnB4XCJcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0aW5wdXQuYXR0cihcInRpdGxlXCIsIHRpdGxlKS5hdHRyKFwicGxhY2Vob2xkZXJcIiwgdGl0bGUpXG5cdFx0XHRcdFx0JCh0aGlzKS5lbXB0eSgpLmFwcGVuZCBpbnB1dFxuXHRcdFx0XHRcdGdvUGFnZSA9IChpbmRleCktPlxuXHRcdFx0XHRcdFx0aWYgaW5kZXggPiAwXG5cdFx0XHRcdFx0XHRcdHBhZ2VzID0gTWF0aC5jZWlsKHNldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSAvIHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aClcblx0XHRcdFx0XHRcdFx0aWYgaW5kZXggPiBwYWdlc1xuXHRcdFx0XHRcdFx0XHRcdCMg6aG156CB6LaF5Ye657Si5byV5pe26Lez6L2s5Yiw5pyA5ZCO5LiA6aG1XG5cdFx0XHRcdFx0XHRcdFx0aW5kZXggPSBwYWdlc1xuXHRcdFx0XHRcdFx0XHRpbmRleC0tXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLm9JbnN0YW5jZS5EYXRhVGFibGUoKS5wYWdlKGluZGV4KS5kcmF3KCdwYWdlJylcblx0XHRcdFx0XHRpbnB1dC5ibHVyIChlKS0+XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKClcblx0XHRcdFx0XHRcdGdvUGFnZSBjdXJyZW50UGFnZVxuXHRcdFx0XHRcdFx0JCh0aGlzKS5wYXJlbnQoKS5odG1sICcuLi4nXG5cdFx0XHRcdFx0aW5wdXQua2V5ZG93biAoZSktPlxuXHRcdFx0XHRcdFx0aWYoZS5rZXlDb2RlLnRvU3RyaW5nKCkgPT0gXCIxM1wiKVxuXHRcdFx0XHRcdFx0XHRjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKClcblx0XHRcdFx0XHRcdFx0Z29QYWdlIGN1cnJlbnRQYWdlXG5cblx0XHRjcmVhdGVkUm93OiAocm93LCBkYXRhLCBkYXRhSW5kZXgpIC0+XG5cdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0aWYgZGF0YS5pbnN0YW5jZSA9PSBGbG93Um91dGVyLmN1cnJlbnQoKS5wYXJhbXMuaW5zdGFuY2VJZFxuXHRcdFx0XHRcdHJvdy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNlbGVjdGVkXCIpXG5cdFx0Y29sdW1uczogW1xuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIl9pZFwiLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdG1vZGlmaWVkU3RyaW5nID0gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG5cblx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5tb2RpZmllZFxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLmluc3RhbmNlX3N0YXRlICE9ICdkcmFmdCdcblx0XHRcdFx0XHRcdG1vZGlmaWVkID0gZG9jLnN0YXJ0X2RhdGUgfHwgZG9jLm1vZGlmaWVkXG5cblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnb3V0Ym94J1xuXHRcdFx0XHRcdFx0bW9kaWZpZWQgPSBkb2Muc3VibWl0X2RhdGUgfHwgZG9jLm1vZGlmaWVkXG5cblx0XHRcdFx0XHRtb2RpZmllZEZyb21Ob3cgPSBTdGVlZG9zLm1vbWVudFJlYWN0aXZlRnJvbU5vdyhtb2RpZmllZCk7XG5cdFx0XHRcdFx0Zmxvd19uYW1lID0gZG9jLmZsb3dfbmFtZVxuXHRcdFx0XHRcdGNjX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdCMg5b2T5YmN55So5oi35ZyoY2MgdXNlcuS4re+8jOS9huaYr+S4jeWcqGluYm94IHVzZXJz5pe25omN5pi+56S6J+S8oOmYhSfmloflrZdcblx0XHRcdFx0XHRpZiBkb2MudHlwZSA9PSAnY2MnICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiXG5cdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTxzcGFuPigje2RvYy5zdGVwX25hbWV9KTwvc3Bhbj48L2Rpdj5cIlxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGlmIGRvYy5zdGVwX25hbWVcblx0XHRcdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz4je2Zsb3dfbmFtZX08c3Bhbj4oI3tkb2Muc3RlcF9uYW1lfSk8L3NwYW4+PC9kaXY+XCJcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz4je2Zsb3dfbmFtZX08L2Rpdj5cIlxuXG5cdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgZG9jLmFnZW50X3VzZXJfbmFtZSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnXG5cdFx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7dXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWV9KSArIFwiKTwvbGFiZWw+XCJcblxuXHRcdFx0XHRcdHVucmVhZCA9ICcnXG5cblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09IGZhbHNlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJpb24gaW9uLXJlY29yZCB1bnJlYWRcIj48L2k+J1xuXHRcdFx0XHRcdGVsc2UgaWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT0gdHJ1ZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjwvaT4nXG5cblx0XHRcdFx0XHRwcmlvcml0eUljb24gPSBcIlwiXG5cdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiXG5cdFx0XHRcdFx0cHJpb3JpdHlWYWx1ZSA9IGRvYy52YWx1ZXM/LnByaW9yaXR5XG5cdFx0XHRcdFx0c3dpdGNoIHByaW9yaXR5VmFsdWVcblx0XHRcdFx0XHRcdHdoZW4gXCLnibnmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLntKfmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiXG5cdFx0XHRcdFx0XHR3aGVuIFwi5Yqe5paHXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCJcblx0XHRcdFx0XHRpZiBwcmlvcml0eUljb25DbGFzc1xuXHRcdFx0XHRcdFx0aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktI3twcmlvcml0eUljb25DbGFzc31cIlxuXG5cdFx0XHRcdFx0cmV0dXJuIFwiXCJcIlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz4je3VucmVhZH08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lICN7aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzc30nPiN7ZG9jLmluc3RhbmNlX25hbWV9I3tjY192aWV3fSN7YWdlbnRfdmlld31cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPiN7ZG9jLmFwcGxpY2FudF9uYW1lfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1kZXRhaWwnPiN7c3RlcF9jdXJyZW50X25hbWVfdmlld31cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPSdpbnN0YW5jZS1tb2RpZmllZCcgdGl0bGU9JyN7bW9kaWZpZWRTdHJpbmd9Jz4je21vZGlmaWVkRnJvbU5vd308L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJhcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiaW5zdGFuY2VfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19uYW1lXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRjY192aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHQjIOW9k+WJjeeUqOaIt+WcqGNjIHVzZXLkuK3vvIzkvYbmmK/kuI3lnKhpbmJveCB1c2Vyc+aXtuaJjeaYvuekuifkvKDpmIUn5paH5a2XXG5cdFx0XHRcdFx0aWYgZG9jLmlzX2NjICYmICFkb2MuaW5ib3hfdXNlcnM/LmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRcdFx0Y2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCJcblxuXHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdGlmIGRvYy5hZ2VudF91c2VyX25hbWVcblx0XHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHt1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZX0pICsgXCIpPC9sYWJlbD5cIlxuXG5cdFx0XHRcdFx0dW5yZWFkID0gJydcblxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT0gZmFsc2Vcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nXG5cdFx0XHRcdFx0ZWxzZSBpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PSB0cnVlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPidcblxuXHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJcIlxuXHRcdFx0XHRcdHByaW9yaXR5VmFsdWUgPSBkb2MudmFsdWVzPy5wcmlvcml0eVxuXHRcdFx0XHRcdHN3aXRjaCBwcmlvcml0eVZhbHVlXG5cdFx0XHRcdFx0XHR3aGVuIFwi54m55oClXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiXG5cdFx0XHRcdFx0XHR3aGVuIFwi57Sn5oClXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIuWKnuaWh1wiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiXG5cdFx0XHRcdFx0aWYgcHJpb3JpdHlJY29uQ2xhc3Ncblx0XHRcdFx0XHRcdGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LSN7cHJpb3JpdHlJY29uQ2xhc3N9XCJcblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz4je3VucmVhZH08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSAje2luc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3N9Jz4je2RvYy5pbnN0YW5jZV9uYW1lfSN7Y2Nfdmlld30je2FnZW50X3ZpZXd9PC9kaXY+XG5cdFx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiYXBwbGljYW50X25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X25hbWVcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcInN1Ym1pdF9kYXRlXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N1Ym1pdF9kYXRlXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3VibWl0X2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLnN1Ym1pdF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImZsb3dfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJzdGVwX25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RlcF9jdXJyZW50X25hbWVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5pbnN0YW5jZV9zdGF0ZSA9PSBcImNvbXBsZXRlZFwiXG5cdFx0XHRcdFx0XHRqdWRnZSA9IGRvYy5qdWRnZSB8fCBcImFwcHJvdmVkXCJcblxuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLnN0ZXBfbmFtZSB8fCAnJ1xuXG5cdFx0XHRcdFx0Y2NfdGFnID0gJydcblxuXHRcdFx0XHRcdGlmIGRvYy5jY19jb3VudCA+IDBcblx0XHRcdFx0XHRcdGNjX3RhZyA9IFRBUGkxOG4uX18oJ2NjX3RhZycpXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcC1jdXJyZW50LXN0YXRlICN7anVkZ2V9XCI+I3tzdGVwX2N1cnJlbnRfbmFtZX0je2NjX3RhZ308L2Rpdj5cblx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwibW9kaWZpZWRcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfbW9kaWZpZWRcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcInN0YXJ0X2RhdGVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RhcnRfZGF0ZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLnN0YXJ0X2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLnN0YXJ0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiZmluaXNoX2RhdGVcIixcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRyZXR1cm4gbW9tZW50KGRvYy5maW5pc2hfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJtb2RpZmllZFwiLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJrZXl3b3Jkc1wiLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJpc19hcmNoaXZlZFwiLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2M/LnZhbHVlcz8ucmVjb3JkX25lZWQgJiYgZG9jLnZhbHVlcy5yZWNvcmRfbmVlZCA9PSBcInRydWVcIlxuXHRcdFx0XHRcdFx0aWYgZG9jPy5pc19hcmNoaXZlZFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdChcIllFU1wiKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHQoXCJOT1wiKVxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRkb206IGRvIC0+XG5cdFx0XHQjIOaJi+acuuS4iuS4jeaYvuekuuS4gOmhteaYvuekuuWkmuWwkeadoeiusOW9lemAiemhuVxuXHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRcdCd0cCdcblx0XHRcdGVsc2Vcblx0XHRcdFx0J3RwbCdcblx0XHRvcmRlcjogW1s0LCBcImRlc2NcIl1dLFxuXHRcdGV4dHJhRmllbGRzOiBbXCJpbnN0YW5jZVwiLCBcImZvcm1cIiwgXCJmbG93XCIsIFwiaW5ib3hfdXNlcnNcIiwgXCJpbnN0YW5jZV9zdGF0ZVwiLCBcInNwYWNlXCIsIFwiYXBwbGljYW50XCIsIFwiZm9ybV92ZXJzaW9uXCIsXG5cdFx0XHRcImZsb3dfdmVyc2lvblwiLCBcInR5cGVcIiwgXCJpc19yZWFkXCIsIFwic3RlcF9uYW1lXCIsIFwidmFsdWVzXCIsIFwia2V5d29yZHNcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcImZsb3dfbmFtZVwiLCBcImlzX2hpZGRlblwiLCBcImFnZW50X3VzZXJfbmFtZVwiXSxcblx0XHRsZW5ndGhDaGFuZ2U6IHRydWUsXG5cdFx0bGVuZ3RoTWVudTogWzEwLDE1LDIwLDI1LDUwLDEwMF0sXG5cdFx0cGFnZUxlbmd0aDogMTAsXG5cdFx0aW5mbzogZmFsc2UsXG5cdFx0c2VhcmNoaW5nOiB0cnVlLFxuXHRcdHJlc3BvbnNpdmU6XG5cdFx0XHRkZXRhaWxzOiBmYWxzZVxuXHRcdGF1dG9XaWR0aDogZmFsc2UsXG5cdFx0Y2hhbmdlU2VsZWN0b3I6IChzZWxlY3RvciwgdXNlcklkKSAtPlxuXHRcdFx0dW5sZXNzIHVzZXJJZFxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRzcGFjZSA9IHNlbGVjdG9yLnNwYWNlXG5cdFx0XHR1bmxlc3Mgc3BhY2Vcblx0XHRcdFx0aWYgc2VsZWN0b3I/LiRhbmQ/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRzcGFjZSA9IHNlbGVjdG9yLiRhbmQuZ2V0UHJvcGVydHkoJ3NwYWNlJylbMF1cblx0XHRcdHVubGVzcyBzcGFjZVxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRzcGFjZV91c2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7dXNlcjogdXNlcklkLCBzcGFjZTogc3BhY2V9LCB7ZmllbGRzOiB7X2lkOiAxfX0pXG5cdFx0XHR1bmxlc3Mgc3BhY2VfdXNlclxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRyZXR1cm4gc2VsZWN0b3Jcblx0XHRwYWdpbmdUeXBlOiBcIm51bWJlcnNcIlxuXG5cdH1cblxuXHRpZiBmbG93SWRcblx0XHRrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgZmxvd0lkXG5cblx0XHRvcHRpb25zLm5hbWUgPSBrZXlcblxuXHRcdFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VfdGFza3MuZmllbGRzID0gZmllbGRzXG5cblx0XHRpbnNfZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMgVGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcy5maWVsZHNcblxuXHRcdGluc19maWVsZHMuZm9yRWFjaCAoZiktPlxuXHRcdFx0aWYgZi50eXBlICE9ICd0YWJsZScgJiYgZi5pc19saXN0X2Rpc3BsYXlcblx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLnB1c2hcblx0XHRcdFx0XHRkYXRhOiAoZi5uYW1lIHx8IGYuY29kZSksXG5cdFx0XHRcdFx0dGl0bGU6IHQoZi5uYW1lIHx8IGYuY29kZSksXG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXG5cdFx0XHRcdFx0XHR2YWx1ZXMgPSBkb2MudmFsdWVzIHx8IHt9XG5cblx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVzW2YuY29kZV1cblxuXHRcdFx0XHRcdFx0c3dpdGNoIGYudHlwZVxuXHRcdFx0XHRcdFx0XHR3aGVuICd1c2VyJ1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWU/Lm5hbWVcblx0XHRcdFx0XHRcdFx0d2hlbiAnZ3JvdXAnXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZnVsbG5hbWVcblx0XHRcdFx0XHRcdFx0d2hlbiAnZGF0ZSdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2RhdGVUaW1lJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJylcblx0XHRcdFx0XHRcdFx0d2hlbiAnY2hlY2tib3gnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWUgPT0gdHJ1ZSB8fCB2YWx1ZSA9PSAndHJ1ZSdcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfeWVzXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIik7XG5cdFx0XHRcdFx0XHRcdHdoZW4gJ29kYXRhJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiBfLmlzQXJyYXkodmFsdWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gXy5wbHVjayh2YWx1ZSwgJ0BsYWJlbCcpLnRvU3RyaW5nKClcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ11cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cblxuXHRyZXR1cm4gb3B0aW9ucztcblxuXG5NZXRlb3Iuc3RhcnR1cCAoKS0+XG5cdFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VzID0gbmV3IFRhYnVsYXIuVGFibGUgaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhcigpXG5cdFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VfdGFza3MgPSBuZXcgVGFidWxhci5UYWJsZSBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcigpXG5cdFRhYnVsYXJUYWJsZXMuaW5ib3hfaW5zdGFuY2VzID0gbmV3IFRhYnVsYXIuVGFibGUgR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoXCJpbmJveFwiKVxuXHRUYWJ1bGFyVGFibGVzLm91dGJveF9pbnN0YW5jZXMgPSBuZXcgVGFidWxhci5UYWJsZSBHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhcIm91dGJveFwiKVxuXG5cbkdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zID0gKGJveCwgZmxvd0lkLCBmaWVsZHMpLT5cblx0a2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGJveCArIGZsb3dJZFxuXHRpZiBib3ggPT0gXCJpbmJveFwiXG5cdFx0b3B0aW9ucyA9IF9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyhmbG93SWQsIGZpZWxkcylcblx0ZWxzZSBpZiBib3ggPT0gXCJvdXRib3hcIlxuXHRcdG9wdGlvbnMgPSBfZ2V0X291dGJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zKGZsb3dJZCwgZmllbGRzKVxuXHRlbHNlXG5cdFx0b3B0aW9ucyA9IGluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpXG5cdFx0aWYgIWZsb3dJZFxuXHRcdFx0b3B0aW9ucy5uYW1lID0gXCJpbmJveF9pbnN0YW5jZXNcIlxuXHRpZiBmbG93SWRcblx0XHRvcHRpb25zLm5hbWUgPSBrZXlcblx0cmV0dXJuIG9wdGlvbnNcblxuX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zID0gKGZsb3dJZCwgZmllbGRzKS0+XG5cdG9wdGlvbnMgPSBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcihmbG93SWQsIGZpZWxkcylcblxuXHRpZiAhZmxvd0lkXG5cdFx0b3B0aW9ucy5uYW1lID0gXCJpbmJveF9pbnN0YW5jZXNcIlxuXG5cdG9wdGlvbnMub3JkZXIgPSBbWzgsIFwiZGVzY1wiXV1cblxuXHRvcHRpb25zLmdldFNvcnQgPSAoc2VsZWN0b3IsIHNvcnQpIC0+IFxuXHRcdGNvbnNvbGUubG9nKCdpbmJveF9pbnN0YW5jZXM6Jyxzb3J0KVxuXHRcdHJldHVybiBzb3J0XG5cblx0cmV0dXJuIG9wdGlvbnNcblxuX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyA9IChmbG93SWQsIGZpZWxkcyktPlxuXHRvcHRpb25zID0gaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpXG5cblx0aWYgIWZsb3dJZFxuXHRcdG9wdGlvbnMubmFtZSA9IFwib3V0Ym94X2luc3RhbmNlc1wiXG5cblx0b3B0aW9ucy5vcmRlciA9IFtbOSwgLTFdXVxuXG5cdG9wdGlvbnMuZ2V0U29ydCA9IChzZWxlY3Rvciwgc29ydCkgLT4gXG5cdFx0Y29uc29sZS5sb2coJ291dGJveF9pbnN0YW5jZXM6Jyxzb3J0KVxuXHRcdCMgbmV3U29ydCA9IFsgXG5cdFx0IyBcdFsnc3BhY2UnLCAxXSxcblx0XHQjIFx0WydoYW5kbGVyJywgMV0sXG5cdFx0IyBcdFsnaXNfZmluaXNoZWQnLCAxXSxcblx0XHQjIF1cblx0XHQjIG5ld1NvcnQgPSBuZXdTb3J0LmNvbmNhdChzb3J0KVxuXHRcdCMgcmV0dXJuIG5ld1NvcnRcblx0XHRyZXR1cm4gc29ydFxuXG5cdHJldHVybiBvcHRpb25zXG5cbmlmIE1ldGVvci5pc0NsaWVudFxuXHRUYWJ1bGFyVGFibGVzLmZsb3dJbnN0YW5jZXMgPSBuZXcgUmVhY3RpdmVWYXIoKVxuXG5NZXRlb3Iuc3RhcnR1cCAoKS0+XG5cdFRyYWNrZXIuYXV0b3J1biAoYykgLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnQgJiYgIVN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJmbG93SWRcIikgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gJ2RyYWZ0J1xuXHRcdFx0XHRNZXRlb3IuY2FsbCBcIm5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyXCIsIFNlc3Npb24uZ2V0KFwiYm94XCIpLCBTZXNzaW9uLmdldChcImZsb3dJZFwiKSwgKGVycm9yLCByZXN1bHQpIC0+XG5cdFx0XHRcdFx0bmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIgU2Vzc2lvbi5nZXQoXCJib3hcIiksIFNlc3Npb24uZ2V0KFwiZmxvd0lkXCIpLCByZXN1bHRcblx0XHRcdFx0XHRUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll9jaGFuZ2VPcmRlcigpXG5cblxubmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIgPSAoYm94LCBmbG93SWQsIGZpZWxkcyktPlxuXHRpZiAhZmllbGRzXG5cdFx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoe19pZDogZmxvd0lkfSwge2ZpZWxkczoge2Zvcm06IDF9fSlcblx0XHRmaWVsZHMgPSBkYi5mb3Jtcy5maW5kT25lKHsgX2lkOiBmbG93Py5mb3JtIH0sIHsgZmllbGRzOiB7ICdjdXJyZW50LmZpZWxkcyc6IDEgfSB9KT8uY3VycmVudD8uZmllbGRzXG5cblx0ZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMgZmllbGRzXG5cblx0aWYgZmllbGRzPy5maWx0ZXJQcm9wZXJ0eShcImlzX2xpc3RfZGlzcGxheVwiLCB0cnVlKT8ubGVuZ3RoID4gMFxuXHRcdGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBib3ggKyBmbG93SWRcblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFRhYnVsYXJUYWJsZXMuZmxvd0luc3RhbmNlcy5zZXQobmV3IFRhYnVsYXIuVGFibGUgR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoYm94LCBmbG93SWQsIGZpZWxkcykpXG5cdFx0ZWxzZVxuXHRcdFx0bmV3IFRhYnVsYXIuVGFibGUgR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoYm94LCBmbG93SWQsIGZpZWxkcylcblx0XHRjb25zb2xlLmxvZyBcIm5ldyBUYWJ1bGFyVGFibGVzIFwiLCBrZXlcblxuaWYgTWV0ZW9yLmlzU2VydmVyXG5cdE1ldGVvci5tZXRob2RzXG5cdFx0bmV3SW5zdGFuY2VzTGlzdFRhYnVsYXI6IChib3gsIGZsb3dJZCktPlxuXHRcdFx0bmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIoYm94LCBmbG93SWQpXG5cblx0XHRcdGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtfaWQ6IGZsb3dJZH0sIHtmaWVsZHM6IHtmb3JtOiAxfX0pXG5cdFx0XHRmaWVsZHMgPSBkYi5mb3Jtcy5maW5kT25lKHsgX2lkOiBmbG93Py5mb3JtIH0sIHsgZmllbGRzOiB7ICdjdXJyZW50LmZpZWxkcyc6IDEgfSB9KT8uY3VycmVudD8uZmllbGRzXG5cdFx0XHRyZXR1cm4gZmllbGRzXG5cblxuIiwidmFyIEdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zLCBfZ2V0X2luYm94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMsIF9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMsIF9oYW5kbGVMaXN0RmllbGRzLCBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhciwgaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhciwgbmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIsIHVwZGF0ZVRhYnVsYXJUaXRsZTtcblxuU3RlZWRvcy5zdWJzW1wiSW5zdGFuY2VUYWJ1bGFyXCJdID0gbmV3IFN1YnNNYW5hZ2VyKCk7XG5cbl9oYW5kbGVMaXN0RmllbGRzID0gZnVuY3Rpb24oZmllbGRzKSB7XG4gIHZhciBpbnNfZmllbGRzO1xuICBpbnNfZmllbGRzID0gbmV3IEFycmF5KCk7XG4gIGlmIChmaWVsZHMgIT0gbnVsbCkge1xuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgIHZhciByZWY7XG4gICAgICBpZiAoZi50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmxvZygnaWdub3JlIG9waW5pb24gZmllbGQgaW4gdGFibGUnKTtcbiAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGYgIT0gbnVsbCA/IChyZWYgPSBmLmZpZWxkcykgIT0gbnVsbCA/IHJlZi5mb3JFYWNoKGZ1bmN0aW9uKGYxKSB7XG4gICAgICAgICAgcmV0dXJuIGluc19maWVsZHMucHVzaChmMSk7XG4gICAgICAgIH0pIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluc19maWVsZHMucHVzaChmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gaW5zX2ZpZWxkcztcbn07XG5cbnVwZGF0ZVRhYnVsYXJUaXRsZSA9IGZ1bmN0aW9uKCkge307XG5cbmluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIgPSBmdW5jdGlvbihmbG93SWQsIGZpZWxkcykge1xuICB2YXIgaW5zX2ZpZWxkcywga2V5LCBvcHRpb25zO1xuICBvcHRpb25zID0ge1xuICAgIG5hbWU6IFwiaW5zdGFuY2VzXCIsXG4gICAgY29sbGVjdGlvbjogZGIuaW5zdGFuY2VzLFxuICAgIHB1YjogXCJpbnN0YW5jZV90YWJ1bGFyXCIsXG4gICAgb25VbmxvYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE1ldGVvci5zZXRUaW1lb3V0KFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucywgMTUwKTtcbiAgICB9LFxuICAgIGRyYXdDYWxsYmFjazogZnVuY3Rpb24oc2V0dGluZ3MpIHtcbiAgICAgIHZhciBlbGxpcHNpc0xpbmssIGVtcHR5VGQsIHRpdGxlO1xuICAgICAgZW1wdHlUZCA9ICQoXCIuZGF0YVRhYmxlc19lbXB0eVwiKTtcbiAgICAgIGlmIChlbXB0eVRkLmxlbmd0aCkge1xuICAgICAgICBlbXB0eVRkWzBdLmNvbFNwYW4gPSBcIjZcIjtcbiAgICAgIH1cbiAgICAgIGlmICghU3RlZWRvcy5pc01vYmlsZSgpICYmICFTdGVlZG9zLmlzUGFkKCkpIHtcbiAgICAgICAgTWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApO1xuICAgICAgICAkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKFwiLmluc3RhbmNlLWxpc3RcIikucGVyZmVjdFNjcm9sbGJhcihcInVwZGF0ZVwiKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApO1xuICAgICAgfVxuICAgICAgdGl0bGUgPSB0KFwicGFnZXJfaW5wdXRfaGludFwiKTtcbiAgICAgIGVsbGlwc2lzTGluayA9IHNldHRpbmdzLm9JbnN0YW5jZS5wYXJlbnQoKS5maW5kKCcucGFnaW5nX251bWJlcnMgLnBhZ2luYXRpb24gLmRpc2FibGVkIGEnKTtcbiAgICAgIHJldHVybiBlbGxpcHNpc0xpbmsuYXR0cihcInRpdGxlXCIsIHRpdGxlKS5jc3MoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZ29QYWdlLCBpbnB1dDtcbiAgICAgICAgaWYgKCEkKHRoaXMpLmZpbmQoJ2lucHV0JykubGVuZ3RoKSB7XG4gICAgICAgICAgaW5wdXQgPSAkKCc8aW5wdXQgY2xhc3M9XCJwYWdpbmF0ZV9pbnB1dCBmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiB0eXBlPVwidGV4dFwiIHN0eWxlPVwiYm9yZGVyOiBub25lOyBwYWRkaW5nOjAgMnB4O1wiLz4nKTtcbiAgICAgICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgICBpbnB1dC5jc3Moe1xuICAgICAgICAgICAgICB3aWR0aDogXCI1MnB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIyMHB4XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dC5jc3Moe1xuICAgICAgICAgICAgICB3aWR0aDogXCI1MnB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxNnB4XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCB0aXRsZSk7XG4gICAgICAgICAgJCh0aGlzKS5lbXB0eSgpLmFwcGVuZChpbnB1dCk7XG4gICAgICAgICAgZ29QYWdlID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBwYWdlcztcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgcGFnZXMgPSBNYXRoLmNlaWwoc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpIC8gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcGFnZXMpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHBhZ2VzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncy5vSW5zdGFuY2UuRGF0YVRhYmxlKCkucGFnZShpbmRleCkuZHJhdygncGFnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgaW5wdXQuYmx1cihmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBnb1BhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuICQodGhpcykucGFyZW50KCkuaHRtbCgnLi4uJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGlucHV0LmtleWRvd24oZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKGUua2V5Q29kZS50b1N0cmluZygpID09PSBcIjEzXCIpIHtcbiAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgICByZXR1cm4gZ29QYWdlKGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVkUm93OiBmdW5jdGlvbihyb3csIGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgICBpZiAoZGF0YS5faWQgPT09IEZsb3dSb3V0ZXIuY3VycmVudCgpLnBhcmFtcy5pbnN0YW5jZUlkKSB7XG4gICAgICAgICAgcmV0dXJuIHJvdy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjb2x1bW5zOiBbXG4gICAgICB7XG4gICAgICAgIGRhdGE6IFwiX2lkXCIsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgYWdlbnRfdmlldywgY2NfdmlldywgZmxvd19uYW1lLCBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzLCBtb2RpZmllZCwgbW9kaWZpZWRGcm9tTm93LCBtb2RpZmllZFN0cmluZywgcHJpb3JpdHlJY29uLCBwcmlvcml0eUljb25DbGFzcywgcHJpb3JpdHlWYWx1ZSwgcmVmLCByZWYxLCBzdGVwX2N1cnJlbnRfbmFtZV92aWV3LCB1bnJlYWQ7XG4gICAgICAgICAgbW9kaWZpZWRTdHJpbmcgPSBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgICBtb2RpZmllZCA9IGRvYy5tb2RpZmllZDtcbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcgJiYgZG9jLnN0YXRlICE9PSAnZHJhZnQnKSB7XG4gICAgICAgICAgICBtb2RpZmllZCA9IGRvYy5zdGFydF9kYXRlIHx8IGRvYy5tb2RpZmllZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnb3V0Ym94JyB8fCBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InKSB7XG4gICAgICAgICAgICBtb2RpZmllZCA9IGRvYy5zdWJtaXRfZGF0ZSB8fCBkb2Muc3VibWl0X2RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1vZGlmaWVkRnJvbU5vdyA9IFN0ZWVkb3MubW9tZW50UmVhY3RpdmVGcm9tTm93KG1vZGlmaWVkKTtcbiAgICAgICAgICBmbG93X25hbWUgPSBkb2MuZmxvd19uYW1lO1xuICAgICAgICAgIGNjX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuaXNfY2MgJiYgISgocmVmID0gZG9jLmluYm94X3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgOiB2b2lkIDApICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIjtcbiAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjxzcGFuPihcIiArIGRvYy5jdXJyZW50X3N0ZXBfbmFtZSArIFwiKTwvc3Bhbj48L2Rpdj5cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpICE9PSAnZHJhZnQnICYmIGRvYy5jdXJyZW50X3N0ZXBfbmFtZSkge1xuICAgICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8c3Bhbj4oXCIgKyBkb2MuY3VycmVudF9zdGVwX25hbWUgKyBcIik8L3NwYW4+PC9kaXY+XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYWdlbnRfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5hZ2VudF91c2VyX25hbWUgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgdXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWVcbiAgICAgICAgICAgIH0pICsgXCIpPC9sYWJlbD5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5yZWFkID0gJyc7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPic7XG4gICAgICAgICAgfSBlbHNlIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JpdHlJY29uID0gXCJcIjtcbiAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiXCI7XG4gICAgICAgICAgcHJpb3JpdHlWYWx1ZSA9IChyZWYxID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZjEucHJpb3JpdHkgOiB2b2lkIDA7XG4gICAgICAgICAgc3dpdGNoIChwcmlvcml0eVZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwi54m55oClXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi57Sn5oClXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIuWKnuaWh1wiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByaW9yaXR5SWNvbkNsYXNzKSB7XG4gICAgICAgICAgICBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS1cIiArIHByaW9yaXR5SWNvbkNsYXNzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS1yZWFkLWJhcic+XCIgKyB1bnJlYWQgKyBcIjwvZGl2PlxcbjxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgXCIgKyBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzICsgXCInPlwiICsgZG9jLm5hbWUgKyBjY192aWV3ICsgYWdlbnRfdmlldyArIFwiXFxuXHQ8c3Bhbj5cIiArIGRvYy5hcHBsaWNhbnRfbmFtZSArIFwiPC9zcGFuPlxcbjwvZGl2PlxcbjxkaXYgY2xhc3M9J2luc3RhbmNlLWRldGFpbCc+XCIgKyBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ICsgXCJcXG5cdDxzcGFuIGNsYXNzPSdpbnN0YW5jZS1tb2RpZmllZCcgdGl0bGU9J1wiICsgbW9kaWZpZWRTdHJpbmcgKyBcIic+XCIgKyBtb2RpZmllZEZyb21Ob3cgKyBcIjwvc3Bhbj5cXG48L2Rpdj5cIjtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImFwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIiksXG4gICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19uYW1lXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGFnZW50X3ZpZXcsIGNjX3ZpZXcsIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MsIHByaW9yaXR5SWNvbkNsYXNzLCBwcmlvcml0eVZhbHVlLCByZWYsIHJlZjEsIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcsIHVucmVhZDtcbiAgICAgICAgICBjY192aWV3ID0gXCJcIjtcbiAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCJcIjtcbiAgICAgICAgICBpZiAoZG9jLmlzX2NjICYmICEoKHJlZiA9IGRvYy5pbmJveF91c2VycykgIT0gbnVsbCA/IHJlZi5pbmNsdWRlcyhNZXRlb3IudXNlcklkKCkpIDogdm9pZCAwKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICAgICAgY2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuYWdlbnRfdXNlcl9uYW1lKSB7XG4gICAgICAgICAgICBhZ2VudF92aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICAgIHVzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lXG4gICAgICAgICAgICB9KSArIFwiKTwvbGFiZWw+XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHVucmVhZCA9ICcnO1xuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICB1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPic7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJcIjtcbiAgICAgICAgICBwcmlvcml0eVZhbHVlID0gKHJlZjEgPSBkb2MudmFsdWVzKSAhPSBudWxsID8gcmVmMS5wcmlvcml0eSA6IHZvaWQgMDtcbiAgICAgICAgICBzd2l0Y2ggKHByaW9yaXR5VmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCLnibnmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLntKfmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi5Yqe5paHXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJpb3JpdHlJY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LVwiICsgcHJpb3JpdHlJY29uQ2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz5cIiArIHVucmVhZCArIFwiPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSBcIiArIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgKyBcIic+XCIgKyBkb2MubmFtZSArIGNjX3ZpZXcgKyBhZ2VudF92aWV3ICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJzdWJtaXRfZGF0ZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19zdWJtaXRfZGF0ZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIGlmIChkb2Muc3VibWl0X2RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLnN1Ym1pdF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJmbG93X25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJjdXJyZW50X3N0ZXBfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19zdGVwX2N1cnJlbnRfbmFtZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBjY190YWcsIGp1ZGdlLCBzdGVwX2N1cnJlbnRfbmFtZTtcbiAgICAgICAgICBpZiAoZG9jLnN0YXRlID09PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgICBqdWRnZSA9IGRvYy5maW5hbF9kZWNpc2lvbiB8fCBcImFwcHJvdmVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLmN1cnJlbnRfc3RlcF9uYW1lIHx8ICcnO1xuICAgICAgICAgIGNjX3RhZyA9ICcnO1xuICAgICAgICAgIGlmIChkb2MuY2NfY291bnQgPiAwKSB7XG4gICAgICAgICAgICBjY190YWcgPSBUQVBpMThuLl9fKCdjY190YWcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz1cXFwic3RlcC1jdXJyZW50LXN0YXRlIFwiICsganVkZ2UgKyBcIlxcXCI+XCIgKyBzdGVwX2N1cnJlbnRfbmFtZSArIGNjX3RhZyArIFwiPC9kaXY+XCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibW9kaWZpZWRcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfbW9kaWZpZWRcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJzdGFydF9kYXRlXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0YXJ0X2RhdGVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLnN0YXJ0X2RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLnN0YXJ0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcIm15X2ZpbmlzaF9kYXRlXCIsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLm15X2ZpbmlzaF9kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5teV9maW5pc2hfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibW9kaWZpZWRcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJrZXl3b3Jkc1wiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImlzX2FyY2hpdmVkXCIsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgcmVmO1xuICAgICAgICAgIGlmICgoZG9jICE9IG51bGwgPyAocmVmID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZi5yZWNvcmRfbmVlZCA6IHZvaWQgMCA6IHZvaWQgMCkgJiYgZG9jLnZhbHVlcy5yZWNvcmRfbmVlZCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIGlmIChkb2MgIT0gbnVsbCA/IGRvYy5pc19hcmNoaXZlZCA6IHZvaWQgMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdChcIllFU1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0KFwiTk9cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfVxuICAgIF0sXG4gICAgZG9tOiAoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgIHJldHVybiAndHAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd0cGwnO1xuICAgICAgfVxuICAgIH0pKCksXG4gICAgb3JkZXI6IFtbNCwgXCJkZXNjXCJdXSxcbiAgICBleHRyYUZpZWxkczogW1wiZm9ybVwiLCBcImZsb3dcIiwgXCJpbmJveF91c2Vyc1wiLCBcInN0YXRlXCIsIFwic3BhY2VcIiwgXCJhcHBsaWNhbnRcIiwgXCJmb3JtX3ZlcnNpb25cIiwgXCJmbG93X3ZlcnNpb25cIiwgXCJpc19jY1wiLCBcImNjX2NvdW50XCIsIFwiaXNfcmVhZFwiLCBcImN1cnJlbnRfc3RlcF9uYW1lXCIsIFwidmFsdWVzXCIsIFwia2V5d29yZHNcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcImZsb3dfbmFtZVwiLCBcImlzX2hpZGRlblwiLCBcImFnZW50X3VzZXJfbmFtZVwiXSxcbiAgICBsZW5ndGhDaGFuZ2U6IHRydWUsXG4gICAgbGVuZ3RoTWVudTogWzEwLCAxNSwgMjAsIDI1LCA1MCwgMTAwXSxcbiAgICBwYWdlTGVuZ3RoOiAxMCxcbiAgICBpbmZvOiBmYWxzZSxcbiAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgcmVzcG9uc2l2ZToge1xuICAgICAgZGV0YWlsczogZmFsc2VcbiAgICB9LFxuICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgY2hhbmdlU2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yLCB1c2VySWQpIHtcbiAgICAgIHZhciByZWYsIHNwYWNlLCBzcGFjZV91c2VyO1xuICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZSA9IHNlbGVjdG9yLnNwYWNlO1xuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICBpZiAoKHNlbGVjdG9yICE9IG51bGwgPyAocmVmID0gc2VsZWN0b3IuJGFuZCkgIT0gbnVsbCA/IHJlZi5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgICAgICAgIHNwYWNlID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNwYWNlX3VzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtcbiAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICBzcGFjZTogc3BhY2VcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgX2lkOiAxXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCFzcGFjZV91c2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH0sXG4gICAgcGFnaW5nVHlwZTogXCJudW1iZXJzXCJcbiAgfTtcbiAgaWYgKGZsb3dJZCkge1xuICAgIGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBmbG93SWQ7XG4gICAgb3B0aW9ucy5uYW1lID0ga2V5O1xuICAgIFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VzLmZpZWxkcyA9IGZpZWxkcztcbiAgICBpbnNfZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMoVGFidWxhclRhYmxlcy5pbnN0YW5jZXMuZmllbGRzKTtcbiAgICBpbnNfZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZikge1xuICAgICAgaWYgKGYudHlwZSAhPT0gJ3RhYmxlJyAmJiBmLmlzX2xpc3RfZGlzcGxheSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGYubmFtZSB8fCBmLmNvZGUsXG4gICAgICAgICAgdGl0bGU6IHQoZi5uYW1lIHx8IGYuY29kZSksXG4gICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUsIHZhbHVlcztcbiAgICAgICAgICAgIHZhbHVlcyA9IGRvYy52YWx1ZXMgfHwge307XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1tmLmNvZGVdO1xuICAgICAgICAgICAgc3dpdGNoIChmLnR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUubmFtZSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLmZ1bGxuYW1lIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF95ZXNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdvZGF0YSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF8ucGx1Y2sodmFsdWUsICdAbGFiZWwnKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ107XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59O1xuXG5pbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhciA9IGZ1bmN0aW9uKGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBpbnNfZmllbGRzLCBrZXksIG9wdGlvbnM7XG4gIG9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJpbnN0YW5jZV90YXNrc1wiLFxuICAgIGNvbGxlY3Rpb246IGRiLmluc3RhbmNlX3Rhc2tzLFxuICAgIHB1YjogXCJpbnN0YW5jZV90YXNrc190YWJ1bGFyXCIsXG4gICAgb25VbmxvYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE1ldGVvci5zZXRUaW1lb3V0KFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucywgMTUwKTtcbiAgICB9LFxuICAgIGRyYXdDYWxsYmFjazogZnVuY3Rpb24oc2V0dGluZ3MpIHtcbiAgICAgIHZhciBlbGxpcHNpc0xpbmssIGVtcHR5VGQsIHRpdGxlO1xuICAgICAgZW1wdHlUZCA9ICQoXCIuZGF0YVRhYmxlc19lbXB0eVwiKTtcbiAgICAgIGlmIChlbXB0eVRkLmxlbmd0aCkge1xuICAgICAgICBlbXB0eVRkWzBdLmNvbFNwYW4gPSBcIjZcIjtcbiAgICAgIH1cbiAgICAgIGlmICghU3RlZWRvcy5pc01vYmlsZSgpICYmICFTdGVlZG9zLmlzUGFkKCkpIHtcbiAgICAgICAgTWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApO1xuICAgICAgICAkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKFwiLmluc3RhbmNlLWxpc3RcIikucGVyZmVjdFNjcm9sbGJhcihcInVwZGF0ZVwiKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApO1xuICAgICAgfVxuICAgICAgdGl0bGUgPSB0KFwicGFnZXJfaW5wdXRfaGludFwiKTtcbiAgICAgIGVsbGlwc2lzTGluayA9IHNldHRpbmdzLm9JbnN0YW5jZS5wYXJlbnQoKS5maW5kKCcucGFnaW5nX251bWJlcnMgLnBhZ2luYXRpb24gLmRpc2FibGVkIGEnKTtcbiAgICAgIHJldHVybiBlbGxpcHNpc0xpbmsuYXR0cihcInRpdGxlXCIsIHRpdGxlKS5jc3MoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZ29QYWdlLCBpbnB1dDtcbiAgICAgICAgaWYgKCEkKHRoaXMpLmZpbmQoJ2lucHV0JykubGVuZ3RoKSB7XG4gICAgICAgICAgaW5wdXQgPSAkKCc8aW5wdXQgY2xhc3M9XCJwYWdpbmF0ZV9pbnB1dCBmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiB0eXBlPVwidGV4dFwiIHN0eWxlPVwiYm9yZGVyOiBub25lOyBwYWRkaW5nOjAgMnB4O1wiLz4nKTtcbiAgICAgICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgICBpbnB1dC5jc3Moe1xuICAgICAgICAgICAgICB3aWR0aDogXCI1MnB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIyMHB4XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dC5jc3Moe1xuICAgICAgICAgICAgICB3aWR0aDogXCI1MnB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxNnB4XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCB0aXRsZSk7XG4gICAgICAgICAgJCh0aGlzKS5lbXB0eSgpLmFwcGVuZChpbnB1dCk7XG4gICAgICAgICAgZ29QYWdlID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBwYWdlcztcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgcGFnZXMgPSBNYXRoLmNlaWwoc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpIC8gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcGFnZXMpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHBhZ2VzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncy5vSW5zdGFuY2UuRGF0YVRhYmxlKCkucGFnZShpbmRleCkuZHJhdygncGFnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgaW5wdXQuYmx1cihmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBnb1BhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuICQodGhpcykucGFyZW50KCkuaHRtbCgnLi4uJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGlucHV0LmtleWRvd24oZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKGUua2V5Q29kZS50b1N0cmluZygpID09PSBcIjEzXCIpIHtcbiAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgICByZXR1cm4gZ29QYWdlKGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVkUm93OiBmdW5jdGlvbihyb3csIGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgICBpZiAoZGF0YS5pbnN0YW5jZSA9PT0gRmxvd1JvdXRlci5jdXJyZW50KCkucGFyYW1zLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICByZXR1cm4gcm93LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbHVtbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZGF0YTogXCJfaWRcIixcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBhZ2VudF92aWV3LCBjY192aWV3LCBmbG93X25hbWUsIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MsIG1vZGlmaWVkLCBtb2RpZmllZEZyb21Ob3csIG1vZGlmaWVkU3RyaW5nLCBwcmlvcml0eUljb24sIHByaW9yaXR5SWNvbkNsYXNzLCBwcmlvcml0eVZhbHVlLCByZWYsIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcsIHVucmVhZDtcbiAgICAgICAgICBtb2RpZmllZFN0cmluZyA9IG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgIG1vZGlmaWVkID0gZG9jLm1vZGlmaWVkO1xuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94JyAmJiBkb2MuaW5zdGFuY2Vfc3RhdGUgIT09ICdkcmFmdCcpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkID0gZG9jLnN0YXJ0X2RhdGUgfHwgZG9jLm1vZGlmaWVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdvdXRib3gnKSB7XG4gICAgICAgICAgICBtb2RpZmllZCA9IGRvYy5zdWJtaXRfZGF0ZSB8fCBkb2MubW9kaWZpZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1vZGlmaWVkRnJvbU5vdyA9IFN0ZWVkb3MubW9tZW50UmVhY3RpdmVGcm9tTm93KG1vZGlmaWVkKTtcbiAgICAgICAgICBmbG93X25hbWUgPSBkb2MuZmxvd19uYW1lO1xuICAgICAgICAgIGNjX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MudHlwZSA9PT0gJ2NjJyAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICAgICAgY2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCI7XG4gICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8c3Bhbj4oXCIgKyBkb2Muc3RlcF9uYW1lICsgXCIpPC9zcGFuPjwvZGl2PlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9jLnN0ZXBfbmFtZSkge1xuICAgICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8c3Bhbj4oXCIgKyBkb2Muc3RlcF9uYW1lICsgXCIpPC9zcGFuPjwvZGl2PlwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz5cIiArIGZsb3dfbmFtZSArIFwiPC9kaXY+XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuYWdlbnRfdXNlcl9uYW1lICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBhZ2VudF92aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICAgIHVzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lXG4gICAgICAgICAgICB9KSArIFwiKTwvbGFiZWw+XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHVucmVhZCA9ICcnO1xuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICB1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPic7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yaXR5SWNvbiA9IFwiXCI7XG4gICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIHByaW9yaXR5VmFsdWUgPSAocmVmID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZi5wcmlvcml0eSA6IHZvaWQgMDtcbiAgICAgICAgICBzd2l0Y2ggKHByaW9yaXR5VmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCLnibnmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLntKfmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi5Yqe5paHXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJpb3JpdHlJY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LVwiICsgcHJpb3JpdHlJY29uQ2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz5cIiArIHVucmVhZCArIFwiPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSBcIiArIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgKyBcIic+XCIgKyBkb2MuaW5zdGFuY2VfbmFtZSArIGNjX3ZpZXcgKyBhZ2VudF92aWV3ICsgXCJcXG5cdDxzcGFuPlwiICsgZG9jLmFwcGxpY2FudF9uYW1lICsgXCI8L3NwYW4+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtZGV0YWlsJz5cIiArIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgKyBcIlxcblx0PHNwYW4gY2xhc3M9J2luc3RhbmNlLW1vZGlmaWVkJyB0aXRsZT0nXCIgKyBtb2RpZmllZFN0cmluZyArIFwiJz5cIiArIG1vZGlmaWVkRnJvbU5vdyArIFwiPC9zcGFuPlxcbjwvZGl2PlwiO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiKSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJpbnN0YW5jZV9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX25hbWVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgYWdlbnRfdmlldywgY2NfdmlldywgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcywgcHJpb3JpdHlJY29uQ2xhc3MsIHByaW9yaXR5VmFsdWUsIHJlZiwgcmVmMSwgc3RlcF9jdXJyZW50X25hbWVfdmlldywgdW5yZWFkO1xuICAgICAgICAgIGNjX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuaXNfY2MgJiYgISgocmVmID0gZG9jLmluYm94X3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgOiB2b2lkIDApICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWdlbnRfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5hZ2VudF91c2VyX25hbWUpIHtcbiAgICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgdXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWVcbiAgICAgICAgICAgIH0pICsgXCIpPC9sYWJlbD5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5yZWFkID0gJyc7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPic7XG4gICAgICAgICAgfSBlbHNlIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIHByaW9yaXR5VmFsdWUgPSAocmVmMSA9IGRvYy52YWx1ZXMpICE9IG51bGwgPyByZWYxLnByaW9yaXR5IDogdm9pZCAwO1xuICAgICAgICAgIHN3aXRjaCAocHJpb3JpdHlWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcIueJueaApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIue0p+aApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLlip7mlodcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmlvcml0eUljb25DbGFzcykge1xuICAgICAgICAgICAgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktXCIgKyBwcmlvcml0eUljb25DbGFzcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPlwiICsgdW5yZWFkICsgXCI8L2Rpdj5cXG48ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lIFwiICsgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyArIFwiJz5cIiArIGRvYy5pbnN0YW5jZV9uYW1lICsgY2NfdmlldyArIGFnZW50X3ZpZXcgKyBcIjwvZGl2PlwiO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImFwcGxpY2FudF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9uYW1lXCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcInN1Ym1pdF9kYXRlXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N1Ym1pdF9kYXRlXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5zdWJtaXRfZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkb2Muc3VibWl0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImZsb3dfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcInN0ZXBfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19zdGVwX2N1cnJlbnRfbmFtZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBjY190YWcsIGp1ZGdlLCBzdGVwX2N1cnJlbnRfbmFtZTtcbiAgICAgICAgICBpZiAoZG9jLmluc3RhbmNlX3N0YXRlID09PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgICBqdWRnZSA9IGRvYy5qdWRnZSB8fCBcImFwcHJvdmVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLnN0ZXBfbmFtZSB8fCAnJztcbiAgICAgICAgICBjY190YWcgPSAnJztcbiAgICAgICAgICBpZiAoZG9jLmNjX2NvdW50ID4gMCkge1xuICAgICAgICAgICAgY2NfdGFnID0gVEFQaTE4bi5fXygnY2NfdGFnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9XFxcInN0ZXAtY3VycmVudC1zdGF0ZSBcIiArIGp1ZGdlICsgXCJcXFwiPlwiICsgc3RlcF9jdXJyZW50X25hbWUgKyBjY190YWcgKyBcIjwvZGl2PlwiO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcIm1vZGlmaWVkXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX21vZGlmaWVkXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgcmV0dXJuIG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwic3RhcnRfZGF0ZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19zdGFydF9kYXRlXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5zdGFydF9kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5zdGFydF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJmaW5pc2hfZGF0ZVwiLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5maW5pc2hfZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkb2MuZmluaXNoX2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcIm1vZGlmaWVkXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwia2V5d29yZHNcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJpc19hcmNoaXZlZFwiLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIHJlZjtcbiAgICAgICAgICBpZiAoKGRvYyAhPSBudWxsID8gKHJlZiA9IGRvYy52YWx1ZXMpICE9IG51bGwgPyByZWYucmVjb3JkX25lZWQgOiB2b2lkIDAgOiB2b2lkIDApICYmIGRvYy52YWx1ZXMucmVjb3JkX25lZWQgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICBpZiAoZG9jICE9IG51bGwgPyBkb2MuaXNfYXJjaGl2ZWQgOiB2b2lkIDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQoXCJZRVNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdChcIk5PXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH1cbiAgICBdLFxuICAgIGRvbTogKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgICByZXR1cm4gJ3RwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAndHBsJztcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIG9yZGVyOiBbWzQsIFwiZGVzY1wiXV0sXG4gICAgZXh0cmFGaWVsZHM6IFtcImluc3RhbmNlXCIsIFwiZm9ybVwiLCBcImZsb3dcIiwgXCJpbmJveF91c2Vyc1wiLCBcImluc3RhbmNlX3N0YXRlXCIsIFwic3BhY2VcIiwgXCJhcHBsaWNhbnRcIiwgXCJmb3JtX3ZlcnNpb25cIiwgXCJmbG93X3ZlcnNpb25cIiwgXCJ0eXBlXCIsIFwiaXNfcmVhZFwiLCBcInN0ZXBfbmFtZVwiLCBcInZhbHVlc1wiLCBcImtleXdvcmRzXCIsIFwiZmluYWxfZGVjaXNpb25cIiwgXCJmbG93X25hbWVcIiwgXCJpc19oaWRkZW5cIiwgXCJhZ2VudF91c2VyX25hbWVcIl0sXG4gICAgbGVuZ3RoQ2hhbmdlOiB0cnVlLFxuICAgIGxlbmd0aE1lbnU6IFsxMCwgMTUsIDIwLCAyNSwgNTAsIDEwMF0sXG4gICAgcGFnZUxlbmd0aDogMTAsXG4gICAgaW5mbzogZmFsc2UsXG4gICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgIGRldGFpbHM6IGZhbHNlXG4gICAgfSxcbiAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgIGNoYW5nZVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvciwgdXNlcklkKSB7XG4gICAgICB2YXIgcmVmLCBzcGFjZSwgc3BhY2VfdXNlcjtcbiAgICAgIGlmICghdXNlcklkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc3BhY2UgPSBzZWxlY3Rvci5zcGFjZTtcbiAgICAgIGlmICghc3BhY2UpIHtcbiAgICAgICAgaWYgKChzZWxlY3RvciAhPSBudWxsID8gKHJlZiA9IHNlbGVjdG9yLiRhbmQpICE9IG51bGwgPyByZWYubGVuZ3RoIDogdm9pZCAwIDogdm9pZCAwKSA+IDApIHtcbiAgICAgICAgICBzcGFjZSA9IHNlbGVjdG9yLiRhbmQuZ2V0UHJvcGVydHkoJ3NwYWNlJylbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3BhY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZV91c2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG4gICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgc3BhY2U6IHNwYWNlXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIF9pZDogMVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghc3BhY2VfdXNlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICB9LFxuICAgIHBhZ2luZ1R5cGU6IFwibnVtYmVyc1wiXG4gIH07XG4gIGlmIChmbG93SWQpIHtcbiAgICBrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgZmxvd0lkO1xuICAgIG9wdGlvbnMubmFtZSA9IGtleTtcbiAgICBUYWJ1bGFyVGFibGVzLmluc3RhbmNlX3Rhc2tzLmZpZWxkcyA9IGZpZWxkcztcbiAgICBpbnNfZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMoVGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcy5maWVsZHMpO1xuICAgIGluc19maWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICBpZiAoZi50eXBlICE9PSAndGFibGUnICYmIGYuaXNfbGlzdF9kaXNwbGF5KSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgZGF0YTogZi5uYW1lIHx8IGYuY29kZSxcbiAgICAgICAgICB0aXRsZTogdChmLm5hbWUgfHwgZi5jb2RlKSxcbiAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSwgdmFsdWVzO1xuICAgICAgICAgICAgdmFsdWVzID0gZG9jLnZhbHVlcyB8fCB7fTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2YuY29kZV07XG4gICAgICAgICAgICBzd2l0Y2ggKGYudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5uYW1lIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZnVsbG5hbWUgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ29kYXRhJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXy5wbHVjayh2YWx1ZSwgJ0BsYWJlbCcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWydAbGFiZWwnXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbk1ldGVvci5zdGFydHVwKGZ1bmN0aW9uKCkge1xuICBUYWJ1bGFyVGFibGVzLmluc3RhbmNlcyA9IG5ldyBUYWJ1bGFyLlRhYmxlKGluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIoKSk7XG4gIFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VfdGFza3MgPSBuZXcgVGFidWxhci5UYWJsZShpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcigpKTtcbiAgVGFidWxhclRhYmxlcy5pbmJveF9pbnN0YW5jZXMgPSBuZXcgVGFidWxhci5UYWJsZShHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhcImluYm94XCIpKTtcbiAgcmV0dXJuIFRhYnVsYXJUYWJsZXMub3V0Ym94X2luc3RhbmNlcyA9IG5ldyBUYWJ1bGFyLlRhYmxlKEdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zKFwib3V0Ym94XCIpKTtcbn0pO1xuXG5HZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyA9IGZ1bmN0aW9uKGJveCwgZmxvd0lkLCBmaWVsZHMpIHtcbiAgdmFyIGtleSwgb3B0aW9ucztcbiAga2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGJveCArIGZsb3dJZDtcbiAgaWYgKGJveCA9PT0gXCJpbmJveFwiKSB7XG4gICAgb3B0aW9ucyA9IF9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyhmbG93SWQsIGZpZWxkcyk7XG4gIH0gZWxzZSBpZiAoYm94ID09PSBcIm91dGJveFwiKSB7XG4gICAgb3B0aW9ucyA9IF9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMoZmxvd0lkLCBmaWVsZHMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBpbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyKGZsb3dJZCwgZmllbGRzKTtcbiAgICBpZiAoIWZsb3dJZCkge1xuICAgICAgb3B0aW9ucy5uYW1lID0gXCJpbmJveF9pbnN0YW5jZXNcIjtcbiAgICB9XG4gIH1cbiAgaWYgKGZsb3dJZCkge1xuICAgIG9wdGlvbnMubmFtZSA9IGtleTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbl9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyA9IGZ1bmN0aW9uKGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBvcHRpb25zO1xuICBvcHRpb25zID0gaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpO1xuICBpZiAoIWZsb3dJZCkge1xuICAgIG9wdGlvbnMubmFtZSA9IFwiaW5ib3hfaW5zdGFuY2VzXCI7XG4gIH1cbiAgb3B0aW9ucy5vcmRlciA9IFtbOCwgXCJkZXNjXCJdXTtcbiAgb3B0aW9ucy5nZXRTb3J0ID0gZnVuY3Rpb24oc2VsZWN0b3IsIHNvcnQpIHtcbiAgICBjb25zb2xlLmxvZygnaW5ib3hfaW5zdGFuY2VzOicsIHNvcnQpO1xuICAgIHJldHVybiBzb3J0O1xuICB9O1xuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbl9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMgPSBmdW5jdGlvbihmbG93SWQsIGZpZWxkcykge1xuICB2YXIgb3B0aW9ucztcbiAgb3B0aW9ucyA9IGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyKGZsb3dJZCwgZmllbGRzKTtcbiAgaWYgKCFmbG93SWQpIHtcbiAgICBvcHRpb25zLm5hbWUgPSBcIm91dGJveF9pbnN0YW5jZXNcIjtcbiAgfVxuICBvcHRpb25zLm9yZGVyID0gW1s5LCAtMV1dO1xuICBvcHRpb25zLmdldFNvcnQgPSBmdW5jdGlvbihzZWxlY3Rvciwgc29ydCkge1xuICAgIGNvbnNvbGUubG9nKCdvdXRib3hfaW5zdGFuY2VzOicsIHNvcnQpO1xuICAgIHJldHVybiBzb3J0O1xuICB9O1xuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgVGFidWxhclRhYmxlcy5mbG93SW5zdGFuY2VzID0gbmV3IFJlYWN0aXZlVmFyKCk7XG59XG5cbk1ldGVvci5zdGFydHVwKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gVHJhY2tlci5hdXRvcnVuKGZ1bmN0aW9uKGMpIHtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50ICYmICFTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgIGlmIChTZXNzaW9uLmdldChcImZsb3dJZFwiKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSAhPT0gJ2RyYWZ0Jykge1xuICAgICAgICByZXR1cm4gTWV0ZW9yLmNhbGwoXCJuZXdJbnN0YW5jZXNMaXN0VGFidWxhclwiLCBTZXNzaW9uLmdldChcImJveFwiKSwgU2Vzc2lvbi5nZXQoXCJmbG93SWRcIiksIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHtcbiAgICAgICAgICBuZXdJbnN0YW5jZXNMaXN0VGFidWxhcihTZXNzaW9uLmdldChcImJveFwiKSwgU2Vzc2lvbi5nZXQoXCJmbG93SWRcIiksIHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX2NoYW5nZU9yZGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcblxubmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIgPSBmdW5jdGlvbihib3gsIGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBmbG93LCBrZXksIHJlZiwgcmVmMSwgcmVmMjtcbiAgaWYgKCFmaWVsZHMpIHtcbiAgICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgICBfaWQ6IGZsb3dJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBmb3JtOiAxXG4gICAgICB9XG4gICAgfSk7XG4gICAgZmllbGRzID0gKHJlZiA9IGRiLmZvcm1zLmZpbmRPbmUoe1xuICAgICAgX2lkOiBmbG93ICE9IG51bGwgPyBmbG93LmZvcm0gOiB2b2lkIDBcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgJ2N1cnJlbnQuZmllbGRzJzogMVxuICAgICAgfVxuICAgIH0pKSAhPSBudWxsID8gKHJlZjEgPSByZWYuY3VycmVudCkgIT0gbnVsbCA/IHJlZjEuZmllbGRzIDogdm9pZCAwIDogdm9pZCAwO1xuICB9XG4gIGZpZWxkcyA9IF9oYW5kbGVMaXN0RmllbGRzKGZpZWxkcyk7XG4gIGlmICgoZmllbGRzICE9IG51bGwgPyAocmVmMiA9IGZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcImlzX2xpc3RfZGlzcGxheVwiLCB0cnVlKSkgIT0gbnVsbCA/IHJlZjIubGVuZ3RoIDogdm9pZCAwIDogdm9pZCAwKSA+IDApIHtcbiAgICBrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgYm94ICsgZmxvd0lkO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIFRhYnVsYXJUYWJsZXMuZmxvd0luc3RhbmNlcy5zZXQobmV3IFRhYnVsYXIuVGFibGUoR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoYm94LCBmbG93SWQsIGZpZWxkcykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IFRhYnVsYXIuVGFibGUoR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoYm94LCBmbG93SWQsIGZpZWxkcykpO1xuICAgIH1cbiAgICByZXR1cm4gY29uc29sZS5sb2coXCJuZXcgVGFidWxhclRhYmxlcyBcIiwga2V5KTtcbiAgfVxufTtcblxuaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICBNZXRlb3IubWV0aG9kcyh7XG4gICAgbmV3SW5zdGFuY2VzTGlzdFRhYnVsYXI6IGZ1bmN0aW9uKGJveCwgZmxvd0lkKSB7XG4gICAgICB2YXIgZmllbGRzLCBmbG93LCByZWYsIHJlZjE7XG4gICAgICBuZXdJbnN0YW5jZXNMaXN0VGFidWxhcihib3gsIGZsb3dJZCk7XG4gICAgICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgICAgIF9pZDogZmxvd0lkXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIGZvcm06IDFcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmaWVsZHMgPSAocmVmID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgICAgIF9pZDogZmxvdyAhPSBudWxsID8gZmxvdy5mb3JtIDogdm9pZCAwXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICdjdXJyZW50LmZpZWxkcyc6IDFcbiAgICAgICAgfVxuICAgICAgfSkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5jdXJyZW50KSAhPSBudWxsID8gcmVmMS5maWVsZHMgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cbiAgfSk7XG59XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9jaGVja05wbS5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9saWIvVVJJLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9jb3JlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvbGliL2NvcmUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9tb2RlbHMvaW5zdGFuY2VfdGFza3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9tb2RlbHMvYXV0aF90b2tlbnMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC9saWIvaW5zdGFuY2VfcmVhZG9ubHlfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvbGliL2luc3RhbmNlX3JlYWRvbmx5X3RlbXBsYXRlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvbGliL3RlbXBsYXRlX21hbmFnZXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvbGliL3RlbXBsYXRlX21hbmFnZXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L2NsaWVudC9jb3JlZm9ybS9pbnB1dFR5cGVzL2NvcmVmb3JtLXRhYmxlL3N0ZWVkb3MtdGFibGUuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbWFnZV9zaWduLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbWFnZV9zaWduLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3RyYWNlc19oYW5kbGVyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL190cmFjZXNfaGFuZGxlci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9mb3JtLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9mb3JtLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX2luc3RhbmNlX2F0dGFjaG1lbnRzLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC92aWV3cy9pbnN0YW5jZS9faW5zdGFuY2Vfc2lnbl90ZXh0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9zaWduX3RleHQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC92aWV3cy9pbnN0YW5jZS9fdHJhY2VzX2hlbHAuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3RyYWNlc19oZWxwLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3JlbGF0ZWRfaW5zdGFuY2VzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19yZWxhdGVkX2luc3RhbmNlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19yZWxhdGVkX3JlY29yZHMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3JlbGF0ZWRfcmVjb3Jkcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvcm91dGVzL2dldFNwYWNlVXNlcnMuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvcm91dGVzL2dldEZvcm11bGFVc2VyT2JqZWN0cy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9yb3V0ZXMvaW5pdF9mb3JtdWxhX3ZhbHVlcy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9yb3V0ZXMvYXBpX3dvcmtmbG93X2ZvcndhcmQuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvcm91dGVzL3Rlc3Rfd2ViaG9vay5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3JvdXRlcy90ZXN0X3dlYmhvb2suY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL3NldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL2dldF9pbnN0YW5jZV9kYXRhLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL3NhdmVfaW5zdGFuY2UuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvc2VydmVyL21ldGhvZHMvdHJhY2VfYXBwcm92ZV9jYy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9mb3J3YXJkX2luc3RhbmNlLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL2Nmc19pbnN0YW5jZXMuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvaW5zdGFuY2VfYXBwcm92ZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvaW5zdGFuY2VfcmV0dXJuLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV9yZW1pbmQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL25leHRfc3RlcF91c2Vyc19ub3RfZm91bmQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL2luc3RhbmNlX251bWJlcl9ydWxlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvY2hlY2tfbWFpbl9hdHRhY2guY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL3JlbGF0ZWRfaW5zdGFuY2VzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9lZGl0X2Zsb3dfcG9zaXRpb25zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9zdGFydF9mbG93LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV90cmFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL2luc3RhbmNlX2JhdGNoLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9mbG93LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9oaWRlX2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV92YWx1ZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3JvdXRlcy9pbnN0YW5jZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9yb3V0ZXMvaW5zdGFuY2UuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9yb3V0ZXMvc3RlZWRvc19jc3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcm91dGVzL3N0ZWVkb3NfY3NzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcm91dGVzL2luc3RhbmNlX2RyYWZ0X3ZpZXcuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcm91dGVzL2luc3RhbmNlX2RyYWZ0X3ZpZXcuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9saWIvMV9mb3JtX2Zvcm11bGEuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9jYXRlZ29yaWVzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9jYXRlZ29yaWVzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Nmc19pbnN0YW5jZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Nmc19pbnN0YW5jZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19wb3NpdGlvbnMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zX3RhYnVsYXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zX3RhYnVsYXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19yb2xlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19yb2xlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9mbG93cy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZm9ybXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zvcm1zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RhdGEuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RhdGEuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvaW5zdGFuY2VfbGlzdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvaW5zdGFuY2VfbGlzdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV90YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV90YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RyYWZ0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV9kcmFmdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9kaXN0cmlidXRlZF9pbnN0YW5jZXNfc3RhdGVfYnlfaWRzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9kaXN0cmlidXRlZF9pbnN0YW5jZXNfc3RhdGVfYnlfaWRzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL3JlbGF0ZWRfaW5zdGFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL3JlbGF0ZWRfaW5zdGFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvc3BhY2VfdXNlcl9zaWducy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvc3BhY2VfdXNlcl9zaWducy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy91c2VyX2luYm94X2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy91c2VyX2luYm94X2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfbWFpbl9hdHRhY2hfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfbWFpbl9hdHRhY2hfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9mbG93LXRlbXBsYXRlL3dvcmtmbG93X3RlbXBsYXRlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL2Zsb3ctdGVtcGxhdGUvd29ya2Zsb3dfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9zY2hlZHVsZS9hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24uY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvc2NoZWR1bGUvYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvc2NoZWR1bGUvdGltZW91dF9hdXRvX3N1Ym1pdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9zY2hlZHVsZS90aW1lb3V0X2F1dG9fc3VibWl0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9yZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvdGFidWxhci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3RhYnVsYXIuY29mZmVlIl0sIm5hbWVzIjpbImNoZWNrTnBtVmVyc2lvbnMiLCJtb2R1bGUiLCJsaW5rIiwidiIsInJvb3QiLCJmYWN0b3J5IiwiZGVmaW5lIiwiYW1kIiwiVVJJIiwicHVueWNvZGUiLCJJUHY2IiwiU2Vjb25kTGV2ZWxEb21haW5zIiwiU0xEIiwiX1VSSSIsInVybCIsImJhc2UiLCJfdXJsU3VwcGxpZWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJfYmFzZVN1cHBsaWVkIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwibG9jYXRpb24iLCJocmVmIiwiYWJzb2x1dGVUbyIsInZlcnNpb24iLCJwIiwicHJvdG90eXBlIiwiaGFzT3duIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJlc2NhcGVSZWdFeCIsInN0cmluZyIsInJlcGxhY2UiLCJnZXRUeXBlIiwidmFsdWUiLCJTdHJpbmciLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImlzQXJyYXkiLCJvYmoiLCJmaWx0ZXJBcnJheVZhbHVlcyIsImRhdGEiLCJsb29rdXAiLCJpIiwiX21hdGNoIiwidGVzdCIsInNwbGljZSIsImFycmF5Q29udGFpbnMiLCJsaXN0IiwiX3R5cGUiLCJtYXRjaCIsImFycmF5c0VxdWFsIiwib25lIiwidHdvIiwic29ydCIsImwiLCJ0cmltU2xhc2hlcyIsInRleHQiLCJ0cmltX2V4cHJlc3Npb24iLCJfcGFydHMiLCJwcm90b2NvbCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJob3N0bmFtZSIsInVybiIsInBvcnQiLCJwYXRoIiwicXVlcnkiLCJmcmFnbWVudCIsImR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyIsImVzY2FwZVF1ZXJ5U3BhY2UiLCJwcm90b2NvbF9leHByZXNzaW9uIiwiaWRuX2V4cHJlc3Npb24iLCJwdW55Y29kZV9leHByZXNzaW9uIiwiaXA0X2V4cHJlc3Npb24iLCJpcDZfZXhwcmVzc2lvbiIsImZpbmRfdXJpX2V4cHJlc3Npb24iLCJmaW5kVXJpIiwic3RhcnQiLCJlbmQiLCJ0cmltIiwiZGVmYXVsdFBvcnRzIiwiaHR0cCIsImh0dHBzIiwiZnRwIiwiZ29waGVyIiwid3MiLCJ3c3MiLCJpbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMiLCJkb21BdHRyaWJ1dGVzIiwiZ2V0RG9tQXR0cmlidXRlIiwibm9kZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJ0eXBlIiwiZXNjYXBlRm9yRHVtYkZpcmVmb3gzNiIsImVzY2FwZSIsInN0cmljdEVuY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSUNvbXBvbmVudCIsImVuY29kZSIsImRlY29kZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImlzbzg4NTkiLCJ1bmVzY2FwZSIsInVuaWNvZGUiLCJjaGFyYWN0ZXJzIiwicGF0aG5hbWUiLCJleHByZXNzaW9uIiwibWFwIiwicmVzZXJ2ZWQiLCJ1cm5wYXRoIiwiZW5jb2RlUXVlcnkiLCJlc2NhcGVkIiwiZGVjb2RlUXVlcnkiLCJlIiwiX3BhcnQiLCJnZW5lcmF0ZUFjY2Vzc29yIiwiX2dyb3VwIiwiYyIsImdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uIiwiX3NlcCIsIl9jb2RpbmdGdW5jTmFtZSIsIl9pbm5lckNvZGluZ0Z1bmNOYW1lIiwiYWN0dWFsQ29kaW5nRnVuYyIsInNlZ21lbnRzIiwic3BsaXQiLCJqb2luIiwiZGVjb2RlUGF0aCIsImRlY29kZVVyblBhdGgiLCJyZWNvZGVQYXRoIiwicmVjb2RlVXJuUGF0aCIsImVuY29kZVJlc2VydmVkIiwicGFyc2UiLCJwYXJ0cyIsInBvcyIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJwYXJzZUF1dGhvcml0eSIsInBhcnNlSG9zdCIsImJyYWNrZXRQb3MiLCJ0IiwiY2hhckF0IiwiZmlyc3RDb2xvbiIsImZpcnN0U2xhc2giLCJuZXh0Q29sb24iLCJwYXJzZVVzZXJpbmZvIiwibGFzdEluZGV4T2YiLCJzaGlmdCIsInBhcnNlUXVlcnkiLCJpdGVtcyIsInNwbGl0cyIsIm5hbWUiLCJwdXNoIiwiYnVpbGQiLCJidWlsZEF1dGhvcml0eSIsImJ1aWxkSG9zdCIsImJ1aWxkVXNlcmluZm8iLCJidWlsZFF1ZXJ5IiwidW5pcXVlIiwia2V5IiwiYnVpbGRRdWVyeVBhcmFtZXRlciIsImFkZFF1ZXJ5IiwiY29uY2F0IiwicmVtb3ZlUXVlcnkiLCJoYXNRdWVyeSIsIndpdGhpbkFycmF5IiwiX2Jvb2x5IiwiQm9vbGVhbiIsIm9wIiwiY29tbW9uUGF0aCIsIk1hdGgiLCJtaW4iLCJ3aXRoaW5TdHJpbmciLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJfc3RhcnQiLCJfZW5kIiwiX3RyaW0iLCJfYXR0cmlidXRlT3BlbiIsImxhc3RJbmRleCIsImV4ZWMiLCJpbmRleCIsImlnbm9yZUh0bWwiLCJhdHRyaWJ1dGVPcGVuIiwibWF4Iiwic2VhcmNoIiwiaWdub3JlIiwicmVzdWx0IiwiZW5zdXJlVmFsaWRIb3N0bmFtZSIsInRvQVNDSUkiLCJub0NvbmZsaWN0IiwicmVtb3ZlQWxsIiwidW5jb25mbGljdGVkIiwiVVJJVGVtcGxhdGUiLCJkZWZlckJ1aWxkIiwiX2RlZmVycmVkX2J1aWxkIiwiX3N0cmluZyIsImNsb25lIiwidmFsdWVPZiIsImdlbmVyYXRlU2ltcGxlQWNjZXNzb3IiLCJnZW5lcmF0ZVByZWZpeEFjY2Vzc29yIiwiX2tleSIsImhhc2giLCJyZXMiLCJfb2JqZWN0IiwiYXR0cmlidXRlIiwic3JjIiwiaXMiLCJ3aGF0IiwiaXAiLCJpcDQiLCJpcDYiLCJzbGQiLCJpZG4iLCJyZWxhdGl2ZSIsImhhcyIsIl9wcm90b2NvbCIsIl9wb3J0IiwiX2hvc3RuYW1lIiwic2NoZW1lIiwieCIsIm9yaWdpbiIsImF1dGhvcml0eSIsImhvc3QiLCJ1c2VyaW5mbyIsInJlc291cmNlIiwic3ViZG9tYWluIiwiZG9tYWluIiwic3ViIiwiUmVnRXhwIiwidGxkIiwiZ2V0IiwiUmVmZXJlbmNlRXJyb3IiLCJkaXJlY3RvcnkiLCJmaWxlbmFtZSIsImRlY29kZVBhdGhTZWdtZW50IiwibXV0YXRlZERpcmVjdG9yeSIsIm5vcm1hbGl6ZVBhdGgiLCJzdWZmaXgiLCJzIiwic2VnbWVudCIsInNlcGFyYXRvciIsImFic29sdXRlIiwiRXJyb3IiLCJwb3AiLCJ1bnNoaWZ0Iiwic2VnbWVudENvZGVkIiwicSIsInNldFF1ZXJ5Iiwic2V0U2VhcmNoIiwiYWRkU2VhcmNoIiwicmVtb3ZlU2VhcmNoIiwiaGFzU2VhcmNoIiwibm9ybWFsaXplIiwibm9ybWFsaXplUHJvdG9jb2wiLCJub3JtYWxpemVRdWVyeSIsIm5vcm1hbGl6ZUZyYWdtZW50Iiwibm9ybWFsaXplSG9zdG5hbWUiLCJub3JtYWxpemVQb3J0IiwiYmVzdCIsIl9wYXRoIiwiX3dhc19yZWxhdGl2ZSIsIl9sZWFkaW5nUGFyZW50cyIsIl9wYXJlbnQiLCJfcG9zIiwibm9ybWFsaXplUGF0aG5hbWUiLCJub3JtYWxpemVTZWFyY2giLCJub3JtYWxpemVIYXNoIiwiZCIsInJlYWRhYmxlIiwidXJpIiwidG9Vbmljb2RlIiwicXAiLCJrdiIsInJlc29sdmVkIiwicHJvcGVydGllcyIsImJhc2VkaXIiLCJyZWxhdGl2ZVRvIiwicmVsYXRpdmVQYXJ0cyIsImJhc2VQYXJ0cyIsImNvbW1vbiIsInJlbGF0aXZlUGF0aCIsImJhc2VQYXRoIiwicGFyZW50cyIsImVxdWFscyIsIm9uZV9tYXAiLCJ0d29fbWFwIiwiY2hlY2tlZCIsIm9uZV9xdWVyeSIsInR3b19xdWVyeSIsIldvcmtmbG93IiwiSW1hZ2VTaWduIiwiVHJhY2VzSGFuZGxlciIsIlRyYWNlc1RlbXBsYXRlIiwiSW5zdGFuY2Vmb3JtVGVtcGxhdGUiLCJJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZSIsIkluc3RhbmNlU2lnblRleHQiLCJSZWxhdGVkSW5zdGFuY2VzIiwiUmVsYXRlZFJlY29yZHMiLCJJbnN0YW5jZU1hY3JvIiwiY29udGV4dCIsIlRyYWNlc01hbmFnZXIiLCJpc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyIsImZpZWxkX2Zvcm11bGEiLCJpbmNsdWRlc09waW5pb25GaWVsZCIsImZvcm0iLCJmb3JtX3ZlcnNpb24iLCJfZm9ybV92ZXJzaW9uIiwiZmllbGRfZm9ybXVsYXMiLCJmaWVsZHMiLCJBcnJheSIsIk1ldGVvciIsImlzU2VydmVyIiwidXVmbG93TWFuYWdlciIsImdldEZvcm1WZXJzaW9uIiwiZGIiLCJmb3JtcyIsImZpbmRPbmUiLCJfaWQiLCJmb3JtX3ZlcnNpb25zIiwiZm9yRWFjaCIsImYiLCJyZWYiLCJjb25zb2xlIiwibG9nIiwiZjEiLCJmb3JtdWxhIiwiXyIsInNvbWUiLCJoZWxwZXJzIiwiaW5zdGFuY2VfdGFza3MiLCJDb2xsZWN0aW9uIiwiX3NpbXBsZVNjaGVtYSIsIlNpbXBsZVNjaGVtYSIsImluc3RhbmNlIiwidHJhY2UiLCJpc19maW5pc2hlZCIsInVzZXIiLCJ1c2VyX25hbWUiLCJoYW5kbGVyIiwiaGFuZGxlcl9uYW1lIiwiaGFuZGxlcl9vcmdhbml6YXRpb24iLCJoYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lIiwiaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWUiLCJzdGFydF9kYXRlIiwiRGF0ZSIsImR1ZV9kYXRlIiwiaXNfcmVhZCIsImlzX2Vycm9yIiwidmFsdWVzIiwiZGVhZGxpbmUiLCJyZW1pbmRfZGF0ZSIsInJlbWluZGVkX2NvdW50IiwiTnVtYmVyIiwicmVhZF9kYXRlIiwiZGVzY3JpcHRpb24iLCJtb2RpZmllZCIsIm1vZGlmaWVkX2J5Iiwic2lnbl9zaG93IiwianVkZ2UiLCJuZXh0X3N0ZXBzIiwiZmluaXNoX2RhdGUiLCJjb3N0X3RpbWUiLCJzcGFjZSIsImluc3RhbmNlX25hbWUiLCJzdWJtaXR0ZXIiLCJzdWJtaXR0ZXJfbmFtZSIsImFwcGxpY2FudCIsImFwcGxpY2FudF9uYW1lIiwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lIiwic3VibWl0X2RhdGUiLCJmbG93IiwiZmxvd19uYW1lIiwic3RlcCIsInN0ZXBfbmFtZSIsImNhdGVnb3J5X25hbWUiLCJpbnN0YW5jZV9zdGF0ZSIsImRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSIsImZvcndhcmRfZnJvbV9pbnN0YW5jZSIsImtleXdvcmRzIiwiaXNfYXJjaGl2ZWQiLCJjYXRlZ29yeSIsImF1dGhfdG9rZW5zIiwiX2dldExvY2FsZSIsIl9nZXRSZXF1aXJlZEZpZWxkcyIsIl9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyIsIl9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcyIsIl9nZXRUZW1wbGF0ZURhdGEiLCJfZ2V0Vmlld0h0bWwiLCJnZXRMaW5rVGV4dCIsIm1hcmtlZCIsInJlcXVpcmUiLCJJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUiLCJpbnN0YW5jZV9hdHRhY2htZW50IiwiYWZTZWxlY3RVc2VyUmVhZCIsImFmRm9ybUdyb3VwUmVhZCIsImFmRm9ybUdyb3VwIiwiY3JlYXRlIiwidGVtcGFsdGVOYW1lIiwic3RlZWRvc0RhdGEiLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlQ29tcGlsZWQiLCJ0ZW1wbGF0ZVJlbmRlckZ1bmN0aW9uIiwiU3BhY2ViYXJzQ29tcGlsZXIiLCJjb21waWxlIiwiaXNCb2R5IiwiZXZhbCIsIlRlbXBsYXRlIiwiQmxhemUiLCJjcmVhdGVJbnN0YW5jZVNpZ25UZXh0IiwiaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkIiwiaW5zdGFuY2VTaWduVGV4dEh0bWwiLCJpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZVNpZ25UZXh0IiwiY3JlYXRlSW1hZ2VTaWduIiwiaW1hZ2VTaWduQ29tcGlsZWQiLCJpbWFnZVNpZ25IdG1sIiwiaW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24iLCJpbWFnZVNpZ24iLCJjcmVhdGVUcmFjZXNIYW5sZGVyIiwidHJhY2VzSGFubGRlckNvbXBpbGVkIiwidHJhY2VzSGFubGRlckh0bWwiLCJ0cmFjZXNIYW5sZGVyUmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZV90cmFjZXNfaGFuZGxlciIsImluaXQiLCJpdGVtIiwibGFiZWwiLCJkZXRhaWxfdXJsIiwiU3RlZWRvcyIsImFic29sdXRlVXJsIiwiZ2V0VmFsdWUiLCJmaWVsZCIsImxvY2FsZSIsInV0Y09mZnNldCIsImRhdGUiLCJmaWVsZE9wdGlvbnMiLCJob3VycyIsIm1vbnRoIiwibmFtZUZpZWxkIiwicmVjb3JkcyIsInNlY29uZHMiLCJzZWxlY3RlZE9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInNwbGl0ZWRWYWx1ZXMiLCJ0MCIsInQxIiwidWlTY2hlbWEiLCJ5ZWFyIiwibiIsIml0ZW1TcGxpdHMiLCJlbmNvZGVVUkkiLCJlcnJvciIsImlzX211bHRpc2VsZWN0IiwiZ2V0UHJvcGVydHkiLCJmdWxsbmFtZSIsIlRBUGkxOG4iLCJfXyIsImZvcm1hdERhdGUiLCJpc190ZXh0YXJlYSIsIk5wbSIsIlNwYWNlYmFycyIsIlNhZmVTdHJpbmciLCJmaW5kIiwiZmlsdGVyIiwiaXNfcGVyY2VudCIsIm51bWJlclRvUGVyY2VudFN0cmluZyIsImRpZ2l0cyIsIm51bWJlclRvU3RyaW5nIiwiaXNDbGllbnQiLCJhdXRoUmVxdWVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhc3luYyIsIm9iamVjdEZpbmQiLCJmaWx0ZXJzIiwiZmlsZU5hbWUiLCJmaWxlUHJldmlld0h0bWwiLCJmaWxlVXJsIiwib3JpZ2luYWwiLCJDcmVhdG9yIiwiZ2V0T2JqZWN0IiwicmVmZXJlbmNlX3RvIiwiTkFNRV9GSUVMRF9LRVkiLCJyZWZlcmVuY2VfdG9fZmllbGQiLCJnZXRPYmplY3ROYW1lRmllbGRLZXkiLCJnZXRMYWJlbCIsImNvZGUiLCJmaW5kUHJvcGVydHlCeVBLIiwiZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbiIsImZvcm1fZmllbGRzIiwiY3VycmVudCIsIndoZXJlIiwiaGlzdG9yeXMiLCJnZXRGbG93VmVyc2lvbiIsImZsb3dfdmVyc2lvbiIsImZsb3dzIiwidmlld0h0bWwiLCJBc3NldHMiLCJnZXRUZXh0IiwicmVmMSIsInRvTG9jYWxlTG93ZXJDYXNlIiwicmV2IiwiaXNfcmVxdWlyZWQiLCJzdGVwcyIsImVkaXRhYmxlQ29kZSIsInN0YXJ0U3RlcCIsImtleXMiLCJwZXJtaXNzaW9ucyIsInJlcXVpcmVkRmllbGRzIiwiaW50ZXJzZWN0aW9uIiwiV29ya2Zsb3dNYW5hZ2VyIiwiV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdCIsImdldEF1dG9mb3JtU2NoZW1hVmFsdWVzIiwiaW5zbmFtZSIsImluc19zdGF0ZSIsInN0YXRlIiwiaW5zX2ZpbmFsX2RlY2lzaW9uIiwiaW5zX2NvZGUiLCJpbnNfaXNfYXJjaGl2ZWQiLCJpbnNfaXNfZGVsZXRlZCIsImFwcGxpY2FudENvbnRleHQiLCJzZXNzaW9uVXNlcklkIiwiZWRpdGFibGUiLCJzdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyIsInBhc3NpbmciLCJtb21lbnQiLCJmb3JtYXQiLCJnZXRJbnN0YW5jZVZpZXciLCJib2R5IiwiaW5zdGFuY2VDb21waWxlZCIsImluc3RhbmNlUmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZVRlbXBsYXRlIiwiVGVtcGxhdGVNYW5hZ2VyIiwiZ2V0VGVtcGxhdGUiLCJ0ZW1wbGF0ZU5hbWUiLCJpbnN0YW5jZV9yZWFkb25seV92aWV3IiwidG9IVE1MV2l0aERhdGEiLCJnZXRUcmFjZXNWaWV3IiwidHJhY2VDb21waWxlZCIsInRyYWNlUmVuZGVyRnVuY3Rpb24iLCJ0cmFjZXNIdG1sIiwiaW5zdGFuY2Vfc3R5bGUiLCJ0cmFjZV9yZWFkb25seV92aWV3IiwidHJhY2VzIiwiZ2V0QXR0YWNobWVudFZpZXciLCJhdHRhY2htZW50Q29tcGlsZWQiLCJhdHRhY2htZW50SHRtbCIsImF0dGFjaG1lbnRSZW5kZXJGdW5jdGlvbiIsImF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXciLCJnZXRSZWxhdGVkSW5zdGFuY2VzVmlldyIsInJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCIsInJlbGF0ZWRJbnN0YW5jZXNIdG1sIiwicmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uIiwicmVsYXRlZF9pbnN0YW5jZXNfdmlldyIsImdldFJlbGF0ZWRSZWNvcmRzVmlldyIsInJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQiLCJyZWxhdGVkUmVjb3Jkc0h0bWwiLCJyZWxhdGVkUmVjb3Jkc1JlbmRlckZ1bmN0aW9uIiwicmVsYXRlZF9yZWNvcmRzX3ZpZXciLCJnZXRPbkxvYWRTY3JpcHQiLCJmb3JtX3NjcmlwdCIsImdldEluc3RhbmNlSHRtbCIsImFsbENzc0xpbmsiLCJhdHRhY2htZW50IiwiY3JlYXRvclNlcnZpY2UiLCJjc3NIcmVmIiwiZm9ybURlc2NyaXB0aW9uIiwiZm9ybURlc2NyaXB0aW9uSHRtbCIsImh0bWwiLCJpbnNfcmVjb3JkX2lkcyIsImluc3RhbmNlQm94U3R5bGUiLCJqcUhyZWYiLCJvbkxvYWRTY3JpcHQiLCJvcGVuRmlsZVNjcmlwdCIsInJlbGF0ZWRfaW5zdGFuY2VzIiwicmVsYXRlZF9yZWNvcmRzIiwic2hvd1RyYWNlc0J0biIsInNob3dUcmFjZXNTY3JpcHQiLCJ0cmFjZUNoZWNrIiwid2lkdGgiLCJzZXR0aW5ncyIsIndlYnNlcnZpY2VzIiwiY3JlYXRvciIsInJlY29yZF9pZHMiLCJpc01vYmlsZSIsInNob3dUcmFjZSIsImZpbmFsX2RlY2lzaW9uIiwic2hvd0F0dGFjaG1lbnRzIiwiaXNFbXB0eSIsInRhZ2dlciIsInN0eWxlcyIsInBsdWdpbnMiLCJhZGRfc3R5bGVzIiwiZm9ybUlkIiwiaW5zdGFuY2VfdGl0bGUiLCJwYWdlVGl0bGUiLCJwYWdlVGl0bGVUckNsYXNzIiwidmFsIiwiQ29yZUZvcm0iLCJwYWdlVGl0bGVGaWVsZE5hbWUiLCJoYW5kbGVUYWJsZVRlbXBsYXRlIiwiX2V4cG9ydCIsInRhYmxlX2ZpZWxkcyIsInRhYmxlX2ZpZWxkIiwiZmllbGRfcGVybWlzc2lvbiIsInB1cmVDb2RlIiwicmVxdWlyZWQiLCJ0aXRsZV9wZXJtaXNzaW9uIiwicmVtb3ZlU3BlY2lhbENoYXJhY3RlciIsImlzT3BpbmlvbkZpZWxkIiwidHJfc3RhcnQiLCJ0ZF9jb2xzcGFuIiwidHJfZW5kIiwiaW5jbHVkZXMiLCJwZXJtaXNzaW9uIiwiX3RlbXBsYXRlIiwidGFibGUiLCJfdGVtcGxhdGVIZWxwcyIsInN0ZWVkb3NfaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsImF0dHMiLCJpZCIsInN0eWxlIiwiZGlzYWJsZWQiLCJpbnN0YW5jZUlkIiwiZm9ybV90eXBlcyIsIkFwcHJvdmVNYW5hZ2VyIiwiaXNSZWFkT25seSIsInN0ZWVkb3NfZm9ybSIsImlubmVyc3ViZm9ybUNvbnRleHQiLCJkb2NfdmFsdWVzIiwiU2Vzc2lvbiIsImEiLCJiIiwiZ2V0QXV0b2Zvcm1TY2hlbWEiLCJpbnN0YW5jZV9ib3hfc3R5bGUiLCJib3giLCJpbnMiLCJwcmludF90ZW1wbGF0ZSIsImluc3RhbmNlX3RlbXBsYXRlIiwiU3RlZWRvc1RhYmxlIiwiY2hlY2tJdGVtIiwiaXRlbV9pbmRleCIsImZpZWxkT2JqIiwiZ2V0RmllbGQiLCJmaWVsZFZhbCIsImdldEl0ZW1Nb2RhbFZhbHVlIiwic2ZfbmFtZSIsInNmaWVsZHMiLCJzZiIsIkluc3RhbmNlTWFuYWdlciIsImNoZWNrRm9ybUZpZWxkVmFsdWUiLCIkIiwic2V0VGFibGVJdGVtVmFsdWUiLCJpdGVtX3ZhbHVlIiwidGFibGVWYWx1ZSIsImdldFRhYmxlVmFsdWUiLCJnZXRUYWJsZUl0ZW1WYWx1ZSIsInJlbW92ZVRhYmxlSXRlbSIsInJlbW92ZWQiLCJzZXRUYWJsZVZhbHVlIiwiZ2V0VmFsaWRWYWx1ZSIsInZhbGlkVmFsdWUiLCJoYW5kbGVEYXRhIiwiaW5zdGFuY2VGaWVsZHMiLCJnZXRJbnN0YW5jZUZpZWxkcyIsImdldE1vZGFsRGF0YSIsIkZvcm1fZm9ybXVsYSIsImdldEZvcm11bGFGaWVsZFZhcmlhYmxlIiwiQXV0b0Zvcm0iLCJnZXRGb3JtVmFsdWVzIiwiaW5zZXJ0RG9jIiwiYWRkSXRlbSIsIl9pdGVtX3ZhbHVlIiwiZ2V0S2V5cyIsImFwcGVuZCIsImdldFRyIiwidXBkYXRlSXRlbSIsInRkcyIsImdldFJlbW92ZVRkIiwic2ZpZWxkIiwiZ2V0VGQiLCJlbXB0eSIsInJ1bkZvcm11bGEiLCJyZW1vdmVJdGVtIiwiaGlkZSIsInNob3dNb2RhbCIsIm1ldGhvZCIsIm1vZGFsRGF0YSIsInNldFRpbWVvdXQiLCJNb2RhbCIsInNob3ciLCJnZXRDdXJyZW50RGF0YUZvckZvcm0iLCJzcyIsImdldEZvcm1TY2hlbWEiLCJzY2hlbWEiLCJvYmplY3RLZXlzIiwiX21ha2VHZW5lcmljIiwiZ2V0VGhlYWQiLCJpc09iamVjdCIsInRoZWFkIiwidHJzIiwic2ZfbGVuZ3RoIiwid2lkZV9maWVsZHMiLCJmaWx0ZXJQcm9wZXJ0eSIsImlzX3dpZGUiLCJnZXRUYm9keSIsInNmaWVsZHNFZGl0YWJsZSIsInRib2R5IiwidHIiLCJ0ZCIsInRkX3ZhbHVlIiwiZ2V0VERWYWx1ZSIsInZpZXciLCJDRkRhdGFNYW5hZ2VyIiwiZ2V0Rm9ybXVsYVNwYWNlVXNlcnMiLCJ1IiwiZ2V0Rm9ybXVsYU9yZ2FuaXphdGlvbnMiLCJvIiwiZ2V0Rm9ybXVsYU9yZ2FuaXphdGlvbiIsInBsdWNrIiwiYWRkSW5wdXRUeXBlIiwidmFsdWVPdXQiLCJ2YWx1ZUNvbnZlcnRlcnMiLCJzdHJpbmdUb1N0cmluZ0FycmF5Iiwic3RyaW5nVG9OdW1iZXIiLCJzdHJpbmdUb051bWJlckFycmF5Iiwic3RyaW5nVG9Cb29sZWFuIiwic3RyaW5nVG9Cb29sZWFuQXJyYXkiLCJzdHJpbmdUb0RhdGUiLCJzdHJpbmdUb0RhdGVBcnJheSIsImNvbnRleHRBZGp1c3QiLCJtYXhsZW5ndGgiLCJhZlRhYmxlIiwiZXZlbnRzIiwiZXZlbnQiLCJuZXdfaXRlbV9pbmRleCIsImN1cnJlbnRUYXJnZXQiLCJkYXRhc2V0Iiwic2V0IiwicmVuZGVyZWQiLCJzdHIiLCJhZGRJdGVtVHIiLCJnZXRDdXJyZW50U3RlcCIsInN0ZXBfdHlwZSIsImNjSGFzRWRpdFBlcm1pc3Npb24iLCJhdXRvcnVuIiwiY3VycmVudERhdGEiLCJzcGFjZVVzZXJTaWduIiwidXNlcklkIiwic3BhY2VfdXNlcl9zaWducyIsImltYWdlVVJMIiwic2lnbiIsInNob3dTaWduSW1hZ2UiLCJ0cmFjZVNob3dTaWduSW1hZ2UiLCJvYmplY3RVcmwiLCJvYmplY3RfbmFtZSIsInJlY29yZF9pZCIsImFwcF9pZCIsImdldE9iamVjdFVybCIsInVuZW1wdHkiLCJ1bmVxdWFscyIsImluY2x1ZGUiLCJyZWYyIiwicmVmMyIsImdldEluc3RhbmNlRmxvd1ZlcnNpb24iLCJhcHByb3ZlcyIsInJlZjQiLCJhcHByb3ZlIiwianVkZ2VfbmFtZSIsIm9waW5pb25fZmllbGRzX2NvZGUiLCJzaWduX2ZpZWxkX2NvZGUiLCJhZnRlcl9maWVsZCIsImJlZm9yZV9maWVsZCIsInByZV9maWVsZHMiLCJwcmVfd2lkZV9maWVsZHMiLCJzb3J0X2FwcHJvdmUiLCJvcmRlciIsInAxIiwicDIiLCJfcDEiLCJfcDIiLCJnZXRUaW1lIiwiX3QiLCJnZXRDZkNsYXNzIiwiZ2V0VGFibGVUaGVhZCIsImdldFRhYmxlQm9keSIsInNob3dMYWJlbCIsInRlbXBsYXRlRGF0YSIsImdldE9waW5pb25GaWVsZFN0ZXBzTmFtZSIsInRvcF9rZXl3b3JkcyIsImZvbzEiLCJvcGluaW9uRmllbGRzIiwiZm9vIiwianNvbl9mb3JtdWxhIiwiczEiLCJlcnJvcjEiLCJ5aWppYW5sYW4iLCJzdGVwTmFtZSIsImltYWdlX3NpZ24iLCJvbmx5X2NjX29waW5pb24iLCJvbmx5X2NjIiwiZGVmYXVsdF9kZXNjcmlwdGlvbiIsIm9ubHlfaGFuZGxlciIsInNob3dDQ09waW5pb24iLCJtYXJrRG93blRvSHRtbCIsIm1hcmtEb3duU3RyaW5nIiwiZl9sYWJlbCIsInRoYXQiLCJpc1NlY3Rpb24iLCJyZWdpc3RlckhlbHBlciIsImluc19hdHRhY2hfZG93bmxvYWRfdXJsIiwiZ2V0UGVybWlzc2lvbnMiLCJpbnN0YW5jZWZvcm1DaGFuZ2VFdmVudCIsInByZXZlbnREZWZhdWx0Iiwib3BlbldpbmRvdyIsInRhcmdldCIsIm9uQ3JlYXRlZCIsImNvbXBpbGVkIiwiaW5zdGFuY2VDdXN0b21UZW1wbGF0ZSIsImluc3RhbmNlVmlldyIsInJlbmRlckZ1bmN0aW9uIiwiVmlldyIsImluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZSIsIm9uUmVuZGVyZWQiLCJjdXJyZW50QXBwcm92ZSIsImN1cnJlbnRTdGVwIiwiZm9ybXVsYV9maWVsZHMiLCJpbnN0YW5jZU51bWJlckZpZWxkcyIsInNldEluc3RhbmNlRm9ybUFwcGxpY2FudCIsIm5leHRTdGVwcyIsIm5leHRTdGVwVXNlcnMiLCJJbnN0YW5jZUV2ZW50IiwiaW5pdEV2ZW50cyIsImdldEN1cnJlbnRBcHByb3ZlIiwiZWFjaCIsImVsZW1lbnQiLCJzY2hlbWFLZXkiLCJ0b2FzdHIiLCJyZWFzb24iLCJnZXRGaWVsZFZhbHVlIiwiSW5zdGFuY2VOdW1iZXJSdWxlcyIsImluc3RhbmNlTnVtYmVyQnVpbGRlciIsInRyaWdnZXIiLCJydW4iLCJzaG93TWFpblRpdGxlIiwid29ya2Zsb3dNYWluQXR0YWNoVGl0bGUiLCJlbmFibGVkX2FkZF9tYWluX2F0dGFjaG1lbnQiLCJjdXJyZW50X3N0ZXAiLCJjdXJyZW50VHJhY2UiLCJnZXRDdXJyZW50VHJhY2UiLCJtYWluX2F0dGFjaF9jb3VudCIsImNmcyIsImluc3RhbmNlcyIsImNvdW50IiwiZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCIsInN0YXJ0X3N0ZXAiLCJnZXRTdGFydFN0ZXAiLCJjYW5fZWRpdF9tYWluX2F0dGFjaCIsImVuYWJsZWRfZWRpdF9ub3JtYWxfYXR0YWNobWVudCIsImdldEZsb3ciLCJ1cGxvYWRfYWZ0ZXJfYmVpbmdfZGlzdHJpYnV0ZWQiLCJpc0NDIiwiZ2V0Q0NTdGVwIiwiY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCIsIm1haW5fYXR0YWNobWVudCIsIm1haW5fYXR0YWNoIiwibm9ybWFsX2F0dGFjaG1lbnRzIiwic2VsZWN0b3IiLCIkbmUiLCJkZmlzIiwiZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcyIsIiRpbiIsImRpc3RyaWJ1dGVfbWFpbiIsImZpcnN0VmVyc2lvbk1haW4iLCJtZXRhZGF0YSIsInBhcmVudCIsImF0dGFjaG1lbnRVcGxvYWRlZEF0IiwidXBsb2FkZWRBdCIsImZpcnN0VmVyc2lvbiIsInNvcnRCeSIsImluc3RhbmNlSWRzIiwiYXR0YWNobWVudHNfY291bnQiLCJmbG93X2ZpbGVzIiwiZmlsZXMiLCJpc0RyYWZ0QW5kRmxvd2ZpbGVzRXhpc3QiLCJjb21wYWN0IiwiYXR0YWNobWVudHMiLCIkb3IiLCJmZXRjaCIsIm15QXBwcm92ZSIsIm15VHJhY2UiLCJpc0luYm94IiwiZGVmYXVsdERlc2NyaXB0aW9uIiwiYXBwcm92ZV9zb3J0IiwiYXBwcm92ZXNHcm91cCIsImFwcHJvdmVzX3NvcnRlZCIsImNvbXBsZXRlZF9kYXRlIiwiaGFzTmV4dCIsImhhdmVEZXNjcmlwdGlvbkFwcHJvdmUiLCJpc19jb21wbGV0ZWQiLCJsYXN0IiwidG9wX2FwcHJvdmVzIiwidW5pb24iLCJ0b3BfYXBwcm92ZSIsImdyb3VwQnkiLCJoYW5kbGVyQXBwcm92ZXMiLCJkZXNjcmlwdGlvbkFwcHJvdmVzIiwid29ya2Zsb3ciLCJzaG93QmxhbmtBcHByb3ZlRGVzY3JpcHRpb24iLCJfZGlzcGxheSIsImlzTXlBcHByb3ZlIiwibXlBcHByb3ZlRGVzY3JpcHRpb24iLCJhcHByb3ZlSWQiLCJub3ciLCJpc09waW5pb25PZkZpZWxkIiwiaW1hZ2VTaWduRGF0YSIsImdldExhc3RTaWduQXBwcm92ZSIsImdldEhhbmRsZXJTaWduU2hvd0FwcHJvdmVzIiwibGFzdE15QXBwcm92ZURlc2NyaXB0aW9uIiwic2hvd0FwcHJvdmUiLCJqdWRnZV9kZXNjcmlwdGlvbiIsImlzX2FwcHJvdmVkIiwiaXNfcmVqZWN0ZWQiLCJpc19yZWFkZWQiLCJhZGRDbGFzcyIsImRhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsImdldFN0ZXBOYW1lIiwic3RlcElkIiwiZ2V0SW5zdGFuY2VTdGVwIiwic2hvd0RlbGV0ZUJ1dHRvbiIsImFwcHJvdmVkIiwiZnJvbV91c2VyIiwiaXNTaG93TW9kaWZpY2F0aW9uQnV0dG9uIiwiYXBwcm92ZV9hZG1pbnMiLCJpc1Nob3ciLCJjb250YWlucyIsImlzRWRpdGluZyIsImlzX2VkaXRpbmciLCJpc1Nob3dEZXNjcmlwdGlvbiIsImdldEFwcHJvdmVTdGF0dXNJY29uIiwiYXBwcm92ZUp1ZGdlIiwiYXV0b1N1Ym1pdHRlZCIsImFwcHJvdmVTdGF0dXNJY29uIiwiZ2V0QXBwcm92ZVN0YXR1c1RleHQiLCJhcHByb3ZlU3RhdHVzVGV4dCIsImdldEFwcHJvdmVKdWRnZUNsYXNzIiwiaXNGb3J3YXJkIiwic2hvd0ZvcndhcmREZWxldGVCdXR0b24iLCJmb3J3YXJkX2luc3RhbmNlIiwiaXNEaXN0cmlidXRlIiwic2hvd0Rpc3RyaWJ1dGVEZWxldGVCdXR0b24iLCJoYXNGbG93QWRtaW5QZXJtaXNzaW9uIiwiZmluaXNoRGF0ZVNjaGVtYSIsImlzQW5kcm9pZE9ySU9TIiwiYXV0b2Zvcm0iLCJvcHRpb25hbCIsInJlYWRvbmx5IiwiZGF0ZVRpbWVQaWNrZXJPcHRpb25zIiwiaWdub3JlUmVhZG9ubHkiLCJ3aWRnZXRQb3NpdGlvbmluZyIsImhvcml6b250YWwiLCJmaW5pc2hEYXRlVmFsdWVzIiwic2hvd1RyYWNlc1ZpZXciLCJzaG93X21vZGFsX3RyYWNlc19saXN0Iiwic3BhY2Vfc2V0dGluZ3MiLCJnZXRJbnN0YW5jZVN0YXRlVGV4dCIsImluc3RhbmNlX2lkIiwiZ2V0SW5zdGFuY2VTdGF0ZUNvbG9yIiwiY2xhIiwiZmlyc3RUcmFjZSIsImxhc3RfZGlzdHJpYnV0ZV9mcm9tIiwiZGlzX2luZm8iLCIkZXhpc3RzIiwiY3JlYXRlZCIsImNyZWF0ZWRfYnkiLCJVVWZsb3dfYXBpIiwiZ2V0TmFtZUZvclVzZXIiLCJ1c2VycyIsImZyb21fdXNlcl9uYW1lIiwiaXNDQ09yRGlzdHJpYnV0ZU9yRm9yd2FyZFRlcm1pbmF0ZWQiLCJqdWRnZVRlcm1pbmF0ZWQiLCJpbnN0YW5jZUV4aXN0cyIsImFnZW50RGVzY3JpcHRpb24iLCJ1c2VyTmFtZSIsInRyYWNlTmFtZSIsInRyYWNlSWQiLCJoYW5kbGVyRG9jIiwiaGFuZGxlcklkIiwidXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyIsImdldENvbnRhY3RJbmZvRm9yVXNlciIsInN0b3BQcm9wYWdhdGlvbiIsImNhbGxpbmciLCJlcnIiLCJyZW1vdmVDbGFzcyIsInN1Y2Nlc3MiLCJhbGxvd011bHRpcGxlIiwiY2xvc2VzdCIsInRhcmdldF91c2VyX2lkIiwib3BlblNhZmVPYmplY3RVcmwiLCJmb3J3YXJkX3NwYWNlIiwiZm9yd2FyZHNwYWNlIiwiZm9yd2FyZGluc3RhbmNlIiwiVHJhY2tlciIsImFmdGVyRmx1c2giLCJvbiIsInNjcm9sbFRvcCIsImZpbmlzaF9pbnB1dCIsIm9waW5pb25faW5wdXQiLCJzaG93UmVsYXRlZEluc3RhY2VzIiwicmVsYXRlZF9pbnN0YWNlcyIsInJlbGF0ZWRfaW5zdGFjZV91cmwiLCJpc0NvcmRvdmEiLCJzaG93X2RlbGV0ZSIsInNob3dSZWxhdGVkUmVjb3JkcyIsInJlbGF0ZWRSZWNvcmRVcmwiLCJvYmpjZXROYW1lIiwiaWRzIiwicHJvY2VzcyIsImVudiIsIkNSRUFUT1JfTk9ERV9FTlYiLCJKc29uUm91dGVzIiwiYWRkIiwicmVxIiwibmV4dCIsImhhc2hEYXRhIiwiYWN0aW9uIiwidG9fdXNlcnMiLCJzZW5kUmVzdWx0Iiwic3RhY2siLCJlcnJvcnMiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwid29ya2Zsb3dNZXRob2RzIiwibWV0aG9kcyIsInNldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmUiLCJpbnNfaWQiLCJzdGVwX2FwcHJvdmUiLCJzdGVwc0FwcHJvdmVzT3B0aW9ucyIsImFwcGx5Iiwic2V0X2luc3RhbmNlX3NraXBfc3RlcHMiLCJnZXRfaW5zdGFuY2VfZGF0YSIsImZvcm1DYWNoZWQiLCJmbG93Q2FjaGVkIiwiZHJhZnRfc2F2ZV9pbnN0YW5jZSIsImluYm94X3NhdmVfaW5zdGFuY2UiLCJjY19kbyIsImNjX3VzZXJfaWRzIiwiY2NfcmVhZCIsImNjX3N1Ym1pdCIsImNjX3JlbW92ZSIsImJhdGNoX2NhbmNlbF9jYyIsImFwcHJvdmVfaWRzIiwiY2Nfc2F2ZSIsInNwYWNlX2lkIiwiZmxvd19pZCIsImhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudCIsImlzRm9yd2FyZEF0dGFjaG1lbnRzIiwic2VsZWN0ZWRVc2VycyIsImFjdGlvbl90eXBlIiwicmVsYXRlZCIsImZyb21fYXBwcm92ZV9pZCIsImZvcndhcmRfcmVtb3ZlIiwidHJhY2VfaWQiLCJhcHByb3ZlX2lkIiwiY2FuY2VsRGlzdHJpYnV0ZSIsImNmc19pbnN0YW5jZXNfcmVtb3ZlIiwiZmlsZV9pZCIsImNmc19pbnN0YW5jZXNfc2V0X2N1cnJlbnQiLCJjZnNfaW5zdGFuY2VzX2xvY2siLCJ1c2VyX2lkIiwiY2ZzX2luc3RhbmNlc191bmxvY2siLCJkb3dubG9hZF9zcGFjZV9pbnN0YW5jZV9hdHRhY2htZW50c190b19kaXNrIiwic3BhY2VJZCIsImNmc1JlY29yZElkcyIsInNldF9hcHByb3ZlX2hhdmVfcmVhZCIsImNoYW5nZV9hcHByb3ZlX2luZm8iLCJ1cGRhdGVfYXBwcm92ZV9zaWduIiwic2lnbl90eXBlIiwibGFzdFNpZ25BcHByb3ZlIiwidXBkYXRlX3NpZ25fc2hvdyIsIm9ianMiLCJteUFwcHJvdmVfaWQiLCJpbnN0YW5jZV9yZXR1cm4iLCJpbnN0YW5jZV9yZW1pbmQiLCJyZW1pbmRfdXNlcnMiLCJyZW1pbmRfY291bnQiLCJyZW1pbmRfZGVhZGxpbmUiLCJhY3Rpb25fdHlwZXMiLCJuZXh0X3N0ZXBfdXNlcnNfbm90X2ZvdW5kIiwiZGVhbF90eXBlIiwicGFyYW1zIiwiX2V2YWwiLCJjaGVja19tYWluX2F0dGFjaCIsInJlbW92ZV9yZWxhdGVkIiwicmVfaW5zX2lkIiwidXBkYXRlX2luc3RhbmNlX3JlbGF0ZWQiLCJ1cGRhdGVGbG93UG9zaXRpb24iLCJ1cGRhdGVGbG93Um9sZSIsInN0YXJ0X2Zsb3ciLCJmbG93SWQiLCJnZXRfaW5zdGFuY2VfdHJhY2VzIiwiY2F0ZWdvcnlJZCIsImZsb3dJZHMiLCJnZXRfYmF0Y2hfaW5zdGFuY2VzIiwiZ2V0X2JhdGNoX2luc3RhbmNlc19jb3VudCIsImdldF9teV9hcHByb3ZlcyIsImNoYW5nZV9mbG93X3N0YXRlIiwiaGlkZV9pbnN0YW5jZSIsImluc0lkIiwiaXNfaGlkZGVuIiwiZ2V0SW5zdGFuY2VWYWx1ZXMiLCJDb29raWVzIiwiZ2V0SW5zdGFuY2VSZWFkT25seSIsIl9oYXNQZXJtaXNzaW9uIiwiX2xvY2FsZSIsIl9wYXJlbnRfaW5zdGFuY2VzIiwiZGF0YUJ1ZiIsImhpZGVfdHJhY2VzIiwic3BhY2VVc2VyQ291bnQiLCJnZXRBUElMb2dpblVzZXIiLCJhY2Nlc3NfdG9rZW4iLCJnZXRVc2VySWRGcm9tQWNjZXNzVG9rZW4iLCJzcGFjZXMiLCJzcGFjZV91c2VycyIsImhhc0luc3RhbmNlUGVybWlzc2lvbnMiLCJfcGFyZW50X2lkIiwiX3BhcmVudF9pbnMiLCJjaGFyc2V0IiwiQnVmZmVyIiwic2V0SGVhZGVyIiwic3RhdHVzQ29kZSIsInJldF9zeW5jX3Rva2VuIiwic3BhY2VVc2VyIiwic3BhY2VVc2VyT3JnYW5pemF0aW9ucyIsInN5bmNfdG9rZW4iLCJBUElBdXRoZW50aWNhdGlvbkNoZWNrIiwiaGVhZGVycyIsImlzU3BhY2VBZG1pbiIsIm9yZ2FuaXphdGlvbnMiLCJjYW5Nb25pdG9yIiwiY2FuQWRtaW4iLCIkZ3QiLCIkbmluIiwiaW5ib3hfdWVycyIsImNjX3VzZXJzIiwib3V0Ym94X3VzZXJzIiwic2tpcCIsImxpbWl0IiwiY29waWVzIiwiYWxsQ3NzIiwiV2ViQXBwIiwiZ2V0UmVmcmVzaGFibGVBc3NldHMiLCJjc3MiLCJyb290VXJsIiwiX19tZXRlb3JfcnVudGltZV9jb25maWdfXyIsIlJPT1RfVVJMX1BBVEhfUFJFRklYIiwiUk9PVF9VUkwiLCJlbmRzV2l0aCIsImgiLCJnIiwibSIsImsiLCJnZXRFYWNoIiwidW5pcSIsIm1peGluIiwiZGVzdCIsImhhbmRlclVzZXJPYmplY3QiLCJvcmdhbml6YXRpb24iLCJociIsInNvcnRfbm8iLCJtb2JpbGUiLCJ3b3JrX3Bob25lIiwicG9zaXRpb24iLCJ1c2VyUm9sZXMiLCJyb2xlcyIsImhhbmRlck9yZ09iamVjdCIsIm9yZyIsImluaXRfZm9ybXVsYV92YWx1ZXMiLCJhdXRvRm9ybURvYyIsImFwcHJvdmVyIiwiX192YWx1ZXMiLCJ0YWJsZUZpZWxkcyIsInRhYmxlVmFsdWVzIiwiZm9ybXVsYVRhYmxlVmFsdWVzIiwiX190YWJsZVZhbHVlcyIsInRhYmxlZmllbGQiLCJnZXRGb3JtdWxhVXNlck9iamVjdHMiLCJnZXRGb3JtdWxhT3JnT2JqZWN0cyIsImdldEZvcm11bGFVc2VyT2JqZWN0IiwicHVibGlzaCIsImNoZWNrIiwicmVhZHkiLCJjYXRlZ29yaWVzIiwiYXBwIiwiZmxvd19wb3NpdGlvbnMiLCJyb2xlIiwicHVibGlzaENvbXBvc2l0ZSIsInRhYmxlTmFtZSIsIk1hdGNoIiwiT3B0aW9uYWwiLCJ1bmJsb2NrIiwiY2hpbGRyZW4iLCJmbG93X3JvbGVzIiwiY3JlYXRlVGVtcGxhdGVGb3JtQW5kRmxvdyIsInBlcm1zIiwiY29tcGFueV9pZCIsImRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnMiLCJkaXN0cmlidXRlX3RvX3NlbGYiLCJlbmFibGVfYW1pc2Zvcm0iLCJ2ZXJzaW9uSWQiLCJoYW5kbGUiLCJzZWxmIiwibGF0ZXN0Iiwib2JzZXJ2ZUNoYW5nZXMiLCJjaGFuZ2VkIiwiYWRkZWQiLCJvblN0b3AiLCJzdG9wIiwiZmxvd19pZHMiLCJkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb24iLCJhbGxvd19zZWxlY3Rfc3RlcCIsImFtaXNfc2NoZW1hIiwiZ2V0TWluaUluc3RhbmNlIiwiZ2V0TXlhcHByb3ZlTW9kaWZpZWQiLCJpbnN0YW5jZV9maWVsZHNfMCIsIm1pbmlBcHByb3ZlRmllbGRzIiwibmVlZENoYW5nZSIsInRyaWdnZXJDaGFuZ2VGaWVsZHMiLCJ0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzIiwibXlBcHByb3ZlTW9kaWZpZWRzIiwiX2luc3RhbmNlSWQiLCJfdHJhY2UiLCJjaGFuZ2VGaWVsZHMiLCJfY2hhbmdlIiwiX3JldiIsIl9teV9hcHByb3ZlX21vZGlmaWVkcyIsImlzRXF1YWwiLCJnZXRJbnN0YW5jZVRyYWNlcyIsIl9pbnNJZCIsImluYm94X3VzZXJzIiwiYXN5bmNMYXN0RmluaXNoZWRBcHByb3ZlIiwibGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZSIsImluc3RhbmNlaWQiLCJkYXRhTWFwIiwib3BlcmF0aW9uIiwicmF3Q29sbGVjdGlvbiIsImFnZ3JlZ2F0ZSIsInRvQXJyYXkiLCJkb2MiLCJpc0Z1bmN0aW9uIiwid3JhcEFzeW5jIiwiZ2V0TXlBcHByb3ZlIiwiZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlIiwiZ2V0U3RlcEN1cnJlbnROYW1lIiwibm90RmluaXNoZWRUcmFjZXMiLCJhZ2VudCIsInN0ZXBDdXJyZW50TmFtZSIsIiRzbGljZSIsIm15TGFzdEZpbmlzaGVkQXBwcm92ZSIsImFnZW50X3VzZXJfbmFtZSIsIm15X2ZpbmlzaF9kYXRlIiwiaXNfY2MiLCJjY19jb3VudCIsInRhYnVsYXJOYW1lIiwiaW5zdGFuY2VfaWRzIiwicmVsYXRlZF9pbnN0YW5jZV9pZHMiLCJfYXN5bmNfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSIsIl9nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlIiwiX2l0ZW1zIiwiJG1hdGNoIiwiJGdyb3VwIiwiJHN1bSIsIl9jaGFuZ2VEYXRhIiwiX2Zsb3dzRGF0YSIsIl9pbml0IiwiZGF0YUl0ZW0iLCJmbG93X2luc3RhbmNlIiwib2JzZXJ2ZSIsImdldENvbGxlY3Rpb24iLCJ3b3JrZmxvd1RlbXBsYXRlIiwic3RhcnR1cCIsImFic29sdXRlX3BhdGhfY24iLCJhYnNvbHV0ZV9wYXRoX3VzIiwiZmlsZXNMaXN0X2NuIiwiZmlsZXNMaXN0X3VzIiwiZnMiLCJtaW1lIiwicGF0aF9jbiIsInBhdGhfdXMiLCJyZWFkRmlsZUxpc3QiLCJwYXRoRGlyIiwiZmlsZXNMaXN0IiwicmVhZGRpclN5bmMiLCJzdGF0Iiwic3RhdFN5bmMiLCJpc0RpcmVjdG9yeSIsIndvcmtmbG93VGVtcGxhdGVzIiwicmVzb2x2ZSIsImV4aXN0c1N5bmMiLCJmaWxlIiwicmVhZEZpbGVTeW5jIiwiZ29fbmV4dCIsInJ1bGUiLCJzY2hlZHVsZSIsImNyb24iLCJhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24iLCJzY2hlZHVsZUpvYiIsImJpbmRFbnZpcm9ubWVudCIsInRpbWUiLCJwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXMiLCJ1cGRhdGUiLCJlbmFibGVkIiwiZW5kX3RpbWUiLCIkbHRlIiwiJHNldCIsIm11bHRpIiwidGltZUVuZCIsInRpbWVvdXRfYXV0b19zdWJtaXQiLCJ0aW1lb3V0QXV0b1N1Ym1pdCIsIlRhYnVsYXJUYWJsZXMiLCJyZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyIiwiVGFidWxhciIsIlRhYmxlIiwiY29sbGVjdGlvbiIsImNvbHVtbnMiLCJ0aXRsZSIsIm9yZGVyYWJsZSIsInJlbmRlciIsImlucHV0Iiwic3RlcF9jdXJyZW50X25hbWUiLCJjdXJyZW50X3N0ZXBfbmFtZSIsImRvbSIsImxlbmd0aENoYW5nZSIsImV4dHJhRmllbGRzIiwicGFnZUxlbmd0aCIsImluZm8iLCJzZWFyY2hpbmciLCJyZXNwb25zaXZlIiwiZGV0YWlscyIsImF1dG9XaWR0aCIsImNoYW5nZVNlbGVjdG9yIiwiY3VyU3BhY2VVc2VyIiwiJGFuZCIsImFkbWlucyIsImZsIiwiZXh0ZW5kIiwiR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMiLCJfZ2V0X2luYm94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMiLCJfZ2V0X291dGJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zIiwiX2hhbmRsZUxpc3RGaWVsZHMiLCJpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhciIsImluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIiLCJuZXdJbnN0YW5jZXNMaXN0VGFidWxhciIsInVwZGF0ZVRhYnVsYXJUaXRsZSIsInN1YnMiLCJTdWJzTWFuYWdlciIsImluc19maWVsZHMiLCJwdWIiLCJvblVubG9hZCIsImluc3RhbmNlX2xpc3QiLCJfdGFibGVDb2x1bW5zIiwiZHJhd0NhbGxiYWNrIiwiZWxsaXBzaXNMaW5rIiwiZW1wdHlUZCIsImNvbFNwYW4iLCJpc1BhZCIsInBlcmZlY3RTY3JvbGxiYXIiLCJvSW5zdGFuY2UiLCJhdHRyIiwiY2xpY2siLCJnb1BhZ2UiLCJoZWlnaHQiLCJwYWdlcyIsImNlaWwiLCJmblJlY29yZHNEaXNwbGF5IiwiX2lEaXNwbGF5TGVuZ3RoIiwiRGF0YVRhYmxlIiwicGFnZSIsImRyYXciLCJibHVyIiwiY3VycmVudFBhZ2UiLCJrZXlkb3duIiwia2V5Q29kZSIsImNyZWF0ZWRSb3ciLCJyb3ciLCJkYXRhSW5kZXgiLCJGbG93Um91dGVyIiwic2V0QXR0cmlidXRlIiwiYWdlbnRfdmlldyIsImNjX3ZpZXciLCJpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzIiwibW9kaWZpZWRGcm9tTm93IiwibW9kaWZpZWRTdHJpbmciLCJwcmlvcml0eUljb24iLCJwcmlvcml0eUljb25DbGFzcyIsInByaW9yaXR5VmFsdWUiLCJzdGVwX2N1cnJlbnRfbmFtZV92aWV3IiwidW5yZWFkIiwibW9tZW50UmVhY3RpdmVGcm9tTm93IiwicHJpb3JpdHkiLCJ2aXNpYmxlIiwiY2NfdGFnIiwicmVjb3JkX25lZWQiLCJsZW5ndGhNZW51Iiwic3BhY2VfdXNlciIsInBhZ2luZ1R5cGUiLCJpc19saXN0X2Rpc3BsYXkiLCJpbmJveF9pbnN0YW5jZXMiLCJvdXRib3hfaW5zdGFuY2VzIiwiZ2V0U29ydCIsImZsb3dJbnN0YW5jZXMiLCJSZWFjdGl2ZVZhciIsIl9jaGFuZ2VPcmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUlBLGdCQUFKO0FBQXFCQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxvQ0FBWixFQUFpRDtBQUFDRixrQkFBZ0IsQ0FBQ0csQ0FBRCxFQUFHO0FBQUNILG9CQUFnQixHQUFDRyxDQUFqQjtBQUFtQjs7QUFBeEMsQ0FBakQsRUFBMkYsQ0FBM0Y7QUFDckJILGdCQUFnQixDQUFDO0FBQ2hCLG1CQUFpQixRQUREO0FBRWhCLFlBQVU7QUFGTSxDQUFELEVBR2Isa0JBSGEsQ0FBaEIsQzs7Ozs7Ozs7Ozs7O0FDREE7Ozs7Ozs7Ozs7Ozs7QUFhQyxhQUFVSSxJQUFWLEVBQWdCQyxPQUFoQixFQUF5QjtBQUN6QixpQkFEeUIsQ0FFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxRQUFJLE9BQU9DLE1BQVAsS0FBa0IsVUFBbEIsSUFBZ0NBLE1BQU0sQ0FBQ0MsR0FBM0MsRUFBZ0Q7QUFDL0M7QUFDQUQsWUFBTSxDQUFDLENBQUMsWUFBRCxFQUFlLFFBQWYsRUFBeUIsc0JBQXpCLENBQUQsRUFBbURELE9BQW5ELENBQU47QUFDQSxLQUhELE1BR087QUFDTjtBQUNBRCxVQUFJLENBQUNJLEdBQUwsR0FBV0gsT0FBTyxDQUFDRCxJQUFJLENBQUNLLFFBQU4sRUFBZ0JMLElBQUksQ0FBQ00sSUFBckIsRUFBMkJOLElBQUksQ0FBQ08sa0JBQWhDLEVBQW9EUCxJQUFwRCxDQUFsQjtBQUNBO0FBQ0QsR0FkQSxFQWNDLElBZEQs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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7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RixHQUE4RixNQUE5RjtBQUNBLGFBQU9BLE1BQVA7QUFMRDtBQUFBLEdBREQ7QUMwR0EsQyIsImZpbGUiOiIvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNoZWNrTnBtVmVyc2lvbnMgfSBmcm9tICdtZXRlb3IvdG1lYXNkYXk6Y2hlY2stbnBtLXZlcnNpb25zJztcbmNoZWNrTnBtVmVyc2lvbnMoe1xuXHRcIm5vZGUtc2NoZWR1bGVcIjogXCJeMS4zLjFcIixcblx0XCJ4bWwyanNcIjogXCJeMC40LjE5XCIsXG59LCAnc3RlZWRvczp3b3JrZmxvdycpOyIsIi8qIVxuICogVVJJLmpzIC0gTXV0YXRpbmcgVVJMc1xuICpcbiAqIFZlcnNpb246IDEuMTcuMFxuICpcbiAqIEF1dGhvcjogUm9kbmV5IFJlaG1cbiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzL1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyXG4gKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqICAgR1BMIHYzIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9HUEwtMy4wXG4gKlxuICovXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0J3VzZSBzdHJpY3QnO1xuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vdW1kanMvdW1kL2Jsb2IvbWFzdGVyL3JldHVybkV4cG9ydHMuanNcblx0Ly8gaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuXHQvLyAgIC8vIE5vZGVcblx0Ly8gICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi9wdW55Y29kZScpLCByZXF1aXJlKCcuL0lQdjYnKSwgcmVxdWlyZSgnLi9TZWNvbmRMZXZlbERvbWFpbnMnKSk7XG5cdC8vIH0gZWxzZVxuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuXHRcdGRlZmluZShbJy4vcHVueWNvZGUnLCAnLi9JUHY2JywgJy4vU2Vjb25kTGV2ZWxEb21haW5zJ10sIGZhY3RvcnkpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG5cdFx0cm9vdC5VUkkgPSBmYWN0b3J5KHJvb3QucHVueWNvZGUsIHJvb3QuSVB2Niwgcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMsIHJvb3QpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChwdW55Y29kZSwgSVB2NiwgU0xELCByb290KSB7XG5cdCd1c2Ugc3RyaWN0Jztcblx0LypnbG9iYWwgbG9jYXRpb24sIGVzY2FwZSwgdW5lc2NhcGUgKi9cblx0Ly8gRklYTUU6IHYyLjAuMCByZW5hbWNlIG5vbi1jYW1lbENhc2UgcHJvcGVydGllcyB0byB1cHBlcmNhc2Vcblx0Lypqc2hpbnQgY2FtZWxjYXNlOiBmYWxzZSAqL1xuXG5cdC8vIHNhdmUgY3VycmVudCBVUkkgdmFyaWFibGUsIGlmIGFueVxuXHR2YXIgX1VSSSA9IHJvb3QgJiYgcm9vdC5VUkk7XG5cblx0ZnVuY3Rpb24gVVJJKHVybCwgYmFzZSkge1xuXHRcdHZhciBfdXJsU3VwcGxpZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDE7XG5cdFx0dmFyIF9iYXNlU3VwcGxpZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG5cblx0XHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0XHRpZiAoISh0aGlzIGluc3RhbmNlb2YgVVJJKSkge1xuXHRcdFx0aWYgKF91cmxTdXBwbGllZCkge1xuXHRcdFx0XHRpZiAoX2Jhc2VTdXBwbGllZCkge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgVVJJKHVybCwgYmFzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbmV3IFVSSSh1cmwpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IFVSSSgpO1xuXHRcdH1cblxuXHRcdGlmICh1cmwgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKF91cmxTdXBwbGllZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmRlZmluZWQgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIFVSSScpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHR1cmwgPSBsb2NhdGlvbi5ocmVmICsgJyc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR1cmwgPSAnJztcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmhyZWYodXJsKTtcblxuXHRcdC8vIHJlc29sdmUgdG8gYmFzZSBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb25zdHJ1Y3RvclxuXHRcdGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLmFic29sdXRlVG8oYmFzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRVUkkudmVyc2lvbiA9ICcxLjE3LjAnO1xuXG5cdHZhciBwID0gVVJJLnByb3RvdHlwZTtcblx0dmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gZXNjYXBlUmVnRXgoc3RyaW5nKSB7XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvY29tbWl0Lzg1YWMyMTc4M2MxMWY4Y2NhYjA2MTA2ZGJhOTczNWEzMWE4NjkyNGQjY29tbWl0Y29tbWVudC04MjE5NjNcblx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP149IToke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFR5cGUodmFsdWUpIHtcblx0XHQvLyBJRTggZG9lc24ndCByZXR1cm4gW09iamVjdCBVbmRlZmluZWRdIGJ1dCBbT2JqZWN0IE9iamVjdF0gZm9yIHVuZGVmaW5lZCB2YWx1ZVxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gJ1VuZGVmaW5lZCc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFN0cmluZyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpKS5zbGljZSg4LCAtMSk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0FycmF5KG9iaikge1xuXHRcdHJldHVybiBnZXRUeXBlKG9iaikgPT09ICdBcnJheSc7XG5cdH1cblxuXHRmdW5jdGlvbiBmaWx0ZXJBcnJheVZhbHVlcyhkYXRhLCB2YWx1ZSkge1xuXHRcdHZhciBsb29rdXAgPSB7fTtcblx0XHR2YXIgaSwgbGVuZ3RoO1xuXG5cdFx0aWYgKGdldFR5cGUodmFsdWUpID09PSAnUmVnRXhwJykge1xuXHRcdFx0bG9va3VwID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRsb29rdXBbdmFsdWVbaV1dID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9va3VwW3ZhbHVlXSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gZGF0YS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0Lypqc2hpbnQgbGF4YnJlYWs6IHRydWUgKi9cblx0XHRcdHZhciBfbWF0Y2ggPSBsb29rdXAgJiYgbG9va3VwW2RhdGFbaV1dICE9PSB1bmRlZmluZWRcblx0XHRcdFx0fHwgIWxvb2t1cCAmJiB2YWx1ZS50ZXN0KGRhdGFbaV0pO1xuXHRcdFx0Lypqc2hpbnQgbGF4YnJlYWs6IGZhbHNlICovXG5cdFx0XHRpZiAoX21hdGNoKSB7XG5cdFx0XHRcdGRhdGEuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRsZW5ndGgtLTtcblx0XHRcdFx0aS0tO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlDb250YWlucyhsaXN0LCB2YWx1ZSkge1xuXHRcdHZhciBpLCBsZW5ndGg7XG5cblx0XHQvLyB2YWx1ZSBtYXkgYmUgc3RyaW5nLCBudW1iZXIsIGFycmF5LCByZWdleHBcblx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdC8vIE5vdGU6IHRoaXMgY2FuIGJlIG9wdGltaXplZCB0byBPKG4pIChpbnN0ZWFkIG9mIGN1cnJlbnQgTyhtICogbikpXG5cdFx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoIWFycmF5Q29udGFpbnMobGlzdCwgdmFsdWVbaV0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHZhciBfdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IGxpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChfdHlwZSA9PT0gJ1JlZ0V4cCcpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBsaXN0W2ldID09PSAnc3RyaW5nJyAmJiBsaXN0W2ldLm1hdGNoKHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGxpc3RbaV0gPT09IHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFycmF5c0VxdWFsKG9uZSwgdHdvKSB7XG5cdFx0aWYgKCFpc0FycmF5KG9uZSkgfHwgIWlzQXJyYXkodHdvKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGFycmF5cyBjYW4ndCBiZSBlcXVhbCBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IGFtb3VudCBvZiBjb250ZW50XG5cdFx0aWYgKG9uZS5sZW5ndGggIT09IHR3by5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRvbmUuc29ydCgpO1xuXHRcdHR3by5zb3J0KCk7XG5cblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG9uZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGlmIChvbmVbaV0gIT09IHR3b1tpXSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiB0cmltU2xhc2hlcyh0ZXh0KSB7XG5cdFx0dmFyIHRyaW1fZXhwcmVzc2lvbiA9IC9eXFwvK3xcXC8rJC9nO1xuXHRcdHJldHVybiB0ZXh0LnJlcGxhY2UodHJpbV9leHByZXNzaW9uLCAnJyk7XG5cdH1cblxuXHRVUkkuX3BhcnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByb3RvY29sOiBudWxsLFxuXHRcdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRcdGhvc3RuYW1lOiBudWxsLFxuXHRcdFx0dXJuOiBudWxsLFxuXHRcdFx0cG9ydDogbnVsbCxcblx0XHRcdHBhdGg6IG51bGwsXG5cdFx0XHRxdWVyeTogbnVsbCxcblx0XHRcdGZyYWdtZW50OiBudWxsLFxuXHRcdFx0Ly8gc3RhdGVcblx0XHRcdGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVyczogVVJJLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdGVzY2FwZVF1ZXJ5U3BhY2U6IFVSSS5lc2NhcGVRdWVyeVNwYWNlXG5cdFx0fTtcblx0fTtcblx0Ly8gc3RhdGU6IGFsbG93IGR1cGxpY2F0ZSBxdWVyeSBwYXJhbWV0ZXJzIChhPTEmYT0xKVxuXHRVUkkuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzID0gZmFsc2U7XG5cdC8vIHN0YXRlOiByZXBsYWNlcyArIHdpdGggJTIwIChzcGFjZSBpbiBxdWVyeSBzdHJpbmdzKVxuXHRVUkkuZXNjYXBlUXVlcnlTcGFjZSA9IHRydWU7XG5cdC8vIHN0YXRpYyBwcm9wZXJ0aWVzXG5cdFVSSS5wcm90b2NvbF9leHByZXNzaW9uID0gL15bYS16XVthLXowLTkuKy1dKiQvaTtcblx0VVJJLmlkbl9leHByZXNzaW9uID0gL1teYS16MC05XFwuLV0vaTtcblx0VVJJLnB1bnljb2RlX2V4cHJlc3Npb24gPSAvKHhuLS0pL2k7XG5cdC8vIHdlbGwsIDMzMy40NDQuNTU1LjY2NiBtYXRjaGVzLCBidXQgaXQgc3VyZSBhaW4ndCBubyBJUHY0IC0gZG8gd2UgY2FyZT9cblx0VVJJLmlwNF9leHByZXNzaW9uID0gL15cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSQvO1xuXHQvLyBjcmVkaXRzIHRvIFJpY2ggQnJvd25cblx0Ly8gc291cmNlOiBodHRwOi8vZm9ydW1zLmludGVybWFwcGVyLmNvbS92aWV3dG9waWMucGhwP3A9MTA5NiMxMDk2XG5cdC8vIHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQyOTEudHh0XG5cdFVSSS5pcDZfZXhwcmVzc2lvbiA9IC9eXFxzKigoKFswLTlBLUZhLWZdezEsNH06KXs3fShbMC05QS1GYS1mXXsxLDR9fDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs2fSg6WzAtOUEtRmEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezV9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezR9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsM30pfCgoOlswLTlBLUZhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXszfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezJ9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNX0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7MX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoOigoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpKSglLispP1xccyokLztcblx0Ly8gZXhwcmVzc2lvbiB1c2VkIGlzIFwiZ3J1YmVyIHJldmlzZWRcIiAoQGdydWJlciB2MikgZGV0ZXJtaW5lZCB0byBiZSB0aGVcblx0Ly8gYmVzdCBzb2x1dGlvbiBpbiBhIHJlZ2V4LWdvbGYgd2UgZGlkIGEgY291cGxlIG9mIGFnZXMgYWdvIGF0XG5cdC8vICogaHR0cDovL21hdGhpYXNieW5lbnMuYmUvZGVtby91cmwtcmVnZXhcblx0Ly8gKiBodHRwOi8vcm9kbmV5cmVobS5kZS90L3VybC1yZWdleC5odG1sXG5cdFVSSS5maW5kX3VyaV9leHByZXNzaW9uID0gL1xcYigoPzpbYS16XVtcXHctXSs6KD86XFwvezEsM318W2EtejAtOSVdKXx3d3dcXGR7MCwzfVsuXXxbYS16MC05LlxcLV0rWy5dW2Etel17Miw0fVxcLykoPzpbXlxccygpPD5dK3xcXCgoW15cXHMoKTw+XSt8KFxcKFteXFxzKCk8Pl0rXFwpKSkqXFwpKSsoPzpcXCgoW15cXHMoKTw+XSt8KFxcKFteXFxzKCk8Pl0rXFwpKSkqXFwpfFteXFxzYCEoKVxcW1xcXXt9OzonXCIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaWc7XG5cdFVSSS5maW5kVXJpID0ge1xuXHRcdC8vIHZhbGlkIFwic2NoZW1lOi8vXCIgb3IgXCJ3d3cuXCJcblx0XHRzdGFydDogL1xcYig/OihbYS16XVthLXowLTkuKy1dKjpcXC9cXC8pfHd3d1xcLikvZ2ksXG5cdFx0Ly8gZXZlcnl0aGluZyB1cCB0byB0aGUgbmV4dCB3aGl0ZXNwYWNlXG5cdFx0ZW5kOiAvW1xcc1xcclxcbl18JC8sXG5cdFx0Ly8gdHJpbSB0cmFpbGluZyBwdW5jdHVhdGlvbiBjYXB0dXJlZCBieSBlbmQgUmVnRXhwXG5cdFx0dHJpbTogL1tgISgpXFxbXFxde307OidcIi4sPD4/wqvCu+KAnOKAneKAnuKAmOKAmV0rJC9cblx0fTtcblx0Ly8gaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy91cmktc2NoZW1lcy5odG1sXG5cdC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9UQ1BfYW5kX1VEUF9wb3J0X251bWJlcnMjV2VsbC1rbm93bl9wb3J0c1xuXHRVUkkuZGVmYXVsdFBvcnRzID0ge1xuXHRcdGh0dHA6ICc4MCcsXG5cdFx0aHR0cHM6ICc0NDMnLFxuXHRcdGZ0cDogJzIxJyxcblx0XHRnb3BoZXI6ICc3MCcsXG5cdFx0d3M6ICc4MCcsXG5cdFx0d3NzOiAnNDQzJ1xuXHR9O1xuXHQvLyBhbGxvd2VkIGhvc3RuYW1lIGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvIFJGQyAzOTg2XG5cdC8vIEFMUEhBIERJR0lUIFwiLVwiIFwiLlwiIFwiX1wiIFwiflwiIFwiIVwiIFwiJFwiIFwiJlwiIFwiJ1wiIFwiKFwiIFwiKVwiIFwiKlwiIFwiK1wiIFwiLFwiIFwiO1wiIFwiPVwiICVlbmNvZGVkXG5cdC8vIEkndmUgbmV2ZXIgc2VlbiBhIChub24tSUROKSBob3N0bmFtZSBvdGhlciB0aGFuOiBBTFBIQSBESUdJVCAuIC1cblx0VVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycyA9IC9bXmEtekEtWjAtOVxcLi1dLztcblx0Ly8gbWFwIERPTSBFbGVtZW50cyB0byB0aGVpciBVUkkgYXR0cmlidXRlXG5cdFVSSS5kb21BdHRyaWJ1dGVzID0ge1xuXHRcdCdhJzogJ2hyZWYnLFxuXHRcdCdibG9ja3F1b3RlJzogJ2NpdGUnLFxuXHRcdCdsaW5rJzogJ2hyZWYnLFxuXHRcdCdiYXNlJzogJ2hyZWYnLFxuXHRcdCdzY3JpcHQnOiAnc3JjJyxcblx0XHQnZm9ybSc6ICdhY3Rpb24nLFxuXHRcdCdpbWcnOiAnc3JjJyxcblx0XHQnYXJlYSc6ICdocmVmJyxcblx0XHQnaWZyYW1lJzogJ3NyYycsXG5cdFx0J2VtYmVkJzogJ3NyYycsXG5cdFx0J3NvdXJjZSc6ICdzcmMnLFxuXHRcdCd0cmFjayc6ICdzcmMnLFxuXHRcdCdpbnB1dCc6ICdzcmMnLCAvLyBidXQgb25seSBpZiB0eXBlPVwiaW1hZ2VcIlxuXHRcdCdhdWRpbyc6ICdzcmMnLFxuXHRcdCd2aWRlbyc6ICdzcmMnXG5cdH07XG5cdFVSSS5nZXREb21BdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlKSB7XG5cdFx0aWYgKCFub2RlIHx8ICFub2RlLm5vZGVOYW1lKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHQvLyA8aW5wdXQ+IHNob3VsZCBvbmx5IGV4cG9zZSBzcmMgZm9yIHR5cGU9XCJpbWFnZVwiXG5cdFx0aWYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIG5vZGUudHlwZSAhPT0gJ2ltYWdlJykge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gVVJJLmRvbUF0dHJpYnV0ZXNbbm9kZU5hbWVdO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGVzY2FwZUZvckR1bWJGaXJlZm94MzYodmFsdWUpIHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvOTFcblx0XHRyZXR1cm4gZXNjYXBlKHZhbHVlKTtcblx0fVxuXG5cdC8vIGVuY29kaW5nIC8gZGVjb2RpbmcgYWNjb3JkaW5nIHRvIFJGQzM5ODZcblx0ZnVuY3Rpb24gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZykge1xuXHRcdC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2VuY29kZVVSSUNvbXBvbmVudFxuXHRcdHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKVxuXHRcdFx0LnJlcGxhY2UoL1shJygpKl0vZywgZXNjYXBlRm9yRHVtYkZpcmVmb3gzNilcblx0XHRcdC5yZXBsYWNlKC9cXCovZywgJyUyQScpO1xuXHR9XG5cdFVSSS5lbmNvZGUgPSBzdHJpY3RFbmNvZGVVUklDb21wb25lbnQ7XG5cdFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cdFVSSS5pc284ODU5ID0gZnVuY3Rpb24oKSB7XG5cdFx0VVJJLmVuY29kZSA9IGVzY2FwZTtcblx0XHRVUkkuZGVjb2RlID0gdW5lc2NhcGU7XG5cdH07XG5cdFVSSS51bmljb2RlID0gZnVuY3Rpb24oKSB7XG5cdFx0VVJJLmVuY29kZSA9IHN0cmljdEVuY29kZVVSSUNvbXBvbmVudDtcblx0XHRVUkkuZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xuXHR9O1xuXHRVUkkuY2hhcmFjdGVycyA9IHtcblx0XHRwYXRobmFtZToge1xuXHRcdFx0ZW5jb2RlOiB7XG5cdFx0XHRcdC8vIFJGQzM5ODYgMi4xOiBGb3IgY29uc2lzdGVuY3ksIFVSSSBwcm9kdWNlcnMgYW5kIG5vcm1hbGl6ZXJzIHNob3VsZFxuXHRcdFx0XHQvLyB1c2UgdXBwZXJjYXNlIGhleGFkZWNpbWFsIGRpZ2l0cyBmb3IgYWxsIHBlcmNlbnQtZW5jb2RpbmdzLlxuXHRcdFx0XHRleHByZXNzaW9uOiAvJSgyNHwyNnwyQnwyQ3wzQnwzRHwzQXw0MCkvaWcsXG5cdFx0XHRcdG1hcDoge1xuXHRcdFx0XHRcdC8vIC0uX34hJygpKlxuXHRcdFx0XHRcdCclMjQnOiAnJCcsXG5cdFx0XHRcdFx0JyUyNic6ICcmJyxcblx0XHRcdFx0XHQnJTJCJzogJysnLFxuXHRcdFx0XHRcdCclMkMnOiAnLCcsXG5cdFx0XHRcdFx0JyUzQic6ICc7Jyxcblx0XHRcdFx0XHQnJTNEJzogJz0nLFxuXHRcdFx0XHRcdCclM0EnOiAnOicsXG5cdFx0XHRcdFx0JyU0MCc6ICdAJ1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVjb2RlOiB7XG5cdFx0XHRcdGV4cHJlc3Npb246IC9bXFwvXFw/I10vZyxcblx0XHRcdFx0bWFwOiB7XG5cdFx0XHRcdFx0Jy8nOiAnJTJGJyxcblx0XHRcdFx0XHQnPyc6ICclM0YnLFxuXHRcdFx0XHRcdCcjJzogJyUyMydcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVzZXJ2ZWQ6IHtcblx0XHRcdGVuY29kZToge1xuXHRcdFx0XHQvLyBSRkMzOTg2IDIuMTogRm9yIGNvbnNpc3RlbmN5LCBVUkkgcHJvZHVjZXJzIGFuZCBub3JtYWxpemVycyBzaG91bGRcblx0XHRcdFx0Ly8gdXNlIHVwcGVyY2FzZSBoZXhhZGVjaW1hbCBkaWdpdHMgZm9yIGFsbCBwZXJjZW50LWVuY29kaW5ncy5cblx0XHRcdFx0ZXhwcmVzc2lvbjogLyUoMjF8MjN8MjR8MjZ8Mjd8Mjh8Mjl8MkF8MkJ8MkN8MkZ8M0F8M0J8M0R8M0Z8NDB8NUJ8NUQpL2lnLFxuXHRcdFx0XHRtYXA6IHtcblx0XHRcdFx0XHQvLyBnZW4tZGVsaW1zXG5cdFx0XHRcdFx0JyUzQSc6ICc6Jyxcblx0XHRcdFx0XHQnJTJGJzogJy8nLFxuXHRcdFx0XHRcdCclM0YnOiAnPycsXG5cdFx0XHRcdFx0JyUyMyc6ICcjJyxcblx0XHRcdFx0XHQnJTVCJzogJ1snLFxuXHRcdFx0XHRcdCclNUQnOiAnXScsXG5cdFx0XHRcdFx0JyU0MCc6ICdAJyxcblx0XHRcdFx0XHQvLyBzdWItZGVsaW1zXG5cdFx0XHRcdFx0JyUyMSc6ICchJyxcblx0XHRcdFx0XHQnJTI0JzogJyQnLFxuXHRcdFx0XHRcdCclMjYnOiAnJicsXG5cdFx0XHRcdFx0JyUyNyc6ICdcXCcnLFxuXHRcdFx0XHRcdCclMjgnOiAnKCcsXG5cdFx0XHRcdFx0JyUyOSc6ICcpJyxcblx0XHRcdFx0XHQnJTJBJzogJyonLFxuXHRcdFx0XHRcdCclMkInOiAnKycsXG5cdFx0XHRcdFx0JyUyQyc6ICcsJyxcblx0XHRcdFx0XHQnJTNCJzogJzsnLFxuXHRcdFx0XHRcdCclM0QnOiAnPSdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dXJucGF0aDoge1xuXHRcdFx0Ly8gVGhlIGNoYXJhY3RlcnMgdW5kZXIgYGVuY29kZWAgYXJlIHRoZSBjaGFyYWN0ZXJzIGNhbGxlZCBvdXQgYnkgUkZDIDIxNDEgYXMgYmVpbmcgYWNjZXB0YWJsZVxuXHRcdFx0Ly8gZm9yIHVzYWdlIGluIGEgVVJOLiBSRkMyMTQxIGFsc28gY2FsbHMgb3V0IFwiLVwiLCBcIi5cIiwgYW5kIFwiX1wiIGFzIGFjY2VwdGFibGUgY2hhcmFjdGVycywgYnV0XG5cdFx0XHQvLyB0aGVzZSBhcmVuJ3QgZW5jb2RlZCBieSBlbmNvZGVVUklDb21wb25lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gY2FsbCB0aGVtIG91dCBoZXJlLiBBbHNvXG5cdFx0XHQvLyBub3RlIHRoYXQgdGhlIGNvbG9uIGNoYXJhY3RlciBpcyBub3QgZmVhdHVyZWQgaW4gdGhlIGVuY29kaW5nIG1hcDsgdGhpcyBpcyBiZWNhdXNlIFVSSS5qc1xuXHRcdFx0Ly8gZ2l2ZXMgdGhlIGNvbG9ucyBpbiBVUk5zIHNlbWFudGljIG1lYW5pbmcgYXMgdGhlIGRlbGltaXRlcnMgb2YgcGF0aCBzZWdlbWVudHMsIGFuZCBzbyBpdFxuXHRcdFx0Ly8gc2hvdWxkIG5vdCBhcHBlYXIgdW5lbmNvZGVkIGluIGEgc2VnbWVudCBpdHNlbGYuXG5cdFx0XHQvLyBTZWUgYWxzbyB0aGUgbm90ZSBhYm92ZSBhYm91dCBSRkMzOTg2IGFuZCBjYXBpdGFsYWxpemVkIGhleCBkaWdpdHMuXG5cdFx0XHRlbmNvZGU6IHtcblx0XHRcdFx0ZXhwcmVzc2lvbjogLyUoMjF8MjR8Mjd8Mjh8Mjl8MkF8MkJ8MkN8M0J8M0R8NDApL2lnLFxuXHRcdFx0XHRtYXA6IHtcblx0XHRcdFx0XHQnJTIxJzogJyEnLFxuXHRcdFx0XHRcdCclMjQnOiAnJCcsXG5cdFx0XHRcdFx0JyUyNyc6ICdcXCcnLFxuXHRcdFx0XHRcdCclMjgnOiAnKCcsXG5cdFx0XHRcdFx0JyUyOSc6ICcpJyxcblx0XHRcdFx0XHQnJTJBJzogJyonLFxuXHRcdFx0XHRcdCclMkInOiAnKycsXG5cdFx0XHRcdFx0JyUyQyc6ICcsJyxcblx0XHRcdFx0XHQnJTNCJzogJzsnLFxuXHRcdFx0XHRcdCclM0QnOiAnPScsXG5cdFx0XHRcdFx0JyU0MCc6ICdAJ1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Ly8gVGhlc2UgY2hhcmFjdGVycyBhcmUgdGhlIGNoYXJhY3RlcnMgY2FsbGVkIG91dCBieSBSRkMyMTQxIGFzIFwicmVzZXJ2ZWRcIiBjaGFyYWN0ZXJzIHRoYXRcblx0XHRcdC8vIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gYSBVUk4sIHBsdXMgdGhlIGNvbG9uIGNoYXJhY3RlciAoc2VlIG5vdGUgYWJvdmUpLlxuXHRcdFx0ZGVjb2RlOiB7XG5cdFx0XHRcdGV4cHJlc3Npb246IC9bXFwvXFw/IzpdL2csXG5cdFx0XHRcdG1hcDoge1xuXHRcdFx0XHRcdCcvJzogJyUyRicsXG5cdFx0XHRcdFx0Jz8nOiAnJTNGJyxcblx0XHRcdFx0XHQnIyc6ICclMjMnLFxuXHRcdFx0XHRcdCc6JzogJyUzQSdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0VVJJLmVuY29kZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG5cdFx0dmFyIGVzY2FwZWQgPSBVUkkuZW5jb2RlKHN0cmluZyArICcnKTtcblx0XHRpZiAoZXNjYXBlUXVlcnlTcGFjZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlc2NhcGVRdWVyeVNwYWNlID0gVVJJLmVzY2FwZVF1ZXJ5U3BhY2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVzY2FwZVF1ZXJ5U3BhY2UgPyBlc2NhcGVkLnJlcGxhY2UoLyUyMC9nLCAnKycpIDogZXNjYXBlZDtcblx0fTtcblx0VVJJLmRlY29kZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG5cdFx0c3RyaW5nICs9ICcnO1xuXHRcdGlmIChlc2NhcGVRdWVyeVNwYWNlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGVzY2FwZVF1ZXJ5U3BhY2UgPSBVUkkuZXNjYXBlUXVlcnlTcGFjZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIFVSSS5kZWNvZGUoZXNjYXBlUXVlcnlTcGFjZSA/IHN0cmluZy5yZXBsYWNlKC9cXCsvZywgJyUyMCcpIDogc3RyaW5nKTtcblx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdC8vIHdlJ3JlIG5vdCBnb2luZyB0byBtZXNzIHdpdGggd2VpcmQgZW5jb2RpbmdzLFxuXHRcdFx0Ly8gZ2l2ZSB1cCBhbmQgcmV0dXJuIHRoZSB1bmRlY29kZWQgb3JpZ2luYWwgc3RyaW5nXG5cdFx0XHQvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzg3XG5cdFx0XHQvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzkyXG5cdFx0XHRyZXR1cm4gc3RyaW5nO1xuXHRcdH1cblx0fTtcblx0Ly8gZ2VuZXJhdGUgZW5jb2RlL2RlY29kZSBwYXRoIGZ1bmN0aW9uc1xuXHR2YXIgX3BhcnRzID0geydlbmNvZGUnOidlbmNvZGUnLCAnZGVjb2RlJzonZGVjb2RlJ307XG5cdHZhciBfcGFydDtcblx0dmFyIGdlbmVyYXRlQWNjZXNzb3IgPSBmdW5jdGlvbihfZ3JvdXAsIF9wYXJ0KSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIFVSSVtfcGFydF0oc3RyaW5nICsgJycpLnJlcGxhY2UoVVJJLmNoYXJhY3RlcnNbX2dyb3VwXVtfcGFydF0uZXhwcmVzc2lvbiwgZnVuY3Rpb24oYykge1xuXHRcdFx0XHRcdHJldHVybiBVUkkuY2hhcmFjdGVyc1tfZ3JvdXBdW19wYXJ0XS5tYXBbY107XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHQvLyB3ZSdyZSBub3QgZ29pbmcgdG8gbWVzcyB3aXRoIHdlaXJkIGVuY29kaW5ncyxcblx0XHRcdFx0Ly8gZ2l2ZSB1cCBhbmQgcmV0dXJuIHRoZSB1bmRlY29kZWQgb3JpZ2luYWwgc3RyaW5nXG5cdFx0XHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvODdcblx0XHRcdFx0Ly8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2lzc3Vlcy85MlxuXHRcdFx0XHRyZXR1cm4gc3RyaW5nO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG5cblx0Zm9yIChfcGFydCBpbiBfcGFydHMpIHtcblx0XHRVUklbX3BhcnQgKyAnUGF0aFNlZ21lbnQnXSA9IGdlbmVyYXRlQWNjZXNzb3IoJ3BhdGhuYW1lJywgX3BhcnRzW19wYXJ0XSk7XG5cdFx0VVJJW19wYXJ0ICsgJ1VyblBhdGhTZWdtZW50J10gPSBnZW5lcmF0ZUFjY2Vzc29yKCd1cm5wYXRoJywgX3BhcnRzW19wYXJ0XSk7XG5cdH1cblxuXHR2YXIgZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24gPSBmdW5jdGlvbihfc2VwLCBfY29kaW5nRnVuY05hbWUsIF9pbm5lckNvZGluZ0Z1bmNOYW1lKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0Ly8gV2h5IHBhc3MgaW4gbmFtZXMgb2YgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb24gb2JqZWN0cyB0aGVtc2VsdmVzPyBUaGVcblx0XHRcdC8vIGRlZmluaXRpb25zIG9mIHNvbWUgZnVuY3Rpb25zIChidXQgaW4gcGFydGljdWxhciwgVVJJLmRlY29kZSkgd2lsbCBvY2Nhc2lvbmFsbHkgY2hhbmdlIGR1ZVxuXHRcdFx0Ly8gdG8gVVJJLmpzIGhhdmluZyBJU084ODU5IGFuZCBVbmljb2RlIG1vZGVzLiBQYXNzaW5nIGluIHRoZSBuYW1lIGFuZCBnZXR0aW5nIGl0IHdpbGwgZW5zdXJlXG5cdFx0XHQvLyB0aGF0IHRoZSBmdW5jdGlvbnMgd2UgdXNlIGhlcmUgYXJlIFwiZnJlc2hcIi5cblx0XHRcdHZhciBhY3R1YWxDb2RpbmdGdW5jO1xuXHRcdFx0aWYgKCFfaW5uZXJDb2RpbmdGdW5jTmFtZSkge1xuXHRcdFx0XHRhY3R1YWxDb2RpbmdGdW5jID0gVVJJW19jb2RpbmdGdW5jTmFtZV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhY3R1YWxDb2RpbmdGdW5jID0gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFVSSVtfY29kaW5nRnVuY05hbWVdKFVSSVtfaW5uZXJDb2RpbmdGdW5jTmFtZV0oc3RyaW5nKSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzZWdtZW50cyA9IChzdHJpbmcgKyAnJykuc3BsaXQoX3NlcCk7XG5cblx0XHRcdGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRzZWdtZW50c1tpXSA9IGFjdHVhbENvZGluZ0Z1bmMoc2VnbWVudHNbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VnbWVudHMuam9pbihfc2VwKTtcblx0XHR9O1xuXHR9O1xuXG5cdC8vIFRoaXMgdGFrZXMgcGxhY2Ugb3V0c2lkZSB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGRvbid0IHdhbnQsIGUuZy4sIGVuY29kZVVyblBhdGggZnVuY3Rpb25zLlxuXHRVUkkuZGVjb2RlUGF0aCA9IGdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uKCcvJywgJ2RlY29kZVBhdGhTZWdtZW50Jyk7XG5cdFVSSS5kZWNvZGVVcm5QYXRoID0gZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24oJzonLCAnZGVjb2RlVXJuUGF0aFNlZ21lbnQnKTtcblx0VVJJLnJlY29kZVBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignLycsICdlbmNvZGVQYXRoU2VnbWVudCcsICdkZWNvZGUnKTtcblx0VVJJLnJlY29kZVVyblBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignOicsICdlbmNvZGVVcm5QYXRoU2VnbWVudCcsICdkZWNvZGUnKTtcblxuXHRVUkkuZW5jb2RlUmVzZXJ2ZWQgPSBnZW5lcmF0ZUFjY2Vzc29yKCdyZXNlcnZlZCcsICdlbmNvZGUnKTtcblxuXHRVUkkucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcsIHBhcnRzKSB7XG5cdFx0dmFyIHBvcztcblx0XHRpZiAoIXBhcnRzKSB7XG5cdFx0XHRwYXJ0cyA9IHt9O1xuXHRcdH1cblx0XHQvLyBbcHJvdG9jb2xcIjovL1wiW3VzZXJuYW1lW1wiOlwicGFzc3dvcmRdXCJAXCJdaG9zdG5hbWVbXCI6XCJwb3J0XVwiL1wiP11bcGF0aF1bXCI/XCJxdWVyeXN0cmluZ11bXCIjXCJmcmFnbWVudF1cblxuXHRcdC8vIGV4dHJhY3QgZnJhZ21lbnRcblx0XHRwb3MgPSBzdHJpbmcuaW5kZXhPZignIycpO1xuXHRcdGlmIChwb3MgPiAtMSkge1xuXHRcdFx0Ly8gZXNjYXBpbmc/XG5cdFx0XHRwYXJ0cy5mcmFnbWVudCA9IHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSkgfHwgbnVsbDtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKTtcblx0XHR9XG5cblx0XHQvLyBleHRyYWN0IHF1ZXJ5XG5cdFx0cG9zID0gc3RyaW5nLmluZGV4T2YoJz8nKTtcblx0XHRpZiAocG9zID4gLTEpIHtcblx0XHRcdC8vIGVzY2FwaW5nP1xuXHRcdFx0cGFydHMucXVlcnkgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpIHx8IG51bGw7XG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcyk7XG5cdFx0fVxuXG5cdFx0Ly8gZXh0cmFjdCBwcm90b2NvbFxuXHRcdGlmIChzdHJpbmcuc3Vic3RyaW5nKDAsIDIpID09PSAnLy8nKSB7XG5cdFx0XHQvLyByZWxhdGl2ZS1zY2hlbWVcblx0XHRcdHBhcnRzLnByb3RvY29sID0gbnVsbDtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMik7XG5cdFx0XHQvLyBleHRyYWN0IFwidXNlcjpwYXNzQGhvc3Q6cG9ydFwiXG5cdFx0XHRzdHJpbmcgPSBVUkkucGFyc2VBdXRob3JpdHkoc3RyaW5nLCBwYXJ0cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvcyA9IHN0cmluZy5pbmRleE9mKCc6Jyk7XG5cdFx0XHRpZiAocG9zID4gLTEpIHtcblx0XHRcdFx0cGFydHMucHJvdG9jb2wgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykgfHwgbnVsbDtcblx0XHRcdFx0aWYgKHBhcnRzLnByb3RvY29sICYmICFwYXJ0cy5wcm90b2NvbC5tYXRjaChVUkkucHJvdG9jb2xfZXhwcmVzc2lvbikpIHtcblx0XHRcdFx0XHQvLyA6IG1heSBiZSB3aXRoaW4gdGhlIHBhdGhcblx0XHRcdFx0XHRwYXJ0cy5wcm90b2NvbCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEsIHBvcyArIDMpID09PSAnLy8nKSB7XG5cdFx0XHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAzKTtcblxuXHRcdFx0XHRcdC8vIGV4dHJhY3QgXCJ1c2VyOnBhc3NAaG9zdDpwb3J0XCJcblx0XHRcdFx0XHRzdHJpbmcgPSBVUkkucGFyc2VBdXRob3JpdHkoc3RyaW5nLCBwYXJ0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAxKTtcblx0XHRcdFx0XHRwYXJ0cy51cm4gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gd2hhdCdzIGxlZnQgbXVzdCBiZSB0aGUgcGF0aFxuXHRcdHBhcnRzLnBhdGggPSBzdHJpbmc7XG5cblx0XHQvLyBhbmQgd2UncmUgZG9uZVxuXHRcdHJldHVybiBwYXJ0cztcblx0fTtcblx0VVJJLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcblx0XHQvLyBDb3B5IGNocm9tZSwgSUUsIG9wZXJhIGJhY2tzbGFzaC1oYW5kbGluZyBiZWhhdmlvci5cblx0XHQvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcblx0XHQvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9ibG9iLzM4NmZkMjRmNDliMGU5ZDFhOGEwNzY1OTJhNDA0MTY4ZmFlZWNjMzQvbGliL3VybC5qcyNMMTE1LUwxMjRcblx0XHQvLyBTZWU6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yNTkxNlxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL3B1bGwvMjMzXG5cdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuXHRcdC8vIGV4dHJhY3QgaG9zdDpwb3J0XG5cdFx0dmFyIHBvcyA9IHN0cmluZy5pbmRleE9mKCcvJyk7XG5cdFx0dmFyIGJyYWNrZXRQb3M7XG5cdFx0dmFyIHQ7XG5cblx0XHRpZiAocG9zID09PSAtMSkge1xuXHRcdFx0cG9zID0gc3RyaW5nLmxlbmd0aDtcblx0XHR9XG5cblx0XHRpZiAoc3RyaW5nLmNoYXJBdCgwKSA9PT0gJ1snKSB7XG5cdFx0XHQvLyBJUHY2IGhvc3QgLSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLTZtYW4tdGV4dC1hZGRyLXJlcHJlc2VudGF0aW9uLTA0I3NlY3Rpb24tNlxuXHRcdFx0Ly8gSSBjbGFpbSBtb3N0IGNsaWVudCBzb2Z0d2FyZSBicmVha3Mgb24gSVB2NiBhbnl3YXlzLiBUbyBzaW1wbGlmeSB0aGluZ3MsIFVSSSBvbmx5IGFjY2VwdHNcblx0XHRcdC8vIElQdjYrcG9ydCBpbiB0aGUgZm9ybWF0IFsyMDAxOmRiODo6MV06ODAgKGZvciB0aGUgdGltZSBiZWluZylcblx0XHRcdGJyYWNrZXRQb3MgPSBzdHJpbmcuaW5kZXhPZignXScpO1xuXHRcdFx0cGFydHMuaG9zdG5hbWUgPSBzdHJpbmcuc3Vic3RyaW5nKDEsIGJyYWNrZXRQb3MpIHx8IG51bGw7XG5cdFx0XHRwYXJ0cy5wb3J0ID0gc3RyaW5nLnN1YnN0cmluZyhicmFja2V0UG9zICsgMiwgcG9zKSB8fCBudWxsO1xuXHRcdFx0aWYgKHBhcnRzLnBvcnQgPT09ICcvJykge1xuXHRcdFx0XHRwYXJ0cy5wb3J0ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGZpcnN0Q29sb24gPSBzdHJpbmcuaW5kZXhPZignOicpO1xuXHRcdFx0dmFyIGZpcnN0U2xhc2ggPSBzdHJpbmcuaW5kZXhPZignLycpO1xuXHRcdFx0dmFyIG5leHRDb2xvbiA9IHN0cmluZy5pbmRleE9mKCc6JywgZmlyc3RDb2xvbiArIDEpO1xuXHRcdFx0aWYgKG5leHRDb2xvbiAhPT0gLTEgJiYgKGZpcnN0U2xhc2ggPT09IC0xIHx8IG5leHRDb2xvbiA8IGZpcnN0U2xhc2gpKSB7XG5cdFx0XHRcdC8vIElQdjYgaG9zdCBjb250YWlucyBtdWx0aXBsZSBjb2xvbnMgLSBidXQgbm8gcG9ydFxuXHRcdFx0XHQvLyB0aGlzIG5vdGF0aW9uIGlzIGFjdHVhbGx5IG5vdCBhbGxvd2VkIGJ5IFJGQyAzOTg2LCBidXQgd2UncmUgYSBsaWJlcmFsIHBhcnNlclxuXHRcdFx0XHRwYXJ0cy5ob3N0bmFtZSA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKSB8fCBudWxsO1xuXHRcdFx0XHRwYXJ0cy5wb3J0ID0gbnVsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykuc3BsaXQoJzonKTtcblx0XHRcdFx0cGFydHMuaG9zdG5hbWUgPSB0WzBdIHx8IG51bGw7XG5cdFx0XHRcdHBhcnRzLnBvcnQgPSB0WzFdIHx8IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnRzLmhvc3RuYW1lICYmIHN0cmluZy5zdWJzdHJpbmcocG9zKS5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0cG9zKys7XG5cdFx0XHRzdHJpbmcgPSAnLycgKyBzdHJpbmc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0cmluZy5zdWJzdHJpbmcocG9zKSB8fCAnLyc7XG5cdH07XG5cdFVSSS5wYXJzZUF1dGhvcml0eSA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcblx0XHRzdHJpbmcgPSBVUkkucGFyc2VVc2VyaW5mbyhzdHJpbmcsIHBhcnRzKTtcblx0XHRyZXR1cm4gVVJJLnBhcnNlSG9zdChzdHJpbmcsIHBhcnRzKTtcblx0fTtcblx0VVJJLnBhcnNlVXNlcmluZm8gPSBmdW5jdGlvbihzdHJpbmcsIHBhcnRzKSB7XG5cdFx0Ly8gZXh0cmFjdCB1c2VybmFtZTpwYXNzd29yZFxuXHRcdHZhciBmaXJzdFNsYXNoID0gc3RyaW5nLmluZGV4T2YoJy8nKTtcblx0XHR2YXIgcG9zID0gc3RyaW5nLmxhc3RJbmRleE9mKCdAJywgZmlyc3RTbGFzaCA+IC0xID8gZmlyc3RTbGFzaCA6IHN0cmluZy5sZW5ndGggLSAxKTtcblx0XHR2YXIgdDtcblxuXHRcdC8vIGF1dGhvcml0eUAgbXVzdCBjb21lIGJlZm9yZSAvcGF0aFxuXHRcdGlmIChwb3MgPiAtMSAmJiAoZmlyc3RTbGFzaCA9PT0gLTEgfHwgcG9zIDwgZmlyc3RTbGFzaCkpIHtcblx0XHRcdHQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykuc3BsaXQoJzonKTtcblx0XHRcdHBhcnRzLnVzZXJuYW1lID0gdFswXSA/IFVSSS5kZWNvZGUodFswXSkgOiBudWxsO1xuXHRcdFx0dC5zaGlmdCgpO1xuXHRcdFx0cGFydHMucGFzc3dvcmQgPSB0WzBdID8gVVJJLmRlY29kZSh0LmpvaW4oJzonKSkgOiBudWxsO1xuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFydHMudXNlcm5hbWUgPSBudWxsO1xuXHRcdFx0cGFydHMucGFzc3dvcmQgPSBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdHJpbmc7XG5cdH07XG5cdFVSSS5wYXJzZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG5cdFx0aWYgKCFzdHJpbmcpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cblx0XHQvLyB0aHJvdyBvdXQgdGhlIGZ1bmt5IGJ1c2luZXNzIC0gXCI/XCJbbmFtZVwiPVwidmFsdWVcIiZcIl0rXG5cdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyYrL2csICcmJykucmVwbGFjZSgvXlxcPyomKnwmKyQvZywgJycpO1xuXG5cdFx0aWYgKCFzdHJpbmcpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cblx0XHR2YXIgaXRlbXMgPSB7fTtcblx0XHR2YXIgc3BsaXRzID0gc3RyaW5nLnNwbGl0KCcmJyk7XG5cdFx0dmFyIGxlbmd0aCA9IHNwbGl0cy5sZW5ndGg7XG5cdFx0dmFyIHYsIG5hbWUsIHZhbHVlO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0diA9IHNwbGl0c1tpXS5zcGxpdCgnPScpO1xuXHRcdFx0bmFtZSA9IFVSSS5kZWNvZGVRdWVyeSh2LnNoaWZ0KCksIGVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFx0Ly8gbm8gXCI9XCIgaXMgbnVsbCBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG5cdFx0XHR2YWx1ZSA9IHYubGVuZ3RoID8gVVJJLmRlY29kZVF1ZXJ5KHYuam9pbignPScpLCBlc2NhcGVRdWVyeVNwYWNlKSA6IG51bGw7XG5cblx0XHRcdGlmIChoYXNPd24uY2FsbChpdGVtcywgbmFtZSkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpdGVtc1tuYW1lXSA9PT0gJ3N0cmluZycgfHwgaXRlbXNbbmFtZV0gPT09IG51bGwpIHtcblx0XHRcdFx0XHRpdGVtc1tuYW1lXSA9IFtpdGVtc1tuYW1lXV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpdGVtc1tuYW1lXS5wdXNoKHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGl0ZW1zW25hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1zO1xuXHR9O1xuXG5cdFVSSS5idWlsZCA9IGZ1bmN0aW9uKHBhcnRzKSB7XG5cdFx0dmFyIHQgPSAnJztcblxuXHRcdGlmIChwYXJ0cy5wcm90b2NvbCkge1xuXHRcdFx0dCArPSBwYXJ0cy5wcm90b2NvbCArICc6Jztcblx0XHR9XG5cblx0XHRpZiAoIXBhcnRzLnVybiAmJiAodCB8fCBwYXJ0cy5ob3N0bmFtZSkpIHtcblx0XHRcdHQgKz0gJy8vJztcblx0XHR9XG5cblx0XHR0ICs9IChVUkkuYnVpbGRBdXRob3JpdHkocGFydHMpIHx8ICcnKTtcblxuXHRcdGlmICh0eXBlb2YgcGFydHMucGF0aCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGlmIChwYXJ0cy5wYXRoLmNoYXJBdCgwKSAhPT0gJy8nICYmIHR5cGVvZiBwYXJ0cy5ob3N0bmFtZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dCArPSAnLyc7XG5cdFx0XHR9XG5cblx0XHRcdHQgKz0gcGFydHMucGF0aDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHBhcnRzLnF1ZXJ5ID09PSAnc3RyaW5nJyAmJiBwYXJ0cy5xdWVyeSkge1xuXHRcdFx0dCArPSAnPycgKyBwYXJ0cy5xdWVyeTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHBhcnRzLmZyYWdtZW50ID09PSAnc3RyaW5nJyAmJiBwYXJ0cy5mcmFnbWVudCkge1xuXHRcdFx0dCArPSAnIycgKyBwYXJ0cy5mcmFnbWVudDtcblx0XHR9XG5cdFx0cmV0dXJuIHQ7XG5cdH07XG5cdFVSSS5idWlsZEhvc3QgPSBmdW5jdGlvbihwYXJ0cykge1xuXHRcdHZhciB0ID0gJyc7XG5cblx0XHRpZiAoIXBhcnRzLmhvc3RuYW1lKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fSBlbHNlIGlmIChVUkkuaXA2X2V4cHJlc3Npb24udGVzdChwYXJ0cy5ob3N0bmFtZSkpIHtcblx0XHRcdHQgKz0gJ1snICsgcGFydHMuaG9zdG5hbWUgKyAnXSc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHQgKz0gcGFydHMuaG9zdG5hbWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnRzLnBvcnQpIHtcblx0XHRcdHQgKz0gJzonICsgcGFydHMucG9ydDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdDtcblx0fTtcblx0VVJJLmJ1aWxkQXV0aG9yaXR5ID0gZnVuY3Rpb24ocGFydHMpIHtcblx0XHRyZXR1cm4gVVJJLmJ1aWxkVXNlcmluZm8ocGFydHMpICsgVVJJLmJ1aWxkSG9zdChwYXJ0cyk7XG5cdH07XG5cdFVSSS5idWlsZFVzZXJpbmZvID0gZnVuY3Rpb24ocGFydHMpIHtcblx0XHR2YXIgdCA9ICcnO1xuXG5cdFx0aWYgKHBhcnRzLnVzZXJuYW1lKSB7XG5cdFx0XHR0ICs9IFVSSS5lbmNvZGUocGFydHMudXNlcm5hbWUpO1xuXG5cdFx0XHRpZiAocGFydHMucGFzc3dvcmQpIHtcblx0XHRcdFx0dCArPSAnOicgKyBVUkkuZW5jb2RlKHBhcnRzLnBhc3N3b3JkKTtcblx0XHRcdH1cblxuXHRcdFx0dCArPSAnQCc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHQ7XG5cdH07XG5cdFVSSS5idWlsZFF1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG5cdFx0Ly8gYWNjb3JkaW5nIHRvIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYgb3IgaHR0cDovL2xhYnMuYXBhY2hlLm9yZy93ZWJhcmNoL3VyaS9yZmMvcmZjMzk4Ni5odG1sXG5cdFx0Ly8gYmVpbmcgwrstLl9+ISQmJygpKissOz06QC8/wqsgJUhFWCBhbmQgYWxudW0gYXJlIGFsbG93ZWRcblx0XHQvLyB0aGUgUkZDIGV4cGxpY2l0bHkgc3RhdGVzID8vZm9vIGJlaW5nIGEgdmFsaWQgdXNlIGNhc2UsIG5vIG1lbnRpb24gb2YgcGFyYW1ldGVyIHN5bnRheCFcblx0XHQvLyBVUkkuanMgdHJlYXRzIHRoZSBxdWVyeSBzdHJpbmcgYXMgYmVpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cdFx0Ly8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvaW50ZXJhY3QvZm9ybXMuaHRtbCNmb3JtLWNvbnRlbnQtdHlwZVxuXG5cdFx0dmFyIHQgPSAnJztcblx0XHR2YXIgdW5pcXVlLCBrZXksIGksIGxlbmd0aDtcblx0XHRmb3IgKGtleSBpbiBkYXRhKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoZGF0YSwga2V5KSAmJiBrZXkpIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkoZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdHVuaXF1ZSA9IHt9O1xuXHRcdFx0XHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IGRhdGFba2V5XS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGFba2V5XVtpXSAhPT0gdW5kZWZpbmVkICYmIHVuaXF1ZVtkYXRhW2tleV1baV0gKyAnJ10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHR0ICs9ICcmJyArIFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyKGtleSwgZGF0YVtrZXldW2ldLCBlc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRcdFx0XHRcdFx0aWYgKGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZVtkYXRhW2tleV1baV0gKyAnJ10gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dCArPSAnJicgKyBVUkkuYnVpbGRRdWVyeVBhcmFtZXRlcihrZXksIGRhdGFba2V5XSwgZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdC5zdWJzdHJpbmcoMSk7XG5cdH07XG5cdFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2ludGVyYWN0L2Zvcm1zLmh0bWwjZm9ybS1jb250ZW50LXR5cGUgLS0gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cdFx0Ly8gZG9uJ3QgYXBwZW5kIFwiPVwiIGZvciBudWxsIHZhbHVlcywgYWNjb3JkaW5nIHRvIGh0dHA6Ly9kdmNzLnczLm9yZy9oZy91cmwvcmF3LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwjdXJsLXBhcmFtZXRlci1zZXJpYWxpemF0aW9uXG5cdFx0cmV0dXJuIFVSSS5lbmNvZGVRdWVyeShuYW1lLCBlc2NhcGVRdWVyeVNwYWNlKSArICh2YWx1ZSAhPT0gbnVsbCA/ICc9JyArIFVSSS5lbmNvZGVRdWVyeSh2YWx1ZSwgZXNjYXBlUXVlcnlTcGFjZSkgOiAnJyk7XG5cdH07XG5cblx0VVJJLmFkZFF1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgbmFtZSwgdmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuXHRcdFx0XHRpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuXHRcdFx0XHRcdFVSSS5hZGRRdWVyeShkYXRhLCBrZXksIG5hbWVba2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKGRhdGFbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkYXRhW25hbWVdID0gdmFsdWU7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGRhdGFbbmFtZV0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGRhdGFbbmFtZV0gPSBbZGF0YVtuYW1lXV07XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSBbdmFsdWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRkYXRhW25hbWVdID0gKGRhdGFbbmFtZV0gfHwgW10pLmNvbmNhdCh2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5hZGRRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyJyk7XG5cdFx0fVxuXHR9O1xuXHRVUkkucmVtb3ZlUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBuYW1lLCB2YWx1ZSkge1xuXHRcdHZhciBpLCBsZW5ndGgsIGtleTtcblxuXHRcdGlmIChpc0FycmF5KG5hbWUpKSB7XG5cdFx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSBuYW1lLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGRhdGFbbmFtZVtpXV0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChnZXRUeXBlKG5hbWUpID09PSAnUmVnRXhwJykge1xuXHRcdFx0Zm9yIChrZXkgaW4gZGF0YSkge1xuXHRcdFx0XHRpZiAobmFtZS50ZXN0KGtleSkpIHtcblx0XHRcdFx0XHRkYXRhW2tleV0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Zm9yIChrZXkgaW4gbmFtZSkge1xuXHRcdFx0XHRpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuXHRcdFx0XHRcdFVSSS5yZW1vdmVRdWVyeShkYXRhLCBrZXksIG5hbWVba2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKGdldFR5cGUodmFsdWUpID09PSAnUmVnRXhwJykge1xuXHRcdFx0XHRcdGlmICghaXNBcnJheShkYXRhW25hbWVdKSAmJiB2YWx1ZS50ZXN0KGRhdGFbbmFtZV0pKSB7XG5cdFx0XHRcdFx0XHRkYXRhW25hbWVdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkYXRhW25hbWVdID0gZmlsdGVyQXJyYXlWYWx1ZXMoZGF0YVtuYW1lXSwgdmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChkYXRhW25hbWVdID09PSBTdHJpbmcodmFsdWUpICYmICghaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoID09PSAxKSkge1xuXHRcdFx0XHRcdGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNBcnJheShkYXRhW25hbWVdKSkge1xuXHRcdFx0XHRcdGRhdGFbbmFtZV0gPSBmaWx0ZXJBcnJheVZhbHVlcyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5yZW1vdmVRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcsIFJlZ0V4cCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyJyk7XG5cdFx0fVxuXHR9O1xuXHRVUkkuaGFzUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBuYW1lLCB2YWx1ZSwgd2l0aGluQXJyYXkpIHtcblx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuXHRcdFx0XHRpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuXHRcdFx0XHRcdGlmICghVVJJLmhhc1F1ZXJ5KGRhdGEsIGtleSwgbmFtZVtrZXldKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXInKTtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKGdldFR5cGUodmFsdWUpKSB7XG5cdFx0XHRjYXNlICdVbmRlZmluZWQnOlxuXHRcdFx0XHQvLyB0cnVlIGlmIGV4aXN0cyAoYnV0IG1heSBiZSBlbXB0eSlcblx0XHRcdFx0cmV0dXJuIG5hbWUgaW4gZGF0YTsgLy8gZGF0YVtuYW1lXSAhPT0gdW5kZWZpbmVkO1xuXG5cdFx0XHRjYXNlICdCb29sZWFuJzpcblx0XHRcdFx0Ly8gdHJ1ZSBpZiBleGlzdHMgYW5kIG5vbi1lbXB0eVxuXHRcdFx0XHR2YXIgX2Jvb2x5ID0gQm9vbGVhbihpc0FycmF5KGRhdGFbbmFtZV0pID8gZGF0YVtuYW1lXS5sZW5ndGggOiBkYXRhW25hbWVdKTtcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBfYm9vbHk7XG5cblx0XHRcdGNhc2UgJ0Z1bmN0aW9uJzpcblx0XHRcdFx0Ly8gYWxsb3cgY29tcGxleCBjb21wYXJpc29uXG5cdFx0XHRcdHJldHVybiAhIXZhbHVlKGRhdGFbbmFtZV0sIG5hbWUsIGRhdGEpO1xuXG5cdFx0XHRjYXNlICdBcnJheSc6XG5cdFx0XHRcdGlmICghaXNBcnJheShkYXRhW25hbWVdKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBvcCA9IHdpdGhpbkFycmF5ID8gYXJyYXlDb250YWlucyA6IGFycmF5c0VxdWFsO1xuXHRcdFx0XHRyZXR1cm4gb3AoZGF0YVtuYW1lXSwgdmFsdWUpO1xuXG5cdFx0XHRjYXNlICdSZWdFeHAnOlxuXHRcdFx0XHRpZiAoIWlzQXJyYXkoZGF0YVtuYW1lXSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gQm9vbGVhbihkYXRhW25hbWVdICYmIGRhdGFbbmFtZV0ubWF0Y2godmFsdWUpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghd2l0aGluQXJyYXkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gYXJyYXlDb250YWlucyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cblx0XHRcdGNhc2UgJ051bWJlcic6XG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdGNhc2UgJ1N0cmluZyc6XG5cdFx0XHRcdGlmICghaXNBcnJheShkYXRhW25hbWVdKSkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhW25hbWVdID09PSB2YWx1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghd2l0aGluQXJyYXkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gYXJyYXlDb250YWlucyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5oYXNRdWVyeSgpIGFjY2VwdHMgdW5kZWZpbmVkLCBib29sZWFuLCBzdHJpbmcsIG51bWJlciwgUmVnRXhwLCBGdW5jdGlvbiBhcyB0aGUgdmFsdWUgcGFyYW1ldGVyJyk7XG5cdFx0fVxuXHR9O1xuXG5cblx0VVJJLmNvbW1vblBhdGggPSBmdW5jdGlvbihvbmUsIHR3bykge1xuXHRcdHZhciBsZW5ndGggPSBNYXRoLm1pbihvbmUubGVuZ3RoLCB0d28ubGVuZ3RoKTtcblx0XHR2YXIgcG9zO1xuXG5cdFx0Ly8gZmluZCBmaXJzdCBub24tbWF0Y2hpbmcgY2hhcmFjdGVyXG5cdFx0Zm9yIChwb3MgPSAwOyBwb3MgPCBsZW5ndGg7IHBvcysrKSB7XG5cdFx0XHRpZiAob25lLmNoYXJBdChwb3MpICE9PSB0d28uY2hhckF0KHBvcykpIHtcblx0XHRcdFx0cG9zLS07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwb3MgPCAxKSB7XG5cdFx0XHRyZXR1cm4gb25lLmNoYXJBdCgwKSA9PT0gdHdvLmNoYXJBdCgwKSAmJiBvbmUuY2hhckF0KDApID09PSAnLycgPyAnLycgOiAnJztcblx0XHR9XG5cblx0XHQvLyByZXZlcnQgdG8gbGFzdCAvXG5cdFx0aWYgKG9uZS5jaGFyQXQocG9zKSAhPT0gJy8nIHx8IHR3by5jaGFyQXQocG9zKSAhPT0gJy8nKSB7XG5cdFx0XHRwb3MgPSBvbmUuc3Vic3RyaW5nKDAsIHBvcykubGFzdEluZGV4T2YoJy8nKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb25lLnN1YnN0cmluZygwLCBwb3MgKyAxKTtcblx0fTtcblxuXHRVUkkud2l0aGluU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nLCBjYWxsYmFjaywgb3B0aW9ucykge1xuXHRcdG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG5cdFx0dmFyIF9zdGFydCA9IG9wdGlvbnMuc3RhcnQgfHwgVVJJLmZpbmRVcmkuc3RhcnQ7XG5cdFx0dmFyIF9lbmQgPSBvcHRpb25zLmVuZCB8fCBVUkkuZmluZFVyaS5lbmQ7XG5cdFx0dmFyIF90cmltID0gb3B0aW9ucy50cmltIHx8IFVSSS5maW5kVXJpLnRyaW07XG5cdFx0dmFyIF9hdHRyaWJ1dGVPcGVuID0gL1thLXowLTktXT1bXCInXT8kL2k7XG5cblx0XHRfc3RhcnQubGFzdEluZGV4ID0gMDtcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0dmFyIG1hdGNoID0gX3N0YXJ0LmV4ZWMoc3RyaW5nKTtcblx0XHRcdGlmICghbWF0Y2gpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzdGFydCA9IG1hdGNoLmluZGV4O1xuXHRcdFx0aWYgKG9wdGlvbnMuaWdub3JlSHRtbCkge1xuXHRcdFx0XHQvLyBhdHRyaWJ1dChlPVtcIiddPyQpXG5cdFx0XHRcdHZhciBhdHRyaWJ1dGVPcGVuID0gc3RyaW5nLnNsaWNlKE1hdGgubWF4KHN0YXJ0IC0gMywgMCksIHN0YXJ0KTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZU9wZW4gJiYgX2F0dHJpYnV0ZU9wZW4udGVzdChhdHRyaWJ1dGVPcGVuKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHZhciBlbmQgPSBzdGFydCArIHN0cmluZy5zbGljZShzdGFydCkuc2VhcmNoKF9lbmQpO1xuXHRcdFx0dmFyIHNsaWNlID0gc3RyaW5nLnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoX3RyaW0sICcnKTtcblx0XHRcdGlmIChvcHRpb25zLmlnbm9yZSAmJiBvcHRpb25zLmlnbm9yZS50ZXN0KHNsaWNlKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0ZW5kID0gc3RhcnQgKyBzbGljZS5sZW5ndGg7XG5cdFx0XHR2YXIgcmVzdWx0ID0gY2FsbGJhY2soc2xpY2UsIHN0YXJ0LCBlbmQsIHN0cmluZyk7XG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMCwgc3RhcnQpICsgcmVzdWx0ICsgc3RyaW5nLnNsaWNlKGVuZCk7XG5cdFx0XHRfc3RhcnQubGFzdEluZGV4ID0gc3RhcnQgKyByZXN1bHQubGVuZ3RoO1xuXHRcdH1cblxuXHRcdF9zdGFydC5sYXN0SW5kZXggPSAwO1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH07XG5cblx0VVJJLmVuc3VyZVZhbGlkSG9zdG5hbWUgPSBmdW5jdGlvbih2KSB7XG5cdFx0Ly8gVGhlb3JldGljYWxseSBVUklzIGFsbG93IHBlcmNlbnQtZW5jb2RpbmcgaW4gSG9zdG5hbWVzIChhY2NvcmRpbmcgdG8gUkZDIDM5ODYpXG5cdFx0Ly8gdGhleSBhcmUgbm90IHBhcnQgb2YgRE5TIGFuZCB0aGVyZWZvcmUgaWdub3JlZCBieSBVUkkuanNcblxuXHRcdGlmICh2Lm1hdGNoKFVSSS5pbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMpKSB7XG5cdFx0XHQvLyB0ZXN0IHB1bnljb2RlXG5cdFx0XHRpZiAoIXB1bnljb2RlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0gYW5kIFB1bnljb2RlLmpzIGlzIG5vdCBhdmFpbGFibGUnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHB1bnljb2RlLnRvQVNDSUkodikubWF0Y2goVVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvLyBub0NvbmZsaWN0XG5cdFVSSS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24ocmVtb3ZlQWxsKSB7XG5cdFx0aWYgKHJlbW92ZUFsbCkge1xuXHRcdFx0dmFyIHVuY29uZmxpY3RlZCA9IHtcblx0XHRcdFx0VVJJOiB0aGlzLm5vQ29uZmxpY3QoKVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHJvb3QuVVJJVGVtcGxhdGUgJiYgdHlwZW9mIHJvb3QuVVJJVGVtcGxhdGUubm9Db25mbGljdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR1bmNvbmZsaWN0ZWQuVVJJVGVtcGxhdGUgPSByb290LlVSSVRlbXBsYXRlLm5vQ29uZmxpY3QoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvb3QuSVB2NiAmJiB0eXBlb2Ygcm9vdC5JUHY2Lm5vQ29uZmxpY3QgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0dW5jb25mbGljdGVkLklQdjYgPSByb290LklQdjYubm9Db25mbGljdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocm9vdC5TZWNvbmRMZXZlbERvbWFpbnMgJiYgdHlwZW9mIHJvb3QuU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3QgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0dW5jb25mbGljdGVkLlNlY29uZExldmVsRG9tYWlucyA9IHJvb3QuU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3QoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuY29uZmxpY3RlZDtcblx0XHR9IGVsc2UgaWYgKHJvb3QuVVJJID09PSB0aGlzKSB7XG5cdFx0XHRyb290LlVSSSA9IF9VUkk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0cC5idWlsZCA9IGZ1bmN0aW9uKGRlZmVyQnVpbGQpIHtcblx0XHRpZiAoZGVmZXJCdWlsZCA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5fZGVmZXJyZWRfYnVpbGQgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoZGVmZXJCdWlsZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX2RlZmVycmVkX2J1aWxkKSB7XG5cdFx0XHR0aGlzLl9zdHJpbmcgPSBVUkkuYnVpbGQodGhpcy5fcGFydHMpO1xuXHRcdFx0dGhpcy5fZGVmZXJyZWRfYnVpbGQgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRwLmNsb25lID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG5ldyBVUkkodGhpcyk7XG5cdH07XG5cblx0cC52YWx1ZU9mID0gcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmJ1aWxkKGZhbHNlKS5fc3RyaW5nO1xuXHR9O1xuXG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVTaW1wbGVBY2Nlc3NvcihfcGFydCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9wYXJ0c1tfcGFydF0gfHwgJyc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9wYXJ0c1tfcGFydF0gPSB2IHx8IG51bGw7XG5cdFx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUHJlZml4QWNjZXNzb3IoX3BhcnQsIF9rZXkpe1xuXHRcdHJldHVybiBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcGFydHNbX3BhcnRdIHx8ICcnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHYgIT09IG51bGwpIHtcblx0XHRcdFx0XHR2ID0gdiArICcnO1xuXHRcdFx0XHRcdGlmICh2LmNoYXJBdCgwKSA9PT0gX2tleSkge1xuXHRcdFx0XHRcdFx0diA9IHYuc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuX3BhcnRzW19wYXJ0XSA9IHY7XG5cdFx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHAucHJvdG9jb2wgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdwcm90b2NvbCcpO1xuXHRwLnVzZXJuYW1lID0gZ2VuZXJhdGVTaW1wbGVBY2Nlc3NvcigndXNlcm5hbWUnKTtcblx0cC5wYXNzd29yZCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3Bhc3N3b3JkJyk7XG5cdHAuaG9zdG5hbWUgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdob3N0bmFtZScpO1xuXHRwLnBvcnQgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdwb3J0Jyk7XG5cdHAucXVlcnkgPSBnZW5lcmF0ZVByZWZpeEFjY2Vzc29yKCdxdWVyeScsICc/Jyk7XG5cdHAuZnJhZ21lbnQgPSBnZW5lcmF0ZVByZWZpeEFjY2Vzc29yKCdmcmFnbWVudCcsICcjJyk7XG5cblx0cC5zZWFyY2ggPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdHZhciB0ID0gdGhpcy5xdWVyeSh2LCBidWlsZCk7XG5cdFx0cmV0dXJuIHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiB0Lmxlbmd0aCA/ICgnPycgKyB0KSA6IHQ7XG5cdH07XG5cdHAuaGFzaCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHQgPSB0aGlzLmZyYWdtZW50KHYsIGJ1aWxkKTtcblx0XHRyZXR1cm4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoID8gKCcjJyArIHQpIDogdDtcblx0fTtcblxuXHRwLnBhdGhuYW1lID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcblx0XHRcdHZhciByZXMgPSB0aGlzLl9wYXJ0cy5wYXRoIHx8ICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSA/ICcvJyA6ICcnKTtcblx0XHRcdHJldHVybiB2ID8gKHRoaXMuX3BhcnRzLnVybiA/IFVSSS5kZWNvZGVVcm5QYXRoIDogVVJJLmRlY29kZVBhdGgpKHJlcykgOiByZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdFx0dGhpcy5fcGFydHMucGF0aCA9IHYgPyBVUkkucmVjb2RlVXJuUGF0aCh2KSA6ICcnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fcGFydHMucGF0aCA9IHYgPyBVUkkucmVjb2RlUGF0aCh2KSA6ICcvJztcblx0XHRcdH1cblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5wYXRoID0gcC5wYXRobmFtZTtcblx0cC5ocmVmID0gZnVuY3Rpb24oaHJlZiwgYnVpbGQpIHtcblx0XHR2YXIga2V5O1xuXG5cdFx0aWYgKGhyZWYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR0aGlzLl9zdHJpbmcgPSAnJztcblx0XHR0aGlzLl9wYXJ0cyA9IFVSSS5fcGFydHMoKTtcblxuXHRcdHZhciBfVVJJID0gaHJlZiBpbnN0YW5jZW9mIFVSSTtcblx0XHR2YXIgX29iamVjdCA9IHR5cGVvZiBocmVmID09PSAnb2JqZWN0JyAmJiAoaHJlZi5ob3N0bmFtZSB8fCBocmVmLnBhdGggfHwgaHJlZi5wYXRobmFtZSk7XG5cdFx0aWYgKGhyZWYubm9kZU5hbWUpIHtcblx0XHRcdHZhciBhdHRyaWJ1dGUgPSBVUkkuZ2V0RG9tQXR0cmlidXRlKGhyZWYpO1xuXHRcdFx0aHJlZiA9IGhyZWZbYXR0cmlidXRlXSB8fCAnJztcblx0XHRcdF9vYmplY3QgPSBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyB3aW5kb3cubG9jYXRpb24gaXMgcmVwb3J0ZWQgdG8gYmUgYW4gb2JqZWN0LCBidXQgaXQncyBub3QgdGhlIHNvcnRcblx0XHQvLyBvZiBvYmplY3Qgd2UncmUgbG9va2luZyBmb3I6XG5cdFx0Ly8gKiBsb2NhdGlvbi5wcm90b2NvbCBlbmRzIHdpdGggYSBjb2xvblxuXHRcdC8vICogbG9jYXRpb24ucXVlcnkgIT0gb2JqZWN0LnNlYXJjaFxuXHRcdC8vICogbG9jYXRpb24uaGFzaCAhPSBvYmplY3QuZnJhZ21lbnRcblx0XHQvLyBzaW1wbHkgc2VyaWFsaXppbmcgdGhlIHVua25vd24gb2JqZWN0IHNob3VsZCBkbyB0aGUgdHJpY2tcblx0XHQvLyAoZm9yIGxvY2F0aW9uLCBub3QgZm9yIGV2ZXJ5dGhpbmcuLi4pXG5cdFx0aWYgKCFfVVJJICYmIF9vYmplY3QgJiYgaHJlZi5wYXRobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRocmVmID0gaHJlZi50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgaHJlZiA9PT0gJ3N0cmluZycgfHwgaHJlZiBpbnN0YW5jZW9mIFN0cmluZykge1xuXHRcdFx0dGhpcy5fcGFydHMgPSBVUkkucGFyc2UoU3RyaW5nKGhyZWYpLCB0aGlzLl9wYXJ0cyk7XG5cdFx0fSBlbHNlIGlmIChfVVJJIHx8IF9vYmplY3QpIHtcblx0XHRcdHZhciBzcmMgPSBfVVJJID8gaHJlZi5fcGFydHMgOiBocmVmO1xuXHRcdFx0Zm9yIChrZXkgaW4gc3JjKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbCh0aGlzLl9wYXJ0cywga2V5KSkge1xuXHRcdFx0XHRcdHRoaXMuX3BhcnRzW2tleV0gPSBzcmNba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGlucHV0Jyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8vIGlkZW50aWZpY2F0aW9uIGFjY2Vzc29yc1xuXHRwLmlzID0gZnVuY3Rpb24od2hhdCkge1xuXHRcdHZhciBpcCA9IGZhbHNlO1xuXHRcdHZhciBpcDQgPSBmYWxzZTtcblx0XHR2YXIgaXA2ID0gZmFsc2U7XG5cdFx0dmFyIG5hbWUgPSBmYWxzZTtcblx0XHR2YXIgc2xkID0gZmFsc2U7XG5cdFx0dmFyIGlkbiA9IGZhbHNlO1xuXHRcdHZhciBwdW55Y29kZSA9IGZhbHNlO1xuXHRcdHZhciByZWxhdGl2ZSA9ICF0aGlzLl9wYXJ0cy51cm47XG5cblx0XHRpZiAodGhpcy5fcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdHJlbGF0aXZlID0gZmFsc2U7XG5cdFx0XHRpcDQgPSBVUkkuaXA0X2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHRpcDYgPSBVUkkuaXA2X2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHRpcCA9IGlwNCB8fCBpcDY7XG5cdFx0XHRuYW1lID0gIWlwO1xuXHRcdFx0c2xkID0gbmFtZSAmJiBTTEQgJiYgU0xELmhhcyh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHRpZG4gPSBuYW1lICYmIFVSSS5pZG5fZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdHB1bnljb2RlID0gbmFtZSAmJiBVUkkucHVueWNvZGVfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKHdoYXQudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0Y2FzZSAncmVsYXRpdmUnOlxuXHRcdFx0XHRyZXR1cm4gcmVsYXRpdmU7XG5cblx0XHRcdGNhc2UgJ2Fic29sdXRlJzpcblx0XHRcdFx0cmV0dXJuICFyZWxhdGl2ZTtcblxuXHRcdFx0Ly8gaG9zdG5hbWUgaWRlbnRpZmljYXRpb25cblx0XHRcdGNhc2UgJ2RvbWFpbic6XG5cdFx0XHRjYXNlICduYW1lJzpcblx0XHRcdFx0cmV0dXJuIG5hbWU7XG5cblx0XHRcdGNhc2UgJ3NsZCc6XG5cdFx0XHRcdHJldHVybiBzbGQ7XG5cblx0XHRcdGNhc2UgJ2lwJzpcblx0XHRcdFx0cmV0dXJuIGlwO1xuXG5cdFx0XHRjYXNlICdpcDQnOlxuXHRcdFx0Y2FzZSAnaXB2NCc6XG5cdFx0XHRjYXNlICdpbmV0NCc6XG5cdFx0XHRcdHJldHVybiBpcDQ7XG5cblx0XHRcdGNhc2UgJ2lwNic6XG5cdFx0XHRjYXNlICdpcHY2Jzpcblx0XHRcdGNhc2UgJ2luZXQ2Jzpcblx0XHRcdFx0cmV0dXJuIGlwNjtcblxuXHRcdFx0Y2FzZSAnaWRuJzpcblx0XHRcdFx0cmV0dXJuIGlkbjtcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdFx0cmV0dXJuICF0aGlzLl9wYXJ0cy51cm47XG5cblx0XHRcdGNhc2UgJ3Vybic6XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuX3BhcnRzLnVybjtcblxuXHRcdFx0Y2FzZSAncHVueWNvZGUnOlxuXHRcdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0Ly8gY29tcG9uZW50IHNwZWNpZmljIGlucHV0IHZhbGlkYXRpb25cblx0dmFyIF9wcm90b2NvbCA9IHAucHJvdG9jb2w7XG5cdHZhciBfcG9ydCA9IHAucG9ydDtcblx0dmFyIF9ob3N0bmFtZSA9IHAuaG9zdG5hbWU7XG5cblx0cC5wcm90b2NvbCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0Ly8gYWNjZXB0IHRyYWlsaW5nIDovL1xuXHRcdFx0XHR2ID0gdi5yZXBsYWNlKC86KFxcL1xcLyk/JC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXYubWF0Y2goVVJJLnByb3RvY29sX2V4cHJlc3Npb24pKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdG9jb2wgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4rLV0gb3IgZG9lc25cXCd0IHN0YXJ0IHdpdGggW0EtWl0nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gX3Byb3RvY29sLmNhbGwodGhpcywgdiwgYnVpbGQpO1xuXHR9O1xuXHRwLnNjaGVtZSA9IHAucHJvdG9jb2w7XG5cdHAucG9ydCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodiA9PT0gMCkge1xuXHRcdFx0XHR2ID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0diArPSAnJztcblx0XHRcdFx0aWYgKHYuY2hhckF0KDApID09PSAnOicpIHtcblx0XHRcdFx0XHR2ID0gdi5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodi5tYXRjaCgvW14wLTldLykpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3J0IFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFswLTldJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9wb3J0LmNhbGwodGhpcywgdiwgYnVpbGQpO1xuXHR9O1xuXHRwLmhvc3RuYW1lID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhciB4ID0ge307XG5cdFx0XHR2YXIgcmVzID0gVVJJLnBhcnNlSG9zdCh2LCB4KTtcblx0XHRcdGlmIChyZXMgIT09ICcvJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7XG5cdFx0XHR9XG5cblx0XHRcdHYgPSB4Lmhvc3RuYW1lO1xuXHRcdH1cblx0XHRyZXR1cm4gX2hvc3RuYW1lLmNhbGwodGhpcywgdiwgYnVpbGQpO1xuXHR9O1xuXG5cdC8vIGNvbXBvdW5kIGFjY2Vzc29yc1xuXHRwLm9yaWdpbiA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHBhcnRzO1xuXG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sKCk7XG5cdFx0XHR2YXIgYXV0aG9yaXR5ID0gdGhpcy5hdXRob3JpdHkoKTtcblx0XHRcdGlmICghYXV0aG9yaXR5KSByZXR1cm4gJyc7XG5cdFx0XHRyZXR1cm4gKHByb3RvY29sID8gcHJvdG9jb2wgKyAnOi8vJyA6ICcnKSArIHRoaXMuYXV0aG9yaXR5KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBvcmlnaW4gPSBVUkkodik7XG5cdFx0XHR0aGlzXG5cdFx0XHRcdC5wcm90b2NvbChvcmlnaW4ucHJvdG9jb2woKSlcblx0XHRcdFx0LmF1dGhvcml0eShvcmlnaW4uYXV0aG9yaXR5KCkpXG5cdFx0XHRcdC5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLmhvc3QgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lID8gVVJJLmJ1aWxkSG9zdCh0aGlzLl9wYXJ0cykgOiAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJlcyA9IFVSSS5wYXJzZUhvc3QodiwgdGhpcy5fcGFydHMpO1xuXHRcdFx0aWYgKHJlcyAhPT0gJy8nKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLmF1dGhvcml0eSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUgPyBVUkkuYnVpbGRBdXRob3JpdHkodGhpcy5fcGFydHMpIDogJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciByZXMgPSBVUkkucGFyc2VBdXRob3JpdHkodiwgdGhpcy5fcGFydHMpO1xuXHRcdFx0aWYgKHJlcyAhPT0gJy8nKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnVzZXJpbmZvID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMudXNlcm5hbWUpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdCA9IFVSSS5idWlsZFVzZXJpbmZvKHRoaXMuX3BhcnRzKTtcblx0XHRcdHJldHVybiB0LnN1YnN0cmluZygwLCB0Lmxlbmd0aCAtMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh2W3YubGVuZ3RoLTFdICE9PSAnQCcpIHtcblx0XHRcdFx0diArPSAnQCc7XG5cdFx0XHR9XG5cblx0XHRcdFVSSS5wYXJzZVVzZXJpbmZvKHYsIHRoaXMuX3BhcnRzKTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5yZXNvdXJjZSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHBhcnRzO1xuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGF0aCgpICsgdGhpcy5zZWFyY2goKSArIHRoaXMuaGFzaCgpO1xuXHRcdH1cblxuXHRcdHBhcnRzID0gVVJJLnBhcnNlKHYpO1xuXHRcdHRoaXMuX3BhcnRzLnBhdGggPSBwYXJ0cy5wYXRoO1xuXHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gcGFydHMucXVlcnk7XG5cdFx0dGhpcy5fcGFydHMuZnJhZ21lbnQgPSBwYXJ0cy5mcmFnbWVudDtcblx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0Ly8gZnJhY3Rpb24gYWNjZXNzb3JzXG5cdHAuc3ViZG9tYWluID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlbmllbmNlLCByZXR1cm4gXCJ3d3dcIiBmcm9tIFwid3d3LmV4YW1wbGUub3JnXCJcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBncmFiIGRvbWFpbiBhbmQgYWRkIGFub3RoZXIgc2VnbWVudFxuXHRcdFx0dmFyIGVuZCA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aCAtIHRoaXMuZG9tYWluKCkubGVuZ3RoIC0gMTtcblx0XHRcdHJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCwgZW5kKSB8fCAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGggLSB0aGlzLmRvbWFpbigpLmxlbmd0aDtcblx0XHRcdHZhciBzdWIgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCwgZSk7XG5cdFx0XHR2YXIgcmVwbGFjZSA9IG5ldyBSZWdFeHAoJ14nICsgZXNjYXBlUmVnRXgoc3ViKSk7XG5cblx0XHRcdGlmICh2ICYmIHYuY2hhckF0KHYubGVuZ3RoIC0gMSkgIT09ICcuJykge1xuXHRcdFx0XHR2ICs9ICcuJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0VVJJLmVuc3VyZVZhbGlkSG9zdG5hbWUodik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5kb21haW4gPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdGJ1aWxkID0gdjtcblx0XHRcdHYgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVuaWVuY2UsIHJldHVybiBcImV4YW1wbGUub3JnXCIgZnJvbSBcInd3dy5leGFtcGxlLm9yZ1wiXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZSB8fCB0aGlzLmlzKCdJUCcpKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0Ly8gaWYgaG9zdG5hbWUgY29uc2lzdHMgb2YgMSBvciAyIHNlZ21lbnRzLCBpdCBtdXN0IGJlIHRoZSBkb21haW5cblx0XHRcdHZhciB0ID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubWF0Y2goL1xcLi9nKTtcblx0XHRcdGlmICh0ICYmIHQubGVuZ3RoIDwgMikge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGdyYWIgdGxkIGFuZCBhZGQgYW5vdGhlciBzZWdtZW50XG5cdFx0XHR2YXIgZW5kID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoIC0gdGhpcy50bGQoYnVpbGQpLmxlbmd0aCAtIDE7XG5cdFx0XHRlbmQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZignLicsIGVuZCAtMSkgKyAxO1xuXHRcdFx0cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyhlbmQpIHx8ICcnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXYpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBkb21haW4gZW1wdHknKTtcblx0XHRcdH1cblxuXHRcdFx0VVJJLmVuc3VyZVZhbGlkSG9zdG5hbWUodik7XG5cblx0XHRcdGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHY7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgcmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy5kb21haW4oKSkgKyAnJCcpO1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC50bGQgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdGJ1aWxkID0gdjtcblx0XHRcdHYgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gcmV0dXJuIFwib3JnXCIgZnJvbSBcInd3dy5leGFtcGxlLm9yZ1wiXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZSB8fCB0aGlzLmlzKCdJUCcpKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0dmFyIHBvcyA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG5cdFx0XHR2YXIgdGxkID0gdGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKHBvcyArIDEpO1xuXG5cdFx0XHRpZiAoYnVpbGQgIT09IHRydWUgJiYgU0xEICYmIFNMRC5saXN0W3RsZC50b0xvd2VyQ2FzZSgpXSkge1xuXHRcdFx0XHRyZXR1cm4gU0xELmdldCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkgfHwgdGxkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGxkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgcmVwbGFjZTtcblxuXHRcdFx0aWYgKCF2KSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgVExEIGVtcHR5Jyk7XG5cdFx0XHR9IGVsc2UgaWYgKHYubWF0Y2goL1teYS16QS1aMC05LV0vKSkge1xuXHRcdFx0XHRpZiAoU0xEICYmIFNMRC5pcyh2KSkge1xuXHRcdFx0XHRcdHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHRoaXMudGxkKCkpICsgJyQnKTtcblx0XHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVExEIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTldJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdjYW5ub3Qgc2V0IFRMRCBvbiBub24tZG9tYWluIGhvc3QnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHRoaXMudGxkKCkpICsgJyQnKTtcblx0XHRcdFx0dGhpcy5fcGFydHMuaG9zdG5hbWUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuZGlyZWN0b3J5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5wYXRoICYmICF0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcblx0XHRcdFx0cmV0dXJuICcvJztcblx0XHRcdH1cblxuXHRcdFx0dmFyIGVuZCA9IHRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoIC0gdGhpcy5maWxlbmFtZSgpLmxlbmd0aCAtIDE7XG5cdFx0XHR2YXIgcmVzID0gdGhpcy5fcGFydHMucGF0aC5zdWJzdHJpbmcoMCwgZW5kKSB8fCAodGhpcy5fcGFydHMuaG9zdG5hbWUgPyAnLycgOiAnJyk7XG5cblx0XHRcdHJldHVybiB2ID8gVVJJLmRlY29kZVBhdGgocmVzKSA6IHJlcztcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgZSA9IHRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoIC0gdGhpcy5maWxlbmFtZSgpLmxlbmd0aDtcblx0XHRcdHZhciBkaXJlY3RvcnkgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLCBlKTtcblx0XHRcdHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cCgnXicgKyBlc2NhcGVSZWdFeChkaXJlY3RvcnkpKTtcblxuXHRcdFx0Ly8gZnVsbHkgcXVhbGlmaWVyIGRpcmVjdG9yaWVzIGJlZ2luIHdpdGggYSBzbGFzaFxuXHRcdFx0aWYgKCF0aGlzLmlzKCdyZWxhdGl2ZScpKSB7XG5cdFx0XHRcdGlmICghdikge1xuXHRcdFx0XHRcdHYgPSAnLyc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodi5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0XHRcdHYgPSAnLycgKyB2O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGRpcmVjdG9yaWVzIGFsd2F5cyBlbmQgd2l0aCBhIHNsYXNoXG5cdFx0XHRpZiAodiAmJiB2LmNoYXJBdCh2Lmxlbmd0aCAtIDEpICE9PSAnLycpIHtcblx0XHRcdFx0diArPSAnLyc7XG5cdFx0XHR9XG5cblx0XHRcdHYgPSBVUkkucmVjb2RlUGF0aCh2KTtcblx0XHRcdHRoaXMuX3BhcnRzLnBhdGggPSB0aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuZmlsZW5hbWUgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLnBhdGggfHwgdGhpcy5fcGFydHMucGF0aCA9PT0gJy8nKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0dmFyIHBvcyA9IHRoaXMuX3BhcnRzLnBhdGgubGFzdEluZGV4T2YoJy8nKTtcblx0XHRcdHZhciByZXMgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZyhwb3MrMSk7XG5cblx0XHRcdHJldHVybiB2ID8gVVJJLmRlY29kZVBhdGhTZWdtZW50KHJlcykgOiByZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBtdXRhdGVkRGlyZWN0b3J5ID0gZmFsc2U7XG5cblx0XHRcdGlmICh2LmNoYXJBdCgwKSA9PT0gJy8nKSB7XG5cdFx0XHRcdHYgPSB2LnN1YnN0cmluZygxKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHYubWF0Y2goL1xcLj9cXC8vKSkge1xuXHRcdFx0XHRtdXRhdGVkRGlyZWN0b3J5ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHRoaXMuZmlsZW5hbWUoKSkgKyAnJCcpO1xuXHRcdFx0diA9IFVSSS5yZWNvZGVQYXRoKHYpO1xuXHRcdFx0dGhpcy5fcGFydHMucGF0aCA9IHRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShyZXBsYWNlLCB2KTtcblxuXHRcdFx0aWYgKG11dGF0ZWREaXJlY3RvcnkpIHtcblx0XHRcdFx0dGhpcy5ub3JtYWxpemVQYXRoKGJ1aWxkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnN1ZmZpeCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMucGF0aCB8fCB0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZmlsZW5hbWUgPSB0aGlzLmZpbGVuYW1lKCk7XG5cdFx0XHR2YXIgcG9zID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTtcblx0XHRcdHZhciBzLCByZXM7XG5cblx0XHRcdGlmIChwb3MgPT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3VmZml4IG1heSBvbmx5IGNvbnRhaW4gYWxudW0gY2hhcmFjdGVycyAoeXVwLCBJIG1hZGUgdGhpcyB1cC4pXG5cdFx0XHRzID0gZmlsZW5hbWUuc3Vic3RyaW5nKHBvcysxKTtcblx0XHRcdHJlcyA9ICgvXlthLXowLTklXSskL2kpLnRlc3QocykgPyBzIDogJyc7XG5cdFx0XHRyZXR1cm4gdiA/IFVSSS5kZWNvZGVQYXRoU2VnbWVudChyZXMpIDogcmVzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodi5jaGFyQXQoMCkgPT09ICcuJykge1xuXHRcdFx0XHR2ID0gdi5zdWJzdHJpbmcoMSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzdWZmaXggPSB0aGlzLnN1ZmZpeCgpO1xuXHRcdFx0dmFyIHJlcGxhY2U7XG5cblx0XHRcdGlmICghc3VmZml4KSB7XG5cdFx0XHRcdGlmICghdikge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fcGFydHMucGF0aCArPSAnLicgKyBVUkkucmVjb2RlUGF0aCh2KTtcblx0XHRcdH0gZWxzZSBpZiAoIXYpIHtcblx0XHRcdFx0cmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgoJy4nICsgc3VmZml4KSArICckJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeChzdWZmaXgpICsgJyQnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlcGxhY2UpIHtcblx0XHRcdFx0diA9IFVSSS5yZWNvZGVQYXRoKHYpO1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gdGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuc2VnbWVudCA9IGZ1bmN0aW9uKHNlZ21lbnQsIHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHNlcGFyYXRvciA9IHRoaXMuX3BhcnRzLnVybiA/ICc6JyA6ICcvJztcblx0XHR2YXIgcGF0aCA9IHRoaXMucGF0aCgpO1xuXHRcdHZhciBhYnNvbHV0ZSA9IHBhdGguc3Vic3RyaW5nKDAsIDEpID09PSAnLyc7XG5cdFx0dmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdChzZXBhcmF0b3IpO1xuXG5cdFx0aWYgKHNlZ21lbnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc2VnbWVudCAhPT0gJ251bWJlcicpIHtcblx0XHRcdGJ1aWxkID0gdjtcblx0XHRcdHYgPSBzZWdtZW50O1xuXHRcdFx0c2VnbWVudCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoc2VnbWVudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzZWdtZW50ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdCYWQgc2VnbWVudCBcIicgKyBzZWdtZW50ICsgJ1wiLCBtdXN0IGJlIDAtYmFzZWQgaW50ZWdlcicpO1xuXHRcdH1cblxuXHRcdGlmIChhYnNvbHV0ZSkge1xuXHRcdFx0c2VnbWVudHMuc2hpZnQoKTtcblx0XHR9XG5cblx0XHRpZiAoc2VnbWVudCA8IDApIHtcblx0XHRcdC8vIGFsbG93IG5lZ2F0aXZlIGluZGV4ZXMgdG8gYWRkcmVzcyBmcm9tIHRoZSBlbmRcblx0XHRcdHNlZ21lbnQgPSBNYXRoLm1heChzZWdtZW50cy5sZW5ndGggKyBzZWdtZW50LCAwKTtcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvKmpzaGludCBsYXhicmVhazogdHJ1ZSAqL1xuXHRcdFx0cmV0dXJuIHNlZ21lbnQgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHNlZ21lbnRzXG5cdFx0XHRcdDogc2VnbWVudHNbc2VnbWVudF07XG5cdFx0XHQvKmpzaGludCBsYXhicmVhazogZmFsc2UgKi9cblx0XHR9IGVsc2UgaWYgKHNlZ21lbnQgPT09IG51bGwgfHwgc2VnbWVudHNbc2VnbWVudF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKGlzQXJyYXkodikpIHtcblx0XHRcdFx0c2VnbWVudHMgPSBbXTtcblx0XHRcdFx0Ly8gY29sbGFwc2UgZW1wdHkgZWxlbWVudHMgd2l0aGluIGFycmF5XG5cdFx0XHRcdGZvciAodmFyIGk9MCwgbD12Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdGlmICghdltpXS5sZW5ndGggJiYgKCFzZWdtZW50cy5sZW5ndGggfHwgIXNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtMV0ubGVuZ3RoKSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHNlZ21lbnRzLmxlbmd0aCAmJiAhc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHNlZ21lbnRzLnBvcCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNlZ21lbnRzLnB1c2godHJpbVNsYXNoZXModltpXSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHYgfHwgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHYgPSB0cmltU2xhc2hlcyh2KTtcblx0XHRcdFx0aWYgKHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtMV0gPT09ICcnKSB7XG5cdFx0XHRcdFx0Ly8gZW1wdHkgdHJhaWxpbmcgZWxlbWVudHMgaGF2ZSB0byBiZSBvdmVyd3JpdHRlblxuXHRcdFx0XHRcdC8vIHRvIHByZXZlbnQgcmVzdWx0cyBzdWNoIGFzIC9mb28vL2JhclxuXHRcdFx0XHRcdHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtMV0gPSB2O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlZ21lbnRzLnB1c2godik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0c2VnbWVudHNbc2VnbWVudF0gPSB0cmltU2xhc2hlcyh2KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlZ21lbnRzLnNwbGljZShzZWdtZW50LCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYWJzb2x1dGUpIHtcblx0XHRcdHNlZ21lbnRzLnVuc2hpZnQoJycpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnBhdGgoc2VnbWVudHMuam9pbihzZXBhcmF0b3IpLCBidWlsZCk7XG5cdH07XG5cdHAuc2VnbWVudENvZGVkID0gZnVuY3Rpb24oc2VnbWVudCwgdiwgYnVpbGQpIHtcblx0XHR2YXIgc2VnbWVudHMsIGksIGw7XG5cblx0XHRpZiAodHlwZW9mIHNlZ21lbnQgIT09ICdudW1iZXInKSB7XG5cdFx0XHRidWlsZCA9IHY7XG5cdFx0XHR2ID0gc2VnbWVudDtcblx0XHRcdHNlZ21lbnQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2VnbWVudHMgPSB0aGlzLnNlZ21lbnQoc2VnbWVudCwgdiwgYnVpbGQpO1xuXHRcdFx0aWYgKCFpc0FycmF5KHNlZ21lbnRzKSkge1xuXHRcdFx0XHRzZWdtZW50cyA9IHNlZ21lbnRzICE9PSB1bmRlZmluZWQgPyBVUkkuZGVjb2RlKHNlZ21lbnRzKSA6IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoaSA9IDAsIGwgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRzZWdtZW50c1tpXSA9IFVSSS5kZWNvZGUoc2VnbWVudHNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWdtZW50cztcblx0XHR9XG5cblx0XHRpZiAoIWlzQXJyYXkodikpIHtcblx0XHRcdHYgPSAodHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHYgaW5zdGFuY2VvZiBTdHJpbmcpID8gVVJJLmVuY29kZSh2KSA6IHY7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHR2W2ldID0gVVJJLmVuY29kZSh2W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5zZWdtZW50KHNlZ21lbnQsIHYsIGJ1aWxkKTtcblx0fTtcblxuXHQvLyBtdXRhdGluZyBxdWVyeSBzdHJpbmdcblx0dmFyIHEgPSBwLnF1ZXJ5O1xuXHRwLnF1ZXJ5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodiA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRcdHZhciByZXN1bHQgPSB2LmNhbGwodGhpcywgZGF0YSk7XG5cdFx0XHR0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KHJlc3VsdCB8fCBkYXRhLCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSBlbHNlIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KHYsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHEuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG5cdFx0fVxuXHR9O1xuXHRwLnNldFF1ZXJ5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGJ1aWxkKSB7XG5cdFx0dmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cblx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnIHx8IG5hbWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcblx0XHRcdGRhdGFbbmFtZV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBudWxsO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuXHRcdFx0XHRpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuXHRcdFx0XHRcdGRhdGFba2V5XSA9IG5hbWVba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlcicpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkoZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRidWlsZCA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5hZGRRdWVyeSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBidWlsZCkge1xuXHRcdHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFVSSS5hZGRRdWVyeShkYXRhLCBuYW1lLCB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlKTtcblx0XHR0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KGRhdGEsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuXHRcdFx0YnVpbGQgPSB2YWx1ZTtcblx0XHR9XG5cblx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAucmVtb3ZlUXVlcnkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgYnVpbGQpIHtcblx0XHR2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRVUkkucmVtb3ZlUXVlcnkoZGF0YSwgbmFtZSwgdmFsdWUpO1xuXHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkoZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRidWlsZCA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5oYXNRdWVyeSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCB3aXRoaW5BcnJheSkge1xuXHRcdHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdHJldHVybiBVUkkuaGFzUXVlcnkoZGF0YSwgbmFtZSwgdmFsdWUsIHdpdGhpbkFycmF5KTtcblx0fTtcblx0cC5zZXRTZWFyY2ggPSBwLnNldFF1ZXJ5O1xuXHRwLmFkZFNlYXJjaCA9IHAuYWRkUXVlcnk7XG5cdHAucmVtb3ZlU2VhcmNoID0gcC5yZW1vdmVRdWVyeTtcblx0cC5oYXNTZWFyY2ggPSBwLmhhc1F1ZXJ5O1xuXG5cdC8vIHNhbml0aXppbmcgVVJMc1xuXHRwLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0XHRcdC5ub3JtYWxpemVQcm90b2NvbChmYWxzZSlcblx0XHRcdFx0Lm5vcm1hbGl6ZVBhdGgoZmFsc2UpXG5cdFx0XHRcdC5ub3JtYWxpemVRdWVyeShmYWxzZSlcblx0XHRcdFx0Lm5vcm1hbGl6ZUZyYWdtZW50KGZhbHNlKVxuXHRcdFx0XHQuYnVpbGQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0Lm5vcm1hbGl6ZVByb3RvY29sKGZhbHNlKVxuXHRcdFx0Lm5vcm1hbGl6ZUhvc3RuYW1lKGZhbHNlKVxuXHRcdFx0Lm5vcm1hbGl6ZVBvcnQoZmFsc2UpXG5cdFx0XHQubm9ybWFsaXplUGF0aChmYWxzZSlcblx0XHRcdC5ub3JtYWxpemVRdWVyeShmYWxzZSlcblx0XHRcdC5ub3JtYWxpemVGcmFnbWVudChmYWxzZSlcblx0XHRcdC5idWlsZCgpO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZVByb3RvY29sID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHRpZiAodHlwZW9mIHRoaXMuX3BhcnRzLnByb3RvY29sID09PSAnc3RyaW5nJykge1xuXHRcdFx0dGhpcy5fcGFydHMucHJvdG9jb2wgPSB0aGlzLl9wYXJ0cy5wcm90b2NvbC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZUhvc3RuYW1lID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdGlmICh0aGlzLmlzKCdJRE4nKSAmJiBwdW55Y29kZSkge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHB1bnljb2RlLnRvQVNDSUkodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzKCdJUHY2JykgJiYgSVB2Nikge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IElQdjYuYmVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5ub3JtYWxpemVQb3J0ID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHQvLyByZW1vdmUgcG9ydCBvZiBpdCdzIHRoZSBwcm90b2NvbCdzIGRlZmF1bHRcblx0XHRpZiAodHlwZW9mIHRoaXMuX3BhcnRzLnByb3RvY29sID09PSAnc3RyaW5nJyAmJiB0aGlzLl9wYXJ0cy5wb3J0ID09PSBVUkkuZGVmYXVsdFBvcnRzW3RoaXMuX3BhcnRzLnByb3RvY29sXSkge1xuXHRcdFx0dGhpcy5fcGFydHMucG9ydCA9IG51bGw7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAubm9ybWFsaXplUGF0aCA9IGZ1bmN0aW9uKGJ1aWxkKSB7XG5cdFx0dmFyIF9wYXRoID0gdGhpcy5fcGFydHMucGF0aDtcblx0XHRpZiAoIV9wYXRoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gVVJJLnJlY29kZVVyblBhdGgodGhpcy5fcGFydHMucGF0aCk7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcGFydHMucGF0aCA9PT0gJy8nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgX3dhc19yZWxhdGl2ZTtcblx0XHR2YXIgX2xlYWRpbmdQYXJlbnRzID0gJyc7XG5cdFx0dmFyIF9wYXJlbnQsIF9wb3M7XG5cblx0XHQvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHNcblx0XHRpZiAoX3BhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdF93YXNfcmVsYXRpdmUgPSB0cnVlO1xuXHRcdFx0X3BhdGggPSAnLycgKyBfcGF0aDtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgcmVsYXRpdmUgZmlsZXMgKGFzIG9wcG9zZWQgdG8gZGlyZWN0b3JpZXMpXG5cdFx0aWYgKF9wYXRoLnNsaWNlKC0zKSA9PT0gJy8uLicgfHwgX3BhdGguc2xpY2UoLTIpID09PSAnLy4nKSB7XG5cdFx0XHRfcGF0aCArPSAnLyc7XG5cdFx0fVxuXG5cdFx0Ly8gcmVzb2x2ZSBzaW1wbGVzXG5cdFx0X3BhdGggPSBfcGF0aFxuXHRcdFx0LnJlcGxhY2UoLyhcXC8oXFwuXFwvKSspfChcXC9cXC4kKS9nLCAnLycpXG5cdFx0XHQucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpO1xuXG5cdFx0Ly8gcmVtZW1iZXIgbGVhZGluZyBwYXJlbnRzXG5cdFx0aWYgKF93YXNfcmVsYXRpdmUpIHtcblx0XHRcdF9sZWFkaW5nUGFyZW50cyA9IF9wYXRoLnN1YnN0cmluZygxKS5tYXRjaCgvXihcXC5cXC5cXC8pKy8pIHx8ICcnO1xuXHRcdFx0aWYgKF9sZWFkaW5nUGFyZW50cykge1xuXHRcdFx0XHRfbGVhZGluZ1BhcmVudHMgPSBfbGVhZGluZ1BhcmVudHNbMF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVzb2x2ZSBwYXJlbnRzXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdF9wYXJlbnQgPSBfcGF0aC5pbmRleE9mKCcvLi4nKTtcblx0XHRcdGlmIChfcGFyZW50ID09PSAtMSkge1xuXHRcdFx0XHQvLyBubyBtb3JlIC4uLyB0byByZXNvbHZlXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fSBlbHNlIGlmIChfcGFyZW50ID09PSAwKSB7XG5cdFx0XHRcdC8vIHRvcCBsZXZlbCBjYW5ub3QgYmUgcmVsYXRpdmUsIHNraXAgaXRcblx0XHRcdFx0X3BhdGggPSBfcGF0aC5zdWJzdHJpbmcoMyk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRfcG9zID0gX3BhdGguc3Vic3RyaW5nKDAsIF9wYXJlbnQpLmxhc3RJbmRleE9mKCcvJyk7XG5cdFx0XHRpZiAoX3BvcyA9PT0gLTEpIHtcblx0XHRcdFx0X3BvcyA9IF9wYXJlbnQ7XG5cdFx0XHR9XG5cdFx0XHRfcGF0aCA9IF9wYXRoLnN1YnN0cmluZygwLCBfcG9zKSArIF9wYXRoLnN1YnN0cmluZyhfcGFyZW50ICsgMyk7XG5cdFx0fVxuXG5cdFx0Ly8gcmV2ZXJ0IHRvIHJlbGF0aXZlXG5cdFx0aWYgKF93YXNfcmVsYXRpdmUgJiYgdGhpcy5pcygncmVsYXRpdmUnKSkge1xuXHRcdFx0X3BhdGggPSBfbGVhZGluZ1BhcmVudHMgKyBfcGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0X3BhdGggPSBVUkkucmVjb2RlUGF0aChfcGF0aCk7XG5cdFx0dGhpcy5fcGFydHMucGF0aCA9IF9wYXRoO1xuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5ub3JtYWxpemVQYXRobmFtZSA9IHAubm9ybWFsaXplUGF0aDtcblx0cC5ub3JtYWxpemVRdWVyeSA9IGZ1bmN0aW9uKGJ1aWxkKSB7XG5cdFx0aWYgKHR5cGVvZiB0aGlzLl9wYXJ0cy5xdWVyeSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMucXVlcnkubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gbnVsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMucXVlcnkoVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZUZyYWdtZW50ID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHRpZiAoIXRoaXMuX3BhcnRzLmZyYWdtZW50KSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5mcmFnbWVudCA9IG51bGw7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAubm9ybWFsaXplU2VhcmNoID0gcC5ub3JtYWxpemVRdWVyeTtcblx0cC5ub3JtYWxpemVIYXNoID0gcC5ub3JtYWxpemVGcmFnbWVudDtcblxuXHRwLmlzbzg4NTkgPSBmdW5jdGlvbigpIHtcblx0XHQvLyBleHBlY3QgdW5pY29kZSBpbnB1dCwgaXNvODg1OSBvdXRwdXRcblx0XHR2YXIgZSA9IFVSSS5lbmNvZGU7XG5cdFx0dmFyIGQgPSBVUkkuZGVjb2RlO1xuXG5cdFx0VVJJLmVuY29kZSA9IGVzY2FwZTtcblx0XHRVUkkuZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLm5vcm1hbGl6ZSgpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRVUkkuZW5jb2RlID0gZTtcblx0XHRcdFVSSS5kZWNvZGUgPSBkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRwLnVuaWNvZGUgPSBmdW5jdGlvbigpIHtcblx0XHQvLyBleHBlY3QgaXNvODg1OSBpbnB1dCwgdW5pY29kZSBvdXRwdXRcblx0XHR2YXIgZSA9IFVSSS5lbmNvZGU7XG5cdFx0dmFyIGQgPSBVUkkuZGVjb2RlO1xuXG5cdFx0VVJJLmVuY29kZSA9IHN0cmljdEVuY29kZVVSSUNvbXBvbmVudDtcblx0XHRVUkkuZGVjb2RlID0gdW5lc2NhcGU7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMubm9ybWFsaXplKCk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdFVSSS5lbmNvZGUgPSBlO1xuXHRcdFx0VVJJLmRlY29kZSA9IGQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdHAucmVhZGFibGUgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgdXJpID0gdGhpcy5jbG9uZSgpO1xuXHRcdC8vIHJlbW92aW5nIHVzZXJuYW1lLCBwYXNzd29yZCwgYmVjYXVzZSB0aGV5IHNob3VsZG4ndCBiZSBkaXNwbGF5ZWQgYWNjb3JkaW5nIHRvIFJGQyAzOTg2XG5cdFx0dXJpLnVzZXJuYW1lKCcnKS5wYXNzd29yZCgnJykubm9ybWFsaXplKCk7XG5cdFx0dmFyIHQgPSAnJztcblx0XHRpZiAodXJpLl9wYXJ0cy5wcm90b2NvbCkge1xuXHRcdFx0dCArPSB1cmkuX3BhcnRzLnByb3RvY29sICsgJzovLyc7XG5cdFx0fVxuXG5cdFx0aWYgKHVyaS5fcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdGlmICh1cmkuaXMoJ3B1bnljb2RlJykgJiYgcHVueWNvZGUpIHtcblx0XHRcdFx0dCArPSBwdW55Y29kZS50b1VuaWNvZGUodXJpLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHRcdGlmICh1cmkuX3BhcnRzLnBvcnQpIHtcblx0XHRcdFx0XHR0ICs9ICc6JyArIHVyaS5fcGFydHMucG9ydDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dCArPSB1cmkuaG9zdCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh1cmkuX3BhcnRzLmhvc3RuYW1lICYmIHVyaS5fcGFydHMucGF0aCAmJiB1cmkuX3BhcnRzLnBhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdHQgKz0gJy8nO1xuXHRcdH1cblxuXHRcdHQgKz0gdXJpLnBhdGgodHJ1ZSk7XG5cdFx0aWYgKHVyaS5fcGFydHMucXVlcnkpIHtcblx0XHRcdHZhciBxID0gJyc7XG5cdFx0XHRmb3IgKHZhciBpID0gMCwgcXAgPSB1cmkuX3BhcnRzLnF1ZXJ5LnNwbGl0KCcmJyksIGwgPSBxcC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0dmFyIGt2ID0gKHFwW2ldIHx8ICcnKS5zcGxpdCgnPScpO1xuXHRcdFx0XHRxICs9ICcmJyArIFVSSS5kZWNvZGVRdWVyeShrdlswXSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSlcblx0XHRcdFx0XHQucmVwbGFjZSgvJi9nLCAnJTI2Jyk7XG5cblx0XHRcdFx0aWYgKGt2WzFdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRxICs9ICc9JyArIFVSSS5kZWNvZGVRdWVyeShrdlsxXSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSlcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC8mL2csICclMjYnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dCArPSAnPycgKyBxLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHR0ICs9IFVSSS5kZWNvZGVRdWVyeSh1cmkuaGFzaCgpLCB0cnVlKTtcblx0XHRyZXR1cm4gdDtcblx0fTtcblxuXHQvLyByZXNvbHZpbmcgcmVsYXRpdmUgYW5kIGFic29sdXRlIFVSTHNcblx0cC5hYnNvbHV0ZVRvID0gZnVuY3Rpb24oYmFzZSkge1xuXHRcdHZhciByZXNvbHZlZCA9IHRoaXMuY2xvbmUoKTtcblx0XHR2YXIgcHJvcGVydGllcyA9IFsncHJvdG9jb2wnLCAndXNlcm5hbWUnLCAncGFzc3dvcmQnLCAnaG9zdG5hbWUnLCAncG9ydCddO1xuXHRcdHZhciBiYXNlZGlyLCBpLCBwO1xuXG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVUk5zIGRvIG5vdCBoYXZlIGFueSBnZW5lcmFsbHkgZGVmaW5lZCBoaWVyYXJjaGljYWwgY29tcG9uZW50cycpO1xuXHRcdH1cblxuXHRcdGlmICghKGJhc2UgaW5zdGFuY2VvZiBVUkkpKSB7XG5cdFx0XHRiYXNlID0gbmV3IFVSSShiYXNlKTtcblx0XHR9XG5cblx0XHRpZiAoIXJlc29sdmVkLl9wYXJ0cy5wcm90b2NvbCkge1xuXHRcdFx0cmVzb2x2ZWQuX3BhcnRzLnByb3RvY29sID0gYmFzZS5fcGFydHMucHJvdG9jb2w7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3BhcnRzLmhvc3RuYW1lKSB7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZWQ7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgKHAgPSBwcm9wZXJ0aWVzW2ldKTsgaSsrKSB7XG5cdFx0XHRyZXNvbHZlZC5fcGFydHNbcF0gPSBiYXNlLl9wYXJ0c1twXTtcblx0XHR9XG5cblx0XHRpZiAoIXJlc29sdmVkLl9wYXJ0cy5wYXRoKSB7XG5cdFx0XHRyZXNvbHZlZC5fcGFydHMucGF0aCA9IGJhc2UuX3BhcnRzLnBhdGg7XG5cdFx0XHRpZiAoIXJlc29sdmVkLl9wYXJ0cy5xdWVyeSkge1xuXHRcdFx0XHRyZXNvbHZlZC5fcGFydHMucXVlcnkgPSBiYXNlLl9wYXJ0cy5xdWVyeTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHJlc29sdmVkLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygtMikgPT09ICcuLicpIHtcblx0XHRcdHJlc29sdmVkLl9wYXJ0cy5wYXRoICs9ICcvJztcblx0XHR9XG5cblx0XHRpZiAocmVzb2x2ZWQucGF0aCgpLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG5cdFx0XHRiYXNlZGlyID0gYmFzZS5kaXJlY3RvcnkoKTtcblx0XHRcdGJhc2VkaXIgPSBiYXNlZGlyID8gYmFzZWRpciA6IGJhc2UucGF0aCgpLmluZGV4T2YoJy8nKSA9PT0gMCA/ICcvJyA6ICcnO1xuXHRcdFx0cmVzb2x2ZWQuX3BhcnRzLnBhdGggPSAoYmFzZWRpciA/IChiYXNlZGlyICsgJy8nKSA6ICcnKSArIHJlc29sdmVkLl9wYXJ0cy5wYXRoO1xuXHRcdFx0cmVzb2x2ZWQubm9ybWFsaXplUGF0aCgpO1xuXHRcdH1cblxuXHRcdHJlc29sdmVkLmJ1aWxkKCk7XG5cdFx0cmV0dXJuIHJlc29sdmVkO1xuXHR9O1xuXHRwLnJlbGF0aXZlVG8gPSBmdW5jdGlvbihiYXNlKSB7XG5cdFx0dmFyIHJlbGF0aXZlID0gdGhpcy5jbG9uZSgpLm5vcm1hbGl6ZSgpO1xuXHRcdHZhciByZWxhdGl2ZVBhcnRzLCBiYXNlUGFydHMsIGNvbW1vbiwgcmVsYXRpdmVQYXRoLCBiYXNlUGF0aDtcblxuXHRcdGlmIChyZWxhdGl2ZS5fcGFydHMudXJuKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzJyk7XG5cdFx0fVxuXG5cdFx0YmFzZSA9IG5ldyBVUkkoYmFzZSkubm9ybWFsaXplKCk7XG5cdFx0cmVsYXRpdmVQYXJ0cyA9IHJlbGF0aXZlLl9wYXJ0cztcblx0XHRiYXNlUGFydHMgPSBiYXNlLl9wYXJ0cztcblx0XHRyZWxhdGl2ZVBhdGggPSByZWxhdGl2ZS5wYXRoKCk7XG5cdFx0YmFzZVBhdGggPSBiYXNlLnBhdGgoKTtcblxuXHRcdGlmIChyZWxhdGl2ZVBhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVVJJIGlzIGFscmVhZHkgcmVsYXRpdmUnKTtcblx0XHR9XG5cblx0XHRpZiAoYmFzZVBhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBhIFVSSSByZWxhdGl2ZSB0byBhbm90aGVyIHJlbGF0aXZlIFVSSScpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhcnRzLnByb3RvY29sID09PSBiYXNlUGFydHMucHJvdG9jb2wpIHtcblx0XHRcdHJlbGF0aXZlUGFydHMucHJvdG9jb2wgPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhcnRzLnVzZXJuYW1lICE9PSBiYXNlUGFydHMudXNlcm5hbWUgfHwgcmVsYXRpdmVQYXJ0cy5wYXNzd29yZCAhPT0gYmFzZVBhcnRzLnBhc3N3b3JkKSB7XG5cdFx0XHRyZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcblx0XHR9XG5cblx0XHRpZiAocmVsYXRpdmVQYXJ0cy5wcm90b2NvbCAhPT0gbnVsbCB8fCByZWxhdGl2ZVBhcnRzLnVzZXJuYW1lICE9PSBudWxsIHx8IHJlbGF0aXZlUGFydHMucGFzc3dvcmQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhcnRzLmhvc3RuYW1lID09PSBiYXNlUGFydHMuaG9zdG5hbWUgJiYgcmVsYXRpdmVQYXJ0cy5wb3J0ID09PSBiYXNlUGFydHMucG9ydCkge1xuXHRcdFx0cmVsYXRpdmVQYXJ0cy5ob3N0bmFtZSA9IG51bGw7XG5cdFx0XHRyZWxhdGl2ZVBhcnRzLnBvcnQgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcblx0XHR9XG5cblx0XHRpZiAocmVsYXRpdmVQYXRoID09PSBiYXNlUGF0aCkge1xuXHRcdFx0cmVsYXRpdmVQYXJ0cy5wYXRoID0gJyc7XG5cdFx0XHRyZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcblx0XHR9XG5cblx0XHQvLyBkZXRlcm1pbmUgY29tbW9uIHN1YiBwYXRoXG5cdFx0Y29tbW9uID0gVVJJLmNvbW1vblBhdGgocmVsYXRpdmVQYXRoLCBiYXNlUGF0aCk7XG5cblx0XHQvLyBJZiB0aGUgcGF0aHMgaGF2ZSBub3RoaW5nIGluIGNvbW1vbiwgcmV0dXJuIGEgcmVsYXRpdmUgVVJMIHdpdGggdGhlIGFic29sdXRlIHBhdGguXG5cdFx0aWYgKCFjb21tb24pIHtcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdHZhciBwYXJlbnRzID0gYmFzZVBhcnRzLnBhdGhcblx0XHRcdC5zdWJzdHJpbmcoY29tbW9uLmxlbmd0aClcblx0XHRcdC5yZXBsYWNlKC9bXlxcL10qJC8sICcnKVxuXHRcdFx0LnJlcGxhY2UoLy4qP1xcLy9nLCAnLi4vJyk7XG5cblx0XHRyZWxhdGl2ZVBhcnRzLnBhdGggPSAocGFyZW50cyArIHJlbGF0aXZlUGFydHMucGF0aC5zdWJzdHJpbmcoY29tbW9uLmxlbmd0aCkpIHx8ICcuLyc7XG5cblx0XHRyZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcblx0fTtcblxuXHQvLyBjb21wYXJpbmcgVVJJc1xuXHRwLmVxdWFscyA9IGZ1bmN0aW9uKHVyaSkge1xuXHRcdHZhciBvbmUgPSB0aGlzLmNsb25lKCk7XG5cdFx0dmFyIHR3byA9IG5ldyBVUkkodXJpKTtcblx0XHR2YXIgb25lX21hcCA9IHt9O1xuXHRcdHZhciB0d29fbWFwID0ge307XG5cdFx0dmFyIGNoZWNrZWQgPSB7fTtcblx0XHR2YXIgb25lX3F1ZXJ5LCB0d29fcXVlcnksIGtleTtcblxuXHRcdG9uZS5ub3JtYWxpemUoKTtcblx0XHR0d28ubm9ybWFsaXplKCk7XG5cblx0XHQvLyBleGFjdCBtYXRjaFxuXHRcdGlmIChvbmUudG9TdHJpbmcoKSA9PT0gdHdvLnRvU3RyaW5nKCkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIGV4dHJhY3QgcXVlcnkgc3RyaW5nXG5cdFx0b25lX3F1ZXJ5ID0gb25lLnF1ZXJ5KCk7XG5cdFx0dHdvX3F1ZXJ5ID0gdHdvLnF1ZXJ5KCk7XG5cdFx0b25lLnF1ZXJ5KCcnKTtcblx0XHR0d28ucXVlcnkoJycpO1xuXG5cdFx0Ly8gZGVmaW5pdGVseSBub3QgZXF1YWwgaWYgbm90IGV2ZW4gbm9uLXF1ZXJ5IHBhcnRzIG1hdGNoXG5cdFx0aWYgKG9uZS50b1N0cmluZygpICE9PSB0d28udG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIHF1ZXJ5IHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgsIGV2ZW4gaWYgdGhleSdyZSBwZXJtdXRlZFxuXHRcdGlmIChvbmVfcXVlcnkubGVuZ3RoICE9PSB0d29fcXVlcnkubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0b25lX21hcCA9IFVSSS5wYXJzZVF1ZXJ5KG9uZV9xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0dHdvX21hcCA9IFVSSS5wYXJzZVF1ZXJ5KHR3b19xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cblx0XHRmb3IgKGtleSBpbiBvbmVfbWFwKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwob25lX21hcCwga2V5KSkge1xuXHRcdFx0XHRpZiAoIWlzQXJyYXkob25lX21hcFtrZXldKSkge1xuXHRcdFx0XHRcdGlmIChvbmVfbWFwW2tleV0gIT09IHR3b19tYXBba2V5XSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghYXJyYXlzRXF1YWwob25lX21hcFtrZXldLCB0d29fbWFwW2tleV0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2hlY2tlZFtrZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGtleSBpbiB0d29fbWFwKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwodHdvX21hcCwga2V5KSkge1xuXHRcdFx0XHRpZiAoIWNoZWNrZWRba2V5XSkge1xuXHRcdFx0XHRcdC8vIHR3byBjb250YWlucyBhIHBhcmFtZXRlciBub3QgcHJlc2VudCBpbiBvbmVcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHQvLyBzdGF0ZVxuXHRwLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyA9IGZ1bmN0aW9uKHYpIHtcblx0XHR0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMgPSAhIXY7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0cC5lc2NhcGVRdWVyeVNwYWNlID0gZnVuY3Rpb24odikge1xuXHRcdHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UgPSAhIXY7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0cmV0dXJuIFVSSTtcbn0pKTsiLCJXb3JrZmxvdyA9IHt9XG5cbkBJbWFnZVNpZ24gPSB7fTtcblxuQFRyYWNlc0hhbmRsZXIgPSB7fTtcblxuQFRyYWNlc1RlbXBsYXRlID0ge307XG5cbkBJbnN0YW5jZWZvcm1UZW1wbGF0ZSA9IHt9O1xuXG5ASW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUgPSB7fTtcblxuQEluc3RhbmNlU2lnblRleHQgPSB7fVxuXG5AUmVsYXRlZEluc3RhbmNlcyA9IHt9XG5cbkBSZWxhdGVkUmVjb3JkcyA9IHt9XG5cbkBJbnN0YW5jZU1hY3JvID0ge2NvbnRleHQ6IHt9fVxuXG5AVHJhY2VzTWFuYWdlciA9IHt9O1xuXG5JbnN0YW5jZVNpZ25UZXh0LmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nID0gKGZpZWxkX2Zvcm11bGEpLT5cblx0cmV0dXJuIChmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3RyYWNlcy5cIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpID4gLTEgfHwgZmllbGRfZm9ybXVsYT8uaW5kZXhPZihcInt5aWppYW5sYW46XCIpID4gLTEgfHwgZmllbGRfZm9ybXVsYT8uaW5kZXhPZihcIntcXFwieWlqaWFubGFuXFxcIjpcIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwieyd5aWppYW5sYW4nOlwiKSA+IC0xKVxuXG5JbnN0YW5jZVNpZ25UZXh0LmluY2x1ZGVzT3BpbmlvbkZpZWxkID0gKGZvcm0sIGZvcm1fdmVyc2lvbiktPlxuXHRmaWVsZF9mb3JtdWxhcyA9IG5ldyBBcnJheSgpO1xuXG5cdF9mb3JtX3ZlcnNpb24gPSB7fVxuXG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdF9mb3JtX3ZlcnNpb24gPSB1dWZsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGRiLmZvcm1zLmZpbmRPbmUoe19pZDogZm9ybX0pLCBmb3JtX3ZlcnNpb24pXG5cdGVsc2Vcblx0XHRfZm9ybV92ZXJzaW9uID0gZGIuZm9ybV92ZXJzaW9ucy5maW5kT25lKHtfaWQ6IGZvcm1fdmVyc2lvbiwgZm9ybTogZm9ybX0pXG5cblx0ZmllbGRzID0gX2Zvcm1fdmVyc2lvbj8uZmllbGRzIHx8IFtdXG5cblx0ZmllbGRzLmZvckVhY2ggKGYpLT5cblx0XHRpZiBmLnR5cGUgPT0gJ3RhYmxlJ1xuXHRcdFx0Y29uc29sZS5sb2cgJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJ1xuXHRcdGVsc2UgaWYgZi50eXBlID09ICdzZWN0aW9uJ1xuXHRcdFx0Zj8uZmllbGRzPy5mb3JFYWNoIChmMSktPlxuXHRcdFx0XHRmaWVsZF9mb3JtdWxhcy5wdXNoIGYxLmZvcm11bGFcblx0XHRlbHNlXG5cdFx0XHRmaWVsZF9mb3JtdWxhcy5wdXNoIGYuZm9ybXVsYVxuXG5cdF8uc29tZSBmaWVsZF9mb3JtdWxhcywgKGZpZWxkX2Zvcm11bGEpLT5cblx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKVxuXG4iLCIgICAgICAgICAgICAgXG5cbldvcmtmbG93ID0ge307XG5cbnRoaXMuSW1hZ2VTaWduID0ge307XG5cbnRoaXMuVHJhY2VzSGFuZGxlciA9IHt9O1xuXG50aGlzLlRyYWNlc1RlbXBsYXRlID0ge307XG5cbnRoaXMuSW5zdGFuY2Vmb3JtVGVtcGxhdGUgPSB7fTtcblxudGhpcy5JbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZSA9IHt9O1xuXG50aGlzLkluc3RhbmNlU2lnblRleHQgPSB7fTtcblxudGhpcy5SZWxhdGVkSW5zdGFuY2VzID0ge307XG5cbnRoaXMuUmVsYXRlZFJlY29yZHMgPSB7fTtcblxudGhpcy5JbnN0YW5jZU1hY3JvID0ge1xuICBjb250ZXh0OiB7fVxufTtcblxudGhpcy5UcmFjZXNNYW5hZ2VyID0ge307XG5cbkluc3RhbmNlU2lnblRleHQuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcgPSBmdW5jdGlvbihmaWVsZF9mb3JtdWxhKSB7XG4gIHJldHVybiAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie3RyYWNlcy5cIikgOiB2b2lkIDApID4gLTEgfHwgKGZpZWxkX2Zvcm11bGEgIT0gbnVsbCA/IGZpZWxkX2Zvcm11bGEuaW5kZXhPZihcIntzaWduYXR1cmUudHJhY2VzLlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie3lpamlhbmxhbjpcIikgOiB2b2lkIDApID4gLTEgfHwgKGZpZWxkX2Zvcm11bGEgIT0gbnVsbCA/IGZpZWxkX2Zvcm11bGEuaW5kZXhPZihcIntcXFwieWlqaWFubGFuXFxcIjpcIikgOiB2b2lkIDApID4gLTEgfHwgKGZpZWxkX2Zvcm11bGEgIT0gbnVsbCA/IGZpZWxkX2Zvcm11bGEuaW5kZXhPZihcInsneWlqaWFubGFuJzpcIikgOiB2b2lkIDApID4gLTE7XG59O1xuXG5JbnN0YW5jZVNpZ25UZXh0LmluY2x1ZGVzT3BpbmlvbkZpZWxkID0gZnVuY3Rpb24oZm9ybSwgZm9ybV92ZXJzaW9uKSB7XG4gIHZhciBfZm9ybV92ZXJzaW9uLCBmaWVsZF9mb3JtdWxhcywgZmllbGRzO1xuICBmaWVsZF9mb3JtdWxhcyA9IG5ldyBBcnJheSgpO1xuICBfZm9ybV92ZXJzaW9uID0ge307XG4gIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICBfZm9ybV92ZXJzaW9uID0gdXVmbG93TWFuYWdlci5nZXRGb3JtVmVyc2lvbihkYi5mb3Jtcy5maW5kT25lKHtcbiAgICAgIF9pZDogZm9ybVxuICAgIH0pLCBmb3JtX3ZlcnNpb24pO1xuICB9IGVsc2Uge1xuICAgIF9mb3JtX3ZlcnNpb24gPSBkYi5mb3JtX3ZlcnNpb25zLmZpbmRPbmUoe1xuICAgICAgX2lkOiBmb3JtX3ZlcnNpb24sXG4gICAgICBmb3JtOiBmb3JtXG4gICAgfSk7XG4gIH1cbiAgZmllbGRzID0gKF9mb3JtX3ZlcnNpb24gIT0gbnVsbCA/IF9mb3JtX3ZlcnNpb24uZmllbGRzIDogdm9pZCAwKSB8fCBbXTtcbiAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZikge1xuICAgIHZhciByZWY7XG4gICAgaWYgKGYudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdpZ25vcmUgb3BpbmlvbiBmaWVsZCBpbiB0YWJsZScpO1xuICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgIHJldHVybiBmICE9IG51bGwgPyAocmVmID0gZi5maWVsZHMpICE9IG51bGwgPyByZWYuZm9yRWFjaChmdW5jdGlvbihmMSkge1xuICAgICAgICByZXR1cm4gZmllbGRfZm9ybXVsYXMucHVzaChmMS5mb3JtdWxhKTtcbiAgICAgIH0pIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmllbGRfZm9ybXVsYXMucHVzaChmLmZvcm11bGEpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBfLnNvbWUoZmllbGRfZm9ybXVsYXMsIGZ1bmN0aW9uKGZpZWxkX2Zvcm11bGEpIHtcbiAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKTtcbiAgfSk7XG59O1xuIiwiZGIuaW5zdGFuY2VfdGFza3MgPSBuZXcgTWV0ZW9yLkNvbGxlY3Rpb24oJ2luc3RhbmNlX3Rhc2tzJylcblxuZGIuaW5zdGFuY2VfdGFza3MuX3NpbXBsZVNjaGVtYSA9IG5ldyBTaW1wbGVTY2hlbWFcbiAgICBpbnN0YW5jZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgdHJhY2U6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGlzX2ZpbmlzaGVkOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICB1c2VyOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICB1c2VyX25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGhhbmRsZXI6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGhhbmRsZXJfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcl9vcmdhbml6YXRpb246XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBzdGFydF9kYXRlOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgZHVlX2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBpc19yZWFkOlxuICAgICAgICB0eXBlOiBCb29sZWFuXG4gICAgaXNfZXJyb3I6XG4gICAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICB2YWx1ZXM6XG4gICAgICAgIHR5cGU6IE9iamVjdFxuICAgIGRlYWRsaW5lOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgcmVtaW5kX2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICByZW1pbmRlZF9jb3VudDpcbiAgICAgICAgdHlwZTogTnVtYmVyXG4gICAgcmVhZF9kYXRlOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIG1vZGlmaWVkOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgbW9kaWZpZWRfYnk6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHNpZ25fc2hvdzpcbiAgICAgICAgdHlwZTogQm9vbGVhblxuICAgIGp1ZGdlOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBuZXh0X3N0ZXBzOlxuICAgICAgICB0eXBlOiBBcnJheVxuICAgIFwibmV4dF9zdGVwcy4kXCI6XG4gICAgICAgIHR5cGU6IE9iamVjdFxuICAgIFwibmV4dF9zdGVwcy4kLnN0ZXBcIjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgXCJuZXh0X3N0ZXBzLiQudXNlcnNcIjpcbiAgICAgICAgdHlwZTogW1N0cmluZ11cbiAgICBmaW5pc2hfZGF0ZTpcbiAgICAgICAgdHlwZTogRGF0ZVxuICAgIGNvc3RfdGltZTpcbiAgICAgICAgdHlwZTogTnVtYmVyXG4gICAgc3BhY2U6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGluc3RhbmNlX25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHN1Ym1pdHRlcjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3VibWl0dGVyX25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGFwcGxpY2FudDpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgYXBwbGljYW50X25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGFwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3VibWl0X2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBmbG93OlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBmbG93X25hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGZvcm06XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHN0ZXA6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHN0ZXBfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgY2F0ZWdvcnlfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaW5zdGFuY2Vfc3RhdGU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgZm9yd2FyZF9mcm9tX2luc3RhbmNlOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBrZXl3b3JkczpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaXNfYXJjaGl2ZWQ6XG4gICAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICBjYXRlZ29yeTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4iLCJkYi5hdXRoX3Rva2VucyA9IG5ldyBNZXRlb3IuQ29sbGVjdGlvbignYXV0aF90b2tlbnMnKSIsIm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIilcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlID0ge307XG5cblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluc3RhbmNlX2F0dGFjaG1lbnQgPSBcIlwiXCJcblx0PHRyPlxuXHRcdDx0ZCBjbGFzcz1cImlucy1hdHRhY2gtdmlld1wiPlxuXHRcdFx0PGEgaHJlZj1cInt7aW5zX2F0dGFjaF9kb3dubG9hZF91cmwgX2lkIGFic29sdXRlfX1cIiBjbGFzcz1cImluc19hdHRhY2hfaHJlZlwiIHRhcmdldD1cIl9wYXJlbnRcIiBkYXRhLW5hbWU9XCJ7e3RoaXMubmFtZX19XCIgZGF0YS10eXBlPVwie3t0aGlzLm9yaWdpbmFsLnR5cGV9fVwiIGRhdGEtaWQ9XCJ7e19pZH19XCI+e3t0aGlzLm5hbWV9fTwvYT5cblx0XHQ8L3RkPlxuXHQ8L3RyPlxuXCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5hZlNlbGVjdFVzZXJSZWFkID0gXCJcIlwiXG5cdDxkaXYgY2xhc3M9J3NlbGVjdFVzZXIgZm9ybS1jb250cm9sIGluc19hcHBsaWNhbnQnPnt7dmFsdWV9fTwvZGl2PlxuXCJcIlwiXG5cblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmRm9ybUdyb3VwUmVhZCA9IFwiXCJcIlxuXHQ8ZGl2IGNsYXNzPSdmb3JtLWdyb3VwJz5cblx0XHR7eyN3aXRoIGdldEZpZWxkIHRoaXMubmFtZX19XG5cdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VjdGlvbid9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9J3NlY3Rpb24gY2FsbG91dCBjYWxsb3V0LWRlZmF1bHQnPlxuXHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Zl9sYWJlbCB0aGlzfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0PHA+e3t7ZGVzY3JpcHRpb259fX08L3A+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndGFibGUnfX1cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdCBzdGVlZG9zLXRhYmxlXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzowcHg7XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz0nY29udHJvbC1sYWJlbCc+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3tkZXNjcmlwdGlvbn19fTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJyZWFkb25seS10YWJsZVwiIHN0eWxlPVwicGFkZGluZzowcHg7b3ZlcmZsb3cteDphdXRvO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHR5cGU9J3RhYmxlJyBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWNvbmRlbnNlZCBhdXRvZm9ybS10YWJsZVwiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBweDsnIHt7dGhpcy5hdHRzfX0gaWQ9XCJ7e3RoaXMuY29kZX19VGFibGVcIiBuYW1lPVwie3t0aGlzLmNvZGV9fVwiIGRhdGEtc2NoZW1hLWtleT1cInt7dGhpcy5uYW1lfX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoZWFkIGlkPVwie3t0aGlzLm5hbWV9fVRoZWFkXCIgbmFtZT1cInt7dGhpcy5uYW1lfX1UaGVhZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlVGhlYWQgdGhpc319fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RoZWFkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHkgaWQ9XCJ7e3RoaXMubmFtZX19VGJvZHlcIiBuYW1lPVwie3t0aGlzLm5hbWV9fVRib2R5XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3t7Z2V0VGFibGVCb2R5IHRoaXN9fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0e3sjaWYgc2hvd0xhYmVsfX1cblx0XHRcdFx0XHRcdDxsYWJlbD57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XG5cdFx0XHRcdHt7L2lmfX1cblx0XHRcdHt7L2lmfX1cblx0XHR7ey93aXRofX1cblx0PC9kaXY+XG5cIlwiXCJcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmRm9ybUdyb3VwID0gXCJcIlwiXG5cblx0e3sjd2l0aCBnZXRGaWVsZCB0aGlzLm5hbWV9fVxuXHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3NlY3Rpb24nfX1cblx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdzZWN0aW9uIGNhbGxvdXQgY2FsbG91dC1kZWZhdWx0Jz5cblx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2ZfbGFiZWwgdGhpc319PC9sYWJlbD5cblx0XHRcdFx0XHRcdDxwPnt7e2Rlc2NyaXB0aW9ufX19PC9wPlxuXHRcdFx0XHRcdDwvZGl2PlxuICBcdFx0XHRcdDwvZGl2PlxuXHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3RhYmxlJ319XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHQgc3RlZWRvcy10YWJsZVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MHB4O1wiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiID5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9J2NvbnRyb2wtbGFiZWwnPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t7ZGVzY3JpcHRpb259fX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicmVhZG9ubHktdGFibGVcIiBzdHlsZT1cInBhZGRpbmc6MHB4O292ZXJmbG93LXg6YXV0bztcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB0eXBlPSd0YWJsZScgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgYXV0b2Zvcm0tdGFibGVcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTowcHg7JyB7e3RoaXMuYXR0c319IGlkPVwie3t0aGlzLmNvZGV9fVRhYmxlXCIgbmFtZT1cInt7dGhpcy5jb2RlfX1cIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e3RoaXMubmFtZX19XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0aGVhZCBpZD1cInt7dGhpcy5uYW1lfX1UaGVhZFwiIG5hbWU9XCJ7e3RoaXMubmFtZX19VGhlYWRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZVRoZWFkIHRoaXN9fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5IGlkPVwie3t0aGlzLm5hbWV9fVRib2R5XCIgbmFtZT1cInt7dGhpcy5uYW1lfX1UYm9keVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlQm9keSB0aGlzfX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdpbnB1dCd9fVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBkYXRhLXJlcXVpcmVkPVwie3sjaWYgaXNfcmVxdWlyZWR9fXRydWV7ey9pZn19XCI+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0e3sjaWYgaXNfdGV4dGFyZWF9fVxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XG5cdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0e3sjdW5sZXNzIGlzX3RleHRhcmVhfX1cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHR7ey91bmxlc3N9fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdudW1iZXInfX1cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlJ319XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIHRpdGxlPVwie3tnZXRMYWJlbCBjb2RlfX1cIiBuYW1lPVwie3tjb2RlfX1cIiBkYXRhLXR5cGU9XCJkYXRlXCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlVGltZSd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS10eXBlPSdkYXRldGltZScgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdwYXNzd29yZCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgdGl0bGU9XCJ7e2dldExhYmVsIGNvZGV9fVwiIG5hbWU9XCJ7e2NvZGV9fVwiIGRhdGEtc2NoZW1hLWtleT1cInt7Z2V0TGFiZWwgY29kZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VsZWN0J319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzZWxlY3QgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNlYWNoIG9wdGlvbnMgdGhpc319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cInt7dmFsdWV9fVwiPnt7bGFiZWx9fTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc2VsZWN0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdyYWRpbyd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWYtcmFkaW8tZ3JvdXBcIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cbiAgICAgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwicmFkaW8taW5saW5lIGZpeC1pbmRlbnRcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJ7e3ZhbHVlfX1cIiBuYW1lPVwie3suLi9jb2RlfX1cIiBjbGFzcz1cInJhZGlvLWlubGluZSBmaXgtaW5kZW50XCI+IHt7bGFiZWx9fTwvbGFiZWw+XG4gICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cbiAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnbXVsdGlTZWxlY3QnfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFmLWNoZWNrYm94LWdyb3VwXCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwie3t2YWx1ZX19XCIgbmFtZT1cInt7Li4vY29kZX19XCIgY2xhc3M9XCJjaGVja2JveC1pbmxpbmUgZml4LWluZGVudFwiPiB7e2xhYmVsfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3VybCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInVybFwiIHRpdGxlPVwie3tnZXRMYWJlbCBjb2RlfX1cIiBuYW1lPVwie3tjb2RlfX1cIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ2VtYWlsJ319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiZW1haWxcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdjaGVja2JveCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIG5hbWU9XCJ7e2NvZGV9fVwiIGNsYXNzPVwiY2hlY2tib3gtaW5saW5lIGZpeC1pbmRlbnRcIj48L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0e3svaWZ9fVxuXHRcdHt7L3dpdGh9fVxuXCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUgPSAodGVtcGFsdGVOYW1lLCBzdGVlZG9zRGF0YSkgLT5cblx0dGVtcGxhdGUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGVbdGVtcGFsdGVOYW1lXVxuXG5cdHRlbXBsYXRlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0dGVtcGxhdGVSZW5kZXJGdW5jdGlvbiA9IGV2YWwodGVtcGxhdGVDb21waWxlZCk7XG5cblx0VGVtcGxhdGVbdGVtcGFsdGVOYW1lXSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZSh0ZW1wYWx0ZU5hbWUsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb24pO1xuXHRUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGVbdGVtcGFsdGVOYW1lXS5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZUluc3RhbmNlU2lnblRleHQgPSAoc3RlZWRvc0RhdGEpLT5cblx0aW5zdGFuY2VTaWduVGV4dEh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS9pbnN0YW5jZV9zaWduX3RleHQuaHRtbCcpXG5cblx0aW5zdGFuY2VTaWduVGV4dENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVNpZ25UZXh0SHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdGluc3RhbmNlU2lnblRleHRSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkKTtcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW5zdGFuY2VTaWduVGV4dFwiLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24pO1xuXHRUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzIEluc3RhbmNlU2lnblRleHQuaGVscGVyc1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduID0gKHN0ZWVkb3NEYXRhKSAtPlxuXHRpbWFnZVNpZ25IdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW1hZ2Vfc2lnbi5odG1sJylcblx0aW1hZ2VTaWduQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKGltYWdlU2lnbkh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblx0aW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24gPSBldmFsKGltYWdlU2lnbkNvbXBpbGVkKTtcblx0VGVtcGxhdGUuaW1hZ2VTaWduID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW1hZ2VTaWduXCIsIGltYWdlU2lnblJlbmRlckZ1bmN0aW9uKTtcblx0VGVtcGxhdGUuaW1hZ2VTaWduLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW1hZ2VTaWduLmhlbHBlcnMgSW1hZ2VTaWduLmhlbHBlcnNcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZVRyYWNlc0hhbmxkZXIgPSAoc3RlZWRvc0RhdGEpIC0+XG5cdHRyYWNlc0hhbmxkZXJIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX2hhbmRsZXIuaHRtbCcpXG5cdHRyYWNlc0hhbmxkZXJDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodHJhY2VzSGFubGRlckh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblx0dHJhY2VzSGFubGRlclJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZXNIYW5sZGVyQ29tcGlsZWQpO1xuXHRUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlciA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImluc3RhbmNlX3RyYWNlc19oYW5kbGVyXCIsIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbik7XG5cdFRlbXBsYXRlLmluc3RhbmNlX3RyYWNlc19oYW5kbGVyLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIuaGVscGVycyBUcmFjZXNIYW5kbGVyLmhlbHBlcnNcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5pdCA9IChzdGVlZG9zRGF0YSkgLT5cblx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmU2VsZWN0VXNlclJlYWRcIiwgc3RlZWRvc0RhdGEpO1xuXG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZkZvcm1Hcm91cFwiLCBzdGVlZG9zRGF0YSk7XG5cblx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmRm9ybUdyb3VwUmVhZFwiLCBzdGVlZG9zRGF0YSk7XG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJpbnN0YW5jZV9hdHRhY2htZW50XCIsIHthYnNvbHV0ZTogc3RlZWRvc0RhdGEuYWJzb2x1dGV9KTtcblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduKHN0ZWVkb3NEYXRhKVxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVUcmFjZXNIYW5sZGVyKHN0ZWVkb3NEYXRhKTtcblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dChzdGVlZG9zRGF0YSlcblxuZ2V0TGlua1RleHQgPSAoaXRlbSwgbGFiZWwsIGRldGFpbF91cmwpLT5cblx0aWYgZGV0YWlsX3VybFxuXHRcdGRldGFpbF91cmwgPSBkZXRhaWxfdXJsLnJlcGxhY2UoXCJ7X2lkfVwiLCBpdGVtLl9pZClcblx0XHRpZiAhL15odHRwKHM/KTpcXC9cXC8vLnRlc3QoZGV0YWlsX3VybClcblx0XHRcdGRldGFpbF91cmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKGRldGFpbF91cmwpXG5cdFx0cmV0dXJuICc8YSBocmVmPVwiJytkZXRhaWxfdXJsKydcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nK2xhYmVsKyc8L2E+Jztcblx0ZWxzZVxuXHRcdHJldHVybiBsYWJlbFxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgPSAodmFsdWUsIGZpZWxkLCBsb2NhbGUsIHV0Y09mZnNldCkgLT5cblx0aWYgIXZhbHVlICYmIHZhbHVlICE9IGZhbHNlXG5cdFx0cmV0dXJuICcnXG5cdGlmIFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xXG5cdFx0ZmllbGRPcHRpb25zID0gZmllbGQub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAgKG4pLT5cblx0XHRcdGl0ZW1TcGxpdHMgPSBuLnNwbGl0KFwiOlwiKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG5cdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cblx0XHRcdH1cblx0c3dpdGNoIGZpZWxkLnR5cGVcblx0XHR3aGVuICdlbWFpbCdcblx0XHRcdHZhbHVlID0gaWYgdmFsdWUgdGhlbiAnPGEgaHJlZj1cXCdtYWlsdG86JyArIHZhbHVlICsgJ1xcJz4nICsgdmFsdWUgKyAnPC9hPicgZWxzZSAnJ1xuXHRcdHdoZW4gJ3VybCdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmIHZhbHVlLmluZGV4T2YoXCJodHRwXCIpID09IDBcblx0XHRcdFx0XHR0cnlcblx0XHRcdFx0XHRcdHZhbHVlID0gXCI8YSBocmVmPSdcIiArIGVuY29kZVVSSSh2YWx1ZSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgdmFsdWUgKyBcIjwvYT5cIjtcblx0XHRcdFx0XHRjYXRjaCBlXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR2YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9ICcnXG5cdFx0d2hlbiAnZ3JvdXAnXG5cdFx0XHRpZiBmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlPy5nZXRQcm9wZXJ0eShcImZ1bGxuYW1lXCIpLnRvU3RyaW5nKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZnVsbG5hbWVcblx0XHR3aGVuICd1c2VyJ1xuXHRcdFx0aWYgZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8ubmFtZVxuXHRcdHdoZW4gJ3Bhc3N3b3JkJ1xuXHRcdFx0dmFsdWUgPSAnKioqKioqJ1xuXHRcdHdoZW4gJ2NoZWNrYm94J1xuXHRcdFx0aWYgdmFsdWUgJiYgdmFsdWUgIT0gJ2ZhbHNlJ1xuXHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiLCB7fSwgbG9jYWxlKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X25vXCIsIHt9LCBsb2NhbGUpXG5cdFx0d2hlbiAnZGF0ZVRpbWUnXG5cdFx0XHRpZiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT0gMTZcblx0XHRcdFx0dCA9IHZhbHVlLnNwbGl0KFwiVFwiKVxuXHRcdFx0XHR0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuXHRcdFx0XHR0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuXG5cdFx0XHRcdHllYXIgPSB0MFswXTtcblx0XHRcdFx0bW9udGggPSB0MFsxXTtcblx0XHRcdFx0ZGF0ZSA9IHQwWzJdO1xuXHRcdFx0XHRob3VycyA9IHQxWzBdO1xuXHRcdFx0XHRzZWNvbmRzID0gdDFbMV07XG5cblx0XHRcdFx0dmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuXG5cdFx0XHR2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlKHZhbHVlLCB1dGNPZmZzZXQpO1xuXHRcdHdoZW4gJ2lucHV0J1xuXHRcdFx0aWYgZmllbGQuaXNfdGV4dGFyZWFcblx0XHRcdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdFx0bWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpXG5cdFx0XHRcdHZhbHVlID0gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKHZhbHVlKSlcblx0XHR3aGVuICdzZWxlY3QnXG5cdFx0XHRzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKChpdGVtKSAtPiByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZSlcblx0XHRcdGlmIHNlbGVjdGVkT3B0aW9uXG5cdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWxcblx0XHR3aGVuICdyYWRpbydcblx0XHRcdHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoKGl0ZW0pIC0+IHJldHVybiBpdGVtLnZhbHVlID09IHZhbHVlKVxuXHRcdFx0aWYgc2VsZWN0ZWRPcHRpb25cblx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZE9wdGlvbi5sYWJlbFxuXHRcdHdoZW4gJ211bHRpU2VsZWN0J1xuXHRcdFx0c3BsaXRlZFZhbHVlcyA9IHZhbHVlLnNwbGl0KFwiLFwiKVxuXHRcdFx0c2VsZWN0ZWRPcHRpb25zID0gZmllbGRPcHRpb25zLmZpbHRlcigoaXRlbSkgLT4gcmV0dXJuIHNwbGl0ZWRWYWx1ZXMuaW5kZXhPZihpdGVtLnZhbHVlKSA+IC0xKVxuXHRcdFx0aWYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFxuXHRcdFx0XHR2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoKGl0ZW0pIC0+IHJldHVybiBpdGVtLmxhYmVsKS5qb2luKFwiLFwiKVxuXHRcdHdoZW4gJ251bWJlcidcblx0XHRcdGlmIHZhbHVlIG9yIHZhbHVlID09IDBcblx0XHRcdFx0aWYgZmllbGQuaXNfcGVyY2VudFxuXHRcdFx0XHRcdHZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcgdmFsdWUsIGZpZWxkLmRpZ2l0c1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dmFsdWUgPSBTdGVlZG9zLm51bWJlclRvU3RyaW5nIHZhbHVlLCBmaWVsZC5kaWdpdHNcblx0XHR3aGVuICdvZGF0YSdcblx0XHRcdGRldGFpbF91cmwgPSBmaWVsZC5kZXRhaWxfdXJsXG5cdFx0XHRpZiBmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9IF8ubWFwIHZhbHVlLCAoaXRlbSktPlxuXHRcdFx0XHRcdHJldHVybiBnZXRMaW5rVGV4dChpdGVtLCBpdGVtWydAbGFiZWwnXSwgZGV0YWlsX3VybClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSBnZXRMaW5rVGV4dCh2YWx1ZSwgdmFsdWVbJ0BsYWJlbCddLCBkZXRhaWxfdXJsKVxuXHRcdHdoZW4gJ2ltYWdlJ1xuXHRcdFx0aWYgZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0dmFsdWUgPSBfLm1hcCB2YWx1ZSwgKGl0ZW0pLT5cblx0XHRcdFx0XHRyZXR1cm4gJzxkaXYgY2xhc3M9XCJhbnRkLUltYWdlQ29udHJvbC1pdGVtIGlzLXVwbG9hZGVkXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZSBhbnRkLUltYWdlLS10aHVtYiBhbnRkLUltYWdlQ29udHJvbC1pbWFnZVwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYldyYXBcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYlwiPjxpbWcgY2xhc3M9XCJhbnRkLUltYWdlLWltYWdlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiL2FwaS9maWxlcy9pbWFnZXMvJytpdGVtKydcIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4nXG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSAnPGRpdiBjbGFzcz1cImFudGQtSW1hZ2VDb250cm9sLWl0ZW0gaXMtdXBsb2FkZWRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlIGFudGQtSW1hZ2UtLXRodW1iIGFudGQtSW1hZ2VDb250cm9sLWltYWdlXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iV3JhcFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iXCI+PGltZyBjbGFzcz1cImFudGQtSW1hZ2UtaW1hZ2VcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIvYXBpL2ZpbGVzL2ltYWdlcy8nK3ZhbHVlKydcIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4nXG5cdFx0d2hlbiAnZmlsZSdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmICFmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHRcdHZhbHVlID0gW3ZhbHVlXVxuXHRcdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0XHRyZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxL2Nmc19maWxlc19maWxlcmVjb3JkP2ZpbHRlcnM9W1tcIl9pZFwiLFwiaW5cIiwgJytKU09OLnN0cmluZ2lmeSh2YWx1ZSkrJ11dJmZpZWxkcz1bXCJfaWRcIixcIm9yaWdpbmFsXCJdJywge2FzeW5jOmZhbHNlfSlcblx0XHRcdFx0XHRyZWNvcmRzID0gcmVzLmRhdGEuaXRlbXNcblx0XHRcdFx0ZWxzZSBpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0XHRyZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKFwiY2ZzX2ZpbGVzX2ZpbGVyZWNvcmRcIiwgeyBmaWx0ZXJzOiBbW1wiX2lkXCIsICdpbicsIHZhbHVlXV0sIGZpZWxkczogW1wiX2lkXCIsIFwib3JpZ2luYWxcIl0gfSk7XG5cblx0XHRcdFx0dmFsdWUgPSBfLm1hcCByZWNvcmRzLCAoaXRlbSktPlxuXHRcdFx0XHRcdGZpbGVOYW1lID0gaXRlbS5vcmlnaW5hbC5uYW1lO1xuXHRcdFx0XHRcdGZpbGVVcmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKCcvYXBpL2ZpbGVzL2ZpbGVzLycraXRlbS5faWQpO1xuXHRcdFx0XHRcdGZpbGVQcmV2aWV3SHRtbCA9ICcnO1xuXHRcdFx0XHRcdGlmIFtcIi5wZGZcIiwgXCIuanBnXCIsIFwiLmpwZWdcIiwgXCIucG5nXCIsIFwiLmdpZlwiXS5pbmRleE9mKGZpbGVOYW1lLnNsaWNlKC00KSkgPiAtMVxuXHRcdFx0XHRcdFx0ZmlsZVByZXZpZXdIdG1sID0gXCImZW5zcDs8YSBocmVmPScje2ZpbGVVcmx9JyB0YXJnZXQ9J19ibGFuaycgY2xhc3M9J2FudGQtTGluayc+PHNwYW4gY2xhc3M9J2FudGQtVHBsRmllbGQnPjxzcGFuPumihOiniDwvc3Bhbj48L3NwYW4+PC9hPlwiXG5cdFx0XHRcdFx0cmV0dXJuIFwiPGRpdj48YSBocmVmPScje2ZpbGVVcmwrJz9kb3dubG9hZD10cnVlJ30nIHRhcmdldD0nX2JsYW5rJz4je2ZpbGVOYW1lfTwvYT4gI3tmaWxlUHJldmlld0h0bWwgPyBmaWxlUHJldmlld0h0bWwgOiAnJ308L2Rpdj5cIlxuXG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcblx0XHR3aGVuICdsb29rdXAnXG5cdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRpZiAhZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0XHR2YWx1ZSA9IFt2YWx1ZV1cblx0XHRcdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRcdFx0dWlTY2hlbWEgPSBDcmVhdG9yLmdldE9iamVjdChmaWVsZC5yZWZlcmVuY2VfdG8pXG5cdFx0XHRcdFx0bmFtZUZpZWxkID0gdWlTY2hlbWE/Lk5BTUVfRklFTERfS0VZIHx8ICduYW1lJ1xuXHRcdFx0XHRcdHJlcyA9IFN0ZWVkb3MuYXV0aFJlcXVlc3QoJy9hcGkvdjEvJytmaWVsZC5yZWZlcmVuY2VfdG8rJz9maWx0ZXJzPVtbXCInKyhmaWVsZC5yZWZlcmVuY2VfdG9fZmllbGQgfHwgJ19pZCcpKydcIixcImluXCIsICcrSlNPTi5zdHJpbmdpZnkodmFsdWUpKyddXSZmaWVsZHM9W1wiX2lkXCIsXCInK25hbWVGaWVsZCsnXCJdJywge2FzeW5jOmZhbHNlfSlcblx0XHRcdFx0XHRyZWNvcmRzID0gcmVzLmRhdGEuaXRlbXNcblx0XHRcdFx0ZWxzZSBpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0XHRuYW1lRmllbGQgPSBTdGVlZG9zLmdldE9iamVjdE5hbWVGaWVsZEtleShmaWVsZC5yZWZlcmVuY2VfdG8pO1xuXHRcdFx0XHRcdHJlY29yZHMgPSBTdGVlZG9zLm9iamVjdEZpbmQoZmllbGQucmVmZXJlbmNlX3RvLCB7IGZpbHRlcnM6IFtbKGZpZWxkLnJlZmVyZW5jZV90b19maWVsZCB8fCAnX2lkJyksICdpbicsIHZhbHVlXV0sIGZpZWxkczogW1wiX2lkXCIsIG5hbWVGaWVsZF0gfSk7XG5cdFx0XHRcdHZhbHVlID0gXy5tYXAgcmVjb3JkcywgKGl0ZW0pLT5cblx0XHRcdFx0XHRyZXR1cm4gXCI8YSBocmVmPScje1N0ZWVkb3MuYWJzb2x1dGVVcmwoJy9hcHAvLS8nK2ZpZWxkLnJlZmVyZW5jZV90bysnL3ZpZXcvJytpdGVtLl9pZCl9JyB0YXJnZXQ9J19ibGFuayc+I3tpdGVtW25hbWVGaWVsZF19PC9hPlwiXG5cblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5qb2luKFwiICwgXCIpO1x0XG5cdFx0d2hlbiAnaHRtbCdcblx0XHRcdHZhbHVlID0gaWYgdmFsdWUgdGhlbiBcIjxkaXYgY2xhc3M9XFxcInN0ZWVkb3MtaHRtbFxcXCI+I3t2YWx1ZX08L2Rpdj5cIiBlbHNlICcnXG5cblx0cmV0dXJuIHZhbHVlO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwgPSAoZmllbGRzLCBjb2RlKSAtPlxuXHRmaWVsZCA9IGZpZWxkcy5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCBjb2RlKVxuXHRpZiBmaWVsZFxuXHRcdGlmIGZpZWxkLm5hbWVcblx0XHRcdHJldHVybiBmaWVsZC5uYW1lXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGZpZWxkLmNvZGVcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbiA9IChpbnN0YW5jZSktPlxuXHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnN0YW5jZS5mb3JtKTtcblxuXHRmb3JtX3ZlcnNpb24gPSB7fVxuXG5cdGZvcm1fZmllbGRzID0gW107XG5cblx0aWYgZm9ybS5jdXJyZW50Ll9pZCA9PSBpbnN0YW5jZS5mb3JtX3ZlcnNpb25cblx0XHRmb3JtX3ZlcnNpb24gPSBmb3JtLmN1cnJlbnRcblx0ZWxzZVxuXHRcdGZvcm1fdmVyc2lvbiA9IF8ud2hlcmUoZm9ybS5oaXN0b3J5cywge19pZDogaW5zdGFuY2UuZm9ybV92ZXJzaW9ufSlbMF1cblxuXHRmb3JtX3ZlcnNpb24uZmllbGRzLmZvckVhY2ggKGZpZWxkKS0+XG5cdFx0aWYgZmllbGQudHlwZSA9PSAnc2VjdGlvbidcblx0XHRcdGZvcm1fZmllbGRzLnB1c2goZmllbGQpO1xuXHRcdFx0aWYgZmllbGQuZmllbGRzXG5cdFx0XHRcdGZpZWxkLmZpZWxkcy5mb3JFYWNoIChmKSAtPlxuXHRcdFx0XHRcdGZvcm1fZmllbGRzLnB1c2goZik7XG5cdFx0ZWxzZSBpZiBmaWVsZC50eXBlID09ICd0YWJsZSdcblx0XHRcdGZpZWxkWydzZmllbGRzJ10gPSBmaWVsZFsnZmllbGRzJ11cblx0XHRcdGRlbGV0ZSBmaWVsZFsnZmllbGRzJ11cblx0XHRcdGZvcm1fZmllbGRzLnB1c2goZmllbGQpO1xuXHRcdGVsc2Vcblx0XHRcdGZvcm1fZmllbGRzLnB1c2goZmllbGQpO1xuXG5cdGZvcm1fdmVyc2lvbi5maWVsZHMgPSBmb3JtX2ZpZWxkcztcblxuXHRyZXR1cm4gZm9ybV92ZXJzaW9uO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0Rmxvd1ZlcnNpb24gPSAoaW5zdGFuY2UpLT5cblx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoaW5zdGFuY2UuZmxvdyk7XG5cdGZsb3dfdmVyc2lvbiA9IHt9XG5cdGlmIGZsb3cuY3VycmVudC5faWQgPT0gaW5zdGFuY2UuZmxvd192ZXJzaW9uXG5cdFx0Zmxvd192ZXJzaW9uID0gZmxvdy5jdXJyZW50XG5cdGVsc2Vcblx0XHRmbG93X3ZlcnNpb24gPSBfLndoZXJlKGZsb3cuaGlzdG9yeXMsIHtfaWQ6IGluc3RhbmNlLmZsb3dfdmVyc2lvbn0pWzBdXG5cblx0cmV0dXJuIGZsb3dfdmVyc2lvbjtcblxuXG5fZ2V0Vmlld0h0bWwgPSAocGF0aCkgLT5cblx0dmlld0h0bWwgPSBBc3NldHMuZ2V0VGV4dChwYXRoKVxuXG5cdGlmIHZpZXdIdG1sXG5cdFx0dmlld0h0bWwgPSB2aWV3SHRtbC5yZXBsYWNlKC88dGVtcGxhdGVbXFx3XFxzXFxcIlxcPSddKz4vaSxcIlwiKS5yZXBsYWNlKC88XFwvdGVtcGxhdGU+L2ksXCJcIilcblxuXHRyZXR1cm4gdmlld0h0bWw7XG5cbl9nZXRMb2NhbGUgPSAodXNlciktPlxuXHRpZiB1c2VyPy5sb2NhbGU/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ3poLWNuJ1xuXHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRlbHNlIGlmIHVzZXI/LmxvY2FsZT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnZW4tdXMnXG5cdFx0bG9jYWxlID0gXCJlblwiXG5cdGVsc2Vcblx0XHRsb2NhbGUgPSBcInpoLUNOXCJcblx0cmV0dXJuIGxvY2FsZVxuXG5cbl9nZXRSZXF1aXJlZEZpZWxkcyA9IChmaWVsZHMsIHJldiktPlxuXHRpZiAhcmV2XG5cdFx0cmV2ID0gW107XG5cblx0ZmllbGRzLmZvckVhY2ggKGZpZWxkKS0+XG5cdFx0aWYgZmllbGQudHlwZSA9PSAnc2VjdGlvbidcblx0XHRcdF9nZXRSZXF1aXJlZEZpZWxkcyhmaWVsZC5maWVsZHMsIHJldilcblx0XHRlbHNlIGlmIGZpZWxkLnR5cGUgPT0gJ3RhYmxlJ1xuXG5cdFx0ZWxzZVxuXHRcdFx0aWYgZmllbGQuaXNfcmVxdWlyZWRcblx0XHRcdFx0cmV2LnB1c2ggZmllbGQuY29kZVxuXHRyZXR1cm4gcmV2O1xuXG5fZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMgPSAoZmllbGRzLCBzdGVwcyktPlxuXHRzdGFydFN0ZXAgPSBzdGVwcy5maW5kUHJvcGVydHlCeVBLKFwic3RlcF90eXBlXCIsXCJzdGFydFwiKVxuXG5cdGVkaXRhYmxlQ29kZSA9IFtdXG5cblx0Xy5rZXlzKHN0YXJ0U3RlcC5wZXJtaXNzaW9ucykuZm9yRWFjaCAoa2V5KS0+XG5cdFx0aWYgc3RhcnRTdGVwLnBlcm1pc3Npb25zW2tleV0gPT0gJ2VkaXRhYmxlJ1xuXHRcdFx0ZWRpdGFibGVDb2RlLnB1c2gga2V5XG5cblx0cmV0dXJuIGVkaXRhYmxlQ29kZVxuXG5fZ2V0U3RhcnRTdGVwUmVxdWlyZWRGaWVsZHMgPSAoZmllbGRzLCBzdGVwcyktPlxuXHRyZXF1aXJlZEZpZWxkcyA9IF9nZXRSZXF1aXJlZEZpZWxkcyhmaWVsZHMpXG5cblx0ZWRpdGFibGVDb2RlID0gX2dldFN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzKGZpZWxkcywgc3RlcHMpXG5cblx0cmV0dXJuIF8uaW50ZXJzZWN0aW9uKHJlcXVpcmVkRmllbGRzLCBlZGl0YWJsZUNvZGUpXG5cbl9nZXRUZW1wbGF0ZURhdGEgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKS0+XG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdGZvcm1fdmVyc2lvbiA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKGluc3RhbmNlKVxuXHRlbHNlXG5cdFx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oaW5zdGFuY2UpXG5cblx0bG9jYWxlID0gX2dldExvY2FsZSh1c2VyKVxuXG5cdHN0ZWVkb3NEYXRhID0ge31cblxuXHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRzdGVlZG9zRGF0YSA9IF8uY2xvbmUoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpKVxuXHRcdHN0ZWVkb3NEYXRhLmluc25hbWUgPSBpbnN0YW5jZS5uYW1lXG5cdFx0c3RlZWRvc0RhdGEuaW5zX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGVcblx0XHRzdGVlZG9zRGF0YS5pbnNfZmluYWxfZGVjaXNpb24gPSBpbnN0YW5jZS5pbnNfZmluYWxfZGVjaXNpb25cblx0XHRzdGVlZG9zRGF0YS5pbnNfY29kZSA9IGluc3RhbmNlLmNvZGVcblx0XHRzdGVlZG9zRGF0YS5pbnNfaXNfYXJjaGl2ZWQgPSBpbnN0YW5jZS5pc19hcmNoaXZlZFxuXHRcdHN0ZWVkb3NEYXRhLmluc19pc19kZWxldGVkID0gaW5zdGFuY2UuaW5zX2lzX2RlbGV0ZWRcblx0XHRzdGVlZG9zRGF0YS5hcHBsaWNhbnRfbmFtZSA9IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lXG5cdFx0c3RlZWRvc0RhdGEuYXBwbGljYW50Q29udGV4dCA9IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lXG5cblx0c3RlZWRvc0RhdGEuaW5zdGFuY2UgPSBpbnN0YW5jZVxuXHRzdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb24gPSBmb3JtX3ZlcnNpb25cblx0c3RlZWRvc0RhdGEubG9jYWxlID0gbG9jYWxlXG5cdHN0ZWVkb3NEYXRhLnV0Y09mZnNldCA9IHVzZXIudXRjT2Zmc2V0XG5cdHN0ZWVkb3NEYXRhLnNwYWNlID0gaW5zdGFuY2Uuc3BhY2Vcblx0c3RlZWRvc0RhdGEuc2Vzc2lvblVzZXJJZCA9IHVzZXIuX2lkXG5cblx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0aWYgb3B0aW9ucz8uZWRpdGFibGVcblx0XHRcdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlLmZvcm19KVxuXG5cdFx0XHRmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7X2lkOiBpbnN0YW5jZS5mbG93fSlcblxuXHRcdFx0c3RlZWRvc0RhdGEuc3RhcnRTdGVwRWRpdGFibGVGaWVsZHMgPSBfZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMoZm9ybS5jdXJyZW50LmZpZWxkcywgZmxvdy5jdXJyZW50LnN0ZXBzKTtcblxuXHRyZXR1cm4gc3RlZWRvc0RhdGE7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlID0gKGRhdGUsIHV0Y09mZnNldCktPlxuXHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRwYXNzaW5nID0gZmFsc2U7XG5cdGVsc2Vcblx0XHRwYXNzaW5nID0gdHJ1ZTtcblxuXHRpZiAhdXRjT2Zmc2V0ICYmIHV0Y09mZnNldCAhPTBcblx0XHR1dGNPZmZzZXQgPSA4XG5cblx0cmV0dXJuIG1vbWVudChkYXRlKS51dGNPZmZzZXQodXRjT2Zmc2V0LCBwYXNzaW5nKS5mb3JtYXQoXCJZWVlZLU1NLUREIEhIOm1tXCIpO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpXG5cblx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSBmYWxzZTtcblxuXHRpZiBvcHRpb25zPy5hYnNvbHV0ZVxuXHRcdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcblxuXHRpbnN0YW5jZVRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlLCBvcHRpb25zPy50ZW1wbGF0ZU5hbWUpO1xuXG5cdGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmU2VsZWN0VXNlci9nLFwiYWZTZWxlY3RVc2VyUmVhZFwiKVxuXG5cdGlmICFvcHRpb25zPy5lZGl0YWJsZVxuXHRcdGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmRm9ybUdyb3VwL2csXCJhZkZvcm1Hcm91cFJlYWRcIilcblxuXHRpbnN0YW5jZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0aW5zdGFuY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VDb21waWxlZCk7XG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImluc3RhbmNlX3JlYWRvbmx5X3ZpZXdcIiwgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldy5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhXG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuXHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5pdChzdGVlZG9zRGF0YSk7XG5cblx0Ym9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcsIHN0ZWVkb3NEYXRhKVxuXG5cdHJldHVybiBcIlwiXCJcblx0XHQ8ZGl2IGlkPSdpbnN0YW5jZWZvcm0nID5cblx0XHRcdCN7Ym9keX1cblx0XHQ8L2Rpdj5cblx0XCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRUcmFjZXNWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cblx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG5cdGlmIGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT0gXCJ0YWJsZVwiIHx8IG9wdGlvbnM/LnRlbXBsYXRlTmFtZSA9PSBcInRhYmxlXCJcblx0XHR0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX3RhYmxlLmh0bWwnKVxuXHRlbHNlXG5cdFx0dHJhY2VzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3RyYWNlcy5odG1sJylcblxuXHR0cmFjZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0cmFjZXNIdG1sLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0dHJhY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwodHJhY2VDb21waWxlZCk7XG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInRyYWNlX3JlYWRvbmx5X3ZpZXdcIiwgdHJhY2VSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhXG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzIFRyYWNlc1RlbXBsYXRlLmhlbHBlcnNcblxuXHRib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldywgaW5zdGFuY2UudHJhY2VzKVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlKS0+XG5cblx0c3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSlcblxuXHRhdHRhY2htZW50SHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL2luc3RhbmNlX2F0dGFjaG1lbnRzLmh0bWwnKVxuXG5cdGF0dGFjaG1lbnRDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoYXR0YWNobWVudEh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblxuXHRhdHRhY2htZW50UmVuZGVyRnVuY3Rpb24gPSBldmFsKGF0dGFjaG1lbnRDb21waWxlZCk7XG5cblx0VGVtcGxhdGUuYXR0YWNobWVudHNfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXdcIiwgYXR0YWNobWVudFJlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblxuXHRUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LmhlbHBlcnMgSW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVyc1xuXG5cdGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3KVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZEluc3RhbmNlc1ZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKS0+XG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cblx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSBmYWxzZTtcblxuXHRpZiBvcHRpb25zPy5hYnNvbHV0ZVxuXHRcdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcblxuXHRyZWxhdGVkSW5zdGFuY2VzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3JlbGF0ZWRfaW5zdGFuY2VzLmh0bWwnKVxuXG5cdHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUocmVsYXRlZEluc3RhbmNlc0h0bWwsIHtpc0JvZHk6IHRydWV9KTtcblxuXHRyZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCk7XG5cblx0VGVtcGxhdGUucmVsYXRlZF9pbnN0YW5jZXNfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXdcIiwgcmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblxuXHRUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LmhlbHBlcnMgUmVsYXRlZEluc3RhbmNlcy5oZWxwZXJzXG5cblx0Ym9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcsIHN0ZWVkb3NEYXRhKVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXHRzdGVlZG9zRGF0YSA9IF9nZXRUZW1wbGF0ZURhdGEodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXG5cdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG5cblx0aWYgb3B0aW9ucz8uYWJzb2x1dGVcblx0XHRzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IHRydWU7XG5cblx0cmVsYXRlZFJlY29yZHNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvcmVsYXRlZF9yZWNvcmRzLmh0bWwnKVxuXG5cdHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRSZWNvcmRzSHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdHJlbGF0ZWRSZWNvcmRzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQpO1xuXG5cdFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwicmVsYXRlZF9yZWNvcmRzX3ZpZXdcIiwgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUucmVsYXRlZF9yZWNvcmRzX3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YVxuXG5cdFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LmhlbHBlcnMgUmVsYXRlZFJlY29yZHMuaGVscGVyc1xuXG5cdGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX3JlY29yZHNfdmlldywgc3RlZWRvc0RhdGEpXG5cblx0cmV0dXJuIGJvZHk7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQgPSAoaW5zdGFuY2UpLT5cblx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbilcblxuXHRmb3JtX3NjcmlwdCA9IGZvcm1fdmVyc2lvbi5mb3JtX3NjcmlwdDtcblxuXHRpZiBmb3JtX3NjcmlwdCAmJiBmb3JtX3NjcmlwdC5yZXBsYWNlKC9cXG4vZyxcIlwiKS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5sZW5ndGggPiAwXG5cdFx0Zm9ybV9zY3JpcHQgPSBcIkNvcmVGb3JtID0ge307Q29yZUZvcm0uaW5zdGFuY2Vmb3JtID0ge307XCIgKyBmb3JtX3NjcmlwdFxuXHRcdGZvcm1fc2NyaXB0ICs9IFwiO2lmKENvcmVGb3JtLmZvcm1fT25Mb2FkKXt3aW5kb3cub25sb2FkID0gQ29yZUZvcm0uZm9ybV9PbkxvYWQoKTt9XCJcblx0ZWxzZVxuXHRcdGZvcm1fc2NyaXB0ID0gXCJcIlxuXG5cblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCA9ICh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpLT5cblxuXHRib2R5ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlVmlldyh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuXG5cdG9uTG9hZFNjcmlwdCA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQoaW5zdGFuY2UpO1xuXG5cdGNyZWF0b3JTZXJ2aWNlID0gTWV0ZW9yLnNldHRpbmdzLnB1YmxpYy53ZWJzZXJ2aWNlcz8uY3JlYXRvcj8udXJsXG5cdGluc19yZWNvcmRfaWRzID0gaW5zdGFuY2UucmVjb3JkX2lkc1xuXHRsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuXHRvcGVuRmlsZVNjcmlwdCA9IFwiXCJcIlxuXHRcdFx0aWYod2luZG93LmlzTm9kZSAmJiBpc05vZGUoKSl7XG5cdFx0XHRcdGF0dGFjaHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiaW5zX2F0dGFjaF9ocmVmXCIpO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgYXR0YWNocy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0YXR0YWNoID0gYXR0YWNoc1tpXTtcblx0XHRcdFx0XHRhdHRhY2guYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdFx0aWYoaXNJbWFnZSh0aGlzLmRhdGFzZXQudHlwZSkgfHwgaXNIdG1sKHRoaXMuZGF0YXNldC50eXBlKSl7XG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0b3BlbldpbmRvdyhcIi9hcGkvZmlsZXMvaW5zdGFuY2VzL1wiICsgdGhpcy5kYXRhc2V0LmlkKTtcblx0XHRcdFx0XHRcdH1lbHNlIGlmKG53X2NvcmUuY2FuT3BlbkZpbGUodGhpcy5kYXRhc2V0Lm5hbWUpKXtcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRud19jb3JlLm9wZW5GaWxlKHRoaXMuaHJlZiwgdGhpcy5kYXRhc2V0Lm5hbWUpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGZsb3cgPSBcIiN7aW5zdGFuY2UuZmxvd31cIjtcblx0XHRcdHZhciBzcGFjZSA9IFwiI3tpbnN0YW5jZS5zcGFjZX1cIjtcblxuXHRcdFx0ZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpe1xuXHRcdFx0XHRsZXQgcGF0dGVybiA9IFJlZ0V4cChuYW1lICsgXCI9LlteO10qXCIpXG5cdFx0XHRcdGxldCBtYXRjaGVkID0gZG9jdW1lbnQuY29va2llLm1hdGNoKHBhdHRlcm4pXG5cdFx0XHRcdGlmKG1hdGNoZWQpe1xuXHRcdFx0XHRcdGxldCBjb29raWUgPSBtYXRjaGVkWzBdLnNwbGl0KCc9Jylcblx0XHRcdFx0XHRyZXR1cm4gY29va2llWzFdXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHR9XG5cblx0XHRcdHZhciByZWNvcmRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImlucy1yZWxhdGVkLXJlY29yZHNcIik7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0dmFyIHJlY29yZCA9IHJlY29yZHNbaV07XG5cdFx0XHRcdFx0cmVjb3JkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKXtcblx0XHRcdFx0XHRcdHZhciBjcmVhdG9yU2VydmljZSA9IFwiI3tjcmVhdG9yU2VydmljZX1cIlxuXHRcdFx0XHRcdFx0dmFyIGluc19yZWNvcmRfaWRzID0gI3tKU09OLnN0cmluZ2lmeShpbnNfcmVjb3JkX2lkcyl9XG5cdFx0XHRcdFx0XHRpZihjcmVhdG9yU2VydmljZSAmJiBpbnNfcmVjb3JkX2lkcyAmJiBpbnNfcmVjb3JkX2lkcy5sZW5ndGggPiAwKXtcblx0XHRcdFx0XHRcdFx0dmFyIG9iamNldE5hbWUgPSBpbnNfcmVjb3JkX2lkc1swXS5vXG5cdFx0XHRcdFx0XHRcdHZhciBpZCA9IGluc19yZWNvcmRfaWRzWzBdLmlkc1swXVxuXHRcdFx0XHRcdFx0XHR2YXIgdW9iaiA9IHt9O1xuXHRcdFx0XHRcdFx0XHR1b2JqW1wiWC1Vc2VyLUlkXCJdID0gZ2V0Q29va2llKFwiWC1Vc2VyLUlkXCIpO1xuXHRcdFx0XHRcdFx0XHR1b2JqW1wiWC1BdXRoLVRva2VuXCJdID0gZ2V0Q29va2llKFwiWC1BdXRoLVRva2VuXCIpO1xuXHRcdFx0XHRcdFx0XHRyZWRpcmVjdFVybCA9IGNyZWF0b3JTZXJ2aWNlICsgXCJhcHAvLS9cIiArIG9iamNldE5hbWUgKyBcIi92aWV3L1wiICsgaWQgKyBcIj9cIiArICQucGFyYW0odW9iaik7XG5cdFx0XHRcdFx0XHRcdG9wZW5XaW5kb3cocmVkaXJlY3RVcmwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XCJcIlwiO1xuXG5cblx0aWYgIVN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuXHRcdGlmIGZvcm0/Lmluc3RhbmNlX3N0eWxlID09ICd0YWJsZSdcblx0XHRcdGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiXG5cblx0aWYgb3B0aW9ucz8udGVtcGxhdGVOYW1lID09ICd0YWJsZSdcblx0XHRpbnN0YW5jZV9zdHlsZSA9IFwiaW5zdGFuY2UtdGFibGVcIlxuXG5cdGlmIG9wdGlvbnM/Lmluc3RhbmNlX3N0eWxlXG5cdFx0aW5zdGFuY2Vfc3R5bGUgPSBvcHRpb25zLmluc3RhbmNlX3N0eWxlXG5cblx0aWYgIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93VHJhY2UgPT0gdHJ1ZVxuXHRcdHRyYWNlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFRyYWNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXHRlbHNlXG5cdFx0dHJhY2UgPSBcIlwiXG5cblx0aW5zdGFuY2VCb3hTdHlsZSA9IFwiXCI7XG5cblx0aWYgaW5zdGFuY2UgJiYgaW5zdGFuY2UuZmluYWxfZGVjaXNpb25cblx0XHRpZiBpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PSBcImFwcHJvdmVkXCJcblx0XHRcdGluc3RhbmNlQm94U3R5bGUgPSBcImJveC1zdWNjZXNzXCJcblx0XHRlbHNlIGlmIChpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRpbnN0YW5jZUJveFN0eWxlID0gXCJib3gtZGFuZ2VyXCJcblx0aWYgIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPT0gdHJ1ZVxuXHRcdGF0dGFjaG1lbnQgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXHRcdHJlbGF0ZWRfaW5zdGFuY2VzID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFJlbGF0ZWRJbnN0YW5jZXNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblx0XHRyZWxhdGVkX3JlY29yZHMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblx0ZWxzZVxuXHRcdGF0dGFjaG1lbnQgPSBcIlwiXG5cdFx0cmVsYXRlZF9pbnN0YW5jZXMgPSBcIlwiXG5cdFx0cmVsYXRlZF9yZWNvcmRzID0gXCJcIlxuXG5cblx0d2lkdGggPSBcIjk2MHB4XCJcblx0I1x05aaC5p6c57uZdGFibGXnmoRwYXJlbnTorr7nva53aWR0aO+8jOWImeS8muWvvOiHtOmYv+mHjOS6kemCrueuseaYvuekunRhYmxlIOW8guW4uFxuXHRpZiBvcHRpb25zPy53aWR0aFxuXHRcdHdpZHRoID0gXCJcIlxuXG5cdGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJzdGVlZG9zLWNzc1wiKVxuXHRcblx0anFIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid2Vic2l0ZS9saWJzL2pxdWVyeS5taW4uanNcIilcblxuXHRhbGxDc3NMaW5rID0gXCJcIlwiPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGNsYXNzPVwiX19tZXRlb3ItY3NzX19cIiBocmVmPVwiI3tjc3NIcmVmfVwiPlwiXCJcIlxuXG5cdHRyYWNlQ2hlY2sgPSBcIlwiXG5cdGlmICFfLmlzRW1wdHkodHJhY2UpXG5cdFx0dHJhY2VDaGVjayA9IFwiY2hlY2tlZFwiXG5cdGlmIG9wdGlvbnM/LnRhZ2dlciA9PSAnZW1haWwnIHx8IG9wdGlvbnM/LmVkaXRhYmxlXG5cdFx0c2hvd1RyYWNlc0J0biA9IFwiXCJcblx0ZWxzZVxuXHRcdHNob3dUcmFjZXNCdG4gPSBcIlwiXCJcblx0XHRcdDxkaXYgY2xhc3M9XCJuYXZpZ2F0aW9uLWJhciBidG4tZ3JvdXAgbm8tcHJpbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNjAwcHg7IHotaW5kZXg6IDk5OTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInByaW50LXRvb2xcIj5cblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJjYngtbGFiZWxcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjYngtcHJpbnQgY2J4LXByaW50LWF0dGFjaG1lbnRzXCIgaWQ9XCJjYngtcHJpbnQtYXR0YWNobWVudHNcIiBjaGVja2VkPVwiY2hlY2tlZFwiPjxzcGFuPiN7VEFQaTE4bi5fXygnaW5zdGFuY2VfYXR0YWNobWVudCcsIHt9LCBsb2NhbGUpfTwvc3Bhbj48L2xhYmVsPlxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNieC1sYWJlbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImNieC1wcmludCBjYngtcHJpbnQtdHJhY2VzXCIgaWQ9XCJjYngtcHJpbnQtdHJhY2VzXCIgY2hlY2tlZD1cIiN7dHJhY2VDaGVja31cIj48c3Bhbj4je1RBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmFsX2hpc3RvcnknLCB7fSwgbG9jYWxlKX08L3NwYW4+PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdFwiXCJcIlxuXG5cdHNob3dUcmFjZXNTY3JpcHQgPSBcIlwiXCJcblx0XHQkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYngtcHJpbnQtdHJhY2VzJyk7XG5cdFx0XHR2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2luc3RhbmNlLXRyYWNlcycpWzBdO1xuXHRcdFx0aWYgKGIgJiYgYi5jaGVja2VkICYmIHQpe1xuXHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcblx0XHRcdH0gZWxzZSBpZih0KXtcblx0XHRcdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBub25lOydcblx0XHRcdH1cblx0XHRcdGlmKGIpe1xuXHRcdFx0XHRiLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdGlmIChlLnRhcmdldC5jaGVja2VkKXtcblx0XHRcdFx0XHRcdHQuc3R5bGUgPSAnZGlzcGxheTogYmxvY2s7J1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblxuXHRcdFx0dmFyIGF0dGFjaG1lbnRzQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LWF0dGFjaG1lbnRzJyk7XG5cdFx0XHR2YXIgYXR0YWNobWVudHNWaWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0YWNobWVudHMtc2VjdGlvbicpWzBdO1xuXHRcdFx0aWYgKGF0dGFjaG1lbnRzQ2hlY2tib3ggJiYgYXR0YWNobWVudHNDaGVja2JveC5jaGVja2VkICYmIGF0dGFjaG1lbnRzVmlldyl7XG5cdFx0XHRcdGF0dGFjaG1lbnRzVmlldy5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXG5cdFx0XHR9IGVsc2UgaWYoYXR0YWNobWVudHNWaWV3KXtcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0fVxuXHRcdFx0aWYoYXR0YWNobWVudHNDaGVja2JveCl7XG5cdFx0XHRcdGF0dGFjaG1lbnRzQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpe1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XCJcIlwiXG5cblx0aWYgb3B0aW9ucz8uc3R5bGVzXG5cdFx0YWxsQ3NzTGluayA9IFwiXCJcblxuXHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZS5mb3JtfSk7XG5cdGZvcm1EZXNjcmlwdGlvbkh0bWwgPSBcIlwiXG5cdGlmIGZvcm1cblx0XHRmb3JtRGVzY3JpcHRpb24gPSBmb3JtLmRlc2NyaXB0aW9uXG5cdFx0aWYgZm9ybURlc2NyaXB0aW9uXG5cdFx0XHRmb3JtRGVzY3JpcHRpb24gPSBmb3JtRGVzY3JpcHRpb24ucmVwbGFjZSgvXFxuL2csXCI8YnIvPlwiKVxuXHRcdFx0Zm9ybURlc2NyaXB0aW9uSHRtbCA9IFwiXCJcIlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXIgaW5zdGFuY2UtaGVhZGVyXCI+XG5cdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdCN7Zm9ybURlc2NyaXB0aW9ufVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XCJcIlwiXG5cblx0aHRtbCA9IFwiXCJcIlxuXHRcdDwhRE9DVFlQRSBodG1sPlxuXHRcdDxodG1sPlxuXHRcdFx0PGhlYWQ+XG5cdFx0XHRcdDxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIvPlxuXHRcdFx0XHQje2FsbENzc0xpbmt9XG5cdFx0XHRcdDxzY3JpcHQgc3JjPVwiI3tqcUhyZWZ9XCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFx0XHQ8c2NyaXB0IHNyYz1cIi9qcy9ud19jb3JlLmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFx0XHQje29wdGlvbnMucGx1Z2lucyB8fCBcIlwifVxuXG5cdFx0XHRcdDxzdHlsZT5cblx0XHRcdFx0XHQuc3RlZWRvc3tcblx0XHRcdFx0XHRcdHdpZHRoOiAje3dpZHRofTtcblx0XHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRcdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiBhdXRvO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS1uYW1le1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmJveC10b29sc3tcblx0XHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5ib3guY29sbGFwc2VkLWJveCAuYm94LWJvZHksLmJveC5jb2xsYXBzZWQtYm94IC5ib3gtZm9vdGVyIHtcblx0XHRcdFx0XHQgIGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJvZHl7XG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiBhenVyZSAhaW1wb3J0YW50O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS10cmFjZXN7XG5cdFx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDE1cHg7XG5cdFx0XHRcdFx0XHRwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtIHtcblx0XHRcdFx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1JbWFnZUNvbnRyb2wtYWRkQnRuLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHRcdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IHZhcigtLWdhcC1iYXNlKTtcblx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOiB2YXIoLS1nYXAtYmFzZSk7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdHdpZHRoOiA3LjVyZW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtLmlzLWludmFsaWQge1xuXHRcdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1GaWxlQ29udHJvbC1kYW5nZXItY29sb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBzdmcuaWNvbi1yZWZyZXNoIHtcblx0XHRcdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZmlsZW5hbWUge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRcdFx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdFx0XHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0XHRjb2xvcjogdmFyKC0tRmlsZUNvbnRyb2wtZGFuZ2VyLWNvbG9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpbGVuYW1lID4gc3ZnLmljb24taW1hZ2Uge1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDhweDtcblx0XHRcdFx0XHR3aWR0aDogMjRweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDI0cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maWxlbmFtZSA+IHNwYW4ge1xuXHRcdFx0XHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRcdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0XHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdFx0XHRcdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pbWFnZSB7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdHRvcDogNXB4O1xuXHRcdFx0XHRcdHJpZ2h0OiA1cHg7XG5cdFx0XHRcdFx0bGluZS1oZWlnaHQ6IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIgPiBzdmcge1xuXHRcdFx0XHRcdHRvcDogMDtcblx0XHRcdFx0XHR3aWR0aDogMTBweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDEwcHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtSW5mbyB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdFx0XHRcdFx0d2lkdGg6IDExMHB4O1xuXHRcdFx0XHRcdGhlaWdodDogMTEwcHg7XG5cdFx0XHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0XHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0ZmxleC13cmFwOiB3cmFwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUluZm8gPiBwIHtcblx0XHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDVweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXByb2dyZXNzIHtcblx0XHRcdFx0XHR3aWR0aDogNzBweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDVweDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZWJlYmViO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3NWYWx1ZSB7XG5cdFx0XHRcdFx0aGVpZ2h0OiA1cHg7XG5cdFx0XHRcdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tSW1hZ2VDb250cm9sLXByb2dyZXNzLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogdmFyKC0taW5mbyk7XG5cdFx0XHRcdFx0bWluLXdpZHRoOiAxMCU7XG5cdFx0XHRcdFx0dHJhbnNpdGlvbjogZWFzZS1vdXQgd2lkdGggdmFyKC0tYW5pbWF0aW9uLWR1cmF0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0uaXMtaW52YWxpZCAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbS5pcy1pbnZhbGlkOmhvdmVyIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZXJyb3JNc2cge1xuXHRcdFx0XHRcdGNvbG9yOiB2YXIoLS1kYW5nZXIpO1xuXHRcdFx0XHRcdG1hcmdpbjogNXB4IDAgMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXVwbG9hZEJ0biB7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogNXB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcHBlcldyYXBwZXIge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWNyb3BwZXJXcmFwcGVyIGltZyB7XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdG1heC1oZWlnaHQ6IDQwMHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHJpZ2h0OiAwO1xuXHRcdFx0XHRcdGJvdHRvbTogMDtcblx0XHRcdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRcdFx0XHRcdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcblx0XHRcdFx0XHRtYXJnaW46IDAuNXJlbTtcblx0XHRcdFx0XHRib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciA+IGEge1xuXHRcdFx0XHRcdGNvbG9yOiB2YXIoLS1Gb3JtLWl0ZW0tZm9udENvbG9yKTtcblx0XHRcdFx0XHRwYWRkaW5nOiAycHggNXB4O1xuXHRcdFx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyID4gYTpob3ZlciB7XG5cdFx0XHRcdFx0Y29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtYWNjZXB0VGlwIHtcblx0XHRcdFx0XHRoZWlnaHQ6IDEyMHB4O1xuXHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXJDb2xvcik7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvKTtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZjNmOWZlO1xuXHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0bGluZS1oZWlnaHQ6IDEyMHB4O1xuXHRcdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpeGVkLXNpemUge1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbU92ZXJsYXkge1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQuYW50ZC1JbWFnZXMge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdFx0XHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRcdFx0XHRcdG1hcmdpbjogY2FsYyh2YXIoLS1nYXAteHMpICogLTEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2VzLWl0ZW0ge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdFx0XHRcdG1hcmdpbjogdmFyKC0tZ2FwLXhzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlIHtcblx0XHRcdFx0XHRcdGJvcmRlcjogdmFyKC0tYm9yZGVyV2lkdGgpIHNvbGlkIHZhcigtLWJvcmRlckNvbG9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLS10aHVtYiB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWJXcmFwIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLWltYWdlIHtcblx0XHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtaW1hZ2UtLWxvYWRpbmcge1xuXHRcdFx0XHRcdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtLW9yaWdpbmFsIC5hbnRkLUltYWdlLWltYWdlIHtcblx0XHRcdFx0XHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRcdFx0XHRcdG1heC1oZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdFx0XHRcdG1hcmdpbjogYXV0bztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iIHtcblx0XHRcdFx0XHRcdHdpZHRoOiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdGhlaWdodDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWIgPiBpbWcge1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdFx0bGVmdDogNTAlO1xuXHRcdFx0XHRcdFx0dG9wOiA1MCU7XG5cdFx0XHRcdFx0XHRtYXgtaGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLWluZm8ge1xuXHRcdFx0XHRcdFx0cGFkZGluZzogNXB4IDEwcHg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS0tdGh1bWIgLmFudGQtSW1hZ2UtaW5mbyB7XG5cdFx0XHRcdFx0XHR3aWR0aDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLTQtMyB7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDUuMTU2MjVyZW07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tMTYtOSB7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDMuODY3MTg3NXJlbTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIHtcblx0XHRcdFx0XHRcdG1pbi13aWR0aDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRtaW4taGVpZ2h0OiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIC5hbnRkLUltYWdlLXRodW1iIHtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLWZpeGVkLXNpemUgLmFudGQtSW1hZ2UtdGh1bWIgPiBpbWcge1xuXHRcdFx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tdy1mdWxsID4gaW1nIHtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0I3tvcHRpb25zPy5zdHlsZXMgfHwgXCJcIn1cblxuXHRcdFx0XHRcdCN7b3B0aW9ucz8uYWRkX3N0eWxlcyB8fCBcIlwifVxuXHRcdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PC9oZWFkPlxuXHRcdFx0PGJvZHk+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVlZG9zIHdvcmtmbG93IGluc3RhbmNlLXByaW50XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNraW4tZ3JlZW4gc2tpbi1hZG1pbi1sdGVcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQje3Nob3dUcmFjZXNCdG59XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImluc3RhbmNlLXByaW50XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5zdGFuY2UgI3tpbnN0YW5jZV9zdHlsZX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGZvcm0gbmFtZT1cImluc3RhbmNlRm9ybVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnN0YW5jZS1mb3JtIGJveCAje2luc3RhbmNlQm94U3R5bGV9XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje2Zvcm1EZXNjcmlwdGlvbkh0bWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94LWJvZHlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwiYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdhdHRhY2htZW50cy1zZWN0aW9uJz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7YXR0YWNobWVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7cmVsYXRlZF9pbnN0YW5jZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje3JlbGF0ZWRfcmVjb3Jkc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje2JvZHl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZm9ybT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0I3t0cmFjZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9ib2R5PlxuXHRcdFx0PHNjcmlwdD4je29wZW5GaWxlU2NyaXB0fTsje29uTG9hZFNjcmlwdH07I3tzaG93VHJhY2VzU2NyaXB0fTwvc2NyaXB0PlxuXHRcdDwvaHRtbD5cblx0XCJcIlwiXG5cblx0cmV0dXJuIGh0bWwiLCJ2YXIgX2dldExvY2FsZSwgX2dldFJlcXVpcmVkRmllbGRzLCBfZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMsIF9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcywgX2dldFRlbXBsYXRlRGF0YSwgX2dldFZpZXdIdG1sLCBnZXRMaW5rVGV4dCwgbWFya2VkOyAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIik7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZSA9IHt9O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5zdGFuY2VfYXR0YWNobWVudCA9IFwiPHRyPlxcblx0PHRkIGNsYXNzPVxcXCJpbnMtYXR0YWNoLXZpZXdcXFwiPlxcblx0XHQ8YSBocmVmPVxcXCJ7e2luc19hdHRhY2hfZG93bmxvYWRfdXJsIF9pZCBhYnNvbHV0ZX19XFxcIiBjbGFzcz1cXFwiaW5zX2F0dGFjaF9ocmVmXFxcIiB0YXJnZXQ9XFxcIl9wYXJlbnRcXFwiIGRhdGEtbmFtZT1cXFwie3t0aGlzLm5hbWV9fVxcXCIgZGF0YS10eXBlPVxcXCJ7e3RoaXMub3JpZ2luYWwudHlwZX19XFxcIiBkYXRhLWlkPVxcXCJ7e19pZH19XFxcIj57e3RoaXMubmFtZX19PC9hPlxcblx0PC90ZD5cXG48L3RyPlwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuYWZTZWxlY3RVc2VyUmVhZCA9IFwiPGRpdiBjbGFzcz0nc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCc+e3t2YWx1ZX19PC9kaXY+XCI7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5hZkZvcm1Hcm91cFJlYWQgPSBcIjxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAnPlxcblx0e3sjd2l0aCBnZXRGaWVsZCB0aGlzLm5hbWV9fVxcblx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VjdGlvbid9fVxcblx0XHRcdFx0PGRpdiBjbGFzcz0nc2VjdGlvbiBjYWxsb3V0IGNhbGxvdXQtZGVmYXVsdCc+XFxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tmX2xhYmVsIHRoaXN9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdDxwPnt7e2Rlc2NyaXB0aW9ufX19PC9wPlxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdHt7ZWxzZX19XFxuXHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3RhYmxlJ319XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0IHN0ZWVkb3MtdGFibGVcXFwiPlxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIiBzdHlsZT1cXFwicGFkZGluZzowcHg7XFxcIj5cXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1oZWFkaW5nXFxcIiA+XFxuXHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9J2NvbnRyb2wtbGFiZWwnPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVxcXCJkZXNjcmlwdGlvblxcXCI+e3t7ZGVzY3JpcHRpb259fX08L3NwYW4+XFxuXHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwicmVhZG9ubHktdGFibGVcXFwiIHN0eWxlPVxcXCJwYWRkaW5nOjBweDtvdmVyZmxvdy14OmF1dG87XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHR5cGU9J3RhYmxlJyBjbGFzcz1cXFwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtY29uZGVuc2VkIGF1dG9mb3JtLXRhYmxlXFxcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTowcHg7JyB7e3RoaXMuYXR0c319IGlkPVxcXCJ7e3RoaXMuY29kZX19VGFibGVcXFwiIG5hbWU9XFxcInt7dGhpcy5jb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3t0aGlzLm5hbWV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRoZWFkIGlkPVxcXCJ7e3RoaXMubmFtZX19VGhlYWRcXFwiIG5hbWU9XFxcInt7dGhpcy5uYW1lfX1UaGVhZFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZVRoZWFkIHRoaXN9fX1cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3RoZWFkPlxcblx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keSBpZD1cXFwie3t0aGlzLm5hbWV9fVRib2R5XFxcIiBuYW1lPVxcXCJ7e3RoaXMubmFtZX19VGJvZHlcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3t7Z2V0VGFibGVCb2R5IHRoaXN9fX1cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5Plxcblx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHR7eyNpZiBzaG93TGFiZWx9fVxcblx0XHRcdFx0XHQ8bGFiZWw+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0PGRpdiBjbGFzcz0ne3tnZXRDZkNsYXNzIHRoaXN9fSBmb3JtLWNvbnRyb2wnIHJlYWRvbmx5IGRpc2FibGVkPnt7e2dldFZhbHVlIGNvZGV9fX08L2Rpdj5cXG5cdFx0XHR7ey9pZn19XFxuXHRcdHt7L2lmfX1cXG5cdHt7L3dpdGh9fVxcbjwvZGl2PlwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuYWZGb3JtR3JvdXAgPSBcIlxcbnt7I3dpdGggZ2V0RmllbGQgdGhpcy5uYW1lfX1cXG5cdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3NlY3Rpb24nfX1cXG5cdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdDxkaXYgY2xhc3M9J3NlY3Rpb24gY2FsbG91dCBjYWxsb3V0LWRlZmF1bHQnPlxcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Zl9sYWJlbCB0aGlzfX08L2xhYmVsPlxcblx0XHRcdFx0XHQ8cD57e3tkZXNjcmlwdGlvbn19fTwvcD5cXG5cdFx0XHRcdDwvZGl2PlxcbiAgXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0e3tlbHNlfX1cXG5cdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndGFibGUnfX1cXG5cdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsIHBhbmVsLWRlZmF1bHQgc3RlZWRvcy10YWJsZVxcXCI+XFxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsLWJvZHlcXFwiIHN0eWxlPVxcXCJwYWRkaW5nOjBweDtcXFwiPlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsLWhlYWRpbmdcXFwiID5cXG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz0nY29udHJvbC1sYWJlbCc+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XFxcImRlc2NyaXB0aW9uXFxcIj57e3tkZXNjcmlwdGlvbn19fTwvc3Bhbj5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJyZWFkb25seS10YWJsZVxcXCIgc3R5bGU9XFxcInBhZGRpbmc6MHB4O292ZXJmbG93LXg6YXV0bztcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgdHlwZT0ndGFibGUnIGNsYXNzPVxcXCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgYXV0b2Zvcm0tdGFibGVcXFwiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBweDsnIHt7dGhpcy5hdHRzfX0gaWQ9XFxcInt7dGhpcy5jb2RlfX1UYWJsZVxcXCIgbmFtZT1cXFwie3t0aGlzLmNvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e3RoaXMubmFtZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGhlYWQgaWQ9XFxcInt7dGhpcy5uYW1lfX1UaGVhZFxcXCIgbmFtZT1cXFwie3t0aGlzLm5hbWV9fVRoZWFkXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlVGhlYWQgdGhpc319fVxcblx0XHRcdFx0XHRcdFx0XHRcdDwvdGhlYWQ+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5IGlkPVxcXCJ7e3RoaXMubmFtZX19VGJvZHlcXFwiIG5hbWU9XFxcInt7dGhpcy5uYW1lfX1UYm9keVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZUJvZHkgdGhpc319fVxcblx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XFxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XFxuXHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdpbnB1dCd9fVxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIiBkYXRhLXJlcXVpcmVkPVxcXCJ7eyNpZiBpc19yZXF1aXJlZH19dHJ1ZXt7L2lmfX1cXFwiPlxcblx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdHt7I2lmIGlzX3RleHRhcmVhfX1cXG5cdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSB0aXRsZT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIG5hbWU9XFxcInt7Y29kZX19XFxcIiB7e2dldFBlcm1pc3Npb25zIGNvZGV9fSBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj48L3RleHRhcmVhPlxcblx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHR7eyN1bmxlc3MgaXNfdGV4dGFyZWF9fVxcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIHt7Z2V0UGVybWlzc2lvbnMgY29kZX19IGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdHt7L3VubGVzc319XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ251bWJlcid9fVxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwibnVtYmVyXFxcIiB0aXRsZT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIG5hbWU9XFxcInt7Y29kZX19XFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnZGF0ZSd9fVxcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgdGl0bGU9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS10eXBlPVxcXCJkYXRlXFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj5cXG5cdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnZGF0ZVRpbWUnfX1cXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtdHlwZT0nZGF0ZXRpbWUnIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdwYXNzd29yZCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwicGFzc3dvcmRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdzZWxlY3QnfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNlbGVjdCBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjZWFjaCBvcHRpb25zIHRoaXN9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cXFwie3t2YWx1ZX19XFxcIj57e2xhYmVsfX08L29wdGlvbj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zZWxlY3Q+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3JhZGlvJ319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImFmLXJhZGlvLWdyb3VwXFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cXG4gICAgICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cXFwicmFkaW8taW5saW5lIGZpeC1pbmRlbnRcXFwiPjxpbnB1dCB0eXBlPVxcXCJyYWRpb1xcXCIgdmFsdWU9XFxcInt7dmFsdWV9fVxcXCIgbmFtZT1cXFwie3suLi9jb2RlfX1cXFwiIGNsYXNzPVxcXCJyYWRpby1pbmxpbmUgZml4LWluZGVudFxcXCI+IHt7bGFiZWx9fTwvbGFiZWw+XFxuICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XFxuICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdtdWx0aVNlbGVjdCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJhZi1jaGVja2JveC1ncm91cFxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJjaGVja2JveC1pbmxpbmUgZml4LWluZGVudFxcXCI+PGlucHV0IHR5cGU9XFxcImNoZWNrYm94XFxcIiB2YWx1ZT1cXFwie3t2YWx1ZX19XFxcIiBuYW1lPVxcXCJ7ey4uL2NvZGV9fVxcXCIgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XFxcIj4ge3tsYWJlbH19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndXJsJ319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVxcXCJ1cmxcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdlbWFpbCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwiZW1haWxcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdjaGVja2JveCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJjaGVja2JveFxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBzdHlsZT1cXFwid2lkdGg6IDEwMCU7XFxcIj48aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIHZhbHVlPVxcXCJ0cnVlXFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XFxcIj48L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHR7ey9pZn19XFxuXHRcdHt7L2lmfX1cXG5cdHt7L3dpdGh9fVwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlID0gZnVuY3Rpb24odGVtcGFsdGVOYW1lLCBzdGVlZG9zRGF0YSkge1xuICB2YXIgdGVtcGxhdGUsIHRlbXBsYXRlQ29tcGlsZWQsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb247XG4gIHRlbXBsYXRlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlW3RlbXBhbHRlTmFtZV07XG4gIHRlbXBsYXRlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICB0ZW1wbGF0ZVJlbmRlckZ1bmN0aW9uID0gZXZhbCh0ZW1wbGF0ZUNvbXBpbGVkKTtcbiAgVGVtcGxhdGVbdGVtcGFsdGVOYW1lXSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZSh0ZW1wYWx0ZU5hbWUsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIHJldHVybiBUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLmhlbHBlcnMoSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycyk7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dCA9IGZ1bmN0aW9uKHN0ZWVkb3NEYXRhKSB7XG4gIHZhciBpbnN0YW5jZVNpZ25UZXh0Q29tcGlsZWQsIGluc3RhbmNlU2lnblRleHRIdG1sLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb247XG4gIGluc3RhbmNlU2lnblRleHRIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW5zdGFuY2Vfc2lnbl90ZXh0Lmh0bWwnKTtcbiAgaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVNpZ25UZXh0SHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgaW5zdGFuY2VTaWduVGV4dFJlbmRlckZ1bmN0aW9uID0gZXZhbChpbnN0YW5jZVNpZ25UZXh0Q29tcGlsZWQpO1xuICBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW5zdGFuY2VTaWduVGV4dFwiLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMoSW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVJbWFnZVNpZ24gPSBmdW5jdGlvbihzdGVlZG9zRGF0YSkge1xuICB2YXIgaW1hZ2VTaWduQ29tcGlsZWQsIGltYWdlU2lnbkh0bWwsIGltYWdlU2lnblJlbmRlckZ1bmN0aW9uO1xuICBpbWFnZVNpZ25IdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW1hZ2Vfc2lnbi5odG1sJyk7XG4gIGltYWdlU2lnbkNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbWFnZVNpZ25IdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICBpbWFnZVNpZ25SZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW1hZ2VTaWduQ29tcGlsZWQpO1xuICBUZW1wbGF0ZS5pbWFnZVNpZ24gPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbWFnZVNpZ25cIiwgaW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbWFnZVNpZ24uc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgcmV0dXJuIFRlbXBsYXRlLmltYWdlU2lnbi5oZWxwZXJzKEltYWdlU2lnbi5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVUcmFjZXNIYW5sZGVyID0gZnVuY3Rpb24oc3RlZWRvc0RhdGEpIHtcbiAgdmFyIHRyYWNlc0hhbmxkZXJDb21waWxlZCwgdHJhY2VzSGFubGRlckh0bWwsIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbjtcbiAgdHJhY2VzSGFubGRlckh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS90cmFjZXNfaGFuZGxlci5odG1sJyk7XG4gIHRyYWNlc0hhbmxkZXJDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodHJhY2VzSGFubGRlckh0bWwsIHtcbiAgICBpc0JvZHk6IHRydWVcbiAgfSk7XG4gIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbiA9IGV2YWwodHJhY2VzSGFubGRlckNvbXBpbGVkKTtcbiAgVGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbnN0YW5jZV90cmFjZXNfaGFuZGxlclwiLCB0cmFjZXNIYW5sZGVyUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlci5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhO1xuICByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIuaGVscGVycyhUcmFjZXNIYW5kbGVyLmhlbHBlcnMpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluaXQgPSBmdW5jdGlvbihzdGVlZG9zRGF0YSkge1xuICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlKFwiYWZTZWxlY3RVc2VyUmVhZFwiLCBzdGVlZG9zRGF0YSk7XG4gIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlKFwiYWZGb3JtR3JvdXBcIiwgc3RlZWRvc0RhdGEpO1xuICB9XG4gIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZkZvcm1Hcm91cFJlYWRcIiwgc3RlZWRvc0RhdGEpO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImluc3RhbmNlX2F0dGFjaG1lbnRcIiwge1xuICAgICAgYWJzb2x1dGU6IHN0ZWVkb3NEYXRhLmFic29sdXRlXG4gICAgfSk7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZUltYWdlU2lnbihzdGVlZG9zRGF0YSk7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZVRyYWNlc0hhbmxkZXIoc3RlZWRvc0RhdGEpO1xuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dChzdGVlZG9zRGF0YSk7XG4gIH1cbn07XG5cbmdldExpbmtUZXh0ID0gZnVuY3Rpb24oaXRlbSwgbGFiZWwsIGRldGFpbF91cmwpIHtcbiAgaWYgKGRldGFpbF91cmwpIHtcbiAgICBkZXRhaWxfdXJsID0gZGV0YWlsX3VybC5yZXBsYWNlKFwie19pZH1cIiwgaXRlbS5faWQpO1xuICAgIGlmICghL15odHRwKHM/KTpcXC9cXC8vLnRlc3QoZGV0YWlsX3VybCkpIHtcbiAgICAgIGRldGFpbF91cmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKGRldGFpbF91cmwpO1xuICAgIH1cbiAgICByZXR1cm4gJzxhIGhyZWY9XCInICsgZGV0YWlsX3VybCArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsgbGFiZWwgKyAnPC9hPic7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgZmllbGQsIGxvY2FsZSwgdXRjT2Zmc2V0KSB7XG4gIHZhciBkYXRlLCBkZXRhaWxfdXJsLCBlLCBmaWVsZE9wdGlvbnMsIGhvdXJzLCBtb250aCwgbmFtZUZpZWxkLCByZWNvcmRzLCByZXMsIHNlY29uZHMsIHNlbGVjdGVkT3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIHNwbGl0ZWRWYWx1ZXMsIHQsIHQwLCB0MSwgdWlTY2hlbWEsIHllYXI7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChbXCJzZWxlY3RcIiwgXCJtdWx0aVNlbGVjdFwiLCBcInJhZGlvXCJdLmluZGV4T2YoZmllbGQudHlwZSkgPiAtMSkge1xuICAgIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pIHtcbiAgICAgIHZhciBpdGVtU3BsaXRzO1xuICAgICAgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG4gICAgICAgIHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgY2FzZSAnZW1haWwnOlxuICAgICAgdmFsdWUgPSB2YWx1ZSA/ICc8YSBocmVmPVxcJ21haWx0bzonICsgdmFsdWUgKyAnXFwnPicgKyB2YWx1ZSArICc8L2E+JyA6ICcnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXJsJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZihcImh0dHBcIikgPT09IDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWUgPSBcIjxhIGhyZWY9J1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgICAgICB2YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLmdldFByb3BlcnR5KFwiZnVsbG5hbWVcIikudG9TdHJpbmcoKSA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLmZ1bGxuYW1lIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXNlcic6XG4gICAgICBpZiAoZmllbGQuaXNfbXVsdGlzZWxlY3QpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCkgOiB2b2lkIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5uYW1lIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgdmFsdWUgPSAnKioqKioqJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJykge1xuICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiLCB7fSwgbG9jYWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIiwge30sIGxvY2FsZSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID09PSAxNikge1xuICAgICAgICB0ID0gdmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgICB0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuICAgICAgICB0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuICAgICAgICB5ZWFyID0gdDBbMF07XG4gICAgICAgIG1vbnRoID0gdDBbMV07XG4gICAgICAgIGRhdGUgPSB0MFsyXTtcbiAgICAgICAgaG91cnMgPSB0MVswXTtcbiAgICAgICAgc2Vjb25kcyA9IHQxWzFdO1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZSwgaG91cnMsIHNlY29uZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlKHZhbHVlLCB1dGNPZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaWYgKGZpZWxkLmlzX3RleHRhcmVhKSB7XG4gICAgICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICBtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUgPT09IHZhbHVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgdmFsdWUgPSBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgIHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLmxhYmVsO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbXVsdGlTZWxlY3QnOlxuICAgICAgc3BsaXRlZFZhbHVlcyA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IGZpZWxkT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gc3BsaXRlZFZhbHVlcy5pbmRleE9mKGl0ZW0udmFsdWUpID4gLTE7XG4gICAgICB9KTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICBpZiAoZmllbGQuaXNfcGVyY2VudCkge1xuICAgICAgICAgIHZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBTdGVlZG9zLm51bWJlclRvU3RyaW5nKHZhbHVlLCBmaWVsZC5kaWdpdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvZGF0YSc6XG4gICAgICBkZXRhaWxfdXJsID0gZmllbGQuZGV0YWlsX3VybDtcbiAgICAgIGlmIChmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICB2YWx1ZSA9IF8ubWFwKHZhbHVlLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGdldExpbmtUZXh0KGl0ZW0sIGl0ZW1bJ0BsYWJlbCddLCBkZXRhaWxfdXJsKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGdldExpbmtUZXh0KHZhbHVlLCB2YWx1ZVsnQGxhYmVsJ10sIGRldGFpbF91cmwpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgIHZhbHVlID0gXy5tYXAodmFsdWUsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9XCJhbnRkLUltYWdlQ29udHJvbC1pdGVtIGlzLXVwbG9hZGVkXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlIGFudGQtSW1hZ2UtLXRodW1iIGFudGQtSW1hZ2VDb250cm9sLWltYWdlXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iV3JhcFwiPiA8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYlwiPjxpbWcgY2xhc3M9XCJhbnRkLUltYWdlLWltYWdlXCIgc3JjPVwiL2FwaS9maWxlcy9pbWFnZXMvJyArIGl0ZW0gKyAnXCI+PC9kaXY+IDwvZGl2PiA8L2Rpdj4gPC9kaXY+JztcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJzxkaXYgY2xhc3M9XCJhbnRkLUltYWdlQ29udHJvbC1pdGVtIGlzLXVwbG9hZGVkXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlIGFudGQtSW1hZ2UtLXRodW1iIGFudGQtSW1hZ2VDb250cm9sLWltYWdlXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iV3JhcFwiPiA8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYlwiPjxpbWcgY2xhc3M9XCJhbnRkLUltYWdlLWltYWdlXCIgc3JjPVwiL2FwaS9maWxlcy9pbWFnZXMvJyArIHZhbHVlICsgJ1wiPjwvZGl2PiA8L2Rpdj4gPC9kaXY+IDwvZGl2Pic7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWxlJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgICAgICByZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxL2Nmc19maWxlc19maWxlcmVjb3JkP2ZpbHRlcnM9W1tcIl9pZFwiLFwiaW5cIiwgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICddXSZmaWVsZHM9W1wiX2lkXCIsXCJvcmlnaW5hbFwiXScsIHtcbiAgICAgICAgICAgIGFzeW5jOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlY29yZHMgPSByZXMuZGF0YS5pdGVtcztcbiAgICAgICAgfSBlbHNlIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICByZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKFwiY2ZzX2ZpbGVzX2ZpbGVyZWNvcmRcIiwge1xuICAgICAgICAgICAgZmlsdGVyczogW1tcIl9pZFwiLCAnaW4nLCB2YWx1ZV1dLFxuICAgICAgICAgICAgZmllbGRzOiBbXCJfaWRcIiwgXCJvcmlnaW5hbFwiXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gXy5tYXAocmVjb3JkcywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlTmFtZSwgZmlsZVByZXZpZXdIdG1sLCBmaWxlVXJsO1xuICAgICAgICAgIGZpbGVOYW1lID0gaXRlbS5vcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIGZpbGVVcmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKCcvYXBpL2ZpbGVzL2ZpbGVzLycgKyBpdGVtLl9pZCk7XG4gICAgICAgICAgZmlsZVByZXZpZXdIdG1sID0gJyc7XG4gICAgICAgICAgaWYgKFtcIi5wZGZcIiwgXCIuanBnXCIsIFwiLmpwZWdcIiwgXCIucG5nXCIsIFwiLmdpZlwiXS5pbmRleE9mKGZpbGVOYW1lLnNsaWNlKC00KSkgPiAtMSkge1xuICAgICAgICAgICAgZmlsZVByZXZpZXdIdG1sID0gXCImZW5zcDs8YSBocmVmPSdcIiArIGZpbGVVcmwgKyBcIicgdGFyZ2V0PSdfYmxhbmsnIGNsYXNzPSdhbnRkLUxpbmsnPjxzcGFuIGNsYXNzPSdhbnRkLVRwbEZpZWxkJz48c3Bhbj7pooTop4g8L3NwYW4+PC9zcGFuPjwvYT5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdj48YSBocmVmPSdcIiArIChmaWxlVXJsICsgJz9kb3dubG9hZD10cnVlJykgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgZmlsZU5hbWUgKyBcIjwvYT4gXCIgKyAoZmlsZVByZXZpZXdIdG1sICE9IG51bGwgPyBmaWxlUHJldmlld0h0bWwgOiB7XG4gICAgICAgICAgICBmaWxlUHJldmlld0h0bWw6ICcnXG4gICAgICAgICAgfSkgKyBcIjwvZGl2PlwiO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKFwiXCIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbG9va3VwJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgICAgICB1aVNjaGVtYSA9IENyZWF0b3IuZ2V0T2JqZWN0KGZpZWxkLnJlZmVyZW5jZV90byk7XG4gICAgICAgICAgbmFtZUZpZWxkID0gKHVpU2NoZW1hICE9IG51bGwgPyB1aVNjaGVtYS5OQU1FX0ZJRUxEX0tFWSA6IHZvaWQgMCkgfHwgJ25hbWUnO1xuICAgICAgICAgIHJlcyA9IFN0ZWVkb3MuYXV0aFJlcXVlc3QoJy9hcGkvdjEvJyArIGZpZWxkLnJlZmVyZW5jZV90byArICc/ZmlsdGVycz1bW1wiJyArIChmaWVsZC5yZWZlcmVuY2VfdG9fZmllbGQgfHwgJ19pZCcpICsgJ1wiLFwiaW5cIiwgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICddXSZmaWVsZHM9W1wiX2lkXCIsXCInICsgbmFtZUZpZWxkICsgJ1wiXScsIHtcbiAgICAgICAgICAgIGFzeW5jOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlY29yZHMgPSByZXMuZGF0YS5pdGVtcztcbiAgICAgICAgfSBlbHNlIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICBuYW1lRmllbGQgPSBTdGVlZG9zLmdldE9iamVjdE5hbWVGaWVsZEtleShmaWVsZC5yZWZlcmVuY2VfdG8pO1xuICAgICAgICAgIHJlY29yZHMgPSBTdGVlZG9zLm9iamVjdEZpbmQoZmllbGQucmVmZXJlbmNlX3RvLCB7XG4gICAgICAgICAgICBmaWx0ZXJzOiBbW2ZpZWxkLnJlZmVyZW5jZV90b19maWVsZCB8fCAnX2lkJywgJ2luJywgdmFsdWVdXSxcbiAgICAgICAgICAgIGZpZWxkczogW1wiX2lkXCIsIG5hbWVGaWVsZF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IF8ubWFwKHJlY29yZHMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gXCI8YSBocmVmPSdcIiArIChTdGVlZG9zLmFic29sdXRlVXJsKCcvYXBwLy0vJyArIGZpZWxkLnJlZmVyZW5jZV90byArICcvdmlldy8nICsgaXRlbS5faWQpKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyBpdGVtW25hbWVGaWVsZF0gKyBcIjwvYT5cIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuam9pbihcIiAsIFwiKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgdmFsdWUgPSB2YWx1ZSA/IFwiPGRpdiBjbGFzcz1cXFwic3RlZWRvcy1odG1sXFxcIj5cIiArIHZhbHVlICsgXCI8L2Rpdj5cIiA6ICcnO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbCA9IGZ1bmN0aW9uKGZpZWxkcywgY29kZSkge1xuICB2YXIgZmllbGQ7XG4gIGZpZWxkID0gZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpO1xuICBpZiAoZmllbGQpIHtcbiAgICBpZiAoZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIGZpZWxkLm5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWVsZC5jb2RlO1xuICAgIH1cbiAgfVxufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlRm9ybVZlcnNpb24gPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICB2YXIgZm9ybSwgZm9ybV9maWVsZHMsIGZvcm1fdmVyc2lvbjtcbiAgZm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG4gIGZvcm1fdmVyc2lvbiA9IHt9O1xuICBmb3JtX2ZpZWxkcyA9IFtdO1xuICBpZiAoZm9ybS5jdXJyZW50Ll9pZCA9PT0gaW5zdGFuY2UuZm9ybV92ZXJzaW9uKSB7XG4gICAgZm9ybV92ZXJzaW9uID0gZm9ybS5jdXJyZW50O1xuICB9IGVsc2Uge1xuICAgIGZvcm1fdmVyc2lvbiA9IF8ud2hlcmUoZm9ybS5oaXN0b3J5cywge1xuICAgICAgX2lkOiBpbnN0YW5jZS5mb3JtX3ZlcnNpb25cbiAgICB9KVswXTtcbiAgfVxuICBmb3JtX3ZlcnNpb24uZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpIHtcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nKSB7XG4gICAgICBmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgIGlmIChmaWVsZC5maWVsZHMpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybV9maWVsZHMucHVzaChmKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICBmaWVsZFsnc2ZpZWxkcyddID0gZmllbGRbJ2ZpZWxkcyddO1xuICAgICAgZGVsZXRlIGZpZWxkWydmaWVsZHMnXTtcbiAgICAgIHJldHVybiBmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1fZmllbGRzLnB1c2goZmllbGQpO1xuICAgIH1cbiAgfSk7XG4gIGZvcm1fdmVyc2lvbi5maWVsZHMgPSBmb3JtX2ZpZWxkcztcbiAgcmV0dXJuIGZvcm1fdmVyc2lvbjtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRGbG93VmVyc2lvbiA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIHZhciBmbG93LCBmbG93X3ZlcnNpb247XG4gIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKGluc3RhbmNlLmZsb3cpO1xuICBmbG93X3ZlcnNpb24gPSB7fTtcbiAgaWYgKGZsb3cuY3VycmVudC5faWQgPT09IGluc3RhbmNlLmZsb3dfdmVyc2lvbikge1xuICAgIGZsb3dfdmVyc2lvbiA9IGZsb3cuY3VycmVudDtcbiAgfSBlbHNlIHtcbiAgICBmbG93X3ZlcnNpb24gPSBfLndoZXJlKGZsb3cuaGlzdG9yeXMsIHtcbiAgICAgIF9pZDogaW5zdGFuY2UuZmxvd192ZXJzaW9uXG4gICAgfSlbMF07XG4gIH1cbiAgcmV0dXJuIGZsb3dfdmVyc2lvbjtcbn07XG5cbl9nZXRWaWV3SHRtbCA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHZpZXdIdG1sO1xuICB2aWV3SHRtbCA9IEFzc2V0cy5nZXRUZXh0KHBhdGgpO1xuICBpZiAodmlld0h0bWwpIHtcbiAgICB2aWV3SHRtbCA9IHZpZXdIdG1sLnJlcGxhY2UoLzx0ZW1wbGF0ZVtcXHdcXHNcXFwiXFw9J10rPi9pLCBcIlwiKS5yZXBsYWNlKC88XFwvdGVtcGxhdGU+L2ksIFwiXCIpO1xuICB9XG4gIHJldHVybiB2aWV3SHRtbDtcbn07XG5cbl9nZXRMb2NhbGUgPSBmdW5jdGlvbih1c2VyKSB7XG4gIHZhciBsb2NhbGUsIHJlZiwgcmVmMTtcbiAgaWYgKCh1c2VyICE9IG51bGwgPyAocmVmID0gdXNlci5sb2NhbGUpICE9IG51bGwgPyByZWYudG9Mb2NhbGVMb3dlckNhc2UoKSA6IHZvaWQgMCA6IHZvaWQgMCkgPT09ICd6aC1jbicpIHtcbiAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gIH0gZWxzZSBpZiAoKHVzZXIgIT0gbnVsbCA/IChyZWYxID0gdXNlci5sb2NhbGUpICE9IG51bGwgPyByZWYxLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiB2b2lkIDAgOiB2b2lkIDApID09PSAnZW4tdXMnKSB7XG4gICAgbG9jYWxlID0gXCJlblwiO1xuICB9IGVsc2Uge1xuICAgIGxvY2FsZSA9IFwiemgtQ05cIjtcbiAgfVxuICByZXR1cm4gbG9jYWxlO1xufTtcblxuX2dldFJlcXVpcmVkRmllbGRzID0gZnVuY3Rpb24oZmllbGRzLCByZXYpIHtcbiAgaWYgKCFyZXYpIHtcbiAgICByZXYgPSBbXTtcbiAgfVxuICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmaWVsZCkge1xuICAgIGlmIChmaWVsZC50eXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgIHJldHVybiBfZ2V0UmVxdWlyZWRGaWVsZHMoZmllbGQuZmllbGRzLCByZXYpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYmxlJykge1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmaWVsZC5pc19yZXF1aXJlZCkge1xuICAgICAgICByZXR1cm4gcmV2LnB1c2goZmllbGQuY29kZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJldjtcbn07XG5cbl9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyA9IGZ1bmN0aW9uKGZpZWxkcywgc3RlcHMpIHtcbiAgdmFyIGVkaXRhYmxlQ29kZSwgc3RhcnRTdGVwO1xuICBzdGFydFN0ZXAgPSBzdGVwcy5maW5kUHJvcGVydHlCeVBLKFwic3RlcF90eXBlXCIsIFwic3RhcnRcIik7XG4gIGVkaXRhYmxlQ29kZSA9IFtdO1xuICBfLmtleXMoc3RhcnRTdGVwLnBlcm1pc3Npb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChzdGFydFN0ZXAucGVybWlzc2lvbnNba2V5XSA9PT0gJ2VkaXRhYmxlJykge1xuICAgICAgcmV0dXJuIGVkaXRhYmxlQ29kZS5wdXNoKGtleSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGVkaXRhYmxlQ29kZTtcbn07XG5cbl9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcyA9IGZ1bmN0aW9uKGZpZWxkcywgc3RlcHMpIHtcbiAgdmFyIGVkaXRhYmxlQ29kZSwgcmVxdWlyZWRGaWVsZHM7XG4gIHJlcXVpcmVkRmllbGRzID0gX2dldFJlcXVpcmVkRmllbGRzKGZpZWxkcyk7XG4gIGVkaXRhYmxlQ29kZSA9IF9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyhmaWVsZHMsIHN0ZXBzKTtcbiAgcmV0dXJuIF8uaW50ZXJzZWN0aW9uKHJlcXVpcmVkRmllbGRzLCBlZGl0YWJsZUNvZGUpO1xufTtcblxuX2dldFRlbXBsYXRlRGF0YSA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgZmxvdywgZm9ybSwgZm9ybV92ZXJzaW9uLCBsb2NhbGUsIHN0ZWVkb3NEYXRhO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgZm9ybV92ZXJzaW9uID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlRm9ybVZlcnNpb24oaW5zdGFuY2UpO1xuICB9IGVsc2Uge1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKGluc3RhbmNlKTtcbiAgfVxuICBsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuICBzdGVlZG9zRGF0YSA9IHt9O1xuICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgc3RlZWRvc0RhdGEgPSBfLmNsb25lKFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKSk7XG4gICAgc3RlZWRvc0RhdGEuaW5zbmFtZSA9IGluc3RhbmNlLm5hbWU7XG4gICAgc3RlZWRvc0RhdGEuaW5zX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG4gICAgc3RlZWRvc0RhdGEuaW5zX2ZpbmFsX2RlY2lzaW9uID0gaW5zdGFuY2UuaW5zX2ZpbmFsX2RlY2lzaW9uO1xuICAgIHN0ZWVkb3NEYXRhLmluc19jb2RlID0gaW5zdGFuY2UuY29kZTtcbiAgICBzdGVlZG9zRGF0YS5pbnNfaXNfYXJjaGl2ZWQgPSBpbnN0YW5jZS5pc19hcmNoaXZlZDtcbiAgICBzdGVlZG9zRGF0YS5pbnNfaXNfZGVsZXRlZCA9IGluc3RhbmNlLmluc19pc19kZWxldGVkO1xuICAgIHN0ZWVkb3NEYXRhLmFwcGxpY2FudF9uYW1lID0gaW5zdGFuY2UuYXBwbGljYW50X25hbWU7XG4gICAgc3RlZWRvc0RhdGEuYXBwbGljYW50Q29udGV4dCA9IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lO1xuICB9XG4gIHN0ZWVkb3NEYXRhLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvbiA9IGZvcm1fdmVyc2lvbjtcbiAgc3RlZWRvc0RhdGEubG9jYWxlID0gbG9jYWxlO1xuICBzdGVlZG9zRGF0YS51dGNPZmZzZXQgPSB1c2VyLnV0Y09mZnNldDtcbiAgc3RlZWRvc0RhdGEuc3BhY2UgPSBpbnN0YW5jZS5zcGFjZTtcbiAgc3RlZWRvc0RhdGEuc2Vzc2lvblVzZXJJZCA9IHVzZXIuX2lkO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgaWYgKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZWRpdGFibGUgOiB2b2lkIDApIHtcbiAgICAgIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBpbnN0YW5jZS5mb3JtXG4gICAgICB9KTtcbiAgICAgIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBpbnN0YW5jZS5mbG93XG4gICAgICB9KTtcbiAgICAgIHN0ZWVkb3NEYXRhLnN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzID0gX2dldFN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzKGZvcm0uY3VycmVudC5maWVsZHMsIGZsb3cuY3VycmVudC5zdGVwcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGVlZG9zRGF0YTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlID0gZnVuY3Rpb24oZGF0ZSwgdXRjT2Zmc2V0KSB7XG4gIHZhciBwYXNzaW5nO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgcGFzc2luZyA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHBhc3NpbmcgPSB0cnVlO1xuICB9XG4gIGlmICghdXRjT2Zmc2V0ICYmIHV0Y09mZnNldCAhPT0gMCkge1xuICAgIHV0Y09mZnNldCA9IDg7XG4gIH1cbiAgcmV0dXJuIG1vbWVudChkYXRlKS51dGNPZmZzZXQodXRjT2Zmc2V0LCBwYXNzaW5nKS5mb3JtYXQoXCJZWVlZLU1NLUREIEhIOm1tXCIpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgaW5zdGFuY2VDb21waWxlZCwgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiwgaW5zdGFuY2VUZW1wbGF0ZSwgc3RlZWRvc0RhdGE7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuICBzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IGZhbHNlO1xuICBpZiAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5hYnNvbHV0ZSA6IHZvaWQgMCkge1xuICAgIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcbiAgfVxuICBpbnN0YW5jZVRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlLCBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLnRlbXBsYXRlTmFtZSA6IHZvaWQgMCk7XG4gIGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmU2VsZWN0VXNlci9nLCBcImFmU2VsZWN0VXNlclJlYWRcIik7XG4gIGlmICghKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZWRpdGFibGUgOiB2b2lkIDApKSB7XG4gICAgaW5zdGFuY2VUZW1wbGF0ZSA9IGluc3RhbmNlVGVtcGxhdGUucmVwbGFjZSgvYWZGb3JtR3JvdXAvZywgXCJhZkZvcm1Hcm91cFJlYWRcIik7XG4gIH1cbiAgaW5zdGFuY2VDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoaW5zdGFuY2VUZW1wbGF0ZSwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VDb21waWxlZCk7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbnN0YW5jZV9yZWFkb25seV92aWV3XCIsIGluc3RhbmNlUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZV9yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcuaGVscGVycyhJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzKTtcbiAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluaXQoc3RlZWRvc0RhdGEpO1xuICBib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldywgc3RlZWRvc0RhdGEpO1xuICByZXR1cm4gXCI8ZGl2IGlkPSdpbnN0YW5jZWZvcm0nID5cXG5cdFwiICsgYm9keSArIFwiXFxuPC9kaXY+XCI7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VHJhY2VzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgZm9ybSwgc3RlZWRvc0RhdGEsIHRyYWNlQ29tcGlsZWQsIHRyYWNlUmVuZGVyRnVuY3Rpb24sIHRyYWNlc0h0bWw7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpO1xuICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnN0YW5jZS5mb3JtKTtcbiAgaWYgKGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT09IFwidGFibGVcIiB8fCAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy50ZW1wbGF0ZU5hbWUgOiB2b2lkIDApID09PSBcInRhYmxlXCIpIHtcbiAgICB0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX3RhYmxlLmh0bWwnKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzLmh0bWwnKTtcbiAgfVxuICB0cmFjZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0cmFjZXNIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICB0cmFjZVJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZUNvbXBpbGVkKTtcbiAgVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInRyYWNlX3JlYWRvbmx5X3ZpZXdcIiwgdHJhY2VSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnRyYWNlX3JlYWRvbmx5X3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzKFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMpO1xuICBib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldywgaW5zdGFuY2UudHJhY2VzKTtcbiAgcmV0dXJuIGJvZHk7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcgPSBmdW5jdGlvbih1c2VyLCBzcGFjZSwgaW5zdGFuY2UpIHtcbiAgdmFyIGF0dGFjaG1lbnRDb21waWxlZCwgYXR0YWNobWVudEh0bWwsIGF0dGFjaG1lbnRSZW5kZXJGdW5jdGlvbiwgYm9keSwgc3RlZWRvc0RhdGE7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpO1xuICBhdHRhY2htZW50SHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL2luc3RhbmNlX2F0dGFjaG1lbnRzLmh0bWwnKTtcbiAgYXR0YWNobWVudENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShhdHRhY2htZW50SHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgYXR0YWNobWVudFJlbmRlckZ1bmN0aW9uID0gZXZhbChhdHRhY2htZW50Q29tcGlsZWQpO1xuICBUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiYXR0YWNobWVudHNfcmVhZG9ubHlfdmlld1wiLCBhdHRhY2htZW50UmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcuaGVscGVycyhJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzKTtcbiAgYm9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcpO1xuICByZXR1cm4gYm9keTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRSZWxhdGVkSW5zdGFuY2VzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgcmVsYXRlZEluc3RhbmNlc0NvbXBpbGVkLCByZWxhdGVkSW5zdGFuY2VzSHRtbCwgcmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uLCBzdGVlZG9zRGF0YTtcbiAgc3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmFic29sdXRlIDogdm9pZCAwKSB7XG4gICAgc3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuICB9XG4gIHJlbGF0ZWRJbnN0YW5jZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvcmVsYXRlZF9pbnN0YW5jZXMuaHRtbCcpO1xuICByZWxhdGVkSW5zdGFuY2VzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRJbnN0YW5jZXNIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICByZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCk7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJyZWxhdGVkX2luc3RhbmNlc192aWV3XCIsIHJlbGF0ZWRJbnN0YW5jZXNSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgVGVtcGxhdGUucmVsYXRlZF9pbnN0YW5jZXNfdmlldy5oZWxwZXJzKFJlbGF0ZWRJbnN0YW5jZXMuaGVscGVycyk7XG4gIGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LCBzdGVlZG9zRGF0YSk7XG4gIHJldHVybiBib2R5O1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFJlbGF0ZWRSZWNvcmRzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgcmVsYXRlZFJlY29yZHNDb21waWxlZCwgcmVsYXRlZFJlY29yZHNIdG1sLCByZWxhdGVkUmVjb3Jkc1JlbmRlckZ1bmN0aW9uLCBzdGVlZG9zRGF0YTtcbiAgc3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmFic29sdXRlIDogdm9pZCAwKSB7XG4gICAgc3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuICB9XG4gIHJlbGF0ZWRSZWNvcmRzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3JlbGF0ZWRfcmVjb3Jkcy5odG1sJyk7XG4gIHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRSZWNvcmRzSHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbiA9IGV2YWwocmVsYXRlZFJlY29yZHNDb21waWxlZCk7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwicmVsYXRlZF9yZWNvcmRzX3ZpZXdcIiwgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LmhlbHBlcnMoUmVsYXRlZFJlY29yZHMuaGVscGVycyk7XG4gIGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX3JlY29yZHNfdmlldywgc3RlZWRvc0RhdGEpO1xuICByZXR1cm4gYm9keTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICB2YXIgZm9ybV9zY3JpcHQsIGZvcm1fdmVyc2lvbjtcbiAgZm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbik7XG4gIGZvcm1fc2NyaXB0ID0gZm9ybV92ZXJzaW9uLmZvcm1fc2NyaXB0O1xuICBpZiAoZm9ybV9zY3JpcHQgJiYgZm9ybV9zY3JpcHQucmVwbGFjZSgvXFxuL2csIFwiXCIpLnJlcGxhY2UoL1xccy9nLCBcIlwiKS5sZW5ndGggPiAwKSB7XG4gICAgZm9ybV9zY3JpcHQgPSBcIkNvcmVGb3JtID0ge307Q29yZUZvcm0uaW5zdGFuY2Vmb3JtID0ge307XCIgKyBmb3JtX3NjcmlwdDtcbiAgICByZXR1cm4gZm9ybV9zY3JpcHQgKz0gXCI7aWYoQ29yZUZvcm0uZm9ybV9PbkxvYWQpe3dpbmRvdy5vbmxvYWQgPSBDb3JlRm9ybS5mb3JtX09uTG9hZCgpO31cIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZm9ybV9zY3JpcHQgPSBcIlwiO1xuICB9XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sID0gZnVuY3Rpb24odXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKSB7XG4gIHZhciBhbGxDc3NMaW5rLCBhdHRhY2htZW50LCBib2R5LCBjcmVhdG9yU2VydmljZSwgY3NzSHJlZiwgZm9ybSwgZm9ybURlc2NyaXB0aW9uLCBmb3JtRGVzY3JpcHRpb25IdG1sLCBodG1sLCBpbnNfcmVjb3JkX2lkcywgaW5zdGFuY2VCb3hTdHlsZSwgaW5zdGFuY2Vfc3R5bGUsIGpxSHJlZiwgbG9jYWxlLCBvbkxvYWRTY3JpcHQsIG9wZW5GaWxlU2NyaXB0LCByZWYsIHJlZjEsIHJlbGF0ZWRfaW5zdGFuY2VzLCByZWxhdGVkX3JlY29yZHMsIHNob3dUcmFjZXNCdG4sIHNob3dUcmFjZXNTY3JpcHQsIHRyYWNlLCB0cmFjZUNoZWNrLCB3aWR0aDtcbiAgYm9keSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZVZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgb25Mb2FkU2NyaXB0ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldE9uTG9hZFNjcmlwdChpbnN0YW5jZSk7XG4gIGNyZWF0b3JTZXJ2aWNlID0gKHJlZiA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53ZWJzZXJ2aWNlcykgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNyZWF0b3IpICE9IG51bGwgPyByZWYxLnVybCA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgaW5zX3JlY29yZF9pZHMgPSBpbnN0YW5jZS5yZWNvcmRfaWRzO1xuICBsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuICBvcGVuRmlsZVNjcmlwdCA9IFwiaWYod2luZG93LmlzTm9kZSAmJiBpc05vZGUoKSl7XFxuXHRhdHRhY2hzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcXFwiaW5zX2F0dGFjaF9ocmVmXFxcIik7XFxuXHRmb3IodmFyIGkgPSAwOyBpIDwgYXR0YWNocy5sZW5ndGg7IGkrKyl7XFxuXHRcdGF0dGFjaCA9IGF0dGFjaHNbaV07XFxuXHRcdGF0dGFjaC5hZGRFdmVudExpc3RlbmVyKFxcXCJjbGlja1xcXCIsIGZ1bmN0aW9uKGUpe1xcblx0XHRcdGlmKGlzSW1hZ2UodGhpcy5kYXRhc2V0LnR5cGUpIHx8IGlzSHRtbCh0aGlzLmRhdGFzZXQudHlwZSkpe1xcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xcblx0XHRcdFx0b3BlbldpbmRvdyhcXFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvXFxcIiArIHRoaXMuZGF0YXNldC5pZCk7XFxuXHRcdFx0fWVsc2UgaWYobndfY29yZS5jYW5PcGVuRmlsZSh0aGlzLmRhdGFzZXQubmFtZSkpe1xcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xcblx0XHRcdFx0bndfY29yZS5vcGVuRmlsZSh0aGlzLmhyZWYsIHRoaXMuZGF0YXNldC5uYW1lKVxcblx0XHRcdH1cXG5cdFx0fSk7XFxuXHR9XFxufVxcblxcbnZhciBmbG93ID0gXFxcIlwiICsgaW5zdGFuY2UuZmxvdyArIFwiXFxcIjtcXG52YXIgc3BhY2UgPSBcXFwiXCIgKyBpbnN0YW5jZS5zcGFjZSArIFwiXFxcIjtcXG5cXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSl7XFxuXHRsZXQgcGF0dGVybiA9IFJlZ0V4cChuYW1lICsgXFxcIj0uW147XSpcXFwiKVxcblx0bGV0IG1hdGNoZWQgPSBkb2N1bWVudC5jb29raWUubWF0Y2gocGF0dGVybilcXG5cdGlmKG1hdGNoZWQpe1xcblx0XHRsZXQgY29va2llID0gbWF0Y2hlZFswXS5zcGxpdCgnPScpXFxuXHRcdHJldHVybiBjb29raWVbMV1cXG5cdH1cXG5cdHJldHVybiAnJ1xcbn1cXG5cXG52YXIgcmVjb3JkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXFxcImlucy1yZWxhdGVkLXJlY29yZHNcXFwiKTtcXG5mb3IodmFyIGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKyl7XFxuXHRcdHZhciByZWNvcmQgPSByZWNvcmRzW2ldO1xcblx0XHRyZWNvcmQuYWRkRXZlbnRMaXN0ZW5lcihcXFwiY2xpY2tcXFwiLCBmdW5jdGlvbihlKXtcXG5cdFx0XHR2YXIgY3JlYXRvclNlcnZpY2UgPSBcXFwiXCIgKyBjcmVhdG9yU2VydmljZSArIFwiXFxcIlxcblx0XHRcdHZhciBpbnNfcmVjb3JkX2lkcyA9IFwiICsgKEpTT04uc3RyaW5naWZ5KGluc19yZWNvcmRfaWRzKSkgKyBcIlxcblx0XHRcdGlmKGNyZWF0b3JTZXJ2aWNlICYmIGluc19yZWNvcmRfaWRzICYmIGluc19yZWNvcmRfaWRzLmxlbmd0aCA+IDApe1xcblx0XHRcdFx0dmFyIG9iamNldE5hbWUgPSBpbnNfcmVjb3JkX2lkc1swXS5vXFxuXHRcdFx0XHR2YXIgaWQgPSBpbnNfcmVjb3JkX2lkc1swXS5pZHNbMF1cXG5cdFx0XHRcdHZhciB1b2JqID0ge307XFxuXHRcdFx0XHR1b2JqW1xcXCJYLVVzZXItSWRcXFwiXSA9IGdldENvb2tpZShcXFwiWC1Vc2VyLUlkXFxcIik7XFxuXHRcdFx0XHR1b2JqW1xcXCJYLUF1dGgtVG9rZW5cXFwiXSA9IGdldENvb2tpZShcXFwiWC1BdXRoLVRva2VuXFxcIik7XFxuXHRcdFx0XHRyZWRpcmVjdFVybCA9IGNyZWF0b3JTZXJ2aWNlICsgXFxcImFwcC8tL1xcXCIgKyBvYmpjZXROYW1lICsgXFxcIi92aWV3L1xcXCIgKyBpZCArIFxcXCI/XFxcIiArICQucGFyYW0odW9iaik7XFxuXHRcdFx0XHRvcGVuV2luZG93KHJlZGlyZWN0VXJsKTtcXG5cdFx0XHR9XFxuXHRcdH0pO1xcblx0fVxcblwiO1xuICBpZiAoIVN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuICAgIGlmICgoZm9ybSAhPSBudWxsID8gZm9ybS5pbnN0YW5jZV9zdHlsZSA6IHZvaWQgMCkgPT09ICd0YWJsZScpIHtcbiAgICAgIGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiO1xuICAgIH1cbiAgfVxuICBpZiAoKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMudGVtcGxhdGVOYW1lIDogdm9pZCAwKSA9PT0gJ3RhYmxlJykge1xuICAgIGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiO1xuICB9XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmluc3RhbmNlX3N0eWxlIDogdm9pZCAwKSB7XG4gICAgaW5zdGFuY2Vfc3R5bGUgPSBvcHRpb25zLmluc3RhbmNlX3N0eWxlO1xuICB9XG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnNob3dUcmFjZSA9PT0gdHJ1ZSkge1xuICAgIHRyYWNlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFRyYWNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZSA9IFwiXCI7XG4gIH1cbiAgaW5zdGFuY2VCb3hTdHlsZSA9IFwiXCI7XG4gIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5maW5hbF9kZWNpc2lvbikge1xuICAgIGlmIChpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICBpbnN0YW5jZUJveFN0eWxlID0gXCJib3gtc3VjY2Vzc1wiO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuZmluYWxfZGVjaXNpb24gPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgaW5zdGFuY2VCb3hTdHlsZSA9IFwiYm94LWRhbmdlclwiO1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPT09IHRydWUpIHtcbiAgICBhdHRhY2htZW50ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEF0dGFjaG1lbnRWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gICAgcmVsYXRlZF9pbnN0YW5jZXMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZEluc3RhbmNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgICByZWxhdGVkX3JlY29yZHMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgYXR0YWNobWVudCA9IFwiXCI7XG4gICAgcmVsYXRlZF9pbnN0YW5jZXMgPSBcIlwiO1xuICAgIHJlbGF0ZWRfcmVjb3JkcyA9IFwiXCI7XG4gIH1cbiAgd2lkdGggPSBcIjk2MHB4XCI7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLndpZHRoIDogdm9pZCAwKSB7XG4gICAgd2lkdGggPSBcIlwiO1xuICB9XG4gIGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJzdGVlZG9zLWNzc1wiKTtcbiAganFIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid2Vic2l0ZS9saWJzL2pxdWVyeS5taW4uanNcIik7XG4gIGFsbENzc0xpbmsgPSBcIjxsaW5rIHJlbD1cXFwic3R5bGVzaGVldFxcXCIgdHlwZT1cXFwidGV4dC9jc3NcXFwiIGNsYXNzPVxcXCJfX21ldGVvci1jc3NfX1xcXCIgaHJlZj1cXFwiXCIgKyBjc3NIcmVmICsgXCJcXFwiPlwiO1xuICB0cmFjZUNoZWNrID0gXCJcIjtcbiAgaWYgKCFfLmlzRW1wdHkodHJhY2UpKSB7XG4gICAgdHJhY2VDaGVjayA9IFwiY2hlY2tlZFwiO1xuICB9XG4gIGlmICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy50YWdnZXIgOiB2b2lkIDApID09PSAnZW1haWwnIHx8IChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmVkaXRhYmxlIDogdm9pZCAwKSkge1xuICAgIHNob3dUcmFjZXNCdG4gPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIHNob3dUcmFjZXNCdG4gPSBcIjxkaXYgY2xhc3M9XFxcIm5hdmlnYXRpb24tYmFyIGJ0bi1ncm91cCBuby1wcmludFxcXCIgc3R5bGU9XFxcIm1pbi13aWR0aDogNjAwcHg7IHotaW5kZXg6IDk5OTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiPlxcblx0PGRpdiBjbGFzcz1cXFwicHJpbnQtdG9vbFxcXCI+XFxuXHRcdDxsYWJlbCBjbGFzcz1cXFwiY2J4LWxhYmVsXFxcIj48aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIGNsYXNzPVxcXCJjYngtcHJpbnQgY2J4LXByaW50LWF0dGFjaG1lbnRzXFxcIiBpZD1cXFwiY2J4LXByaW50LWF0dGFjaG1lbnRzXFxcIiBjaGVja2VkPVxcXCJjaGVja2VkXFxcIj48c3Bhbj5cIiArIChUQVBpMThuLl9fKCdpbnN0YW5jZV9hdHRhY2htZW50Jywge30sIGxvY2FsZSkpICsgXCI8L3NwYW4+PC9sYWJlbD5cXG5cdFx0PGxhYmVsIGNsYXNzPVxcXCJjYngtbGFiZWxcXFwiPjxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgY2xhc3M9XFxcImNieC1wcmludCBjYngtcHJpbnQtdHJhY2VzXFxcIiBpZD1cXFwiY2J4LXByaW50LXRyYWNlc1xcXCIgY2hlY2tlZD1cXFwiXCIgKyB0cmFjZUNoZWNrICsgXCJcXFwiPjxzcGFuPlwiICsgKFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmFsX2hpc3RvcnknLCB7fSwgbG9jYWxlKSkgKyBcIjwvc3Bhbj48L2xhYmVsPlxcblx0PC9kaXY+XFxuPC9kaXY+XCI7XG4gIH1cbiAgc2hvd1RyYWNlc1NjcmlwdCA9IFwiJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpe1xcblx0dmFyIGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LXRyYWNlcycpO1xcblx0dmFyIHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnN0YW5jZS10cmFjZXMnKVswXTtcXG5cdGlmIChiICYmIGIuY2hlY2tlZCAmJiB0KXtcXG5cdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXFxuXHR9IGVsc2UgaWYodCl7XFxuXHRcdHQuc3R5bGUgPSAnZGlzcGxheTogbm9uZTsnXFxuXHR9XFxuXHRpZihiKXtcXG5cdFx0Yi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXtcXG5cdFx0XHRpZiAoZS50YXJnZXQuY2hlY2tlZCl7XFxuXHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcXG5cdFx0XHR9IGVsc2Uge1xcblx0XHRcdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBub25lOydcXG5cdFx0XHR9XFxuXHRcdH0pO1xcblx0fVxcblxcblxcblx0dmFyIGF0dGFjaG1lbnRzQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LWF0dGFjaG1lbnRzJyk7XFxuXHR2YXIgYXR0YWNobWVudHNWaWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0YWNobWVudHMtc2VjdGlvbicpWzBdO1xcblx0aWYgKGF0dGFjaG1lbnRzQ2hlY2tib3ggJiYgYXR0YWNobWVudHNDaGVja2JveC5jaGVja2VkICYmIGF0dGFjaG1lbnRzVmlldyl7XFxuXHRcdGF0dGFjaG1lbnRzVmlldy5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXFxuXHR9IGVsc2UgaWYoYXR0YWNobWVudHNWaWV3KXtcXG5cdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xcblx0fVxcblx0aWYoYXR0YWNobWVudHNDaGVja2JveCl7XFxuXHRcdGF0dGFjaG1lbnRzQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7XFxuXHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpe1xcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcXG5cdFx0XHR9IGVsc2Uge1xcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xcblx0XHRcdH1cXG5cdFx0fSk7XFxuXHR9XFxufSk7XFxuXCI7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLnN0eWxlcyA6IHZvaWQgMCkge1xuICAgIGFsbENzc0xpbmsgPSBcIlwiO1xuICB9XG4gIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICBfaWQ6IGluc3RhbmNlLmZvcm1cbiAgfSk7XG4gIGZvcm1EZXNjcmlwdGlvbkh0bWwgPSBcIlwiO1xuICBpZiAoZm9ybSkge1xuICAgIGZvcm1EZXNjcmlwdGlvbiA9IGZvcm0uZGVzY3JpcHRpb247XG4gICAgaWYgKGZvcm1EZXNjcmlwdGlvbikge1xuICAgICAgZm9ybURlc2NyaXB0aW9uID0gZm9ybURlc2NyaXB0aW9uLnJlcGxhY2UoL1xcbi9nLCBcIjxici8+XCIpO1xuICAgICAgZm9ybURlc2NyaXB0aW9uSHRtbCA9IFwiPGRpdiBjbGFzcz1cXFwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXIgaW5zdGFuY2UtaGVhZGVyXFxcIj5cXG5cdDxkaXY+XFxuXHRcdFwiICsgZm9ybURlc2NyaXB0aW9uICsgXCJcXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICAgIH1cbiAgfVxuICBodG1sID0gXCI8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG5cdDxoZWFkPlxcblx0XHQ8bWV0YSBodHRwLWVxdWl2PVxcXCJDb250ZW50LVR5cGVcXFwiIGNvbnRlbnQ9XFxcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFxcXCIvPlxcblx0XHRcIiArIGFsbENzc0xpbmsgKyBcIlxcblx0XHQ8c2NyaXB0IHNyYz1cXFwiXCIgKyBqcUhyZWYgKyBcIlxcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIj48L3NjcmlwdD5cXG5cdFx0PHNjcmlwdCBzcmM9XFxcIi9qcy9ud19jb3JlLmpzXFxcIiB0eXBlPVxcXCJ0ZXh0L2phdmFzY3JpcHRcXFwiPjwvc2NyaXB0Plxcblx0XHRcIiArIChvcHRpb25zLnBsdWdpbnMgfHwgXCJcIikgKyBcIlxcblxcblx0XHQ8c3R5bGU+XFxuXHRcdFx0LnN0ZWVkb3N7XFxuXHRcdFx0XHR3aWR0aDogXCIgKyB3aWR0aCArIFwiO1xcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IGF1dG87XFxuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87XFxuXHRcdFx0fVxcblxcblx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS1uYW1le1xcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnRcXG5cdFx0XHR9XFxuXHRcdFx0LmJveC10b29sc3tcXG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XFxuXHRcdFx0fVxcblx0XHRcdC5ib3guY29sbGFwc2VkLWJveCAuYm94LWJvZHksLmJveC5jb2xsYXBzZWQtYm94IC5ib3gtZm9vdGVyIHtcXG5cdFx0XHQgIGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cXG5cdFx0XHRib2R5e1xcblx0XHRcdFx0YmFja2dyb3VuZDogYXp1cmUgIWltcG9ydGFudDtcXG5cdFx0XHR9XFxuXFxuXHRcdFx0Lmluc3RhbmNlLXZpZXcgLmluc3RhbmNlLXRyYWNlc3tcXG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMTVweDtcXG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDE1cHg7XFxuXHRcdFx0fVxcblxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtIHtcXG5cdFx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1JbWFnZUNvbnRyb2wtYWRkQnRuLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcXG5cdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG5cdFx0XHRtYXJnaW4tcmlnaHQ6IHZhcigtLWdhcC1iYXNlKTtcXG5cdFx0XHRtYXJnaW4tYm90dG9tOiB2YXIoLS1nYXAtYmFzZSk7XFxuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblx0XHRcdHdpZHRoOiA3LjVyZW07XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtLmlzLWludmFsaWQge1xcblx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1GaWxlQ29udHJvbC1kYW5nZXItY29sb3IpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBzdmcuaWNvbi1yZWZyZXNoIHtcXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZmlsZW5hbWUge1xcblx0XHRcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xcblx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cdFx0XHRjb2xvcjogdmFyKC0tRmlsZUNvbnRyb2wtZGFuZ2VyLWNvbG9yKTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpbGVuYW1lID4gc3ZnLmljb24taW1hZ2Uge1xcblx0XHRcdG1hcmdpbi1ib3R0b206IDhweDtcXG5cdFx0XHR3aWR0aDogMjRweDtcXG5cdFx0XHRoZWlnaHQ6IDI0cHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maWxlbmFtZSA+IHNwYW4ge1xcblx0XHRcdG1heC13aWR0aDogMTAwJTtcXG5cdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xcblx0XHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXHRcdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pbWFnZSB7XFxuXHRcdFx0d2lkdGg6IDEwMCU7XFxuXHRcdFx0aGVpZ2h0OiAxMDAlO1xcblx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0Ym9yZGVyOiBub25lO1xcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcXG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xcblx0XHRcdGNvbG9yOiAjOTk5O1xcblx0XHRcdHRvcDogNXB4O1xcblx0XHRcdHJpZ2h0OiA1cHg7XFxuXHRcdFx0bGluZS1oZWlnaHQ6IDE7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIgPiBzdmcge1xcblx0XHRcdHRvcDogMDtcXG5cdFx0XHR3aWR0aDogMTBweDtcXG5cdFx0XHRoZWlnaHQ6IDEwcHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtSW5mbyB7XFxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XFxuXHRcdFx0d2lkdGg6IDExMHB4O1xcblx0XHRcdGhlaWdodDogMTEwcHg7XFxuXHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cdFx0XHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0ZmxleC13cmFwOiB3cmFwO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUluZm8gPiBwIHtcXG5cdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XFxuXHRcdFx0Zm9udC1zaXplOiAxMnB4O1xcblx0XHRcdG1hcmdpbi1ib3R0b206IDVweDtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXByb2dyZXNzIHtcXG5cdFx0XHR3aWR0aDogNzBweDtcXG5cdFx0XHRoZWlnaHQ6IDVweDtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZWJlYmViO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3NWYWx1ZSB7XFxuXHRcdFx0aGVpZ2h0OiA1cHg7XFxuXHRcdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tSW1hZ2VDb250cm9sLXByb2dyZXNzLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0ZGlzcGxheTogYmxvY2s7XFxuXHRcdFx0YmFja2dyb3VuZDogdmFyKC0taW5mbyk7XFxuXHRcdFx0bWluLXdpZHRoOiAxMCU7XFxuXHRcdFx0dHJhbnNpdGlvbjogZWFzZS1vdXQgd2lkdGggdmFyKC0tYW5pbWF0aW9uLWR1cmF0aW9uKTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0uaXMtaW52YWxpZCAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcXG5cdFx0XHRkaXNwbGF5OiBub25lO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbS5pcy1pbnZhbGlkOmhvdmVyIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZXJyb3JNc2cge1xcblx0XHRcdGNvbG9yOiB2YXIoLS1kYW5nZXIpO1xcblx0XHRcdG1hcmdpbjogNXB4IDAgMDtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXVwbG9hZEJ0biB7XFxuXHRcdFx0bWFyZ2luLXRvcDogNXB4O1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcHBlcldyYXBwZXIge1xcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWNyb3BwZXJXcmFwcGVyIGltZyB7XFxuXHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xcblx0XHRcdG1heC1oZWlnaHQ6IDQwMHB4O1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciB7XFxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XFxuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xcblx0XHRcdHJpZ2h0OiAwO1xcblx0XHRcdGJvdHRvbTogMDtcXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblx0XHRcdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xcblx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcXG5cdFx0XHRtYXJnaW46IDAuNXJlbTtcXG5cdFx0XHRib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciA+IGEge1xcblx0XHRcdGNvbG9yOiB2YXIoLS1Gb3JtLWl0ZW0tZm9udENvbG9yKTtcXG5cdFx0XHRwYWRkaW5nOiAycHggNXB4O1xcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcXG5cdFx0XHRmb250LXNpemU6IDE4cHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyID4gYTpob3ZlciB7XFxuXHRcdFx0Y29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtYWNjZXB0VGlwIHtcXG5cdFx0XHRoZWlnaHQ6IDEyMHB4O1xcblx0XHRcdGNvbG9yOiAjOTk5O1xcblx0XHRcdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXJDb2xvcik7XFxuXHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvKTtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZjNmOWZlO1xcblx0XHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0bGluZS1oZWlnaHQ6IDEyMHB4O1xcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpeGVkLXNpemUge1xcblx0XHRcdHdpZHRoOiAxMDAlO1xcblx0XHRcdGhlaWdodDogMTAwJTtcXG5cdFx0XHRwYWRkaW5nOiAwO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbU92ZXJsYXkge1xcblx0XHRcdHdpZHRoOiAxMDAlO1xcblx0XHRcdGhlaWdodDogMTAwJTtcXG5cdFx0XHR9XFxuXFxuXHRcdFx0LmFudGQtSW1hZ2VzIHtcXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XFxuXHRcdFx0XHRmbGV4LXdyYXA6IHdyYXA7XFxuXHRcdFx0XHRtYXJnaW46IGNhbGModmFyKC0tZ2FwLXhzKSAqIC0xKTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlcy1pdGVtIHtcXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XFxuXHRcdFx0XHRtYXJnaW46IHZhcigtLWdhcC14cyk7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZSB7XFxuXHRcdFx0XHRib3JkZXI6IHZhcigtLWJvcmRlcldpZHRoKSBzb2xpZCB2YXIoLS1ib3JkZXJDb2xvcik7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS0tdGh1bWIge1xcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcblx0XHRcdFx0cGFkZGluZzogdmFyKC0tZ2FwLXhzKTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iV3JhcCB7XFxuXHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS1pbWFnZSB7XFxuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLWltYWdlLS1sb2FkaW5nIHtcXG5cdFx0XHRcdHZpc2liaWxpdHk6IGhpZGRlbjtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLS1vcmlnaW5hbCAuYW50ZC1JbWFnZS1pbWFnZSB7XFxuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMCU7XFxuXHRcdFx0XHRtYXgtaGVpZ2h0OiAxMDAlO1xcblx0XHRcdFx0d2lkdGg6IGF1dG87XFxuXHRcdFx0XHRtYXJnaW46IGF1dG87XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYiB7XFxuXHRcdFx0XHR3aWR0aDogNi44NzVyZW07XFxuXHRcdFx0XHRoZWlnaHQ6IDYuODc1cmVtO1xcblx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblx0XHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iID4gaW1nIHtcXG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cdFx0XHRcdGxlZnQ6IDUwJTtcXG5cdFx0XHRcdHRvcDogNTAlO1xcblx0XHRcdFx0bWF4LWhlaWdodDogMTAwJTtcXG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xcblx0XHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS1pbmZvIHtcXG5cdFx0XHRcdHBhZGRpbmc6IDVweCAxMHB4O1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtLXRodW1iIC5hbnRkLUltYWdlLWluZm8ge1xcblx0XHRcdFx0d2lkdGg6IDYuODc1cmVtO1xcblx0XHRcdFx0cGFkZGluZzogMDtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS00LTMge1xcblx0XHRcdFx0aGVpZ2h0OiA1LjE1NjI1cmVtO1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLTE2LTkge1xcblx0XHRcdFx0aGVpZ2h0OiAzLjg2NzE4NzVyZW07XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSB7XFxuXHRcdFx0XHRtaW4td2lkdGg6IDYuODc1cmVtO1xcblx0XHRcdFx0bWluLWhlaWdodDogNi44NzVyZW07XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0XHRoZWlnaHQ6IDEwMCU7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZS10aHVtYiB7XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIC5hbnRkLUltYWdlLXRodW1iID4gaW1nIHtcXG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLXctZnVsbCA+IGltZyB7XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdGhlaWdodDogYXV0bztcXG5cdFx0XHRcdH1cXG5cXG5cdFx0XHRcIiArICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5zdHlsZXMgOiB2b2lkIDApIHx8IFwiXCIpICsgXCJcXG5cXG5cdFx0XHRcIiArICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5hZGRfc3R5bGVzIDogdm9pZCAwKSB8fCBcIlwiKSArIFwiXFxuXHRcdDwvc3R5bGU+XFxuXHQ8L2hlYWQ+XFxuXHQ8Ym9keT5cXG5cdFx0PGRpdiBjbGFzcz1cXFwic3RlZWRvcyB3b3JrZmxvdyBpbnN0YW5jZS1wcmludFxcXCI+XFxuXHRcdFx0PGRpdiBjbGFzcz1cXFwic2tpbi1ncmVlbiBza2luLWFkbWluLWx0ZVxcXCI+XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJ3cmFwcGVyXFxcIj5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiY29udGVudC13cmFwcGVyXFxcIj5cXG5cdFx0XHRcdFx0XHRcIiArIHNob3dUcmFjZXNCdG4gKyBcIlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImluc3RhbmNlLXByaW50XFxcIj5cXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImluc3RhbmNlIFwiICsgaW5zdGFuY2Vfc3R5bGUgKyBcIlxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDxmb3JtIG5hbWU9XFxcImluc3RhbmNlRm9ybVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiaW5zdGFuY2UtZm9ybSBib3ggXCIgKyBpbnN0YW5jZUJveFN0eWxlICsgXCJcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyBmb3JtRGVzY3JpcHRpb25IdG1sICsgXCJcXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImJveC1ib2R5XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIiBzdHlsZT1cXFwiYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2F0dGFjaG1lbnRzLXNlY3Rpb24nPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyBhdHRhY2htZW50ICsgXCJcXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiICsgcmVsYXRlZF9pbnN0YW5jZXMgKyBcIlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyByZWxhdGVkX3JlY29yZHMgKyBcIlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiICsgYm9keSArIFwiXFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdDwvZm9ybT5cXG5cdFx0XHRcdFx0XHRcdFx0XCIgKyB0cmFjZSArIFwiXFxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXHQ8L2JvZHk+XFxuXHQ8c2NyaXB0PlwiICsgb3BlbkZpbGVTY3JpcHQgKyBcIjtcIiArIG9uTG9hZFNjcmlwdCArIFwiO1wiICsgc2hvd1RyYWNlc1NjcmlwdCArIFwiPC9zY3JpcHQ+XFxuPC9odG1sPlwiO1xuICByZXR1cm4gaHRtbDtcbn07XG4iLCJUZW1wbGF0ZU1hbmFnZXIgPSB7fTtcblxuZm9ybUlkID0gJ2luc3RhbmNlZm9ybSc7XG5cblxuVGVtcGxhdGVNYW5hZ2VyLmluc3RhbmNlX3RpdGxlID0gKCktPlxuXHRwYWdlVGl0bGUgPSBcIlwiXCJcblx0XHR7e2luc3RhbmNlLm5hbWV9fVxuXHRcIlwiXCJcblxuXHRwYWdlVGl0bGVUckNsYXNzID0gXCJpbnN0YW5jZS1uYW1lXCJcblxuXHRpZiBDb3JlRm9ybT8ucGFnZVRpdGxlRmllbGROYW1lXG5cdFx0cGFnZVRpdGxlID0gXCJcIlwiXG5cdFx0XHRcdHt7PiBhZkZvcm1Hcm91cCBuYW1lPVwiI3tDb3JlRm9ybS5wYWdlVGl0bGVGaWVsZE5hbWV9XCIgbGFiZWw9ZmFsc2V9fVxuXHRcdFwiXCJcIlxuXHRcdHBhZ2VUaXRsZVRyQ2xhc3MgPSBcIlwiXG5cblx0aWYgQ29yZUZvcm0/LnBhZ2VUaXRsZVxuXHRcdHBhZ2VUaXRsZSA9IFwiXCJcIlxuXHRcdFx0I3tDb3JlRm9ybS5wYWdlVGl0bGV9XG5cdFx0XCJcIlwiXG5cdFx0cGFnZVRpdGxlVHJDbGFzcyA9IFwiXCJcblxuXHR2YWwgPVxuXHRcdHBhZ2VUaXRsZTogcGFnZVRpdGxlXG5cdFx0cGFnZVRpdGxlVHJDbGFzczogcGFnZVRpdGxlVHJDbGFzc1xuXG5cdHJldHVybiB2YWxcblxuVGVtcGxhdGVNYW5hZ2VyLmhhbmRsZVRhYmxlVGVtcGxhdGUgPSAoaW5zdGFuY2UsIF9leHBvcnQpIC0+XG5cblx0dGVtcGxhdGUgPSBcIlwiXCJcblx0PGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlxuXHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2UtdGl0bGUgZm9ybS10YWJsZSBuby1ib3JkZXIgdGV4dC1hbGlnbi1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcIj5cblx0XHRcdDx0ciBjbGFzcz1cIiN7dGhpcy5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZVRyQ2xhc3N9XCI+XG5cdFx0XHRcdDx0ZCBjbGFzcz1cImluc3RhbmNlLXRhYmxlLW5hbWUtdGQgcGFnZS10aXRsZVwiPlxuXHRcdFx0XHRcdCN7dGhpcy5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZX1cblx0XHRcdFx0PC90ZD5cblx0XHRcdDwvdHI+XG5cblx0XHQ8L3RhYmxlPlxuXHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2UtYm9keSBmb3JtLXRhYmxlXCI+XG5cdFx0XHRcdDx0ciBzdHlsZT1cImhlaWdodDowcHhcIj5cblx0XHRcdFx0XHQ8dGggc3R5bGU9J3dpZHRoOiAxNiUnPjwvdGg+XG5cdFx0XHRcdFx0PHRoPjwvdGg+XG5cdFx0XHRcdFx0PHRoIHN0eWxlPSd3aWR0aDogMTYlJz48L3RoPlxuXHRcdFx0XHRcdDx0aD48L3RoPlxuXHRcdFx0XHQ8L3RyPlxuXHRcIlwiXCI7XG5cblx0dGFibGVfZmllbGRzID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy50YWJsZV9maWVsZHMoaW5zdGFuY2UpXG5cblx0dGFibGVfZmllbGRzICYmIHRhYmxlX2ZpZWxkcy5mb3JFYWNoICh0YWJsZV9maWVsZCktPlxuXG5cdFx0cmVxdWlyZWQgPSBcIlwiXG5cdFx0aWYgIUNvcmVGb3JtPy5wYWdlVGl0bGVGaWVsZE5hbWUgfHwgQ29yZUZvcm0/LnBhZ2VUaXRsZUZpZWxkTmFtZSAhPSB0YWJsZV9maWVsZC5jb2RlXG5cdFx0XHRpZiB0YWJsZV9maWVsZC5pc19yZXF1aXJlZFxuXHRcdFx0XHRyZXF1aXJlZCA9IFwiaXMtcmVxdWlyZWRcIlxuXG5cdFx0XHRpZiBfZXhwb3J0XG5cdFx0XHRcdHJlcXVpcmVkID0gXCJcIjtcblxuXHRcdFx0cHVyZUNvZGUgPSBTdGVlZG9zLnJlbW92ZVNwZWNpYWxDaGFyYWN0ZXIodGFibGVfZmllbGQuY29kZSk7XG5cblx0XHRcdGlmIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGQodGFibGVfZmllbGQpXG5cdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0XG5cdFx0XHRcdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdFx0XHRcdDx0ZCBjbGFzcz1cInRkLXRpdGxlICN7cmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIn19XG5cdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCBvcGluaW9uLWZpZWxkIG9waW5pb24tZmllbGQtI3twdXJlQ29kZX0gYXV0b21hdGljXCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0e3s+IGluc3RhbmNlU2lnblRleHQgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIn19XG5cdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XCJcIlwiXG5cdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRpZiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluY2x1ZGVzKHRhYmxlX2ZpZWxkLnR5cGUsICdzZWN0aW9uLHRhYmxlJylcblx0XHRcdFx0XHR0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9zdGFydFxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtY2hpbGRmaWVsZCB0ZC1jaGlsZGZpZWxkLSN7cHVyZUNvZGV9XCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0ICAge3s+IGFmRm9ybUdyb3VwIG5hbWU9XCIje3RhYmxlX2ZpZWxkLmNvZGV9XCIgbGFiZWw9ZmFsc2V9fVxuXHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0XHR0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9lbmRcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0XG5cblx0XHRcdFx0XHRpZiBfZXhwb3J0XG5cdFx0XHRcdFx0XHR0aXRsZV9wZXJtaXNzaW9uID0gXCJcIlxuXHRcdFx0XHRcdFx0ZmllbGRfcGVybWlzc2lvbiA9IFwiXCJcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0aXRsZV9wZXJtaXNzaW9uID0gXCJ0aXRsZS1cIiArIHRhYmxlX2ZpZWxkLnBlcm1pc3Npb25cblx0XHRcdFx0XHRcdGZpZWxkX3Blcm1pc3Npb24gPSBcImZpZWxkLVwiICsgdGFibGVfZmllbGQucGVybWlzc2lvblxuXG5cdFx0XHRcdFx0dGVtcGxhdGUgKz0gXCJcIlwiXG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC10aXRsZSB0ZC10aXRsZS0je3B1cmVDb2RlfSAje3RpdGxlX3Blcm1pc3Npb259ICN7cmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHRcdHt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPVwiI3t0YWJsZV9maWVsZC5jb2RlfVwifX1cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCB0ZC1maWVsZC0je3B1cmVDb2RlfSAje2ZpZWxkX3Blcm1pc3Npb259XCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIiBsYWJlbD1mYWxzZX19XG5cdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZFxuXG5cdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdDwvdGFibGU+XG5cblx0XHQ8dGFibGUgY2xhc3M9XCJ0YWJsZS1wYWdlLWZvb3RlciBmb3JtLXRhYmxlIG5vLWJvcmRlclwiPlxuXHRcdFx0PHRyIGNsYXNzPVwiYXBwbGljYW50LXdyYXBwZXJcIj5cblx0XHRcdFx0PHRkIGNsYXNzPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5saW5lLWxlZnQnPlxuXHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7X3QgXCJpbnN0YW5jZV9pbml0aWF0b3JcIn1977yaPC9sYWJlbD5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkIGlubGluZS1sZWZ0Jz5cblx0XHRcdFx0XHRcdHt7PlRlbXBsYXRlLmR5bmFtaWMgIHRlbXBsYXRlPVwiYWZTZWxlY3RVc2VyXCIgZGF0YT1hcHBsaWNhbnRDb250ZXh0fX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC90ZD5cblx0XHRcdFx0PHRkIGNsYXNzPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0ncHVsbC1sZWZ0Jz5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2lubGluZS1sZWZ0Jz5cblx0XHRcdFx0XHRcdFx0PGxhYmVsPnt7X3QgXCJpbnN0YW5jZV9zdWJtaXRfZGF0ZVwifX3vvJo8L2xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbmxpbmUtcmlnaHQnPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdHt7Zm9ybWF0RGF0ZSBpbnN0YW5jZS5zdWJtaXRfZGF0ZSAne1wiZm9ybWF0XCI6XCJZWVlZLU1NLUREXCJ9J319XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvdGQ+XG5cdFx0XHQ8L3RyPlxuXHRcdDwvdGFibGU+XG5cdDwvZGl2PlxuXHRcIlwiXCJcblx0cmV0dXJuIHRlbXBsYXRlXG5cbiPmraTlpITmqKHmnb/lhaznlKjkuI7vvJppbnN0YW5jZSDnvJbovpHjgIHmn6XnnIvjgIHmiZPljbDjgIHovazlj5Hml7bnlJ/miJDpmYTku7bjgIHlj5HpgIHpgq7ku7Zib2R56YOo5YiGKHRhYmxlIOaooeadvylcbiPlpoLmnpzmnInkv67mlLnvvIzor7fmtYvor5Xnoa7orqTlhbbku5blip/og73mmK/lkKbmraPluLjjgIJcblRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUgPVxuXHRkZWZhdWx0OiAoaW5zdGFuY2UpLT5cblxuXHRcdHRlbXBsYXRlID0gXCJcIlwiXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid2l0aC1ib3JkZXIgY29sLW1kLTEyXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnN0YW5jZS1uYW1lXCI+XG5cdFx0XHRcdFx0PGgzIGNsYXNzPVwiYm94LXRpdGxlXCI+I3tUZW1wbGF0ZU1hbmFnZXIuaW5zdGFuY2VfdGl0bGUoKS5wYWdlVGl0bGV9PC9oMz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImhlbHAtYmxvY2tcIj48L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImhlbHAtYmxvY2tcIj48L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHt7I2VhY2ggc3RlZWRvc19mb3JtLmZpZWxkc319XG5cdFx0XHRcdHt7I2lmIGlzT3BpbmlvbkZpZWxkIHRoaXN9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGF1dG9tYXRpYyBvcGluaW9uLWZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPXRoaXMuY29kZX19PC9sYWJlbD5cblxuXHRcdFx0XHRcdFx0XHR7ez4gaW5zdGFuY2VTaWduVGV4dCBuYW1lPXRoaXMuY29kZX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgZmllbGQte3t0aGlzLmNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdHt7PiBhZkZvcm1Hcm91cCBuYW1lPXRoaXMuY29kZX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7ey9pZn19XG5cdFx0XHRcdHt7L2lmfX1cblx0XHRcdHt7L2VhY2h9fVxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYXBwbGljYW50LXdyYXBwZXIgZm9ybS1ncm91cCBmb3JtLWhvcml6b250YWxcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+XG5cdFx0XHRcdFx0ICB7e190IFwiaW5zdGFuY2VfaW5pdGlhdG9yXCJ9fSZuYnNwOzpcblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cImFmU2VsZWN0VXNlclwiIGRhdGE9YXBwbGljYW50Q29udGV4dH19XG5cdFx0XHRcdCAgPC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XCJcIlwiXG5cdFx0cmV0dXJuIHRlbXBsYXRlXG5cblx0dGFibGU6IChpbnN0YW5jZSktPlxuXHRcdHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuaGFuZGxlVGFibGVUZW1wbGF0ZShpbnN0YW5jZSlcbiNcdHRhYmxlOiAnJydcbiNcdFx0PHRhYmxlIGNsYXNzPVwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcIj5cbiNcdFx0XHQ8dHIgY2xhc3M9XCJpbnN0YW5jZS1uYW1lXCI+XG4jXHRcdFx0XHQ8dGQgY2xhc3M9XCJpbnN0YW5jZS10YWJsZS1uYW1lLXRkXCI+XG4jXHRcdFx0XHRcdDxoMyBjbGFzcz1cImJveC10aXRsZVwiPnt7aW5zdGFuY2UubmFtZX19PC9oMz5cbiNcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJoZWxwLWJsb2NrXCI+PC9zcGFuPlxuI1x0XHRcdFx0PC90ZD5cbiNcdFx0XHQ8L3RyPlxuIyAgICAgICAgICAgIDx0ciBjbGFzcz1cImFwcGxpY2FudC13cmFwcGVyXCI+XG4jXHRcdFx0XHQ8dGQgY2xhc3M9XCJpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkXCI+XG4jXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e190IFwiaW5zdGFuY2VfaW5pdGlhdG9yXCJ9fSZuYnNwOzo8L2xhYmVsPlxuI1x0XHRcdFx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cImFmU2VsZWN0VXNlclwiIGRhdGE9YXBwbGljYW50Q29udGV4dH19XG4jXHRcdFx0XHQ8L3RkPlxuI1x0XHRcdDwvdHI+XG4jICAgICAgICA8L3RhYmxlPlxuI1x0XHQ8dGFibGUgY2xhc3M9XCJmb3JtLXRhYmxlXCI+XG4jXHRcdCAgICB7eyNlYWNoIHRhYmxlX2ZpZWxkc319XG4jXHRcdFx0XHR7eyNpZiBpc09waW5pb25GaWVsZCB0aGlzfX1cbiNcdFx0XHRcdFx0e3t7dHJfc3RhcnR9fX1cbiNcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC10aXRsZSB7eyNpZiBpc19yZXF1aXJlZH19aXMtcmVxdWlyZWR7ey9pZn19XCI+XG4jXHRcdFx0XHRcdFx0XHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT10aGlzLmNvZGV9fVxuI1x0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtZmllbGQgb3Bpbmlvbi1maWVsZFwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0e3s+IGluc3RhbmNlU2lnblRleHQgc3RlcD0oZ2V0T3BpbmlvbkZpZWxkU3RlcE5hbWUgdGhpcykgZGVmYXVsdD0nJ319XG4jXHRcdFx0XHRcdFx0PC90ZD5cbiNcdFx0XHRcdFx0e3t7dHJfZW5kfX19XG4jXHRcdFx0XHR7e2Vsc2V9fVxuI1x0XHRcdFx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cbiNcdFx0XHRcdFx0XHR7e3t0cl9zdGFydH19fVxuI1x0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtY2hpbGRmaWVsZFwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0ICAge3s+IGFmRm9ybUdyb3VwIG5hbWU9dGhpcy5jb2RlIGxhYmVsPWZhbHNlfX1cbiNcdFx0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0e3t7dHJfZW5kfX19XG4jXHRcdFx0XHRcdHt7ZWxzZX19XG4jXHRcdFx0XHRcdFx0e3t7dHJfc3RhcnR9fX1cbiNcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cInRkLXRpdGxlIHt7I2lmIGlzX3JlcXVpcmVkfX1pcy1yZXF1aXJlZHt7L2lmfX1cIj5cbiNcdFx0XHRcdFx0XHRcdFx0e3thZkZpZWxkTGFiZWxUZXh0IG5hbWU9dGhpcy5jb2RlfX1cbiNcdFx0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCB7e3Blcm1pc3Npb259fVwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxuI1x0XHRcdFx0XHRcdFx0PC90ZD5cbiNcdFx0XHRcdFx0XHR7e3t0cl9lbmR9fX1cbiNcdFx0XHRcdFx0e3svaWZ9fVxuI1x0XHRcdFx0e3svaWZ9fVxuI1xuI1x0XHQgICAge3svZWFjaH19XG4jXHRcdDwvdGFibGU+XG4jXHQnJydcblxuVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZUhlbHBzID1cblx0YXBwbGljYW50Q29udGV4dDogLT5cblx0XHRzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0ZGF0YSA9IHtcblx0XHRcdG5hbWU6ICdpbnNfYXBwbGljYW50Jyxcblx0XHRcdGF0dHM6IHtcblx0XHRcdFx0bmFtZTogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0XHRpZDogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0XHRjbGFzczogJ3NlbGVjdFVzZXIgZm9ybS1jb250cm9sJyxcblx0XHRcdFx0c3R5bGU6ICdwYWRkaW5nOjZweCAxMnB4O3dpZHRoOjE0MHB4O2Rpc3BsYXk6aW5saW5lJ1xuXHRcdFx0fVxuXHRcdH1cbiNcdFx0aWYgbm90IHN0ZWVkb3NfaW5zdGFuY2UgfHwgc3RlZWRvc19pbnN0YW5jZS5zdGF0ZSAhPSBcImRyYWZ0XCJcblx0XHRkYXRhLmF0dHMuZGlzYWJsZWQgPSB0cnVlXG5cdFx0cmV0dXJuIGRhdGE7XG5cbmluc3RhbmNlSWQ6IC0+XG5cdHJldHVybiAnaW5zdGFuY2Vmb3JtJzsjXCJpbnN0YW5jZV9cIiArIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKTtcblxuZm9ybV90eXBlczogLT5cblx0aWYgQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cdFx0cmV0dXJuICdkaXNhYmxlZCc7XG5cdGVsc2Vcblx0XHRyZXR1cm4gJ21ldGhvZCc7XG5cbnN0ZWVkb3NfZm9ybTogLT5cblx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0cmV0dXJuIGZvcm1fdmVyc2lvblxuXG5pbm5lcnN1YmZvcm1Db250ZXh0OiAob2JqKS0+XG5cdGRvY192YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cdG9ialtcInRhYmxlVmFsdWVzXCJdID0gaWYgZG9jX3ZhbHVlcyB0aGVuIGRvY192YWx1ZXNbb2JqLmNvZGVdIGVsc2UgW11cblx0b2JqW1wiZm9ybUlkXCJdID0gZm9ybUlkO1xuXHRyZXR1cm4gb2JqO1xuXG5pbnN0YW5jZTogLT5cblx0U2Vzc2lvbi5nZXQoXCJjaGFuZ2VfZGF0ZVwiKVxuXHRpZiAoU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpKVxuXHRcdHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRyZXR1cm4gc3RlZWRvc19pbnN0YW5jZTtcblxuZXF1YWxzOiAoYSwgYikgLT5cblx0cmV0dXJuIChhID09IGIpXG5cbmluY2x1ZGVzOiAoYSwgYikgLT5cblx0cmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcblxuZmllbGRzOiAtPlxuXHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXHRpZiBmb3JtX3ZlcnNpb25cblx0XHRyZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuXG5kb2NfdmFsdWVzOiAtPlxuXHRXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cbmluc3RhbmNlX2JveF9zdHlsZTogLT5cblx0Ym94ID0gU2Vzc2lvbi5nZXQoXCJib3hcIilcblx0aWYgYm94ID09IFwiaW5ib3hcIiB8fCBib3ggPT0gXCJkcmFmdFwiXG5cdFx0anVkZ2UgPSBTZXNzaW9uLmdldChcImp1ZGdlXCIpXG5cdFx0aWYganVkZ2Vcblx0XHRcdGlmIChqdWRnZSA9PSBcImFwcHJvdmVkXCIpXG5cdFx0XHRcdHJldHVybiBcImJveC1zdWNjZXNzXCJcblx0XHRcdGVsc2UgaWYgKGp1ZGdlID09IFwicmVqZWN0ZWRcIilcblx0XHRcdFx0cmV0dXJuIFwiYm94LWRhbmdlclwiXG5cdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRpZiBpbnMgJiYgaW5zLmZpbmFsX2RlY2lzaW9uXG5cdFx0aWYgaW5zLmZpbmFsX2RlY2lzaW9uID09IFwiYXBwcm92ZWRcIlxuXHRcdFx0cmV0dXJuIFwiYm94LXN1Y2Nlc3NcIlxuXHRcdGVsc2UgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRyZXR1cm4gXCJib3gtZGFuZ2VyXCJcblxuXG5UZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUgPSAoaW5zdGFuY2UsIHRlbXBsYXRlTmFtZSkgLT5cblx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoaW5zdGFuY2UuZmxvdyk7XG5cdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuXG5cdGlmIHRlbXBsYXRlTmFtZVxuXHRcdGlmIHRlbXBsYXRlTmFtZSA9PSAndGFibGUnXG5cdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS5kZWZhdWx0KGluc3RhbmNlKVxuXG5cdGlmIFNlc3Npb24/LmdldChcImluc3RhbmNlUHJpbnRcIilcblx0XHRpZiBmbG93Py5wcmludF90ZW1wbGF0ZVxuXHRcdFx0cmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5wcmludF90ZW1wbGF0ZSArIFwiPC9kaXY+XCJcblx0XHRlbHNlXG5cdFx0XHRpZiBmbG93Py5pbnN0YW5jZV90ZW1wbGF0ZVxuXHRcdFx0XHRyZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS10ZW1wbGF0ZSc+XCIgKyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlICsgXCI8L2Rpdj5cIlxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0ZWxzZVxuXHRcdGlmIFN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdFx0cmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUuZGVmYXVsdChpbnN0YW5jZSlcblxuXHRcdGlmIGZsb3c/Lmluc3RhbmNlX3RlbXBsYXRlXG5cdFx0XHRyZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS10ZW1wbGF0ZSc+XCIgKyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlICsgXCI8L2Rpdj5cIlxuXG5cdFx0aWYgZm9ybT8uaW5zdGFuY2Vfc3R5bGVcblx0XHRcdGlmIGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT0gJ3RhYmxlJ1xuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0XHRcdHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlLmRlZmF1bHQoaW5zdGFuY2UpXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUuZGVmYXVsdChpbnN0YW5jZSlcblxuI1RlbXBsYXRlTWFuYWdlci5leHBvcnRUZW1wbGF0ZSA9IChmbG93SWQpIC0+XG4jXHR0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXRUZW1wbGF0ZShmbG93SWQpO1xuI1xuI1x0ZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRGbG93KGZsb3dJZCk7XG4jXG4jXHRpZiBmbG93Py5pbnN0YW5jZV90ZW1wbGF0ZVxuI1x0XHRyZXR1cm4gdGVtcGxhdGU7XG4jXG4jXHRyZXR1cm4gdGVtcGxhdGU7XG5cbiIsInZhciBmb3JtSWQ7ICAgICAgICAgICAgICAgICBcblxuVGVtcGxhdGVNYW5hZ2VyID0ge307XG5cbmZvcm1JZCA9ICdpbnN0YW5jZWZvcm0nO1xuXG5UZW1wbGF0ZU1hbmFnZXIuaW5zdGFuY2VfdGl0bGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhZ2VUaXRsZSwgcGFnZVRpdGxlVHJDbGFzcywgdmFsO1xuICBwYWdlVGl0bGUgPSBcInt7aW5zdGFuY2UubmFtZX19XCI7XG4gIHBhZ2VUaXRsZVRyQ2xhc3MgPSBcImluc3RhbmNlLW5hbWVcIjtcbiAgaWYgKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkge1xuICAgIHBhZ2VUaXRsZSA9IFwie3s+IGFmRm9ybUdyb3VwIG5hbWU9XFxcIlwiICsgQ29yZUZvcm0ucGFnZVRpdGxlRmllbGROYW1lICsgXCJcXFwiIGxhYmVsPWZhbHNlfX1cIjtcbiAgICBwYWdlVGl0bGVUckNsYXNzID0gXCJcIjtcbiAgfVxuICBpZiAodHlwZW9mIENvcmVGb3JtICE9PSBcInVuZGVmaW5lZFwiICYmIENvcmVGb3JtICE9PSBudWxsID8gQ29yZUZvcm0ucGFnZVRpdGxlIDogdm9pZCAwKSB7XG4gICAgcGFnZVRpdGxlID0gXCJcIiArIENvcmVGb3JtLnBhZ2VUaXRsZTtcbiAgICBwYWdlVGl0bGVUckNsYXNzID0gXCJcIjtcbiAgfVxuICB2YWwgPSB7XG4gICAgcGFnZVRpdGxlOiBwYWdlVGl0bGUsXG4gICAgcGFnZVRpdGxlVHJDbGFzczogcGFnZVRpdGxlVHJDbGFzc1xuICB9O1xuICByZXR1cm4gdmFsO1xufTtcblxuVGVtcGxhdGVNYW5hZ2VyLmhhbmRsZVRhYmxlVGVtcGxhdGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgX2V4cG9ydCkge1xuICB2YXIgdGFibGVfZmllbGRzLCB0ZW1wbGF0ZTtcbiAgdGVtcGxhdGUgPSBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXRlbXBsYXRlJz5cXG5cdDx0YWJsZSBjbGFzcz1cXFwidGFibGUtcGFnZS10aXRsZSBmb3JtLXRhYmxlIG5vLWJvcmRlciB0ZXh0LWFsaWduLWNlbnRlclxcXCIgc3R5bGU9XFxcIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcXFwiPlxcblx0XHQ8dHIgY2xhc3M9XFxcIlwiICsgKHRoaXMuaW5zdGFuY2VfdGl0bGUoKS5wYWdlVGl0bGVUckNsYXNzKSArIFwiXFxcIj5cXG5cdFx0XHQ8dGQgY2xhc3M9XFxcImluc3RhbmNlLXRhYmxlLW5hbWUtdGQgcGFnZS10aXRsZVxcXCI+XFxuXHRcdFx0XHRcIiArICh0aGlzLmluc3RhbmNlX3RpdGxlKCkucGFnZVRpdGxlKSArIFwiXFxuXHRcdFx0PC90ZD5cXG5cdFx0PC90cj5cXG5cXG5cdDwvdGFibGU+XFxuXHQ8dGFibGUgY2xhc3M9XFxcInRhYmxlLXBhZ2UtYm9keSBmb3JtLXRhYmxlXFxcIj5cXG5cdFx0XHQ8dHIgc3R5bGU9XFxcImhlaWdodDowcHhcXFwiPlxcblx0XHRcdFx0PHRoIHN0eWxlPSd3aWR0aDogMTYlJz48L3RoPlxcblx0XHRcdFx0PHRoPjwvdGg+XFxuXHRcdFx0XHQ8dGggc3R5bGU9J3dpZHRoOiAxNiUnPjwvdGg+XFxuXHRcdFx0XHQ8dGg+PC90aD5cXG5cdFx0XHQ8L3RyPlwiO1xuICB0YWJsZV9maWVsZHMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRhYmxlX2ZpZWxkcyhpbnN0YW5jZSk7XG4gIHRhYmxlX2ZpZWxkcyAmJiB0YWJsZV9maWVsZHMuZm9yRWFjaChmdW5jdGlvbih0YWJsZV9maWVsZCkge1xuICAgIHZhciBmaWVsZF9wZXJtaXNzaW9uLCBwdXJlQ29kZSwgcmVxdWlyZWQsIHRpdGxlX3Blcm1pc3Npb247XG4gICAgcmVxdWlyZWQgPSBcIlwiO1xuICAgIGlmICghKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgfHwgKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgIT09IHRhYmxlX2ZpZWxkLmNvZGUpIHtcbiAgICAgIGlmICh0YWJsZV9maWVsZC5pc19yZXF1aXJlZCkge1xuICAgICAgICByZXF1aXJlZCA9IFwiaXMtcmVxdWlyZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChfZXhwb3J0KSB7XG4gICAgICAgIHJlcXVpcmVkID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHB1cmVDb2RlID0gU3RlZWRvcy5yZW1vdmVTcGVjaWFsQ2hhcmFjdGVyKHRhYmxlX2ZpZWxkLmNvZGUpO1xuICAgICAgaWYgKEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGQodGFibGVfZmllbGQpKSB7XG4gICAgICAgIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0O1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjx0ZCBjbGFzcz1cXFwidGQtdGl0bGUgXCIgKyByZXF1aXJlZCArIFwiXFxcIj5cXG5cdHt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCJ9fVxcbjwvdGQ+XFxuPHRkIGNsYXNzPVxcXCJ0ZC1maWVsZCBvcGluaW9uLWZpZWxkIG9waW5pb24tZmllbGQtXCIgKyBwdXJlQ29kZSArIFwiIGF1dG9tYXRpY1xcXCIgY29sc3BhbiA9IFxcXCJcIiArIHRhYmxlX2ZpZWxkLnRkX2NvbHNwYW4gKyBcIlxcXCI+XFxuXHR7ez4gaW5zdGFuY2VTaWduVGV4dCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCJ9fVxcbjwvdGQ+XCI7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9lbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbmNsdWRlcyh0YWJsZV9maWVsZC50eXBlLCAnc2VjdGlvbix0YWJsZScpKSB7XG4gICAgICAgICAgdGVtcGxhdGUgKz0gdGFibGVfZmllbGQudHJfc3RhcnQ7XG4gICAgICAgICAgdGVtcGxhdGUgKz0gXCI8dGQgY2xhc3M9XFxcInRkLWNoaWxkZmllbGQgdGQtY2hpbGRmaWVsZC1cIiArIHB1cmVDb2RlICsgXCJcXFwiIGNvbHNwYW4gPSBcXFwiXCIgKyB0YWJsZV9maWVsZC50ZF9jb2xzcGFuICsgXCJcXFwiPlxcbiAgIHt7PiBhZkZvcm1Hcm91cCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCIgbGFiZWw9ZmFsc2V9fVxcbjwvdGQ+XCI7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9zdGFydDtcbiAgICAgICAgICBpZiAoX2V4cG9ydCkge1xuICAgICAgICAgICAgdGl0bGVfcGVybWlzc2lvbiA9IFwiXCI7XG4gICAgICAgICAgICBmaWVsZF9wZXJtaXNzaW9uID0gXCJcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVfcGVybWlzc2lvbiA9IFwidGl0bGUtXCIgKyB0YWJsZV9maWVsZC5wZXJtaXNzaW9uO1xuICAgICAgICAgICAgZmllbGRfcGVybWlzc2lvbiA9IFwiZmllbGQtXCIgKyB0YWJsZV9maWVsZC5wZXJtaXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ZW1wbGF0ZSArPSBcIjx0ZCBjbGFzcz1cXFwidGQtdGl0bGUgdGQtdGl0bGUtXCIgKyBwdXJlQ29kZSArIFwiIFwiICsgdGl0bGVfcGVybWlzc2lvbiArIFwiIFwiICsgcmVxdWlyZWQgKyBcIlxcXCI+XFxuXHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT1cXFwiXCIgKyB0YWJsZV9maWVsZC5jb2RlICsgXCJcXFwifX1cXG48L3RkPlxcbjx0ZCBjbGFzcz1cXFwidGQtZmllbGQgdGQtZmllbGQtXCIgKyBwdXJlQ29kZSArIFwiIFwiICsgZmllbGRfcGVybWlzc2lvbiArIFwiXFxcIiBjb2xzcGFuID0gXFxcIlwiICsgdGFibGVfZmllbGQudGRfY29sc3BhbiArIFwiXFxcIj5cXG5cdHt7PiBhZkZvcm1Hcm91cCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCIgbGFiZWw9ZmFsc2V9fVxcbjwvdGQ+XCI7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHRlbXBsYXRlICs9IFwiXHQ8L3RhYmxlPlxcblxcblx0PHRhYmxlIGNsYXNzPVxcXCJ0YWJsZS1wYWdlLWZvb3RlciBmb3JtLXRhYmxlIG5vLWJvcmRlclxcXCI+XFxuXHRcdDx0ciBjbGFzcz1cXFwiYXBwbGljYW50LXdyYXBwZXJcXFwiPlxcblx0XHRcdDx0ZCBjbGFzcz1cXFwibm93cmFwXFxcIj5cXG5cdFx0XHRcdDxkaXYgY2xhc3M9J2lubGluZS1sZWZ0Jz5cXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e190IFxcXCJpbnN0YW5jZV9pbml0aWF0b3JcXFwifX3vvJo8L2xhYmVsPlxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkIGlubGluZS1sZWZ0Jz5cXG5cdFx0XHRcdFx0e3s+VGVtcGxhdGUuZHluYW1pYyAgdGVtcGxhdGU9XFxcImFmU2VsZWN0VXNlclxcXCIgZGF0YT1hcHBsaWNhbnRDb250ZXh0fX1cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdDwvdGQ+XFxuXHRcdFx0PHRkIGNsYXNzPVxcXCJub3dyYXBcXFwiPlxcblx0XHRcdFx0PGRpdiBjbGFzcz0ncHVsbC1sZWZ0Jz5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5saW5lLWxlZnQnPlxcblx0XHRcdFx0XHRcdDxsYWJlbD57e190IFxcXCJpbnN0YW5jZV9zdWJtaXRfZGF0ZVxcXCJ9fe+8mjwvbGFiZWw+XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbmxpbmUtcmlnaHQnPlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0e3tmb3JtYXREYXRlIGluc3RhbmNlLnN1Ym1pdF9kYXRlICd7XFxcImZvcm1hdFxcXCI6XFxcIllZWVktTU0tRERcXFwifSd9fVxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdDwvdGQ+XFxuXHRcdDwvdHI+XFxuXHQ8L3RhYmxlPlxcbjwvZGl2PlwiO1xuICByZXR1cm4gdGVtcGxhdGU7XG59O1xuXG5UZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlID0ge1xuICBcImRlZmF1bHRcIjogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICB2YXIgdGVtcGxhdGU7XG4gICAgdGVtcGxhdGUgPSBcIjxkaXYgY2xhc3M9XFxcIndpdGgtYm9yZGVyIGNvbC1tZC0xMlxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJpbnN0YW5jZS1uYW1lXFxcIj5cXG5cdFx0PGgzIGNsYXNzPVxcXCJib3gtdGl0bGVcXFwiPlwiICsgKFRlbXBsYXRlTWFuYWdlci5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZSkgKyBcIjwvaDM+XFxuXHRcdDxzcGFuIGNsYXNzPVxcXCJoZWxwLWJsb2NrXFxcIj48L3NwYW4+XFxuXHQ8L2Rpdj5cXG5cdDxzcGFuIGNsYXNzPVxcXCJoZWxwLWJsb2NrXFxcIj48L3NwYW4+XFxuPC9kaXY+XFxue3sjZWFjaCBzdGVlZG9zX2Zvcm0uZmllbGRzfX1cXG5cdHt7I2lmIGlzT3BpbmlvbkZpZWxkIHRoaXN9fVxcblx0XHQ8ZGl2IGNsYXNzPVxcXCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cXFwiPlxcblx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXAgYXV0b21hdGljIG9waW5pb24tZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0XHQ8bGFiZWwgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPXRoaXMuY29kZX19PC9sYWJlbD5cXG5cXG5cdFx0XHRcdHt7PiBpbnN0YW5jZVNpZ25UZXh0IG5hbWU9dGhpcy5jb2RlfX1cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXHR7e2Vsc2V9fVxcblx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cXG5cdFx0XHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTIgZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxcblx0XHRcdDwvZGl2Plxcblx0XHR7e2Vsc2V9fVxcblx0XHRcdDxkaXYgY2xhc3M9XFxcInt7I2lmIHRoaXMuaXNfd2lkZX19Y29sLW1kLTEye3tlbHNlfX1jb2wtbWQtNnt7L2lmfX0gZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0e3s+IGFmRm9ybUdyb3VwIG5hbWU9dGhpcy5jb2RlfX1cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0e3svaWZ9fVxcblx0e3svaWZ9fVxcbnt7L2VhY2h9fVxcbjxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJhcHBsaWNhbnQtd3JhcHBlciBmb3JtLWdyb3VwIGZvcm0taG9yaXpvbnRhbFxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cFxcXCI+XFxuXHRcdDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIj5cXG5cdFx0ICB7e190IFxcXCJpbnN0YW5jZV9pbml0aWF0b3JcXFwifX0mbmJzcDs6XFxuXHRcdDwvZGl2Plxcblx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cXFwiYWZTZWxlY3RVc2VyXFxcIiBkYXRhPWFwcGxpY2FudENvbnRleHR9fVxcblx0ICA8L2Rpdj5cXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSxcbiAgdGFibGU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlci5oYW5kbGVUYWJsZVRlbXBsYXRlKGluc3RhbmNlKTtcbiAgfVxufTtcblxuVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZUhlbHBzID0ge1xuICBhcHBsaWNhbnRDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YSwgc3RlZWRvc19pbnN0YW5jZTtcbiAgICBzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgZGF0YSA9IHtcbiAgICAgIG5hbWU6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgIGF0dHM6IHtcbiAgICAgICAgbmFtZTogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgICBpZDogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgICBcImNsYXNzXCI6ICdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCcsXG4gICAgICAgIHN0eWxlOiAncGFkZGluZzo2cHggMTJweDt3aWR0aDoxNDBweDtkaXNwbGF5OmlubGluZSdcbiAgICAgIH1cbiAgICB9O1xuICAgIGRhdGEuYXR0cy5kaXNhYmxlZCA9IHRydWU7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn07XG5cbih7XG4gIGluc3RhbmNlSWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnaW5zdGFuY2Vmb3JtJztcbiAgfSxcbiAgZm9ybV90eXBlczogZnVuY3Rpb24oKSB7XG4gICAgaWYgKEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKSkge1xuICAgICAgcmV0dXJuICdkaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbWV0aG9kJztcbiAgICB9XG4gIH0sXG4gIHN0ZWVkb3NfZm9ybTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIGlmIChmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmb3JtX3ZlcnNpb247XG4gICAgfVxuICB9LFxuICBpbm5lcnN1YmZvcm1Db250ZXh0OiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZG9jX3ZhbHVlcztcbiAgICBkb2NfdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIG9ialtcInRhYmxlVmFsdWVzXCJdID0gZG9jX3ZhbHVlcyA/IGRvY192YWx1ZXNbb2JqLmNvZGVdIDogW107XG4gICAgb2JqW1wiZm9ybUlkXCJdID0gZm9ybUlkO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGluc3RhbmNlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RlZWRvc19pbnN0YW5jZTtcbiAgICBTZXNzaW9uLmdldChcImNoYW5nZV9kYXRlXCIpO1xuICAgIGlmIChTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIikpIHtcbiAgICAgIHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIHJldHVybiBzdGVlZG9zX2luc3RhbmNlO1xuICAgIH1cbiAgfSxcbiAgZXF1YWxzOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcbiAgfSxcbiAgZmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYShmb3JtX3ZlcnNpb24pKTtcbiAgICB9XG4gIH0sXG4gIGRvY192YWx1ZXM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG4gIH0sXG4gIGluc3RhbmNlX2JveF9zdHlsZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGJveCwgaW5zLCBqdWRnZTtcbiAgICBib3ggPSBTZXNzaW9uLmdldChcImJveFwiKTtcbiAgICBpZiAoYm94ID09PSBcImluYm94XCIgfHwgYm94ID09PSBcImRyYWZ0XCIpIHtcbiAgICAgIGp1ZGdlID0gU2Vzc2lvbi5nZXQoXCJqdWRnZVwiKTtcbiAgICAgIGlmIChqdWRnZSkge1xuICAgICAgICBpZiAoanVkZ2UgPT09IFwiYXBwcm92ZWRcIikge1xuICAgICAgICAgIHJldHVybiBcImJveC1zdWNjZXNzXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoanVkZ2UgPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICAgIHJldHVybiBcImJveC1kYW5nZXJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICBpZiAoaW5zICYmIGlucy5maW5hbF9kZWNpc2lvbikge1xuICAgICAgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICAgIHJldHVybiBcImJveC1zdWNjZXNzXCI7XG4gICAgICB9IGVsc2UgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIHJldHVybiBcImJveC1kYW5nZXJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG5UZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgdGVtcGxhdGVOYW1lKSB7XG4gIHZhciBmbG93LCBmb3JtO1xuICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZShpbnN0YW5jZS5mbG93KTtcbiAgZm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG4gIGlmICh0ZW1wbGF0ZU5hbWUpIHtcbiAgICBpZiAodGVtcGxhdGVOYW1lID09PSAndGFibGUnKSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSk7XG4gICAgfVxuICAgIHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlW1wiZGVmYXVsdFwiXShpbnN0YW5jZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBTZXNzaW9uICE9PSBcInVuZGVmaW5lZFwiICYmIFNlc3Npb24gIT09IG51bGwgPyBTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgOiB2b2lkIDApIHtcbiAgICBpZiAoZmxvdyAhPSBudWxsID8gZmxvdy5wcmludF90ZW1wbGF0ZSA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5wcmludF90ZW1wbGF0ZSArIFwiPC9kaXY+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmbG93ICE9IG51bGwgPyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlIDogdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXRlbXBsYXRlJz5cIiArIGZsb3cuaW5zdGFuY2VfdGVtcGxhdGUgKyBcIjwvZGl2PlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUudGFibGUoaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH1cbiAgICBpZiAoZmxvdyAhPSBudWxsID8gZmxvdy5pbnN0YW5jZV90ZW1wbGF0ZSA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5pbnN0YW5jZV90ZW1wbGF0ZSArIFwiPC9kaXY+XCI7XG4gICAgfVxuICAgIGlmIChmb3JtICE9IG51bGwgPyBmb3JtLmluc3RhbmNlX3N0eWxlIDogdm9pZCAwKSB7XG4gICAgICBpZiAoZm9ybS5pbnN0YW5jZV9zdHlsZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufTtcbiIsIlN0ZWVkb3NUYWJsZSA9IHt9O1xuXG5TdGVlZG9zVGFibGUuZm9ybUlkID0gXCJpbnN0YW5jZWZvcm1cIjtcblxuU3RlZWRvc1RhYmxlLmNoZWNrSXRlbSA9IGZ1bmN0aW9uIChmaWVsZCwgaXRlbV9pbmRleCkge1xuICAgIHZhciBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICB2YXIgZmllbGRWYWwgPSBTdGVlZG9zVGFibGUuZ2V0SXRlbU1vZGFsVmFsdWUoZmllbGQsIGl0ZW1faW5kZXgpO1xuXG4gICAgdmFyIHNmX25hbWUgPSAnJztcbiAgICB2YXIgcmV2ID0gdHJ1ZTtcbiAgICBmaWVsZE9iai5zZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHNmKSB7XG4gICAgICAgIGlmIChzZi5wZXJtaXNzaW9uID09ICdlZGl0YWJsZScpIHtcbiAgICAgICAgICAgIHNmX25hbWUgPSBmaWVsZE9iai5jb2RlICsgXCIuXCIgKyBzZi5jb2RlO1xuICAgICAgICAgICAgaWYgKCFJbnN0YW5jZU1hbmFnZXIuY2hlY2tGb3JtRmllbGRWYWx1ZSgkKFwiW25hbWU9J1wiICsgc2ZfbmFtZSArIFwiJ11cIilbMF0sIHNmX25hbWUsIGZpZWxkVmFsW3NmLmNvZGVdKSkge1xuICAgICAgICAgICAgICAgIHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV2O1xufVxuXG5TdGVlZG9zVGFibGUuc2V0VGFibGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIGl0ZW1faW5kZXgsIGl0ZW1fdmFsdWUpIHtcblxuICAgIHZhciB0YWJsZVZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpO1xuICAgIHRhYmxlVmFsdWVbaXRlbV9pbmRleF0gPSBpdGVtX3ZhbHVlO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIGl0ZW1faW5kZXgpIHtcbiAgICByZXR1cm4gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpW2l0ZW1faW5kZXhdO1xufVxuXG5TdGVlZG9zVGFibGUucmVtb3ZlVGFibGVJdGVtID0gZnVuY3Rpb24gKGZpZWxkLCBpdGVtX2luZGV4KSB7XG4gICAgdmFyIGl0ZW1fdmFsdWUgPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUoZmllbGQsIGl0ZW1faW5kZXgpO1xuICAgIGl0ZW1fdmFsdWUucmVtb3ZlZCA9IHRydWU7XG59XG5cblN0ZWVkb3NUYWJsZS5zZXRUYWJsZVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCB2YWx1ZSkge1xuICAgICQoXCJ0YWJsZVtuYW1lPSdcIiArIGZpZWxkICsgXCInXVwiKS52YWwoe1xuICAgICAgICB2YWw6IHZhbHVlXG4gICAgfSk7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRUYWJsZVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgcmV0dXJuICQoXCJ0YWJsZVtuYW1lPSdcIiArIGZpZWxkICsgXCInXVwiKS52YWwoKS52YWw7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRWYWxpZFZhbHVlID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgdmFyIHZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgdmFsaWRWYWx1ZSA9IFtdO1xuXG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAoIXYucmVtb3ZlZCkge1xuICAgICAgICAgICAgdmFsaWRWYWx1ZS5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbGlkVmFsdWU7XG59XG5cblxuU3RlZWRvc1RhYmxlLmhhbmRsZURhdGEgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlcykge1xuXG4gICAgaWYgKCF2YWx1ZXMgfHwgISh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgZmllbGRPYmogPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpO1xuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgZmllbGRPYmouc2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgICBpZiAoZi50eXBlID09ICd1c2VyJyB8fCBmLnR5cGUgPT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZbZi5jb2RlXVxuICAgICAgICAgICAgICAgIGlmIChmLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiAodmFsdWVbMF0pID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2W2YuY29kZV0gPSB2W2YuY29kZV0uZ2V0UHJvcGVydHkoXCJpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdltmLmNvZGVdID0gdltmLmNvZGVdLmlkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT0gJ2RhdGVUaW1lJykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZbZi5jb2RlXVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHZhbHVlLnNwbGl0KFwiVFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQxID0gdFsxXS5zcGxpdChcIjpcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSB0MFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gdDBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gdDBbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBob3VycyA9IHQxWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHQxWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZbZi5jb2RlXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRGaWVsZCA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIHZhciBpbnN0YW5jZUZpZWxkcyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZpZWxkcygpO1xuICAgIGlmICghaW5zdGFuY2VGaWVsZHMpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBmaWVsZE9iaiA9IGluc3RhbmNlRmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGZpZWxkKTtcblxuICAgIHJldHVybiBmaWVsZE9iajtcbn1cblxuXG5TdGVlZG9zVGFibGUuZ2V0TW9kYWxEYXRhID0gZnVuY3Rpb24gKGZpZWxkLCBpbmRleCkge1xuXG4gICAgdmFyIGRhdGEgPSB7fTtcblxuICAgIHZhciBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICBpZiAoIWZpZWxkT2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLmZpZWxkID0gZmllbGRPYmo7XG5cbiAgICBkYXRhLmZpZWxkLmZvcm11bGEgPSBGb3JtX2Zvcm11bGEuZ2V0Rm9ybXVsYUZpZWxkVmFyaWFibGUoXCJGb3JtX2Zvcm11bGEuZmllbGRfdmFsdWVzXCIsIGZpZWxkT2JqLnNmaWVsZHMpO1xuXG4gICAgZGF0YS52YWx1ZSA9IHt9O1xuXG4gICAgZGF0YS52YWx1ZVtmaWVsZF0gPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUoZmllbGQsIGluZGV4KTtcblxuICAgIGRhdGEuaW5kZXggPSBpbmRleDtcblxuICAgIHJldHVybiBkYXRhO1xufVxuXG5cblxuU3RlZWRvc1RhYmxlLmdldEl0ZW1Nb2RhbFZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCBpdGVtX2luZGV4KSB7XG5cbiAgICBpZiAoIUF1dG9Gb3JtLmdldEZvcm1WYWx1ZXMoXCJzdGVlZG9zX3RhYmxlX21vZGFsX1wiICsgZmllbGQgKyBcIl9cIiArIGl0ZW1faW5kZXgpKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIHZhciBpdGVtX3ZhbHVlID0gQXV0b0Zvcm0uZ2V0Rm9ybVZhbHVlcyhcInN0ZWVkb3NfdGFibGVfbW9kYWxfXCIgKyBmaWVsZCArIFwiX1wiICsgaXRlbV9pbmRleCkuaW5zZXJ0RG9jW2ZpZWxkXTtcbiAgICByZXR1cm4gaXRlbV92YWx1ZTtcbn1cblxuXG5TdGVlZG9zVGFibGUuYWRkSXRlbSA9IGZ1bmN0aW9uIChmaWVsZCwgaW5kZXgsIF9pdGVtX3ZhbHVlKSB7XG4gICAgdmFyIGtleXMgPSBTdGVlZG9zVGFibGUuZ2V0S2V5cyhmaWVsZCk7XG4gICAgdmFyIGl0ZW1fdmFsdWUgPSBfaXRlbV92YWx1ZSB8fCBTdGVlZG9zVGFibGUuZ2V0SXRlbU1vZGFsVmFsdWUoZmllbGQsIGluZGV4KTtcbiAgICAkKFwidGJvZHlbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGJvZHknXVwiKS5hcHBlbmQoU3RlZWRvc1RhYmxlLmdldFRyKGtleXMsIGl0ZW1fdmFsdWUsIGluZGV4LCBmaWVsZCwgdHJ1ZSkpXG5cbn1cblxuU3RlZWRvc1RhYmxlLnVwZGF0ZUl0ZW0gPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4LCBfaXRlbV92YWx1ZSkge1xuXG4gICAgdmFyIGl0ZW0gPSAkKFwidHJbbmFtZT0nXCIgKyBmaWVsZCArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJ11cIik7XG5cbiAgICB2YXIgaXRlbV92YWx1ZSA9IF9pdGVtX3ZhbHVlIHx8IFN0ZWVkb3NUYWJsZS5nZXRJdGVtTW9kYWxWYWx1ZShmaWVsZCwgaW5kZXgpO1xuXG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gU3RlZWRvc1RhYmxlLmdldEtleXMoZmllbGQpO1xuICAgICAgICB2YXIgdGRzID0gU3RlZWRvc1RhYmxlLmdldFJlbW92ZVRkKGZpZWxkLCBpbmRleCk7XG5cbiAgICAgICAgdmFyIHNmaWVsZHMgPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpLnNmaWVsZHM7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBzZmllbGQgPSBzZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGtleSk7XG5cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1fdmFsdWVba2V5XTtcblxuICAgICAgICAgICAgdGRzID0gdGRzICsgU3RlZWRvc1RhYmxlLmdldFRkKHNmaWVsZCwgaW5kZXgsIHZhbHVlKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdGVtLmVtcHR5KCk7XG5cbiAgICAgICAgaXRlbS5hcHBlbmQodGRzKTtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgICAgU3RlZWRvc1RhYmxlLmFkZEl0ZW0oZmllbGQsIGluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpKSB7XG5cbiAgICAgICAgU3RlZWRvc1RhYmxlLnNldFRhYmxlSXRlbVZhbHVlKGZpZWxkLCBpbmRleCwgaXRlbV92YWx1ZSk7XG5cbiAgICAgICAgLy9TdGVlZG9zVGFibGUudmFsdWVIYXNoW2ZpZWxkXVtpbmRleF0gPSBpdGVtX3ZhbHVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9TdGVlZG9zVGFibGUudmFsdWVIYXNoW2ZpZWxkXSA9IFtpdGVtX3ZhbHVlXTtcblxuICAgICAgICBTdGVlZG9zVGFibGUuc2V0VGFibGVWYWx1ZShmaWVsZCwgW2l0ZW1fdmFsdWVdKVxuXG4gICAgfVxuXG4gICAgLy/miafooYzkuLvooajlhazlvI/orqHnrpdcbiAgICBJbnN0YW5jZU1hbmFnZXIucnVuRm9ybXVsYShmaWVsZCk7XG5cbn1cblxuU3RlZWRvc1RhYmxlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4KSB7XG5cbiAgICAkKFwidHJbbmFtZT0nXCIgKyBmaWVsZCArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJ11cIikuaGlkZSgpO1xuXG4gICAgU3RlZWRvc1RhYmxlLnJlbW92ZVRhYmxlSXRlbShmaWVsZCwgaW5kZXgpO1xuXG4gICAgSW5zdGFuY2VNYW5hZ2VyLnJ1bkZvcm11bGEoZmllbGQpO1xufVxuXG5TdGVlZG9zVGFibGUuc2hvd01vZGFsID0gZnVuY3Rpb24gKGZpZWxkLCBpbmRleCwgbWV0aG9kKSB7XG5cblxuICAgIHZhciBtb2RhbERhdGEgPSBTdGVlZG9zVGFibGUuZ2V0TW9kYWxEYXRhKGZpZWxkLCBpbmRleCk7XG5cbiAgICBtb2RhbERhdGEubWV0aG9kID0gbWV0aG9kO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgTW9kYWwuc2hvdyhcInN0ZWVkb3NUYWJsZU1vZGFsXCIsIG1vZGFsRGF0YSk7XG4gICAgfSwgMzAwKVxufVxuXG5TdGVlZG9zVGFibGUuZ2V0S2V5cyA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIGlmICghQXV0b0Zvcm0uZ2V0Q3VycmVudERhdGFGb3JGb3JtKFN0ZWVkb3NUYWJsZS5mb3JtSWQpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgc3MgPSBBdXRvRm9ybS5nZXRGb3JtU2NoZW1hKFN0ZWVkb3NUYWJsZS5mb3JtSWQpO1xuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmIChzcy5zY2hlbWEoZmllbGQgKyBcIi4kXCIpLnR5cGUgPT09IE9iamVjdCkge1xuICAgICAgICBrZXlzID0gc3Mub2JqZWN0S2V5cyhTaW1wbGVTY2hlbWEuX21ha2VHZW5lcmljKGZpZWxkKSArICcuJCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG5cbn1cblxuU3RlZWRvc1RhYmxlLmdldFRoZWFkID0gZnVuY3Rpb24gKGZpZWxkLCBlZGl0YWJsZSkge1xuXG4gICAgdmFyIGZpZWxkT2JqID0gZmllbGQ7XG4gICAgaWYgKCFfLmlzT2JqZWN0KGZpZWxkKSlcbiAgICAgICAgZmllbGRPYmogPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpO1xuXG4gICAgaWYgKCFmaWVsZE9iaikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIHRoZWFkID0gJycsXG4gICAgICAgIHRycyA9ICcnLFxuICAgICAgICBsYWJlbCA9ICcnLFxuICAgICAgICB3aWR0aCA9IDEwMDtcblxuICAgIGlmIChlZGl0YWJsZSkge1xuICAgICAgICAvLyB0cnMgPSBcIjx0aCBjbGFzcz0ncmVtb3ZlZCc+PC90aD5cIlxuICAgICAgICB0cnMgPSBcIlwiXG4gICAgfVxuXG4gICAgdmFyIHNmaWVsZHMgPSBmaWVsZE9iai5zZmllbGRzO1xuXG4gICAgaWYgKCFzZmllbGRzKSB7XG4gICAgICAgIHJldHVybiB0aGVhZDtcbiAgICB9XG5cbiAgICB2YXIgc2ZfbGVuZ3RoID0gc2ZpZWxkcy5sZW5ndGg7XG5cbiAgICBpZiAoc2ZfbGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgd2lkZV9maWVsZHMgPSBzZmllbGRzLmZpbHRlclByb3BlcnR5KFwiaXNfd2lkZVwiLCB0cnVlKTtcblxuICAgICAgICB3aWR0aCA9IDEwMCAvIChzZl9sZW5ndGggKyB3aWRlX2ZpZWxkcy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHNmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoc2YsIGluZGV4KSB7XG5cbiAgICAgICAgbGFiZWwgPSAoc2YubmFtZSAhPSBudWxsICYmIHNmLm5hbWUubGVuZ3RoID4gMCkgPyBzZi5uYW1lIDogc2YuY29kZTtcblxuICAgICAgICB0cnMgPSB0cnMgKyBcIjx0ZCBcIjsgLy8gbm93cmFwPSdub3dyYXAnXG5cbiAgICAgICAgdHJzID0gdHJzICsgXCIgY2xhc3M9J3RpdGxlIFwiICsgc2YudHlwZSArIFwiJ1wiO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSAoc2ZfbGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgIGlmIChzZi5pc193aWRlKSB7XG4gICAgICAgICAgICAgICAgdHJzID0gdHJzICsgXCJzdHlsZT0nd2lkdGg6XCIgKyB3aWR0aCAqIDIgKyBcIiUnXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJzID0gdHJzICsgXCJzdHlsZT0nd2lkdGg6XCIgKyB3aWR0aCArIFwiJSdcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJzID0gdHJzICsgXCI+XCIgKyBsYWJlbCArIFwiPC90ZD5cIlxuICAgIH0pO1xuXG4gICAgdGhlYWQgPSAnPHRyPicgKyB0cnMgKyAnPC90cj4nO1xuXG4gICAgcmV0dXJuIHRoZWFkO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VGJvZHkgPSBmdW5jdGlvbiAoa2V5cywgZmllbGQsIHZhbHVlcywgZWRpdGFibGUsIHNmaWVsZHNFZGl0YWJsZSkge1xuICAgIHZhciB0Ym9keSA9IFwiXCI7XG5cbiAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgICAgdGJvZHkgPSB0Ym9keSArIFN0ZWVkb3NUYWJsZS5nZXRUcihrZXlzLCB2YWx1ZSwgaW5kZXgsIGZpZWxkLCBlZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRib2R5O1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VHIgPSBmdW5jdGlvbiAoa2V5cywgaXRlbV92YWx1ZSwgaW5kZXgsIGZpZWxkLCBlZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKSB7XG5cbiAgICB2YXIgZmllbGRPYmogPSBmaWVsZDtcbiAgICBpZiAoIV8uaXNPYmplY3QoZmllbGQpKVxuICAgICAgICBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICB2YXIgdHIgPSBcIjx0ciBpZD0nXCIgKyBmaWVsZE9iai5jb2RlICsgXCJfaXRlbV9cIiArIGluZGV4ICsgXCInIG5hbWU9J1wiICsgZmllbGRPYmouY29kZSArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJyBkYXRhLWluZGV4PSdcIiArIGluZGV4ICsgXCInXCJcblxuICAgIGlmIChlZGl0YWJsZSB8fCBzZmllbGRzRWRpdGFibGUpIHtcbiAgICAgICAgdHIgPSB0ciArIFwiJyBjbGFzcz0naXRlbSBlZGl0J1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgdHIgPSB0ciArIFwiIGNsYXNzPSdpdGVtIGl0ZW0tcmVhZG9ubHknXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyID0gdHIgKyBcIiBjbGFzcz0naXRlbSAnXCJcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpdGVtX3ZhbHVlLnJlbW92ZWQpIHtcbiAgICAgICAgdHIgPSB0ciArIFwiIHN0eWxlPSdkaXNwbGF5Om5vbmUnIFwiO1xuICAgIH1cblxuICAgIHRyID0gdHIgKyBcIic+XCI7XG5cbiAgICB2YXIgdGRzID0gXCJcIjtcblxuICAgIGlmIChlZGl0YWJsZSkge1xuICAgICAgICB0ZHMgPSBTdGVlZG9zVGFibGUuZ2V0UmVtb3ZlVGQoZmllbGRPYmouY29kZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHZhciBzZmllbGRzID0gZmllbGRPYmouc2ZpZWxkcztcblxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBzZmllbGQgPSBzZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGtleSk7XG5cbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbV92YWx1ZVtrZXldO1xuXG4gICAgICAgIHRkcyA9IHRkcyArIFN0ZWVkb3NUYWJsZS5nZXRUZChzZmllbGQsIGluZGV4LCB2YWx1ZSk7XG5cbiAgICB9KTtcblxuICAgIHRyID0gdHIgKyB0ZHMgKyBcIjwvdHI+XCI7XG4gICAgcmV0dXJuIHRyO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0UmVtb3ZlVGQgPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4KSB7XG4gICAgLy8gcmV0dXJuIFwiPHRkIGNsYXNzPSdzdGVlZG9zVGFibGUtaXRlbS1yZW1vdmUgcmVtb3ZlZCcgZGF0YS1pbmRleD0nXCIgKyBpbmRleCArIFwiJz48aSBjbGFzcz0nZmEgZmEtdGltZXMnIGFyaWEtaGlkZGVuPSd0cnVlJz48L3RkPlwiO1xuICAgIHJldHVybiBcIlwiXG59XG5cblN0ZWVkb3NUYWJsZS5nZXRUZCA9IGZ1bmN0aW9uIChmaWVsZCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdmFyIHRkID0gXCI8dGQgXCI7XG5cbiAgICB0ZCA9IHRkICsgXCIgY2xhc3M9J3N0ZWVkb3NUYWJsZS1pdGVtLWZpZWxkIFwiICsgZmllbGQudHlwZSArIFwiJyBcIjtcblxuICAgIHZhciB0ZF92YWx1ZSA9IFwiXCI7XG5cbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgIHRkX3ZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFREVmFsdWUoZmllbGQsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblxuICAgICAgICB1dGNPZmZzZXQgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEudXRjT2Zmc2V0XG5cbiAgICAgICAgdGRfdmFsdWUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUodmFsdWUsIGZpZWxkLCBsb2NhbGUsIHV0Y09mZnNldClcbiAgICB9XG5cbiAgICB0ZCA9IHRkICsgXCIgZGF0YS1pbmRleD0nXCIgKyBpbmRleCArIFwiJz5cIiArIHRkX3ZhbHVlICsgXCI8L3RkPlwiXG5cbiAgICByZXR1cm4gdGQ7XG59XG5cblxuU3RlZWRvc1RhYmxlLmdldFREVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlKSB7XG4gICAgdmFyIHRkX3ZhbHVlID0gXCJcIjtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0ZF92YWx1ZVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB2YXIgZmllbGRPcHRpb25zID0gW107XG4gICAgICAgIGlmKFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xKXtcbiAgICAgICAgICAgIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pe1xuICAgICAgICAgICAgICAgIHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIilcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbVNwbGl0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiAodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhU3BhY2VVc2Vycyh2YWx1ZSkuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhU3BhY2VVc2Vycyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB1ID8gdS5uYW1lIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiAodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhT3JnYW5pemF0aW9ucyh2YWx1ZSkuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhT3JnYW5pemF0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IG8gPyBvLm5hbWUgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF95ZXNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZSA/IFwiPGEgaHJlZj0nbWFpbHRvOlwiICsgdmFsdWUgKyBcIic+XCIgKyB2YWx1ZSArIFwiPC9hPlwiIDogXCJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VybCc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiaHR0cFwiKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gXCI8YSBocmVmPSdcIiArIGVuY29kZVVSSSh2YWx1ZSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgdmFsdWUgKyBcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+aHR0cDovL1wiICsgdmFsdWUgKyBcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSAnKioqKioqJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHZhbHVlLnNwbGl0KFwiLVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSB0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IHRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gJC5mb3JtYXQuZGF0ZSh2YWx1ZSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQwID0gdFswXS5zcGxpdChcIi1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSB0WzFdLnNwbGl0KFwiOlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IHQwWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0MFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSB0MFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzID0gdDFbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gdDFbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXRlLCBob3Vycywgc2Vjb25kcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9ICQuZm9ybWF0LmRhdGUodmFsdWUsICd5eXl5LU1NLWRkIEhIOm1tJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKXsgcmV0dXJuIGl0ZW0udmFsdWUgPT0gdmFsdWU7IH0pXG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRPcHRpb24pe1xuICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFkaW8nOlxuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0peyByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZTsgfSlcbiAgICAgICAgICAgICAgICBpZihzZWxlY3RlZE9wdGlvbil7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICAgICAgICAgICAgdmFyIHNwbGl0ZWRWYWx1ZXMgPSB2YWx1ZS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IGZpZWxkT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7IHJldHVybiBzcGxpdGVkVmFsdWVzLmluZGV4T2YoaXRlbS52YWx1ZSkgPiAtMTsgfSk7XG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbihpdGVtKXsgcmV0dXJuIGl0ZW0ubGFiZWw7IH0pLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX3BlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFN0ZWVkb3MubnVtYmVyVG9TdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvZGF0YSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBfLnBsdWNrKHZhbHVlLCAnQGxhYmVsJykudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgY2FzZSAnbG9va3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRWYWx1ZSh2YWx1ZSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlO1xuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRkX3ZhbHVlO1xufTtcblxuaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgIEF1dG9Gb3JtLmFkZElucHV0VHlwZShcInRhYmxlXCIsIHtcbiAgICAgICAgdGVtcGxhdGU6IFwiYWZUYWJsZVwiLFxuICAgICAgICB2YWx1ZU91dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmRhdGEoXCJzY2hlbWFLZXlcIik7XG4gICAgICAgICAgICByZXR1cm4gU3RlZWRvc1RhYmxlLmdldFZhbGlkVmFsdWUobmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlQ29udmVydGVyczoge1xuICAgICAgICAgICAgXCJzdHJpbmdBcnJheVwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9TdHJpbmdBcnJheSxcbiAgICAgICAgICAgIFwibnVtYmVyXCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb051bWJlcixcbiAgICAgICAgICAgIFwibnVtZXJBcnJheVwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9OdW1iZXJBcnJheSxcbiAgICAgICAgICAgIFwiYm9vbGVhblwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9Cb29sZWFuLFxuICAgICAgICAgICAgXCJib29sZWFuQXJyYXlcIjogQXV0b0Zvcm0udmFsdWVDb252ZXJ0ZXJzLnN0cmluZ1RvQm9vbGVhbkFycmF5LFxuICAgICAgICAgICAgXCJkYXRlXCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb0RhdGUsXG4gICAgICAgICAgICBcImRhdGVBcnJheVwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9EYXRlQXJyYXlcbiAgICAgICAgfSxcbiAgICAgICAgY29udGV4dEFkanVzdDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dC5hdHRzLm1heGxlbmd0aCA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnRleHQubWF4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuYXR0cy5tYXhsZW5ndGggPSBjb250ZXh0Lm1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBUZW1wbGF0ZS5hZlRhYmxlLmV2ZW50cyh7XG4gICAgICAgICd0YXAgLnN0ZWVkb3MtdGFibGUgLnN0ZWVkb3NUYWJsZS1pdGVtLWFkZCwuYWRkLWl0ZW0tdHInOiBmdW5jdGlvbiAoZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRlbXBsYXRlLmRhdGEubmFtZTtcblxuICAgICAgICAgICAgdmFyIHRhYmxlVmFsdWUgPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVWYWx1ZShuYW1lKTtcblxuICAgICAgICAgICAgdmFyIG5ld19pdGVtX2luZGV4ID0gdGFibGVWYWx1ZSA/IHRhYmxlVmFsdWUubGVuZ3RoIDogMDtcblxuICAgICAgICAgICAgU3RlZWRvc1RhYmxlLnNob3dNb2RhbChuYW1lLCBuZXdfaXRlbV9pbmRleCwgXCJhZGRcIik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3RhcCAuc3RlZWRvcy10YWJsZSAuc3RlZWRvc1RhYmxlLWl0ZW0tZmllbGQnOiBmdW5jdGlvbiAoZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAodGVtcGxhdGUuZGF0YS5hdHRzLmVkaXRhYmxlIHx8IHRlbXBsYXRlLmRhdGEuYXR0cy5zZmllbGRzRWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSB0ZW1wbGF0ZS5kYXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmluZGV4O1xuICAgICAgICAgICAgICAgIFN0ZWVkb3NUYWJsZS5zaG93TW9kYWwoZmllbGQsIGluZGV4LCBcImVkaXRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3RhcCAuc3RlZWRvcy10YWJsZSAuc3RlZWRvc1RhYmxlLWl0ZW0tcmVtb3ZlJzogZnVuY3Rpb24gKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdmFyIGZpZWxkID0gdGVtcGxhdGUuZGF0YS5uYW1lO1xuICAgICAgICAgICAgdmFyIGl0ZW1faW5kZXggPSBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG4gICAgICAgICAgICBTZXNzaW9uLnNldChcImluc3RhbmNlX2NoYW5nZVwiLCB0cnVlKTtcbiAgICAgICAgICAgIFN0ZWVkb3NUYWJsZS5yZW1vdmVJdGVtKGZpZWxkLCBpdGVtX2luZGV4KTtcbiAgICAgICAgfSxcblxuICAgICAgICAndGFwIC5zdGVlZG9zLXRhYmxlIC5pdGVtLXJlYWRvbmx5JzogZnVuY3Rpb24gKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZS5kYXRhLmF0dHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSB0ZW1wbGF0ZS5kYXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmluZGV4O1xuICAgICAgICAgICAgICAgIFN0ZWVkb3NUYWJsZS5zaG93TW9kYWwoZmllbGQsIGluZGV4LCBcInJlYWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuXG5cbiAgICBUZW1wbGF0ZS5hZlRhYmxlLnJlbmRlcmVkID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBmaWVsZCA9IHRoaXMuZGF0YS5uYW1lO1xuXG4gICAgICAgIHZhciBzZmllbGRzRWRpdGFibGUgPSB0aGlzLmRhdGEuYXR0cy5zZmllbGRzRWRpdGFibGU7XG5cbiAgICAgICAgdmFyIGtleXMgPSBTdGVlZG9zVGFibGUuZ2V0S2V5cyhmaWVsZCk7XG4gICAgICAgIHZhciB2YWxpZFZhbHVlID0gU3RlZWRvc1RhYmxlLmhhbmRsZURhdGEoZmllbGQsIHRoaXMuZGF0YS52YWx1ZSk7XG4gICAgICAgIFN0ZWVkb3NUYWJsZS5zZXRUYWJsZVZhbHVlKGZpZWxkLCB2YWxpZFZhbHVlKTtcblxuICAgICAgICAkKFwidGhlYWRbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGhlYWQnXVwiKS5odG1sKFN0ZWVkb3NUYWJsZS5nZXRUaGVhZChmaWVsZCwgdGhpcy5kYXRhLmF0dHMuZWRpdGFibGUpKTtcblxuICAgICAgICAkKFwidGJvZHlbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGJvZHknXVwiKS5odG1sKFN0ZWVkb3NUYWJsZS5nZXRUYm9keShrZXlzLCBmaWVsZCwgU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpLCB0aGlzLmRhdGEuYXR0cy5lZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKSk7XG5cbiAgICAgICAgc3RyID0gdChcInN0ZWVkb3NfdGFibGVfYWRkX2l0ZW1cIik7XG4gICAgICAgIGFkZEl0ZW1UciA9IFwiPHRyIGNsYXNzPSdhZGQtaXRlbS10cic+PHRkIGNvbHNwYW49J1wiICsga2V5cy5sZW5ndGggKyBcIic+PGkgY2xhc3M9J2lvbiBpb24tcGx1cy1yb3VuZCc+PC9pPlwiICsgc3RyICsgXCI8L3RkPjwvdHI+XCI7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5hdHRzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAkKFwidGZvb3RbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGZvb3QnXVwiKS5hcHBlbmQoYWRkSXRlbVRyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG4gICAgICAgIGlmIChjLnN0ZXBfdHlwZSA9PSAnY291bnRlclNpZ24nIHx8IEluc3RhbmNlTWFuYWdlci5jY0hhc0VkaXRQZXJtaXNzaW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b3J1bihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBUZW1wbGF0ZS5jdXJyZW50RGF0YSgpO1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFN0ZWVkb3NUYWJsZS5nZXRLZXlzKGZpZWxkKTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRWYWx1ZSA9IFN0ZWVkb3NUYWJsZS5oYW5kbGVEYXRhKGZpZWxkLCBkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBTdGVlZG9zVGFibGUuc2V0VGFibGVWYWx1ZShmaWVsZCwgdmFsaWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgJChcInRib2R5W25hbWU9J1wiICsgZmllbGQgKyBcIlRib2R5J11cIikuaHRtbChTdGVlZG9zVGFibGUuZ2V0VGJvZHkoa2V5cywgZmllbGQsIFN0ZWVkb3NUYWJsZS5nZXRUYWJsZVZhbHVlKGZpZWxkKSwgZGF0YS5hdHRzLmVkaXRhYmxlLCBzZmllbGRzRWRpdGFibGUpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgIH07XG59IiwiSW1hZ2VTaWduLmhlbHBlcnMgPVxuXHRzcGFjZVVzZXJTaWduOiAodXNlcklkKS0+XG5cdFx0c3BhY2UgPSBcIlwiXG5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdHNwYWNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnNwYWNlXG5cdFx0ZWxzZVxuXHRcdFx0c3BhY2UgPSBTZXNzaW9uLmdldChcInNwYWNlSWRcIilcblxuXHRcdHNwYWNlVXNlclNpZ24gPSBkYi5zcGFjZV91c2VyX3NpZ25zLmZpbmRPbmUoe3NwYWNlOiBzcGFjZSwgdXNlcjogdXNlcklkfSk7XG5cdFx0cmV0dXJuIHNwYWNlVXNlclNpZ25cblxuXHRpbWFnZVVSTDogKHVzZXJJZCktPlxuXG5cdFx0c3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24odXNlcklkKTtcblxuXHRcdGFic29sdXRlID0gZmFsc2VcblxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0YWJzb2x1dGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuYWJzb2x1dGVcblxuXHRcdGlmIHNwYWNlVXNlclNpZ24/LnNpZ25cblx0XHRcdGlmIGFic29sdXRlXG5cdFx0XHRcdHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCJhcGkvZmlsZXMvYXZhdGFycy9cIiArIHNwYWNlVXNlclNpZ24uc2lnbik7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBTdGVlZG9zLmFic29sdXRlVXJsKFwiYXBpL2ZpbGVzL2F2YXRhcnMvXCIgKyBzcGFjZVVzZXJTaWduLnNpZ24pO1xuIiwiSW1hZ2VTaWduLmhlbHBlcnMgPSB7XG4gIHNwYWNlVXNlclNpZ246IGZ1bmN0aW9uKHVzZXJJZCkge1xuICAgIHZhciBzcGFjZSwgc3BhY2VVc2VyU2lnbjtcbiAgICBzcGFjZSA9IFwiXCI7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgc3BhY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuc3BhY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwYWNlID0gU2Vzc2lvbi5nZXQoXCJzcGFjZUlkXCIpO1xuICAgIH1cbiAgICBzcGFjZVVzZXJTaWduID0gZGIuc3BhY2VfdXNlcl9zaWducy5maW5kT25lKHtcbiAgICAgIHNwYWNlOiBzcGFjZSxcbiAgICAgIHVzZXI6IHVzZXJJZFxuICAgIH0pO1xuICAgIHJldHVybiBzcGFjZVVzZXJTaWduO1xuICB9LFxuICBpbWFnZVVSTDogZnVuY3Rpb24odXNlcklkKSB7XG4gICAgdmFyIGFic29sdXRlLCBzcGFjZVVzZXJTaWduO1xuICAgIHNwYWNlVXNlclNpZ24gPSBJbWFnZVNpZ24uaGVscGVycy5zcGFjZVVzZXJTaWduKHVzZXJJZCk7XG4gICAgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBhYnNvbHV0ZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5hYnNvbHV0ZTtcbiAgICB9XG4gICAgaWYgKHNwYWNlVXNlclNpZ24gIT0gbnVsbCA/IHNwYWNlVXNlclNpZ24uc2lnbiA6IHZvaWQgMCkge1xuICAgICAgaWYgKGFic29sdXRlKSB7XG4gICAgICAgIHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCJhcGkvZmlsZXMvYXZhdGFycy9cIiArIHNwYWNlVXNlclNpZ24uc2lnbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RlZWRvcy5hYnNvbHV0ZVVybChcImFwaS9maWxlcy9hdmF0YXJzL1wiICsgc3BhY2VVc2VyU2lnbi5zaWduKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCJUcmFjZXNIYW5kbGVyLmhlbHBlcnMgPVxuXHRzaG93U2lnbkltYWdlOiAoaGFuZGxlciwgaXNfZmluaXNoZWQsIGp1ZGdlLCB0cmFjZVNob3dTaWduSW1hZ2UpIC0+XG5cdFx0aWYgdHJhY2VTaG93U2lnbkltYWdlID09IGZhbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRpZiAhaXNfZmluaXNoZWRcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGlmIFsncmV0dXJuZWQnLCAndGVybWluYXRlZCcsICdyZXRyaWV2ZWQnXS5pbmNsdWRlcyhqdWRnZSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdHNwYWNlVXNlclNpZ24gPSBJbWFnZVNpZ24uaGVscGVycy5zcGFjZVVzZXJTaWduKGhhbmRsZXIpXG5cblx0XHRpZiBzcGFjZVVzZXJTaWduPy5zaWduXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdG9iamVjdFVybDogKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCktPlxuXHRcdHJldHVybiBDcmVhdG9yLmdldE9iamVjdFVybChvYmplY3RfbmFtZSwgcmVjb3JkX2lkLCBhcHBfaWQpIiwiVHJhY2VzSGFuZGxlci5oZWxwZXJzID0ge1xuICBzaG93U2lnbkltYWdlOiBmdW5jdGlvbihoYW5kbGVyLCBpc19maW5pc2hlZCwganVkZ2UsIHRyYWNlU2hvd1NpZ25JbWFnZSkge1xuICAgIHZhciBzcGFjZVVzZXJTaWduO1xuICAgIGlmICh0cmFjZVNob3dTaWduSW1hZ2UgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghaXNfZmluaXNoZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFsncmV0dXJuZWQnLCAndGVybWluYXRlZCcsICdyZXRyaWV2ZWQnXS5pbmNsdWRlcyhqdWRnZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24oaGFuZGxlcik7XG4gICAgaWYgKHNwYWNlVXNlclNpZ24gIT0gbnVsbCA/IHNwYWNlVXNlclNpZ24uc2lnbiA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIG9iamVjdFVybDogZnVuY3Rpb24ob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKSB7XG4gICAgcmV0dXJuIENyZWF0b3IuZ2V0T2JqZWN0VXJsKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCk7XG4gIH1cbn07XG4iLCJtYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpXG5JbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzID1cblx0YXBwbGljYW50Q29udGV4dDogLT5cblx0XHRzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0ZGF0YSA9IHtcblx0XHRcdG5hbWU6ICdpbnNfYXBwbGljYW50Jyxcblx0XHRcdGF0dHM6IHtuYW1lOiAnaW5zX2FwcGxpY2FudCcsIGlkOiAnaW5zX2FwcGxpY2FudCcsIGNsYXNzOiAnc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCd9LFxuXHRcdFx0dmFsdWU6IHN0ZWVkb3NfaW5zdGFuY2UuYXBwbGljYW50X25hbWVcblx0XHR9XG5cdFx0aWYgbm90IHN0ZWVkb3NfaW5zdGFuY2UgfHwgc3RlZWRvc19pbnN0YW5jZS5zdGF0ZSAhPSBcImRyYWZ0XCJcblx0XHRcdGRhdGEuYXR0cy5kaXNhYmxlZCA9IHRydWVcblx0XHRyZXR1cm4gZGF0YTtcblxuXHRpbnN0YW5jZUlkOiAtPlxuXHRcdHJldHVybiAnaW5zdGFuY2Vmb3JtJzsjXCJpbnN0YW5jZV9cIiArIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKTtcblxuXHRmb3JtX3R5cGVzOiAtPlxuXHRcdGlmIEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKVxuXHRcdFx0cmV0dXJuICdkaXNhYmxlZCc7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuICdtZXRob2QnO1xuXG5cdHN0ZWVkb3NfZm9ybTogLT5cblx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXHRcdGlmIGZvcm1fdmVyc2lvblxuXHRcdFx0cmV0dXJuIGZvcm1fdmVyc2lvblxuXG5cdGlubmVyc3ViZm9ybUNvbnRleHQ6IChvYmopLT5cblx0XHRkb2NfdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuXHRcdG9ialtcInRhYmxlVmFsdWVzXCJdID0gaWYgZG9jX3ZhbHVlcyB0aGVuIGRvY192YWx1ZXNbb2JqLmNvZGVdIGVsc2UgW11cblx0XHRvYmpbXCJmb3JtSWRcIl0gPSBcImluc3RhbmNlZm9ybVwiO1xuXHRcdHJldHVybiBvYmo7XG5cblx0aW5zdGFuY2U6IC0+XG5cdFx0U2Vzc2lvbi5nZXQoXCJjaGFuZ2VfZGF0ZVwiKVxuXHRcdGlmIChTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIikpXG5cdFx0XHRzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0XHRyZXR1cm4gc3RlZWRvc19pbnN0YW5jZTtcblxuXHRlbXB0eTogKHZhbCkgLT5cblx0XHRpZiB2YWxcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdHVuZW1wdHk6ICh2YWwpIC0+XG5cdFx0aWYgdmFsXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0ZXF1YWxzOiAoYSwgYikgLT5cblx0XHRyZXR1cm4gKGEgPT0gYilcblxuXHR1bmVxdWFsczogKGEsIGIpIC0+XG5cdFx0cmV0dXJuICEoYSA9PSBiKVxuXG5cdGluY2x1ZGVzOiAoYSwgYikgLT5cblx0XHRyZXR1cm4gYi5zcGxpdCgnLCcpLmluY2x1ZGVzKGEpO1xuXG5cdGluY2x1ZGU6IChhLCBiKSAtPlxuXHRcdHJldHVybiBiLnNwbGl0KCcsJykuaW5jbHVkZXMoYSk7XG5cblx0ZmllbGRzOiAtPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG5cdFx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0XHRyZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuXG5cdGZvcm1hdERhdGU6IChkYXRlLCBvcHRpb25zKS0+XG5cdFx0aWYgIWRhdGVcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdGlmIG9wdGlvbnMgJiYgdHlwZW9mKG9wdGlvbnMpID09ICdzdHJpbmcnXG5cdFx0XHRvcHRpb25zID0gSlNPTi5wYXJzZShvcHRpb25zKTtcblxuXHRcdGlmICFvcHRpb25zLmZvcm1hdFxuXHRcdFx0b3B0aW9ucyA9IHtmb3JtYXQ6IFwiWVlZWS1NTS1ERCBISDptbVwifVxuXG5cdFx0cmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQob3B0aW9ucy5mb3JtYXQpO1xuXG5cdHRyYWNlczogLT5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdHN0ZWVkb3NEYXRhID0gVGVtcGxhdGUuaW5zdGFuY2UoKT8udmlldz8udGVtcGxhdGU/LnN0ZWVkb3NEYXRhXG5cdFx0XHRpbnN0YW5jZSA9IHN0ZWVkb3NEYXRhPy5pbnN0YW5jZVxuXHRcdFx0ZmxvdyA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRGbG93VmVyc2lvbihpbnN0YW5jZSk7XG5cdFx0XHRsb2NhbGUgPSBzdGVlZG9zRGF0YT8ubG9jYWxlXG5cdFx0XHRpZiBsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0XHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRcdGVsc2Vcblx0XHRcdGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cblx0XHRcdGZsb3cgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGbG93VmVyc2lvbigpXG5cblx0XHRcdGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIilcblxuXHRcdGlmICFpbnN0YW5jZSB8fCAhZmxvd1xuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0c3RlcHMgPSBmbG93LnN0ZXBzO1xuXG5cdFx0dHJhY2VzID0ge307XG5cblx0XHRpbnN0YW5jZS50cmFjZXM/LmZvckVhY2ggKHRyYWNlKS0+XG5cdFx0XHRzdGVwID0gc3RlcHMuZmluZFByb3BlcnR5QnlQSyhcIl9pZFwiLCB0cmFjZS5zdGVwKVxuXG5cdFx0XHRhcHByb3ZlcyA9IFtdXG5cblx0XHRcdHRyYWNlLmFwcHJvdmVzPy5mb3JFYWNoIChhcHByb3ZlKSAtPlxuXHRcdFx0XHRpZiB0cmFjZS5pc19maW5pc2hlZCA9PSB0cnVlXG4jIOW3sue7k+adn+eahOaYvuekuuS4uuaguOWHhi/pqbPlm54v5Y+W5raI55Sz6K+3XG5cdFx0XHRcdFx0aWYgYXBwcm92ZS5qdWRnZSA9PSAnYXBwcm92ZWQnXG5cdFx0XHRcdFx0XHRqdWRnZV9uYW1lID0gVEFQaTE4bi5fXyhcIkluc3RhbmNlIFN0YXRlIGFwcHJvdmVkXCIsIHt9LCBsb2NhbGUpXG5cdFx0XHRcdFx0ZWxzZSBpZiBhcHByb3ZlLmp1ZGdlID09ICdyZWplY3RlZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVqZWN0ZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJ3Rlcm1pbmF0ZWQnXG5cdFx0XHRcdFx0XHRqdWRnZV9uYW1lID0gVEFQaTE4bi5fXyhcIkluc3RhbmNlIFN0YXRlIHRlcm1pbmF0ZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJ3JlYXNzaWduZWQnXG5cdFx0XHRcdFx0XHRqdWRnZV9uYW1lID0gVEFQaTE4bi5fXyhcIkluc3RhbmNlIFN0YXRlIHJlYXNzaWduZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJ3JlbG9jYXRlZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVsb2NhdGVkXCIsIHt9LCBsb2NhbGUpXG5cdFx0XHRcdFx0ZWxzZSBpZiBhcHByb3ZlLmp1ZGdlID09ICcnXG5cdFx0XHRcdFx0XHRqdWRnZV9uYW1lID0gXCJcIlxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBcIlwiXG5cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcGVuZGluZ1wiLCB7fSwgbG9jYWxlKVxuXG5cdFx0XHRcdGFwcHJvdmVzLnB1c2hcblx0XHRcdFx0XHRfaWQ6IGFwcHJvdmUuX2lkXG5cdFx0XHRcdFx0aGFuZGxlcjogYXBwcm92ZS51c2VyXG5cdFx0XHRcdFx0aGFuZGxlcl9uYW1lOiBhcHByb3ZlLmhhbmRsZXJfbmFtZVxuXHRcdFx0XHRcdGhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWU6IGFwcHJvdmUuaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZVxuXHRcdFx0XHRcdGhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lOiBhcHByb3ZlLmhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lXG5cdFx0XHRcdFx0ZmluaXNoX2RhdGU6IGFwcHJvdmUuZmluaXNoX2RhdGVcblx0XHRcdFx0XHRqdWRnZTogYXBwcm92ZS5qdWRnZVxuXHRcdFx0XHRcdGp1ZGdlX25hbWU6IGp1ZGdlX25hbWVcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogYXBwcm92ZS5kZXNjcmlwdGlvblxuXHRcdFx0XHRcdGlzX2ZpbmlzaGVkOiBhcHByb3ZlLmlzX2ZpbmlzaGVkXG5cdFx0XHRcdFx0dHlwZTogYXBwcm92ZS50eXBlXG5cdFx0XHRcdFx0b3Bpbmlvbl9maWVsZHNfY29kZTogYXBwcm92ZS5vcGluaW9uX2ZpZWxkc19jb2RlXG5cdFx0XHRcdFx0c2lnbl9maWVsZF9jb2RlOiBhcHByb3ZlLnNpZ25fZmllbGRfY29kZVxuXHRcdFx0XHRcdGlzX3JlYWQ6IGFwcHJvdmUuaXNfcmVhZFxuXHRcdFx0XHRcdHNpZ25fc2hvdzogYXBwcm92ZS5zaWduX3Nob3dcblxuXG5cdFx0XHRpZiBzdGVwXG5cdFx0XHRcdGlmIHN0ZXAubmFtZSBvZiB0cmFjZXNcblx0XHRcdFx0XHR0cmFjZXNbc3RlcC5uYW1lXSA9IHRyYWNlc1tzdGVwLm5hbWVdLmNvbmNhdChhcHByb3Zlcylcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRyYWNlc1tzdGVwLm5hbWVdID0gYXBwcm92ZXNcblxuXHRcdHJldHVybiB0cmFjZXM7XG5cblxuXG5cdGRvY192YWx1ZXM6IC0+XG5cdFx0V29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuXG5cdGluc3RhbmNlX2JveF9zdHlsZTogLT5cblx0XHRib3ggPSBTZXNzaW9uLmdldChcImJveFwiKVxuXHRcdGlmIGJveCA9PSBcImluYm94XCIgfHwgYm94ID09IFwiZHJhZnRcIlxuXHRcdFx0anVkZ2UgPSBTZXNzaW9uLmdldChcImp1ZGdlXCIpXG5cdFx0XHRpZiBqdWRnZVxuXHRcdFx0XHRpZiAoanVkZ2UgPT0gXCJhcHByb3ZlZFwiKVxuXHRcdFx0XHRcdHJldHVybiBcImJveC1zdWNjZXNzXCJcblx0XHRcdFx0ZWxzZSBpZiAoanVkZ2UgPT0gXCJyZWplY3RlZFwiKVxuXHRcdFx0XHRcdHJldHVybiBcImJveC1kYW5nZXJcIlxuXHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGlmIGlucyAmJiBpbnMuZmluYWxfZGVjaXNpb25cblx0XHRcdGlmIGlucy5maW5hbF9kZWNpc2lvbiA9PSBcImFwcHJvdmVkXCJcblx0XHRcdFx0cmV0dXJuIFwiYm94LXN1Y2Nlc3NcIlxuXHRcdFx0ZWxzZSBpZiAoaW5zLmZpbmFsX2RlY2lzaW9uID09IFwicmVqZWN0ZWRcIilcblx0XHRcdFx0cmV0dXJuIFwiYm94LWRhbmdlclwiXG5cbiNpc19kaXNhYmxlZDogLT5cbiMgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4jICAgIGlmICFpbnNcbiMgICAgICAgIHJldHVybjtcbiMgICAgaWYgaW5zLnN0YXRlIT1cImRyYWZ0XCJcbiMgICAgICAgIHJldHVybiBcImRpc2FibGVkXCI7XG4jICAgIHJldHVybjtcblxuXHR0YWJsZV9maWVsZHM6IChpbnN0YW5jZSktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblx0XHRlbHNlXG5cdFx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0Rm9ybVZlcnNpb24oaW5zdGFuY2UuZm9ybSwgaW5zdGFuY2UuZm9ybV92ZXJzaW9uKVxuXHRcdGlmIGZvcm1fdmVyc2lvblxuXHRcdFx0ZmllbGRzID0gXy5jbG9uZShmb3JtX3ZlcnNpb24uZmllbGRzKTtcblxuXHRcdFx0ZmllbGRzLmZvckVhY2ggKGZpZWxkLCBpbmRleCkgLT5cblx0XHRcdFx0ZmllbGQudHJfc3RhcnQgPSBcIlwiO1xuXHRcdFx0XHRmaWVsZC50cl9lbmQgPSBcIlwiO1xuXHRcdFx0XHR0ZF9jb2xzcGFuID0gMTtcbiNcdFx0XHRcdOW8uuWItuiuvue9ruagh+WktOWtl+auteS4uuWuveWtl+autVxuXHRcdFx0XHRpZiBDb3JlRm9ybT8ucGFnZVRpdGxlRmllbGROYW1lID09IGZpZWxkLmNvZGVcblx0XHRcdFx0XHRmaWVsZC5pc193aWRlID0gdHJ1ZVxuXG5cdFx0XHRcdGlmIGZpZWxkLmZvcm11bGEgJiYgZmllbGQudHlwZSAhPSAnb2RhdGEnXG5cdFx0XHRcdFx0ZmllbGQucGVybWlzc2lvbiA9IFwicmVhZG9ubHlcIjtcblxuXHRcdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcbiMg5aaC5p6c5b2T5YmN5a2X5q615piv5YiG57uE44CB6KGo5qC844CB5a695a2X5q61XG5cdFx0XHRcdFx0aWYgZmllbGQudHlwZSA9PSAnc2VjdGlvbicgfHwgZmllbGQudHlwZSA9PSAndGFibGUnXG5cdFx0XHRcdFx0XHRmaWVsZC50ZF9jb2xzcGFuID0gNDtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRmaWVsZC50ZF9jb2xzcGFuID0gMztcblxuXHRcdFx0XHRcdGlmIGluZGV4ICE9IDBcblx0XHRcdFx0XHRcdGZpZWxkLnRyX3N0YXJ0ID0gXCI8dHI+XCI7XG5cdFx0XHRcdFx0XHRmaWVsZC50cl9lbmQgPSBcIjwvdHI+XCI7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRwcmVfZmllbGRzID0gZmllbGRzLnNsaWNlKDAsIGluZGV4KTtcblxuXHRcdFx0XHRcdHByZV93aWRlX2ZpZWxkcyA9IHByZV9maWVsZHMuZmlsdGVyUHJvcGVydHkoXCJpc193aWRlXCIsIHRydWUpO1xuXG5cdFx0XHRcdFx0dHJfc3RhcnQgPSBcIlwiO1xuXG5cdFx0XHRcdFx0dHJfZW5kID0gXCJcIjtcblxuXHRcdFx0XHRcdCMg5YWI6K6h566X5b2T5YmN5a2X5q615piv5ZCm5Li65a695a2X5q61XG5cdFx0XHRcdFx0YmVmb3JlX2ZpZWxkID0gbnVsbDtcblx0XHRcdFx0XHRhZnRlcl9maWVsZCA9IG51bGw7XG5cblx0XHRcdFx0XHRpZiBpbmRleCA+IDBcblx0XHRcdFx0XHRcdGJlZm9yZV9maWVsZCA9IGZpZWxkc1tpbmRleCAtIDFdXG5cblx0XHRcdFx0XHRpZiBpbmRleCA8IGZpZWxkcy5sZW5ndGggLSAxXG5cdFx0XHRcdFx0XHRhZnRlcl9maWVsZCA9IGZpZWxkc1tpbmRleCArIDFdXG5cblx0XHRcdFx0XHQjIOWmguaenOW9k+WJjeWtl+auteaYr+WIhue7hOOAgeihqOagvOOAgeWuveWtl+autVxuXHRcdFx0XHRcdGlmIGZpZWxkLnR5cGUgPT0gJ3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT0gJ3RhYmxlJ1xuXHRcdFx0XHRcdFx0dGRfY29sc3BhbiA9IDQ7XG5cdFx0XHRcdFx0ZWxzZSBpZiBmaWVsZC5pc193aWRlXG5cdFx0XHRcdFx0XHR0ZF9jb2xzcGFuID0gMztcblx0XHRcdFx0XHRlbHNlXG4jIOWJjeWQjumDveaYr+WuveWtl+autVxuXHRcdFx0XHRcdFx0aWYgYmVmb3JlX2ZpZWxkICYmIGFmdGVyX2ZpZWxkICYmIGJlZm9yZV9maWVsZC5pc193aWRlICYmIGFmdGVyX2ZpZWxkLmlzX3dpZGVcblx0XHRcdFx0XHRcdFx0ZmllbGQuaXNfd2lkZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHRkX2NvbHNwYW4gPSAzO1xuXG5cdFx0XHRcdFx0XHQjIOW9k+WJjeaYr3RyIOS4i+eahCDnrKzkuIDkuKp0ZCAmIOWQjui+ueeahOWtl+auteaYr+WuveWtl+autVxuXHRcdFx0XHRcdFx0aWYgKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyID09IDAgJiYgYWZ0ZXJfZmllbGQgJiYgYWZ0ZXJfZmllbGQuaXNfd2lkZVxuXHRcdFx0XHRcdFx0XHRmaWVsZC5pc193aWRlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0dGRfY29sc3BhbiA9IDM7XG5cblx0XHRcdFx0XHRcdCMg5b2T5YmN5pivdHIg5LiL55qEIOesrOS4gOS4qnRkICYg5b2T5YmN5a2X5q615piv5pyA5ZCO5LiA5Liq5a2X5q61XG5cdFx0XHRcdFx0XHRpZiAocHJlX2ZpZWxkcy5sZW5ndGggKyBwcmVfd2lkZV9maWVsZHMubGVuZ3RoKSAlIDIgPT0gMCAmJiBhZnRlcl9maWVsZCA9PSBudWxsXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmlzX3dpZGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR0ZF9jb2xzcGFuID0gMztcblxuXHRcdFx0XHRcdGZpZWxkLnRkX2NvbHNwYW4gPSB0ZF9jb2xzcGFuO1xuXG5cblx0XHRcdFx0XHRpZiBpbmRleCA9PSAwXG4jIHRyX3N0YXJ0ID0gXCI8dHI+XCI7IOeUseS6jlRlbXBsYXRl55qE57yW6K+RYnVn77yM5a+86Ie05q+P5qyh57uZ5LiA5LiqdHLlvIDlp4vml7bvvIzkvJroh6rliqjooaXlpLTmiJbooaXlsL7jgILlm6DmraTlnKjnrKzkuIDooYzov5Tlm57kuIDkuKrnqbrlrZfnrKbkuLIuXG5cdFx0XHRcdFx0XHR0cl9zdGFydCA9IFwiPHRyPlwiO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGlmIChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PSAwIHx8IGZpZWxkLmlzX3dpZGVcblx0XHRcdFx0XHRcdFx0aWYgZmllbGQudHlwZSA9PSAndGFibGUnXG5cdFx0XHRcdFx0XHRcdFx0dHJfc3RhcnQgPSBcIjx0ciBjbGFzcyA9IFxcXCJ0ci1jaGlsZC10YWJsZVxcXCI+XCI7XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHR0cl9zdGFydCA9IFwiPHRyPlwiO1xuXG5cdFx0XHRcdFx0ZmllbGQudHJfc3RhcnQgPSB0cl9zdGFydDtcblxuXG5cdFx0XHRcdFx0aWYgaW5kZXggKyAxID09IGZpZWxkcy5sZW5ndGggfHwgZmllbGQudHlwZSA9PSAnc2VjdGlvbicgfHwgZmllbGQudHlwZSA9PSAndGFibGUnIHx8IGZpZWxkLmlzX3dpZGVcblx0XHRcdFx0XHRcdHRyX2VuZCA9IFwiPC90cj5cIjtcblxuXHRcdFx0XHRcdGlmIChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiAhPSAwXG5cdFx0XHRcdFx0XHR0cl9lbmQgPSBcIjwvdHI+XCI7XG5cblx0XHRcdFx0XHRmaWVsZC50cl9lbmQgPSB0cl9lbmQ7XG5cblx0XHRcdHJldHVybiBmaWVsZHM7XG5cblx0c29ydF9hcHByb3ZlOiAoYXBwcm92ZXMsIG9yZGVyKS0+XG5cdFx0aWYgIWFwcHJvdmVzXG5cdFx0XHRyZXR1cm4gW11cblxuXHRcdGlmICFhcHByb3ZlcyBpbnN0YW5jZW9mIEFycmF5XG5cdFx0XHRyZXR1cm4gW11cblx0XHRlbHNlXG5cdFx0XHRpZiBvcmRlciA9PSAnZGVzYydcblx0XHRcdFx0YXBwcm92ZXMuc29ydCAocDEsIHAyKSAtPlxuXHRcdFx0XHRcdF9wMSA9IDBcblx0XHRcdFx0XHRfcDIgPSAwXG5cblx0XHRcdFx0XHRpZiBwMS5maW5pc2hfZGF0ZVxuXHRcdFx0XHRcdFx0X3AxID0gcDEuZmluaXNoX2RhdGUuZ2V0VGltZSgpXG5cblx0XHRcdFx0XHRpZiBwMi5maW5pc2hfZGF0ZVxuXHRcdFx0XHRcdFx0X3AyID0gcDIuZmluaXNoX2RhdGUuZ2V0VGltZSgpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIF9wMiAtIF9wMVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRhcHByb3Zlcy5zb3J0IChwMSwgcDIpIC0+XG5cdFx0XHRcdFx0X3AxID0gMFxuXHRcdFx0XHRcdF9wMiA9IDBcblxuXHRcdFx0XHRcdGlmIHAxLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRfcDEgPSBwMS5maW5pc2hfZGF0ZS5nZXRUaW1lKClcblxuXHRcdFx0XHRcdGlmIHAyLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRfcDIgPSBwMi5maW5pc2hfZGF0ZS5nZXRUaW1lKCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gX3AxIC0gX3AyXG5cdFx0cmV0dXJuIGFwcHJvdmVzXG5cblx0X3Q6IChrZXkpLT5cblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXkpXG5cdGdldEZpZWxkOiAoY29kZSktPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb25cblx0XHRpZiBmb3JtX3ZlcnNpb25cblx0XHRcdHJldHVybiBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpXG5cblx0Z2V0VmFsdWU6IChjb2RlKS0+XG5cdFx0aW5zdGFuY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuaW5zdGFuY2VcblxuXHRcdGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb25cblxuXHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblxuXHRcdHV0Y09mZnNldCA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS51dGNPZmZzZXRcblxuXHRcdHZhbHVlcyA9IGluc3RhbmNlLnZhbHVlcyB8fCB7fVxuXG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHR2YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKClcblxuXHRcdHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgdmFsdWVzW2NvZGVdLCBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpLCBsb2NhbGUsIHV0Y09mZnNldFxuXG5cdGdldExhYmVsOiAoY29kZSktPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb25cblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwgZm9ybV92ZXJzaW9uLmZpZWxkcywgY29kZVxuXG5cdGdldENmQ2xhc3M6IChmaWVsZCktPlxuXHRcdGlmIGZpZWxkPy50eXBlID09IFwiaW5wdXRcIiAmJiBmaWVsZD8uaXNfdGV4dGFyZWFcblx0XHRcdHJldHVybiBcImNmVGV4dGFyZWFcIlxuXG5cdGdldFRhYmxlVGhlYWQ6IChmaWVsZCktPlxuXHRcdHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VGhlYWQoZmllbGQsIGZhbHNlKVxuXG5cdGdldFRhYmxlQm9keTogKGZpZWxkKS0+XG5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlXG5cdFx0XHR2YWx1ZXMgPSBpbnN0YW5jZS52YWx1ZXMgfHwge31cblx0XHRlbHNlXG5cdFx0XHR2YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKClcblxuXHRcdHRhYmxlVmFsdWUgPSB2YWx1ZXNbZmllbGQuY29kZV07XG5cdFx0cmV0dXJuIFN0ZWVkb3NUYWJsZS5nZXRUYm9keShmaWVsZC5zZmllbGRzLmdldFByb3BlcnR5KFwiY29kZVwiKSwgZmllbGQsIHRhYmxlVmFsdWUsIGZhbHNlKVxuXG5cdHNob3dMYWJlbDogKGZpZWxkKS0+XG5cdFx0dGVtcGxhdGVEYXRhID0gVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhXG5cdFx0aWYgdGVtcGxhdGVEYXRhLmxhYmVsID09IGZhbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRyZXR1cm4gdHJ1ZVxuXG4jXHRhZkZpZWxkTGFiZWxUZXh0OiAob3ApLT5cbiNcdFx0aWYgIVRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YVxuI1x0XHRcdHJldHVybiBBdXRvRm9ybS5nZXRMYWJlbEZvckZpZWxkKG9wLm5hbWUpXG4jXHRcdGVsc2VcbiNcdFx0XHRmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uXG4jXHRcdFx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldExhYmVsIGZvcm1fdmVyc2lvbi5maWVsZHMsIG9wPy5oYXNoPy5uYW1lXG5cblx0aXNPcGluaW9uRmllbGQ6IChmaWVsZCktPlxuXHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkLmZvcm11bGEpXG5cblx0aXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmc6IChmaWVsZF9mb3JtdWxhKS0+XG5cdFx0cmV0dXJuIEluc3RhbmNlU2lnblRleHQuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSlcblxuXHRpbmNsdWRlc09waW5pb25GaWVsZDogKGZvcm0sIGZvcm1fdmVyc2lvbiktPlxuXG5cdFx0ZmllbGRfZm9ybXVsYXMgPSBuZXcgQXJyYXkoKTtcblxuXHRcdGZpZWxkcyA9IGRiLmZvcm1fdmVyc2lvbnMuZmluZE9uZSh7X2lkOiBmb3JtX3ZlcnNpb24sIGZvcm06IGZvcm19KT8uZmllbGRzIHx8IFtdXG5cblx0XHRmaWVsZHMuZm9yRWFjaCAoZiktPlxuXHRcdFx0aWYgZi50eXBlID09ICd0YWJsZSdcblx0XHRcdFx0Y29uc29sZS5sb2cgJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJ1xuXHRcdFx0ZWxzZSBpZiBmLnR5cGUgPT0gJ3NlY3Rpb24nXG5cdFx0XHRcdGY/LmZpZWxkcz8uZm9yRWFjaCAoZjEpLT5cblx0XHRcdFx0XHRmaWVsZF9mb3JtdWxhcy5wdXNoIGYxLmZvcm11bGFcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZmllbGRfZm9ybXVsYXMucHVzaCBmLmZvcm11bGFcblxuXHRcdF8uc29tZSBmaWVsZF9mb3JtdWxhcywgKGZpZWxkX2Zvcm11bGEpLT5cblx0XHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpXG5cblx0Z2V0T3BpbmlvbkZpZWxkU3RlcHNOYW1lOiAoZmllbGRfZm9ybXVsYSwgdG9wX2tleXdvcmRzKS0+XG5cblx0XHRvcGluaW9uRmllbGRzID0gbmV3IEFycmF5KCk7XG4jXHRcdGNvbnNvbGUubG9nKFwiZmllbGRfZm9ybXVsYVwiLCBmaWVsZF9mb3JtdWxhKVxuXHRcdGlmIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSlcblx0XHRcdGlmIGZpZWxkX2Zvcm11bGFcblxuI1x0XHRcdFx0Zm9vMSA9IGZpZWxkX2Zvcm11bGEuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdGZvbzEgPSBmaWVsZF9mb3JtdWxhLnNwbGl0KFwiO1wiKVxuXG4jXHRcdFx0XHRpZiB0b3Bfa2V5d29yZHNcbiNcdFx0XHRcdFx0Zm9vMSA9IGZpZWxkX2Zvcm11bGEuc3BsaXQoXCI7XCIpXG5cblx0XHRcdFx0Zm9vMS5mb3JFYWNoIChmb28pLT5cblx0XHRcdFx0XHRqc29uX2Zvcm11bGEgPSB7fVxuXG5cdFx0XHRcdFx0dHJ5XG5cdFx0XHRcdFx0XHRqc29uX2Zvcm11bGEgPSBldmFsKFwiKFwiICsgZm9vICsgXCIpXCIpXG5cdFx0XHRcdFx0Y2F0Y2hcblx0XHRcdFx0XHRcdGpzb25fZm9ybXVsYSA9IHt9XG5cblx0XHRcdFx0XHRpZiBqc29uX2Zvcm11bGE/LnlpamlhbmxhblxuXHRcdFx0XHRcdFx0c2YgPSB7fVxuXG5cdFx0XHRcdFx0XHRzZi5zdGVwTmFtZSA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4uc3RlcFxuXG5cdFx0XHRcdFx0XHRzZi5pbWFnZV9zaWduID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5pbWFnZV9zaWduIHx8IGZhbHNlXG5cblx0XHRcdFx0XHRcdHNmLm9ubHlfY2Nfb3BpbmlvbiA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4ub25seV9jYyB8fCBmYWxzZVxuXG5cdFx0XHRcdFx0XHRzZi5kZWZhdWx0X2Rlc2NyaXB0aW9uID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5kZWZhdWx0XG5cblx0XHRcdFx0XHRcdHNmLm9ubHlfaGFuZGxlciA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4ub25seV9oYW5kbGVyXG5cblx0XHRcdFx0XHRcdHNmLnRvcF9rZXl3b3JkcyA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4udG9wX2tleXdvcmRzIHx8IHRvcF9rZXl3b3Jkc1xuXG5cdFx0XHRcdFx0XHRvcGluaW9uRmllbGRzLnB1c2goc2YpO1xuXG5cdFx0XHRcdFx0ZWxzZSBpZihmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3RyYWNlcy5cIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpID4gLTEpXG5cblx0XHRcdFx0XHRcdHNmID0ge29ubHlfY2Nfb3BpbmlvbjogZmFsc2UsIGltYWdlX3NpZ246IGZhbHNlLCB0b3Bfa2V5d29yZHM6IHRvcF9rZXl3b3Jkc31cblxuXHRcdFx0XHRcdFx0aWYgZm9vLmluZGV4T2YoXCJ7c2lnbmF0dXJlLlwiKSA+IC0xXG5cdFx0XHRcdFx0XHRcdHNmLmltYWdlX3NpZ24gPSB0cnVlXG5cdFx0XHRcdFx0XHRcdGZvbyA9IGZvby5yZXBsYWNlKFwie3NpZ25hdHVyZS5cIixcIlwiKTtcblxuXHRcdFx0XHRcdFx0czEgPSBmb28ucmVwbGFjZShcIntcIixcIlwiKS5yZXBsYWNlKFwifVwiLFwiXCIpXG5cdFx0XHRcdFx0XHRpZiBzMS5zcGxpdChcIi5cIikubGVuZ3RoID4gMVxuXHRcdFx0XHRcdFx0XHRzZi5zdGVwTmFtZSA9IHMxLnNwbGl0KFwiLlwiKVsxXVxuXHRcdFx0XHRcdFx0XHRpZiBvcGluaW9uRmllbGRzLmZpbHRlclByb3BlcnR5KFwic3RlcE5hbWVcIixzZi5zdGVwTmFtZSkubGVuZ3RoID4gMFxuXHRcdFx0XHRcdFx0XHRcdG9waW5pb25GaWVsZHMuZmluZFByb3BlcnR5QnlQSyhcInN0ZXBOYW1lXCIsIHNmLnN0ZXBOYW1lKT8ub25seV9jY19vcGluaW9uID0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0aWYgczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIHMxLnNwbGl0KFwiLlwiKVsyXT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnY2MnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNmLm9ubHlfY2Nfb3BpbmlvbiA9IHRydWVcblx0XHRcdFx0XHRcdG9waW5pb25GaWVsZHMucHVzaChzZik7XG5cblx0XHRyZXR1cm4gb3BpbmlvbkZpZWxkc1xuXG5cdHNob3dDQ09waW5pb246IChmaWVsZCktPlxuXHRcdGlmIGZpZWxkLmZvcm11bGE/LmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA+IC0xIHx8IGZpZWxkLmZvcm11bGE/LmluZGV4T2YoXCJ7c2lnbmF0dXJlLnRyYWNlcy5cIikgPiAtMVxuXHRcdFx0czEgPSBmaWVsZC5mb3JtdWxhLnJlcGxhY2UoXCJ7c2lnbmF0dXJlLlwiLFwiXCIpLnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKVxuXHRcdFx0aWYgczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDJcblx0XHRcdFx0aWYgczEuc3BsaXQoXCIuXCIpWzJdPy50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICdjYydcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdG1hcmtEb3duVG9IdG1sOiAobWFya0Rvd25TdHJpbmcpLT5cblx0XHRpZiBtYXJrRG93blN0cmluZ1xuXHRcdFx0IyByZW5kZXJlciA9IG5ldyBNYXJrZG93bi5SZW5kZXJlcigpO1xuXHRcdFx0IyByZW5kZXJlci5saW5rID0gKCBocmVmLCB0aXRsZSwgdGV4dCApIC0+XG5cdFx0XHQjIFx0cmV0dXJuIFwiPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9JyN7aHJlZn0nIHRpdGxlPScje3RpdGxlfSc+I3t0ZXh0fTwvYT5cIlxuXHRcdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdG1hcmtlZCA9IE5wbS5yZXF1aXJlKCdtYXJrZWQnKVxuXHRcdFx0cmV0dXJuIFNwYWNlYmFycy5TYWZlU3RyaW5nKG1hcmtlZC5wYXJzZShtYXJrRG93blN0cmluZykpXG5cblx0Zl9sYWJlbDogKHRoYXQpLT5cblx0XHRyZXR1cm4gdGhhdC5uYW1lIHx8IHRoYXQuY29kZVxuXG5pZiBNZXRlb3IuaXNTZXJ2ZXJcblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5zdGVlZG9zX2Zvcm0gPSAtPlxuXHRcdHJldHVybiB0aGlzLmZvcm1fdmVyc2lvblxuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNTZWN0aW9uID0gKGNvZGUpLT5cblx0XHRmb3JtX3ZlcnNpb24gPSB0aGlzLmZvcm1fdmVyc2lvblxuXHRcdHJldHVybiBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpLnR5cGUgPT0gJ3NlY3Rpb24nXG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5kb2NfdmFsdWVzID0gLT5cblx0XHRpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG5cdFx0cmV0dXJuIGluc3RhbmNlLnZhbHVlcztcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmFwcGxpY2FudENvbnRleHQgPSAtPlxuXHRcdGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZTtcblx0XHRkYXRhID0ge1xuXHRcdFx0bmFtZTogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0YXR0czoge25hbWU6ICdpbnNfYXBwbGljYW50JywgaWQ6ICdpbnNfYXBwbGljYW50JywgY2xhc3M6ICdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCBpbnNfYXBwbGljYW50J30sXG5cdFx0XHR2YWx1ZTogaW5zdGFuY2UuYXBwbGljYW50X25hbWVcblx0XHR9XG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnN0YW5jZSA9IC0+XG5cdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2VcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmZpZWxkcyA9IC0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gdGhpcy5mb3JtX3ZlcnNpb25cblx0XHRpZiBmb3JtX3ZlcnNpb25cblx0XHRcdHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWEoZm9ybV92ZXJzaW9uKSk7XG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5mb3JtX3R5cGVzID0gLT5cblx0XHRyZXR1cm4gXCJkaXNhYmxlZFwiXG5cblx0VGVtcGxhdGUucmVnaXN0ZXJIZWxwZXIgXCJhZkZpZWxkTGFiZWxUZXh0XCIsIChvcCktPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb25cblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwgZm9ybV92ZXJzaW9uLmZpZWxkcywgb3A/Lmhhc2g/Lm5hbWVcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLl90ID0gKGtleSktPlxuXHRcdGxvY2FsZSA9IHRoaXMubG9jYWxlXG5cblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpXG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnNfYXR0YWNoX2Rvd25sb2FkX3VybCA9IChfaWQsIGFic29sdXRlKS0+XG5cdFx0aWYgYWJzb2x1dGVcblx0XHRcdHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCIvYXBpL2ZpbGVzL2luc3RhbmNlcy8je19pZH0/ZG93bmxvYWQ9dHJ1ZVwiKTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gXCIvYXBpL2ZpbGVzL2luc3RhbmNlcy8je19pZH0/ZG93bmxvYWQ9dHJ1ZVwiO1xuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMub3B0aW9ucyA9IChmaWVsZCktPlxuXHRcdG9wdGlvbnMgPSBmaWVsZD8ub3B0aW9ucz8uc3BsaXQoXCJcXG5cIilcblx0XHRyZXYgPSBbXVxuXHRcdG9wdGlvbnM/LmZvckVhY2ggKGl0ZW0pLT5cblx0XHRcdHJldi5wdXNoKHtsYWJlbDogaXRlbSwgdmFsdWU6IGl0ZW19KVxuXG5cdFx0cmV0dXJuIHJldlxuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZ2V0UGVybWlzc2lvbnMgPSAoY29kZSktPlxuXHRcdGlmICFUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuc3RhcnRTdGVwRWRpdGFibGVGaWVsZHM/LmluY2x1ZGVzKGNvZGUpXG5cdFx0XHRyZXR1cm4gXCJyZWFkb25seSBkaXNhYmxlZFwiXG5cdFx0cmV0dXJuIFwiXCJcblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUuZXZlbnRzID1cblx0J2NoYW5nZSAuZm9ybS1jb250cm9sLC5jaGVja2JveCBpbnB1dCwuYWYtcmFkaW8tZ3JvdXAgaW5wdXQsLmFmLWNoZWNrYm94LWdyb3VwIGlucHV0JzogKGV2ZW50KS0+XG5cdFx0SW5zdGFuY2VNYW5hZ2VyLmluc3RhbmNlZm9ybUNoYW5nZUV2ZW50KGV2ZW50KVxuXG5cdCd0eXBlYWhlYWQ6Y2hhbmdlIC5mb3JtLWNvbnRyb2wnOiAoZXZlbnQpIC0+XG5cdFx0SW5zdGFuY2VNYW5hZ2VyLmluc3RhbmNlZm9ybUNoYW5nZUV2ZW50KGV2ZW50KVxuXG5cdCdjbGljayAuY2ZUZXh0YXJlYSBhJzogKGV2ZW50KS0+XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRTdGVlZG9zLm9wZW5XaW5kb3coZXZlbnQudGFyZ2V0LmhyZWYpO1xuXG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLm9uQ3JlYXRlZCA9ICgpLT5cblx0aW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0aWYgIWluc3RhbmNlXG5cdFx0cmV0dXJuO1xuXG5cdHRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlKTtcblxuXHR0cnlcblx0XHRjb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodGVtcGxhdGUsIHtpc0JvZHk6IHRydWV9KTtcblx0Y2F0Y2ggZVxuXHRcdGNvbnNvbGUubG9nIFwiSW5zdGFuY2UgVGVtcGxhdGUgRXJyb3JcIiwgZVxuXHRcdGNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShcIlwiLCB7aXNCb2R5OiB0cnVlfSk7XG5cblxuXHRyZW5kZXJGdW5jdGlvbiA9IGV2YWwoY29tcGlsZWQpO1xuXG5cdGluc3RhbmNlVmlldyA9IG5ldyBCbGF6ZS5WaWV3KFwiY3VzdG9tX2luc3RhbmNlX3RlbXBsYXRlXCIsIHJlbmRlckZ1bmN0aW9uKTtcblxuXHRpbnN0YW5jZUN1c3RvbVRlbXBsYXRlID0gbmV3IEJsYXplLlRlbXBsYXRlKGluc3RhbmNlVmlldy5uYW1lLCByZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfY3VzdG9tX3RlbXBsYXRlID0gaW5zdGFuY2VDdXN0b21UZW1wbGF0ZVxuXG5cdFRlbXBsYXRlLmluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZS5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuXG5cblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUub25SZW5kZXJlZCA9ICgpLT5cblx0IyB0ID0gdGhpcztcblxuXHQjdC5zdWJzY3JpYmUgXCJpbnN0YW5jZV9kYXRhXCIsIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSwgLT5cblx0IyAgICBUcmFja2VyLmFmdGVyRmx1c2ggLT5cblx0aW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0aWYgIWluc3RhbmNlXG5cdFx0cmV0dXJuO1xuXG5cdCMkKFwiI2luc19hcHBsaWNhbnRcIikuc2VsZWN0MigpLnZhbChpbnN0YW5jZS5hcHBsaWNhbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHQjJChcIiNpbnNfYXBwbGljYW50XCIpLnZhbChpbnN0YW5jZS5hcHBsaWNhbnQpO1xuXHRJbnN0YW5jZU1hbmFnZXIuc2V0SW5zdGFuY2VGb3JtQXBwbGljYW50KGluc3RhbmNlLmFwcGxpY2FudCwgaW5zdGFuY2UuYXBwbGljYW50X25hbWUpXG5cblxuXHRBcHByb3ZlTWFuYWdlci5lcnJvciA9IHtuZXh0U3RlcHM6ICcnLCBuZXh0U3RlcFVzZXJzOiAnJ307XG5cblx0IyBpbnN0YW5jZSBmcm9t57uR5a6a5LqL5Lu2XG5cdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2RyYWZ0J1xuXHRcdEluc3RhbmNlRXZlbnQuaW5pdEV2ZW50cyhpbnN0YW5jZS5mbG93KTtcblxuXHRpZiAhQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cblx0XHRjdXJyZW50QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpO1xuXG5cblx0XHRpbnN0YW5jZU51bWJlckZpZWxkcyA9ICQoXCJbZGF0YS1mb3JtdWxhXVwiLCAkKFwiI2luc3RhbmNlZm9ybVwiKSlcblxuXHRcdGluc3RhbmNlTnVtYmVyRmllbGRzLmVhY2ggKCktPlxuXHRcdFx0c2NoZW1hS2V5ID0gdGhpcy5kYXRhc2V0LnNjaGVtYUtleVxuXHRcdFx0ZWxlbWVudCA9ICQodGhpcylcblx0XHRcdGlmICEkKHRoaXMpLnZhbCgpICYmIHNjaGVtYUtleSAmJiBTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIilcblx0XHRcdFx0TWV0ZW9yLmNhbGwgJ2dldEluc3RhbmNlVmFsdWVzJywgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpLCAoZXJyb3IsIHJlc3VsdCktPlxuXHRcdFx0XHRcdGlmIGVycm9yXG5cdFx0XHRcdFx0XHR0b2FzdHIuZXJyb3IoZXJyb3IucmVhc29uKVxuXG5cdFx0XHRcdFx0aWYgIXJlc3VsdFtzY2hlbWFLZXldXG5cdFx0XHRcdFx0XHRrZXkgPSBlbGVtZW50LmRhdGEoXCJmb3JtdWxhXCIpPy5yZXBsYWNlKFwiYXV0b19udW1iZXIoXCIsIFwiXCIpLnJlcGxhY2UoXCIpXCIsIFwiXCIpXG5cblx0XHRcdFx0XHRcdGtleSA9IGtleS5yZXBsYWNlKC9cXFwiL2csIFwiXCIpLnJlcGxhY2UoL1xcJy9nLCBcIlwiKVxuXG5cdFx0XHRcdFx0XHRpZiBrZXkuaW5kZXhPZihcIntcIikgPiAtMVxuXHRcdFx0XHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZShcIntcIixcIlwiKS5yZXBsYWNlKFwifVwiLFwiXCIpXG5cdFx0XHRcdFx0XHRcdGtleSA9IGtleS50cmltKClcblx0XHRcdFx0XHRcdFx0a2V5ID0gQXV0b0Zvcm0uZ2V0RmllbGRWYWx1ZShrZXksICdpbnN0YW5jZWZvcm0nKVxuXHRcdFx0XHRcdFx0SW5zdGFuY2VOdW1iZXJSdWxlcy5pbnN0YW5jZU51bWJlckJ1aWxkZXIgZWxlbWVudCwga2V5XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0ZWxlbWVudD8udmFsKHJlc3VsdFtzY2hlbWFLZXldKS50cmlnZ2VyKFwiY2hhbmdlXCIpXG5cblx0XHRqdWRnZSA9IGN1cnJlbnRBcHByb3ZlLmp1ZGdlXG5cdFx0Y3VycmVudFN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcblx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXG5cdFx0dW5sZXNzIGZvcm1fdmVyc2lvblxuXHRcdFx0cmV0dXJuXG5cblx0XHR1bmxlc3MgZm9ybV92ZXJzaW9uLmZpZWxkc1xuXHRcdFx0cmV0dXJuXG5cblx0XHRmb3JtdWxhX2ZpZWxkcyA9IEZvcm1fZm9ybXVsYS5nZXRGb3JtdWxhRmllbGRWYXJpYWJsZShcIkZvcm1fZm9ybXVsYS5maWVsZF92YWx1ZXNcIiwgZm9ybV92ZXJzaW9uLmZpZWxkcyk7XG5cdFx0aW5zZXJ0RG9jID0gQXV0b0Zvcm0uZ2V0Rm9ybVZhbHVlcyhcImluc3RhbmNlZm9ybVwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG5cdFx0Rm9ybV9mb3JtdWxhLnJ1bihcIlwiLCBcIlwiLCBmb3JtdWxhX2ZpZWxkcywgaW5zZXJ0RG9jLCBmb3JtX3ZlcnNpb24uZmllbGRzKTtcblx0XHQj5Zyo5q2k5aSE5Yid5aeL5YyWc2Vzc2lvbiDkuK3nmoQgZm9ybV92YWx1ZXMg5Y+Y6YeP77yM55So5LqO6Kem5Y+R5LiL5LiA5q2l5q2l6aqk6K6h566XXG5cdFx0U2Vzc2lvbi5zZXQoXCJpbnN0YW5jZV9mb3JtX3ZhbHVlc1wiLCB7aW5zdGFuY2VJZDogaW5zdGFuY2UuX2lkLCB2YWx1ZXM6IGluc2VydERvY30pO1xuXG5cblxuIiwidmFyIG1hcmtlZDtcblxubWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKTtcblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycyA9IHtcbiAgYXBwbGljYW50Q29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRhdGEsIHN0ZWVkb3NfaW5zdGFuY2U7XG4gICAgc3RlZWRvc19pbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIGRhdGEgPSB7XG4gICAgICBuYW1lOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICBhdHRzOiB7XG4gICAgICAgIG5hbWU6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgICAgaWQ6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgICAgXCJjbGFzc1wiOiAnc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCdcbiAgICAgIH0sXG4gICAgICB2YWx1ZTogc3RlZWRvc19pbnN0YW5jZS5hcHBsaWNhbnRfbmFtZVxuICAgIH07XG4gICAgaWYgKCFzdGVlZG9zX2luc3RhbmNlIHx8IHN0ZWVkb3NfaW5zdGFuY2Uuc3RhdGUgIT09IFwiZHJhZnRcIikge1xuICAgICAgZGF0YS5hdHRzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH0sXG4gIGluc3RhbmNlSWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnaW5zdGFuY2Vmb3JtJztcbiAgfSxcbiAgZm9ybV90eXBlczogZnVuY3Rpb24oKSB7XG4gICAgaWYgKEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKSkge1xuICAgICAgcmV0dXJuICdkaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbWV0aG9kJztcbiAgICB9XG4gIH0sXG4gIHN0ZWVkb3NfZm9ybTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIGlmIChmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmb3JtX3ZlcnNpb247XG4gICAgfVxuICB9LFxuICBpbm5lcnN1YmZvcm1Db250ZXh0OiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZG9jX3ZhbHVlcztcbiAgICBkb2NfdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIG9ialtcInRhYmxlVmFsdWVzXCJdID0gZG9jX3ZhbHVlcyA/IGRvY192YWx1ZXNbb2JqLmNvZGVdIDogW107XG4gICAgb2JqW1wiZm9ybUlkXCJdID0gXCJpbnN0YW5jZWZvcm1cIjtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBpbnN0YW5jZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0ZWVkb3NfaW5zdGFuY2U7XG4gICAgU2Vzc2lvbi5nZXQoXCJjaGFuZ2VfZGF0ZVwiKTtcbiAgICBpZiAoU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpKSB7XG4gICAgICBzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICByZXR1cm4gc3RlZWRvc19pbnN0YW5jZTtcbiAgICB9XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbih2YWwpIHtcbiAgICBpZiAodmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSxcbiAgdW5lbXB0eTogZnVuY3Rpb24odmFsKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGVxdWFsczogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9LFxuICB1bmVxdWFsczogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiAhKGEgPT09IGIpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiLnNwbGl0KCcsJykuaW5jbHVkZXMoYSk7XG4gIH0sXG4gIGluY2x1ZGU6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYi5zcGxpdCgnLCcpLmluY2x1ZGVzKGEpO1xuICB9LFxuICBmaWVsZHM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcbiAgICBpZiAoZm9ybV92ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuICAgIH1cbiAgfSxcbiAgZm9ybWF0RGF0ZTogZnVuY3Rpb24oZGF0ZSwgb3B0aW9ucykge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IEpTT04ucGFyc2Uob3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5mb3JtYXQpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIGZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCJcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KG9wdGlvbnMuZm9ybWF0KTtcbiAgfSxcbiAgdHJhY2VzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZmxvdywgaW5zdGFuY2UsIGxvY2FsZSwgcmVmLCByZWYxLCByZWYyLCByZWYzLCBzdGVlZG9zRGF0YSwgc3RlcHMsIHRyYWNlcztcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBzdGVlZG9zRGF0YSA9IChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpKSAhPSBudWxsID8gKHJlZjEgPSByZWYudmlldykgIT0gbnVsbCA/IChyZWYyID0gcmVmMS50ZW1wbGF0ZSkgIT0gbnVsbCA/IHJlZjIuc3RlZWRvc0RhdGEgOiB2b2lkIDAgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICBpbnN0YW5jZSA9IHN0ZWVkb3NEYXRhICE9IG51bGwgPyBzdGVlZG9zRGF0YS5pbnN0YW5jZSA6IHZvaWQgMDtcbiAgICAgIGZsb3cgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0Rmxvd1ZlcnNpb24oaW5zdGFuY2UpO1xuICAgICAgbG9jYWxlID0gc3RlZWRvc0RhdGEgIT0gbnVsbCA/IHN0ZWVkb3NEYXRhLmxvY2FsZSA6IHZvaWQgMDtcbiAgICAgIGlmIChsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3poLWNuJykge1xuICAgICAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBmbG93ID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRmxvd1ZlcnNpb24oKTtcbiAgICAgIGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIik7XG4gICAgfVxuICAgIGlmICghaW5zdGFuY2UgfHwgIWZsb3cpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgc3RlcHMgPSBmbG93LnN0ZXBzO1xuICAgIHRyYWNlcyA9IHt9O1xuICAgIGlmICgocmVmMyA9IGluc3RhbmNlLnRyYWNlcykgIT0gbnVsbCkge1xuICAgICAgcmVmMy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNlKSB7XG4gICAgICAgIHZhciBhcHByb3ZlcywgcmVmNCwgc3RlcDtcbiAgICAgICAgc3RlcCA9IHN0ZXBzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdHJhY2Uuc3RlcCk7XG4gICAgICAgIGFwcHJvdmVzID0gW107XG4gICAgICAgIGlmICgocmVmNCA9IHRyYWNlLmFwcHJvdmVzKSAhPSBudWxsKSB7XG4gICAgICAgICAgcmVmNC5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICAgIHZhciBqdWRnZV9uYW1lO1xuICAgICAgICAgICAgaWYgKHRyYWNlLmlzX2ZpbmlzaGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGlmIChhcHByb3ZlLmp1ZGdlID09PSAnYXBwcm92ZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSBhcHByb3ZlZFwiLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLmp1ZGdlID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWplY3RlZFwiLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLmp1ZGdlID09PSAndGVybWluYXRlZCcpIHtcbiAgICAgICAgICAgICAgICBqdWRnZV9uYW1lID0gVEFQaTE4bi5fXyhcIkluc3RhbmNlIFN0YXRlIHRlcm1pbmF0ZWRcIiwge30sIGxvY2FsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJ3JlYXNzaWduZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWFzc2lnbmVkXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcHJvdmUuanVkZ2UgPT09ICdyZWxvY2F0ZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWxvY2F0ZWRcIiwge30sIGxvY2FsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBqdWRnZV9uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBqdWRnZV9uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSBwZW5kaW5nXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwcHJvdmVzLnB1c2goe1xuICAgICAgICAgICAgICBfaWQ6IGFwcHJvdmUuX2lkLFxuICAgICAgICAgICAgICBoYW5kbGVyOiBhcHByb3ZlLnVzZXIsXG4gICAgICAgICAgICAgIGhhbmRsZXJfbmFtZTogYXBwcm92ZS5oYW5kbGVyX25hbWUsXG4gICAgICAgICAgICAgIGhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWU6IGFwcHJvdmUuaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZSxcbiAgICAgICAgICAgICAgaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWU6IGFwcHJvdmUuaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWUsXG4gICAgICAgICAgICAgIGZpbmlzaF9kYXRlOiBhcHByb3ZlLmZpbmlzaF9kYXRlLFxuICAgICAgICAgICAgICBqdWRnZTogYXBwcm92ZS5qdWRnZSxcbiAgICAgICAgICAgICAganVkZ2VfbmFtZToganVkZ2VfbmFtZSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGFwcHJvdmUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIGlzX2ZpbmlzaGVkOiBhcHByb3ZlLmlzX2ZpbmlzaGVkLFxuICAgICAgICAgICAgICB0eXBlOiBhcHByb3ZlLnR5cGUsXG4gICAgICAgICAgICAgIG9waW5pb25fZmllbGRzX2NvZGU6IGFwcHJvdmUub3Bpbmlvbl9maWVsZHNfY29kZSxcbiAgICAgICAgICAgICAgc2lnbl9maWVsZF9jb2RlOiBhcHByb3ZlLnNpZ25fZmllbGRfY29kZSxcbiAgICAgICAgICAgICAgaXNfcmVhZDogYXBwcm92ZS5pc19yZWFkLFxuICAgICAgICAgICAgICBzaWduX3Nob3c6IGFwcHJvdmUuc2lnbl9zaG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIGlmIChzdGVwLm5hbWUgaW4gdHJhY2VzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2VzW3N0ZXAubmFtZV0gPSB0cmFjZXNbc3RlcC5uYW1lXS5jb25jYXQoYXBwcm92ZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2VzW3N0ZXAubmFtZV0gPSBhcHByb3ZlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2VzO1xuICB9LFxuICBkb2NfdmFsdWVzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICB9LFxuICBpbnN0YW5jZV9ib3hfc3R5bGU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBib3gsIGlucywganVkZ2U7XG4gICAgYm94ID0gU2Vzc2lvbi5nZXQoXCJib3hcIik7XG4gICAgaWYgKGJveCA9PT0gXCJpbmJveFwiIHx8IGJveCA9PT0gXCJkcmFmdFwiKSB7XG4gICAgICBqdWRnZSA9IFNlc3Npb24uZ2V0KFwianVkZ2VcIik7XG4gICAgICBpZiAoanVkZ2UpIHtcbiAgICAgICAgaWYgKGp1ZGdlID09PSBcImFwcHJvdmVkXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJib3gtc3VjY2Vzc1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGp1ZGdlID09PSBcInJlamVjdGVkXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJib3gtZGFuZ2VyXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgaWYgKGlucyAmJiBpbnMuZmluYWxfZGVjaXNpb24pIHtcbiAgICAgIGlmIChpbnMuZmluYWxfZGVjaXNpb24gPT09IFwiYXBwcm92ZWRcIikge1xuICAgICAgICByZXR1cm4gXCJib3gtc3VjY2Vzc1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnMuZmluYWxfZGVjaXNpb24gPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICByZXR1cm4gXCJib3gtZGFuZ2VyXCI7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICB0YWJsZV9maWVsZHM6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgdmFyIGZpZWxkcywgZm9ybV92ZXJzaW9uO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRGb3JtVmVyc2lvbihpbnN0YW5jZS5mb3JtLCBpbnN0YW5jZS5mb3JtX3ZlcnNpb24pO1xuICAgIH1cbiAgICBpZiAoZm9ybV92ZXJzaW9uKSB7XG4gICAgICBmaWVsZHMgPSBfLmNsb25lKGZvcm1fdmVyc2lvbi5maWVsZHMpO1xuICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQsIGluZGV4KSB7XG4gICAgICAgIHZhciBhZnRlcl9maWVsZCwgYmVmb3JlX2ZpZWxkLCBwcmVfZmllbGRzLCBwcmVfd2lkZV9maWVsZHMsIHRkX2NvbHNwYW4sIHRyX2VuZCwgdHJfc3RhcnQ7XG4gICAgICAgIGZpZWxkLnRyX3N0YXJ0ID0gXCJcIjtcbiAgICAgICAgZmllbGQudHJfZW5kID0gXCJcIjtcbiAgICAgICAgdGRfY29sc3BhbiA9IDE7XG4gICAgICAgIGlmICgodHlwZW9mIENvcmVGb3JtICE9PSBcInVuZGVmaW5lZFwiICYmIENvcmVGb3JtICE9PSBudWxsID8gQ29yZUZvcm0ucGFnZVRpdGxlRmllbGROYW1lIDogdm9pZCAwKSA9PT0gZmllbGQuY29kZSkge1xuICAgICAgICAgIGZpZWxkLmlzX3dpZGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5mb3JtdWxhICYmIGZpZWxkLnR5cGUgIT09ICdvZGF0YScpIHtcbiAgICAgICAgICBmaWVsZC5wZXJtaXNzaW9uID0gXCJyZWFkb25seVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIGZpZWxkLnRkX2NvbHNwYW4gPSA0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZC50ZF9jb2xzcGFuID0gMztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICBmaWVsZC50cl9zdGFydCA9IFwiPHRyPlwiO1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnRyX2VuZCA9IFwiPC90cj5cIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJlX2ZpZWxkcyA9IGZpZWxkcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgcHJlX3dpZGVfZmllbGRzID0gcHJlX2ZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcImlzX3dpZGVcIiwgdHJ1ZSk7XG4gICAgICAgICAgdHJfc3RhcnQgPSBcIlwiO1xuICAgICAgICAgIHRyX2VuZCA9IFwiXCI7XG4gICAgICAgICAgYmVmb3JlX2ZpZWxkID0gbnVsbDtcbiAgICAgICAgICBhZnRlcl9maWVsZCA9IG51bGw7XG4gICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgYmVmb3JlX2ZpZWxkID0gZmllbGRzW2luZGV4IC0gMV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRleCA8IGZpZWxkcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBhZnRlcl9maWVsZCA9IGZpZWxkc1tpbmRleCArIDFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIHRkX2NvbHNwYW4gPSA0O1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaXNfd2lkZSkge1xuICAgICAgICAgICAgdGRfY29sc3BhbiA9IDM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChiZWZvcmVfZmllbGQgJiYgYWZ0ZXJfZmllbGQgJiYgYmVmb3JlX2ZpZWxkLmlzX3dpZGUgJiYgYWZ0ZXJfZmllbGQuaXNfd2lkZSkge1xuICAgICAgICAgICAgICBmaWVsZC5pc193aWRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGRfY29sc3BhbiA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyID09PSAwICYmIGFmdGVyX2ZpZWxkICYmIGFmdGVyX2ZpZWxkLmlzX3dpZGUpIHtcbiAgICAgICAgICAgICAgZmllbGQuaXNfd2lkZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRkX2NvbHNwYW4gPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PT0gMCAmJiBhZnRlcl9maWVsZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBmaWVsZC5pc193aWRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGRfY29sc3BhbiA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpZWxkLnRkX2NvbHNwYW4gPSB0ZF9jb2xzcGFuO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdHJfc3RhcnQgPSBcIjx0cj5cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PT0gMCB8fCBmaWVsZC5pc193aWRlKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICAgICAgdHJfc3RhcnQgPSBcIjx0ciBjbGFzcyA9IFxcXCJ0ci1jaGlsZC10YWJsZVxcXCI+XCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJfc3RhcnQgPSBcIjx0cj5cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZC50cl9zdGFydCA9IHRyX3N0YXJ0O1xuICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IGZpZWxkcy5sZW5ndGggfHwgZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT09ICd0YWJsZScgfHwgZmllbGQuaXNfd2lkZSkge1xuICAgICAgICAgICAgdHJfZW5kID0gXCI8L3RyPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyICE9PSAwKSB7XG4gICAgICAgICAgICB0cl9lbmQgPSBcIjwvdHI+XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWVsZC50cl9lbmQgPSB0cl9lbmQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG4gIH0sXG4gIHNvcnRfYXBwcm92ZTogZnVuY3Rpb24oYXBwcm92ZXMsIG9yZGVyKSB7XG4gICAgaWYgKCFhcHByb3Zlcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoIWFwcHJvdmVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgICAgYXBwcm92ZXMuc29ydChmdW5jdGlvbihwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgX3AxLCBfcDI7XG4gICAgICAgICAgX3AxID0gMDtcbiAgICAgICAgICBfcDIgPSAwO1xuICAgICAgICAgIGlmIChwMS5maW5pc2hfZGF0ZSkge1xuICAgICAgICAgICAgX3AxID0gcDEuZmluaXNoX2RhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocDIuZmluaXNoX2RhdGUpIHtcbiAgICAgICAgICAgIF9wMiA9IHAyLmZpbmlzaF9kYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9wMiAtIF9wMTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHByb3Zlcy5zb3J0KGZ1bmN0aW9uKHAxLCBwMikge1xuICAgICAgICAgIHZhciBfcDEsIF9wMjtcbiAgICAgICAgICBfcDEgPSAwO1xuICAgICAgICAgIF9wMiA9IDA7XG4gICAgICAgICAgaWYgKHAxLmZpbmlzaF9kYXRlKSB7XG4gICAgICAgICAgICBfcDEgPSBwMS5maW5pc2hfZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwMi5maW5pc2hfZGF0ZSkge1xuICAgICAgICAgICAgX3AyID0gcDIuZmluaXNoX2RhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3AxIC0gX3AyO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcHJvdmVzO1xuICB9LFxuICBfdDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5KTtcbiAgfSxcbiAgZ2V0RmllbGQ6IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb247XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIGZvcm1fdmVyc2lvbi5maWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSk7XG4gICAgfVxuICB9LFxuICBnZXRWYWx1ZTogZnVuY3Rpb24oY29kZSkge1xuICAgIHZhciBmb3JtX3ZlcnNpb24sIGluc3RhbmNlLCBsb2NhbGUsIHV0Y09mZnNldCwgdmFsdWVzO1xuICAgIGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuICAgIGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb247XG4gICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICB1dGNPZmZzZXQgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEudXRjT2Zmc2V0O1xuICAgIHZhbHVlcyA9IGluc3RhbmNlLnZhbHVlcyB8fCB7fTtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICB2YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG4gICAgfVxuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUodmFsdWVzW2NvZGVdLCBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpLCBsb2NhbGUsIHV0Y09mZnNldCk7XG4gIH0sXG4gIGdldExhYmVsOiBmdW5jdGlvbihjb2RlKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uO1xuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwoZm9ybV92ZXJzaW9uLmZpZWxkcywgY29kZSk7XG4gIH0sXG4gIGdldENmQ2xhc3M6IGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgaWYgKChmaWVsZCAhPSBudWxsID8gZmllbGQudHlwZSA6IHZvaWQgMCkgPT09IFwiaW5wdXRcIiAmJiAoZmllbGQgIT0gbnVsbCA/IGZpZWxkLmlzX3RleHRhcmVhIDogdm9pZCAwKSkge1xuICAgICAgcmV0dXJuIFwiY2ZUZXh0YXJlYVwiO1xuICAgIH1cbiAgfSxcbiAgZ2V0VGFibGVUaGVhZDogZnVuY3Rpb24oZmllbGQpIHtcbiAgICByZXR1cm4gU3RlZWRvc1RhYmxlLmdldFRoZWFkKGZpZWxkLCBmYWxzZSk7XG4gIH0sXG4gIGdldFRhYmxlQm9keTogZnVuY3Rpb24oZmllbGQpIHtcbiAgICB2YXIgaW5zdGFuY2UsIHRhYmxlVmFsdWUsIHZhbHVlcztcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZTtcbiAgICAgIHZhbHVlcyA9IGluc3RhbmNlLnZhbHVlcyB8fCB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIH1cbiAgICB0YWJsZVZhbHVlID0gdmFsdWVzW2ZpZWxkLmNvZGVdO1xuICAgIHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VGJvZHkoZmllbGQuc2ZpZWxkcy5nZXRQcm9wZXJ0eShcImNvZGVcIiksIGZpZWxkLCB0YWJsZVZhbHVlLCBmYWxzZSk7XG4gIH0sXG4gIHNob3dMYWJlbDogZnVuY3Rpb24oZmllbGQpIHtcbiAgICB2YXIgdGVtcGxhdGVEYXRhO1xuICAgIHRlbXBsYXRlRGF0YSA9IFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YTtcbiAgICBpZiAodGVtcGxhdGVEYXRhLmxhYmVsID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgaXNPcGluaW9uRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGQuZm9ybXVsYSk7XG4gIH0sXG4gIGlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nOiBmdW5jdGlvbihmaWVsZF9mb3JtdWxhKSB7XG4gICAgcmV0dXJuIEluc3RhbmNlU2lnblRleHQuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSk7XG4gIH0sXG4gIGluY2x1ZGVzT3BpbmlvbkZpZWxkOiBmdW5jdGlvbihmb3JtLCBmb3JtX3ZlcnNpb24pIHtcbiAgICB2YXIgZmllbGRfZm9ybXVsYXMsIGZpZWxkcywgcmVmO1xuICAgIGZpZWxkX2Zvcm11bGFzID0gbmV3IEFycmF5KCk7XG4gICAgZmllbGRzID0gKChyZWYgPSBkYi5mb3JtX3ZlcnNpb25zLmZpbmRPbmUoe1xuICAgICAgX2lkOiBmb3JtX3ZlcnNpb24sXG4gICAgICBmb3JtOiBmb3JtXG4gICAgfSkpICE9IG51bGwgPyByZWYuZmllbGRzIDogdm9pZCAwKSB8fCBbXTtcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICB2YXIgcmVmMTtcbiAgICAgIGlmIChmLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdpZ25vcmUgb3BpbmlvbiBmaWVsZCBpbiB0YWJsZScpO1xuICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgICByZXR1cm4gZiAhPSBudWxsID8gKHJlZjEgPSBmLmZpZWxkcykgIT0gbnVsbCA/IHJlZjEuZm9yRWFjaChmdW5jdGlvbihmMSkge1xuICAgICAgICAgIHJldHVybiBmaWVsZF9mb3JtdWxhcy5wdXNoKGYxLmZvcm11bGEpO1xuICAgICAgICB9KSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaWVsZF9mb3JtdWxhcy5wdXNoKGYuZm9ybXVsYSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF8uc29tZShmaWVsZF9mb3JtdWxhcywgZnVuY3Rpb24oZmllbGRfZm9ybXVsYSkge1xuICAgICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSk7XG4gICAgfSk7XG4gIH0sXG4gIGdldE9waW5pb25GaWVsZFN0ZXBzTmFtZTogZnVuY3Rpb24oZmllbGRfZm9ybXVsYSwgdG9wX2tleXdvcmRzKSB7XG4gICAgdmFyIGZvbzEsIG9waW5pb25GaWVsZHM7XG4gICAgb3BpbmlvbkZpZWxkcyA9IG5ldyBBcnJheSgpO1xuICAgIGlmIChJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpKSB7XG4gICAgICBpZiAoZmllbGRfZm9ybXVsYSkge1xuICAgICAgICBmb28xID0gZmllbGRfZm9ybXVsYS5zcGxpdChcIjtcIik7XG4gICAgICAgIGZvbzEuZm9yRWFjaChmdW5jdGlvbihmb28pIHtcbiAgICAgICAgICB2YXIganNvbl9mb3JtdWxhLCByZWYsIHJlZjEsIHMxLCBzZjtcbiAgICAgICAgICBqc29uX2Zvcm11bGEgPSB7fTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAganNvbl9mb3JtdWxhID0gZXZhbChcIihcIiArIGZvbyArIFwiKVwiKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgICAgICAgIGpzb25fZm9ybXVsYSA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoanNvbl9mb3JtdWxhICE9IG51bGwgPyBqc29uX2Zvcm11bGEueWlqaWFubGFuIDogdm9pZCAwKSB7XG4gICAgICAgICAgICBzZiA9IHt9O1xuICAgICAgICAgICAgc2Yuc3RlcE5hbWUgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLnN0ZXA7XG4gICAgICAgICAgICBzZi5pbWFnZV9zaWduID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5pbWFnZV9zaWduIHx8IGZhbHNlO1xuICAgICAgICAgICAgc2Yub25seV9jY19vcGluaW9uID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5vbmx5X2NjIHx8IGZhbHNlO1xuICAgICAgICAgICAgc2YuZGVmYXVsdF9kZXNjcmlwdGlvbiA9IGpzb25fZm9ybXVsYS55aWppYW5sYW5bXCJkZWZhdWx0XCJdO1xuICAgICAgICAgICAgc2Yub25seV9oYW5kbGVyID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbi5vbmx5X2hhbmRsZXI7XG4gICAgICAgICAgICBzZi50b3Bfa2V5d29yZHMgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLnRvcF9rZXl3b3JkcyB8fCB0b3Bfa2V5d29yZHM7XG4gICAgICAgICAgICByZXR1cm4gb3BpbmlvbkZpZWxkcy5wdXNoKHNmKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKChmaWVsZF9mb3JtdWxhICE9IG51bGwgPyBmaWVsZF9mb3JtdWxhLmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xKSB7XG4gICAgICAgICAgICBzZiA9IHtcbiAgICAgICAgICAgICAgb25seV9jY19vcGluaW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgaW1hZ2Vfc2lnbjogZmFsc2UsXG4gICAgICAgICAgICAgIHRvcF9rZXl3b3JkczogdG9wX2tleXdvcmRzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGZvby5pbmRleE9mKFwie3NpZ25hdHVyZS5cIikgPiAtMSkge1xuICAgICAgICAgICAgICBzZi5pbWFnZV9zaWduID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZm9vID0gZm9vLnJlcGxhY2UoXCJ7c2lnbmF0dXJlLlwiLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMxID0gZm9vLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHMxLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHNmLnN0ZXBOYW1lID0gczEuc3BsaXQoXCIuXCIpWzFdO1xuICAgICAgICAgICAgICBpZiAob3BpbmlvbkZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcInN0ZXBOYW1lXCIsIHNmLnN0ZXBOYW1lKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKChyZWYgPSBvcGluaW9uRmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJzdGVwTmFtZVwiLCBzZi5zdGVwTmFtZSkpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHJlZi5vbmx5X2NjX29waW5pb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgoKHJlZjEgPSBzMS5zcGxpdChcIi5cIilbMl0pICE9IG51bGwgPyByZWYxLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiB2b2lkIDApID09PSAnY2MnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNmLm9ubHlfY2Nfb3BpbmlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3BpbmlvbkZpZWxkcy5wdXNoKHNmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3BpbmlvbkZpZWxkcztcbiAgfSxcbiAgc2hvd0NDT3BpbmlvbjogZnVuY3Rpb24oZmllbGQpIHtcbiAgICB2YXIgcmVmLCByZWYxLCByZWYyLCBzMTtcbiAgICBpZiAoKChyZWYgPSBmaWVsZC5mb3JtdWxhKSAhPSBudWxsID8gcmVmLmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoKHJlZjEgPSBmaWVsZC5mb3JtdWxhKSAhPSBudWxsID8gcmVmMS5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xKSB7XG4gICAgICBzMSA9IGZpZWxkLmZvcm11bGEucmVwbGFjZShcIntzaWduYXR1cmUuXCIsIFwiXCIpLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgaWYgKHMxLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAyKSB7XG4gICAgICAgIGlmICgoKHJlZjIgPSBzMS5zcGxpdChcIi5cIilbMl0pICE9IG51bGwgPyByZWYyLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiB2b2lkIDApID09PSAnY2MnKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBtYXJrRG93blRvSHRtbDogZnVuY3Rpb24obWFya0Rvd25TdHJpbmcpIHtcbiAgICBpZiAobWFya0Rvd25TdHJpbmcpIHtcbiAgICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgbWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFNwYWNlYmFycy5TYWZlU3RyaW5nKG1hcmtlZC5wYXJzZShtYXJrRG93blN0cmluZykpO1xuICAgIH1cbiAgfSxcbiAgZl9sYWJlbDogZnVuY3Rpb24odGhhdCkge1xuICAgIHJldHVybiB0aGF0Lm5hbWUgfHwgdGhhdC5jb2RlO1xuICB9XG59O1xuXG5pZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuc3RlZWRvc19mb3JtID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybV92ZXJzaW9uO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzU2VjdGlvbiA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IHRoaXMuZm9ybV92ZXJzaW9uO1xuICAgIHJldHVybiBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpLnR5cGUgPT09ICdzZWN0aW9uJztcbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5kb2NfdmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGluc3RhbmNlO1xuICAgIGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZTtcbiAgICByZXR1cm4gaW5zdGFuY2UudmFsdWVzO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmFwcGxpY2FudENvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YSwgaW5zdGFuY2U7XG4gICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgIHJldHVybiBkYXRhID0ge1xuICAgICAgbmFtZTogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgYXR0czoge1xuICAgICAgICBuYW1lOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICAgIGlkOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICAgIFwiY2xhc3NcIjogJ3NlbGVjdFVzZXIgZm9ybS1jb250cm9sIGluc19hcHBsaWNhbnQnXG4gICAgICB9LFxuICAgICAgdmFsdWU6IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lXG4gICAgfTtcbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmZpZWxkcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gdGhpcy5mb3JtX3ZlcnNpb247XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYShmb3JtX3ZlcnNpb24pKTtcbiAgICB9XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZm9ybV90eXBlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcImRpc2FibGVkXCI7XG4gIH07XG4gIFRlbXBsYXRlLnJlZ2lzdGVySGVscGVyKFwiYWZGaWVsZExhYmVsVGV4dFwiLCBmdW5jdGlvbihvcCkge1xuICAgIHZhciBmb3JtX3ZlcnNpb24sIHJlZjtcbiAgICBmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uO1xuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwoZm9ybV92ZXJzaW9uLmZpZWxkcywgb3AgIT0gbnVsbCA/IChyZWYgPSBvcC5oYXNoKSAhPSBudWxsID8gcmVmLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDApO1xuICB9KTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5fdCA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBsb2NhbGU7XG4gICAgbG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5LCB7fSwgbG9jYWxlKTtcbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnNfYXR0YWNoX2Rvd25sb2FkX3VybCA9IGZ1bmN0aW9uKF9pZCwgYWJzb2x1dGUpIHtcbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCIvYXBpL2ZpbGVzL2luc3RhbmNlcy9cIiArIF9pZCArIFwiP2Rvd25sb2FkPXRydWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIi9hcGkvZmlsZXMvaW5zdGFuY2VzL1wiICsgX2lkICsgXCI/ZG93bmxvYWQ9dHJ1ZVwiO1xuICAgIH1cbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5vcHRpb25zID0gZnVuY3Rpb24oZmllbGQpIHtcbiAgICB2YXIgb3B0aW9ucywgcmVmLCByZXY7XG4gICAgb3B0aW9ucyA9IGZpZWxkICE9IG51bGwgPyAocmVmID0gZmllbGQub3B0aW9ucykgIT0gbnVsbCA/IHJlZi5zcGxpdChcIlxcblwiKSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICByZXYgPSBbXTtcbiAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gcmV2LnB1c2goe1xuICAgICAgICAgIGxhYmVsOiBpdGVtLFxuICAgICAgICAgIHZhbHVlOiBpdGVtXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXY7XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZ2V0UGVybWlzc2lvbnMgPSBmdW5jdGlvbihjb2RlKSB7XG4gICAgdmFyIHJlZjtcbiAgICBpZiAoISgocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKGNvZGUpIDogdm9pZCAwKSkge1xuICAgICAgcmV0dXJuIFwicmVhZG9ubHkgZGlzYWJsZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLmV2ZW50cyA9IHtcbiAgJ2NoYW5nZSAuZm9ybS1jb250cm9sLC5jaGVja2JveCBpbnB1dCwuYWYtcmFkaW8tZ3JvdXAgaW5wdXQsLmFmLWNoZWNrYm94LWdyb3VwIGlucHV0JzogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gSW5zdGFuY2VNYW5hZ2VyLmluc3RhbmNlZm9ybUNoYW5nZUV2ZW50KGV2ZW50KTtcbiAgfSxcbiAgJ3R5cGVhaGVhZDpjaGFuZ2UgLmZvcm0tY29udHJvbCc6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIEluc3RhbmNlTWFuYWdlci5pbnN0YW5jZWZvcm1DaGFuZ2VFdmVudChldmVudCk7XG4gIH0sXG4gICdjbGljayAuY2ZUZXh0YXJlYSBhJzogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiBTdGVlZG9zLm9wZW5XaW5kb3coZXZlbnQudGFyZ2V0LmhyZWYpO1xuICB9XG59O1xuXG5JbnN0YW5jZWZvcm1UZW1wbGF0ZS5vbkNyZWF0ZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbXBpbGVkLCBlLCBpbnN0YW5jZSwgaW5zdGFuY2VDdXN0b21UZW1wbGF0ZSwgaW5zdGFuY2VWaWV3LCByZW5kZXJGdW5jdGlvbiwgdGVtcGxhdGU7XG4gIGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gIGlmICghaW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUoaW5zdGFuY2UpO1xuICB0cnkge1xuICAgIGNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0ZW1wbGF0ZSwge1xuICAgICAgaXNCb2R5OiB0cnVlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgIGUgPSBlcnJvcjE7XG4gICAgY29uc29sZS5sb2coXCJJbnN0YW5jZSBUZW1wbGF0ZSBFcnJvclwiLCBlKTtcbiAgICBjb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoXCJcIiwge1xuICAgICAgaXNCb2R5OiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmVuZGVyRnVuY3Rpb24gPSBldmFsKGNvbXBpbGVkKTtcbiAgaW5zdGFuY2VWaWV3ID0gbmV3IEJsYXplLlZpZXcoXCJjdXN0b21faW5zdGFuY2VfdGVtcGxhdGVcIiwgcmVuZGVyRnVuY3Rpb24pO1xuICBpbnN0YW5jZUN1c3RvbVRlbXBsYXRlID0gbmV3IEJsYXplLlRlbXBsYXRlKGluc3RhbmNlVmlldy5uYW1lLCByZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLmluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZSA9IGluc3RhbmNlQ3VzdG9tVGVtcGxhdGU7XG4gIHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZV9jdXN0b21fdGVtcGxhdGUuaGVscGVycyhJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLm9uUmVuZGVyZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGN1cnJlbnRBcHByb3ZlLCBjdXJyZW50U3RlcCwgZm9ybV92ZXJzaW9uLCBmb3JtdWxhX2ZpZWxkcywgaW5zZXJ0RG9jLCBpbnN0YW5jZSwgaW5zdGFuY2VOdW1iZXJGaWVsZHMsIGp1ZGdlO1xuICBpbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICBpZiAoIWluc3RhbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEluc3RhbmNlTWFuYWdlci5zZXRJbnN0YW5jZUZvcm1BcHBsaWNhbnQoaW5zdGFuY2UuYXBwbGljYW50LCBpbnN0YW5jZS5hcHBsaWNhbnRfbmFtZSk7XG4gIEFwcHJvdmVNYW5hZ2VyLmVycm9yID0ge1xuICAgIG5leHRTdGVwczogJycsXG4gICAgbmV4dFN0ZXBVc2VyczogJydcbiAgfTtcbiAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnZHJhZnQnKSB7XG4gICAgSW5zdGFuY2VFdmVudC5pbml0RXZlbnRzKGluc3RhbmNlLmZsb3cpO1xuICB9XG4gIGlmICghQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpKSB7XG4gICAgY3VycmVudEFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKTtcbiAgICBpbnN0YW5jZU51bWJlckZpZWxkcyA9ICQoXCJbZGF0YS1mb3JtdWxhXVwiLCAkKFwiI2luc3RhbmNlZm9ybVwiKSk7XG4gICAgaW5zdGFuY2VOdW1iZXJGaWVsZHMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlbGVtZW50LCBzY2hlbWFLZXk7XG4gICAgICBzY2hlbWFLZXkgPSB0aGlzLmRhdGFzZXQuc2NoZW1hS2V5O1xuICAgICAgZWxlbWVudCA9ICQodGhpcyk7XG4gICAgICBpZiAoISQodGhpcykudmFsKCkgJiYgc2NoZW1hS2V5ICYmIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSkge1xuICAgICAgICByZXR1cm4gTWV0ZW9yLmNhbGwoJ2dldEluc3RhbmNlVmFsdWVzJywgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpLCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KSB7XG4gICAgICAgICAgdmFyIGtleSwgcmVmO1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdG9hc3RyLmVycm9yKGVycm9yLnJlYXNvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghcmVzdWx0W3NjaGVtYUtleV0pIHtcbiAgICAgICAgICAgIGtleSA9IChyZWYgPSBlbGVtZW50LmRhdGEoXCJmb3JtdWxhXCIpKSAhPSBudWxsID8gcmVmLnJlcGxhY2UoXCJhdXRvX251bWJlcihcIiwgXCJcIikucmVwbGFjZShcIilcIiwgXCJcIikgOiB2b2lkIDA7XG4gICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxcIi9nLCBcIlwiKS5yZXBsYWNlKC9cXCcvZywgXCJcIik7XG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJ7XCIpID4gLTEpIHtcbiAgICAgICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgICAgICAgICBrZXkgPSBrZXkudHJpbSgpO1xuICAgICAgICAgICAgICBrZXkgPSBBdXRvRm9ybS5nZXRGaWVsZFZhbHVlKGtleSwgJ2luc3RhbmNlZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEluc3RhbmNlTnVtYmVyUnVsZXMuaW5zdGFuY2VOdW1iZXJCdWlsZGVyKGVsZW1lbnQsIGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50LnZhbChyZXN1bHRbc2NoZW1hS2V5XSkudHJpZ2dlcihcImNoYW5nZVwiKSA6IHZvaWQgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGp1ZGdlID0gY3VycmVudEFwcHJvdmUuanVkZ2U7XG4gICAgY3VycmVudFN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIGlmICghZm9ybV92ZXJzaW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZm9ybV92ZXJzaW9uLmZpZWxkcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3JtdWxhX2ZpZWxkcyA9IEZvcm1fZm9ybXVsYS5nZXRGb3JtdWxhRmllbGRWYXJpYWJsZShcIkZvcm1fZm9ybXVsYS5maWVsZF92YWx1ZXNcIiwgZm9ybV92ZXJzaW9uLmZpZWxkcyk7XG4gICAgaW5zZXJ0RG9jID0gQXV0b0Zvcm0uZ2V0Rm9ybVZhbHVlcyhcImluc3RhbmNlZm9ybVwiLCB2b2lkIDAsIHZvaWQgMCwgZmFsc2UpO1xuICAgIEZvcm1fZm9ybXVsYS5ydW4oXCJcIiwgXCJcIiwgZm9ybXVsYV9maWVsZHMsIGluc2VydERvYywgZm9ybV92ZXJzaW9uLmZpZWxkcyk7XG4gICAgcmV0dXJuIFNlc3Npb24uc2V0KFwiaW5zdGFuY2VfZm9ybV92YWx1ZXNcIiwge1xuICAgICAgaW5zdGFuY2VJZDogaW5zdGFuY2UuX2lkLFxuICAgICAgdmFsdWVzOiBpbnNlcnREb2NcbiAgICB9KTtcbiAgfVxufTtcbiIsIkluc3RhbmNlQXR0YWNobWVudFRlbXBsYXRlLmhlbHBlcnMgPSB7XG5cblx0c2hvd01haW5UaXRsZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkud29ya2Zsb3dNYWluQXR0YWNoVGl0bGUuZ2V0KCk7XG5cdH0sXG5cdGlzQ2xpZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gTWV0ZW9yLmlzQ2xpZW50XG5cdH0sXG5cdGVuYWJsZWRfYWRkX21haW5fYXR0YWNobWVudDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGlmICghaW5zKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRpZiAoU2Vzc2lvbiAmJiBTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uLmdldChcImJveFwiKSAhPSBcImRyYWZ0XCIgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gXCJpbmJveFwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cblx0XHQvLyDlt7Lnu4/nu5PmnZ/nmoTljZXlrZDkuI3og73mlLnpmYTku7Zcblx0XHRpZiAoaW5zLnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblxuXHRcdHZhciBjdXJyZW50X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcblxuXHRcdGlmICghY3VycmVudF9zdGVwKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8gY2PnmoTljZXlrZDvvIzlj6rmnInlnKjlvZPliY3mraXpqqTmiY3og73kv67mlLnpmYTku7Zcblx0XHR2YXIgYXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpO1xuXHRcdGlmIChhcHByb3ZlICYmIGFwcHJvdmUudHlwZSA9PSBcImNjXCIpIHtcblx0XHRcdHZhciBjdXJyZW50VHJhY2UgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFRyYWNlKCk7XG5cdFx0XHRpZihjdXJyZW50VHJhY2UgJiYgY3VycmVudFRyYWNlLl9pZCAhPSBhcHByb3ZlLnRyYWNlKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIOWIhuWPkeeahOato+aWh+aIluiAhemZhOS7tuS4jeaYvuekuui9rOS4unBkZuaMiemSrlxuXHRcdC8vIOWmguaenOacieato+aWh+adg+mZkOWImeS4uuato+aWh++8jOWQpuWImeWIhuWPkeS4uumZhOS7tlxuXHRcdC8vIOWIhuWPkeeahOmZhOS7tuS4jeWFgeiuuOS/ruaUuSDliKDpmaQg5paw5aKe54mI5pysXG5cdFx0dmFyIG1haW5fYXR0YWNoX2NvdW50ID0gY2ZzLmluc3RhbmNlcy5maW5kKHtcblx0XHRcdCdtZXRhZGF0YS5pbnN0YW5jZSc6IGlucy5faWQsXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHR9KS5jb3VudCgpO1xuXG5cdFx0dmFyIGRpc3RyaWJ1dGVfbWFpbl9hdHRhY2hfY291bnQgPSAwO1xuXG5cdFx0aWYgKGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UpIHtcblx0XHRcdHZhciBzdGFydF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldFN0YXJ0U3RlcCgpO1xuXHRcdFx0aWYgKHN0YXJ0X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2gpIHtcblx0XHRcdFx0dmFyIGRpc3RyaWJ1dGVfbWFpbl9hdHRhY2hfY291bnQgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0XHRcdCdtZXRhZGF0YS5pbnN0YW5jZSc6IGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UsXG5cdFx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZVxuXHRcdFx0XHR9KS5jb3VudCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggPT0gdHJ1ZSAmJiBtYWluX2F0dGFjaF9jb3VudCA8IDEgJiYgZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCA8IDEpIHtcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0Ly8g5q2j5paH5pyA5aSa5Y+q6IO95pyJ5LiA5LiqXG5cdFx0aWYgKG1haW5fYXR0YWNoX2NvdW50ID49IDEgfHwgZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCA+PSAxKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8g5byA5aeL6IqC54K55bm25LiU6K6+572u5LqG5Y+v5Lul5LiK5Lyg5q2j5paH5omN5pi+56S65LiK5Lyg5q2j5paH55qE5oyJ6ZKuXG5cdFx0dmFyIGN1cnJlbnRfc3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50U3RlcCgpO1xuXHRcdGlmIChjdXJyZW50X3N0ZXAgJiYgY3VycmVudF9zdGVwLnN0ZXBfdHlwZSA9PSBcInN0YXJ0XCIgJiYgY3VycmVudF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoID09IHRydWUpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0cmV0dXJuIGZhbHNlXG5cdH0sXG5cblx0ZW5hYmxlZF9lZGl0X25vcm1hbF9hdHRhY2htZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uICYmIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSlcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0dmFyIGZsb3cgPSBXb3JrZmxvd01hbmFnZXIuZ2V0RmxvdyhpbnMuZmxvdyk7XG5cdFx0aWYgKCFmbG93KVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblxuXHRcdC8vIOWIhuWPkeWQjueahCDpmYTku7bvvIzkuI3lj6/ku6XnvJbovpEv5Yig6Zmk77yM5Lmf5LiN6K6p5LiK5Lyg5paw55qE6ZmE5Lu2LCDmtYHnqIvliJfooajvvJrmt7vliqDlsZ7mgKcg4oCY6KKr5YiG5Y+R5ZCO5piv5ZCm5YWB6K645LiK5Lyg6ZmE5Lu24oCZICMxODM3XG5cdFx0aWYgKGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UgJiYgIWZsb3cudXBsb2FkX2FmdGVyX2JlaW5nX2Rpc3RyaWJ1dGVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gXCJkcmFmdFwiICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpICE9IFwiaW5ib3hcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXG5cdFx0Ly8g5bey57uP57uT5p2f55qE5Y2V5a2Q5LiN6IO95pS56ZmE5Lu2XG5cdFx0aWYgKGlucy5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cblx0XHQvLyBjY+eahOWNleWtkO+8jOWPquacieWcqOW9k+WJjeatpemqpOaJjeiDveS/ruaUuemZhOS7tlxuXHRcdHZhciBhcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKCk7XG5cdFx0aWYgKGFwcHJvdmUgJiYgYXBwcm92ZS50eXBlID09IFwiY2NcIikge1xuXHRcdFx0dmFyIGN1cnJlbnRUcmFjZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50VHJhY2UoKTtcblx0XHRcdGlmKGN1cnJlbnRUcmFjZSAmJiBjdXJyZW50VHJhY2UuX2lkICE9IGFwcHJvdmUudHJhY2Upe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKEluc3RhbmNlTWFuYWdlci5pc0NDKGlucykpIHtcblx0XHRcdHZhciBzdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldENDU3RlcCgpO1xuXHRcdFx0aWYgKHN0ZXAgJiYgKHN0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9PSB0cnVlIHx8IHN0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9PSB1bmRlZmluZWQpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgY3VycmVudF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG5cdFx0XHRpZiAoY3VycmVudF9zdGVwICYmIChjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9PSB0cnVlIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHVuZGVmaW5lZCkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlXG5cdH0sXG5cblx0bWFpbl9hdHRhY2htZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdHZhciBzdGFydF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldFN0YXJ0U3RlcCgpO1xuXG5cdFx0Ly8g5aaC5p6c5piv6KKr5YiG5Y+R55qE55Sz6K+35Y2V5bm25LiU5pyJ5L+u5pS55q2j5paH55qE5p2D6ZmQ77yM5YiZ5LyY5YWI5pi+56S65Y6f55Sz6K+35Y2V5paH5Lu2XG5cdFx0dmFyIG1haW5fYXR0YWNoID0gbnVsbDtcblx0XHRpZiAoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSAmJiBzdGFydF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoID09IHRydWUpIHtcblx0XHRcdG1haW5fYXR0YWNoID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKHtcblx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSxcblx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmICghbWFpbl9hdHRhY2gpIHtcblx0XHRcdG1haW5fYXR0YWNoID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKHtcblx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zLl9pZCxcblx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYWluX2F0dGFjaDtcblx0fSxcblxuXHRub3JtYWxfYXR0YWNobWVudHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0dmFyIHNlbGVjdG9yID0ge1xuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0J21ldGFkYXRhLm1haW4nOiB7XG5cdFx0XHRcdCRuZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHR9O1xuXG5cdFx0dmFyIGF0dHMgPSBuZXcgQXJyYXkoKTtcblxuXHRcdGlmIChpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlKSB7XG5cdFx0XHQvLyDlpoLmnpzmmK/ooqvliIblj5HnmoTnlLPor7fljZXvvIzliJnmmL7npLrljp/nlLPor7fljZXmlofku7YsIOWmguaenOmAieaLqeS6huWwhuWOn+ihqOWNleWtmOWCqOS4uumZhOS7tuS5n+imgeaYvuekuiwg5ZCM5pe25Lmf6KaB5pi+56S65paw5LiK5Lyg55qE6ZmE5Lu2XG5cdFx0XHR2YXIgZGZpcyA9IF8uY2xvbmUoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMpIHx8IFtdO1xuXHRcdFx0ZGZpcy5wdXNoKGlucy5faWQpO1xuXHRcdFx0c2VsZWN0b3JbJ21ldGFkYXRhLmluc3RhbmNlJ10gPSB7XG5cdFx0XHRcdCRpbjogZGZpc1xuXHRcdFx0fTtcblxuXG5cdFx0XHRzZWxlY3RvcltcIiRvclwiXSA9IFt7XG5cdFx0XHRcdFwibWV0YWRhdGEuaW5zdGFuY2VcIjogaW5zLl9pZFxuXHRcdFx0fSwge1xuXHRcdFx0XHRcIm1ldGFkYXRhLmluc3RhbmNlXCI6IHtcblx0XHRcdFx0XHQkaW46IGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwibWV0YWRhdGEuaXNfcHJpdmF0ZVwiOiB7XG5cdFx0XHRcdFx0JG5lOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1dXG5cblx0XHRcdC8vIOWmguaenOWOn+eUs+ivt+WNleacieato+aWh+S9huaYr+WIhuWPkeWQjuayoeacieato+aWh+adg+mZkO+8jOWImeWOn+eUs+ivt+WNleato+aWh+aYvuekuuWcqOmZhOS7tuagj1xuXHRcdFx0dmFyIHN0YXJ0X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0U3RhcnRTdGVwKCk7XG5cdFx0XHRpZiAoc3RhcnRfc3RlcCAmJiBzdGFydF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoICE9IHRydWUpIHtcblx0XHRcdFx0dmFyIGRpc3RyaWJ1dGVfbWFpbiA9IGNmcy5pbnN0YW5jZXMuZmluZE9uZSh7XG5cdFx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHRcdFx0JGluOiBpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlc1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkaXN0cmlidXRlX21haW4pIHtcblx0XHRcdFx0XHR2YXIgZmlyc3RWZXJzaW9uTWFpbiA9IGNmcy5pbnN0YW5jZXMuZmluZE9uZShkaXN0cmlidXRlX21haW4ubWV0YWRhdGEucGFyZW50KTtcblx0XHRcdFx0XHRkaXN0cmlidXRlX21haW4uYXR0YWNobWVudFVwbG9hZGVkQXQgPSBmaXJzdFZlcnNpb25NYWluID8gZmlyc3RWZXJzaW9uTWFpbi51cGxvYWRlZEF0IDogZGlzdHJpYnV0ZV9tYWluLnVwbG9hZGVkQXQ7XG5cdFx0XHRcdFx0YXR0cy5wdXNoKGRpc3RyaWJ1dGVfbWFpbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3JbJ21ldGFkYXRhLmluc3RhbmNlJ10gPSBpbnMuX2lkO1xuXHRcdH1cblxuXHRcdGNmcy5pbnN0YW5jZXMuZmluZChzZWxlY3RvcikuZm9yRWFjaChmdW5jdGlvbihjKSB7XG5cdFx0XHR2YXIgZmlyc3RWZXJzaW9uID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKGMubWV0YWRhdGEucGFyZW50KTtcblx0XHRcdGMuYXR0YWNobWVudFVwbG9hZGVkQXQgPSBmaXJzdFZlcnNpb24gPyBmaXJzdFZlcnNpb24udXBsb2FkZWRBdCA6IGMudXBsb2FkZWRBdDtcblx0XHRcdGF0dHMucHVzaChjKTtcblx0XHR9KVxuXG5cdFx0cmV0dXJuIF8uc29ydEJ5KGF0dHMsICdhdHRhY2htZW50VXBsb2FkZWRBdCcpO1xuXHR9LFxuXG5cdHNob3dBdHRhY2htZW50czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGlmICghaW5zKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8g5aaC5p6c5piv6KKr5YiG5Y+R55qE55Sz6K+35Y2V77yM5YiZ5pi+56S65Y6f55Sz6K+35Y2V5paH5Lu2IOWSjOWIhuWPkeWQjueUs+ivt+WNleaWh+S7tlxuXHRcdHZhciBpbnN0YW5jZUlkcyA9IF8uY2xvbmUoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMpIHx8IFtdO1xuXHRcdGluc3RhbmNlSWRzLnB1c2goaW5zLl9pZCk7XG5cdFx0dmFyIGF0dGFjaG1lbnRzX2NvdW50ID0gY2ZzLmluc3RhbmNlcy5maW5kKHtcblx0XHRcdCdtZXRhZGF0YS5pbnN0YW5jZSc6IHtcblx0XHRcdFx0JGluOiBpbnN0YW5jZUlkc1xuXHRcdFx0fSxcblx0XHRcdCdtZXRhZGF0YS5jdXJyZW50JzogdHJ1ZVxuXHRcdH0pLmNvdW50KCk7XG5cblx0XHRpZiAoU2Vzc2lvbiAmJiBTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgJiYgYXR0YWNobWVudHNfY291bnQgPCAxKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gXCJkcmFmdFwiIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09IFwiaW5ib3hcIiB8fCBhdHRhY2htZW50c19jb3VudCA+IDApXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0X3Q6IGZ1bmN0aW9uKGtleSkge1xuXHRcdHJldHVybiBUQVBpMThuLl9fKGtleSlcblx0fSxcblxuXHRfOiBmdW5jdGlvbihrZXkpIHtcblx0XHR2YXIgbG9jYWxlO1xuXHRcdGlmIChNZXRlb3IuaXNDbGllbnQpIHtcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKGtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG5cdFx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpO1xuXHRcdH1cblx0fSxcblxuXHRmbG93X2ZpbGVzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIGNmcy5maWxlcy5maW5kKHsgJ21ldGFkYXRhLnNwYWNlJzogaW5zLnNwYWNlLCAnbWV0YWRhdGEub2JqZWN0X25hbWUnOiAnZmxvd3MnLCAnbWV0YWRhdGEucmVjb3JkX2lkJzogaW5zLmZsb3cgfSk7XG5cdH0sXG5cblx0aXNEcmFmdEFuZEZsb3dmaWxlc0V4aXN0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIChTZXNzaW9uLmdldCgnYm94JykgPT0gJ2RyYWZ0JykgJiYgISFjZnMuZmlsZXMuZmluZCh7ICdtZXRhZGF0YS5zcGFjZSc6IGlucy5zcGFjZSwgJ21ldGFkYXRhLm9iamVjdF9uYW1lJzogJ2Zsb3dzJywgJ21ldGFkYXRhLnJlY29yZF9pZCc6IGlucy5mbG93IH0pLmNvdW50KCk7XG5cdH1cblxuXG59XG5cbmlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5fdCA9IGZ1bmN0aW9uKGtleSkge1xuXHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpXG5cdH1cblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5lbmFibGVkX2FkZF9tYWluX2F0dGFjaG1lbnQgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fTtcblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5lbmFibGVkX2VkaXRfbm9ybWFsX2F0dGFjaG1lbnQgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fTtcblxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLm1haW5fYXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZTtcblx0XHR2YXIgaW5zdGFuY2VJZHMgPSBfLmNvbXBhY3QoW2luc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSwgaW5zdGFuY2UuX2lkXSk7XG5cdFx0dmFyIGF0dGFjaG1lbnQgPSBjZnMuaW5zdGFuY2VzLmZpbmRPbmUoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHQkaW46IGluc3RhbmNlSWRzXG5cdFx0XHR9LFxuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0J21ldGFkYXRhLm1haW4nOiB0cnVlXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYXR0YWNobWVudDtcblx0fTtcblxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLm5vcm1hbF9hdHRhY2htZW50cyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdGVlZG9zRGF0YSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YVxuXHRcdHZhciBpbnN0YW5jZSA9IHN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuXHRcdHZhciBpbnN0YW5jZUlkcyA9IF8uY2xvbmUoaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcykgfHwgW107XG5cdFx0aW5zdGFuY2VJZHMucHVzaChpbnN0YW5jZS5faWQpO1xuXHRcdHZhciBhdHRhY2htZW50cyA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG5cdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdCRpbjogaW5zdGFuY2VJZHNcblx0XHRcdH0sXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHtcblx0XHRcdFx0JG5lOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0JG9yOiBbe1xuXHRcdFx0XHQnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHtcblx0XHRcdFx0XHQkbmU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fSwge1xuXHRcdFx0XHQnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHRydWUsXG5cdFx0XHRcdFwibWV0YWRhdGEub3duZXJcIjogc3RlZWRvc0RhdGEuc2Vzc2lvblVzZXJJZCB8fCBzdGVlZG9zRGF0YS51c2VySWQgfHwgJy0xJyAvLyDpmLLmraLmlbDmja7lvILluLjml7Ys5pi+56S65LqG56eB5pyJ6ZmE5Lu2XG5cdFx0XHR9XVxuXHRcdH0pLmZldGNoKCk7XG5cblx0XHRyZXR1cm4gYXR0YWNobWVudHM7XG5cdH07XG5cblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5zaG93QXR0YWNobWVudHMgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zdGFuY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuaW5zdGFuY2U7XG5cdFx0dmFyIGluc3RhbmNlSWRzID0gXy5jbG9uZShpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzKSB8fCBbXTtcblx0XHRpbnN0YW5jZUlkcy5wdXNoKGluc3RhbmNlLl9pZCk7XG5cblx0XHR2YXIgYXR0YWNobWVudHMgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHQkaW46IGluc3RhbmNlSWRzXG5cdFx0XHR9LFxuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlXG5cdFx0fSkuZmV0Y2goKTtcblxuXHRcdGlmIChhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0SW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycy5zaG93TWFpblRpdGxlID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuXHRcdHZhciBpbnN0YW5jZUlkcyA9IF8uY29tcGFjdChbaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlLCBpbnN0YW5jZS5faWRdKTtcblx0XHR2YXIgbWFpbl9hdHRhY2hfY291bnQgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHQkaW46IGluc3RhbmNlSWRzXG5cdFx0XHR9LFxuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuXHRcdFx0J21ldGFkYXRhLm1haW4nOiB0cnVlXG5cdFx0fSkuY291bnQoKTtcblxuXHRcdHJldHVybiBtYWluX2F0dGFjaF9jb3VudCA+IDBcblx0fVxufVxuIiwibWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKVxuSW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzID1cblx0c2hvdzogKHN0ZXBOYW1lKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpZiBTZXNzaW9uLmdldCgnaW5zdGFuY2VQcmludCcpXG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0aWYgSW5zdGFuY2VNYW5hZ2VyLmlzSW5ib3goKVxuXHRcdFx0XHRteUFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKVxuXHRcdFx0XHRpZiBteUFwcHJvdmVcblx0XHRcdFx0XHRpbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdFx0XHRcdG15VHJhY2UgPSBpbnN0YW5jZT8udHJhY2VzPy5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIG15QXBwcm92ZS50cmFjZSlcblx0XHRcdFx0XHRyZXR1cm4gbXlUcmFjZT8ubmFtZSA9PSBzdGVwTmFtZVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdGRlZmF1bHREZXNjcmlwdGlvbjogKCktPlxuI1x0XHRyZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLmRlZmF1bHRfZGVzY3JpcHRpb24gfHwgVEFQaTE4bi5fXyhcImluc3RhbmNlX2RlZmF1bHRfb3BpbmlvblwiKVxuXHRcdHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEuZGVmYXVsdF9kZXNjcmlwdGlvblxuXG5cdHRyYWNlczogKCktPlxuXHRcdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKClcblxuXHR0cmFjZTogKHN0ZXBOYW1lLCBvbmx5X2NjX29waW5pb24sIGltYWdlX3NpZ24sIHRvcF9rZXl3b3JkcyktPlxuXHRcdGluc3RhbmNlID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnN0YW5jZSgpXG5cblx0XHRpc19jb21wbGV0ZWQgPSBpbnN0YW5jZT8uc3RhdGUgPT0gXCJjb21wbGV0ZWRcIlxuXG5cdFx0Y29tcGxldGVkX2RhdGUgPSBpZiBpc19jb21wbGV0ZWQgdGhlbiBfLmxhc3QoaW5zdGFuY2UudHJhY2VzKT8uZmluaXNoX2RhdGU/LmdldFRpbWUoKSBlbHNlIDBcblxuXHRcdGlmIGlzX2NvbXBsZXRlZCAmJiBpbnN0YW5jZS5maW5pc2hfZGF0ZVxuXHRcdFx0Y29tcGxldGVkX2RhdGUgPSBpbnN0YW5jZS5maW5pc2hfZGF0ZT8uZ2V0VGltZSgpXG5cblx0XHR0cmFjZXMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRyYWNlcygpXG5cblx0XHRhcHByb3ZlcyA9IF8uY2xvbmUodHJhY2VzW3N0ZXBOYW1lXSlcblxuXHRcdGFwcHJvdmVfc29ydCA9IChhcHByb3ZlcywgdG9wX2tleXdvcmRzKS0+XG5cbiPlr7lBcHByb3Zlc+aOkuW6j++8jCDmjInnhafmj5DkuqTml7bpl7TmjpLlgJLluo/vvIzlpoLmnpzmsqHmnInmj5DkuqTliJnmmL7npLrlnKjmnIDkuIrovrlcblx0XHRcdGFwcHJvdmVzX3NvcnRlZCA9IF8uc29ydEJ5IGFwcHJvdmVzLCAoYXBwcm92ZSktPlxuXHRcdFx0XHRyZXR1cm4gLShhcHByb3ZlLmZpbmlzaF9kYXRlIHx8IG5ldyBEYXRlKCkpLmdldFRpbWUoKVxuXG5cdFx0XHQj6YCa6L+H5YWz6ZSu5a2X5o6S5bqPXG5cdFx0XHRpZiB0b3Bfa2V5d29yZHNcblx0XHRcdFx0dG9wX2FwcHJvdmVzID0gbmV3IEFycmF5KClcblxuXHRcdFx0XHR0b3Bfa2V5d29yZHMuc3BsaXQoXCIsXCIpLmZvckVhY2ggKGtleSkgLT5cblx0XHRcdFx0XHR0b3BfYXBwcm92ZXMgPSBfLnVuaW9uIHRvcF9hcHByb3ZlcywgXy5maWx0ZXIoYXBwcm92ZXNfc29ydGVkLCAoYXBwcm92ZSktPlxuXHRcdFx0XHRcdFx0cmV0dXJuIGFwcHJvdmU/LmhhbmRsZXJfbmFtZT8uaW5kZXhPZihrZXkpID4gLTFcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCMg5a+5572u6aG25oSP6KeB5oyJ54Wn5aSE55CG5LqL5Lu25o6S5YCS5bqPXG5cdFx0XHRcdHRvcF9hcHByb3ZlcyA9IF8uc29ydEJ5IHRvcF9hcHByb3ZlcywgKHRvcF9hcHByb3ZlKS0+XG5cdFx0XHRcdFx0cmV0dXJuIC0odG9wX2FwcHJvdmUuZmluaXNoX2RhdGUgfHwgbmV3IERhdGUoKSkuZ2V0VGltZSgpXG5cblx0XHRcdFx0YXBwcm92ZXNfc29ydGVkID0gXy51bmlvbiB0b3BfYXBwcm92ZXMsIGFwcHJvdmVzX3NvcnRlZFxuXHRcdFx0cmV0dXJuIGFwcHJvdmVzX3NvcnRlZCB8fCBbXVxuXG5cdFx0YXBwcm92ZXMgPSBfLmZpbHRlciBhcHByb3ZlcywgKGEpLT5cblx0XHRcdHJldHVybiBhLnR5cGUgaXNudCBcImZvcndhcmRcIiBhbmQgYS50eXBlIGlzbnQgXCJkaXN0cmlidXRlXCIgYW5kIGEudHlwZSBpc250IFwidGVybWluYXRlZFwiXG5cblx0XHRpZiBvbmx5X2NjX29waW5pb25cblx0XHRcdGFwcHJvdmVzID0gYXBwcm92ZXM/LmZpbHRlclByb3BlcnR5KFwidHlwZVwiLCBcImNjXCIpXG5cblx0XHRhcHByb3Zlc19zb3J0ZWQgPSBhcHByb3ZlX3NvcnQoYXBwcm92ZXMsIHRvcF9rZXl3b3JkcylcblxuXHRcdGFwcHJvdmVzR3JvdXAgPSBfLmdyb3VwQnkoYXBwcm92ZXMsIFwiaGFuZGxlclwiKTtcblxuXHRcdGhhc05leHQgPSAoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkgLT5cblx0XHRcdGhhbmRsZXJBcHByb3ZlcyA9IGFwcHJvdmVzR3JvdXBbYXBwcm92ZS5oYW5kbGVyXVxuXHRcdFx0cmV0dXJuIF8uaW5kZXhPZihoYW5kbGVyQXBwcm92ZXMsIGFwcHJvdmUpICsgMSA8IGhhbmRsZXJBcHByb3Zlcy5sZW5ndGhcblxuXHRcdGhhdmVEZXNjcmlwdGlvbkFwcHJvdmUgPSAoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkgLT5cblx0XHRcdGhhbmRsZXJBcHByb3ZlcyA9IGFwcHJvdmVzR3JvdXBbYXBwcm92ZS5oYW5kbGVyXVxuXG5cdFx0XHRkZXNjcmlwdGlvbkFwcHJvdmVzID0gXy5maWx0ZXIgaGFuZGxlckFwcHJvdmVzLCAoYSktPlxuXHRcdFx0XHRpZiBhLmRlc2NyaXB0aW9uXG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRcdGlmIGRlc2NyaXB0aW9uQXBwcm92ZXMubGVuZ3RoID09IDBcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRcdHJldHVybiB0cnVlXG5cblxuXHRcdGFwcHJvdmVzX3NvcnRlZC5mb3JFYWNoIChhcHByb3ZlKSAtPlxuI1x0XHRcdOaciei+k+WFpeaEj+ingSDmiJYg5pyA5paw5LiA5p2h5bm25LiU55So5oi35rKh5pyJ6L6T5YWl6L+H5oSP6KeBXG4jXHRcdFx0aWYgIWFwcHJvdmUuaXNfZmluaXNoZWQgfHwgYXBwcm92ZS5kZXNjcmlwdGlvbiB8fCAoIWhhc05leHQoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkgJiYgIWhhdmVEZXNjcmlwdGlvbkFwcHJvdmUoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkpXG4jXHRcdFx0aWYgIWhhc05leHQoYXBwcm92ZSwgYXBwcm92ZXNHcm91cClcblx0XHRcdGlmIGFwcHJvdmUuc2lnbl9zaG93ICE9IGZhbHNlICYmIChhcHByb3ZlLmRlc2NyaXB0aW9uIHx8ICghYXBwcm92ZS5kZXNjcmlwdGlvbiAmJiAhaGFzTmV4dChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSAmJiAhYXBwcm92ZS5pc19maW5pc2hlZCkgfHwgTWV0ZW9yLnNldHRpbmdzLnB1YmxpYy53b3JrZmxvdz8uc2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uKVxuXHRcdFx0XHRpZiBhcHByb3ZlLmp1ZGdlIGlzbnQgJ3Rlcm1pbmF0ZWQnXG5cdFx0XHRcdFx0YXBwcm92ZS5fZGlzcGxheSA9IHRydWVcblxuXHRcdGFwcHJvdmVzX3NvcnRlZCA9IF8uZmlsdGVyIGFwcHJvdmVzX3NvcnRlZCwgKGEpIC0+XG5cdFx0XHRpZiBpc19jb21wbGV0ZWRcblx0XHRcdFx0cmV0dXJuIGEuX2Rpc3BsYXkgPT0gdHJ1ZSAmJiBhLmlzX2ZpbmlzaGVkICYmIGEuZmluaXNoX2RhdGU/LmdldFRpbWUoKSA8PSBjb21wbGV0ZWRfZGF0ZVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gYS5fZGlzcGxheSA9PSB0cnVlXG5cdFx0cmV0dXJuIGFwcHJvdmVzX3NvcnRlZFxuXG5cdGluY2x1ZGU6IChhLCBiKSAtPlxuXHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluY2x1ZGUoYSwgYilcblxuXHR1bmVtcHR5OiAodmFsKS0+XG5cdFx0cmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudW5lbXB0eSh2YWwpIHx8IE1ldGVvci5zZXR0aW5ncy5wdWJsaWMud29ya2Zsb3c/LnNob3dCbGFua0FwcHJvdmVEZXNjcmlwdGlvblxuXG5cdGZvcm1hdERhdGU6IChkYXRlLCBvcHRpb25zKS0+XG5cdFx0aWYgIW9wdGlvbnNcblx0XHRcdG9wdGlvbnMgPSB7XCJmb3JtYXRcIjogXCJZWVlZLU1NLUREXCJ9XG5cblx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5mb3JtYXREYXRlKGRhdGUsIG9wdGlvbnMpXG5cblx0aXNNeUFwcHJvdmU6IChhcHByb3ZlLCBvbmx5X2NjX29waW5pb24pIC0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSAhPSAnaW5ib3gnXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXG5cdFx0XHRjdXJyZW50QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpXG5cblx0XHRcdGlmICFhcHByb3ZlPy5faWRcblx0XHRcdFx0YXBwcm92ZSA9IGN1cnJlbnRBcHByb3ZlXG5cblx0XHRcdGlmIGFwcHJvdmUuX2lkID09IGN1cnJlbnRBcHByb3ZlPy5faWQgJiYgY3VycmVudEFwcHJvdmU/LnR5cGUgPT0gJ2NjJyAmJiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZVxuXHRcdFx0XHRpZiBfLmluZGV4T2YoY3VycmVudEFwcHJvdmU/Lm9waW5pb25fZmllbGRzX2NvZGUsIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5uYW1lKSA+IC0xXG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0XHRpZiAhKGN1cnJlbnRBcHByb3ZlPy50eXBlID09ICdjYycpICYmIG9ubHlfY2Nfb3BpbmlvblxuXHRcdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdFx0aWYgY3VycmVudEFwcHJvdmUgJiYgYXBwcm92ZS5faWQgPT0gY3VycmVudEFwcHJvdmUuX2lkXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0bXlBcHByb3ZlRGVzY3JpcHRpb246IChhcHByb3ZlSWQpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0bXlBcHByb3ZlID0gVGVtcGxhdGUuaW5zdGFuY2UoKT8ubXlBcHByb3ZlPy5nZXQoKVxuXHRcdFx0XHRpZiBteUFwcHJvdmUgJiYgbXlBcHByb3ZlLmlkID09IGFwcHJvdmVJZFxuXHRcdFx0XHRcdGlmICFteUFwcHJvdmUuc2lnbl9maWVsZF9jb2RlIHx8IG15QXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgPT0gVGVtcGxhdGUuaW5zdGFuY2UoKT8uZGF0YT8ubmFtZVxuXHRcdFx0XHRcdFx0aWYgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VfbXlfYXBwcm92ZV9kZXNjcmlwdGlvblwiKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbXlBcHByb3ZlPy5kZXNjcmlwdGlvbiB8fCBcIlwiXG5cdFx0XHRcdFx0XHRyZXR1cm4gU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpXG5cblx0bm93OiAoKS0+XG5cdFx0cmV0dXJuIG5ldyBEYXRlKCk7XG5cblx0aXNSZWFkT25seTogKCktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0cmV0dXJuIEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdGlzT3Bpbmlvbk9mRmllbGQ6IChhcHByb3ZlKS0+XG5cdFx0aWYgYXBwcm92ZS50eXBlID09IFwiY2NcIiAmJiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZVxuXHRcdFx0aWYgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUgPT0gYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGVcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0bWFya0Rvd25Ub0h0bWw6IChtYXJrRG93blN0cmluZyktPlxuXHRcdGlmIG1hcmtEb3duU3RyaW5nXG5cdFx0XHQjIHJlbmRlcmVyID0gbmV3IE1hcmtkb3duLlJlbmRlcmVyKCk7XG5cdFx0XHQjIHJlbmRlcmVyLmxpbmsgPSAoaHJlZiwgdGl0bGUsIHRleHQpIC0+XG5cdFx0XHQjIFx0cmV0dXJuIFwiPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9JyN7aHJlZn0nIHRpdGxlPScje3RpdGxlfSc+I3t0ZXh0fTwvYT5cIlxuXHRcdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdG1hcmtlZCA9IE5wbS5yZXF1aXJlKCdtYXJrZWQnKVxuXHRcdFx0cmV0dXJuIFNwYWNlYmFycy5TYWZlU3RyaW5nKG1hcmtlZC5wYXJzZShtYXJrRG93blN0cmluZykpXG5cblx0c3RlcHM6IChmaWVsZF9mb3JtdWxhLCBzdGVwLCBvbmx5X2NjX29waW5pb24sIGltYWdlX3NpZ24pLT5cblx0XHRzdGVwcyA9IFtdXG5cdFx0aWYgIXN0ZXBcblx0XHRcdGlmICFmaWVsZF9mb3JtdWxhXG5cdFx0XHRcdGZpZWxkX2Zvcm11bGEgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpPy5maWVsZHM/LmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIHRoaXMubmFtZSkuZm9ybXVsYVxuXHRcdFx0c3RlcHMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmdldE9waW5pb25GaWVsZFN0ZXBzTmFtZShmaWVsZF9mb3JtdWxhLCBUZW1wbGF0ZS5pbnN0YW5jZSgpPy5kYXRhLnRvcF9rZXl3b3Jkcylcblx0XHRlbHNlXG5cdFx0XHRzdGVwcyA9IFt7c3RlcE5hbWU6IHN0ZXAsIG9ubHlfY2Nfb3Bpbmlvbjogb25seV9jY19vcGluaW9uLCBpbWFnZV9zaWduOiBpbWFnZV9zaWdufV1cblx0XHRyZXR1cm4gc3RlcHNcblxuXHRpbWFnZVNpZ25EYXRhOiAoaGFuZGxlcikgLT5cblx0XHRyZXR1cm4ge3VzZXI6IGhhbmRsZXJ9XG5cblx0c2hvd1NpZ25JbWFnZTogKGhhbmRsZXIsIGltYWdlX3NpZ24sIGp1ZGdlKSAtPlxuXHRcdGlmIFsncmV0dXJuZWQnLCAndGVybWluYXRlZCcsICdyZXRyaWV2ZWQnXS5pbmNsdWRlcyhqdWRnZSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdHNwYWNlVXNlclNpZ24gPSBJbWFnZVNpZ24uaGVscGVycy5zcGFjZVVzZXJTaWduKGhhbmRsZXIpXG5cblx0XHRpZiBzcGFjZVVzZXJTaWduPy5zaWduICYmIGltYWdlX3NpZ25cblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0Z2V0TGFzdFNpZ25BcHByb3ZlOiAoKS0+XG5cdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cblx0XHRyZXR1cm4gXy5sYXN0KFRyYWNlc01hbmFnZXIuZ2V0SGFuZGxlclNpZ25TaG93QXBwcm92ZXMgaW5zLCBNZXRlb3IudXNlcklkKCkpXG5cblxuXHRsYXN0TXlBcHByb3ZlRGVzY3JpcHRpb246ICgpLT5cblx0XHR0cmFjZXMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRyYWNlcygpXG5cdFx0Y3VycmVudFN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcblx0XHRhcHByb3ZlcyA9IF8uY2xvbmUodHJhY2VzW2N1cnJlbnRTdGVwLm5hbWVdKVxuXG5cdFx0YXBwcm92ZXMgPSBhcHByb3Zlcy5maWx0ZXJQcm9wZXJ0eShcImhhbmRsZXJcIiwgTWV0ZW9yLnVzZXJJZCgpKVxuXG5cdFx0aWYgYXBwcm92ZXMubGVuZ3RoID4gMVxuXHRcdFx0cmV0dXJuIGFwcHJvdmVzW2FwcHJvdmVzLmxlbmd0aCAtIDJdPy5kZXNjcmlwdGlvblxuXG5cdFx0cmV0dXJuIFwiXCI7XG5cblx0c2hvd0FwcHJvdmU6IChhcHByb3ZlKS0+XG5cdFx0aWYgIWFwcHJvdmUuc2lnbl9maWVsZF9jb2RlIHx8IGFwcHJvdmUuc2lnbl9maWVsZF9jb2RlID09IFRlbXBsYXRlLmluc3RhbmNlKCk/LmRhdGE/Lm5hbWVcblx0XHRcdGlmIGFwcHJvdmU/LmlzX3JlYWRcblx0XHRcdFx0aWYgYXBwcm92ZS5pc19maW5pc2hlZFxuXHRcdFx0XHRcdHJldHVybiBbXCJhcHByb3ZlZFwiLCBcInJlamVjdGVkXCIsIFwic3VibWl0dGVkXCIsIFwicmVhZGVkXCJdLmluY2x1ZGVzKGFwcHJvdmUuanVkZ2UpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGp1ZGdlX2Rlc2NyaXB0aW9uOiAoanVkZ2UpLT5cblx0XHRyZXR1cm4gdChqdWRnZSArIFwiX2Rlc2NyaXB0aW9uXCIpXG5cblx0aXNfYXBwcm92ZWQ6IChqdWRnZSktPlxuXHRcdHJldHVybiBcImFwcHJvdmVkXCIgPT0ganVkZ2VcblxuXHRpc19yZWplY3RlZDogKGp1ZGdlKS0+XG5cdFx0cmV0dXJuIFwicmVqZWN0ZWRcIiA9PSBqdWRnZVxuXG5cdGlzX3JlYWRlZDogKGp1ZGdlKS0+XG5cdFx0cmV0dXJuIFtcImFwcHJvdmVkXCIsIFwicmVqZWN0ZWRcIiwgXCJzdWJtaXR0ZWRcIiwgXCJyZWFkZWRcIl0uaW5jbHVkZXMoanVkZ2UpXG5cblx0YWRkQ2xhc3M6ICgpLT5cblx0XHRuYW1lID0gVGVtcGxhdGUuaW5zdGFuY2UoKT8uZGF0YT8ubmFtZVxuXHRcdHNldFRpbWVvdXQgKCkgLT5cblx0XHRcdHRyeVxuXHRcdFx0XHRlbGVtZW50ID0gJChcIi5hdXRvbWF0aWMub3Bpbmlvbi1maWVsZC1cIiArIG5hbWUpXG5cdFx0XHRcdGlmIGVsZW1lbnQubGVuZ3RoID4gMFxuXHRcdFx0XHRcdGlmIGVsZW1lbnQ/LmlzKFwidGRcIilcblx0XHRcdFx0XHRcdGVsZW1lbnQuYWRkQ2xhc3MoJ2ZpZWxkLWVkaXRhYmxlJylcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHQkKFwiLmluc3RhbmNlLXNpZ25cIiwgZWxlbWVudCkuYWRkQ2xhc3MoJ2ZpZWxkLWVkaXRhYmxlJylcblx0XHRcdGNhdGNoIGVcblx0XHRcdFx0Y29uc29sZS5sb2cgZVxuXHRcdCwgMVxuXHRcdHJldHVybiAnJ1xuXG5pZiBNZXRlb3IuaXNTZXJ2ZXJcblx0SW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzLmRlZmF1bHREZXNjcmlwdGlvbiA9IC0+XG5cdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEuZGVmYXVsdF9kZXNjcmlwdGlvbiB8fCBUQVBpMThuLl9fKFwiaW5zdGFuY2VfZGVmYXVsdF9vcGluaW9uXCIsIHt9LCBsb2NhbGUpIiwidmFyIG1hcmtlZDtcblxubWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKTtcblxuSW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzID0ge1xuICBzaG93OiBmdW5jdGlvbihzdGVwTmFtZSkge1xuICAgIHZhciBpbnN0YW5jZSwgbXlBcHByb3ZlLCBteVRyYWNlLCByZWY7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KCdpbnN0YW5jZVByaW50JykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKEluc3RhbmNlTWFuYWdlci5pc0luYm94KCkpIHtcbiAgICAgICAgbXlBcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKCk7XG4gICAgICAgIGlmIChteUFwcHJvdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICAgIG15VHJhY2UgPSBpbnN0YW5jZSAhPSBudWxsID8gKHJlZiA9IGluc3RhbmNlLnRyYWNlcykgIT0gbnVsbCA/IHJlZi5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIG15QXBwcm92ZS50cmFjZSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIChteVRyYWNlICE9IG51bGwgPyBteVRyYWNlLm5hbWUgOiB2b2lkIDApID09PSBzdGVwTmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGRlZmF1bHREZXNjcmlwdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5kZWZhdWx0X2Rlc2NyaXB0aW9uO1xuICB9LFxuICB0cmFjZXM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRyYWNlcygpO1xuICB9LFxuICB0cmFjZTogZnVuY3Rpb24oc3RlcE5hbWUsIG9ubHlfY2Nfb3BpbmlvbiwgaW1hZ2Vfc2lnbiwgdG9wX2tleXdvcmRzKSB7XG4gICAgdmFyIGFwcHJvdmVfc29ydCwgYXBwcm92ZXMsIGFwcHJvdmVzR3JvdXAsIGFwcHJvdmVzX3NvcnRlZCwgY29tcGxldGVkX2RhdGUsIGhhc05leHQsIGhhdmVEZXNjcmlwdGlvbkFwcHJvdmUsIGluc3RhbmNlLCBpc19jb21wbGV0ZWQsIHJlZiwgcmVmMSwgcmVmMiwgdHJhY2VzO1xuICAgIGluc3RhbmNlID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbnN0YW5jZSgpO1xuICAgIGlzX2NvbXBsZXRlZCA9IChpbnN0YW5jZSAhPSBudWxsID8gaW5zdGFuY2Uuc3RhdGUgOiB2b2lkIDApID09PSBcImNvbXBsZXRlZFwiO1xuICAgIGNvbXBsZXRlZF9kYXRlID0gaXNfY29tcGxldGVkID8gKHJlZiA9IF8ubGFzdChpbnN0YW5jZS50cmFjZXMpKSAhPSBudWxsID8gKHJlZjEgPSByZWYuZmluaXNoX2RhdGUpICE9IG51bGwgPyByZWYxLmdldFRpbWUoKSA6IHZvaWQgMCA6IHZvaWQgMCA6IDA7XG4gICAgaWYgKGlzX2NvbXBsZXRlZCAmJiBpbnN0YW5jZS5maW5pc2hfZGF0ZSkge1xuICAgICAgY29tcGxldGVkX2RhdGUgPSAocmVmMiA9IGluc3RhbmNlLmZpbmlzaF9kYXRlKSAhPSBudWxsID8gcmVmMi5nZXRUaW1lKCkgOiB2b2lkIDA7XG4gICAgfVxuICAgIHRyYWNlcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKCk7XG4gICAgYXBwcm92ZXMgPSBfLmNsb25lKHRyYWNlc1tzdGVwTmFtZV0pO1xuICAgIGFwcHJvdmVfc29ydCA9IGZ1bmN0aW9uKGFwcHJvdmVzLCB0b3Bfa2V5d29yZHMpIHtcbiAgICAgIHZhciBhcHByb3Zlc19zb3J0ZWQsIHRvcF9hcHByb3ZlcztcbiAgICAgIGFwcHJvdmVzX3NvcnRlZCA9IF8uc29ydEJ5KGFwcHJvdmVzLCBmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgICAgIHJldHVybiAtKGFwcHJvdmUuZmluaXNoX2RhdGUgfHwgbmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAodG9wX2tleXdvcmRzKSB7XG4gICAgICAgIHRvcF9hcHByb3ZlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0b3Bfa2V5d29yZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHRvcF9hcHByb3ZlcyA9IF8udW5pb24odG9wX2FwcHJvdmVzLCBfLmZpbHRlcihhcHByb3Zlc19zb3J0ZWQsIGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICAgIHZhciByZWYzO1xuICAgICAgICAgICAgcmV0dXJuIChhcHByb3ZlICE9IG51bGwgPyAocmVmMyA9IGFwcHJvdmUuaGFuZGxlcl9uYW1lKSAhPSBudWxsID8gcmVmMy5pbmRleE9mKGtleSkgOiB2b2lkIDAgOiB2b2lkIDApID4gLTE7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdG9wX2FwcHJvdmVzID0gXy5zb3J0QnkodG9wX2FwcHJvdmVzLCBmdW5jdGlvbih0b3BfYXBwcm92ZSkge1xuICAgICAgICAgIHJldHVybiAtKHRvcF9hcHByb3ZlLmZpbmlzaF9kYXRlIHx8IG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcHJvdmVzX3NvcnRlZCA9IF8udW5pb24odG9wX2FwcHJvdmVzLCBhcHByb3Zlc19zb3J0ZWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwcHJvdmVzX3NvcnRlZCB8fCBbXTtcbiAgICB9O1xuICAgIGFwcHJvdmVzID0gXy5maWx0ZXIoYXBwcm92ZXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBhLnR5cGUgIT09IFwiZm9yd2FyZFwiICYmIGEudHlwZSAhPT0gXCJkaXN0cmlidXRlXCIgJiYgYS50eXBlICE9PSBcInRlcm1pbmF0ZWRcIjtcbiAgICB9KTtcbiAgICBpZiAob25seV9jY19vcGluaW9uKSB7XG4gICAgICBhcHByb3ZlcyA9IGFwcHJvdmVzICE9IG51bGwgPyBhcHByb3Zlcy5maWx0ZXJQcm9wZXJ0eShcInR5cGVcIiwgXCJjY1wiKSA6IHZvaWQgMDtcbiAgICB9XG4gICAgYXBwcm92ZXNfc29ydGVkID0gYXBwcm92ZV9zb3J0KGFwcHJvdmVzLCB0b3Bfa2V5d29yZHMpO1xuICAgIGFwcHJvdmVzR3JvdXAgPSBfLmdyb3VwQnkoYXBwcm92ZXMsIFwiaGFuZGxlclwiKTtcbiAgICBoYXNOZXh0ID0gZnVuY3Rpb24oYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkge1xuICAgICAgdmFyIGhhbmRsZXJBcHByb3ZlcztcbiAgICAgIGhhbmRsZXJBcHByb3ZlcyA9IGFwcHJvdmVzR3JvdXBbYXBwcm92ZS5oYW5kbGVyXTtcbiAgICAgIHJldHVybiBfLmluZGV4T2YoaGFuZGxlckFwcHJvdmVzLCBhcHByb3ZlKSArIDEgPCBoYW5kbGVyQXBwcm92ZXMubGVuZ3RoO1xuICAgIH07XG4gICAgaGF2ZURlc2NyaXB0aW9uQXBwcm92ZSA9IGZ1bmN0aW9uKGFwcHJvdmUsIGFwcHJvdmVzR3JvdXApIHtcbiAgICAgIHZhciBkZXNjcmlwdGlvbkFwcHJvdmVzLCBoYW5kbGVyQXBwcm92ZXM7XG4gICAgICBoYW5kbGVyQXBwcm92ZXMgPSBhcHByb3Zlc0dyb3VwW2FwcHJvdmUuaGFuZGxlcl07XG4gICAgICBkZXNjcmlwdGlvbkFwcHJvdmVzID0gXy5maWx0ZXIoaGFuZGxlckFwcHJvdmVzLCBmdW5jdGlvbihhKSB7XG4gICAgICAgIGlmIChhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgICBpZiAoZGVzY3JpcHRpb25BcHByb3Zlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBhcHByb3Zlc19zb3J0ZWQuZm9yRWFjaChmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgICB2YXIgcmVmMztcbiAgICAgIGlmIChhcHByb3ZlLnNpZ25fc2hvdyAhPT0gZmFsc2UgJiYgKGFwcHJvdmUuZGVzY3JpcHRpb24gfHwgKCFhcHByb3ZlLmRlc2NyaXB0aW9uICYmICFoYXNOZXh0KGFwcHJvdmUsIGFwcHJvdmVzR3JvdXApICYmICFhcHByb3ZlLmlzX2ZpbmlzaGVkKSB8fCAoKHJlZjMgPSBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0ud29ya2Zsb3cpICE9IG51bGwgPyByZWYzLnNob3dCbGFua0FwcHJvdmVEZXNjcmlwdGlvbiA6IHZvaWQgMCkpKSB7XG4gICAgICAgIGlmIChhcHByb3ZlLmp1ZGdlICE9PSAndGVybWluYXRlZCcpIHtcbiAgICAgICAgICByZXR1cm4gYXBwcm92ZS5fZGlzcGxheSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhcHByb3Zlc19zb3J0ZWQgPSBfLmZpbHRlcihhcHByb3Zlc19zb3J0ZWQsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHZhciByZWYzO1xuICAgICAgaWYgKGlzX2NvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm4gYS5fZGlzcGxheSA9PT0gdHJ1ZSAmJiBhLmlzX2ZpbmlzaGVkICYmICgocmVmMyA9IGEuZmluaXNoX2RhdGUpICE9IG51bGwgPyByZWYzLmdldFRpbWUoKSA6IHZvaWQgMCkgPD0gY29tcGxldGVkX2RhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYS5fZGlzcGxheSA9PT0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYXBwcm92ZXNfc29ydGVkO1xuICB9LFxuICBpbmNsdWRlOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5jbHVkZShhLCBiKTtcbiAgfSxcbiAgdW5lbXB0eTogZnVuY3Rpb24odmFsKSB7XG4gICAgdmFyIHJlZjtcbiAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy51bmVtcHR5KHZhbCkgfHwgKChyZWYgPSBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0ud29ya2Zsb3cpICE9IG51bGwgPyByZWYuc2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uIDogdm9pZCAwKTtcbiAgfSxcbiAgZm9ybWF0RGF0ZTogZnVuY3Rpb24oZGF0ZSwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgXCJmb3JtYXRcIjogXCJZWVlZLU1NLUREXCJcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmZvcm1hdERhdGUoZGF0ZSwgb3B0aW9ucyk7XG4gIH0sXG4gIGlzTXlBcHByb3ZlOiBmdW5jdGlvbihhcHByb3ZlLCBvbmx5X2NjX29waW5pb24pIHtcbiAgICB2YXIgY3VycmVudEFwcHJvdmUsIGlucztcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgIT09ICdpbmJveCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBjdXJyZW50QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpO1xuICAgICAgaWYgKCEoYXBwcm92ZSAhPSBudWxsID8gYXBwcm92ZS5faWQgOiB2b2lkIDApKSB7XG4gICAgICAgIGFwcHJvdmUgPSBjdXJyZW50QXBwcm92ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcHByb3ZlLl9pZCA9PT0gKGN1cnJlbnRBcHByb3ZlICE9IG51bGwgPyBjdXJyZW50QXBwcm92ZS5faWQgOiB2b2lkIDApICYmIChjdXJyZW50QXBwcm92ZSAhPSBudWxsID8gY3VycmVudEFwcHJvdmUudHlwZSA6IHZvaWQgMCkgPT09ICdjYycgJiYgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUpIHtcbiAgICAgICAgaWYgKF8uaW5kZXhPZihjdXJyZW50QXBwcm92ZSAhPSBudWxsID8gY3VycmVudEFwcHJvdmUub3Bpbmlvbl9maWVsZHNfY29kZSA6IHZvaWQgMCwgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghKChjdXJyZW50QXBwcm92ZSAhPSBudWxsID8gY3VycmVudEFwcHJvdmUudHlwZSA6IHZvaWQgMCkgPT09ICdjYycpICYmIG9ubHlfY2Nfb3Bpbmlvbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEFwcHJvdmUgJiYgYXBwcm92ZS5faWQgPT09IGN1cnJlbnRBcHByb3ZlLl9pZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBteUFwcHJvdmVEZXNjcmlwdGlvbjogZnVuY3Rpb24oYXBwcm92ZUlkKSB7XG4gICAgdmFyIG15QXBwcm92ZSwgcmVmLCByZWYxLCByZWYyLCByZWYzO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICBteUFwcHJvdmUgPSAocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLm15QXBwcm92ZSkgIT0gbnVsbCA/IHJlZjEuZ2V0KCkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICAgIGlmIChteUFwcHJvdmUgJiYgbXlBcHByb3ZlLmlkID09PSBhcHByb3ZlSWQpIHtcbiAgICAgICAgICBpZiAoIW15QXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgfHwgbXlBcHByb3ZlLnNpZ25fZmllbGRfY29kZSA9PT0gKChyZWYyID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYzID0gcmVmMi5kYXRhKSAhPSBudWxsID8gcmVmMy5uYW1lIDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgICAgICAgaWYgKCFTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChteUFwcHJvdmUgIT0gbnVsbCA/IG15QXBwcm92ZS5kZXNjcmlwdGlvbiA6IHZvaWQgMCkgfHwgXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICB9LFxuICBpc1JlYWRPbmx5OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICByZXR1cm4gQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzT3Bpbmlvbk9mRmllbGQ6IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICBpZiAoYXBwcm92ZS50eXBlID09PSBcImNjXCIgJiYgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUpIHtcbiAgICAgIGlmIChUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSA9PT0gYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSxcbiAgbWFya0Rvd25Ub0h0bWw6IGZ1bmN0aW9uKG1hcmtEb3duU3RyaW5nKSB7XG4gICAgaWYgKG1hcmtEb3duU3RyaW5nKSB7XG4gICAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgIG1hcmtlZCA9IE5wbS5yZXF1aXJlKCdtYXJrZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UobWFya0Rvd25TdHJpbmcpKTtcbiAgICB9XG4gIH0sXG4gIHN0ZXBzOiBmdW5jdGlvbihmaWVsZF9mb3JtdWxhLCBzdGVwLCBvbmx5X2NjX29waW5pb24sIGltYWdlX3NpZ24pIHtcbiAgICB2YXIgcmVmLCByZWYxLCByZWYyLCBzdGVwcztcbiAgICBzdGVwcyA9IFtdO1xuICAgIGlmICghc3RlcCkge1xuICAgICAgaWYgKCFmaWVsZF9mb3JtdWxhKSB7XG4gICAgICAgIGZpZWxkX2Zvcm11bGEgPSAocmVmID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLmZpZWxkcykgIT0gbnVsbCA/IHJlZjEuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgdGhpcy5uYW1lKS5mb3JtdWxhIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgc3RlcHMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmdldE9waW5pb25GaWVsZFN0ZXBzTmFtZShmaWVsZF9mb3JtdWxhLCAocmVmMiA9IFRlbXBsYXRlLmluc3RhbmNlKCkpICE9IG51bGwgPyByZWYyLmRhdGEudG9wX2tleXdvcmRzIDogdm9pZCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RlcHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGVwTmFtZTogc3RlcCxcbiAgICAgICAgICBvbmx5X2NjX29waW5pb246IG9ubHlfY2Nfb3BpbmlvbixcbiAgICAgICAgICBpbWFnZV9zaWduOiBpbWFnZV9zaWduXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBzdGVwcztcbiAgfSxcbiAgaW1hZ2VTaWduRGF0YTogZnVuY3Rpb24oaGFuZGxlcikge1xuICAgIHJldHVybiB7XG4gICAgICB1c2VyOiBoYW5kbGVyXG4gICAgfTtcbiAgfSxcbiAgc2hvd1NpZ25JbWFnZTogZnVuY3Rpb24oaGFuZGxlciwgaW1hZ2Vfc2lnbiwganVkZ2UpIHtcbiAgICB2YXIgc3BhY2VVc2VyU2lnbjtcbiAgICBpZiAoWydyZXR1cm5lZCcsICd0ZXJtaW5hdGVkJywgJ3JldHJpZXZlZCddLmluY2x1ZGVzKGp1ZGdlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzcGFjZVVzZXJTaWduID0gSW1hZ2VTaWduLmhlbHBlcnMuc3BhY2VVc2VyU2lnbihoYW5kbGVyKTtcbiAgICBpZiAoKHNwYWNlVXNlclNpZ24gIT0gbnVsbCA/IHNwYWNlVXNlclNpZ24uc2lnbiA6IHZvaWQgMCkgJiYgaW1hZ2Vfc2lnbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGdldExhc3RTaWduQXBwcm92ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlucztcbiAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICByZXR1cm4gXy5sYXN0KFRyYWNlc01hbmFnZXIuZ2V0SGFuZGxlclNpZ25TaG93QXBwcm92ZXMoaW5zLCBNZXRlb3IudXNlcklkKCkpKTtcbiAgfSxcbiAgbGFzdE15QXBwcm92ZURlc2NyaXB0aW9uOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXBwcm92ZXMsIGN1cnJlbnRTdGVwLCByZWYsIHRyYWNlcztcbiAgICB0cmFjZXMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRyYWNlcygpO1xuICAgIGN1cnJlbnRTdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG4gICAgYXBwcm92ZXMgPSBfLmNsb25lKHRyYWNlc1tjdXJyZW50U3RlcC5uYW1lXSk7XG4gICAgYXBwcm92ZXMgPSBhcHByb3Zlcy5maWx0ZXJQcm9wZXJ0eShcImhhbmRsZXJcIiwgTWV0ZW9yLnVzZXJJZCgpKTtcbiAgICBpZiAoYXBwcm92ZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIChyZWYgPSBhcHByb3Zlc1thcHByb3Zlcy5sZW5ndGggLSAyXSkgIT0gbnVsbCA/IHJlZi5kZXNjcmlwdGlvbiA6IHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH0sXG4gIHNob3dBcHByb3ZlOiBmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgdmFyIHJlZiwgcmVmMTtcbiAgICBpZiAoIWFwcHJvdmUuc2lnbl9maWVsZF9jb2RlIHx8IGFwcHJvdmUuc2lnbl9maWVsZF9jb2RlID09PSAoKHJlZiA9IFRlbXBsYXRlLmluc3RhbmNlKCkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5kYXRhKSAhPSBudWxsID8gcmVmMS5uYW1lIDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgaWYgKGFwcHJvdmUgIT0gbnVsbCA/IGFwcHJvdmUuaXNfcmVhZCA6IHZvaWQgMCkge1xuICAgICAgICBpZiAoYXBwcm92ZS5pc19maW5pc2hlZCkge1xuICAgICAgICAgIHJldHVybiBbXCJhcHByb3ZlZFwiLCBcInJlamVjdGVkXCIsIFwic3VibWl0dGVkXCIsIFwicmVhZGVkXCJdLmluY2x1ZGVzKGFwcHJvdmUuanVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAganVkZ2VfZGVzY3JpcHRpb246IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIHQoanVkZ2UgKyBcIl9kZXNjcmlwdGlvblwiKTtcbiAgfSxcbiAgaXNfYXBwcm92ZWQ6IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIFwiYXBwcm92ZWRcIiA9PT0ganVkZ2U7XG4gIH0sXG4gIGlzX3JlamVjdGVkOiBmdW5jdGlvbihqdWRnZSkge1xuICAgIHJldHVybiBcInJlamVjdGVkXCIgPT09IGp1ZGdlO1xuICB9LFxuICBpc19yZWFkZWQ6IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIFtcImFwcHJvdmVkXCIsIFwicmVqZWN0ZWRcIiwgXCJzdWJtaXR0ZWRcIiwgXCJyZWFkZWRcIl0uaW5jbHVkZXMoanVkZ2UpO1xuICB9LFxuICBhZGRDbGFzczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG5hbWUsIHJlZiwgcmVmMTtcbiAgICBuYW1lID0gKHJlZiA9IFRlbXBsYXRlLmluc3RhbmNlKCkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5kYXRhKSAhPSBudWxsID8gcmVmMS5uYW1lIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSwgZWxlbWVudDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVsZW1lbnQgPSAkKFwiLmF1dG9tYXRpYy5vcGluaW9uLWZpZWxkLVwiICsgbmFtZSk7XG4gICAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsID8gZWxlbWVudC5pcyhcInRkXCIpIDogdm9pZCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5hZGRDbGFzcygnZmllbGQtZWRpdGFibGUnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICQoXCIuaW5zdGFuY2Utc2lnblwiLCBlbGVtZW50KS5hZGRDbGFzcygnZmllbGQtZWRpdGFibGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKGUpO1xuICAgICAgfVxuICAgIH0sIDEpO1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICBJbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMuZGVmYXVsdERlc2NyaXB0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxvY2FsZTtcbiAgICBsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlO1xuICAgIHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEuZGVmYXVsdF9kZXNjcmlwdGlvbiB8fCBUQVBpMThuLl9fKFwiaW5zdGFuY2VfZGVmYXVsdF9vcGluaW9uXCIsIHt9LCBsb2NhbGUpO1xuICB9O1xufVxuIiwibWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKVxuVHJhY2VzVGVtcGxhdGUuaGVscGVycyA9XG5cdHRyYWNlU2hvd1NpZ25JbWFnZTogKCktPlxuXHRcdHJldHVybiBNZXRlb3Iuc2V0dGluZ3MucHVibGljLndvcmtmbG93LnRyYWNlU2hvd1NpZ25JbWFnZSAhPSBmYWxzZSAmJiBNZXRlb3Iuc2V0dGluZ3MucHVibGljLndvcmtmbG93LnRyYWNlU2hvd1NpZ25JbWFnZSAhPSAnZmFsc2UnXG5cdGVxdWFsczogKGEsIGIpIC0+XG5cdFx0YSA9PSBiXG5cdGVtcHR5OiAoYSkgLT5cblx0XHRpZiBhXG5cdFx0XHRhLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA8IDFcblx0XHRlbHNlXG5cdFx0XHR0cnVlXG5cdHVuZW1wdHk6IChhKSAtPlxuXHRcdGlmIGFcblx0XHRcdGEudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMFxuXHRcdGVsc2Vcblx0XHRcdGZhbHNlXG5cblx0YXBwZW5kOiAoYSwgYikgLT5cblx0XHRhICsgYlxuXG5cdGRhdGVGb3JtYXQ6IChkYXRlKSAtPlxuXHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpICYmIGRhdGU/LmdldEZ1bGxZZWFyKCkgPT0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpXG5cdFx0XHRcdHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdNTS1ERCBISDptbScpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXG5cdGdldFN0ZXBOYW1lOiAoc3RlcElkKSAtPlxuXHRcdHN0ZXAgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VTdGVwKHN0ZXBJZClcblx0XHRpZiBzdGVwXG5cdFx0XHRyZXR1cm4gc3RlcC5uYW1lXG5cdFx0bnVsbFxuXHRzaG93RGVsZXRlQnV0dG9uOiAoYXBwcm92ZWQpIC0+XG5cdFx0aWYgYXBwcm92ZWQgYW5kIGFwcHJvdmVkLnR5cGUgPT0gJ2NjJyBhbmQgYXBwcm92ZWQuZnJvbV91c2VyID09IE1ldGVvci51c2VySWQoKSBhbmQgYXBwcm92ZWQuaXNfZmluaXNoZWQgIT0gdHJ1ZSBhbmQgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRmYWxzZVxuXHRpc1Nob3dNb2RpZmljYXRpb25CdXR0b246IChhcHByb3ZlZCkgLT5cblx0XHRhcHByb3ZlX2FkbWlucyA9IE1ldGVvci5zZXR0aW5ncz8ucHVibGljPy53b3JrZmxvdz8uYXBwcm92ZV9hZG1pbnNcblx0XHRpZiBhcHByb3ZlX2FkbWlucz8ubGVuZ3RoXG5cdFx0XHRpc1Nob3cgPSBhcHByb3ZlX2FkbWlucz8uY29udGFpbnMgTWV0ZW9yLnVzZXJJZCgpXG5cdFx0dW5sZXNzIGlzU2hvd1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0cmV0dXJuIGFwcHJvdmVkLmhhbmRsZXIgPT0gTWV0ZW9yLnVzZXJJZCgpXG5cdGlzRWRpdGluZzogKCkgLT5cblx0XHQgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuaXNfZWRpdGluZz8uZ2V0KClcblx0aXNTaG93RGVzY3JpcHRpb246IChhcHByb3ZlZCktPlxuXHRcdCMgZGVidWdnZXJcblx0XHRpZiBUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLmlzU2hvd01vZGlmaWNhdGlvbkJ1dHRvbiBhcHByb3ZlZFxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRyZXR1cm4gYXBwcm92ZWQuZGVzY3JpcHRpb24/LnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA+IDBcblx0aXNDQzogKGFwcHJvdmVkKSAtPlxuXHRcdGlmIGFwcHJvdmVkIGFuZCBhcHByb3ZlZC50eXBlID09ICdjYydcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZmFsc2Vcblx0Z2V0QXBwcm92ZVN0YXR1c0ljb246IChhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIC0+XG5cdFx0aWYgYXV0b1N1Ym1pdHRlZCA9PSB0cnVlXG5cdFx0XHRyZXR1cm4gJ2lvbiBpb24tYW5kcm9pZC1hbGFybS1jbG9jaydcblx0XHQj5bey57uT5p2f55qE5pi+56S65Li65qC45YeGL+mps+Wbni/lj5bmtojnlLPor7fvvIzlubbmmL7npLrlpITnkIbnirbmgIHlm77moIdcblx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9IHVuZGVmaW5lZFxuXHRcdHN3aXRjaCBhcHByb3ZlSnVkZ2Vcblx0XHRcdHdoZW4gJ2FwcHJvdmVkJ1xuXHRcdFx0XHQjIOW3suaguOWHhlxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWNoZWNrbWFyay1yb3VuZCdcblx0XHRcdHdoZW4gJ3JlamVjdGVkJ1xuXHRcdFx0XHQjIOW3sumps+WbnlxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWNsb3NlLXJvdW5kJ1xuXHRcdFx0d2hlbiAndGVybWluYXRlZCdcblx0XHRcdFx0IyDlt7Llj5bmtohcblx0XHRcdFx0YXBwcm92ZVN0YXR1c0ljb24gPSAnZmEgZmEtYmFuJ1xuXHRcdFx0d2hlbiAncmVhc3NpZ25lZCdcblx0XHRcdFx0IyDovaznrb7moLhcblx0XHRcdFx0YXBwcm92ZVN0YXR1c0ljb24gPSAnaW9uIGlvbi1hbmRyb2lkLWNvbnRhY3QnXG5cdFx0XHR3aGVuICdyZWxvY2F0ZWQnXG5cdFx0XHRcdCMg6YeN5a6a5L2NXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tYXJyb3ctc2hyaW5rJ1xuXHRcdFx0d2hlbiAncmV0cmlldmVkJ1xuXHRcdFx0XHQjIOW3suWPluWbnlxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdmYSBmYS11bmRvJ1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICcnXG5cdFx0XHRcdGJyZWFrXG5cdFx0YXBwcm92ZVN0YXR1c0ljb25cblx0Z2V0QXBwcm92ZVN0YXR1c1RleHQ6IChhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIC0+XG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0XHRpZiBsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0XHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRcdGVsc2Vcblx0XHRcdGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIilcblx0XHQj5bey57uT5p2f55qE5pi+56S65Li65qC45YeGL+mps+Wbni/lj5bmtojnlLPor7fvvIzlubbmmL7npLrlpITnkIbnirbmgIHlm77moIdcblx0XHRpZiBhdXRvU3VibWl0dGVkID09IHRydWVcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKCdpbnN0YW5jZV9hcHByb3ZlX3RpbWVvdXRfYXV0b19zdWJtaXR0ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gdW5kZWZpbmVkXG5cdFx0c3dpdGNoIGFwcHJvdmVKdWRnZVxuXHRcdFx0d2hlbiAnYXBwcm92ZWQnXG5cdFx0XHRcdCMg5bey5qC45YeGXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgYXBwcm92ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmVqZWN0ZWQnXG5cdFx0XHRcdCMg5bey6amz5ZueXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVqZWN0ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAndGVybWluYXRlZCdcblx0XHRcdFx0IyDlt7Llj5bmtohcblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSB0ZXJtaW5hdGVkJywge30sIGxvY2FsZSlcblx0XHRcdHdoZW4gJ3JlYXNzaWduZWQnXG5cdFx0XHRcdCMg6L2s562+5qC4XG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVhc3NpZ25lZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICdyZWxvY2F0ZWQnXG5cdFx0XHRcdCMg6YeN5a6a5L2NXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVsb2NhdGVkJywge30sIGxvY2FsZSlcblx0XHRcdHdoZW4gJ3JldHJpZXZlZCdcblx0XHRcdFx0IyDlt7Llj5blm55cblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZXRyaWV2ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmV0dXJuZWQnXG5cdFx0XHRcdCMg5bey6YCA5ZueXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmV0dXJuZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmVhZGVkJ1xuXHRcdFx0XHQjIOW3sumYhVxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHJlYWRlZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gJydcblx0XHRcdFx0YnJlYWtcblx0XHRhcHByb3ZlU3RhdHVzVGV4dFxuXHRcblx0Z2V0QXBwcm92ZUp1ZGdlQ2xhc3M6IChhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIC0+XG5cdFx0aWYgYXV0b1N1Ym1pdHRlZCA9PSB0cnVlXG5cdFx0XHRyZXR1cm4gJ2F1dG9TdWJtaXR0ZWQnXG5cdFx0cmV0dXJuIGFwcHJvdmVKdWRnZVxuXG5cdF90OiAoa2V5KS0+XG5cdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5KVxuXG5cdG15QXBwcm92ZURlc2NyaXB0aW9uOiAoYXBwcm92ZUlkKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnXG5cdFx0XHRcdG15QXBwcm92ZSA9IFRlbXBsYXRlLmluc3RhbmNlKCk/Lm15QXBwcm92ZT8uZ2V0KClcblx0XHRcdFx0aWYgbXlBcHByb3ZlICYmIG15QXBwcm92ZS5pZCA9PSBhcHByb3ZlSWRcblx0XHRcdFx0XHRpZiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpXG5cdFx0XHRcdFx0XHRyZXR1cm4gbXlBcHByb3ZlPy5kZXNjcmlwdGlvbiB8fCBcIlwiXG5cdFx0XHRcdFx0cmV0dXJuIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VfbXlfYXBwcm92ZV9kZXNjcmlwdGlvblwiKVxuXHRpc0ZvcndhcmQ6IChhcHByb3ZlZCkgLT5cblx0XHRpZiBhcHByb3ZlZCBhbmQgYXBwcm92ZWQudHlwZSA9PSAnZm9yd2FyZCdcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZmFsc2Vcblx0c2hvd0ZvcndhcmREZWxldGVCdXR0b246IChhcHByb3ZlKSAtPlxuXHRcdGlmIGRiLmluc3RhbmNlcy5maW5kKGFwcHJvdmUuZm9yd2FyZF9pbnN0YW5jZSkuY291bnQoKSBpcyAwXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRpZiBhcHByb3ZlIGFuZCBhcHByb3ZlLnR5cGUgPT0gJ2ZvcndhcmQnIGFuZCBhcHByb3ZlLmZyb21fdXNlciA9PSBNZXRlb3IudXNlcklkKCkgYW5kICFTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgYW5kIGFwcHJvdmUuanVkZ2UgaXNudCAndGVybWluYXRlZCdcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZmFsc2Vcblx0bWFya0Rvd25Ub0h0bWw6IChtYXJrRG93blN0cmluZyktPlxuXHRcdGlmIG1hcmtEb3duU3RyaW5nXG5cdFx0XHQjIHJlbmRlcmVyID0gbmV3IE1hcmtkb3duLlJlbmRlcmVyKCk7XG5cdFx0XHQjIHJlbmRlcmVyLmxpbmsgPSAoIGhyZWYsIHRpdGxlLCB0ZXh0ICkgLT5cblx0XHRcdCMgXHRyZXR1cm4gXCI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nI3tocmVmfScgdGl0bGU9JyN7dGl0bGV9Jz4je3RleHR9PC9hPlwiXG5cdFx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0bWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpXG5cdFx0XHRyZXR1cm4gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKG1hcmtEb3duU3RyaW5nKSlcblx0aXNEaXN0cmlidXRlOiAoYXBwcm92ZSkgLT5cblx0XHRpZiBhcHByb3ZlIGFuZCBhcHByb3ZlLnR5cGUgPT0gJ2Rpc3RyaWJ1dGUnXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdGZhbHNlXG5cdHNob3dEaXN0cmlidXRlRGVsZXRlQnV0dG9uOiAoYXBwcm92ZSkgLT5cblx0XHRpZiBkYi5pbnN0YW5jZXMuZmluZChhcHByb3ZlLmZvcndhcmRfaW5zdGFuY2UpLmNvdW50KCkgaXMgMFxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRpZiBhcHByb3ZlIGFuZCBhcHByb3ZlLnR5cGUgPT0gJ2Rpc3RyaWJ1dGUnIGFuZCAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpIGFuZCBhcHByb3ZlLmp1ZGdlIGlzbnQgJ3Rlcm1pbmF0ZWQnXG5cdFx0XHQjIOa1geeoi+euoeeQhuWRmOWSjOezu+e7n+euoeeQhuWRmO+8jOWPr+S7peaJp+ihjOS7u+S9leaDheWGteS4i+eahOaWh+S7tuWPlua2iOWIhuWPkVxuXHRcdFx0aW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogYXBwcm92ZS5pbnN0YW5jZX0sIHtmaWVsZHM6IHtmbG93OiAxLCBzcGFjZTogMX19KVxuXHRcdFx0aWYgaW5zIGFuZCBpbnMuZmxvdyBhbmQgaW5zLnNwYWNlXG5cdFx0XHRcdGlmIFdvcmtmbG93TWFuYWdlci5oYXNGbG93QWRtaW5QZXJtaXNzaW9uKGlucy5mbG93LCBpbnMuc3BhY2UsIE1ldGVvci51c2VySWQoKSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0XHRpZiBhcHByb3ZlLmZyb21fdXNlciA9PSBNZXRlb3IudXNlcklkKClcblx0XHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdGZhbHNlXG5cblx0ZmluaXNoRGF0ZVNjaGVtYTogKCkgLT5cblx0XHRpZiBTdGVlZG9zLmlzQW5kcm9pZE9ySU9TKClcblx0XHRcdHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0ZmluaXNoX2RhdGU6IHtcblx0XHRcdFx0XHRhdXRvZm9ybToge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJkYXRldGltZS1sb2NhbFwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvcHRpb25hbDogZmFsc2UsXG5cdFx0XHRcdFx0dHlwZTogRGF0ZVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKHtcblx0XHRcdFx0ZmluaXNoX2RhdGU6IHtcblx0XHRcdFx0XHRhdXRvZm9ybToge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJib290c3RyYXAtZGF0ZXRpbWVwaWNrZXJcIlxuXHRcdFx0XHRcdFx0cmVhZG9ubHk6IHRydWVcblx0XHRcdFx0XHRcdGRhdGVUaW1lUGlja2VyT3B0aW9uczp7XG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCIsXG5cdFx0XHRcdFx0XHRcdGlnbm9yZVJlYWRvbmx5OnRydWUsXG5cdFx0XHRcdFx0XHRcdGxvY2FsZTogU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKSxcblx0XHRcdFx0XHRcdFx0d2lkZ2V0UG9zaXRpb25pbmc6e1xuXHRcdFx0XHRcdFx0XHRcdGhvcml6b250YWw6ICdyaWdodCdcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3B0aW9uYWw6IGZhbHNlLFxuXHRcdFx0XHRcdHR5cGU6IERhdGVcblx0XHRcdFx0fVxuXHRcdFx0fSlcblxuXHRmaW5pc2hEYXRlVmFsdWVzOiAoKSAtPlxuXHRcdHJldHVybiB7XG5cdFx0XHRmaW5pc2hfZGF0ZTp0aGlzLmZpbmlzaF9kYXRlXG5cdFx0fTtcblxuXHQjIyNcbiAgICBcdOatpOWHveaVsOeUqOS6juaOp+WItuaYr+WQpuaYvuekunRyYWNlcyB2aWV3XG4gICAgXHR0cnVlOiDmmL7npLp0cmFjZXMgdmlldyznrb7moLjljobnqIvmjInpkq7ngrnlh7vlkI7mmK/nm7TmjqXlrprkvY3liLB0cmFjZXMgdmlld1xuICAgIFx0ZmFsc2U6IOS4jeaYvuekunRyYWNlcyB2aWV377yM562+5qC45Y6G56iL5oyJ6ZKu54K55Ye75ZCOLOS7pU1vZGFsIOaWueW8j+aYvuekunRyYWNlcyB2aWV3XG5cdCMjI1xuXHRzaG93VHJhY2VzVmlldzogKGZvcm0sIGZvcm1fdmVyc2lvbiktPlxuI1x0XHRyZXR1cm4gIShJbnN0YW5jZU1hbmFnZXIuaXNUYWJsZVN0eWxlKGZvcm0pICYmIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5jbHVkZXNPcGluaW9uRmllbGQoZm9ybSwgZm9ybV92ZXJzaW9uKSlcblxuXHRcdHNob3dfbW9kYWxfdHJhY2VzX2xpc3QgPSBkYi5zcGFjZV9zZXR0aW5ncy5maW5kT25lKHtzcGFjZTogU2Vzc2lvbi5nZXQoXCJzcGFjZUlkXCIpLCBrZXk6IFwic2hvd19tb2RhbF90cmFjZXNfbGlzdFwifSk/LnZhbHVlcyB8fCBmYWxzZVxuXG5cdFx0cmV0dXJuICFzaG93X21vZGFsX3RyYWNlc19saXN0XG5cblx0Z2V0SW5zdGFuY2VTdGF0ZVRleHQ6IChpbnN0YW5jZV9pZCktPlxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdFx0aWYgbG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ3poLWNuJ1xuXHRcdFx0XHRsb2NhbGUgPSBcInpoLUNOXCJcblx0XHRlbHNlXG5cdFx0XHRsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpXG5cblx0XHRpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZV9pZH0sIHtmaWVsZHM6IHtzdGF0ZTogMSwgaXNfcmVhZDogMX19KVxuXHRcdGlmIG5vdCBpbnNcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKCdpbnN0YW5jZV9kZWxldGVkJywge30sIGxvY2FsZSlcblxuXHRcdHRleHQgPSAnJ1xuXHRcdGlmIGlucy5zdGF0ZSBpcyAnY29tcGxldGVkJ1xuXHRcdFx0dGV4dCA9IFRBUGkxOG4uX18oJ2NvbXBsZXRlZCcsIHt9LCBsb2NhbGUpXG5cdFx0ZWxzZSBpZiBpbnMuc3RhdGUgaXMgJ3BlbmRpbmcnXG5cdFx0XHR0ZXh0ID0gVEFQaTE4bi5fXygncGVuZGluZycsIHt9LCBsb2NhbGUpXG5cdFx0ZWxzZSBpZiBpbnMuc3RhdGUgaXMgJ2RyYWZ0J1xuXHRcdFx0aWYgaW5zLmlzX3JlYWRcblx0XHRcdFx0dGV4dCA9IFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfcmVhZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRleHQgPSBUQVBpMThuLl9fKCdpbnN0YW5jZV9hcHByb3ZlX25vdF95ZXRfaGFuZGxlZCcsIHt9LCBsb2NhbGUpXG5cblx0XHRyZXR1cm4gdGV4dFxuXG5cdGdldEluc3RhbmNlU3RhdGVDb2xvcjogKGluc3RhbmNlX2lkKS0+XG5cdFx0aW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaW5zdGFuY2VfaWR9LCB7ZmllbGRzOiB7c3RhdGU6IDEsIGlzX3JlYWQ6IDF9fSlcblx0XHRpZiBub3QgaW5zXG5cdFx0XHRyZXR1cm4gXCJcIlxuXG5cdFx0Y2xhID0gJydcblx0XHRpZiBpbnMuc3RhdGUgaXMgJ2RyYWZ0J1xuXHRcdFx0aWYgaW5zLmlzX3JlYWRcblx0XHRcdFx0Y2xhID0gJ2JsdWUnXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNsYSA9ICdyZWQnXG5cdFx0cmV0dXJuIGNsYVxuXG5cdGZpcnN0VHJhY2U6IChpbmRleCktPlxuXHRcdHJldHVybiBpbmRleCBpcyAwXG5cblx0bGFzdF9kaXN0cmlidXRlX2Zyb206IChpbnN0YW5jZV9pZCktPlxuXHRcdGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlX2lkLCBkaXN0cmlidXRlX2Zyb21faW5zdGFuY2U6IHskZXhpc3RzOiB0cnVlfX0se2ZpZWxkczp7Y3JlYXRlZDogMSwgY3JlYXRlZF9ieTogMX19KVxuXHRcdGlmIGluc1xuXHRcdFx0ZGlzX2luZm8gPSB7fVxuXHRcdFx0dXNlciA9IHt9XG5cdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0dXNlciA9IFVVZmxvd19hcGkuZ2V0TmFtZUZvclVzZXIoaW5zLmNyZWF0ZWRfYnkpXG5cdFx0XHRlbHNlIGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHR1c2VyID0gZGIudXNlcnMuZmluZE9uZSh7X2lkOiBpbnMuY3JlYXRlZF9ieX0sIHtmaWVsZHM6IHtuYW1lOiAxfX0pXG5cblx0XHRcdGlmIHVzZXIubmFtZVxuXHRcdFx0XHRkaXNfaW5mby5mcm9tX3VzZXIgPSB1c2VyLl9pZFxuXHRcdFx0XHRkaXNfaW5mby5mcm9tX3VzZXJfbmFtZSA9IHVzZXIubmFtZVxuXHRcdFx0XHRkaXNfaW5mby5jcmVhdGVkID0gaW5zLmNyZWF0ZWRcblxuXHRcdFx0aWYgbm90IF8uaXNFbXB0eShkaXNfaW5mbylcblx0XHRcdFx0cmV0dXJuIGRpc19pbmZvXG5cdFx0cmV0dXJuXG5cblx0aXNDQ09yRGlzdHJpYnV0ZU9yRm9yd2FyZFRlcm1pbmF0ZWQ6IChhcHByb3ZlKS0+XG5cdFx0aWYgKGFwcHJvdmUudHlwZSBpcyAnY2MnIG9yIGFwcHJvdmUudHlwZSBpcyAnZGlzdHJpYnV0ZScgb3IgYXBwcm92ZS50eXBlIGlzICdmb3J3YXJkJykgYW5kIGFwcHJvdmUuanVkZ2UgaXMgJ3Rlcm1pbmF0ZWQnXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdGp1ZGdlVGVybWluYXRlZDogKGp1ZGdlKS0+XG5cdFx0cmV0dXJuIGp1ZGdlIGlzICd0ZXJtaW5hdGVkJ1xuXG5cdGluc3RhbmNlRXhpc3RzOiAoaW5zdGFuY2VfaWQpLT5cblx0XHRyZXR1cm4gISFkYi5pbnN0YW5jZXMuZmluZChpbnN0YW5jZV9pZCkuY291bnQoKVxuXG5cdGFnZW50RGVzY3JpcHRpb246ICh1c2VyTmFtZSktPlxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdFx0aWYgbG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ3poLWNuJ1xuXHRcdFx0XHRsb2NhbGUgPSBcInpoLUNOXCJcblx0XHRlbHNlXG5cdFx0XHRsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpXG5cblx0XHRyZXR1cm4gVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge3VzZXJOYW1lOiB1c2VyTmFtZX0sIGxvY2FsZSlcblx0XG5cdHRyYWNlTmFtZTogKGluc3RhbmNlX2lkLCB0cmFjZUlkKS0+XG5cdFx0cmV0dXJuIF8uZmluZChkYi5pbnN0YW5jZXMuZmluZE9uZShpbnN0YW5jZV9pZCwge2ZpZWxkczoge3RyYWNlczogMX19KT8udHJhY2VzLCAodHJhY2UpLT5cblx0XHRcdFx0XHRyZXR1cm4gdHJhY2UuX2lkID09ICB0cmFjZUlkXG5cdFx0KT8ubmFtZVxuXG5cdG9iamVjdFVybDogKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCktPlxuXHRcdHJldHVybiBDcmVhdG9yLmdldE9iamVjdFVybChvYmplY3RfbmFtZSwgcmVjb3JkX2lkLCBhcHBfaWQpXG5cblx0aGFuZGxlckRvYzogKGhhbmRsZXJJZCktPlxuXHRcdHVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8gPSBNZXRlb3Iuc2V0dGluZ3MucHVibGljPy53b3JrZmxvdz8udXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mb1xuXHRcdGlmICF1c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvIG9yICF1c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvLmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSlcblx0XHRcdHJldHVyblxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0cmV0dXJuIFVVZmxvd19hcGkuZ2V0Q29udGFjdEluZm9Gb3JVc2VyKGhhbmRsZXJJZCwgU2Vzc2lvbi5nZXQoJ3NwYWNlSWQnKSlcblx0XHRlbHNlIGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0cmV0dXJuIGRiLnVzZXJzLmZpbmRPbmUoaGFuZGxlcklkKVxuXG5pZiBNZXRlb3IuaXNTZXJ2ZXJcblx0VHJhY2VzVGVtcGxhdGUuaGVscGVycy5kYXRlRm9ybWF0ID0gKGRhdGUpLT5cblx0XHRpZiBkYXRlXG5cdFx0XHR1dGNPZmZzZXQgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEudXRjT2Zmc2V0XG5cdFx0XHRyZXR1cm4gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmZvcm1hdERhdGUoZGF0ZSwgdXRjT2Zmc2V0KTtcblxuXHRUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLl90ID0gKGtleSktPlxuXHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpXG5cblx0VHJhY2VzVGVtcGxhdGUuaGVscGVycy5zaG93RGVsZXRlQnV0dG9uID0gKGFwcHJvdmVkKSAtPlxuXHRcdHJldHVybiBmYWxzZTtcblxuVHJhY2VzVGVtcGxhdGUuZXZlbnRzID1cblx0J2NsaWNrIC5jYy1hcHByb3ZlLXJlbW92ZSc6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRpZiBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyAqIDEgIT0gMVxuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNhbGxpbmcgPSAxXG5cdFx0XHQkKFwiaVwiLGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKFwiZmEtc3BpblwiKVxuXHRcdFx0aW5zdGFuY2VJZCA9IFNlc3Npb24uZ2V0KCdpbnN0YW5jZUlkJylcblx0XHRcdGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmVcblx0XHRcdCMgQ0FMTCDliKDpmaRhcHByb3Zl5Ye95pWw44CCXG5cdFx0XHQkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIilcblx0XHRcdE1ldGVvci5jYWxsICdjY19yZW1vdmUnLCBpbnN0YW5jZUlkLCBhcHByb3ZlSWQsIChlcnIsIHJlc3VsdCkgLT5cblx0XHRcdFx0JChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0XHRcdGlmIGVyclxuXHRcdFx0XHRcdHRvYXN0ci5lcnJvciBlcnJcblx0XHRcdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyA9IDBcblx0XHRcdFx0XHQkKFwiaVwiLGV2ZW50LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKFwiZmEtc3BpblwiKVxuXHRcdFx0XHRpZiByZXN1bHQgPT0gdHJ1ZVxuXHRcdFx0XHRcdHRvYXN0ci5zdWNjZXNzKFRBUGkxOG4uX18oXCJyZW1vdmVfY2NfYXBwcm92ZVwiKSk7XG5cdFx0XHRcdFx0aWYgJChcIi5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWxcIikubGVuZ3RoXG5cdFx0XHRcdFx0XHRNb2RhbC5oaWRlIFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCJcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHRyZXR1cm5cblxuXHQnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWNjLWFwcHJvdmUtcmVtb3ZlJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHRpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKVxuXHRcdGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmVcblx0XHQjICMgQ0FMTCDliKDpmaRhcHByb3Zl5Ye95pWw44CCXG5cdFx0IyAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIilcblx0XHQjIE1ldGVvci5jYWxsICdjY19yZW1vdmUnLCBpbnN0YW5jZUlkLCBhcHByb3ZlSWQsIChlcnIsIHJlc3VsdCkgLT5cblx0XHQjIFx0JChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0IyBcdGlmIGVyclxuXHRcdCMgXHRcdHRvYXN0ci5lcnJvciBlcnJcblx0XHQjIFx0aWYgcmVzdWx0ID09IHRydWVcblx0XHQjIFx0XHR0b2FzdHIuc3VjY2VzcyhUQVBpMThuLl9fKFwicmVtb3ZlX2NjX2FwcHJvdmVcIikpO1xuXHRcdCMgXHRcdE1vZGFsLmhpZGUgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIlxuXHRcdCMgXHRyZXR1cm5cblx0XHQjIHJldHVyblxuXHRcdE1vZGFsLmFsbG93TXVsdGlwbGUgPSB0cnVlXG5cdFx0TW9kYWwuc2hvdyAnY2FuY2VsX2NjX21vZGFsJ1xuXG5cdCdjbGljayAuYXBwcm92ZS1pdGVtLC5hcHByb3ZlLWRlc2NyaXB0aW9uJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHQjIFBD5LiK6ZO+5o6l5YWB6K6455u05o6l54K55byA77yM5LiN5YaN5omT5byA562+5om55Y6G56iL6K+m57uGXG5cdFx0dW5sZXNzICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYS5idG4tbGlua1wiKS5sZW5ndGhcblx0XHRcdE1vZGFsLnNob3cgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIiwgdGhpc1xuXG5cdCd0YXBob2xkIC5hcHByb3ZlLWl0ZW0sLmFwcHJvdmUtZGVzY3JpcHRpb24nOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdCMg5omL5py65LiK6ZW/5oyJ5omT5byA562+5om55Y6G56iL6K+m57uG77yM5aaC5p6c5piv6ZO+5o6l6ZW/5oyJ5omT5byA5ZCO5LiA5pS+5omL56qX5Y+j5bCx5Y+I5YWz5o6J5LqG77yM5omA5Lul5LiN6K6p6ZO+5o6l5omT5byA562+5om55Y6G56iL6K+m57uGXG5cdFx0dW5sZXNzICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYS5idG4tbGlua1wiKS5sZW5ndGhcblx0XHRcdE1vZGFsLnNob3cgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIiwgdGhpc1xuXG5cdCdjbGljayAuYXBwcm92ZS1pdGVtIGEuYnRuLWxpbmssLmFwcHJvdmUtZGVzY3JpcHRpb24gYS5idG4tbGluaywuYXBwcm92ZS1pdGVtLWRpc3RyaWJ1dGUgYS5idG4tbGluayc6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0IyDmiYvmnLrkuIrngrnlh7vpk77mjqXvvIzlvLnlh7rmlrDnqpflj6PvvIzkuI3mlK/mjIHvvIzlm6DkuLphbmRyb2lk5LiK5Lya5by55Ye655m75b2V55WM6Z2iXG5cdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHR1c2VySWQgPSBldmVudC50YXJnZXQuZGF0YXNldD8udGFyZ2V0X3VzZXJfaWRcblx0XHRcdENyZWF0b3Iub3BlblNhZmVPYmplY3RVcmwoJ3VzZXJzJywgdXNlcklkKVxuXG5cdCd0YXBlbmQgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0IyDkuIrov7Dplb/mjInmiZPlvIBhcHByb3Zl6K+m57uG56qX5Y+j55qE5LqL5Lu2dGFwaG9sZOS8muinpuWPkeaJk+W8gOeql+WPo+WQjueahHRvdWNoZW5k5LqL5Lu277yM6YCg5oiQ6ZW/5oyJ5omT5byA56qX5Y+j5ZCO5LiA5pS+5omL56qX5Y+j5bCx5Y+I5YWz5o6J5LqGXG5cdFx0IyDov5nph4zlj6rog73pgJrov4fpmLvmraJ0YXBlbmTkuovku7Yo5LiN5Y+v5Lul55SodG91Y2hlbmTkuovku7bvvIzlm6DkuLrkvJrlvbHlk410YXBob2xk5Yqf6IO977yM6YCg5oiQ5rKh5pyJ6ZW/5oyJ5pWI5p6c5pe25Lmf5Lya6Kem5Y+RdGFwaG9sZOS6i+S7tinlhpLms6HmnaXpgb/lhY3pl67popjjgIJcblx0XHQjIOmTvuaOpeWFgeiuuOebtOaOpeeCueW8gFxuXHRcdHVubGVzcyAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChcImEuYnRuLWxpbmtcIikubGVuZ3RoXG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0J2NsaWNrIC5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWwgLmJ0bi1mb3J3YXJkLWFwcHJvdmUtcmVtb3ZlJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHRpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKVxuXHRcdGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmVcblx0XHR0cmFjZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQudHJhY2Vcblx0XHQjIENBTEwg5Yig6ZmkYXBwcm92ZeWHveaVsOOAglxuXHRcdCQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9hZGluZ1wiKVxuXHRcdE1ldGVvci5jYWxsICdmb3J3YXJkX3JlbW92ZScsIGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgKGVyciwgcmVzdWx0KSAtPlxuXHRcdFx0JChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0XHRpZiBlcnJcblx0XHRcdFx0dG9hc3RyLmVycm9yIFRBUGkxOG4uX18oZXJyLnJlYXNvbilcblx0XHRcdGlmIHJlc3VsdCA9PSB0cnVlXG5cdFx0XHRcdHRvYXN0ci5zdWNjZXNzKFRBUGkxOG4uX18oXCJpbnN0YW5jZV9hcHByb3ZlX2ZvcndhcmRfcmVtb3ZlX3N1Y2Nlc3NcIikpO1xuXHRcdFx0XHRNb2RhbC5oaWRlIFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCJcblx0XHRcdHJldHVyblxuXHRcdHJldHVyblxuXG5cdCdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tZm9yd2FyZC1pbnN0YW5jZS1sb29rJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHRmb3J3YXJkX3NwYWNlID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuZm9yd2FyZHNwYWNlXG5cdFx0Zm9yd2FyZF9pbnN0YW5jZSA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmZvcndhcmRpbnN0YW5jZVxuXHRcdFN0ZWVkb3Mub3BlbldpbmRvdyhTdGVlZG9zLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIgKyBmb3J3YXJkX3NwYWNlICsgXCIvdmlldy9yZWFkb25seS9cIiArIGZvcndhcmRfaW5zdGFuY2UpKVxuXG5cdCdjbGljayAuYnRuLW1vZGlmaWNhdGlvbidcdDogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHR0ZW1wbGF0ZS5pc19lZGl0aW5nLnNldCghdGVtcGxhdGUuaXNfZWRpdGluZy5nZXQoKSk7XG5cdFx0dW5sZXNzIFN0ZWVkb3MuaXNBbmRyb2lkT3JJT1MoKVxuXHRcdFx0VHJhY2tlci5hZnRlckZsdXNoIC0+XG5cdFx0XHRcdCMg5pi+56S65pel5b+X55qE5pe25YCZ5oqK5rua5Yqo5p2h5b6A5LiL56e754K577yM6K6p5pel5pyf5o6n5Lu25pi+56S65Ye65LiA6YOo5YiG77yM5Lul6YG/5YWN55So5oi355yL5LiN5Yiw5pel5pyf5o6n5Lu2XG5cdFx0XHRcdCQoXCIjaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsICNmaW5pc2hfaW5wdXRcIikub24gXCJkcC5zaG93XCIsICgpIC0+XG5cdFx0XHRcdFx0JChcIi5tb2RhbC1ib2R5XCIpLnNjcm9sbFRvcCgxMDApXG5cblx0J2NsaWNrIC5idG4tY2FuY2VsQnV0JyA6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cblx0XHR0ZW1wbGF0ZS5pc19lZGl0aW5nLnNldCghdGVtcGxhdGUuaXNfZWRpdGluZy5nZXQoKSk7XG5cblx0J2NsaWNrIC5idG4tc2F2ZUJ1dCcgOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdCMgdGVtcGxhdGUuaXNfZWRpdGluZy5zZXQoIXRlbXBsYXRlLmlzX2VkaXRpbmcuZ2V0KCkpXG5cblx0XHRpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKVxuXHRcdGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmVcblx0XHR0cmFjZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQudHJhY2Vcblx0XHRvcGluaW9uX2lucHV0ID0gJCgnI29waW5pb25faW5wdXQnKS52YWwoKVxuXHRcdGZpbmlzaF9pbnB1dCA9IEF1dG9Gb3JtLmdldEZpZWxkVmFsdWUoXCJmaW5pc2hfZGF0ZVwiLCBcImZpbmlzaERhdGVBdXRvRm9ybVwiKVxuXG5cdFx0JChcImJvZHlcIikuYWRkQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0TWV0ZW9yLmNhbGwgJ2NoYW5nZV9hcHByb3ZlX2luZm8nLCBpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQsIG9waW5pb25faW5wdXQsIGZpbmlzaF9pbnB1dCwgKGVyciwgcmVzdWx0KS0+XG5cdFx0XHQkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIilcblx0XHRcdGlmIGVyclxuXHRcdFx0XHR0b2FzdHIuZXJyb3IgVEFQaTE4bi5fXyhlcnIucmVhc29uKVxuXHRcdFx0aWYgcmVzdWx0ID09IHRydWVcblx0XHRcdFx0dG9hc3RyLnN1Y2Nlc3ModChcImluc3RhbmNlX2FwcHJvdmVfbW9kYWxfbW9kaWZpY2F0aW9uc2F2ZVwiKSlcblx0XHRcdFx0TW9kYWwuaGlkZSBcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiXG5cdFx0XHRyZXR1cm5cblxuXHQnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWRpc3RyaWJ1dGUtYXBwcm92ZS1yZW1vdmUnOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdE1vZGFsLmFsbG93TXVsdGlwbGUgPSB0cnVlXG5cdFx0TW9kYWwuc2hvdyAnY2FuY2VsX2Rpc3RyaWJ1dGVfbW9kYWwnXG4iLCJ2YXIgbWFya2VkO1xuXG5tYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpO1xuXG5UcmFjZXNUZW1wbGF0ZS5oZWxwZXJzID0ge1xuICB0cmFjZVNob3dTaWduSW1hZ2U6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0ud29ya2Zsb3cudHJhY2VTaG93U2lnbkltYWdlICE9PSBmYWxzZSAmJiBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0ud29ya2Zsb3cudHJhY2VTaG93U2lnbkltYWdlICE9PSAnZmFsc2UnO1xuICB9LFxuICBlcXVhbHM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfSxcbiAgZW1wdHk6IGZ1bmN0aW9uKGEpIHtcbiAgICBpZiAoYSkge1xuICAgICAgcmV0dXJuIGEudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoIDwgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LFxuICB1bmVtcHR5OiBmdW5jdGlvbihhKSB7XG4gICAgaWYgKGEpIHtcbiAgICAgIHJldHVybiBhLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGFwcGVuZDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBhICsgYjtcbiAgfSxcbiAgZGF0ZUZvcm1hdDogZnVuY3Rpb24oZGF0ZSkge1xuICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkgJiYgKGRhdGUgIT0gbnVsbCA/IGRhdGUuZ2V0RnVsbFllYXIoKSA6IHZvaWQgMCkgPT09IChuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgcmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoJ01NLUREIEhIOm1tJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgfVxuICB9LFxuICBnZXRTdGVwTmFtZTogZnVuY3Rpb24oc3RlcElkKSB7XG4gICAgdmFyIHN0ZXA7XG4gICAgc3RlcCA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZVN0ZXAoc3RlcElkKTtcbiAgICBpZiAoc3RlcCkge1xuICAgICAgcmV0dXJuIHN0ZXAubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHNob3dEZWxldGVCdXR0b246IGZ1bmN0aW9uKGFwcHJvdmVkKSB7XG4gICAgaWYgKGFwcHJvdmVkICYmIGFwcHJvdmVkLnR5cGUgPT09ICdjYycgJiYgYXBwcm92ZWQuZnJvbV91c2VyID09PSBNZXRlb3IudXNlcklkKCkgJiYgYXBwcm92ZWQuaXNfZmluaXNoZWQgIT09IHRydWUgJiYgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNTaG93TW9kaWZpY2F0aW9uQnV0dG9uOiBmdW5jdGlvbihhcHByb3ZlZCkge1xuICAgIHZhciBhcHByb3ZlX2FkbWlucywgaXNTaG93LCByZWYsIHJlZjEsIHJlZjI7XG4gICAgYXBwcm92ZV9hZG1pbnMgPSAocmVmID0gTWV0ZW9yLnNldHRpbmdzKSAhPSBudWxsID8gKHJlZjEgPSByZWZbXCJwdWJsaWNcIl0pICE9IG51bGwgPyAocmVmMiA9IHJlZjEud29ya2Zsb3cpICE9IG51bGwgPyByZWYyLmFwcHJvdmVfYWRtaW5zIDogdm9pZCAwIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIGlmIChhcHByb3ZlX2FkbWlucyAhPSBudWxsID8gYXBwcm92ZV9hZG1pbnMubGVuZ3RoIDogdm9pZCAwKSB7XG4gICAgICBpc1Nob3cgPSBhcHByb3ZlX2FkbWlucyAhPSBudWxsID8gYXBwcm92ZV9hZG1pbnMuY29udGFpbnMoTWV0ZW9yLnVzZXJJZCgpKSA6IHZvaWQgMDtcbiAgICB9XG4gICAgaWYgKCFpc1Nob3cpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcHJvdmVkLmhhbmRsZXIgPT09IE1ldGVvci51c2VySWQoKTtcbiAgfSxcbiAgaXNFZGl0aW5nOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVmO1xuICAgIHJldHVybiAocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKS5pc19lZGl0aW5nKSAhPSBudWxsID8gcmVmLmdldCgpIDogdm9pZCAwO1xuICB9LFxuICBpc1Nob3dEZXNjcmlwdGlvbjogZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICB2YXIgcmVmO1xuICAgIGlmIChUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLmlzU2hvd01vZGlmaWNhdGlvbkJ1dHRvbihhcHByb3ZlZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gKChyZWYgPSBhcHByb3ZlZC5kZXNjcmlwdGlvbikgIT0gbnVsbCA/IHJlZi50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggOiB2b2lkIDApID4gMDtcbiAgfSxcbiAgaXNDQzogZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICBpZiAoYXBwcm92ZWQgJiYgYXBwcm92ZWQudHlwZSA9PT0gJ2NjJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgZ2V0QXBwcm92ZVN0YXR1c0ljb246IGZ1bmN0aW9uKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkge1xuICAgIHZhciBhcHByb3ZlU3RhdHVzSWNvbjtcbiAgICBpZiAoYXV0b1N1Ym1pdHRlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICdpb24gaW9uLWFuZHJvaWQtYWxhcm0tY2xvY2snO1xuICAgIH1cbiAgICBhcHByb3ZlU3RhdHVzSWNvbiA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKGFwcHJvdmVKdWRnZSkge1xuICAgICAgY2FzZSAnYXBwcm92ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWNoZWNrbWFyay1yb3VuZCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVqZWN0ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWNsb3NlLXJvdW5kJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXJtaW5hdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c0ljb24gPSAnZmEgZmEtYmFuJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWFzc2lnbmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c0ljb24gPSAnaW9uIGlvbi1hbmRyb2lkLWNvbnRhY3QnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlbG9jYXRlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tYXJyb3ctc2hyaW5rJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXRyaWV2ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdmYSBmYS11bmRvJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGFwcHJvdmVTdGF0dXNJY29uO1xuICB9LFxuICBnZXRBcHByb3ZlU3RhdHVzVGV4dDogZnVuY3Rpb24oYXBwcm92ZUp1ZGdlLCBhdXRvU3VibWl0dGVkKSB7XG4gICAgdmFyIGFwcHJvdmVTdGF0dXNUZXh0LCBsb2NhbGU7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICAgIGlmIChsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3poLWNuJykge1xuICAgICAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIik7XG4gICAgfVxuICAgIGlmIChhdXRvU3VibWl0dGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gVEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92ZV90aW1lb3V0X2F1dG9fc3VibWl0dGVkJywge30sIGxvY2FsZSk7XG4gICAgfVxuICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAoYXBwcm92ZUp1ZGdlKSB7XG4gICAgICBjYXNlICdhcHByb3ZlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgYXBwcm92ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWplY3RlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVqZWN0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXJtaW5hdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSB0ZXJtaW5hdGVkJywge30sIGxvY2FsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVhc3NpZ25lZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVhc3NpZ25lZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlbG9jYXRlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVsb2NhdGVkJywge30sIGxvY2FsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmV0cmlldmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZXRyaWV2ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXR1cm5lZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmV0dXJuZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWFkZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHJlYWRlZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcm92ZVN0YXR1c1RleHQ7XG4gIH0sXG4gIGdldEFwcHJvdmVKdWRnZUNsYXNzOiBmdW5jdGlvbihhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIHtcbiAgICBpZiAoYXV0b1N1Ym1pdHRlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICdhdXRvU3VibWl0dGVkJztcbiAgICB9XG4gICAgcmV0dXJuIGFwcHJvdmVKdWRnZTtcbiAgfSxcbiAgX3Q6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBUQVBpMThuLl9fKGtleSk7XG4gIH0sXG4gIG15QXBwcm92ZURlc2NyaXB0aW9uOiBmdW5jdGlvbihhcHByb3ZlSWQpIHtcbiAgICB2YXIgbXlBcHByb3ZlLCByZWYsIHJlZjE7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgIG15QXBwcm92ZSA9IChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpKSAhPSBudWxsID8gKHJlZjEgPSByZWYubXlBcHByb3ZlKSAhPSBudWxsID8gcmVmMS5nZXQoKSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgICAgaWYgKG15QXBwcm92ZSAmJiBteUFwcHJvdmUuaWQgPT09IGFwcHJvdmVJZCkge1xuICAgICAgICAgIGlmICghU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gKG15QXBwcm92ZSAhPSBudWxsID8gbXlBcHByb3ZlLmRlc2NyaXB0aW9uIDogdm9pZCAwKSB8fCBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc0ZvcndhcmQ6IGZ1bmN0aW9uKGFwcHJvdmVkKSB7XG4gICAgaWYgKGFwcHJvdmVkICYmIGFwcHJvdmVkLnR5cGUgPT09ICdmb3J3YXJkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgc2hvd0ZvcndhcmREZWxldGVCdXR0b246IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICBpZiAoZGIuaW5zdGFuY2VzLmZpbmQoYXBwcm92ZS5mb3J3YXJkX2luc3RhbmNlKS5jb3VudCgpID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcHByb3ZlICYmIGFwcHJvdmUudHlwZSA9PT0gJ2ZvcndhcmQnICYmIGFwcHJvdmUuZnJvbV91c2VyID09PSBNZXRlb3IudXNlcklkKCkgJiYgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSAmJiBhcHByb3ZlLmp1ZGdlICE9PSAndGVybWluYXRlZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIG1hcmtEb3duVG9IdG1sOiBmdW5jdGlvbihtYXJrRG93blN0cmluZykge1xuICAgIGlmIChtYXJrRG93blN0cmluZykge1xuICAgICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgICBtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKG1hcmtEb3duU3RyaW5nKSk7XG4gICAgfVxuICB9LFxuICBpc0Rpc3RyaWJ1dGU6IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICBpZiAoYXBwcm92ZSAmJiBhcHByb3ZlLnR5cGUgPT09ICdkaXN0cmlidXRlJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgc2hvd0Rpc3RyaWJ1dGVEZWxldGVCdXR0b246IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICB2YXIgaW5zO1xuICAgIGlmIChkYi5pbnN0YW5jZXMuZmluZChhcHByb3ZlLmZvcndhcmRfaW5zdGFuY2UpLmNvdW50KCkgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFwcHJvdmUgJiYgYXBwcm92ZS50eXBlID09PSAnZGlzdHJpYnV0ZScgJiYgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSAmJiBhcHByb3ZlLmp1ZGdlICE9PSAndGVybWluYXRlZCcpIHtcbiAgICAgIGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBhcHByb3ZlLmluc3RhbmNlXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIGZsb3c6IDEsXG4gICAgICAgICAgc3BhY2U6IDFcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoaW5zICYmIGlucy5mbG93ICYmIGlucy5zcGFjZSkge1xuICAgICAgICBpZiAoV29ya2Zsb3dNYW5hZ2VyLmhhc0Zsb3dBZG1pblBlcm1pc3Npb24oaW5zLmZsb3csIGlucy5zcGFjZSwgTWV0ZW9yLnVzZXJJZCgpKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYXBwcm92ZS5mcm9tX3VzZXIgPT09IE1ldGVvci51c2VySWQoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBmaW5pc2hEYXRlU2NoZW1hOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoU3RlZWRvcy5pc0FuZHJvaWRPcklPUygpKSB7XG4gICAgICByZXR1cm4gbmV3IFNpbXBsZVNjaGVtYSh7XG4gICAgICAgIGZpbmlzaF9kYXRlOiB7XG4gICAgICAgICAgYXV0b2Zvcm06IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgIHR5cGU6IERhdGVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKHtcbiAgICAgICAgZmluaXNoX2RhdGU6IHtcbiAgICAgICAgICBhdXRvZm9ybToge1xuICAgICAgICAgICAgdHlwZTogXCJib290c3RyYXAtZGF0ZXRpbWVwaWNrZXJcIixcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgICAgICAgZGF0ZVRpbWVQaWNrZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgIGZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCIsXG4gICAgICAgICAgICAgIGlnbm9yZVJlYWRvbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBsb2NhbGU6IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIiksXG4gICAgICAgICAgICAgIHdpZGdldFBvc2l0aW9uaW5nOiB7XG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgICAgdHlwZTogRGF0ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGZpbmlzaERhdGVWYWx1ZXM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaW5pc2hfZGF0ZTogdGhpcy5maW5pc2hfZGF0ZVxuICAgIH07XG4gIH0sXG5cbiAgLypcbiAgICAgXHTmraTlh73mlbDnlKjkuo7mjqfliLbmmK/lkKbmmL7npLp0cmFjZXMgdmlld1xuICAgICBcdHRydWU6IOaYvuekunRyYWNlcyB2aWV3LOetvuaguOWOhueoi+aMiemSrueCueWHu+WQjuaYr+ebtOaOpeWumuS9jeWIsHRyYWNlcyB2aWV3XG4gICAgIFx0ZmFsc2U6IOS4jeaYvuekunRyYWNlcyB2aWV377yM562+5qC45Y6G56iL5oyJ6ZKu54K55Ye75ZCOLOS7pU1vZGFsIOaWueW8j+aYvuekunRyYWNlcyB2aWV3XG4gICAqL1xuICBzaG93VHJhY2VzVmlldzogZnVuY3Rpb24oZm9ybSwgZm9ybV92ZXJzaW9uKSB7XG4gICAgdmFyIHJlZiwgc2hvd19tb2RhbF90cmFjZXNfbGlzdDtcbiAgICBzaG93X21vZGFsX3RyYWNlc19saXN0ID0gKChyZWYgPSBkYi5zcGFjZV9zZXR0aW5ncy5maW5kT25lKHtcbiAgICAgIHNwYWNlOiBTZXNzaW9uLmdldChcInNwYWNlSWRcIiksXG4gICAgICBrZXk6IFwic2hvd19tb2RhbF90cmFjZXNfbGlzdFwiXG4gICAgfSkpICE9IG51bGwgPyByZWYudmFsdWVzIDogdm9pZCAwKSB8fCBmYWxzZTtcbiAgICByZXR1cm4gIXNob3dfbW9kYWxfdHJhY2VzX2xpc3Q7XG4gIH0sXG4gIGdldEluc3RhbmNlU3RhdGVUZXh0OiBmdW5jdGlvbihpbnN0YW5jZV9pZCkge1xuICAgIHZhciBpbnMsIGxvY2FsZSwgdGV4dDtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlO1xuICAgICAgaWYgKGxvY2FsZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnemgtY24nKSB7XG4gICAgICAgIGxvY2FsZSA9IFwiemgtQ05cIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxlID0gU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKTtcbiAgICB9XG4gICAgaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpbnN0YW5jZV9pZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBzdGF0ZTogMSxcbiAgICAgICAgaXNfcmVhZDogMVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghaW5zKSB7XG4gICAgICByZXR1cm4gVEFQaTE4bi5fXygnaW5zdGFuY2VfZGVsZXRlZCcsIHt9LCBsb2NhbGUpO1xuICAgIH1cbiAgICB0ZXh0ID0gJyc7XG4gICAgaWYgKGlucy5zdGF0ZSA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgIHRleHQgPSBUQVBpMThuLl9fKCdjb21wbGV0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICB9IGVsc2UgaWYgKGlucy5zdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICB0ZXh0ID0gVEFQaTE4bi5fXygncGVuZGluZycsIHt9LCBsb2NhbGUpO1xuICAgIH0gZWxzZSBpZiAoaW5zLnN0YXRlID09PSAnZHJhZnQnKSB7XG4gICAgICBpZiAoaW5zLmlzX3JlYWQpIHtcbiAgICAgICAgdGV4dCA9IFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfcmVhZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfbm90X3lldF9oYW5kbGVkJywge30sIGxvY2FsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xuICB9LFxuICBnZXRJbnN0YW5jZVN0YXRlQ29sb3I6IGZ1bmN0aW9uKGluc3RhbmNlX2lkKSB7XG4gICAgdmFyIGNsYSwgaW5zO1xuICAgIGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgIF9pZDogaW5zdGFuY2VfaWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgc3RhdGU6IDEsXG4gICAgICAgIGlzX3JlYWQ6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWlucykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGNsYSA9ICcnO1xuICAgIGlmIChpbnMuc3RhdGUgPT09ICdkcmFmdCcpIHtcbiAgICAgIGlmIChpbnMuaXNfcmVhZCkge1xuICAgICAgICBjbGEgPSAnYmx1ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGEgPSAncmVkJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsYTtcbiAgfSxcbiAgZmlyc3RUcmFjZTogZnVuY3Rpb24oaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXggPT09IDA7XG4gIH0sXG4gIGxhc3RfZGlzdHJpYnV0ZV9mcm9tOiBmdW5jdGlvbihpbnN0YW5jZV9pZCkge1xuICAgIHZhciBkaXNfaW5mbywgaW5zLCB1c2VyO1xuICAgIGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgIF9pZDogaW5zdGFuY2VfaWQsXG4gICAgICBkaXN0cmlidXRlX2Zyb21faW5zdGFuY2U6IHtcbiAgICAgICAgJGV4aXN0czogdHJ1ZVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBjcmVhdGVkOiAxLFxuICAgICAgICBjcmVhdGVkX2J5OiAxXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGlucykge1xuICAgICAgZGlzX2luZm8gPSB7fTtcbiAgICAgIHVzZXIgPSB7fTtcbiAgICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgICAgdXNlciA9IFVVZmxvd19hcGkuZ2V0TmFtZUZvclVzZXIoaW5zLmNyZWF0ZWRfYnkpO1xuICAgICAgfSBlbHNlIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgdXNlciA9IGRiLnVzZXJzLmZpbmRPbmUoe1xuICAgICAgICAgIF9pZDogaW5zLmNyZWF0ZWRfYnlcbiAgICAgICAgfSwge1xuICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgbmFtZTogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodXNlci5uYW1lKSB7XG4gICAgICAgIGRpc19pbmZvLmZyb21fdXNlciA9IHVzZXIuX2lkO1xuICAgICAgICBkaXNfaW5mby5mcm9tX3VzZXJfbmFtZSA9IHVzZXIubmFtZTtcbiAgICAgICAgZGlzX2luZm8uY3JlYXRlZCA9IGlucy5jcmVhdGVkO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzRW1wdHkoZGlzX2luZm8pKSB7XG4gICAgICAgIHJldHVybiBkaXNfaW5mbztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGlzQ0NPckRpc3RyaWJ1dGVPckZvcndhcmRUZXJtaW5hdGVkOiBmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgaWYgKChhcHByb3ZlLnR5cGUgPT09ICdjYycgfHwgYXBwcm92ZS50eXBlID09PSAnZGlzdHJpYnV0ZScgfHwgYXBwcm92ZS50eXBlID09PSAnZm9yd2FyZCcpICYmIGFwcHJvdmUuanVkZ2UgPT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAganVkZ2VUZXJtaW5hdGVkOiBmdW5jdGlvbihqdWRnZSkge1xuICAgIHJldHVybiBqdWRnZSA9PT0gJ3Rlcm1pbmF0ZWQnO1xuICB9LFxuICBpbnN0YW5jZUV4aXN0czogZnVuY3Rpb24oaW5zdGFuY2VfaWQpIHtcbiAgICByZXR1cm4gISFkYi5pbnN0YW5jZXMuZmluZChpbnN0YW5jZV9pZCkuY291bnQoKTtcbiAgfSxcbiAgYWdlbnREZXNjcmlwdGlvbjogZnVuY3Rpb24odXNlck5hbWUpIHtcbiAgICB2YXIgbG9jYWxlO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgICBpZiAobG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICd6aC1jbicpIHtcbiAgICAgICAgbG9jYWxlID0gXCJ6aC1DTlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpO1xuICAgIH1cbiAgICByZXR1cm4gVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge1xuICAgICAgdXNlck5hbWU6IHVzZXJOYW1lXG4gICAgfSwgbG9jYWxlKTtcbiAgfSxcbiAgdHJhY2VOYW1lOiBmdW5jdGlvbihpbnN0YW5jZV9pZCwgdHJhY2VJZCkge1xuICAgIHZhciByZWYsIHJlZjE7XG4gICAgcmV0dXJuIChyZWYgPSBfLmZpbmQoKHJlZjEgPSBkYi5pbnN0YW5jZXMuZmluZE9uZShpbnN0YW5jZV9pZCwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIHRyYWNlczogMVxuICAgICAgfVxuICAgIH0pKSAhPSBudWxsID8gcmVmMS50cmFjZXMgOiB2b2lkIDAsIGZ1bmN0aW9uKHRyYWNlKSB7XG4gICAgICByZXR1cm4gdHJhY2UuX2lkID09PSB0cmFjZUlkO1xuICAgIH0pKSAhPSBudWxsID8gcmVmLm5hbWUgOiB2b2lkIDA7XG4gIH0sXG4gIG9iamVjdFVybDogZnVuY3Rpb24ob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKSB7XG4gICAgcmV0dXJuIENyZWF0b3IuZ2V0T2JqZWN0VXJsKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCk7XG4gIH0sXG4gIGhhbmRsZXJEb2M6IGZ1bmN0aW9uKGhhbmRsZXJJZCkge1xuICAgIHZhciByZWYsIHJlZjEsIHVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm87XG4gICAgdXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyA9IChyZWYgPSBNZXRlb3Iuc2V0dGluZ3NbXCJwdWJsaWNcIl0pICE9IG51bGwgPyAocmVmMSA9IHJlZi53b3JrZmxvdykgIT0gbnVsbCA/IHJlZjEudXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICBpZiAoIXVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8gfHwgIXVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8uaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICByZXR1cm4gVVVmbG93X2FwaS5nZXRDb250YWN0SW5mb0ZvclVzZXIoaGFuZGxlcklkLCBTZXNzaW9uLmdldCgnc3BhY2VJZCcpKTtcbiAgICB9IGVsc2UgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgcmV0dXJuIGRiLnVzZXJzLmZpbmRPbmUoaGFuZGxlcklkKTtcbiAgICB9XG4gIH1cbn07XG5cbmlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgVHJhY2VzVGVtcGxhdGUuaGVscGVycy5kYXRlRm9ybWF0ID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHZhciB1dGNPZmZzZXQ7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHV0Y09mZnNldCA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS51dGNPZmZzZXQ7XG4gICAgICByZXR1cm4gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmZvcm1hdERhdGUoZGF0ZSwgdXRjT2Zmc2V0KTtcbiAgICB9XG4gIH07XG4gIFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMuX3QgPSBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgbG9jYWxlO1xuICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5LCB7fSwgbG9jYWxlKTtcbiAgfTtcbiAgVHJhY2VzVGVtcGxhdGUuaGVscGVycy5zaG93RGVsZXRlQnV0dG9uID0gZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cblRyYWNlc1RlbXBsYXRlLmV2ZW50cyA9IHtcbiAgJ2NsaWNrIC5jYy1hcHByb3ZlLXJlbW92ZSc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHZhciBhcHByb3ZlSWQsIGluc3RhbmNlSWQ7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jYWxsaW5nICogMSAhPT0gMSkge1xuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNhbGxpbmcgPSAxO1xuICAgICAgJChcImlcIiwgZXZlbnQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJmYS1zcGluXCIpO1xuICAgICAgaW5zdGFuY2VJZCA9IFNlc3Npb24uZ2V0KCdpbnN0YW5jZUlkJyk7XG4gICAgICBhcHByb3ZlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC5hcHByb3ZlO1xuICAgICAgJChcImJvZHlcIikuYWRkQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgICAgTWV0ZW9yLmNhbGwoJ2NjX3JlbW92ZScsIGluc3RhbmNlSWQsIGFwcHJvdmVJZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdG9hc3RyLmVycm9yKGVycik7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNhbGxpbmcgPSAwO1xuICAgICAgICAgICQoXCJpXCIsIGV2ZW50LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKFwiZmEtc3BpblwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgICAgdG9hc3RyLnN1Y2Nlc3MoVEFQaTE4bi5fXyhcInJlbW92ZV9jY19hcHByb3ZlXCIpKTtcbiAgICAgICAgICBpZiAoJChcIi5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWxcIikubGVuZ3RoKSB7XG4gICAgICAgICAgICBNb2RhbC5oaWRlKFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWNjLWFwcHJvdmUtcmVtb3ZlJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGFwcHJvdmVJZCwgaW5zdGFuY2VJZDtcbiAgICBpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKTtcbiAgICBhcHByb3ZlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC5hcHByb3ZlO1xuICAgIE1vZGFsLmFsbG93TXVsdGlwbGUgPSB0cnVlO1xuICAgIHJldHVybiBNb2RhbC5zaG93KCdjYW5jZWxfY2NfbW9kYWwnKTtcbiAgfSxcbiAgJ2NsaWNrIC5hcHByb3ZlLWl0ZW0sLmFwcHJvdmUtZGVzY3JpcHRpb24nOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICBpZiAoISQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYS5idG4tbGlua1wiKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBNb2RhbC5zaG93KFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCIsIHRoaXMpO1xuICAgIH1cbiAgfSxcbiAgJ3RhcGhvbGQgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIE1vZGFsLnNob3coXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIiwgdGhpcyk7XG4gICAgfVxuICB9LFxuICAnY2xpY2sgLmFwcHJvdmUtaXRlbSBhLmJ0bi1saW5rLC5hcHByb3ZlLWRlc2NyaXB0aW9uIGEuYnRuLWxpbmssLmFwcHJvdmUtaXRlbS1kaXN0cmlidXRlIGEuYnRuLWxpbmsnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICB2YXIgcmVmLCB1c2VySWQ7XG4gICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgdXNlcklkID0gKHJlZiA9IGV2ZW50LnRhcmdldC5kYXRhc2V0KSAhPSBudWxsID8gcmVmLnRhcmdldF91c2VyX2lkIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIENyZWF0b3Iub3BlblNhZmVPYmplY3RVcmwoJ3VzZXJzJywgdXNlcklkKTtcbiAgICB9XG4gIH0sXG4gICd0YXBlbmQgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgJ2NsaWNrIC5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWwgLmJ0bi1mb3J3YXJkLWFwcHJvdmUtcmVtb3ZlJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGFwcHJvdmVJZCwgaW5zdGFuY2VJZCwgdHJhY2VJZDtcbiAgICBpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKTtcbiAgICBhcHByb3ZlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC5hcHByb3ZlO1xuICAgIHRyYWNlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC50cmFjZTtcbiAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgTWV0ZW9yLmNhbGwoJ2ZvcndhcmRfcmVtb3ZlJywgaW5zdGFuY2VJZCwgdHJhY2VJZCwgYXBwcm92ZUlkLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0b2FzdHIuZXJyb3IoVEFQaTE4bi5fXyhlcnIucmVhc29uKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIHRvYXN0ci5zdWNjZXNzKFRBUGkxOG4uX18oXCJpbnN0YW5jZV9hcHByb3ZlX2ZvcndhcmRfcmVtb3ZlX3N1Y2Nlc3NcIikpO1xuICAgICAgICBNb2RhbC5oaWRlKFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWZvcndhcmQtaW5zdGFuY2UtbG9vayc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHZhciBmb3J3YXJkX2luc3RhbmNlLCBmb3J3YXJkX3NwYWNlO1xuICAgIGZvcndhcmRfc3BhY2UgPSBldmVudC50YXJnZXQuZGF0YXNldC5mb3J3YXJkc3BhY2U7XG4gICAgZm9yd2FyZF9pbnN0YW5jZSA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmZvcndhcmRpbnN0YW5jZTtcbiAgICByZXR1cm4gU3RlZWRvcy5vcGVuV2luZG93KFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIiArIGZvcndhcmRfc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgZm9yd2FyZF9pbnN0YW5jZSkpO1xuICB9LFxuICAnY2xpY2sgLmJ0bi1tb2RpZmljYXRpb24nOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICB0ZW1wbGF0ZS5pc19lZGl0aW5nLnNldCghdGVtcGxhdGUuaXNfZWRpdGluZy5nZXQoKSk7XG4gICAgaWYgKCFTdGVlZG9zLmlzQW5kcm9pZE9ySU9TKCkpIHtcbiAgICAgIHJldHVybiBUcmFja2VyLmFmdGVyRmx1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAkKFwiI2luc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbCAjZmluaXNoX2lucHV0XCIpLm9uKFwiZHAuc2hvd1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChcIi5tb2RhbC1ib2R5XCIpLnNjcm9sbFRvcCgxMDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgJ2NsaWNrIC5idG4tY2FuY2VsQnV0JzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLmlzX2VkaXRpbmcuc2V0KCF0ZW1wbGF0ZS5pc19lZGl0aW5nLmdldCgpKTtcbiAgfSxcbiAgJ2NsaWNrIC5idG4tc2F2ZUJ1dCc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHZhciBhcHByb3ZlSWQsIGZpbmlzaF9pbnB1dCwgaW5zdGFuY2VJZCwgb3Bpbmlvbl9pbnB1dCwgdHJhY2VJZDtcbiAgICBpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKTtcbiAgICBhcHByb3ZlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC5hcHByb3ZlO1xuICAgIHRyYWNlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC50cmFjZTtcbiAgICBvcGluaW9uX2lucHV0ID0gJCgnI29waW5pb25faW5wdXQnKS52YWwoKTtcbiAgICBmaW5pc2hfaW5wdXQgPSBBdXRvRm9ybS5nZXRGaWVsZFZhbHVlKFwiZmluaXNoX2RhdGVcIiwgXCJmaW5pc2hEYXRlQXV0b0Zvcm1cIik7XG4gICAgJChcImJvZHlcIikuYWRkQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgIHJldHVybiBNZXRlb3IuY2FsbCgnY2hhbmdlX2FwcHJvdmVfaW5mbycsIGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgb3Bpbmlvbl9pbnB1dCwgZmluaXNoX2lucHV0LCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2FkaW5nXCIpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0b2FzdHIuZXJyb3IoVEFQaTE4bi5fXyhlcnIucmVhc29uKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIHRvYXN0ci5zdWNjZXNzKHQoXCJpbnN0YW5jZV9hcHByb3ZlX21vZGFsX21vZGlmaWNhdGlvbnNhdmVcIikpO1xuICAgICAgICBNb2RhbC5oaWRlKFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWRpc3RyaWJ1dGUtYXBwcm92ZS1yZW1vdmUnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICBNb2RhbC5hbGxvd011bHRpcGxlID0gdHJ1ZTtcbiAgICByZXR1cm4gTW9kYWwuc2hvdygnY2FuY2VsX2Rpc3RyaWJ1dGVfbW9kYWwnKTtcbiAgfVxufTtcbiIsIlJlbGF0ZWRJbnN0YW5jZXMuaGVscGVycyA9XG5cdHNob3dSZWxhdGVkSW5zdGFjZXM6IC0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRlbHNlXG5cdFx0XHRpbnMgPSB0aGlzLmluc3RhbmNlXG5cdFx0aWYgaW5zPy5yZWxhdGVkX2luc3RhbmNlcyAmJiBfLmlzQXJyYXkoaW5zPy5yZWxhdGVkX2luc3RhbmNlcylcblx0XHRcdGlmIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IHskaW46IGlucy5yZWxhdGVkX2luc3RhbmNlc319LCB7ZmllbGRzOiB7c3BhY2U6IDEsIG5hbWU6IDF9fSkuY291bnQoKSA+IDBcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdHJlbGF0ZWRfaW5zdGFjZXM6IC0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRlbHNlXG5cdFx0XHRpbnMgPSB0aGlzLmluc3RhbmNlXG5cdFx0aWYgaW5zPy5yZWxhdGVkX2luc3RhbmNlcyAmJiBfLmlzQXJyYXkoaW5zPy5yZWxhdGVkX2luc3RhbmNlcylcblx0XHRcdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiB7JGluOiBpbnMucmVsYXRlZF9pbnN0YW5jZXN9fSwge2ZpZWxkczoge3NwYWNlOiAxLCBuYW1lOiAxfX0pLmZldGNoKClcblxuXHRyZWxhdGVkX2luc3RhY2VfdXJsOiAoaW5zKSAtPlxuXG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50ICYmIChTdGVlZG9zLmlzTW9iaWxlKCkgfHwgU3RlZWRvcy5pc0NvcmRvdmEoKSlcblx0XHRcdHJldHVybiAnJ1xuXG5cdFx0YWJzb2x1dGUgPSBmYWxzZVxuXG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRhYnNvbHV0ZSA9IHRoaXMuYWJzb2x1dGVcblx0XHRpZiBhYnNvbHV0ZVxuXHRcdFx0cmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiK2lucy5zcGFjZStcIi92aWV3L3JlYWRvbmx5L1wiICsgaW5zLl9pZCArICc/aGlkZV90cmFjZXM9MCcpXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIitpbnMuc3BhY2UrXCIvdmlldy9yZWFkb25seS9cIiArIGlucy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKVxuXG5cdF90OiAoa2V5KS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXkpXG5cdFx0ZWxzZVxuXHRcdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5LCB7fSwgbG9jYWxlKVxuXG5cdHNob3dfZGVsZXRlOiAoKS0+XG5cdFx0aWYgIU1ldGVvci5pc0NsaWVudFxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gXCJkcmFmdFwiIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0Y3VycmVudF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKClcblx0XHRcdFx0aWYgY3VycmVudF9zdGVwXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9tYWluX2F0dGFjaCB8fCBjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9PSB0cnVlIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlIiwiUmVsYXRlZEluc3RhbmNlcy5oZWxwZXJzID0ge1xuICBzaG93UmVsYXRlZEluc3RhY2VzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnMgPSB0aGlzLmluc3RhbmNlO1xuICAgIH1cbiAgICBpZiAoKGlucyAhPSBudWxsID8gaW5zLnJlbGF0ZWRfaW5zdGFuY2VzIDogdm9pZCAwKSAmJiBfLmlzQXJyYXkoaW5zICE9IG51bGwgPyBpbnMucmVsYXRlZF9pbnN0YW5jZXMgOiB2b2lkIDApKSB7XG4gICAgICBpZiAoZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgICAgICBfaWQ6IHtcbiAgICAgICAgICAkaW46IGlucy5yZWxhdGVkX2luc3RhbmNlc1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIHNwYWNlOiAxLFxuICAgICAgICAgIG5hbWU6IDFcbiAgICAgICAgfVxuICAgICAgfSkuY291bnQoKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIHJlbGF0ZWRfaW5zdGFjZXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnM7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucyA9IHRoaXMuaW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoaW5zICE9IG51bGwgPyBpbnMucmVsYXRlZF9pbnN0YW5jZXMgOiB2b2lkIDApICYmIF8uaXNBcnJheShpbnMgIT0gbnVsbCA/IGlucy5yZWxhdGVkX2luc3RhbmNlcyA6IHZvaWQgMCkpIHtcbiAgICAgIHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogaW5zLnJlbGF0ZWRfaW5zdGFuY2VzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgbmFtZTogMVxuICAgICAgICB9XG4gICAgICB9KS5mZXRjaCgpO1xuICAgIH1cbiAgfSxcbiAgcmVsYXRlZF9pbnN0YWNlX3VybDogZnVuY3Rpb24oaW5zKSB7XG4gICAgdmFyIGFic29sdXRlO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZTtcbiAgICB9XG4gICAgaWYgKGFic29sdXRlKSB7XG4gICAgICByZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIgKyBpbnMuc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgaW5zLl9pZCArICc/aGlkZV90cmFjZXM9MCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiICsgaW5zLnNwYWNlICsgXCIvdmlldy9yZWFkb25seS9cIiArIGlucy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKTtcbiAgICB9XG4gIH0sXG4gIF90OiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgbG9jYWxlO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIHJldHVybiBUQVBpMThuLl9fKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgICByZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpO1xuICAgIH1cbiAgfSxcbiAgc2hvd19kZWxldGU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjdXJyZW50X3N0ZXA7XG4gICAgaWYgKCFNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSBcImRyYWZ0XCIgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgY3VycmVudF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG4gICAgICAgIGlmIChjdXJyZW50X3N0ZXApIHtcbiAgICAgICAgICBpZiAoY3VycmVudF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09PSB0cnVlIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIlJlbGF0ZWRSZWNvcmRzLmhlbHBlcnMgPVxuXHRzaG93UmVsYXRlZFJlY29yZHM6ICgpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGVsc2Vcblx0XHRcdGlucyA9IHRoaXMuaW5zdGFuY2Vcblx0XHRpZiAhaW5zXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRyZXR1cm4gIV8uaXNFbXB0eShpbnMucmVjb3JkX2lkcylcblx0cmVsYXRlZFJlY29yZFVybDogKCktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudCAmJiAoU3RlZWRvcy5pc01vYmlsZSgpIHx8IFN0ZWVkb3MuaXNDb3Jkb3ZhKCkpXG5cdFx0XHRyZXR1cm4gJydcblxuXHRcdGFic29sdXRlID0gZmFsc2Vcblx0XHRcblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdGlucyA9IHRoaXMuaW5zdGFuY2Vcblx0XHRcdGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZVxuXHRcdGVsc2Vcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcblx0XHRvYmpjZXROYW1lID0gaW5zLnJlY29yZF9pZHNbMF0ub1xuXHRcdGlkID0gaW5zLnJlY29yZF9pZHNbMF0uaWRzWzBdXG5cblx0XHRpZiBhYnNvbHV0ZVxuXHRcdFx0cmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcImFwcC8tLyN7b2JqY2V0TmFtZX0vdmlldy8je2lkfVwiKVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBTdGVlZG9zLmFic29sdXRlVXJsKFwiYXBwLy0vI3tvYmpjZXROYW1lfS92aWV3LyN7aWR9XCIpIiwiUmVsYXRlZFJlY29yZHMuaGVscGVycyA9IHtcbiAgc2hvd1JlbGF0ZWRSZWNvcmRzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnMgPSB0aGlzLmluc3RhbmNlO1xuICAgIH1cbiAgICBpZiAoIWlucykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gIV8uaXNFbXB0eShpbnMucmVjb3JkX2lkcyk7XG4gIH0sXG4gIHJlbGF0ZWRSZWNvcmRVcmw6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhYnNvbHV0ZSwgaWQsIGlucywgb2JqY2V0TmFtZTtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50ICYmIChTdGVlZG9zLmlzTW9iaWxlKCkgfHwgU3RlZWRvcy5pc0NvcmRvdmEoKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBpbnMgPSB0aGlzLmluc3RhbmNlO1xuICAgICAgYWJzb2x1dGUgPSB0aGlzLmFic29sdXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9XG4gICAgb2JqY2V0TmFtZSA9IGlucy5yZWNvcmRfaWRzWzBdLm87XG4gICAgaWQgPSBpbnMucmVjb3JkX2lkc1swXS5pZHNbMF07XG4gICAgaWYgKGFic29sdXRlKSB7XG4gICAgICByZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwiYXBwLy0vXCIgKyBvYmpjZXROYW1lICsgXCIvdmlldy9cIiArIGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJhcHAvLS9cIiArIG9iamNldE5hbWUgKyBcIi92aWV3L1wiICsgaWQpO1xuICAgIH1cbiAgfVxufTtcbiIsIi8qXG4gKiBAQXV0aG9yOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBARGF0ZTogMjAyMS0wNS0yNCAxMjozMjo1NlxuICogQExhc3RFZGl0b3JzOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIyLTEyLTI0IDE1OjI5OjIyXG4gKiBARGVzY3JpcHRpb246IFxuICovXG4vLyBKc29uUm91dGVzLmFkZChcInBvc3RcIiwgXCIvYXBpL3dvcmtmbG93L2dldFNwYWNlVXNlcnNcIiwgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4vLyAgIHZhclxuLy8gICAgIHVzZXJJZHMgPSByZXEuYm9keS51c2VySWRzLFxuLy8gICAgIHNwYWNlSWQgPSByZXEucXVlcnkuc3BhY2VJZCxcbi8vICAgICBzcGFjZVVzZXJzID0gW11cbi8vICAgO1xuXG4vLyAgIGlmICghdXNlcklkcyB8fCAhc3BhY2VJZCkge1xuLy8gICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vICAgICAgIGNvZGU6IDIwMCxcbi8vICAgICAgIGRhdGE6IHtcbi8vICAgICAgICAgJ2Vycm9ycyc6ICfnvLrlsJHlj4LmlbAnXG4vLyAgICAgICB9XG4vLyAgICAgfSk7XG4vLyAgIH1cblxuLy8gICBzcGFjZVVzZXJzID0gV29ya2Zsb3dNYW5hZ2VyLmdldFVzZXJzKHNwYWNlSWQsIHVzZXJJZHMpO1xuXG4vLyAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vICAgICBjb2RlOiAyMDAsXG4vLyAgICAgZGF0YToge1xuLy8gICAgICAgJ3NwYWNlVXNlcnMnOiBzcGFjZVVzZXJzXG4vLyAgICAgfVxuLy8gICB9KTtcbi8vIH0pXG5cblxuICBcbiAgIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjQgMTU6MjM6MTRcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbi8vIEpzb25Sb3V0ZXMuYWRkKFwicG9zdFwiLCBcIi9hcGkvd29ya2Zsb3cvZ2V0Rm9ybXVsYVVzZXJPYmplY3RzXCIsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuLy8gICB2YXJcbi8vICAgICB1c2VySWRzID0gcmVxLmJvZHkudXNlcklkcyxcbi8vICAgICBzcGFjZUlkID0gcmVxLnF1ZXJ5LnNwYWNlSWQsXG4vLyAgICAgc3BhY2VVc2VycyA9IFtdXG4vLyAgIDtcblxuLy8gICBpZiAoIXVzZXJJZHMgfHwgIXNwYWNlSWQpIHtcbi8vICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4vLyAgICAgICBjb2RlOiAyMDAsXG4vLyAgICAgICBkYXRhOiB7XG4vLyAgICAgICAgICdlcnJvcnMnOiAn57y65bCR5Y+C5pWwJ1xuLy8gICAgICAgfVxuLy8gICAgIH0pO1xuLy8gICB9XG5cbi8vICAgdmFyIHVzZXJzID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFVc2VyT2JqZWN0KHNwYWNlSWQsIHVzZXJJZHMpO1xuXG4vLyAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vICAgICBjb2RlOiAyMDAsXG4vLyAgICAgZGF0YToge1xuLy8gICAgICAgJ3NwYWNlVXNlcnMnOiB1c2Vyc1xuLy8gICAgIH1cbi8vICAgfSk7XG4vLyB9KVxuXG5cbiAgXG4gICIsIi8qXG4gKiBAQXV0aG9yOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBARGF0ZTogMjAyMS0wNS0yNCAxMjozMjo1NlxuICogQExhc3RFZGl0b3JzOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIyLTEyLTI0IDE1OjM4OjU0XG4gKiBARGVzY3JpcHRpb246IFxuICovXG4vLyBKc29uUm91dGVzLmFkZChcInBvc3RcIiwgXCIvYXBpL3dvcmtmbG93L2luaXRfZm9ybXVsYV92YWx1ZXNcIiwgZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbi8vIFx0dmFyXG4vLyBcdFx0ZmllbGRzID0gcmVxLmJvZHkuZmllbGRzLFxuLy8gXHRcdGF1dG9Gb3JtRG9jID0gcmVxLmJvZHkuYXV0b0Zvcm1Eb2MsXG4vLyBcdFx0YXBwcm92ZXIgPSByZXEuYm9keS5hcHByb3Zlcixcbi8vIFx0XHRhcHBsaWNhbnQgPSByZXEuYm9keS5hcHBsaWNhbnQsXG5cbi8vIFx0XHRzcGFjZUlkID0gcmVxLnF1ZXJ5LnNwYWNlSWQsXG5cbi8vIFx0XHRzcGFjZVVzZXJzID0gW107XG5cbi8vIFx0aWYgKCFmaWVsZHMgfHwgIXNwYWNlSWQgfHwgIWF1dG9Gb3JtRG9jIHx8ICFhcHByb3ZlciB8fCAhYXBwbGljYW50KSB7XG4vLyBcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gXHRcdFx0Y29kZTogMjAwLFxuLy8gXHRcdFx0ZGF0YToge1xuLy8gXHRcdFx0XHQnZXJyb3JzJzogJ+e8uuWwkeWPguaVsCdcbi8vIFx0XHRcdH1cbi8vIFx0XHR9KTtcbi8vIFx0XHRyZXR1cm47XG4vLyBcdH1cblxuLy8gXHRmb3JtdWxhX3ZhbHVlcyA9IEZvcm1fZm9ybXVsYS5pbml0X2Zvcm11bGFfdmFsdWVzKGZpZWxkcywgYXV0b0Zvcm1Eb2MsIGFwcHJvdmVyLCBhcHBsaWNhbnQsIHNwYWNlSWQpO1xuXG4vLyBcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vIFx0XHRjb2RlOiAyMDAsXG4vLyBcdFx0ZGF0YToge1xuLy8gXHRcdFx0J2Zvcm11bGFfdmFsdWVzJzogZm9ybXVsYV92YWx1ZXNcbi8vIFx0XHR9XG4vLyBcdH0pO1xuLy8gfSlcbiIsIi8vIEpzb25Sb3V0ZXMuYWRkKCdwb3N0JywgJy9hcGkvd29ya2Zsb3cvZm9yd2FyZCcsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuLy8gXHR0cnkge1xuLy8gXHRcdHZhciBjdXJyZW50X3VzZXJfaW5mbyA9IHV1Zmxvd01hbmFnZXIuY2hlY2tfYXV0aG9yaXphdGlvbihyZXEpO1xuLy8gXHRcdHZhciBjdXJyZW50X3VzZXJfaWQgPSBjdXJyZW50X3VzZXJfaW5mby5faWQ7XG5cbi8vIFx0XHR2YXIgaGFzaERhdGEgPSByZXEuYm9keTtcbi8vIFx0XHR2YXIgaW5zdGFuY2VfaWQgPSBoYXNoRGF0YS5pbnN0YW5jZV9pZDtcbi8vIFx0XHR2YXIgc3BhY2VfaWQgPSBoYXNoRGF0YS5zcGFjZV9pZDtcbi8vIFx0XHR2YXIgZmxvd19pZCA9IGhhc2hEYXRhLmZsb3dfaWQ7XG4vLyBcdFx0dmFyIGhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudCA9IGhhc2hEYXRhLmhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudDtcbi8vIFx0XHR2YXIgZGVzY3JpcHRpb24gPSBoYXNoRGF0YS5kZXNjcmlwdGlvbjtcbi8vIFx0XHR2YXIgaXNGb3J3YXJkQXR0YWNobWVudHMgPSBoYXNoRGF0YS5pc0ZvcndhcmRBdHRhY2htZW50cztcbi8vIFx0XHR2YXIgc2VsZWN0ZWRVc2VycyA9IGhhc2hEYXRhLnNlbGVjdGVkVXNlcnM7XG4vLyBcdFx0dmFyIGFjdGlvbl90eXBlID0gaGFzaERhdGEuYWN0aW9uX3R5cGU7XG4vLyBcdFx0dmFyIHJlbGF0ZWQgPSBoYXNoRGF0YS5yZWxhdGVkO1xuLy8gXHRcdHZhciBmcm9tX2FwcHJvdmVfaWQgPSBoYXNoRGF0YS5mcm9tX2FwcHJvdmVfaWQ7XG5cbi8vIFx0XHRjaGVjayhpbnN0YW5jZV9pZCwgU3RyaW5nKTtcbi8vIFx0XHRjaGVjayhzcGFjZV9pZCwgU3RyaW5nKTtcbi8vIFx0XHRjaGVjayhmbG93X2lkLCBTdHJpbmcpO1xuLy8gXHRcdGNoZWNrKGhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudCwgQm9vbGVhbik7XG4vLyBcdFx0Y2hlY2soZGVzY3JpcHRpb24sIFN0cmluZyk7XG4vLyBcdFx0Y2hlY2soaXNGb3J3YXJkQXR0YWNobWVudHMsIEJvb2xlYW4pO1xuLy8gXHRcdGNoZWNrKHNlbGVjdGVkVXNlcnMsIEFycmF5KTtcbi8vIFx0XHRjaGVjayhhY3Rpb25fdHlwZSwgTWF0Y2guT25lT2YoJ2ZvcndhcmQnLCAnZGlzdHJpYnV0ZScpKTtcblxuLy8gXHRcdGlmIChhY3Rpb25fdHlwZSA9PSBcImRpc3RyaWJ1dGVcIilcbi8vIFx0XHRcdGNoZWNrKGZyb21fYXBwcm92ZV9pZCwgU3RyaW5nKTtcblxuLy8gXHRcdHZhciBpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZShpbnN0YW5jZV9pZCk7XG4vLyBcdFx0dmFyIG9sZF9zcGFjZV9pZCA9IGlucy5zcGFjZTtcblxuLy8gXHRcdHZhciBmbG93ID0gZGIuZmxvd3MuZmluZE9uZShmbG93X2lkKTtcblxuLy8gXHRcdHZhciBzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHNwYWNlX2lkKTtcblxuLy8gXHRcdGlmICghaW5zIHx8ICFmbG93IHx8ICFzcGFjZSkge1xuLy8gXHRcdFx0dGhyb3cgbmV3IE1ldGVvci5FcnJvcigncGFyYW1zIGVycm9yIScsICdyZWNvcmQgbm90IGV4aXN0cyEnKTtcbi8vIFx0XHR9XG5cbi8vIFx0XHR2YXIgZm9yd2FyZF91c2VycyA9IG5ldyBBcnJheTtcbi8vIFx0XHRpZiAoXy5pc0VtcHR5KHNlbGVjdGVkVXNlcnMpKSB7XG4vLyBcdFx0XHRmb3J3YXJkX3VzZXJzID0gW2N1cnJlbnRfdXNlcl9pZF07XG4vLyBcdFx0fSBlbHNlIHtcbi8vIFx0XHRcdGZvcndhcmRfdXNlcnMgPSBzZWxlY3RlZFVzZXJzO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIOagoemqjOWIhuWPkeWvueixoeaYr+WQpuacieWIhuWPkea1geeoi+eahOaPkOS6pOadg+mZkFxuLy8gXHRcdHZhciBub19wZXJtaXNzaW9uX3VzZXJfaWRzID0gbmV3IEFycmF5KCk7XG4vLyBcdFx0Xy5lYWNoKGZvcndhcmRfdXNlcnMsIGZ1bmN0aW9uICh1aWQpIHtcbi8vIFx0XHRcdHZhciBwZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25NYW5hZ2VyLmdldEZsb3dQZXJtaXNzaW9ucyhmbG93X2lkLCB1aWQpO1xuLy8gXHRcdFx0aWYgKCFwZXJtaXNzaW9ucy5pbmNsdWRlcyhcImFkZFwiKSkge1xuLy8gXHRcdFx0XHQvLyB0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKCdlcnJvciEnLCBcIuivpeeUs+ivt+S6uuayoeacieaPkOS6pOatpOeUs+ivt+WNleeahOadg+mZkOOAglwiKVxuLy8gXHRcdFx0XHRub19wZXJtaXNzaW9uX3VzZXJfaWRzLnB1c2godWlkKTtcbi8vIFx0XHRcdH1cbi8vIFx0XHR9KVxuLy8gXHRcdGlmICghXy5pc0VtcHR5KG5vX3Blcm1pc3Npb25fdXNlcl9pZHMpKSB7XG4vLyBcdFx0XHR2YXIgbm9fcGVybWlzc2lvbl91c2Vyc19uYW1lID0gbmV3IEFycmF5KCk7XG4vLyBcdFx0XHRkYi51c2Vycy5maW5kKHtcbi8vIFx0XHRcdFx0X2lkOiB7XG4vLyBcdFx0XHRcdFx0JGluOiBub19wZXJtaXNzaW9uX3VzZXJfaWRzXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0ZmllbGRzOiB7XG4vLyBcdFx0XHRcdFx0bmFtZTogMVxuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9KS5mb3JFYWNoKGZ1bmN0aW9uICh1KSB7XG4vLyBcdFx0XHRcdG5vX3Blcm1pc3Npb25fdXNlcnNfbmFtZS5wdXNoKHUubmFtZSk7XG4vLyBcdFx0XHR9KTtcbi8vIFx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoJ25vX3Blcm1pc3Npb24nLCBcIuivpeaPkOS6pOS6uuayoeacieaPkOS6pOatpOeUs+ivt+WNleeahOadg+mZkOOAglwiLCBub19wZXJtaXNzaW9uX3VzZXJzX25hbWUuam9pbignLCcpKVxuLy8gXHRcdH1cblxuLy8gXHRcdHZhciBuZXdfaW5zX2lkcyA9IG5ldyBBcnJheTtcblxuLy8gXHRcdHZhciBjdXJyZW50X3RyYWNlID0gbnVsbDtcbi8vIFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gXCJkaXN0cmlidXRlXCIpIHtcbi8vIFx0XHRcdF8uZWFjaChpbnMudHJhY2VzLCBmdW5jdGlvbiAodCkge1xuLy8gXHRcdFx0XHRpZiAoIWN1cnJlbnRfdHJhY2UpIHtcbi8vIFx0XHRcdFx0XHRfLmVhY2godC5hcHByb3ZlcywgZnVuY3Rpb24gKGEpIHtcbi8vIFx0XHRcdFx0XHRcdGlmICghY3VycmVudF90cmFjZSkge1xuLy8gXHRcdFx0XHRcdFx0XHRpZiAoYS5faWQgPT0gZnJvbV9hcHByb3ZlX2lkKVxuLy8gXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRfdHJhY2UgPSB0O1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pXG4vLyBcdFx0fSBlbHNlIHtcbi8vIFx0XHRcdGN1cnJlbnRfdHJhY2UgPSBfLmxhc3QoaW5zLnRyYWNlcyk7XG4vLyBcdFx0fVxuLy8gXHRcdHZhciBjdXJyZW50X3RyYWNlX2lkID0gY3VycmVudF90cmFjZS5faWQ7XG4vLyBcdFx0dmFyIGZvcndhcmRfYXBwcm92ZXMgPSBbXTtcbi8vIFx0XHR2YXIgZnJvbV91c2VyX25hbWUgPSBkYi51c2Vycy5maW5kT25lKGN1cnJlbnRfdXNlcl9pZCwge1xuLy8gXHRcdFx0ZmllbGRzOiB7XG4vLyBcdFx0XHRcdG5hbWU6IDFcbi8vIFx0XHRcdH1cbi8vIFx0XHR9KS5uYW1lXG4vLyBcdFx0dmFyIHNldF9vYmogPSBuZXcgT2JqZWN0O1xuXG4vLyBcdFx0Ly8g6K6h566XdmFsdWVzXG4vLyBcdFx0dmFyIG9sZF92YWx1ZXMgPSBpbnMudmFsdWVzLFxuLy8gXHRcdFx0bmV3X3ZhbHVlcyA9IHt9O1xuLy8gXHRcdHZhciBmb3JtID0gZGIuZm9ybXMuZmluZE9uZShmbG93LmZvcm0pO1xuLy8gXHRcdHZhciBmaWVsZHMgPSBmb3JtLmN1cnJlbnQuZmllbGRzIHx8IFtdO1xuXG4vLyBcdFx0dmFyIG9sZF9mb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnMuZm9ybSk7XG4vLyBcdFx0dmFyIG9sZF9mb3JtX3ZlcnNpb24gPSBpbnMuZm9ybV92ZXJzaW9uLFxuLy8gXHRcdFx0b2xkX2ZpZWxkcyA9IFtdLFxuLy8gXHRcdFx0Y29tbW9uX2ZpZWxkcyA9IFtdO1xuXG4vLyBcdFx0dmFyIHNlbGVjdF90b19pbnB1dF9maWVsZHMgPSBbXTtcblxuLy8gXHRcdGlmIChvbGRfZm9ybS5jdXJyZW50Ll9pZCA9PSBvbGRfZm9ybV92ZXJzaW9uKSB7XG4vLyBcdFx0XHRvbGRfZmllbGRzID0gb2xkX2Zvcm0uY3VycmVudC5maWVsZHM7XG4vLyBcdFx0fSBlbHNlIHtcbi8vIFx0XHRcdGlmIChvbGRfZm9ybS5oaXN0b3J5cykge1xuLy8gXHRcdFx0XHRvbGRfZm9ybS5oaXN0b3J5cy5mb3JFYWNoKGZ1bmN0aW9uIChoKSB7XG4vLyBcdFx0XHRcdFx0aWYgKGguX2lkID09IG9sZF9mb3JtX3ZlcnNpb24pXG4vLyBcdFx0XHRcdFx0XHRvbGRfZmllbGRzID0gaC5maWVsZHM7XG4vLyBcdFx0XHRcdH0pXG4vLyBcdFx0XHR9XG4vLyBcdFx0fVxuXG4vLyBcdFx0ZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4vLyBcdFx0XHR2YXIgZXhpc3RzX2ZpZWxkID0gXy5maW5kKG9sZF9maWVsZHMsIGZ1bmN0aW9uIChmKSB7XG4vLyBcdFx0XHRcdHJldHVybiBmLnR5cGUgPT0gZmllbGQudHlwZSAmJiBmLmNvZGUgPT0gZmllbGQuY29kZTtcbi8vIFx0XHRcdH0pXG4vLyBcdFx0XHRpZiAoZXhpc3RzX2ZpZWxkKVxuLy8gXHRcdFx0XHRjb21tb25fZmllbGRzLnB1c2goZmllbGQpO1xuLy8gXHRcdFx0dmFyIHNlbGVjdF9pbnB1dF9maWVsZCA9IF8uZmluZChvbGRfZmllbGRzLCBmdW5jdGlvbiAoZikge1xuLy8gXHRcdFx0XHRyZXR1cm4gZi50eXBlID09ICdzZWxlY3QnICYmIGZpZWxkLnR5cGUgPT0gJ2lucHV0JyAmJiBmLmNvZGUgPT0gZmllbGQuY29kZTtcbi8vIFx0XHRcdH0pXG4vLyBcdFx0XHRpZiAoc2VsZWN0X2lucHV0X2ZpZWxkKVxuLy8gXHRcdFx0XHRzZWxlY3RfdG9faW5wdXRfZmllbGRzLnB1c2goc2VsZWN0X2lucHV0X2ZpZWxkKTtcbi8vIFx0XHR9KVxuXG4vLyBcdFx0c2VsZWN0X3RvX2lucHV0X2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuLy8gXHRcdFx0aWYgKG9sZF92YWx1ZXNbZmllbGQuY29kZV0pIHtcbi8vIFx0XHRcdFx0bmV3X3ZhbHVlc1tmaWVsZC5jb2RlXSA9IG9sZF92YWx1ZXNbZmllbGQuY29kZV07XG4vLyBcdFx0XHR9XG4vLyBcdFx0fSlcblxuLy8gXHRcdGNvbW1vbl9maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbi8vIFx0XHRcdGlmIChmaWVsZC50eXBlID09ICdzZWN0aW9uJykge1xuLy8gXHRcdFx0XHRpZiAoZmllbGQuZmllbGRzKSB7XG4vLyBcdFx0XHRcdFx0ZmllbGQuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbi8vIFx0XHRcdFx0XHRcdC8vIOi3qOW3peS9nOWMuui9rOWPkeS4jeWkjeWItumAieS6uumAiee7hFxuLy8gXHRcdFx0XHRcdFx0aWYgKFsnZ3JvdXAnLCAndXNlciddLmluY2x1ZGVzKGYudHlwZSkgJiYgb2xkX3NwYWNlX2lkICE9IHNwYWNlX2lkKSB7XG4vLyBcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdHZhciBrZXkgPSBmLmNvZGU7XG4vLyBcdFx0XHRcdFx0XHR2YXIgb2xkX3YgPSBvbGRfdmFsdWVzW2tleV07XG4vLyBcdFx0XHRcdFx0XHRpZiAob2xkX3YpIHtcbi8vIFx0XHRcdFx0XHRcdFx0dmFyIGZpZWxkT3B0aW9ucyA9IGYub3B0aW9ucyAmJiBmLm9wdGlvbnMuc3BsaXQgJiYgZi5vcHRpb25zLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbihuKXtcbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogaXRlbVNwbGl0c1swXSxcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbi8vIFx0XHRcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdFx0XHQvLyDmoKHpqowg5Y2V6YCJ77yM5aSa6YCJ77yM5LiL5ouJ5qGGIOWtl+auteWAvOaYr+WQpuWcqOaWsOihqOWNleWvueW6lOWtl+auteeahOWPr+mAieWAvOiMg+WbtOWGhVxuLy8gXHRcdFx0XHRcdFx0XHRpZiAoZi50eXBlID09ICdzZWxlY3QnIHx8IGYudHlwZSA9PSAncmFkaW8nKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0dmFyIHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoZnVuY3Rpb24oaXRlbSkge1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWUgPT09IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdFx0XHRcdGlmKCFzZWxlY3RlZE9wdGlvbil7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRcdFx0aWYgKGYudHlwZSA9PSAnbXVsdGlTZWxlY3QnKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0dmFyIG9sZF9tdWx0aVNlbGVjdGVkID0gb2xkX3Yuc3BsaXQoJywnKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3X211bHRpU2VsZWN0ZWQgPSBfLmludGVyc2VjdGlvbihmaWVsZE9wdGlvbnMubWFwKGZ1bmN0aW9uKG4peyByZXR1cm4gbi52YWx1ZTsgfSksIG9sZF9tdWx0aVNlbGVjdGVkKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRvbGRfdiA9IG5ld19tdWx0aVNlbGVjdGVkLmpvaW4oJywnKTtcbi8vIFx0XHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRcdG5ld192YWx1ZXNba2V5XSA9IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PSAndGFibGUnKSB7XG4vLyBcdFx0XHRcdGlmICghXy5pc0VtcHR5KG9sZF92YWx1ZXNbZmllbGQuY29kZV0pKSB7XG4vLyBcdFx0XHRcdFx0bmV3X3ZhbHVlc1tmaWVsZC5jb2RlXSA9IG5ldyBBcnJheTtcbi8vIFx0XHRcdFx0XHRvbGRfdmFsdWVzW2ZpZWxkLmNvZGVdLmZvckVhY2goZnVuY3Rpb24gKG9sZF90YWJsZV9yb3dfdmFsdWVzKSB7XG4vLyBcdFx0XHRcdFx0XHR2YXIgbmV3X3RhYmxlX3Jvd192YWx1ZXMgPSB7fTtcblxuLy8gXHRcdFx0XHRcdFx0aWYgKCFfLmlzRW1wdHkoZmllbGQuZmllbGRzKSkge1xuLy8gXHRcdFx0XHRcdFx0XHRmaWVsZC5maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZikge1xuLy8gXHRcdFx0XHRcdFx0XHRcdC8vIOi3qOW3peS9nOWMuui9rOWPkeS4jeWkjeWItumAieS6uumAiee7hFxuLy8gXHRcdFx0XHRcdFx0XHRcdGlmIChbJ2dyb3VwJywgJ3VzZXInXS5pbmNsdWRlcyhmLnR5cGUpICYmIG9sZF9zcGFjZV9pZCAhPSBzcGFjZV9pZCkge1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIga2V5ID0gZi5jb2RlO1xuLy8gXHRcdFx0XHRcdFx0XHRcdHZhciBvbGRfdiA9IG9sZF90YWJsZV9yb3dfdmFsdWVzW2tleV07XG4vLyBcdFx0XHRcdFx0XHRcdFx0aWYgKG9sZF92KSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmllbGRPcHRpb25zID0gZi5vcHRpb25zICYmIGYub3B0aW9ucy5zcGxpdCAmJiBmLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pe1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBpdGVtU3BsaXRzWzBdLFxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHQvLyDmoKHpqowg5Y2V6YCJ77yM5aSa6YCJ77yM5LiL5ouJ5qGGIOWtl+auteWAvOaYr+WQpuWcqOaWsOihqOWNleWvueW6lOWtl+auteeahOWPr+mAieWAvOiMg+WbtOWGhVxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGYudHlwZSA9PSAnc2VsZWN0JyB8fCBmLnR5cGUgPT0gJ3JhZGlvJykge1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWUgPT09IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoIXNlbGVjdGVkT3B0aW9uKXtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGYudHlwZSA9PSAnbXVsdGlTZWxlY3QnKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBvbGRfbXVsdGlTZWxlY3RlZCA9IG9sZF92LnNwbGl0KCcsJyk7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBuZXdfbXVsdGlTZWxlY3RlZCA9IF8uaW50ZXJzZWN0aW9uKGZpZWxkT3B0aW9ucy5tYXAoZnVuY3Rpb24obil7IHJldHVybiBuLnZhbHVlOyB9KSwgb2xkX211bHRpU2VsZWN0ZWQpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRvbGRfdiA9IG5ld19tdWx0aVNlbGVjdGVkLmpvaW4oJywnKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0bmV3X3RhYmxlX3Jvd192YWx1ZXNba2V5XSA9IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdFx0aWYgKG9sZF90YWJsZV9yb3dfdmFsdWVzLl9pZCkge1xuLy8gXHRcdFx0XHRcdFx0XHRuZXdfdGFibGVfcm93X3ZhbHVlcy5faWQgPSBuZXcgTW9uZ28uT2JqZWN0SUQoKS5fc3RyO1xuLy8gXHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRpZiAoIV8uaXNFbXB0eShuZXdfdGFibGVfcm93X3ZhbHVlcykpIHtcbi8vIFx0XHRcdFx0XHRcdFx0bmV3X3ZhbHVlc1tmaWVsZC5jb2RlXS5wdXNoKG5ld190YWJsZV9yb3dfdmFsdWVzKTtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHR9KVxuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0XHQvLyDot6jlt6XkvZzljLrovazlj5HkuI3lpI3liLbpgInkurrpgInnu4Rcbi8vIFx0XHRcdFx0aWYgKFsnZ3JvdXAnLCAndXNlciddLmluY2x1ZGVzKGZpZWxkLnR5cGUpICYmIG9sZF9zcGFjZV9pZCAhPSBzcGFjZV9pZCkge1xuLy8gXHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0XHR2YXIga2V5ID0gZmllbGQuY29kZTtcbi8vIFx0XHRcdFx0dmFyIG9sZF92ID0gb2xkX3ZhbHVlc1trZXldO1xuLy8gXHRcdFx0XHRpZiAob2xkX3YpIHtcbi8vIFx0XHRcdFx0XHQvLyDmoKHpqowg5Y2V6YCJ77yM5aSa6YCJ77yM5LiL5ouJ5qGGIOWtl+auteWAvOaYr+WQpuWcqOaWsOihqOWNleWvueW6lOWtl+auteeahOWPr+mAieWAvOiMg+WbtOWGhVxuLy8gXHRcdFx0XHRcdHZhciBmaWVsZE9wdGlvbnMgPSBmaWVsZC5vcHRpb25zICYmIGZpZWxkLm9wdGlvbnMuc3BsaXQgJiYgZmllbGQub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24obil7XG4vLyBcdFx0XHRcdFx0XHR2YXIgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuLy8gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8vIFx0XHRcdFx0XHRcdFx0bGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG4vLyBcdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHR9KTtcbi8vIFx0XHRcdFx0XHRpZiAoZmllbGQudHlwZSA9PSAnc2VsZWN0JyB8fCBmaWVsZC50eXBlID09ICdyYWRpbycpIHtcbi8vIFx0XHRcdFx0XHRcdHZhciBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0pIHtcbi8vIFx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWUgPT09IG9sZF92O1xuLy8gXHRcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdFx0XHRpZighc2VsZWN0ZWRPcHRpb24pe1xuLy8gXHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT0gJ211bHRpU2VsZWN0Jykge1xuLy8gXHRcdFx0XHRcdFx0dmFyIG9sZF9tdWx0aVNlbGVjdGVkID0gb2xkX3Yuc3BsaXQoJywnKTtcbi8vIFx0XHRcdFx0XHRcdHZhciBuZXdfbXVsdGlTZWxlY3RlZCA9IF8uaW50ZXJzZWN0aW9uKGZpZWxkT3B0aW9ucy5tYXAoZnVuY3Rpb24obil7IHJldHVybiBuLnZhbHVlOyB9KSwgb2xkX211bHRpU2VsZWN0ZWQpO1xuLy8gXHRcdFx0XHRcdFx0b2xkX3YgPSBuZXdfbXVsdGlTZWxlY3RlZC5qb2luKCcsJyk7XG4vLyBcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0bmV3X3ZhbHVlc1trZXldID0gb2xkX3Y7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH1cblxuLy8gXHRcdH0pXG5cbi8vIFx0XHQvL+WmguaenOaYr+WIhuWPke+8jOWImXZhbHVl5Lit55qEcmVjb3JkX25lZWTjgIFGT05EU0lE5LiN6ZyA6KaB5YiG5Y+R5Yiw5paw55Sz6K+35Y2V5LitXG4vLyBcdFx0aWYgKGFjdGlvbl90eXBlID09PSAnZGlzdHJpYnV0ZScpIHtcbi8vIFx0XHRcdGRlbGV0ZSBuZXdfdmFsdWVzLnJlY29yZF9uZWVkO1xuLy8gXHRcdFx0ZGVsZXRlIG5ld192YWx1ZXMuRk9ORFNJRDtcbi8vIFx0XHR9XG5cbi8vIFx0XHQvLyDorqHnrpfnlLPor7fljZXmoIfpophcbi8vIFx0XHR2YXIgaW5zdGFuY2VfbmFtZSA9IFwiXCI7XG4vLyBcdFx0dmFyIG5hbWVfZm9ydW1sYSA9IGZvcm0uY3VycmVudC5uYW1lX2ZvcnVtbGE7XG4vLyBcdFx0aWYgKG5hbWVfZm9ydW1sYSkge1xuLy8gXHRcdFx0dHJ5IHtcbi8vIFx0XHRcdFx0dmFyIGlzY3JpcHQgPSBuYW1lX2ZvcnVtbGEucmVwbGFjZSgvXFx7L2csIFwiKG5ld192YWx1ZXNbJ1wiKS5yZXBsYWNlKC9cXH0vZywgXCInXSB8fCAnJylcIik7XG4vLyBcdFx0XHRcdHZhciByZXYgPSBldmFsKGlzY3JpcHQpO1xuLy8gXHRcdFx0XHRpbnN0YW5jZV9uYW1lID0gcmV2IHx8IGZsb3cubmFtZTtcbi8vIFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG4vLyBcdFx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoJ2NhY3VsYXRlX2luc3RhbmNlX25hbWUnLCBcIuiuoeeul+eUs+ivt+WNleagh+mimOWHuumUmeivt+ajgOafpeihqOWNleagh+mimOiEmuacrOOAglwiKTtcbi8vIFx0XHRcdH1cbi8vIFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0aW5zdGFuY2VfbmFtZSA9IGZsb3cubmFtZTtcbi8vIFx0XHR9XG5cbi8vIFx0XHQvLyBpbnN0YW5jZeS4reiusOW9leW9k+WJjeatpemqpOWQjeensCAjMTMxNFxuLy8gXHRcdHZhciBzdGFydF9zdGVwID0gXy5maW5kKGZsb3cuY3VycmVudC5zdGVwcywgZnVuY3Rpb24gKHN0ZXApIHtcbi8vIFx0XHRcdHJldHVybiBzdGVwLnN0ZXBfdHlwZSA9PSAnc3RhcnQnO1xuLy8gXHRcdH0pXG5cbi8vIFx0XHQvLyDmtYHnqIvovazlj5Hlip/og73kv67mlLnkuLrvvIzlvIDlp4voioLngrnmnInnvJbovpHmnYPpmZDnmoTlrZfmrrXnmoTlgLzov5vooYzlpI3liLbvvIzml6DnvJbovpHmnYPpmZDnmoTlrZfmrrXlgLzkuI3ov5vooYzlpI3liLYgIzM3NDhcbi8vIFx0XHRpZiAoYWN0aW9uX3R5cGUgPT09ICdmb3J3YXJkJykge1xuLy8gXHRcdFx0bmV3X3ZhbHVlcyA9IHV1Zmxvd01hbmFnZXIuZ2V0QXBwcm92ZVZhbHVlcyhuZXdfdmFsdWVzLCBzdGFydF9zdGVwLnBlcm1pc3Npb25zLCBmbG93LmZvcm0sIGZsb3cuY3VycmVudC5mb3JtX3ZlcnNpb24pO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIOaWsOW7uueUs+ivt+WNleaXtu+8jGluc3RhbmNlc+iusOW9lea1geeoi+WQjeensOOAgea1geeoi+WIhuexu+WQjeensCAjMTMxM1xuLy8gXHRcdHZhciBjYXRlZ29yeV9uYW1lID0gXCJcIjtcbi8vIFx0XHRpZiAoZm9ybS5jYXRlZ29yeSkge1xuLy8gXHRcdFx0dmFyIGNhdGVnb3J5ID0gdXVmbG93TWFuYWdlci5nZXRDYXRlZ29yeShmb3JtLmNhdGVnb3J5KTtcbi8vIFx0XHRcdGlmIChjYXRlZ29yeSlcbi8vIFx0XHRcdFx0Y2F0ZWdvcnlfbmFtZSA9IGNhdGVnb3J5Lm5hbWU7XG4vLyBcdFx0fVxuXG4vLyBcdFx0Xy5lYWNoKGZvcndhcmRfdXNlcnMsIGZ1bmN0aW9uICh1c2VyX2lkKSB7XG5cbi8vIFx0XHRcdHZhciB1c2VyX2luZm8gPSBkYi51c2Vycy5maW5kT25lKHVzZXJfaWQpO1xuXG4vLyBcdFx0XHR2YXIgc3BhY2VfdXNlciA9IGRiLnNwYWNlX3VzZXJzLmZpbmRPbmUoe1xuLy8gXHRcdFx0XHRzcGFjZTogc3BhY2VfaWQsXG4vLyBcdFx0XHRcdHVzZXI6IHVzZXJfaWRcbi8vIFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0ZmllbGRzOiB7XG4vLyBcdFx0XHRcdFx0b3JnYW5pemF0aW9uOiAxXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pO1xuLy8gXHRcdFx0dmFyIHNwYWNlX3VzZXJfb3JnX2luZm8gPSBkYi5vcmdhbml6YXRpb25zLmZpbmRPbmUoe1xuLy8gXHRcdFx0XHRfaWQ6IHNwYWNlX3VzZXIub3JnYW5pemF0aW9uXG4vLyBcdFx0XHR9LCB7XG4vLyBcdFx0XHRcdGZpZWxkczoge1xuLy8gXHRcdFx0XHRcdG5hbWU6IDEsXG4vLyBcdFx0XHRcdFx0ZnVsbG5hbWU6IDFcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSk7XG5cbi8vIFx0XHRcdHZhciBub3cgPSBuZXcgRGF0ZSgpO1xuLy8gXHRcdFx0dmFyIGluc19vYmogPSB7fTtcblxuLy8gXHRcdFx0dmFyIGFnZW50ID0gdXVmbG93TWFuYWdlci5nZXRBZ2VudChzcGFjZV9pZCwgdXNlcl9pZCk7XG4vLyBcdFx0XHR2YXIgaGFuZGxlcl9pZCA9IHVzZXJfaWQ7XG4vLyBcdFx0XHR2YXIgaGFuZGxlcl9pbmZvID0gdXNlcl9pbmZvO1xuLy8gXHRcdFx0dmFyIGhhbmRsZXJfc3BhY2VfdXNlciA9IHNwYWNlX3VzZXI7XG4vLyBcdFx0XHR2YXIgaGFuZGxlcl9vcmdfaW5mbyA9IHNwYWNlX3VzZXJfb3JnX2luZm87XG4vLyBcdFx0XHRpZiAoYWdlbnQpIHtcbi8vIFx0XHRcdFx0aGFuZGxlcl9pZCA9IGFnZW50O1xuLy8gXHRcdFx0XHRoYW5kbGVyX2luZm8gPSBkYi51c2Vycy5maW5kT25lKGFnZW50KTtcbi8vIFx0XHRcdFx0aGFuZGxlcl9zcGFjZV91c2VyID0gdXVmbG93TWFuYWdlci5nZXRTcGFjZVVzZXIoc3BhY2VfaWQsIGFnZW50KTtcbi8vIFx0XHRcdFx0aGFuZGxlcl9vcmdfaW5mbyA9IHV1Zmxvd01hbmFnZXIuZ2V0U3BhY2VVc2VyT3JnSW5mbyhoYW5kbGVyX3NwYWNlX3VzZXIpO1xuLy8gXHRcdFx0fVxuLy8gXHRcdFx0aW5zX29iai5faWQgPSBkYi5pbnN0YW5jZXMuX21ha2VOZXdJRCgpO1xuLy8gXHRcdFx0aW5zX29iai5zcGFjZSA9IHNwYWNlX2lkO1xuLy8gXHRcdFx0aW5zX29iai5mbG93ID0gZmxvd19pZDtcbi8vIFx0XHRcdGluc19vYmouZmxvd192ZXJzaW9uID0gZmxvdy5jdXJyZW50Ll9pZDtcbi8vIFx0XHRcdGluc19vYmouZm9ybSA9IGZsb3cuZm9ybTtcbi8vIFx0XHRcdGluc19vYmouZm9ybV92ZXJzaW9uID0gZmxvdy5jdXJyZW50LmZvcm1fdmVyc2lvbjtcbi8vIFx0XHRcdGluc19vYmoubmFtZSA9IGluc3RhbmNlX25hbWU7XG4vLyBcdFx0XHRpbnNfb2JqLnN1Ym1pdHRlciA9IGhhbmRsZXJfaWQ7XG4vLyBcdFx0XHRpbnNfb2JqLnN1Ym1pdHRlcl9uYW1lID0gaGFuZGxlcl9pbmZvLm5hbWU7XG4vLyBcdFx0XHRpbnNfb2JqLmFwcGxpY2FudCA9IHVzZXJfaWQ7XG4vLyBcdFx0XHRpbnNfb2JqLmFwcGxpY2FudF9uYW1lID0gdXNlcl9pbmZvLm5hbWU7XG4vLyBcdFx0XHRpbnNfb2JqLmFwcGxpY2FudF9vcmdhbml6YXRpb24gPSBzcGFjZV91c2VyLm9yZ2FuaXphdGlvbjtcbi8vIFx0XHRcdGluc19vYmouYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lID0gc3BhY2VfdXNlcl9vcmdfaW5mby5uYW1lO1xuLy8gXHRcdFx0aW5zX29iai5hcHBsaWNhbnRfb3JnYW5pemF0aW9uX2Z1bGxuYW1lID0gc3BhY2VfdXNlcl9vcmdfaW5mby5mdWxsbmFtZTtcbi8vIFx0XHRcdGluc19vYmouc3RhdGUgPSBcImRyYWZ0XCI7XG4vLyBcdFx0XHRpbnNfb2JqLmNvZGUgPSBcIlwiO1xuLy8gXHRcdFx0aW5zX29iai5pc19hcmNoaXZlZCA9IGZhbHNlO1xuLy8gXHRcdFx0aW5zX29iai5pc19kZWxldGVkID0gZmFsc2U7XG4vLyBcdFx0XHRpbnNfb2JqLmNyZWF0ZWQgPSBub3c7XG4vLyBcdFx0XHRpbnNfb2JqLmNyZWF0ZWRfYnkgPSBjdXJyZW50X3VzZXJfaWQ7XG4vLyBcdFx0XHRpbnNfb2JqLm1vZGlmaWVkID0gbm93O1xuLy8gXHRcdFx0aW5zX29iai5tb2RpZmllZF9ieSA9IGN1cnJlbnRfdXNlcl9pZDtcbi8vIFx0XHRcdGluc19vYmouaW5ib3hfdXNlcnMgPSBbaGFuZGxlcl9pZF07XG4vLyBcdFx0XHRpbnNfb2JqLnZhbHVlcyA9IG5ld192YWx1ZXM7XG4vLyBcdFx0XHRpZiAoYWN0aW9uX3R5cGUgPT0gJ2Rpc3RyaWJ1dGUnKSB7XG4vLyBcdFx0XHRcdC8vIOino+WGs+WkmuasoeWIhuWPkeeci+S4jeWIsOato+aWh+OAgemZhOS7tumXrumimFxuLy8gXHRcdFx0XHRpZiAoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSkge1xuLy8gXHRcdFx0XHRcdGluc19vYmouZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlID0gaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZTtcbi8vIFx0XHRcdFx0fSBlbHNlIHtcbi8vIFx0XHRcdFx0XHRpbnNfb2JqLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSA9IGluc3RhbmNlX2lkO1xuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHRcdGluc19vYmouZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcyA9IF8uY2xvbmUoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMpIHx8IFtdO1xuLy8gXHRcdFx0XHRpbnNfb2JqLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMucHVzaChpbnN0YW5jZV9pZCk7XG5cbi8vIFx0XHRcdFx0aWYgKHJlbGF0ZWQpIHtcbi8vIFx0XHRcdFx0XHRpbnNfb2JqLnJlbGF0ZWRfaW5zdGFuY2VzID0gW2luc3RhbmNlX2lkXVxuLy8gXHRcdFx0XHR9XG5cbi8vIFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uX3R5cGUgPT0gJ2ZvcndhcmQnKSB7XG4vLyBcdFx0XHRcdGluc19vYmouZm9yd2FyZF9mcm9tX2luc3RhbmNlID0gaW5zdGFuY2VfaWRcbi8vIFx0XHRcdH1cblxuLy8gXHRcdFx0Ly8g5paw5bu6VHJhY2Vcbi8vIFx0XHRcdHZhciB0cmFjZV9vYmogPSB7fTtcbi8vIFx0XHRcdHRyYWNlX29iai5faWQgPSBuZXcgTW9uZ28uT2JqZWN0SUQoKS5fc3RyO1xuLy8gXHRcdFx0dHJhY2Vfb2JqLmluc3RhbmNlID0gaW5zX29iai5faWQ7XG4vLyBcdFx0XHR0cmFjZV9vYmouaXNfZmluaXNoZWQgPSBmYWxzZTtcblxuLy8gXHRcdFx0Ly8g5b2T5YmN5pyA5paw54mIZmxvd+S4reW8gOWni+iKgueCueeahHN0ZXBfaWRcbi8vIFx0XHRcdHZhciBzdGVwX2lkLCBzdGVwX25hbWUsIGNhbl9lZGl0X21haW5fYXR0YWNoLCBjYW5fZWRpdF9ub3JtYWxfYXR0YWNoO1xuLy8gXHRcdFx0Zmxvdy5jdXJyZW50LnN0ZXBzLmZvckVhY2goZnVuY3Rpb24gKHN0ZXApIHtcbi8vIFx0XHRcdFx0aWYgKHN0ZXAuc3RlcF90eXBlID09IFwic3RhcnRcIikge1xuLy8gXHRcdFx0XHRcdHN0ZXBfaWQgPSBzdGVwLl9pZDtcbi8vIFx0XHRcdFx0XHRzdGVwX25hbWUgPSBzdGVwLm5hbWU7XG4vLyBcdFx0XHRcdFx0Y2FuX2VkaXRfbWFpbl9hdHRhY2ggPSBzdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoO1xuLy8gXHRcdFx0XHRcdGNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPSBzdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2g7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pXG4vLyBcdFx0XHR0cmFjZV9vYmouc3RlcCA9IHN0ZXBfaWQ7XG4vLyBcdFx0XHR0cmFjZV9vYmouc3RhcnRfZGF0ZSA9IG5vdztcbi8vIFx0XHRcdHRyYWNlX29iai5uYW1lID0gc3RlcF9uYW1lO1xuXG4vLyBcdFx0XHQvLyDmlrDlu7pBcHByb3ZlXG4vLyBcdFx0XHR2YXIgYXBwcl9vYmogPSB7fTtcbi8vIFx0XHRcdGFwcHJfb2JqLl9pZCA9IG5ldyBNb25nby5PYmplY3RJRCgpLl9zdHI7XG4vLyBcdFx0XHRhcHByX29iai5pbnN0YW5jZSA9IGluc19vYmouX2lkO1xuLy8gXHRcdFx0YXBwcl9vYmoudHJhY2UgPSB0cmFjZV9vYmouX2lkO1xuLy8gXHRcdFx0YXBwcl9vYmouaXNfZmluaXNoZWQgPSBmYWxzZTtcbi8vIFx0XHRcdGFwcHJfb2JqLnVzZXIgPSB1c2VyX2lkO1xuLy8gXHRcdFx0YXBwcl9vYmoudXNlcl9uYW1lID0gdXNlcl9pbmZvLm5hbWU7XG4vLyBcdFx0XHRhcHByX29iai5oYW5kbGVyID0gaGFuZGxlcl9pZDtcbi8vIFx0XHRcdGFwcHJfb2JqLmhhbmRsZXJfbmFtZSA9IGhhbmRsZXJfaW5mby5uYW1lO1xuLy8gXHRcdFx0YXBwcl9vYmouaGFuZGxlcl9vcmdhbml6YXRpb24gPSBoYW5kbGVyX3NwYWNlX3VzZXIub3JnYW5pemF0aW9uO1xuLy8gXHRcdFx0YXBwcl9vYmouaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZSA9IGhhbmRsZXJfb3JnX2luZm8ubmFtZTtcbi8vIFx0XHRcdGFwcHJfb2JqLmhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lID0gaGFuZGxlcl9vcmdfaW5mby5mdWxsbmFtZTtcbi8vIFx0XHRcdGFwcHJfb2JqLnR5cGUgPSBcImRyYWZ0XCI7XG4vLyBcdFx0XHRhcHByX29iai5zdGFydF9kYXRlID0gbm93O1xuLy8gXHRcdFx0YXBwcl9vYmoucmVhZF9kYXRlID0gbm93O1xuLy8gXHRcdFx0YXBwcl9vYmouaXNfcmVhZCA9IGZhbHNlO1xuLy8gXHRcdFx0YXBwcl9vYmouaXNfZXJyb3IgPSBmYWxzZTtcblxuLy8gXHRcdFx0YXBwcl9vYmoudmFsdWVzID0gbmV3X3ZhbHVlcztcblxuLy8gXHRcdFx0aWYgKGFnZW50KSB7XG4vLyBcdFx0XHRcdGFwcHJfb2JqLmFnZW50ID0gYWdlbnQ7XG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdHRyYWNlX29iai5hcHByb3ZlcyA9IFthcHByX29ial07XG4vLyBcdFx0XHRpbnNfb2JqLnRyYWNlcyA9IFt0cmFjZV9vYmpdO1xuXG4vLyBcdFx0XHRpZiAoZmxvdy5hdXRvX3JlbWluZCA9PSB0cnVlKVxuLy8gXHRcdFx0XHRpbnNfb2JqLmF1dG9fcmVtaW5kID0gdHJ1ZTtcblxuLy8gXHRcdFx0aW5zX29iai5jdXJyZW50X3N0ZXBfbmFtZSA9IHN0YXJ0X3N0ZXAubmFtZTtcblxuLy8gXHRcdFx0aW5zX29iai5mbG93X25hbWUgPSBmbG93Lm5hbWU7XG4vLyBcdFx0XHRpZiAoY2F0ZWdvcnlfbmFtZSkge1xuLy8gXHRcdFx0XHRpbnNfb2JqLmNhdGVnb3J5X25hbWUgPSBjYXRlZ29yeS5uYW1lO1xuLy8gXHRcdFx0XHRpbnNfb2JqLmNhdGVnb3J5ID0gY2F0ZWdvcnkuX2lkO1xuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHRuZXdfaW5zX2lkID0gZGIuaW5zdGFuY2VzLmluc2VydChpbnNfb2JqKTtcblxuLy8gXHRcdFx0Ly8g5aSN5Yi26ZmE5Lu2XG4vLyBcdFx0XHR2YXIgY29sbGVjdGlvbiA9IGNmcy5pbnN0YW5jZXM7XG5cbi8vIFx0XHRcdC8v5bCG5Y6f6KGo5Y2V5YaF5a655a2Y5YKo5Li656ys5LiA5Liq6ZmE5Lu2XG4vLyBcdFx0XHRpZiAoaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50KSB7XG4vLyBcdFx0XHRcdC8vIHRyeSB7XG5cbi8vIFx0XHRcdFx0aW5zdGFuY2VIdG1sID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCh1c2VyX2luZm8sIHNwYWNlX2lkLCBpbnMsIHtcbi8vIFx0XHRcdFx0XHRhYnNvbHV0ZTogdHJ1ZSxcbi8vIFx0XHRcdFx0XHRzaG93VHJhY2U6IHRydWVcbi8vIFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0dmFyIGluc3RhbmNlRmlsZSA9IG5ldyBGUy5GaWxlKCk7XG4vLyBcdFx0XHRcdGluc3RhbmNlRmlsZS5hdHRhY2hEYXRhKEJ1ZmZlci5mcm9tKGluc3RhbmNlSHRtbCwgXCJ1dGYtOFwiKSwge1xuLy8gXHRcdFx0XHRcdHR5cGU6IFwidGV4dC9odG1sXCJcbi8vIFx0XHRcdFx0fSwgZnVuY3Rpb24gKGVycm9yKSB7XG4vLyBcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG4vLyBcdFx0XHRcdFx0XHR0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKGVycm9yLmVycm9yLCBlcnJvci5yZWFzb24pO1xuLy8gXHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdGluc3RhbmNlRmlsZS5uYW1lKGlucy5uYW1lICsgXCIuaHRtbFwiKTtcbi8vIFx0XHRcdFx0XHRpbnN0YW5jZUZpbGUuc2l6ZShpbnN0YW5jZUh0bWwubGVuZ3RoKTtcblxuLy8gXHRcdFx0XHRcdHZhciBtZXRhZGF0YSA9IHtcbi8vIFx0XHRcdFx0XHRcdG93bmVyOiB1c2VyX2lkLFxuLy8gXHRcdFx0XHRcdFx0b3duZXJfbmFtZTogdXNlcl9pbmZvLm5hbWUsXG4vLyBcdFx0XHRcdFx0XHRzcGFjZTogc3BhY2VfaWQsXG4vLyBcdFx0XHRcdFx0XHRpbnN0YW5jZTogbmV3X2luc19pZCxcbi8vIFx0XHRcdFx0XHRcdGFwcHJvdmU6IGFwcHJfb2JqLl9pZCxcbi8vIFx0XHRcdFx0XHRcdGN1cnJlbnQ6IHRydWVcbi8vIFx0XHRcdFx0XHR9O1xuLy8gXHRcdFx0XHRcdGluc3RhbmNlRmlsZS5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuLy8gXHRcdFx0XHRcdHZhciBmaWxlT2JqID0gY29sbGVjdGlvbi5pbnNlcnQoaW5zdGFuY2VGaWxlKTtcbi8vIFx0XHRcdFx0XHRmaWxlT2JqLnVwZGF0ZSh7XG4vLyBcdFx0XHRcdFx0XHQkc2V0OiB7XG4vLyBcdFx0XHRcdFx0XHRcdCdtZXRhZGF0YS5wYXJlbnQnOiBmaWxlT2JqLl9pZFxuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pXG4vLyBcdFx0XHRcdH0pXG5cbi8vIFx0XHRcdFx0Ly8gfSBjYXRjaCAoZSkge1xuLy8gXHRcdFx0XHQvLyAgICAgY29uc29sZS5lcnJvcihlKTtcbi8vIFx0XHRcdFx0Ly8gfVxuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHRpZiAoaXNGb3J3YXJkQXR0YWNobWVudHMgJiYgYWN0aW9uX3R5cGUgPT0gJ2ZvcndhcmQnKSB7XG4vLyBcdFx0XHRcdHZhciBmaWxlcyA9IGNvbGxlY3Rpb24uZmluZCh7XG4vLyBcdFx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zdGFuY2VfaWQsXG4vLyBcdFx0XHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlXG4vLyBcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRmaWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4vLyBcdFx0XHRcdFx0Ly8g5Yik5pat5paw55qE5rWB56iL5byA5aeL6IqC54K55piv5ZCm5pyJ57yW6L6R5q2j5paH5ZKM57yW6L6R6ZmE5Lu25p2D6ZmQXG4vLyBcdFx0XHRcdFx0aWYgKGYubWV0YWRhdGEubWFpbiA9PSB0cnVlKSB7XG4vLyBcdFx0XHRcdFx0XHRpZiAoY2FuX2VkaXRfbWFpbl9hdHRhY2ggIT0gdHJ1ZSAmJiBjYW5fZWRpdF9ub3JtYWxfYXR0YWNoICE9IHRydWUpXG4vLyBcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0XHRcdFx0aWYgKGNhbl9lZGl0X25vcm1hbF9hdHRhY2ggIT0gdHJ1ZSlcbi8vIFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdHZhciBuZXdGaWxlID0gbmV3IEZTLkZpbGUoKTtcbi8vIFx0XHRcdFx0XHRuZXdGaWxlLmF0dGFjaERhdGEoZi5jcmVhdGVSZWFkU3RyZWFtKCdpbnN0YW5jZXMnKSwge1xuLy8gXHRcdFx0XHRcdFx0dHlwZTogZi5vcmlnaW5hbC50eXBlXG4vLyBcdFx0XHRcdFx0fSwgZnVuY3Rpb24gKGVycikge1xuLy8gXHRcdFx0XHRcdFx0aWYgKGVycikge1xuLy8gXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKGVyci5lcnJvciwgZXJyLnJlYXNvbik7XG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHRuZXdGaWxlLm5hbWUoZi5uYW1lKCkpO1xuLy8gXHRcdFx0XHRcdFx0bmV3RmlsZS5zaXplKGYuc2l6ZSgpKTtcbi8vIFx0XHRcdFx0XHRcdHZhciBtZXRhZGF0YSA9IHtcbi8vIFx0XHRcdFx0XHRcdFx0b3duZXI6IHVzZXJfaWQsXG4vLyBcdFx0XHRcdFx0XHRcdG93bmVyX25hbWU6IHVzZXJfaW5mby5uYW1lLFxuLy8gXHRcdFx0XHRcdFx0XHRzcGFjZTogc3BhY2VfaWQsXG4vLyBcdFx0XHRcdFx0XHRcdGluc3RhbmNlOiBuZXdfaW5zX2lkLFxuLy8gXHRcdFx0XHRcdFx0XHRhcHByb3ZlOiBhcHByX29iai5faWQsXG4vLyBcdFx0XHRcdFx0XHRcdGN1cnJlbnQ6IHRydWVcbi8vIFx0XHRcdFx0XHRcdH07XG4vLyBcdFx0XHRcdFx0XHRpZiAoZi5tZXRhZGF0YS5tYWluID09IHRydWUgJiYgY2FuX2VkaXRfbWFpbl9hdHRhY2ggPT0gdHJ1ZSkge1xuLy8gXHRcdFx0XHRcdFx0XHRtZXRhZGF0YS5tYWluID0gdHJ1ZTtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdG5ld0ZpbGUubWV0YWRhdGEgPSBtZXRhZGF0YTtcbi8vIFx0XHRcdFx0XHRcdHZhciBmaWxlT2JqID0gY29sbGVjdGlvbi5pbnNlcnQobmV3RmlsZSk7XG4vLyBcdFx0XHRcdFx0XHRmaWxlT2JqLnVwZGF0ZSh7XG4vLyBcdFx0XHRcdFx0XHRcdCRzZXQ6IHtcbi8vIFx0XHRcdFx0XHRcdFx0XHQnbWV0YWRhdGEucGFyZW50JzogZmlsZU9iai5faWRcbi8vIFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0XHR9KVxuXG4vLyBcdFx0XHRcdH0pXG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PT0gJ2Rpc3RyaWJ1dGUnKSB7XG4vLyBcdFx0XHRcdC8vIOe7meW9k+WJjeeahOeUs+ivt+WNleWinuWKoOWIhuWPkeiusOW9lVxuLy8gXHRcdFx0XHR2YXIgYXBwciA9IHtcbi8vIFx0XHRcdFx0XHQnX2lkJzogbmV3IE1vbmdvLk9iamVjdElEKCkuX3N0cixcbi8vIFx0XHRcdFx0XHQnaW5zdGFuY2UnOiBpbnN0YW5jZV9pZCxcbi8vIFx0XHRcdFx0XHQndHJhY2UnOiBjdXJyZW50X3RyYWNlX2lkLFxuLy8gXHRcdFx0XHRcdCdpc19maW5pc2hlZCc6IHRydWUsXG4vLyBcdFx0XHRcdFx0J3VzZXInOiB1c2VyX2lkLFxuLy8gXHRcdFx0XHRcdCd1c2VyX25hbWUnOiB1c2VyX2luZm8ubmFtZSxcbi8vIFx0XHRcdFx0XHQnaGFuZGxlcic6IHVzZXJfaWQsXG4vLyBcdFx0XHRcdFx0J2hhbmRsZXJfbmFtZSc6IHVzZXJfaW5mby5uYW1lLFxuLy8gXHRcdFx0XHRcdCdoYW5kbGVyX29yZ2FuaXphdGlvbic6IHNwYWNlX3VzZXIub3JnYW5pemF0aW9uLFxuLy8gXHRcdFx0XHRcdCdoYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lJzogc3BhY2VfdXNlcl9vcmdfaW5mby5uYW1lLFxuLy8gXHRcdFx0XHRcdCdoYW5kbGVyX29yZ2FuaXphdGlvbl9mdWxsbmFtZSc6IHNwYWNlX3VzZXJfb3JnX2luZm8uZnVsbG5hbWUsXG4vLyBcdFx0XHRcdFx0J3R5cGUnOiBhY3Rpb25fdHlwZSxcbi8vIFx0XHRcdFx0XHQnc3RhcnRfZGF0ZSc6IG5ldyBEYXRlKCksXG4vLyBcdFx0XHRcdFx0J2ZpbmlzaF9kYXRlJzogbmV3IERhdGUoKSxcbi8vIFx0XHRcdFx0XHQnaXNfcmVhZCc6IGZhbHNlLFxuLy8gXHRcdFx0XHRcdCdqdWRnZSc6ICdzdWJtaXR0ZWQnLFxuLy8gXHRcdFx0XHRcdCdmcm9tX3VzZXInOiBjdXJyZW50X3VzZXJfaWQsXG4vLyBcdFx0XHRcdFx0J2Zyb21fdXNlcl9uYW1lJzogZnJvbV91c2VyX25hbWUsXG4vLyBcdFx0XHRcdFx0J2ZvcndhcmRfc3BhY2UnOiBzcGFjZV9pZCxcbi8vIFx0XHRcdFx0XHQnZm9yd2FyZF9pbnN0YW5jZSc6IG5ld19pbnNfaWQsXG4vLyBcdFx0XHRcdFx0J2Rlc2NyaXB0aW9uJzogZGVzY3JpcHRpb24sXG4vLyBcdFx0XHRcdFx0J2Zyb21fYXBwcm92ZV9pZCc6IGZyb21fYXBwcm92ZV9pZFxuLy8gXHRcdFx0XHR9O1xuXG4vLyBcdFx0XHRcdGZvcndhcmRfYXBwcm92ZXMucHVzaChhcHByKTtcbi8vIFx0XHRcdH1cblxuLy8gXHRcdFx0bmV3X2luc19pZHMucHVzaChuZXdfaW5zX2lkKTtcbi8vIFx0XHRcdHB1c2hNYW5hZ2VyLnNlbmRfbWVzc2FnZV90b19zcGVjaWZ5VXNlcihcImN1cnJlbnRfdXNlclwiLCB1c2VyX2lkKTtcbi8vIFx0XHR9KVxuXG4vLyBcdFx0aWYgKCFfLmlzRW1wdHkoZm9yd2FyZF9hcHByb3ZlcykpIHtcbi8vIFx0XHRcdHNldF9vYmoubW9kaWZpZWQgPSBuZXcgRGF0ZSgpO1xuLy8gXHRcdFx0c2V0X29iai5tb2RpZmllZF9ieSA9IGN1cnJlbnRfdXNlcl9pZDtcbi8vIFx0XHRcdHZhciByID0gZGIuaW5zdGFuY2VzLnVwZGF0ZSh7XG4vLyBcdFx0XHRcdF9pZDogaW5zdGFuY2VfaWQsXG4vLyBcdFx0XHRcdFwidHJhY2VzLl9pZFwiOiBjdXJyZW50X3RyYWNlX2lkXG4vLyBcdFx0XHR9LCB7XG4vLyBcdFx0XHRcdCRzZXQ6IHNldF9vYmosXG4vLyBcdFx0XHRcdCRhZGRUb1NldDoge1xuLy8gXHRcdFx0XHRcdCd0cmFjZXMuJC5hcHByb3Zlcyc6IHtcbi8vIFx0XHRcdFx0XHRcdCRlYWNoOiBmb3J3YXJkX2FwcHJvdmVzXG4vLyBcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9KTtcbi8vIFx0XHR9XG5cblxuLy8gXHRcdGlmIChyKSB7XG4vLyBcdFx0XHRfLmVhY2goY3VycmVudF90cmFjZS5hcHByb3ZlcywgZnVuY3Rpb24gKGEsIGlkeCkge1xuLy8gXHRcdFx0XHRpZiAoYS5faWQgPT0gZnJvbV9hcHByb3ZlX2lkKSB7XG4vLyBcdFx0XHRcdFx0dmFyIHVwZGF0ZV9yZWFkID0ge307XG4vLyBcdFx0XHRcdFx0dXBkYXRlX3JlYWRbXCJ0cmFjZXMuJC5hcHByb3Zlcy5cIiArIGlkeCArIFwiLnJlYWRfZGF0ZVwiXSA9IG5ldyBEYXRlKCk7XG4vLyBcdFx0XHRcdFx0ZGIuaW5zdGFuY2VzLnVwZGF0ZSh7XG4vLyBcdFx0XHRcdFx0XHRfaWQ6IGluc3RhbmNlX2lkLFxuLy8gXHRcdFx0XHRcdFx0XCJ0cmFjZXMuX2lkXCI6IGN1cnJlbnRfdHJhY2VfaWRcbi8vIFx0XHRcdFx0XHR9LCB7XG4vLyBcdFx0XHRcdFx0XHQkc2V0OiB1cGRhdGVfcmVhZFxuLy8gXHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9KVxuXG4vLyBcdFx0fVxuXG4vLyBcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gXHRcdFx0Y29kZTogMjAwLFxuLy8gXHRcdFx0ZGF0YTogeyBuZXdfaW5zX2lkczogbmV3X2luc19pZHMgfVxuLy8gXHRcdH0pXG4vLyBcdH0gY2F0Y2ggKGUpIHtcbi8vIFx0XHRjb25zb2xlLmVycm9yKGUuc3RhY2spXG4vLyBcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gXHRcdFx0Y29kZTogMjAwLFxuLy8gXHRcdFx0ZGF0YToge1xuLy8gXHRcdFx0XHRlcnJvcnM6IFtlXVxuLy8gXHRcdFx0fVxuLy8gXHRcdH0pXG4vLyBcdH1cblxuLy8gfSkiLCJpZiBwcm9jZXNzLmVudi5DUkVBVE9SX05PREVfRU5WID09ICdkZXZlbG9wbWVudCdcbiAgICBKc29uUm91dGVzLmFkZCAncG9zdCcsICcvdGVzdC93ZWJob29rJywgKHJlcSwgcmVzLCBuZXh0KSAtPlxuICAgICAgICB0cnlcblxuICAgICAgICAgICAgaGFzaERhdGEgPSByZXEuYm9keVxuICAgICAgICAgICAgY29uc29sZS5sb2cgJ2FjdGlvbjogJywgaGFzaERhdGEuYWN0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyAnZnJvbV91c2VyOiAnLCBoYXNoRGF0YS5mcm9tX3VzZXJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nICd0b191c2VyczogJywgaGFzaERhdGEudG9fdXNlcnNcblxuXG4gICAgICAgICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAyMDBcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge31cbiAgICAgICAgY2F0Y2ggZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvciBlLnN0YWNrXG4gICAgICAgICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuICAgICAgICAgICAgICAgIGNvZGU6IDIwMFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgZXJyb3JzOiBbe2Vycm9yTWVzc2FnZTogZS5tZXNzYWdlfV0gfSIsImlmIChwcm9jZXNzLmVudi5DUkVBVE9SX05PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gIEpzb25Sb3V0ZXMuYWRkKCdwb3N0JywgJy90ZXN0L3dlYmhvb2snLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuICAgIHZhciBlLCBoYXNoRGF0YTtcbiAgICB0cnkge1xuICAgICAgaGFzaERhdGEgPSByZXEuYm9keTtcbiAgICAgIGNvbnNvbGUubG9nKCdhY3Rpb246ICcsIGhhc2hEYXRhLmFjdGlvbik7XG4gICAgICBjb25zb2xlLmxvZygnZnJvbV91c2VyOiAnLCBoYXNoRGF0YS5mcm9tX3VzZXIpO1xuICAgICAgY29uc29sZS5sb2coJ3RvX3VzZXJzOiAnLCBoYXNoRGF0YS50b191c2Vycyk7XG4gICAgICByZXR1cm4gSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgICBjb2RlOiAyMDAsXG4gICAgICAgIGRhdGE6IHt9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZSA9IGVycm9yO1xuICAgICAgY29uc29sZS5lcnJvcihlLnN0YWNrKTtcbiAgICAgIHJldHVybiBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgIGNvZGU6IDIwMCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGVycm9yczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IGUubWVzc2FnZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRzZXRfaW5zdGFuY2Vfc3RlcF9hcHByb3ZlOiAoaW5zX2lkLCBzdGVwX2FwcHJvdmUsIHN0ZXBzQXBwcm92ZXNPcHRpb25zKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5zZXRfaW5zdGFuY2Vfc3RlcF9hcHByb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0c2V0X2luc3RhbmNlX3NraXBfc3RlcHM6IChpbnNfaWQsIHN0ZXBJZCwgYWN0aW9uKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5zZXRfaW5zdGFuY2Vfc2tpcF9zdGVwcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjIgMTU6MTg6NTlcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbmNvbnN0IHsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kcyh7XG5cblx0Z2V0X2luc3RhbmNlX2RhdGE6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgZm9ybUNhY2hlZCwgZmxvd0NhY2hlZCkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuZ2V0X2luc3RhbmNlX2RhdGEuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9XG5cbn0pO1xuIiwiY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcblxuXHRkcmFmdF9zYXZlX2luc3RhbmNlOiBmdW5jdGlvbiAoaW5zKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5kcmFmdF9zYXZlX2luc3RhbmNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRpbmJveF9zYXZlX2luc3RhbmNlOiBmdW5jdGlvbiAoYXBwcm92ZSkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuaW5ib3hfc2F2ZV9pbnN0YW5jZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH1cblxufSkiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjMtMDEtMTMgMTc6MzU6MTNcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMy0wMy0xMSAxMDo1MToyOVxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcblx0Y2NfZG86IGZ1bmN0aW9uIChhcHByb3ZlLCBjY191c2VyX2lkcywgZGVzY3JpcHRpb24pIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNjX2RvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRjY19yZWFkOiBmdW5jdGlvbiAoYXBwcm92ZSkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2NfcmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH0sXG5cblx0Y2Nfc3VibWl0OiBmdW5jdGlvbiAoaW5zX2lkLCBkZXNjcmlwdGlvbiwgbXlBcHByb3ZlLCBjY0hhc0VkaXRQZXJtaXNzaW9uKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jY19zdWJtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGNjX3JlbW92ZTogZnVuY3Rpb24gKGluc3RhbmNlSWQsIGFwcHJvdmVJZCkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2NfcmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRiYXRjaF9jYW5jZWxfY2M6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgYXBwcm92ZV9pZHMpIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmJhdGNoX2NhbmNlbF9jYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH0sXG5cblx0Y2Nfc2F2ZTogZnVuY3Rpb24gKGluc19pZCwgZGVzY3JpcHRpb24sIG15QXBwcm92ZSwgY2NIYXNFZGl0UGVybWlzc2lvbikge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2Nfc2F2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH1cbn0pIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjIgMTU6MTg6MzhcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbmNvbnN0IHsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kcyh7XG5cdC8vIOaUueS4uumAmui/h2Fwaeiwg+eUqFxuXHRmb3J3YXJkX2luc3RhbmNlOiBmdW5jdGlvbiAoaW5zdGFuY2VfaWQsIHNwYWNlX2lkLCBmbG93X2lkLCBoYXNTYXZlSW5zdGFuY2VUb0F0dGFjaG1lbnQsIGRlc2NyaXB0aW9uLCBpc0ZvcndhcmRBdHRhY2htZW50cywgc2VsZWN0ZWRVc2VycywgYWN0aW9uX3R5cGUsIHJlbGF0ZWQsIGZyb21fYXBwcm92ZV9pZCkge1xuXHRcdGlmICghdGhpcy51c2VySWQpXG5cdFx0XHR0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKCdub3QtYXV0aG9yaXplZCcpO1xuXG5cdFx0cmV0dXJuO1xuXHR9LFxuXG5cblx0Zm9yd2FyZF9yZW1vdmU6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgdHJhY2VfaWQsIGFwcHJvdmVfaWQpIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmZvcndhcmRfcmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRjYW5jZWxEaXN0cmlidXRlOiBmdW5jdGlvbiAoaW5zdGFuY2VfaWQsIGFwcHJvdmVfaWRzKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jYW5jZWxEaXN0cmlidXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxuXG5cbn0pIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjIgMTU6MTc6NTRcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbmNvbnN0IHsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kcyh7XG4gICAgY2ZzX2luc3RhbmNlc19yZW1vdmU6IGZ1bmN0aW9uIChmaWxlX2lkKSB7XG4gICAgICAgIHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2ZzX2luc3RhbmNlc19yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH0sXG5cbiAgICBjZnNfaW5zdGFuY2VzX3NldF9jdXJyZW50OiBmdW5jdGlvbiAoZmlsZV9pZCkge1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNmc19pbnN0YW5jZXNfc2V0X2N1cnJlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH0sXG5cbiAgICBjZnNfaW5zdGFuY2VzX2xvY2s6IGZ1bmN0aW9uIChmaWxlX2lkLCB1c2VyX2lkLCB1c2VyX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jZnNfaW5zdGFuY2VzX2xvY2suYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH0sXG5cbiAgICBjZnNfaW5zdGFuY2VzX3VubG9jazogZnVuY3Rpb24gKGZpbGVfaWQpIHtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jZnNfaW5zdGFuY2VzX3VubG9jay5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGRvd25sb2FkX3NwYWNlX2luc3RhbmNlX2F0dGFjaG1lbnRzX3RvX2Rpc2s6IGZ1bmN0aW9uIChzcGFjZUlkLCBjZnNSZWNvcmRJZHMpIHtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93TWV0aG9kcy5kb3dubG9hZF9zcGFjZV9pbnN0YW5jZV9hdHRhY2htZW50c190b19kaXNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9XG59KSIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRzZXRfYXBwcm92ZV9oYXZlX3JlYWQ6IChpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5zZXRfYXBwcm92ZV9oYXZlX3JlYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdGNoYW5nZV9hcHByb3ZlX2luZm86IChpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQsIGRlc2NyaXB0aW9uLCBmaW5pc2hfZGF0ZSkgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNoYW5nZV9hcHByb3ZlX2luZm8uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdHVwZGF0ZV9hcHByb3ZlX3NpZ246IChpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQsIHNpZ25fZmllbGRfY29kZSwgZGVzY3JpcHRpb24sIHNpZ25fdHlwZSwgbGFzdFNpZ25BcHByb3ZlKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy51cGRhdGVfYXBwcm92ZV9zaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuXG5cdHVwZGF0ZV9zaWduX3Nob3c6IChvYmpzLCBteUFwcHJvdmVfaWQpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy51cGRhdGVfc2lnbl9zaG93LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRpbnN0YW5jZV9yZXR1cm46IChhcHByb3ZlLCByZWFzb24pLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmluc3RhbmNlX3JldHVybi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGluc3RhbmNlX3JlbWluZDogKHJlbWluZF91c2VycywgcmVtaW5kX2NvdW50LCByZW1pbmRfZGVhZGxpbmUsIGluc3RhbmNlX2lkLCBhY3Rpb25fdHlwZXMsIHRyYWNlX2lkKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5pbnN0YW5jZV9yZW1pbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdG5leHRfc3RlcF91c2Vyc19ub3RfZm91bmQ6IChkZWFsX3R5cGUsIHN0ZXBfbmFtZSwgcGFyYW1zKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMubmV4dF9zdGVwX3VzZXJzX25vdF9mb3VuZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuX2V2YWwgPSByZXF1aXJlKCdldmFsJylcblxuTWV0ZW9yLm1ldGhvZHNcblx0aW5zdGFuY2VOdW1iZXJCdWlsZGVyOiAoc3BhY2VJZCwgbmFtZSktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuaW5zdGFuY2VOdW1iZXJCdWlsZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRjaGVja19tYWluX2F0dGFjaDogKGluc19pZCwgbmFtZSktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2hlY2tfbWFpbl9hdHRhY2guYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHJlbW92ZV9yZWxhdGVkOiAoaW5zX2lkLCByZV9pbnNfaWQpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnJlbW92ZV9yZWxhdGVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuXHR1cGRhdGVfaW5zdGFuY2VfcmVsYXRlZDogKGluc19pZCwgcmVsYXRlZF9pbnN0YW5jZXMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnVwZGF0ZV9pbnN0YW5jZV9yZWxhdGVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHR1cGRhdGVGbG93UG9zaXRpb246IChkYXRhKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMudXBkYXRlRmxvd1Bvc2l0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuXHR1cGRhdGVGbG93Um9sZTogKGRhdGEpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy51cGRhdGVGbG93Um9sZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHN0YXJ0X2Zsb3c6IChzcGFjZSwgZmxvd0lkLCBzdGFydCkgLT5cblxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuc3RhcnRfZmxvdy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRnZXRfaW5zdGFuY2VfdHJhY2VzOiAoaW5zX2lkKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5nZXRfaW5zdGFuY2VfdHJhY2VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0J2dldF9iYXRjaF9pbnN0YW5jZXMnOiAoc3BhY2UsIGNhdGVnb3J5SWQsIGZsb3dJZHMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldF9iYXRjaF9pbnN0YW5jZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdCdnZXRfYmF0Y2hfaW5zdGFuY2VzX2NvdW50JzogKHNwYWNlLCBjYXRlZ29yeUlkLCBmbG93SWRzKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5nZXRfYmF0Y2hfaW5zdGFuY2VzX2NvdW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuXHQnZ2V0X215X2FwcHJvdmVzJzogKGluc3RhbmNlSWRzKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5nZXRfbXlfYXBwcm92ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cblxuXG5cblxuXG5cblxuXG5cbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHRjaGFuZ2VfZmxvd19zdGF0ZTogKGZsb3dzKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2hhbmdlX2Zsb3dfc3RhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cblxuXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblxuXHRoaWRlX2luc3RhbmNlOiAoaW5zSWQsIGlzX2hpZGRlbikgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmhpZGVfaW5zdGFuY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGdldEluc3RhbmNlVmFsdWVzOiAoaW5zSWQpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldEluc3RhbmNlVmFsdWVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCJDb29raWVzID0gcmVxdWlyZShcImNvb2tpZXNcIilcblxuZ2V0SW5zdGFuY2VSZWFkT25seSA9IChyZXEsIHJlcywgbmV4dCwgb3B0aW9ucykgLT5cblxuXHR1c2VyID0gU3RlZWRvcy5nZXRBUElMb2dpblVzZXIocmVxLCByZXMpXG5cblx0aWYgcmVxPy5xdWVyeT8uYWNjZXNzX3Rva2VuXG5cdFx0dXNlcklkID0gU3RlZWRvcy5nZXRVc2VySWRGcm9tQWNjZXNzVG9rZW4ocmVxLnF1ZXJ5LmFjY2Vzc190b2tlbilcblx0XHRpZiB1c2VySWRcblx0XHRcdHVzZXIgPSBNZXRlb3IudXNlcnMuZmluZE9uZSh7X2lkOiB1c2VySWR9KVxuXG5cdHNwYWNlSWQgPSByZXEucGFyYW1zLnNwYWNlXG5cblx0aW5zdGFuY2VJZCA9IHJlcS5wYXJhbXMuaW5zdGFuY2VfaWRcblxuXHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlSWR9KTtcblxuXHRzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHtfaWQ6IHNwYWNlSWR9KTtcblxuXHRoaWRlX3RyYWNlcyA9IHJlcS5xdWVyeT8uaGlkZV90cmFjZXNcblxuXHRpZiAhb3B0aW9uc1xuXHRcdG9wdGlvbnMgPSB7c2hvd1RyYWNlOiB0cnVlfVxuXHRlbHNlXG5cdFx0b3B0aW9ucy5zaG93VHJhY2UgPSB0cnVlXG5cblx0aWYgaGlkZV90cmFjZXMgaXMgXCIxXCJcblx0XHRpZiBvcHRpb25zXG5cdFx0XHRvcHRpb25zLnNob3dUcmFjZSA9IGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0b3B0aW9ucyA9IHtzaG93VHJhY2U6IGZhbHNlfVxuXG5cdGlmICFvcHRpb25zLnNob3dBdHRhY2htZW50c1xuXHRcdG9wdGlvbnMuc2hvd0F0dGFjaG1lbnRzID0gdHJ1ZVxuXG5cdGlmICFzcGFjZVxuXHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRkYXRhOlxuXHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIHNwYWNlXCIsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXHRpZiAgIWluc3RhbmNlXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3NpbmcgaW5zdGFuY2VcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdGlmICF1c2VyXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3NpbmcgWC1BdXRoLVRva2VuLFgtVXNlci1JZFwiLFxuXHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRyZXR1cm47XG5cblx0aWYgaW5zdGFuY2Uuc3BhY2UgIT0gc3BhY2VJZFxuXHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRkYXRhOlxuXHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIHNwYWNlIG9yIGluc3RhbmNlXCIsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXG5cblx0c3BhY2VVc2VyQ291bnQgPSBkYi5zcGFjZV91c2Vycy5maW5kKHsgdXNlcjogdXNlci5faWQsIHNwYWNlOiBzcGFjZUlkIH0pLmNvdW50KClcblxuXHRpZiBzcGFjZVVzZXJDb3VudCBpcyAwXG5cdFx0aWYgIXNwYWNlXG5cdFx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRcdGRhdGE6XG5cdFx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBzYXBjZVVzZXJcIixcblx0XHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRcdHJldHVybjtcblxuXHQj5qCh6aqMdXNlcuaYr+WQpuWvuWluc3RhbmNl5pyJ5p+l55yL5p2D6ZmQXG5cdF9oYXNQZXJtaXNzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmhhc0luc3RhbmNlUGVybWlzc2lvbnModXNlciwgaW5zdGFuY2UpXG5cblx0aWYgIV9oYXNQZXJtaXNzaW9uICAmJiBpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2Vcblx0XHRfcGFyZW50X2luc3RhbmNlcyA9IF8udW5pb24oW2luc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZV0sIGluc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMgfHwgW10pXG5cblx0XHRfaGFzUGVybWlzc2lvbiA9IF8uZmluZCBfcGFyZW50X2luc3RhbmNlcywgKF9wYXJlbnRfaWQpLT5cblx0XHRcdF9wYXJlbnRfaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDpfcGFyZW50X2lkfSwge2ZpZWxkczoge3RyYWNlczogMH19KVxuXG5cdFx0XHRyZXR1cm4gV29ya2Zsb3dNYW5hZ2VyLmhhc0luc3RhbmNlUGVybWlzc2lvbnModXNlciwgX3BhcmVudF9pbnMpXG5cblx0aWYgIV9oYXNQZXJtaXNzaW9uXG5cdFx0X2xvY2FsZSA9IFN0ZWVkb3MubG9jYWxlKHVzZXIuX2lkLCB0cnVlKVxuXHRcdGVycm9yID0gVEFQaTE4bi5fXyhcImluc3RhbmNlX3Blcm1pc3Npb25zX2Vycm9yXCIsIHt9LCBfbG9jYWxlKVxuXHRcdHJlcy5jaGFyc2V0ID0gXCJ1dGYtOFwiXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogZXJyb3IsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXHRodG1sID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpXG5cdGRhdGFCdWYgPSBuZXcgQnVmZmVyKGh0bWwpO1xuXHRyZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Jyk7XG5cdHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YUJ1Zi5sZW5ndGgpXG5cdHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtcmFuZ2UnLCBcImJ5dGVzIDAtI3tkYXRhQnVmLmxlbmd0aCAtIDF9LyN7ZGF0YUJ1Zi5sZW5ndGh9XCIpXG5cdHJlcy5zdGF0dXNDb2RlID0gMjAwXG5cdHJlcy5lbmQoaHRtbClcblxuSnNvblJvdXRlcy5hZGQgXCJnZXRcIiwgXCIvd29ya2Zsb3cvc3BhY2UvOnNwYWNlL3ZpZXcvcmVhZG9ubHkvOmluc3RhbmNlX2lkXCIsIGdldEluc3RhbmNlUmVhZE9ubHlcblxuSnNvblJvdXRlcy5hZGQgXCJnZXRcIiwgXCIvd29ya2Zsb3cvc3BhY2UvOnNwYWNlL3ZpZXcvcmVhZG9ubHkvOmluc3RhbmNlX2lkLzppbnN0YW5jZV9uYW1lXCIsIChyZXEsIHJlcywgbmV4dCktPlxuXHRyZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyk7XG5cdHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudDtmaWxlbmFtZT0nK2VuY29kZVVSSShyZXEucGFyYW1zLmluc3RhbmNlX25hbWUpKTtcblx0cmVzLnNldEhlYWRlcignVHJhbnNmZXItRW5jb2RpbmcnLCAnJylcblxuXHRvcHRpb25zID0ge2Fic29sdXRlOiB0cnVlfVxuXG5cdHJldHVybiBnZXRJbnN0YW5jZVJlYWRPbmx5KHJlcSwgcmVzLCBuZXh0LCBvcHRpb25zKVxuIyMjXG5cdOiOt+WPlueUs+ivt+WNleWIl+ihqO+8mlxuICAgIGZpbmFsX2RlY2lzaW9u77ya5a6h5om557uT5p6cXG4gICAgc3RhdGU6IOeUs+ivt+WNleeKtuaAgVxuIyMjXG5Kc29uUm91dGVzLmFkZCBcImdldFwiLCBcIi9hcGkvd29ya2Zsb3cvaW5zdGFuY2VzXCIsIChyZXEsIHJlcywgbmV4dCkgLT5cblxuXHRpZiAhU3RlZWRvcy5BUElBdXRoZW50aWNhdGlvbkNoZWNrKHJlcSwgcmVzKVxuXHRcdHJldHVybiA7XG5cblx0dXNlcl9pZCA9IHJlcS51c2VySWRcblxuXHRzcGFjZUlkID0gcmVxLmhlYWRlcnNbXCJ4LXNwYWNlLWlkXCJdXG5cblx0aWYgbm90IHNwYWNlSWRcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBYLVNwYWNlLUlkXCIsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXHRmbG93SWQgPSByZXEucXVlcnk/LmZsb3dJZFxuXG5cdGlmICFmbG93SWRcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAwLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBmbG93SWRcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdHF1ZXJ5ID0ge31cblxuXHRyZXRfc3luY190b2tlbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG5cblx0Zmxvd0lkcyA9IGZsb3dJZC5zcGxpdChcIixcIilcblxuXG5cdGZsb3dzID0gZGIuZmxvd3MuZmluZCh7X2lkOiB7JGluOiBmbG93SWRzfX0pLmZldGNoKClcblxuXHRpID0gMFxuXHR3aGlsZSBpIDwgZmxvd3MubGVuZ3RoXG5cdFx0ZiA9IGZsb3dzW2ldXG5cdFx0c3BhY2VVc2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7c3BhY2U6IGYuc3BhY2UsIHVzZXI6IHVzZXJfaWR9KVxuXHRcdGlmICFzcGFjZVVzZXJcblx0XHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdFx0ZGF0YTpcblx0XHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBObyBwZXJtaXNzaW9uLCBmbG93IGlzICN7Zi5faWR9XCIsXG5cdFx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0ZWxzZVxuXG5cdCNcdOaYr+WQpuW3peS9nOWMuueuoeeQhuWRmFxuXHRcdGlmICFTdGVlZG9zLmlzU3BhY2VBZG1pbihzcGFjZUlkLCB1c2VyX2lkKVxuXHRcdFx0c3BhY2VVc2VyT3JnYW5pemF0aW9ucyA9IGRiLm9yZ2FuaXphdGlvbnMuZmluZCh7XG5cdFx0XHRcdF9pZDoge1xuXHRcdFx0XHRcdCRpbjogc3BhY2VVc2VyLm9yZ2FuaXphdGlvbnNcblx0XHRcdFx0fVxuXHRcdFx0fSkuZmV0Y2goKTtcblxuXHRcdFx0aWYgIVdvcmtmbG93TWFuYWdlci5jYW5Nb25pdG9yKGYsIHNwYWNlVXNlciwgc3BhY2VVc2VyT3JnYW5pemF0aW9ucykgJiYgIVdvcmtmbG93TWFuYWdlci5jYW5BZG1pbihmLCBzcGFjZVVzZXIsIHNwYWNlVXNlck9yZ2FuaXphdGlvbnMpXG5cdFx0XHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0XHRcdGRhdGE6XG5cdFx0XHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBObyBwZXJtaXNzaW9uLCBmbG93IGlzICN7Zi5faWR9XCIsXG5cdFx0XHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRcdFx0cmV0dXJuO1xuXHRcdGkrK1xuXG5cblx0cXVlcnkuZmxvdyA9IHskaW46IGZsb3dJZHN9XG5cblx0cXVlcnkuc3BhY2UgPSBzcGFjZUlkXG5cblx0aWYgcmVxLnF1ZXJ5Py5zeW5jX3Rva2VuXG5cdFx0c3luY190b2tlbiA9IG5ldyBEYXRlKE51bWJlcihyZXEucXVlcnkuc3luY190b2tlbikpXG5cdFx0cXVlcnkubW9kaWZpZWQgPSB7JGd0OiBzeW5jX3Rva2VufVxuXG5cdGlmIHJlcS5xdWVyeT8uZmluYWxfZGVjaXNpb25cblx0XHRxdWVyeS5maW5hbF9kZWNpc2lvbiA9IHskaW4gOiByZXEucXVlcnkuZmluYWxfZGVjaXNpb24uc3BsaXQoXCIsXCIpfVxuXHRlbHNlXG5cdFx0cXVlcnkuZmluYWxfZGVjaXNpb24gPSB7JG5pbjogW1widGVybWluYXRlZFwiLCBcInJlamVjdGVkXCJdfVxuXG5cdGlmIHJlcS5xdWVyeT8uc3RhdGVcblx0XHRxdWVyeS5zdGF0ZSA9IHskaW46IHJlcS5xdWVyeS5zdGF0ZS5zcGxpdChcIixcIil9XG5cdGVsc2Vcblx0XHRxdWVyeS5zdGF0ZSA9IFwiY29tcGxldGVkXCJcblxuI1x05pyA5aSa6L+U5ZueNTAw5p2h5pWw5o2uXG5cdGluc3RhbmNlcyA9IGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7ZmllbGRzOiB7aW5ib3hfdWVyczogMCwgY2NfdXNlcnM6IDAsIG91dGJveF91c2VyczogMCwgdHJhY2VzOiAwLCBhdHRhY2htZW50czogMH0sIHNraXA6IDAsIGxpbWl0OiA1MDB9KS5mZXRjaCgpXG5cdGluc3RhbmNlcy5mb3JFYWNoIChpbnN0YW5jZSktPlxuXG5cdFx0YXR0YWNobWVudHMgPSBjZnMuaW5zdGFuY2VzLmZpbmQoeydtZXRhZGF0YS5pbnN0YW5jZSc6IGluc3RhbmNlLl9pZCwnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsIFwibWV0YWRhdGEuaXNfcHJpdmF0ZVwiOiB7JG5lOiB0cnVlfX0sIHtmaWVsZHM6IHtjb3BpZXM6IDB9fSkuZmV0Y2goKVxuXG5cdFx0aW5zdGFuY2UuYXR0YWNobWVudHMgPSBhdHRhY2htZW50c1xuXG5cblx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDIwMCxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwic3RhdHVzXCI6IFwic3VjY2Vzc1wiLFxuXHRcdFx0XHRcInN5bmNfdG9rZW5cIjogcmV0X3N5bmNfdG9rZW5cblx0XHRcdFx0XCJkYXRhXCI6IGluc3RhbmNlc1xuXHRyZXR1cm47XG4iLCJ2YXIgQ29va2llcywgZ2V0SW5zdGFuY2VSZWFkT25seTtcblxuQ29va2llcyA9IHJlcXVpcmUoXCJjb29raWVzXCIpO1xuXG5nZXRJbnN0YW5jZVJlYWRPbmx5ID0gZnVuY3Rpb24ocmVxLCByZXMsIG5leHQsIG9wdGlvbnMpIHtcbiAgdmFyIF9oYXNQZXJtaXNzaW9uLCBfbG9jYWxlLCBfcGFyZW50X2luc3RhbmNlcywgZGF0YUJ1ZiwgZXJyb3IsIGhpZGVfdHJhY2VzLCBodG1sLCBpbnN0YW5jZSwgaW5zdGFuY2VJZCwgcmVmLCByZWYxLCBzcGFjZSwgc3BhY2VJZCwgc3BhY2VVc2VyQ291bnQsIHVzZXIsIHVzZXJJZDtcbiAgdXNlciA9IFN0ZWVkb3MuZ2V0QVBJTG9naW5Vc2VyKHJlcSwgcmVzKTtcbiAgaWYgKHJlcSAhPSBudWxsID8gKHJlZiA9IHJlcS5xdWVyeSkgIT0gbnVsbCA/IHJlZi5hY2Nlc3NfdG9rZW4gOiB2b2lkIDAgOiB2b2lkIDApIHtcbiAgICB1c2VySWQgPSBTdGVlZG9zLmdldFVzZXJJZEZyb21BY2Nlc3NUb2tlbihyZXEucXVlcnkuYWNjZXNzX3Rva2VuKTtcbiAgICBpZiAodXNlcklkKSB7XG4gICAgICB1c2VyID0gTWV0ZW9yLnVzZXJzLmZpbmRPbmUoe1xuICAgICAgICBfaWQ6IHVzZXJJZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHNwYWNlSWQgPSByZXEucGFyYW1zLnNwYWNlO1xuICBpbnN0YW5jZUlkID0gcmVxLnBhcmFtcy5pbnN0YW5jZV9pZDtcbiAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgX2lkOiBpbnN0YW5jZUlkXG4gIH0pO1xuICBzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHtcbiAgICBfaWQ6IHNwYWNlSWRcbiAgfSk7XG4gIGhpZGVfdHJhY2VzID0gKHJlZjEgPSByZXEucXVlcnkpICE9IG51bGwgPyByZWYxLmhpZGVfdHJhY2VzIDogdm9pZCAwO1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgc2hvd1RyYWNlOiB0cnVlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLnNob3dUcmFjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGhpZGVfdHJhY2VzID09PSBcIjFcIikge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBvcHRpb25zLnNob3dUcmFjZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBzaG93VHJhY2U6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMuc2hvd0F0dGFjaG1lbnRzKSB7XG4gICAgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPSB0cnVlO1xuICB9XG4gIGlmICghc3BhY2UpIHtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc3BhY2VcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghaW5zdGFuY2UpIHtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3NpbmcgaW5zdGFuY2VcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdXNlcikge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBYLUF1dGgtVG9rZW4sWC1Vc2VyLUlkXCIsXG4gICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5zdGFuY2Uuc3BhY2UgIT09IHNwYWNlSWQpIHtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc3BhY2Ugb3IgaW5zdGFuY2VcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNwYWNlVXNlckNvdW50ID0gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG4gICAgdXNlcjogdXNlci5faWQsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSkuY291bnQoKTtcbiAgaWYgKHNwYWNlVXNlckNvdW50ID09PSAwKSB7XG4gICAgaWYgKCFzcGFjZSkge1xuICAgICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgICBjb2RlOiA0MDEsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIHNhcGNlVXNlclwiLFxuICAgICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgX2hhc1Blcm1pc3Npb24gPSBXb3JrZmxvd01hbmFnZXIuaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyh1c2VyLCBpbnN0YW5jZSk7XG4gIGlmICghX2hhc1Blcm1pc3Npb24gJiYgaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlKSB7XG4gICAgX3BhcmVudF9pbnN0YW5jZXMgPSBfLnVuaW9uKFtpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VdLCBpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzIHx8IFtdKTtcbiAgICBfaGFzUGVybWlzc2lvbiA9IF8uZmluZChfcGFyZW50X2luc3RhbmNlcywgZnVuY3Rpb24oX3BhcmVudF9pZCkge1xuICAgICAgdmFyIF9wYXJlbnRfaW5zO1xuICAgICAgX3BhcmVudF9pbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICAgIF9pZDogX3BhcmVudF9pZFxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICB0cmFjZXM6IDBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gV29ya2Zsb3dNYW5hZ2VyLmhhc0luc3RhbmNlUGVybWlzc2lvbnModXNlciwgX3BhcmVudF9pbnMpO1xuICAgIH0pO1xuICB9XG4gIGlmICghX2hhc1Blcm1pc3Npb24pIHtcbiAgICBfbG9jYWxlID0gU3RlZWRvcy5sb2NhbGUodXNlci5faWQsIHRydWUpO1xuICAgIGVycm9yID0gVEFQaTE4bi5fXyhcImluc3RhbmNlX3Blcm1pc3Npb25zX2Vycm9yXCIsIHt9LCBfbG9jYWxlKTtcbiAgICByZXMuY2hhcnNldCA9IFwidXRmLThcIjtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogZXJyb3IsXG4gICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBodG1sID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuICBkYXRhQnVmID0gbmV3IEJ1ZmZlcihodG1sKTtcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCcpO1xuICByZXMuc2V0SGVhZGVyKCdjb250ZW50LWxlbmd0aCcsIGRhdGFCdWYubGVuZ3RoKTtcbiAgcmVzLnNldEhlYWRlcignY29udGVudC1yYW5nZScsIFwiYnl0ZXMgMC1cIiArIChkYXRhQnVmLmxlbmd0aCAtIDEpICsgXCIvXCIgKyBkYXRhQnVmLmxlbmd0aCk7XG4gIHJlcy5zdGF0dXNDb2RlID0gMjAwO1xuICByZXR1cm4gcmVzLmVuZChodG1sKTtcbn07XG5cbkpzb25Sb3V0ZXMuYWRkKFwiZ2V0XCIsIFwiL3dvcmtmbG93L3NwYWNlLzpzcGFjZS92aWV3L3JlYWRvbmx5LzppbnN0YW5jZV9pZFwiLCBnZXRJbnN0YW5jZVJlYWRPbmx5KTtcblxuSnNvblJvdXRlcy5hZGQoXCJnZXRcIiwgXCIvd29ya2Zsb3cvc3BhY2UvOnNwYWNlL3ZpZXcvcmVhZG9ubHkvOmluc3RhbmNlX2lkLzppbnN0YW5jZV9uYW1lXCIsIGZ1bmN0aW9uKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBvcHRpb25zO1xuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyk7XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudDtmaWxlbmFtZT0nICsgZW5jb2RlVVJJKHJlcS5wYXJhbXMuaW5zdGFuY2VfbmFtZSkpO1xuICByZXMuc2V0SGVhZGVyKCdUcmFuc2Zlci1FbmNvZGluZycsICcnKTtcbiAgb3B0aW9ucyA9IHtcbiAgICBhYnNvbHV0ZTogdHJ1ZVxuICB9O1xuICByZXR1cm4gZ2V0SW5zdGFuY2VSZWFkT25seShyZXEsIHJlcywgbmV4dCwgb3B0aW9ucyk7XG59KTtcblxuXG4vKlxuXHTojrflj5bnlLPor7fljZXliJfooajvvJpcbiAgICBmaW5hbF9kZWNpc2lvbu+8muWuoeaJuee7k+aenFxuICAgIHN0YXRlOiDnlLPor7fljZXnirbmgIFcbiAqL1xuXG5Kc29uUm91dGVzLmFkZChcImdldFwiLCBcIi9hcGkvd29ya2Zsb3cvaW5zdGFuY2VzXCIsIGZ1bmN0aW9uKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBmLCBmbG93SWQsIGZsb3dJZHMsIGZsb3dzLCBpLCBpbnN0YW5jZXMsIHF1ZXJ5LCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHJldF9zeW5jX3Rva2VuLCBzcGFjZUlkLCBzcGFjZVVzZXIsIHNwYWNlVXNlck9yZ2FuaXphdGlvbnMsIHN5bmNfdG9rZW4sIHVzZXJfaWQ7XG4gIGlmICghU3RlZWRvcy5BUElBdXRoZW50aWNhdGlvbkNoZWNrKHJlcSwgcmVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB1c2VyX2lkID0gcmVxLnVzZXJJZDtcbiAgc3BhY2VJZCA9IHJlcS5oZWFkZXJzW1wieC1zcGFjZS1pZFwiXTtcbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgY29kZTogNDAxLFxuICAgICAgZGF0YToge1xuICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIFgtU3BhY2UtSWRcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZsb3dJZCA9IChyZWYgPSByZXEucXVlcnkpICE9IG51bGwgPyByZWYuZmxvd0lkIDogdm9pZCAwO1xuICBpZiAoIWZsb3dJZCkge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBmbG93SWRcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHF1ZXJ5ID0ge307XG4gIHJldF9zeW5jX3Rva2VuID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIGZsb3dJZHMgPSBmbG93SWQuc3BsaXQoXCIsXCIpO1xuICBmbG93cyA9IGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDoge1xuICAgICAgJGluOiBmbG93SWRzXG4gICAgfVxuICB9KS5mZXRjaCgpO1xuICBpID0gMDtcbiAgd2hpbGUgKGkgPCBmbG93cy5sZW5ndGgpIHtcbiAgICBmID0gZmxvd3NbaV07XG4gICAgc3BhY2VVc2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG4gICAgICBzcGFjZTogZi5zcGFjZSxcbiAgICAgIHVzZXI6IHVzZXJfaWRcbiAgICB9KTtcbiAgICBpZiAoIXNwYWNlVXNlcikge1xuICAgICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgICBjb2RlOiA0MDEsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBObyBwZXJtaXNzaW9uLCBmbG93IGlzIFwiICsgZi5faWQsXG4gICAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICB9XG4gICAgaWYgKCFTdGVlZG9zLmlzU3BhY2VBZG1pbihzcGFjZUlkLCB1c2VyX2lkKSkge1xuICAgICAgc3BhY2VVc2VyT3JnYW5pemF0aW9ucyA9IGRiLm9yZ2FuaXphdGlvbnMuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogc3BhY2VVc2VyLm9yZ2FuaXphdGlvbnNcbiAgICAgICAgfVxuICAgICAgfSkuZmV0Y2goKTtcbiAgICAgIGlmICghV29ya2Zsb3dNYW5hZ2VyLmNhbk1vbml0b3IoZiwgc3BhY2VVc2VyLCBzcGFjZVVzZXJPcmdhbml6YXRpb25zKSAmJiAhV29ya2Zsb3dNYW5hZ2VyLmNhbkFkbWluKGYsIHNwYWNlVXNlciwgc3BhY2VVc2VyT3JnYW5pemF0aW9ucykpIHtcbiAgICAgICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgICAgIGNvZGU6IDQwMSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBObyBwZXJtaXNzaW9uLCBmbG93IGlzIFwiICsgZi5faWQsXG4gICAgICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGkrKztcbiAgfVxuICBxdWVyeS5mbG93ID0ge1xuICAgICRpbjogZmxvd0lkc1xuICB9O1xuICBxdWVyeS5zcGFjZSA9IHNwYWNlSWQ7XG4gIGlmICgocmVmMSA9IHJlcS5xdWVyeSkgIT0gbnVsbCA/IHJlZjEuc3luY190b2tlbiA6IHZvaWQgMCkge1xuICAgIHN5bmNfdG9rZW4gPSBuZXcgRGF0ZShOdW1iZXIocmVxLnF1ZXJ5LnN5bmNfdG9rZW4pKTtcbiAgICBxdWVyeS5tb2RpZmllZCA9IHtcbiAgICAgICRndDogc3luY190b2tlblxuICAgIH07XG4gIH1cbiAgaWYgKChyZWYyID0gcmVxLnF1ZXJ5KSAhPSBudWxsID8gcmVmMi5maW5hbF9kZWNpc2lvbiA6IHZvaWQgMCkge1xuICAgIHF1ZXJ5LmZpbmFsX2RlY2lzaW9uID0ge1xuICAgICAgJGluOiByZXEucXVlcnkuZmluYWxfZGVjaXNpb24uc3BsaXQoXCIsXCIpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBxdWVyeS5maW5hbF9kZWNpc2lvbiA9IHtcbiAgICAgICRuaW46IFtcInRlcm1pbmF0ZWRcIiwgXCJyZWplY3RlZFwiXVxuICAgIH07XG4gIH1cbiAgaWYgKChyZWYzID0gcmVxLnF1ZXJ5KSAhPSBudWxsID8gcmVmMy5zdGF0ZSA6IHZvaWQgMCkge1xuICAgIHF1ZXJ5LnN0YXRlID0ge1xuICAgICAgJGluOiByZXEucXVlcnkuc3RhdGUuc3BsaXQoXCIsXCIpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBxdWVyeS5zdGF0ZSA9IFwiY29tcGxldGVkXCI7XG4gIH1cbiAgaW5zdGFuY2VzID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIGluYm94X3VlcnM6IDAsXG4gICAgICBjY191c2VyczogMCxcbiAgICAgIG91dGJveF91c2VyczogMCxcbiAgICAgIHRyYWNlczogMCxcbiAgICAgIGF0dGFjaG1lbnRzOiAwXG4gICAgfSxcbiAgICBza2lwOiAwLFxuICAgIGxpbWl0OiA1MDBcbiAgfSkuZmV0Y2goKTtcbiAgaW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICB2YXIgYXR0YWNobWVudHM7XG4gICAgYXR0YWNobWVudHMgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuICAgICAgJ21ldGFkYXRhLmluc3RhbmNlJzogaW5zdGFuY2UuX2lkLFxuICAgICAgJ21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlLFxuICAgICAgXCJtZXRhZGF0YS5pc19wcml2YXRlXCI6IHtcbiAgICAgICAgJG5lOiB0cnVlXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIGNvcGllczogMFxuICAgICAgfVxuICAgIH0pLmZldGNoKCk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmF0dGFjaG1lbnRzID0gYXR0YWNobWVudHM7XG4gIH0pO1xuICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgY29kZTogMjAwLFxuICAgIGRhdGE6IHtcbiAgICAgIFwic3RhdHVzXCI6IFwic3VjY2Vzc1wiLFxuICAgICAgXCJzeW5jX3Rva2VuXCI6IHJldF9zeW5jX3Rva2VuLFxuICAgICAgXCJkYXRhXCI6IGluc3RhbmNlc1xuICAgIH1cbiAgfSk7XG59KTtcbiIsIlxuSnNvblJvdXRlcy5hZGQgXCJnZXRcIiwgXCIvc3RlZWRvcy1jc3NcIiwgKHJlcSwgcmVzLCBuZXh0KS0+XG5cdHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2NzcycpO1xuXHRhbGxDc3MgPSBXZWJBcHAuZ2V0UmVmcmVzaGFibGVBc3NldHMoKVxuXG5cdGFsbENzc0xpbmsgPSBcIlwiXG5cblx0YWxsQ3NzLmZvckVhY2ggKGNzcykgLT5cblx0XHRpZiBfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMX1BBVEhfUFJFRklYXG5cdFx0XHRyb290VXJsID0gX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTFxuXHRcdFx0aWYgcm9vdFVybC5lbmRzV2l0aChcIi9cIilcblx0XHRcdFx0Y3NzSHJlZiA9IHJvb3RVcmwucmVwbGFjZShfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMX1BBVEhfUFJFRklYICsgXCIvXCIsIFwiXCIpICsgY3NzLnVybFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjc3NIcmVmID0gcm9vdFVybC5yZXBsYWNlKF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVgsIFwiXCIpICsgY3NzLnVybFxuXHRcdGVsc2Vcblx0XHRcdGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoY3NzLnVybClcblx0XHRhbGxDc3NMaW5rICs9IFwiQGltcG9ydCB1cmwoI3tjc3NIcmVmfSk7XCJcblxuXHRyZXMuc3RhdHVzQ29kZSA9IDIwMFxuXHRyZXMuZW5kKGFsbENzc0xpbmspIiwiSnNvblJvdXRlcy5hZGQoXCJnZXRcIiwgXCIvc3RlZWRvcy1jc3NcIiwgZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIGFsbENzcywgYWxsQ3NzTGluaztcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvY3NzJyk7XG4gIGFsbENzcyA9IFdlYkFwcC5nZXRSZWZyZXNoYWJsZUFzc2V0cygpO1xuICBhbGxDc3NMaW5rID0gXCJcIjtcbiAgYWxsQ3NzLmZvckVhY2goZnVuY3Rpb24oY3NzKSB7XG4gICAgdmFyIGNzc0hyZWYsIHJvb3RVcmw7XG4gICAgaWYgKF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVgpIHtcbiAgICAgIHJvb3RVcmwgPSBfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMO1xuICAgICAgaWYgKHJvb3RVcmwuZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIGNzc0hyZWYgPSByb290VXJsLnJlcGxhY2UoX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTF9QQVRIX1BSRUZJWCArIFwiL1wiLCBcIlwiKSArIGNzcy51cmw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjc3NIcmVmID0gcm9vdFVybC5yZXBsYWNlKF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVgsIFwiXCIpICsgY3NzLnVybDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3NzSHJlZiA9IE1ldGVvci5hYnNvbHV0ZVVybChjc3MudXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbENzc0xpbmsgKz0gXCJAaW1wb3J0IHVybChcIiArIGNzc0hyZWYgKyBcIik7XCI7XG4gIH0pO1xuICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgcmV0dXJuIHJlcy5lbmQoYWxsQ3NzTGluayk7XG59KTtcbiIsIkpzb25Sb3V0ZXMuYWRkIFwiZ2V0XCIsIFwiL2FwaS93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9kcmFmdC86Zmxvd1wiLCAocmVxLCByZXMsIG5leHQpIC0+XG5cdGlmICFTdGVlZG9zLkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2socmVxLCByZXMpXG5cdFx0cmV0dXJuXG5cblx0dXNlcl9pZCA9IHJlcS51c2VySWRcblxuXHR1c2VyID0gZGIudXNlcnMuZmluZE9uZSh7IF9pZDogdXNlcl9pZCB9KVxuXG5cdHNwYWNlSWQgPSByZXEucGFyYW1zLnNwYWNlXG5cblx0Zmxvd0lkID0gcmVxLnBhcmFtcy5mbG93XG5cblx0c3BhY2UgPSBkYi5zcGFjZXMuZmluZE9uZSh7IF9pZDogc3BhY2VJZCB9KVxuXG5cdGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHsgX2lkOiBmbG93SWQgfSwgeyBmaWVsZHM6IHsgbmFtZTogMSwgJ2N1cnJlbnQuX2lkJzogMSwgZm9ybTogMSB9IH0pXG5cblx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoeyBfaWQ6IGZsb3cuZm9ybSB9LCB7IGZpZWxkczogeyAnY3VycmVudC5faWQnOiAxIH0gfSlcblxuXHRvcHRpb25zID0ge1xuXHRcdHNob3dUcmFjZTogZmFsc2UsXG5cdFx0c2hvd0F0dGFjaG1lbnRzOiBmYWxzZSxcblx0XHR0ZW1wbGF0ZU5hbWU6IFwiZGVmYXVsdFwiLFxuXHRcdGVkaXRhYmxlOiB0cnVlLFxuXHRcdHdpZHRoOiBcIjEwMCVcIixcblx0XHRpbnN0YW5jZV9zdHlsZTogXCJpbnN0YW5jZS1kZWZhdWx0XCIsXG5cdFx0cGx1Z2luczogXCJcIlwiXG5cblx0XHRcdDxtZXRhIGh0dHAtZXF1aXY9XCJYLVVBLUNvbXBhdGlibGVcIiBjb250ZW50PVwiSUU9ZWRnZSxjaHJvbWU9MVwiIC8+XG5cdFx0XHQ8bWV0YSBuYW1lPVwiZm9ybWF0LWRldGVjdGlvblwiIGNvbnRlbnQ9XCJ0ZWxlcGhvbmU9bm9cIj5cblx0XHRcdDxtZXRhIGh0dHAtZXF1aXY9XCJ4LXJpbS1hdXRvLW1hdGNoXCIgY29udGVudD1cIm5vbmVcIj5cblx0XHRcdDx0aXRsZT4je2Zsb3cubmFtZX08L3RpdGxlPlxuXHRcdFx0PG1ldGEgY29udGVudD0nd2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCcgbmFtZT0ndmlld3BvcnQnIC8+XG5cdFx0XHQ8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoXCIgLz5cblxuXHRcdFx0PGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvY3NzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci5taW4uY3NzXCI+XG5cblx0XHRcdDxzY3JpcHQgc3JjPVwiL3BsdWdpbnMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyL2pzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci5taW4uanNcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+PC9zY3JpcHQ+XG5cblx0XHRcdDxzY3JpcHQgc3JjPVwiL3BsdWdpbnMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyL2pzL2xvY2FsZXMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLnpoLUNOLmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIGNoYXJzZXQ9XCJVVEYtOFwiPjwvc2NyaXB0PlxuXG5cdFx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIi9wbHVnaW5zL3RvYXN0ci90b2FzdHIubWluLmNzc1wiPlxuXHRcdFx0PHNjcmlwdCBzcmM9XCIvcGx1Z2lucy90b2FzdHIvdG9hc3RyLm1pbi5qc1wiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj48L3NjcmlwdD5cblx0XHRcdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiL2pzL3dvcmtmbG93X2NsaWVudC5jc3NcIj5cblx0XHRcdDxzY3JpcHQgc3JjPVwiL2pzL3dvcmtmbG93X2NsaWVudC5qc1wiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj48L3NjcmlwdD5cblx0XHRcIlwiXCJcblx0fVxuXG5cdGluc3RhbmNlID0ge1xuXHRcdGZsb3c6IGZsb3cuX2lkLFxuXHRcdGZsb3dfdmVyc2lvbjogZmxvdy5jdXJyZW50Ll9pZCxcblx0XHRmb3JtOiBmb3JtLl9pZCxcblx0XHRmb3JtX3ZlcnNpb246IGZvcm0uY3VycmVudC5faWQsXG5cdFx0dmFsdWVzOiB7fSxcblx0XHRuYW1lOiBmbG93Lm5hbWUsXG5cdFx0c3BhY2U6IHNwYWNlSWRcblx0fVxuXG5cdGh0bWwgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblxuXHRkYXRhQnVmID0gbmV3IEJ1ZmZlcihodG1sKVxuXG5cdHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YUJ1Zi5sZW5ndGgpXG5cblx0cmVzLnNldEhlYWRlcignY29udGVudC1yYW5nZScsIFwiYnl0ZXMgMC0je2RhdGFCdWYubGVuZ3RoIC0gMX0vI3tkYXRhQnVmLmxlbmd0aH1cIilcblxuXHRyZXMuc3RhdHVzQ29kZSA9IDIwMFxuXG5cdHJlcy5lbmQoaHRtbClcbiIsIkpzb25Sb3V0ZXMuYWRkKFwiZ2V0XCIsIFwiL2FwaS93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9kcmFmdC86Zmxvd1wiLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuICB2YXIgZGF0YUJ1ZiwgZmxvdywgZmxvd0lkLCBmb3JtLCBodG1sLCBpbnN0YW5jZSwgb3B0aW9ucywgc3BhY2UsIHNwYWNlSWQsIHVzZXIsIHVzZXJfaWQ7XG4gIGlmICghU3RlZWRvcy5BUElBdXRoZW50aWNhdGlvbkNoZWNrKHJlcSwgcmVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB1c2VyX2lkID0gcmVxLnVzZXJJZDtcbiAgdXNlciA9IGRiLnVzZXJzLmZpbmRPbmUoe1xuICAgIF9pZDogdXNlcl9pZFxuICB9KTtcbiAgc3BhY2VJZCA9IHJlcS5wYXJhbXMuc3BhY2U7XG4gIGZsb3dJZCA9IHJlcS5wYXJhbXMuZmxvdztcbiAgc3BhY2UgPSBkYi5zcGFjZXMuZmluZE9uZSh7XG4gICAgX2lkOiBzcGFjZUlkXG4gIH0pO1xuICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgX2lkOiBmbG93SWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgICdjdXJyZW50Ll9pZCc6IDEsXG4gICAgICBmb3JtOiAxXG4gICAgfVxuICB9KTtcbiAgZm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoe1xuICAgIF9pZDogZmxvdy5mb3JtXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgICdjdXJyZW50Ll9pZCc6IDFcbiAgICB9XG4gIH0pO1xuICBvcHRpb25zID0ge1xuICAgIHNob3dUcmFjZTogZmFsc2UsXG4gICAgc2hvd0F0dGFjaG1lbnRzOiBmYWxzZSxcbiAgICB0ZW1wbGF0ZU5hbWU6IFwiZGVmYXVsdFwiLFxuICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBpbnN0YW5jZV9zdHlsZTogXCJpbnN0YW5jZS1kZWZhdWx0XCIsXG4gICAgcGx1Z2luczogXCJcXG48bWV0YSBodHRwLWVxdWl2PVxcXCJYLVVBLUNvbXBhdGlibGVcXFwiIGNvbnRlbnQ9XFxcIklFPWVkZ2UsY2hyb21lPTFcXFwiIC8+XFxuPG1ldGEgbmFtZT1cXFwiZm9ybWF0LWRldGVjdGlvblxcXCIgY29udGVudD1cXFwidGVsZXBob25lPW5vXFxcIj5cXG48bWV0YSBodHRwLWVxdWl2PVxcXCJ4LXJpbS1hdXRvLW1hdGNoXFxcIiBjb250ZW50PVxcXCJub25lXFxcIj5cXG48dGl0bGU+XCIgKyBmbG93Lm5hbWUgKyBcIjwvdGl0bGU+XFxuPG1ldGEgY29udGVudD0nd2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCcgbmFtZT0ndmlld3BvcnQnIC8+XFxuPG1ldGEgbmFtZT1cXFwidmlld3BvcnRcXFwiIGNvbnRlbnQ9XFxcIndpZHRoPWRldmljZS13aWR0aFxcXCIgLz5cXG5cXG48bGluayByZWw9XFxcInN0eWxlc2hlZXRcXFwiIHR5cGU9XFxcInRleHQvY3NzXFxcIiBocmVmPVxcXCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvY3NzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci5taW4uY3NzXFxcIj5cXG5cXG48c2NyaXB0IHNyYz1cXFwiL3BsdWdpbnMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyL2pzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci5taW4uanNcXFwiIHR5cGU9XFxcInRleHQvamF2YXNjcmlwdFxcXCI+PC9zY3JpcHQ+XFxuXFxuPHNjcmlwdCBzcmM9XFxcIi9wbHVnaW5zL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci9qcy9sb2NhbGVzL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci56aC1DTi5qc1xcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIiBjaGFyc2V0PVxcXCJVVEYtOFxcXCI+PC9zY3JpcHQ+XFxuXFxuPGxpbmsgcmVsPVxcXCJzdHlsZXNoZWV0XFxcIiB0eXBlPVxcXCJ0ZXh0L2Nzc1xcXCIgaHJlZj1cXFwiL3BsdWdpbnMvdG9hc3RyL3RvYXN0ci5taW4uY3NzXFxcIj5cXG48c2NyaXB0IHNyYz1cXFwiL3BsdWdpbnMvdG9hc3RyL3RvYXN0ci5taW4uanNcXFwiIHR5cGU9XFxcInRleHQvamF2YXNjcmlwdFxcXCI+PC9zY3JpcHQ+XFxuPGxpbmsgcmVsPVxcXCJzdHlsZXNoZWV0XFxcIiB0eXBlPVxcXCJ0ZXh0L2Nzc1xcXCIgaHJlZj1cXFwiL2pzL3dvcmtmbG93X2NsaWVudC5jc3NcXFwiPlxcbjxzY3JpcHQgc3JjPVxcXCIvanMvd29ya2Zsb3dfY2xpZW50LmpzXFxcIiB0eXBlPVxcXCJ0ZXh0L2phdmFzY3JpcHRcXFwiPjwvc2NyaXB0PlwiXG4gIH07XG4gIGluc3RhbmNlID0ge1xuICAgIGZsb3c6IGZsb3cuX2lkLFxuICAgIGZsb3dfdmVyc2lvbjogZmxvdy5jdXJyZW50Ll9pZCxcbiAgICBmb3JtOiBmb3JtLl9pZCxcbiAgICBmb3JtX3ZlcnNpb246IGZvcm0uY3VycmVudC5faWQsXG4gICAgdmFsdWVzOiB7fSxcbiAgICBuYW1lOiBmbG93Lm5hbWUsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfTtcbiAgaHRtbCA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUh0bWwodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgZGF0YUJ1ZiA9IG5ldyBCdWZmZXIoaHRtbCk7XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YUJ1Zi5sZW5ndGgpO1xuICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXJhbmdlJywgXCJieXRlcyAwLVwiICsgKGRhdGFCdWYubGVuZ3RoIC0gMSkgKyBcIi9cIiArIGRhdGFCdWYubGVuZ3RoKTtcbiAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gIHJldHVybiByZXMuZW5kKGh0bWwpO1xufSk7XG4iLCJBcnJheS5wcm90b3R5cGUuZmlsdGVyUHJvcGVydHkgPSBmdW5jdGlvbihoLCBsKXtcbiAgICB2YXIgZyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtcbiAgICAgICAgdmFyIG0gPSB0PyB0W2hdOm51bGw7XG4gICAgICAgIHZhciBkID0gZmFsc2U7XG4gICAgICAgIGlmKG0gaW5zdGFuY2VvZiBBcnJheSl7XG4gICAgICAgICAgICBkID0gbS5pbmNsdWRlcyhsKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBkID0gKGwgPT09IHVuZGVmaW5lZCk/IGZhbHNlOm09PWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZCl7XG4gICAgICAgICAgICBnLnB1c2godCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZztcbn07XG5cbkFycmF5LnByb3RvdHlwZS5nZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uKGspe1xuICAgIHZhciB2ID0gbmV3IEFycmF5KCk7XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe1xuICAgICAgICB2YXIgbSA9IHQ/IHRba106bnVsbDtcbiAgICAgICAgdi5wdXNoKG0pO1xuICAgIH0pO1xuICAgIHJldHVybiB2O1xufVxuXG5BcnJheS5wcm90b3R5cGUuZ2V0RWFjaCA9IGZ1bmN0aW9uKGNvZGUpe1xuICAgIHZhciByZXYgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwIDsgaSA8IHRoaXMubGVuZ3RoIDsgaSsrKXtcbiAgICAgICAgcmV2LnB1c2godGhpc1tpXVtjb2RlXSk7XG4gICAgfVxuICAgIHJldHVybiByZXY7XG59O1xuXG5BcnJheS5wcm90b3R5cGUudW5pcSA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIGEgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24oYil7IFxuICAgICAgICBpZihhLmluZGV4T2YoYikgPCAwKVxuICAgICAgICAgICAge2FbYS5sZW5ndGhdID0gYn1cbiAgICB9KTtcbiAgICByZXR1cm4gYTtcbn07XG5cbkZvcm1fZm9ybXVsYSA9IHt9O1xuXG5cbkZvcm1fZm9ybXVsYS5taXhpbiA9IGZ1bmN0aW9uKGRlc3QsIHNyYyl7XG4gICAgZm9yKHZhciBrZXkgaW4gc3JjKXtcbiAgICAgICAgZGVzdFtrZXldID0gc3JjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBkZXN0O1xufTtcblxuXG5Gb3JtX2Zvcm11bGEuaGFuZGVyVXNlck9iamVjdCA9IGZ1bmN0aW9uKHUpe1xuXG4gICAgaWYodSBpbnN0YW5jZW9mIEFycmF5KXtcbiAgICAgICAgdmFyIHVzZXIgPSB7fTtcblxuICAgICAgICB1c2VyLm5hbWUgPSB1LmdldFByb3BlcnR5KFwibmFtZVwiKVxuICAgICAgICB1c2VyLm9yZ2FuaXphdGlvbiA9IHt9O1xuICAgICAgICB1c2VyLm9yZ2FuaXphdGlvbi5uYW1lID0gdS5nZXRQcm9wZXJ0eShcIm9yZ2FuaXphdGlvblwiKS5nZXRQcm9wZXJ0eShcIm5hbWVcIik7XG4gICAgICAgIHVzZXIub3JnYW5pemF0aW9uLmZ1bGxuYW1lID0gdS5nZXRQcm9wZXJ0eShcIm9yZ2FuaXphdGlvblwiKS5nZXRQcm9wZXJ0eShcImZ1bGxuYW1lXCIpO1xuXG4gICAgICAgIHVzZXIuaHIgPSB1LmdldFByb3BlcnR5KFwiaHJcIilcblxuICAgICAgICB1c2VyLnNvcnRfbm8gPSB1LmdldFByb3BlcnR5KFwic29ydF9ub1wiKVxuXG5cdFx0dXNlci5tb2JpbGUgPSB1LmdldFByb3BlcnR5KFwibW9iaWxlXCIpXG5cblx0XHR1c2VyLndvcmtfcGhvbmUgPSB1LmdldFByb3BlcnR5KFwid29ya19waG9uZVwiKVxuXG5cdFx0dXNlci5wb3NpdGlvbiA9IHUuZ2V0UHJvcGVydHkoXCJwb3NpdGlvblwiKVxuXG4gICAgICAgIHZhciB1c2VyUm9sZXMgPSB1LmdldFByb3BlcnR5KFwicm9sZXNcIik7XG4gICAgICAgIHZhciByb2xlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB1c2VyUm9sZXMuZm9yRWFjaChmdW5jdGlvbihpKXtcbiAgICAgICAgICAgIHJvbGVzID0gcm9sZXMuY29uY2F0KGkpO1xuICAgICAgICB9KTsgXG4gICAgICAgIHJvbGVzLnVuaXEoKTtcbiAgICAgICAgdXNlci5yb2xlcyA9IHJvbGVzO1xuICAgICAgICByZXR1cm4gdXNlcjtcbiAgICB9ZWxzZXtcbiAgICAgICAgcmV0dXJuIHU7XG4gICAgfVxufVxuXG5Gb3JtX2Zvcm11bGEuaGFuZGVyT3JnT2JqZWN0ID0gZnVuY3Rpb24obyl7XG5cbiAgICBpZihvIGluc3RhbmNlb2YgQXJyYXkpe1xuICAgICAgICB2YXIgb3JnID0ge307XG5cdFx0b3JnLmlkID0gby5nZXRQcm9wZXJ0eShcIl9pZFwiKTtcbiAgICAgICAgb3JnLm5hbWUgPSBvLmdldFByb3BlcnR5KFwibmFtZVwiKTtcbiAgICAgICAgb3JnLmZ1bGxuYW1lID0gby5nZXRQcm9wZXJ0eShcImZ1bGxuYW1lXCIpO1xuXG4gICAgICAgIHJldHVybiBvcmc7XG4gICAgfWVsc2V7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cbn1cblxuXG5cbi8qKlxuICAgICog6I635b6X5YWs5byP6ZyA6KaB55So5Yiw55qE5Yid5aeL5YC8XG4gICAgKiDovpPlhaXvvJpmaWVsZHMsIHZhbHVlcywgYXBwbGljYW50XG4gICAgKiDovpPlh7rvvJpfX3ZhbHVlc1xuKiovXG5Gb3JtX2Zvcm11bGEuaW5pdF9mb3JtdWxhX3ZhbHVlcyA9IGZ1bmN0aW9uKGZpZWxkcywgYXV0b0Zvcm1Eb2MsIGFwcHJvdmVyLCBhcHBsaWNhbnQsIHNwYWNlSWQpe1xuICAgIHZhciBfX3ZhbHVlcyA9IHt9O1xuICAgIC8v55Sz6K+35Y2V5Lit5aGr55qE5YC85aSE55CGXG4gICAgaWYoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggJiYgYXV0b0Zvcm1Eb2MpIHtcbiAgICAgICAgLy9kZWJ1Z2dlcjtcbiAgICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpe1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWVsZC50eXBlO1xuICAgICAgICAgICAgaWYodHlwZSkge1xuICAgICAgICAgICAgICAgIGlmKHR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgKiDlsIbooajmoLzlrZfmrrXnmoTlgLzov5vooYzovazmjaLlkI7kvKDlhaVfX3ZhbHVlc+S4rVxuICAgICAgICAgICAgICAgICAgICAqIHZhbHVlc+S4reihqOagvOeahOWAvOagvOW8j+S4ulxuICAgICAgICAgICAgICAgICAgICAqIFt7XCJhXCI6MSxcImJcIjo0fSx7XCJhXCI6MixcImJcIjo1fSx7XCJhXCI6MyxcImJcIjo2fV1cbiAgICAgICAgICAgICAgICAgICAgKiBfX3ZhbHVlc+mcgOimgei9rOWMluS4uuS4i+mdouagvOW8j+S4lOWSjOS4u+ihqOeahOWAvOS4gOagt+aUvuWIsOesrOS4gOWxglxuICAgICAgICAgICAgICAgICAgICAqIHtcImFcIjpbMSwyLDNdLFwiYlwiOls0LDUsNl19XG4gICAgICAgICAgICAgICAgICAgICoqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVGaWVsZHMgPSBmaWVsZC5zZmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVWYWx1ZXMgPSBhdXRvRm9ybURvY1tmaWVsZC5jb2RlXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFUYWJsZVZhbHVlcyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgX190YWJsZVZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAvL+aMieWFrOW8j+eahOagvOW8j+i9rOaNouWAvOS4ul9fdGFibGVWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgaWYodGFibGVGaWVsZHMgJiYgdGFibGVGaWVsZHMubGVuZ3RoICYmIHRhYmxlVmFsdWVzICYmIHRhYmxlVmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlVmFsdWVzLmZvckVhY2goZnVuY3Rpb24odGFibGVWYWx1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYVRhYmxlVmFsdWVzLnB1c2goRm9ybV9mb3JtdWxhLmluaXRfZm9ybXVsYV92YWx1ZXModGFibGVGaWVsZHMsIHRhYmxlVmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/mjInkuLvooajnmoTmoLzlvI/ovazmjaJfX3RhYmxlVmFsdWVz5Yqg5YiwXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKHRhYmxlZmllbGQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGFibGVWYWx1ZXNbdGFibGVmaWVsZC5jb2RlXSA9IGZvcm11bGFUYWJsZVZhbHVlcy5nZXRFYWNoKHRhYmxlZmllbGQuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVzID0gRm9ybV9mb3JtdWxhLm1peGluKF9fdmFsdWVzLCBfX3RhYmxlVmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAndXNlcicpe1xuICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlc1tmaWVsZC5jb2RlXSA9IEZvcm1fZm9ybXVsYS5oYW5kZXJVc2VyT2JqZWN0KFdvcmtmbG93TWFuYWdlci5nZXRGb3JtdWxhVXNlck9iamVjdHMoc3BhY2VJZCwgYXV0b0Zvcm1Eb2NbZmllbGQuY29kZV0pKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnZ3JvdXAnKXtcbiAgICAgICAgICAgICAgICAgICAgX192YWx1ZXNbZmllbGQuY29kZV0gPSBGb3JtX2Zvcm11bGEuaGFuZGVyT3JnT2JqZWN0KFdvcmtmbG93TWFuYWdlci5nZXRGb3JtdWxhT3JnT2JqZWN0cyhhdXRvRm9ybURvY1tmaWVsZC5jb2RlXSkpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdvZGF0YScpe1xuXHRcdFx0XHRcdF9fdmFsdWVzW2ZpZWxkLmNvZGVdID0gYXV0b0Zvcm1Eb2NbZmllbGQuY29kZV0gfHwge31cblxuXHRcdFx0XHR9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+atpOWkhOS8oHNwYWNlSWTnu5npgInkurrmjqfku7bnmoTml6fmlbDmja7orqHnrpdyb2xlc+WSjG9yZ2FuaXphdGlvblxuICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlc1tmaWVsZC5jb2RlXSA9IGF1dG9Gb3JtRG9jW2ZpZWxkLmNvZGVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICAgIC8v5b2T5YmN5aSE55CG5Lq6XG4gICAgX192YWx1ZXNbXCJhcHByb3ZlclwiXSA9IFdvcmtmbG93TWFuYWdlci5nZXRGb3JtdWxhVXNlck9iamVjdChzcGFjZUlkLCBhcHByb3Zlcik7XG4gICAgLy/nlLPor7fkurpcbiAgICBfX3ZhbHVlc1tcImFwcGxpY2FudFwiXSA9IFdvcmtmbG93TWFuYWdlci5nZXRGb3JtdWxhVXNlck9iamVjdChzcGFjZUlkLCBhcHBsaWNhbnQpO1xuXG4gICAgcmV0dXJuIF9fdmFsdWVzO1xufTtcblxuIiwiTWV0ZW9yLnB1Ymxpc2ggJ2NhdGVnb3JpZXMnLCAoc3BhY2VJZCkgLT5cblx0Y2hlY2sgc3BhY2VJZCwgU3RyaW5nXG5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cblx0cmV0dXJuIGRiLmNhdGVnb3JpZXMuZmluZCh7IHNwYWNlOiBzcGFjZUlkIH0sIHsgZmllbGRzOiB7IG5hbWU6IDEsIHNwYWNlOiAxLCBzb3J0X25vOiAxLCBhcHA6IDEgfSB9KSIsIk1ldGVvci5wdWJsaXNoKCdjYXRlZ29yaWVzJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICBjaGVjayhzcGFjZUlkLCBTdHJpbmcpO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBkYi5jYXRlZ29yaWVzLmZpbmQoe1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIHNvcnRfbm86IDEsXG4gICAgICBhcHA6IDFcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJcbk1ldGVvci5wdWJsaXNoICdjZnNfaW5zdGFuY2VzJywgKGluc3RhbmNlSWRzKS0+XG5cdGNoZWNrKGluc3RhbmNlSWRzLCBBcnJheSlcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGluc3RhbmNlSWRzXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIGNmcy5pbnN0YW5jZXMuZmluZCh7J21ldGFkYXRhLmluc3RhbmNlJzogeyRpbjogaW5zdGFuY2VJZHN9ICwgJG9yOiBbeydtZXRhZGF0YS5pc19wcml2YXRlJzogeyRuZTogdHJ1ZX19LHsnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHRydWUsIFwibWV0YWRhdGEub3duZXJcIjogdGhpcy51c2VySWR9XX0pXG4iLCJNZXRlb3IucHVibGlzaCgnY2ZzX2luc3RhbmNlcycsIGZ1bmN0aW9uKGluc3RhbmNlSWRzKSB7XG4gIGNoZWNrKGluc3RhbmNlSWRzLCBBcnJheSk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghaW5zdGFuY2VJZHMpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuICAgICdtZXRhZGF0YS5pbnN0YW5jZSc6IHtcbiAgICAgICRpbjogaW5zdGFuY2VJZHNcbiAgICB9LFxuICAgICRvcjogW1xuICAgICAge1xuICAgICAgICAnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHtcbiAgICAgICAgICAkbmU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICAnbWV0YWRhdGEuaXNfcHJpdmF0ZSc6IHRydWUsXG4gICAgICAgIFwibWV0YWRhdGEub3duZXJcIjogdGhpcy51c2VySWRcbiAgICAgIH1cbiAgICBdXG4gIH0pO1xufSk7XG4iLCJcblxuTWV0ZW9yLnB1Ymxpc2ggJ2Zsb3dfcG9zaXRpb25zJywgKHNwYWNlSWQpLT5cblx0XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblx0XG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHJldHVybiBkYi5mbG93X3Bvc2l0aW9ucy5maW5kKHtzcGFjZTogc3BhY2VJZH0sIHtmaWVsZHM6IHtyb2xlOjEsIHVzZXJzOiAxLCBvcmc6IDF9fSk7XG4iLCJNZXRlb3IucHVibGlzaCgnZmxvd19wb3NpdGlvbnMnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dfcG9zaXRpb25zLmZpbmQoe1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIHJvbGU6IDEsXG4gICAgICB1c2VyczogMSxcbiAgICAgIG9yZzogMVxuICAgIH1cbiAgfSk7XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlICdmbG93X3Bvc2l0aW9uc190YWJ1bGFyJywgKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpLT5cblx0Y2hlY2sodGFibGVOYW1lLCBTdHJpbmcpO1xuXHRjaGVjayhpZHMsIEFycmF5KTtcblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dGhpcy51bmJsb2NrKClcblxuXHRmaW5kOiAtPlxuXHRcdHRoaXMudW5ibG9jaygpXG5cdFx0ZGIuZmxvd19wb3NpdGlvbnMuZmluZCB7X2lkOiB7JGluOiBpZHN9fSwgZmllbGRzOiBmaWVsZHNcblxuXHRjaGlsZHJlbjogW1xuXHRcdHtcblx0XHRcdGZpbmQ6IChwb3NpdGlvbikgLT5cblx0XHRcdFx0QHVuYmxvY2soKVxuXHRcdFx0XHQjIFB1Ymxpc2ggdGhlIHJlbGF0ZWQgZmxvd19yb2xlc1xuXHRcdFx0XHRkYi5mbG93X3JvbGVzLmZpbmQgeyBfaWQ6IHBvc2l0aW9uLnJvbGUgfSwgZmllbGRzOiBuYW1lOiAxXG5cdFx0fVxuXHRcdHtcblx0XHRcdGZpbmQ6IChwb3NpdGlvbikgLT5cblx0XHRcdFx0QHVuYmxvY2soKVxuXHRcdFx0XHQjIFB1Ymxpc2ggdGhlIHJlbGF0ZWQgb3JnYW5pemF0aW9uc1xuXHRcdFx0XHRkYi5vcmdhbml6YXRpb25zLmZpbmQgeyBfaWQ6IHBvc2l0aW9uLm9yZyB9LCBmaWVsZHM6IGZ1bGxuYW1lOiAxXG5cdFx0fVxuXHRcdHtcblx0XHRcdGZpbmQ6IChwb3NpdGlvbikgLT5cblx0XHRcdFx0QHVuYmxvY2soKVxuXHRcdFx0XHQjIFB1Ymxpc2ggdGhlIHJlbGF0ZWQgdXNlclxuXHRcdFx0XHRkYi5zcGFjZV91c2Vycy5maW5kIHtcblx0XHRcdFx0XHRzcGFjZTogcG9zaXRpb24uc3BhY2Vcblx0XHRcdFx0XHR1c2VyOiAkaW46IHBvc2l0aW9uLnVzZXJzXG5cdFx0XHRcdH0sIGZpZWxkczpcblx0XHRcdFx0XHRzcGFjZTogMVxuXHRcdFx0XHRcdHVzZXI6IDFcblx0XHRcdFx0XHRuYW1lOiAxXG5cdFx0fVxuXHRdIiwiTWV0ZW9yLnB1Ymxpc2hDb21wb3NpdGUoJ2Zsb3dfcG9zaXRpb25zX3RhYnVsYXInLCBmdW5jdGlvbih0YWJsZU5hbWUsIGlkcywgZmllbGRzKSB7XG4gIGNoZWNrKHRhYmxlTmFtZSwgU3RyaW5nKTtcbiAgY2hlY2soaWRzLCBBcnJheSk7XG4gIGNoZWNrKGZpZWxkcywgTWF0Y2guT3B0aW9uYWwoT2JqZWN0KSk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHRoaXMudW5ibG9jaygpO1xuICByZXR1cm4ge1xuICAgIGZpbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy51bmJsb2NrKCk7XG4gICAgICByZXR1cm4gZGIuZmxvd19wb3NpdGlvbnMuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogaWRzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiBmaWVsZHNcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIuZmxvd19yb2xlcy5maW5kKHtcbiAgICAgICAgICAgIF9pZDogcG9zaXRpb24ucm9sZVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBuYW1lOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIub3JnYW5pemF0aW9ucy5maW5kKHtcbiAgICAgICAgICAgIF9pZDogcG9zaXRpb24ub3JnXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIGZ1bGxuYW1lOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogcG9zaXRpb24uc3BhY2UsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICRpbjogcG9zaXRpb24udXNlcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgICAgIHVzZXI6IDEsXG4gICAgICAgICAgICAgIG5hbWU6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn0pO1xuIiwiXG5cblx0TWV0ZW9yLnB1Ymxpc2ggJ2Zsb3dfcm9sZXMnLCAoc3BhY2VJZCktPlxuXHRcdFxuXHRcdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXHRcdFxuXHRcdHVubGVzcyBzcGFjZUlkXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRcdHJldHVybiBkYi5mbG93X3JvbGVzLmZpbmQoe3NwYWNlOiBzcGFjZUlkfSwge2ZpZWxkczoge25hbWU6MX19KTtcbiIsIk1ldGVvci5wdWJsaXNoKCdmbG93X3JvbGVzJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBkYi5mbG93X3JvbGVzLmZpbmQoe1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDFcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJNZXRlb3IucHVibGlzaCAnZmxvd3MnLCAoc3BhY2VJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0IyDnrKzkuIDmrKHorqLpmIXml7bliJ3lp4vljJblt6XkvZzljLpcblx0aWYgZGIuZmxvd3MuZmluZCh7c3BhY2U6IHNwYWNlSWR9KS5jb3VudCgpID09IDBcblx0XHRkYi5zcGFjZXMuY3JlYXRlVGVtcGxhdGVGb3JtQW5kRmxvdyhzcGFjZUlkKVxuXG5cdHJldHVybiBkYi5mbG93cy5maW5kKHtzcGFjZTogc3BhY2VJZH0sIHtcblx0XHRmaWVsZHM6IHtcblx0XHRcdG5hbWU6IDEsXG5cdFx0XHRmb3JtOiAxLFxuXHRcdFx0c3RhdGU6IDEsXG5cdFx0XHRwZXJtczogMSxcblx0XHRcdHNwYWNlOiAxLFxuXHRcdFx0Y29tcGFueV9pZDogMSxcblx0XHRcdHNvcnRfbm86IDEsXG5cdFx0XHRkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuXHRcdFx0ZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuXHRcdFx0ZW5hYmxlX2FtaXNmb3JtOiAxXG5cdFx0fVxuXHR9KVxuXG5NZXRlb3IucHVibGlzaCAnaW5zdGFuY2VfZmxvdycsIChzcGFjZUlkLCBmbG93SWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIGRiLmZsb3dzLmZpbmQoe19pZDogZmxvd0lkLCBzcGFjZTogc3BhY2VJZH0sIHtcblx0XHRmaWVsZHM6IHtcblx0XHRcdG5hbWU6IDEsXG5cdFx0XHRmb3JtOiAxLFxuXHRcdFx0c3RhdGU6IDEsXG5cdFx0XHRwZXJtczogMSxcblx0XHRcdHNwYWNlOiAxLFxuXHRcdFx0Y29tcGFueV9pZDogMSxcblx0XHRcdHNvcnRfbm86IDEsXG5cdFx0XHRkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuXHRcdFx0ZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuXHRcdFx0ZW5hYmxlX2FtaXNmb3JtOiAxXG5cdFx0fVxuXHR9KVxuXG5cbk1ldGVvci5wdWJsaXNoICdmbG93X3ZlcnNpb24nLCAoc3BhY2VJZCwgZmxvd0lkLCB2ZXJzaW9uSWQpIC0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgZmxvd0lkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyB2ZXJzaW9uSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRzZWxmID0gdGhpcztcblxuXHRnZXRGbG93VmVyc2lvbiA9IChpZCAsIHZlcnNpb25JZCktPlxuXHRcdGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtfaWQgOiBpZH0pO1xuXHRcdGlmIGZsb3dcblx0XHRcdGZsb3dfdmVyc2lvbiA9IGZsb3cuY3VycmVudFxuXHRcdFx0Zmxvd192ZXJzaW9uLmxhdGVzdCA9IHRydWVcblxuXHRcdFx0aWYgZmxvd192ZXJzaW9uLl9pZCAhPSB2ZXJzaW9uSWRcblx0XHRcdFx0Zmxvd192ZXJzaW9uID0gZmxvdy5oaXN0b3J5cy5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIHZlcnNpb25JZClcblx0XHRcdFx0Zmxvd192ZXJzaW9uLmxhdGVzdCA9IGZhbHNlXG5cblx0XHRcdHJldHVybiBmbG93X3ZlcnNpb25cblx0aGFuZGxlID0gZGIuZmxvd3MuZmluZCh7X2lkOiBmbG93SWR9LCB7ZmllbGRzOiB7X2lkOiAxLCBcImN1cnJlbnQubW9kaWZpZWRcIjogMX19KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRzZWxmLmNoYW5nZWQoXCJmbG93X3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rmxvd1ZlcnNpb24oaWQsIHZlcnNpb25JZCkpO1xuXHR9XG5cblxuXHRzZWxmLmFkZGVkKFwiZmxvd192ZXJzaW9uc1wiLCB2ZXJzaW9uSWQsIGdldEZsb3dWZXJzaW9uKGZsb3dJZCwgdmVyc2lvbklkKSk7XG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKClcblxuTWV0ZW9yLnB1Ymxpc2ggJ2Rpc3RyaWJ1dGVfb3B0aW9uYWxfZmxvd3MnLCAoZmxvd19pZHMpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93X2lkc1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRyZXR1cm4gZGIuZmxvd3MuZmluZCh7X2lkOiB7JGluOiBmbG93X2lkc319LCB7XG5cdFx0ZmllbGRzOiB7XG5cdFx0XHRuYW1lOiAxLFxuXHRcdFx0Zm9ybTogMSxcblx0XHRcdHN0YXRlOiAxLFxuXHRcdFx0cGVybXM6IDEsXG5cdFx0XHRzcGFjZTogMSxcblx0XHRcdGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG5cdFx0XHRkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG5cdFx0XHRkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb246IDEsXG5cdFx0XHRjb21wYW55X2lkOiAxLFxuXHRcdFx0ZW5hYmxlX2FtaXNmb3JtOiAxXG5cdFx0fVxuXHR9KVxuXG5NZXRlb3IucHVibGlzaCAnZmxvdycsIChzcGFjZUlkLCBmbG93SWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRyZXR1cm4gZGIuZmxvd3MuZmluZCh7X2lkOiBmbG93SWQsIHNwYWNlOiBzcGFjZUlkfSwge1xuXHRcdGZpZWxkczoge1xuXHRcdFx0cHJpbnRfdGVtcGxhdGU6IDEsXG5cdFx0XHRpbnN0YW5jZV90ZW1wbGF0ZTogMSxcblx0XHRcdGV2ZW50czogMSxcblx0XHRcdGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG5cdFx0XHRkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG5cdFx0XHR1cGxvYWRfYWZ0ZXJfYmVpbmdfZGlzdHJpYnV0ZWQ6IDEsXG5cdFx0XHRkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb246IDEsXG5cdFx0XHRjb21wYW55X2lkOiAxLFxuXHRcdFx0YWxsb3dfc2VsZWN0X3N0ZXA6IDEsXG5cdFx0XHRlbmFibGVfYW1pc2Zvcm06IDFcblx0XHR9XG5cdH0pXG5NZXRlb3IucHVibGlzaCAnZmxvd19maWxlcycsIChzcGFjZUlkLCBmbG93SWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIGNmcy5maWxlcy5maW5kKHsgJ21ldGFkYXRhLnNwYWNlJzogc3BhY2VJZCwgJ21ldGFkYXRhLm9iamVjdF9uYW1lJzogJ2Zsb3dzJywgJ21ldGFkYXRhLnJlY29yZF9pZCc6IGZsb3dJZCB9KVxuXG5NZXRlb3IucHVibGlzaENvbXBvc2l0ZSAnZmxvd3NfdGFidWxhcicsICh0YWJsZU5hbWUsIGlkcywgZmllbGRzKS0+XG5cdGNoZWNrKHRhYmxlTmFtZSwgU3RyaW5nKTtcblx0Y2hlY2soaWRzLCBBcnJheSk7XG5cdGNoZWNrKGZpZWxkcywgTWF0Y2guT3B0aW9uYWwoT2JqZWN0KSk7XG5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHRoaXMudW5ibG9jaygpXG5cblx0ZmluZDogLT5cblx0XHR0aGlzLnVuYmxvY2soKVxuXHRcdGRiLmZsb3dzLmZpbmQge19pZDogeyRpbjogaWRzfX0sIGZpZWxkczogZmllbGRzXG5cblx0Y2hpbGRyZW46IFtcblx0XHR7XG5cdFx0XHRmaW5kOiAoZmxvdykgLT5cblx0XHRcdFx0QHVuYmxvY2soKVxuXHRcdFx0XHQjIFB1Ymxpc2ggdGhlIHJlbGF0ZWQgdXNlclxuXHRcdFx0XHRkYi5zcGFjZV91c2Vycy5maW5kIHtcblx0XHRcdFx0XHRzcGFjZTogZmxvdy5zcGFjZSxcblx0XHRcdFx0XHR1c2VyOiBmbG93LmN1cnJlbnQubW9kaWZpZWRfYnlcblx0XHRcdFx0fSwgZmllbGRzOlxuXHRcdFx0XHRcdHNwYWNlOiAxXG5cdFx0XHRcdFx0dXNlcjogMVxuXHRcdFx0XHRcdG5hbWU6IDFcblx0XHR9LFxuXHRcdHtcblx0XHRcdGZpbmQ6IChmbG93KSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCB1c2VyXG5cdFx0XHRcdGRiLmZvcm1zLmZpbmQge1xuXHRcdFx0XHRcdHNwYWNlOiBmbG93LnNwYWNlLFxuXHRcdFx0XHRcdF9pZDogZmxvdy5mb3JtXG5cdFx0XHRcdH0sIGZpZWxkczpcblx0XHRcdFx0XHRzcGFjZTogMVxuXHRcdFx0XHRcdF9pZDogMVxuXHRcdFx0XHRcdG5hbWU6IDEsXG5cdFx0XHRcdFx0Y2F0ZWdvcnk6IDFcblx0XHR9LFxuXHRcdHtcblx0XHRcdGZpbmQ6IChmbG93KSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCB1c2VyXG5cdFx0XHRcdGRiLmNhdGVnb3JpZXMuZmluZCB7XG5cdFx0XHRcdFx0c3BhY2U6IGZsb3cuc3BhY2Vcblx0XHRcdFx0fSwgZmllbGRzOlxuXHRcdFx0XHRcdHNwYWNlOiAxXG5cdFx0XHRcdFx0X2lkOiAxXG5cdFx0XHRcdFx0bmFtZTogMVxuXHRcdH1cblx0XSIsIk1ldGVvci5wdWJsaXNoKCdmbG93cycsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoZGIuZmxvd3MuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSkuY291bnQoKSA9PT0gMCkge1xuICAgIGRiLnNwYWNlcy5jcmVhdGVUZW1wbGF0ZUZvcm1BbmRGbG93KHNwYWNlSWQpO1xuICB9XG4gIHJldHVybiBkYi5mbG93cy5maW5kKHtcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgZm9ybTogMSxcbiAgICAgIHN0YXRlOiAxLFxuICAgICAgcGVybXM6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIGNvbXBhbnlfaWQ6IDEsXG4gICAgICBzb3J0X25vOiAxLFxuICAgICAgZGlzdHJpYnV0ZV9vcHRpb25hbF91c2VyczogMSxcbiAgICAgIGRpc3RyaWJ1dGVfdG9fc2VsZjogMSxcbiAgICAgIGVuYWJsZV9hbWlzZm9ybTogMVxuICAgIH1cbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goJ2luc3RhbmNlX2Zsb3cnLCBmdW5jdGlvbihzcGFjZUlkLCBmbG93SWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZsb3dJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDogZmxvd0lkLFxuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBmb3JtOiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBwZXJtczogMSxcbiAgICAgIHNwYWNlOiAxLFxuICAgICAgY29tcGFueV9pZDogMSxcbiAgICAgIHNvcnRfbm86IDEsXG4gICAgICBkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuICAgICAgZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuICAgICAgZW5hYmxlX2FtaXNmb3JtOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnZmxvd192ZXJzaW9uJywgZnVuY3Rpb24oc3BhY2VJZCwgZmxvd0lkLCB2ZXJzaW9uSWQpIHtcbiAgdmFyIGdldEZsb3dWZXJzaW9uLCBoYW5kbGUsIHNlbGY7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFmbG93SWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghdmVyc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBzZWxmID0gdGhpcztcbiAgZ2V0Rmxvd1ZlcnNpb24gPSBmdW5jdGlvbihpZCwgdmVyc2lvbklkKSB7XG4gICAgdmFyIGZsb3csIGZsb3dfdmVyc2lvbjtcbiAgICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgICBfaWQ6IGlkXG4gICAgfSk7XG4gICAgaWYgKGZsb3cpIHtcbiAgICAgIGZsb3dfdmVyc2lvbiA9IGZsb3cuY3VycmVudDtcbiAgICAgIGZsb3dfdmVyc2lvbi5sYXRlc3QgPSB0cnVlO1xuICAgICAgaWYgKGZsb3dfdmVyc2lvbi5faWQgIT09IHZlcnNpb25JZCkge1xuICAgICAgICBmbG93X3ZlcnNpb24gPSBmbG93Lmhpc3RvcnlzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdmVyc2lvbklkKTtcbiAgICAgICAgZmxvd192ZXJzaW9uLmxhdGVzdCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZsb3dfdmVyc2lvbjtcbiAgICB9XG4gIH07XG4gIGhhbmRsZSA9IGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDogZmxvd0lkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIF9pZDogMSxcbiAgICAgIFwiY3VycmVudC5tb2RpZmllZFwiOiAxXG4gICAgfVxuICB9KS5vYnNlcnZlQ2hhbmdlcyh7XG4gICAgY2hhbmdlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJmbG93X3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rmxvd1ZlcnNpb24oaWQsIHZlcnNpb25JZCkpO1xuICAgIH1cbiAgfSk7XG4gIHNlbGYuYWRkZWQoXCJmbG93X3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rmxvd1ZlcnNpb24oZmxvd0lkLCB2ZXJzaW9uSWQpKTtcbiAgc2VsZi5yZWFkeSgpO1xuICByZXR1cm4gc2VsZi5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdkaXN0cmlidXRlX29wdGlvbmFsX2Zsb3dzJywgZnVuY3Rpb24oZmxvd19pZHMpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFmbG93X2lkcykge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDoge1xuICAgICAgJGluOiBmbG93X2lkc1xuICAgIH1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIGZvcm06IDEsXG4gICAgICBzdGF0ZTogMSxcbiAgICAgIHBlcm1zOiAxLFxuICAgICAgc3BhY2U6IDEsXG4gICAgICBkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuICAgICAgZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuICAgICAgZGlzdHJpYnV0ZV9lbmRfbm90aWZpY2F0aW9uOiAxLFxuICAgICAgY29tcGFueV9pZDogMSxcbiAgICAgIGVuYWJsZV9hbWlzZm9ybTogMVxuICAgIH1cbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goJ2Zsb3cnLCBmdW5jdGlvbihzcGFjZUlkLCBmbG93SWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZsb3dJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgIF9pZDogZmxvd0lkLFxuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIHByaW50X3RlbXBsYXRlOiAxLFxuICAgICAgaW5zdGFuY2VfdGVtcGxhdGU6IDEsXG4gICAgICBldmVudHM6IDEsXG4gICAgICBkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuICAgICAgZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuICAgICAgdXBsb2FkX2FmdGVyX2JlaW5nX2Rpc3RyaWJ1dGVkOiAxLFxuICAgICAgZGlzdHJpYnV0ZV9lbmRfbm90aWZpY2F0aW9uOiAxLFxuICAgICAgY29tcGFueV9pZDogMSxcbiAgICAgIGFsbG93X3NlbGVjdF9zdGVwOiAxLFxuICAgICAgZW5hYmxlX2FtaXNmb3JtOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnZmxvd19maWxlcycsIGZ1bmN0aW9uKHNwYWNlSWQsIGZsb3dJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghZmxvd0lkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gY2ZzLmZpbGVzLmZpbmQoe1xuICAgICdtZXRhZGF0YS5zcGFjZSc6IHNwYWNlSWQsXG4gICAgJ21ldGFkYXRhLm9iamVjdF9uYW1lJzogJ2Zsb3dzJyxcbiAgICAnbWV0YWRhdGEucmVjb3JkX2lkJzogZmxvd0lkXG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlKCdmbG93c190YWJ1bGFyJywgZnVuY3Rpb24odGFibGVOYW1lLCBpZHMsIGZpZWxkcykge1xuICBjaGVjayh0YWJsZU5hbWUsIFN0cmluZyk7XG4gIGNoZWNrKGlkcywgQXJyYXkpO1xuICBjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICB0aGlzLnVuYmxvY2soKTtcbiAgcmV0dXJuIHtcbiAgICBmaW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgICAgICBfaWQ6IHtcbiAgICAgICAgICAkaW46IGlkc1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczogZmllbGRzXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICB7XG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKGZsb3cpIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogZmxvdy5zcGFjZSxcbiAgICAgICAgICAgIHVzZXI6IGZsb3cuY3VycmVudC5tb2RpZmllZF9ieVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBzcGFjZTogMSxcbiAgICAgICAgICAgICAgdXNlcjogMSxcbiAgICAgICAgICAgICAgbmFtZTogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKGZsb3cpIHtcbiAgICAgICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgICAgICByZXR1cm4gZGIuZm9ybXMuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogZmxvdy5zcGFjZSxcbiAgICAgICAgICAgIF9pZDogZmxvdy5mb3JtXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIHNwYWNlOiAxLFxuICAgICAgICAgICAgICBfaWQ6IDEsXG4gICAgICAgICAgICAgIG5hbWU6IDEsXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24oZmxvdykge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5jYXRlZ29yaWVzLmZpbmQoe1xuICAgICAgICAgICAgc3BhY2U6IGZsb3cuc3BhY2VcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgICAgIF9pZDogMSxcbiAgICAgICAgICAgICAgbmFtZTogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufSk7XG4iLCJNZXRlb3IucHVibGlzaCAnZm9ybXMnLCAoc3BhY2VJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRyZXR1cm4gZGIuZm9ybXMuZmluZCh7c3BhY2U6IHNwYWNlSWR9LCB7ZmllbGRzOiB7bmFtZTogMSwgY2F0ZWdvcnk6IDEsIHN0YXRlOiAxLCBkZXNjcmlwdGlvbjogMSwgaW5zdGFuY2Vfc3R5bGU6IDEsIGFtaXNfc2NoZW1hOiAxfX0pXG5cbk1ldGVvci5wdWJsaXNoICdpbnN0YW5jZV9mb3JtJywgKHNwYWNlSWQsIGZvcm1JZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRyZXR1cm4gZGIuZm9ybXMuZmluZCh7X2lkOiBmb3JtSWQsIHNwYWNlOiBzcGFjZUlkfSwge2ZpZWxkczoge25hbWU6IDEsIGNhdGVnb3J5OiAxLCBzdGF0ZTogMSwgZGVzY3JpcHRpb246IDEsIGluc3RhbmNlX3N0eWxlOiAxLCBhbWlzX3NjaGVtYTogMX19KVxuXG5cbk1ldGVvci5wdWJsaXNoICdmb3JtX3ZlcnNpb24nLCAoc3BhY2VJZCwgZm9ybUlkLCB2ZXJzaW9uSWQpIC0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgZm9ybUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyB2ZXJzaW9uSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRzZWxmID0gdGhpcztcblxuXHRnZXRGb3JtVmVyc2lvbiA9IChpZCAsIHZlcnNpb25JZCktPlxuXHRcdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtfaWQgOiBpZH0pO1xuXHRcdGlmICFmb3JtXG5cdFx0XHRyZXR1cm4ge31cblx0XHRmb3JtX3ZlcnNpb24gPSBmb3JtLmN1cnJlbnRcblx0XHRmb3JtX3ZlcnNpb24ubGF0ZXN0ID0gdHJ1ZVxuXHRcdGlmIGZvcm1fdmVyc2lvbi5faWQgIT0gdmVyc2lvbklkXG5cdFx0XHRmb3JtX3ZlcnNpb24gPSBmb3JtLmhpc3RvcnlzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdmVyc2lvbklkKVxuXHRcdFx0Zm9ybV92ZXJzaW9uLmxhdGVzdCA9IGZhbHNlXG5cdFx0cmV0dXJuIGZvcm1fdmVyc2lvblxuXG5cdGhhbmRsZSA9IGRiLmZvcm1zLmZpbmQoe19pZDogZm9ybUlkfSwge2ZpZWxkczoge19pZDogMSwgXCJjdXJyZW50Lm1vZGlmaWVkXCI6IDF9fSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGNoYW5nZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5jaGFuZ2VkKFwiZm9ybV92ZXJzaW9uc1wiLCB2ZXJzaW9uSWQsIGdldEZvcm1WZXJzaW9uKGlkLCB2ZXJzaW9uSWQpKTtcblx0fVxuXG5cdHNlbGYuYWRkZWQoXCJmb3JtX3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rm9ybVZlcnNpb24oZm9ybUlkLCB2ZXJzaW9uSWQpKTtcblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKSIsIk1ldGVvci5wdWJsaXNoKCdmb3JtcycsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZm9ybXMuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIGNhdGVnb3J5OiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogMSxcbiAgICAgIGluc3RhbmNlX3N0eWxlOiAxLFxuICAgICAgYW1pc19zY2hlbWE6IDFcbiAgICB9XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdpbnN0YW5jZV9mb3JtJywgZnVuY3Rpb24oc3BhY2VJZCwgZm9ybUlkKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZvcm1zLmZpbmQoe1xuICAgIF9pZDogZm9ybUlkLFxuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBjYXRlZ29yeTogMSxcbiAgICAgIHN0YXRlOiAxLFxuICAgICAgZGVzY3JpcHRpb246IDEsXG4gICAgICBpbnN0YW5jZV9zdHlsZTogMSxcbiAgICAgIGFtaXNfc2NoZW1hOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnZm9ybV92ZXJzaW9uJywgZnVuY3Rpb24oc3BhY2VJZCwgZm9ybUlkLCB2ZXJzaW9uSWQpIHtcbiAgdmFyIGdldEZvcm1WZXJzaW9uLCBoYW5kbGUsIHNlbGY7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFmb3JtSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghdmVyc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBzZWxmID0gdGhpcztcbiAgZ2V0Rm9ybVZlcnNpb24gPSBmdW5jdGlvbihpZCwgdmVyc2lvbklkKSB7XG4gICAgdmFyIGZvcm0sIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGlkXG4gICAgfSk7XG4gICAgaWYgKCFmb3JtKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGZvcm1fdmVyc2lvbiA9IGZvcm0uY3VycmVudDtcbiAgICBmb3JtX3ZlcnNpb24ubGF0ZXN0ID0gdHJ1ZTtcbiAgICBpZiAoZm9ybV92ZXJzaW9uLl9pZCAhPT0gdmVyc2lvbklkKSB7XG4gICAgICBmb3JtX3ZlcnNpb24gPSBmb3JtLmhpc3RvcnlzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdmVyc2lvbklkKTtcbiAgICAgIGZvcm1fdmVyc2lvbi5sYXRlc3QgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1fdmVyc2lvbjtcbiAgfTtcbiAgaGFuZGxlID0gZGIuZm9ybXMuZmluZCh7XG4gICAgX2lkOiBmb3JtSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgX2lkOiAxLFxuICAgICAgXCJjdXJyZW50Lm1vZGlmaWVkXCI6IDFcbiAgICB9XG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHNlbGYuY2hhbmdlZChcImZvcm1fdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGb3JtVmVyc2lvbihpZCwgdmVyc2lvbklkKSk7XG4gICAgfVxuICB9KTtcbiAgc2VsZi5hZGRlZChcImZvcm1fdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGb3JtVmVyc2lvbihmb3JtSWQsIHZlcnNpb25JZCkpO1xuICBzZWxmLnJlYWR5KCk7XG4gIHJldHVybiBzZWxmLm9uU3RvcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaGFuZGxlLnN0b3AoKTtcbiAgfSk7XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoICdpbnN0YW5jZV9kYXRhJywgKGluc3RhbmNlSWQsIGJveCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIChpbnN0YW5jZUlkICYmIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IGluc3RhbmNlSWR9KS5jb3VudCgpKVxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpcztcblxuXHRtaW5pQXBwcm92ZUZpZWxkcyA9IFsnX2lkJywgJ2lzX2ZpbmlzaGVkJywgJ3VzZXInLCAnaGFuZGxlcicsICdoYW5kbGVyX25hbWUnLCAndHlwZScsICdzdGFydF9kYXRlJywgJ2Rlc2NyaXB0aW9uJyxcblx0XHQnaXNfcmVhZCcsICdqdWRnZScsICdmaW5pc2hfZGF0ZScsICdmcm9tX3VzZXJfbmFtZScsICdmcm9tX3VzZXInLCAnY2NfZGVzY3JpcHRpb24nLCAnYXV0b19zdWJtaXR0ZWQnXVxuXG5cdHRyaWdnZXJDaGFuZ2VGaWVsZHMgPSBbJ2Zvcm1fdmVyc2lvbicsICdmbG93X3ZlcnNpb24nLCAncmVsYXRlZF9pbnN0YW5jZXMnLCAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycsICd2YWx1ZXMnLCAnY2hhbmdlX3RpbWUnXVxuXG5cdHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXMgPSB7fVxuXG5cdGluc3RhbmNlX2ZpZWxkc18wID0ge1xuXHRcdFwicmVjb3JkX3N5bmNlZFwiOiAwLFxuXG4jXHRcdFwidHJhY2VzLmFwcHJvdmVzLmhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmhhbmRsZXJfb3JnYW5pemF0aW9uXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuY29zdF90aW1lXCI6IDAsXG4jXHRcdFwidHJhY2VzLmFwcHJvdmVzLnJlYWRfZGF0ZVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmlzX2Vycm9yXCI6IDAsXG5cdFx0IyBcInRyYWNlcy5hcHByb3Zlcy51c2VyX25hbWVcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5kZWFkbGluZVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLnJlbWluZF9kYXRlXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMucmVtaW5kZWRfY291bnRcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5tb2RpZmllZF9ieVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLm1vZGlmaWVkXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuZ2VvbG9jYXRpb25cIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5jY191c2Vyc1wiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmZyb21fYXBwcm92ZV9pZFwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLnZhbHVlc19oaXN0b3J5XCI6IDBcblx0fVxuXG5cdGdldE15YXBwcm92ZU1vZGlmaWVkID0gKHRyYWNlcyktPlxuXHRcdG15QXBwcm92ZU1vZGlmaWVkcyA9IG5ldyBBcnJheSgpXG5cblx0XHR0cmFjZXM/LmZvckVhY2ggKHRyYWNlKS0+XG5cdFx0XHR0cmFjZT8uYXBwcm92ZXM/LmZvckVhY2ggKGFwcHJvdmUpLT5cblx0XHRcdFx0aWYgKGFwcHJvdmUudXNlciA9PSBzZWxmLnVzZXJJZCB8fCBhcHByb3ZlLmhhbmRsZXIgPT0gc2VsZi51c2VySWQpXG5cdFx0XHRcdCMgJiYgIWFwcHJvdmUuaXNfZmluaXNoZWRcbiNcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJhcHByb3ZlXCIsIGFwcHJvdmUuX2lkLCBhcHByb3ZlLnJlYWRfZGF0ZSlcblxuXHRcdFx0XHRcdG15QXBwcm92ZU1vZGlmaWVkcy5wdXNoKGFwcHJvdmUucmVhZF9kYXRlKVxuXG5cdFx0cmV0dXJuIG15QXBwcm92ZU1vZGlmaWVkc1xuXG5cblx0Z2V0TWluaUluc3RhbmNlID0gKF9pbnN0YW5jZUlkKS0+XG5cdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBfaW5zdGFuY2VJZH0sIHtmaWVsZHM6IGluc3RhbmNlX2ZpZWxkc18wfSlcblxuXHRcdGlmIGluc3RhbmNlXG5cblx0XHRcdHRyaWdnZXJDaGFuZ2VGaWVsZHMuZm9yRWFjaCAoa2V5KS0+XG5cdFx0XHRcdGlmIGtleSA9PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcydcblx0XHRcdFx0XHR0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0gPSBnZXRNeWFwcHJvdmVNb2RpZmllZChpbnN0YW5jZS50cmFjZXMpXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0gPSBpbnN0YW5jZVtrZXldXG5cbiNcdFx0XHRoYXNPcGluaW9uRmllbGQgPSBJbnN0YW5jZVNpZ25UZXh0LmluY2x1ZGVzT3BpbmlvbkZpZWxkKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbilcblxuXHRcdFx0c2hvd19tb2RhbF90cmFjZXNfbGlzdCA9IGRiLnNwYWNlX3NldHRpbmdzLmZpbmRPbmUoeyBzcGFjZTogaW5zdGFuY2Uuc3BhY2UsIGtleTogXCJzaG93X21vZGFsX3RyYWNlc19saXN0XCIgfSwgeyBmaWVsZHM6IHsgdmFsdWVzOiAxIH0gfSk/LnZhbHVlcyB8fCBmYWxzZVxuXG5cdFx0XHRpZiBzaG93X21vZGFsX3RyYWNlc19saXN0XG5cblx0XHRcdFx0dHJhY2VzID0gbmV3IEFycmF5KCk7XG5cblx0XHRcdFx0aW5zdGFuY2U/LnRyYWNlcz8uZm9yRWFjaCAodHJhY2UpLT5cblx0XHRcdFx0XHRfdHJhY2UgPSBfLmNsb25lKHRyYWNlKVxuXG5cdFx0XHRcdFx0YXBwcm92ZXMgPSBuZXcgQXJyYXkoKVxuXG5cdFx0XHRcdFx0dHJhY2U/LmFwcHJvdmVzPy5mb3JFYWNoIChhcHByb3ZlKS0+XG5cdFx0XHRcdFx0XHRpZiBhcHByb3ZlLnR5cGUgIT0gJ2NjJyB8fCBhcHByb3ZlLnVzZXIgPT0gc2VsZi51c2VySWQgfHwgYXBwcm92ZS5oYW5kbGVyID09IHNlbGYudXNlcklkIHx8ICghXy5pc0VtcHR5KGFwcHJvdmUuc2lnbl9maWVsZF9jb2RlKSlcblx0XHRcdFx0XHRcdFx0YXBwcm92ZXMucHVzaChhcHByb3ZlKVxuXG5cdFx0XHRcdFx0X3RyYWNlLmFwcHJvdmVzID0gYXBwcm92ZXNcblxuXHRcdFx0XHRcdHRyYWNlcy5wdXNoKF90cmFjZSlcblxuXHRcdFx0XHRpbnN0YW5jZS50cmFjZXMgPSB0cmFjZXM7XG5cblx0XHRyZXR1cm4gaW5zdGFuY2VcblxuXG5cdG5lZWRDaGFuZ2UgPSAoY2hhbmdlRmllbGRzKS0+XG5cdFx0aWYgY2hhbmdlRmllbGRzXG5cblx0XHRcdF9jaGFuZ2UgPSBmYWxzZVxuXG5cdFx0XHRfcmV2ID0gXy5maW5kIHRyaWdnZXJDaGFuZ2VGaWVsZHMsIChrZXkpLT5cblx0XHRcdFx0X2tleSA9IGtleVxuXG5cdFx0XHRcdGlmIGtleSA9PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcydcblx0XHRcdFx0XHRfa2V5ID0gJ3RyYWNlcydcblxuXHRcdFx0XHRpZiBfLmhhcyhjaGFuZ2VGaWVsZHMsIF9rZXkpXG5cblx0XHRcdFx0XHRpZiBrZXkgPT0gJ19teV9hcHByb3ZlX3JlYWRfZGF0ZXMnXG5cblx0XHRcdFx0XHRcdF9teV9hcHByb3ZlX21vZGlmaWVkcyA9IGdldE15YXBwcm92ZU1vZGlmaWVkKGNoYW5nZUZpZWxkcy50cmFjZXMpXG5cbiNcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0sIF9teV9hcHByb3ZlX21vZGlmaWVkcylcblxuXHRcdFx0XHRcdFx0cmV0dXJuICFfLmlzRXF1YWwodHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldLCBfbXlfYXBwcm92ZV9tb2RpZmllZHMpXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0cmV0dXJuICFfLmlzRXF1YWwodHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldLCBjaGFuZ2VGaWVsZHNba2V5XSlcblxuXHRcdFx0aWYgX3JldlxuXHRcdFx0XHRfY2hhbmdlID0gdHJ1ZVxuXG4jXHRcdFx0Y29uc29sZS5sb2coX3JldiwgX2NoYW5nZSlcblxuXHRcdFx0cmV0dXJuIF9jaGFuZ2VcblxuXHRcdHJldHVybiB0cnVlXG5cdCPmraTlpITkuI3og73mt7vliqBmaWVsZHPpmZDliLbvvIzlkKbliJnkvJrlr7zoh7TmlbDmja7kuI3lrp7ml7Zcblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogaW5zdGFuY2VJZH0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRjaGFuZ2VkOiAoaWQsIGZpZWxkcyktPlxuXHRcdFx0aWYoYm94ICE9ICdpbmJveCcgfHwgbmVlZENoYW5nZShmaWVsZHMpKVxuXHRcdFx0XHRzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGdldE1pbmlJbnN0YW5jZShpZCkpO1xuXHRcdHJlbW92ZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcblx0fVxuXG5cdGluc3RhbmNlID0gZ2V0TWluaUluc3RhbmNlKGluc3RhbmNlSWQpXG5cblx0c2VsZi5hZGRlZChcImluc3RhbmNlc1wiLCBpbnN0YW5jZT8uX2lkLCBpbnN0YW5jZSk7XG5cblx0c2VsZi5yZWFkeSgpO1xuXG5cdHNlbGYub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpXG5cblxuTWV0ZW9yLnB1Ymxpc2ggJ2luc3RhbmNlX3RyYWNlcycsIChpbnN0YW5jZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgaW5zdGFuY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpc1xuXG5cdGdldEluc3RhbmNlVHJhY2VzID0gKF9pbnNJZCktPlxuXHRcdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBfaW5zSWR9LCB7ZmllbGRzOiB7X2lkOiAxLCB0cmFjZXM6IDF9fSlcblxuXG5cdGhhbmRsZSA9ICBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiBpbnN0YW5jZUlkfSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGNoYW5nZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VfdHJhY2VzXCIsIGluc3RhbmNlSWQsIGdldEluc3RhbmNlVHJhY2VzKGluc3RhbmNlSWQpKTtcblx0fVxuXG5cdHNlbGYuYWRkZWQoXCJpbnN0YW5jZV90cmFjZXNcIiwgaW5zdGFuY2VJZCwgZ2V0SW5zdGFuY2VUcmFjZXMoaW5zdGFuY2VJZCkpO1xuXG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKCkiLCJNZXRlb3IucHVibGlzaCgnaW5zdGFuY2VfZGF0YScsIGZ1bmN0aW9uKGluc3RhbmNlSWQsIGJveCkge1xuICB2YXIgZ2V0TWluaUluc3RhbmNlLCBnZXRNeWFwcHJvdmVNb2RpZmllZCwgaGFuZGxlLCBpbnN0YW5jZSwgaW5zdGFuY2VfZmllbGRzXzAsIG1pbmlBcHByb3ZlRmllbGRzLCBuZWVkQ2hhbmdlLCBzZWxmLCB0cmlnZ2VyQ2hhbmdlRmllbGRzLCB0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIShpbnN0YW5jZUlkICYmIGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IGluc3RhbmNlSWRcbiAgfSkuY291bnQoKSkpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBtaW5pQXBwcm92ZUZpZWxkcyA9IFsnX2lkJywgJ2lzX2ZpbmlzaGVkJywgJ3VzZXInLCAnaGFuZGxlcicsICdoYW5kbGVyX25hbWUnLCAndHlwZScsICdzdGFydF9kYXRlJywgJ2Rlc2NyaXB0aW9uJywgJ2lzX3JlYWQnLCAnanVkZ2UnLCAnZmluaXNoX2RhdGUnLCAnZnJvbV91c2VyX25hbWUnLCAnZnJvbV91c2VyJywgJ2NjX2Rlc2NyaXB0aW9uJywgJ2F1dG9fc3VibWl0dGVkJ107XG4gIHRyaWdnZXJDaGFuZ2VGaWVsZHMgPSBbJ2Zvcm1fdmVyc2lvbicsICdmbG93X3ZlcnNpb24nLCAncmVsYXRlZF9pbnN0YW5jZXMnLCAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycsICd2YWx1ZXMnLCAnY2hhbmdlX3RpbWUnXTtcbiAgdHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlcyA9IHt9O1xuICBpbnN0YW5jZV9maWVsZHNfMCA9IHtcbiAgICBcInJlY29yZF9zeW5jZWRcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5oYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMuaGFuZGxlcl9vcmdhbml6YXRpb25cIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5jb3N0X3RpbWVcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5pc19lcnJvclwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmRlYWRsaW5lXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMucmVtaW5kX2RhdGVcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5yZW1pbmRlZF9jb3VudFwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLm1vZGlmaWVkX2J5XCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMubW9kaWZpZWRcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5nZW9sb2NhdGlvblwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmNjX3VzZXJzXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMuZnJvbV9hcHByb3ZlX2lkXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMudmFsdWVzX2hpc3RvcnlcIjogMFxuICB9O1xuICBnZXRNeWFwcHJvdmVNb2RpZmllZCA9IGZ1bmN0aW9uKHRyYWNlcykge1xuICAgIHZhciBteUFwcHJvdmVNb2RpZmllZHM7XG4gICAgbXlBcHByb3ZlTW9kaWZpZWRzID0gbmV3IEFycmF5KCk7XG4gICAgaWYgKHRyYWNlcyAhPSBudWxsKSB7XG4gICAgICB0cmFjZXMuZm9yRWFjaChmdW5jdGlvbih0cmFjZSkge1xuICAgICAgICB2YXIgcmVmO1xuICAgICAgICByZXR1cm4gdHJhY2UgIT0gbnVsbCA/IChyZWYgPSB0cmFjZS5hcHByb3ZlcykgIT0gbnVsbCA/IHJlZi5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICBpZiAoYXBwcm92ZS51c2VyID09PSBzZWxmLnVzZXJJZCB8fCBhcHByb3ZlLmhhbmRsZXIgPT09IHNlbGYudXNlcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gbXlBcHByb3ZlTW9kaWZpZWRzLnB1c2goYXBwcm92ZS5yZWFkX2RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG15QXBwcm92ZU1vZGlmaWVkcztcbiAgfTtcbiAgZ2V0TWluaUluc3RhbmNlID0gZnVuY3Rpb24oX2luc3RhbmNlSWQpIHtcbiAgICB2YXIgaW5zdGFuY2UsIHJlZiwgcmVmMSwgc2hvd19tb2RhbF90cmFjZXNfbGlzdCwgdHJhY2VzO1xuICAgIGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBfaW5zdGFuY2VJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczogaW5zdGFuY2VfZmllbGRzXzBcbiAgICB9KTtcbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIHRyaWdnZXJDaGFuZ2VGaWVsZHMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ19teV9hcHByb3ZlX3JlYWRfZGF0ZXMnKSB7XG4gICAgICAgICAgcmV0dXJuIHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSA9IGdldE15YXBwcm92ZU1vZGlmaWVkKGluc3RhbmNlLnRyYWNlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSA9IGluc3RhbmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2hvd19tb2RhbF90cmFjZXNfbGlzdCA9ICgocmVmID0gZGIuc3BhY2Vfc2V0dGluZ3MuZmluZE9uZSh7XG4gICAgICAgIHNwYWNlOiBpbnN0YW5jZS5zcGFjZSxcbiAgICAgICAga2V5OiBcInNob3dfbW9kYWxfdHJhY2VzX2xpc3RcIlxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICB2YWx1ZXM6IDFcbiAgICAgICAgfVxuICAgICAgfSkpICE9IG51bGwgPyByZWYudmFsdWVzIDogdm9pZCAwKSB8fCBmYWxzZTtcbiAgICAgIGlmIChzaG93X21vZGFsX3RyYWNlc19saXN0KSB7XG4gICAgICAgIHRyYWNlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICgocmVmMSA9IGluc3RhbmNlLnRyYWNlcykgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmVmMS5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNlKSB7XG4gICAgICAgICAgICAgIHZhciBfdHJhY2UsIGFwcHJvdmVzLCByZWYyO1xuICAgICAgICAgICAgICBfdHJhY2UgPSBfLmNsb25lKHRyYWNlKTtcbiAgICAgICAgICAgICAgYXBwcm92ZXMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgICAgICAgaWYgKHRyYWNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHJlZjIgPSB0cmFjZS5hcHByb3ZlcykgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgcmVmMi5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcHJvdmUudHlwZSAhPT0gJ2NjJyB8fCBhcHByb3ZlLnVzZXIgPT09IHNlbGYudXNlcklkIHx8IGFwcHJvdmUuaGFuZGxlciA9PT0gc2VsZi51c2VySWQgfHwgKCFfLmlzRW1wdHkoYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHByb3Zlcy5wdXNoKGFwcHJvdmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RyYWNlLmFwcHJvdmVzID0gYXBwcm92ZXM7XG4gICAgICAgICAgICAgIHJldHVybiB0cmFjZXMucHVzaChfdHJhY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlLnRyYWNlcyA9IHRyYWNlcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuICBuZWVkQ2hhbmdlID0gZnVuY3Rpb24oY2hhbmdlRmllbGRzKSB7XG4gICAgdmFyIF9jaGFuZ2UsIF9yZXY7XG4gICAgaWYgKGNoYW5nZUZpZWxkcykge1xuICAgICAgX2NoYW5nZSA9IGZhbHNlO1xuICAgICAgX3JldiA9IF8uZmluZCh0cmlnZ2VyQ2hhbmdlRmllbGRzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgdmFyIF9rZXksIF9teV9hcHByb3ZlX21vZGlmaWVkcztcbiAgICAgICAgX2tleSA9IGtleTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ19teV9hcHByb3ZlX3JlYWRfZGF0ZXMnKSB7XG4gICAgICAgICAgX2tleSA9ICd0cmFjZXMnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmhhcyhjaGFuZ2VGaWVsZHMsIF9rZXkpKSB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ19teV9hcHByb3ZlX3JlYWRfZGF0ZXMnKSB7XG4gICAgICAgICAgICBfbXlfYXBwcm92ZV9tb2RpZmllZHMgPSBnZXRNeWFwcHJvdmVNb2RpZmllZChjaGFuZ2VGaWVsZHMudHJhY2VzKTtcbiAgICAgICAgICAgIHJldHVybiAhXy5pc0VxdWFsKHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSwgX215X2FwcHJvdmVfbW9kaWZpZWRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICFfLmlzRXF1YWwodHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldLCBjaGFuZ2VGaWVsZHNba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChfcmV2KSB7XG4gICAgICAgIF9jaGFuZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jaGFuZ2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgX2lkOiBpbnN0YW5jZUlkXG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCwgZmllbGRzKSB7XG4gICAgICBpZiAoYm94ICE9PSAnaW5ib3gnIHx8IG5lZWRDaGFuZ2UoZmllbGRzKSkge1xuICAgICAgICByZXR1cm4gc2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VzXCIsIGlkLCBnZXRNaW5pSW5zdGFuY2UoaWQpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZWQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgICByZXR1cm4gc2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcbiAgICB9XG4gIH0pO1xuICBpbnN0YW5jZSA9IGdldE1pbmlJbnN0YW5jZShpbnN0YW5jZUlkKTtcbiAgc2VsZi5hZGRlZChcImluc3RhbmNlc1wiLCBpbnN0YW5jZSAhPSBudWxsID8gaW5zdGFuY2UuX2lkIDogdm9pZCAwLCBpbnN0YW5jZSk7XG4gIHNlbGYucmVhZHkoKTtcbiAgcmV0dXJuIHNlbGYub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnaW5zdGFuY2VfdHJhY2VzJywgZnVuY3Rpb24oaW5zdGFuY2VJZCkge1xuICB2YXIgZ2V0SW5zdGFuY2VUcmFjZXMsIGhhbmRsZSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFpbnN0YW5jZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBzZWxmID0gdGhpcztcbiAgZ2V0SW5zdGFuY2VUcmFjZXMgPSBmdW5jdGlvbihfaW5zSWQpIHtcbiAgICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBfaW5zSWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgX2lkOiAxLFxuICAgICAgICB0cmFjZXM6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgaGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgIF9pZDogaW5zdGFuY2VJZFxuICB9KS5vYnNlcnZlQ2hhbmdlcyh7XG4gICAgY2hhbmdlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZV90cmFjZXNcIiwgaW5zdGFuY2VJZCwgZ2V0SW5zdGFuY2VUcmFjZXMoaW5zdGFuY2VJZCkpO1xuICAgIH1cbiAgfSk7XG4gIHNlbGYuYWRkZWQoXCJpbnN0YW5jZV90cmFjZXNcIiwgaW5zdGFuY2VJZCwgZ2V0SW5zdGFuY2VUcmFjZXMoaW5zdGFuY2VJZCkpO1xuICBzZWxmLnJlYWR5KCk7XG4gIHJldHVybiBzZWxmLm9uU3RvcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaGFuZGxlLnN0b3AoKTtcbiAgfSk7XG59KTtcbiIsIlxuXHRNZXRlb3IucHVibGlzaCAnaW5zdGFuY2VzX2xpc3QnLCAoc3BhY2VJZCwgYm94LCBmbG93SWQpLT5cblxuXHRcdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXHRcdFxuXHRcdHVubGVzcyBzcGFjZUlkXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0XHRxdWVyeSA9IHtzcGFjZTogc3BhY2VJZH1cblx0XHRpZiBib3ggPT0gXCJpbmJveFwiXG5cdFx0XHRxdWVyeS5pbmJveF91c2VycyA9IHRoaXMudXNlcklkO1xuXHRcdGVsc2UgaWYgYm94ID09IFwib3V0Ym94XCJcblx0XHRcdHF1ZXJ5Lm91dGJveF91c2VycyA9IHRoaXMudXNlcklkO1xuXHRcdGVsc2UgaWYgYm94ID09IFwiZHJhZnRcIlxuXHRcdFx0cXVlcnkuc3VibWl0dGVyID0gdGhpcy51c2VySWQ7XG5cdFx0XHRxdWVyeS5zdGF0ZSA9IFwiZHJhZnRcIlxuXHRcdGVsc2UgaWYgYm94ID09IFwicGVuZGluZ1wiXG5cdFx0XHRxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcblx0XHRcdHF1ZXJ5LnN0YXRlID0gXCJwZW5kaW5nXCJcblx0XHRlbHNlIGlmIGJveCA9PSBcImNvbXBsZXRlZFwiXG5cdFx0XHRxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcblx0XHRcdHF1ZXJ5LnN0YXRlID0gXCJjb21wbGV0ZWRcIlxuXHRcdGVsc2UgaWYgYm94ID09IFwibW9uaXRvclwiXG5cdFx0XHRxdWVyeS5mbG93ID0gZmxvd0lkO1xuXHRcdFx0cXVlcnkuc3RhdGUgPSB7JGluOiBbXCJwZW5kaW5nXCIsXCJjb21wbGV0ZWRcIl19O1xuXHRcdGVsc2Vcblx0XHRcdHF1ZXJ5LnN0YXRlID0gXCJub25lXCJcblxuXHRcdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZChxdWVyeSwge2ZpZWxkczoge25hbWU6MSwgY3JlYXRlZDoxLCBmb3JtOjEsIGZsb3c6IDEsIHNwYWNlOjEsIG1vZGlmaWVkOjEsIGFwcGxpY2FudDogMSwgaXNfYXJjaGl2ZWQ6MSwgZm9ybV92ZXJzaW9uOiAxLCBmbG93X3ZlcnNpb246IDF9fSlcblxuIiwiTWV0ZW9yLnB1Ymxpc2goJ2luc3RhbmNlc19saXN0JywgZnVuY3Rpb24oc3BhY2VJZCwgYm94LCBmbG93SWQpIHtcbiAgdmFyIHF1ZXJ5O1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHF1ZXJ5ID0ge1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH07XG4gIGlmIChib3ggPT09IFwiaW5ib3hcIikge1xuICAgIHF1ZXJ5LmluYm94X3VzZXJzID0gdGhpcy51c2VySWQ7XG4gIH0gZWxzZSBpZiAoYm94ID09PSBcIm91dGJveFwiKSB7XG4gICAgcXVlcnkub3V0Ym94X3VzZXJzID0gdGhpcy51c2VySWQ7XG4gIH0gZWxzZSBpZiAoYm94ID09PSBcImRyYWZ0XCIpIHtcbiAgICBxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcbiAgICBxdWVyeS5zdGF0ZSA9IFwiZHJhZnRcIjtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwicGVuZGluZ1wiKSB7XG4gICAgcXVlcnkuc3VibWl0dGVyID0gdGhpcy51c2VySWQ7XG4gICAgcXVlcnkuc3RhdGUgPSBcInBlbmRpbmdcIjtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICBxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcbiAgICBxdWVyeS5zdGF0ZSA9IFwiY29tcGxldGVkXCI7XG4gIH0gZWxzZSBpZiAoYm94ID09PSBcIm1vbml0b3JcIikge1xuICAgIHF1ZXJ5LmZsb3cgPSBmbG93SWQ7XG4gICAgcXVlcnkuc3RhdGUgPSB7XG4gICAgICAkaW46IFtcInBlbmRpbmdcIiwgXCJjb21wbGV0ZWRcIl1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHF1ZXJ5LnN0YXRlID0gXCJub25lXCI7XG4gIH1cbiAgcmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgY3JlYXRlZDogMSxcbiAgICAgIGZvcm06IDEsXG4gICAgICBmbG93OiAxLFxuICAgICAgc3BhY2U6IDEsXG4gICAgICBtb2RpZmllZDogMSxcbiAgICAgIGFwcGxpY2FudDogMSxcbiAgICAgIGlzX2FyY2hpdmVkOiAxLFxuICAgICAgZm9ybV92ZXJzaW9uOiAxLFxuICAgICAgZmxvd192ZXJzaW9uOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuIiwibGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZSA9IChpbnN0YW5jZWlkLCB1c2VySWQsIGRhdGFNYXAsIGNhbGxiYWNrKS0+XG5cdG9wZXJhdGlvbiA9IFt7XG5cdFx0XCIkbWF0Y2hcIjoge1xuXHRcdFx0XCJfaWRcIjogaW5zdGFuY2VpZFxuXHRcdH1cblx0fSwge1wiJHByb2plY3RcIjoge1wibmFtZVwiOiAxLCBcIl9hcHByb3ZlXCI6IFwiJHRyYWNlcy5hcHByb3Zlc1wifX0sIHtcIiR1bndpbmRcIjogXCIkX2FwcHJvdmVcIn0sIHtcIiR1bndpbmRcIjogXCIkX2FwcHJvdmVcIn0sXG5cdFx0e1wiJG1hdGNoXCI6IHtcIl9hcHByb3ZlLmlzX2ZpbmlzaGVkXCI6IHRydWUsICRvcjpbe1wiX2FwcHJvdmUuaGFuZGxlclwiOiB1c2VySWR9LHtcIl9hcHByb3ZlLnVzZXJcIjogdXNlcklkfV19fSxcblx0XHR7XCIkZ3JvdXBcIjoge1wiX2lkXCI6IFwiJF9pZFwiLCBcImZpbmlzaF9kYXRlXCI6IHtcIiRsYXN0XCI6IFwiJF9hcHByb3ZlLmZpbmlzaF9kYXRlXCJ9fX1cblx0XVxuXG5cdGRiLmluc3RhbmNlcy5yYXdDb2xsZWN0aW9uKCkuYWdncmVnYXRlKG9wZXJhdGlvbikudG9BcnJheSAoZXJyLCBkYXRhKS0+XG5cdFx0aWYgZXJyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyKVxuXG5cdFx0ZGF0YS5mb3JFYWNoIChkb2MpIC0+XG5cdFx0XHRkYXRhTWFwLnB1c2ggZG9jXG5cblx0XHRpZiBjYWxsYmFjayAmJiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spXG5cdFx0XHRjYWxsYmFjaygpXG5cdFx0cmV0dXJuXG5cbmFzeW5jTGFzdEZpbmlzaGVkQXBwcm92ZSA9IE1ldGVvci53cmFwQXN5bmMobGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZSlcblxuTWV0ZW9yLnB1Ymxpc2ggXCJpbnN0YW5jZV90YWJ1bGFyXCIsICh0YWJsZU5hbWUsIGlkcywgZmllbGRzKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRjaGVjayh0YWJsZU5hbWUsIFN0cmluZyk7XG5cblx0Y2hlY2soaWRzLCBBcnJheSk7XG5cblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKVxuXG5cdGZpZWxkcy5jY191c2VycyA9IDFcblxuXHRzZWxmID0gdGhpcztcblxuXHRnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUgPSAodXNlcklkLCBpbnN0YW5jZUlkKS0+XG5cdFx0ZGF0YSA9IFtdXG5cdFx0YXN5bmNMYXN0RmluaXNoZWRBcHByb3ZlKGluc3RhbmNlSWQsIHVzZXJJZCwgZGF0YSlcblx0XHRpZiBkYXRhLmxlbmd0aCA+IDBcblx0XHRcdHJldHVybiBkYXRhWzBdXG5cblxuXHRnZXRNeUFwcHJvdmUgPSAodXNlcklkLCBpbnN0YW5jZUlkKS0+XG5cdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZUlkfSwge2ZpZWxkczoge3RyYWNlczogMX19KVxuXHRcdG15QXBwcm92ZSA9IG51bGxcblxuXHRcdGlmICFpbnN0YW5jZVxuXHRcdFx0cmV0dXJuXG5cblx0XHRpZiAhaW5zdGFuY2UudHJhY2VzIHx8IGluc3RhbmNlLnRyYWNlcy5sZW5ndGggPCAxXG5cdFx0XHRyZXR1cm5cblxuXHRcdG5vdEZpbmlzaGVkVHJhY2VzID0gaW5zdGFuY2UudHJhY2VzLmZpbHRlclByb3BlcnR5KFwiaXNfZmluaXNoZWRcIiwgZmFsc2UpXG5cblx0XHRpZiBub3RGaW5pc2hlZFRyYWNlcy5sZW5ndGggPiAwXG5cdFx0XHRhcHByb3ZlcyA9IG5vdEZpbmlzaGVkVHJhY2VzWzBdLmFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwiaXNfZmluaXNoZWRcIiwgZmFsc2UpLmZpbHRlclByb3BlcnR5KFwiaGFuZGxlclwiLCB1c2VySWQpO1xuXG5cdFx0XHRpZiBhcHByb3Zlcy5sZW5ndGggPiAwXG5cdFx0XHRcdGFwcHJvdmUgPSBhcHByb3Zlc1swXVxuXHRcdFx0XHRteUFwcHJvdmUgPSB7XG5cdFx0XHRcdFx0aWQ6IGFwcHJvdmUuX2lkLFxuXHRcdFx0XHRcdGluc3RhbmNlOiBhcHByb3ZlLmluc3RhbmNlLFxuXHRcdFx0XHRcdHRyYWNlOiBhcHByb3ZlLnRyYWNlLFxuXHRcdFx0XHRcdGlzX3JlYWQ6IGFwcHJvdmUuaXNfcmVhZCxcblx0XHRcdFx0XHRzdGFydF9kYXRlOiBhcHByb3ZlLnN0YXJ0X2RhdGVcblx0XHRcdFx0XHRhZ2VudDogYXBwcm92ZS5hZ2VudFxuXHRcdFx0XHRcdHVzZXJfbmFtZTogYXBwcm92ZS51c2VyX25hbWVcblx0XHRcdFx0fVxuXG5cdFx0aWYgIW15QXBwcm92ZVxuXHRcdFx0aXNfcmVhZCA9IGZhbHNlXG5cdFx0XHRpbnN0YW5jZS50cmFjZXMuZm9yRWFjaCAodHJhY2UpIC0+XG5cdFx0XHRcdHRyYWNlPy5hcHByb3Zlcz8uZm9yRWFjaCAoYXBwcm92ZSkgLT5cblx0XHRcdFx0XHRpZiBhcHByb3ZlLnR5cGUgPT0gJ2NjJyBhbmQgYXBwcm92ZS51c2VyID09IHVzZXJJZCBhbmQgYXBwcm92ZS5pc19maW5pc2hlZCA9PSBmYWxzZVxuXHRcdFx0XHRcdFx0aWYgYXBwcm92ZS5pc19yZWFkXG5cdFx0XHRcdFx0XHRcdGlzX3JlYWQgPSB0cnVlXG5cdFx0XHRcdFx0XHRteUFwcHJvdmUgPSB7aWQ6IGFwcHJvdmUuX2lkLCBpc19yZWFkOiBpc19yZWFkLCBzdGFydF9kYXRlOiBhcHByb3ZlLnN0YXJ0X2RhdGUsIGFnZW50OiBhcHByb3ZlLmFnZW50LCB1c2VyX25hbWU6IGFwcHJvdmUudXNlcl9uYW1lfVxuXG5cdFx0cmV0dXJuIG15QXBwcm92ZVxuXG5cdGdldFN0ZXBDdXJyZW50TmFtZSA9IChpbnN0YW5jZUlkKSAtPlxuXHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaW5zdGFuY2VJZH0sIHtmaWVsZHM6IHtcInRyYWNlcy5uYW1lXCI6IDEsIFwidHJhY2VzXCI6IHskc2xpY2U6IC0xfX19KVxuXHRcdGlmIGluc3RhbmNlXG5cdFx0XHRzdGVwQ3VycmVudE5hbWUgPSBpbnN0YW5jZS50cmFjZXM/WzBdPy5uYW1lXG5cblx0XHRyZXR1cm4gc3RlcEN1cnJlbnROYW1lXG5cblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogeyRpbjogaWRzfX0sIHtmaWVsZHM6IHt0cmFjZXM6IDB9fSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGNoYW5nZWQ6IChpZCktPlxuXHRcdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpZH0sIHtmaWVsZHM6IGZpZWxkc30pXG5cdFx0XHRyZXR1cm4gaWYgbm90IGluc3RhbmNlXG5cdFx0XHRteUFwcHJvdmUgPSBnZXRNeUFwcHJvdmUoc2VsZi51c2VySWQsIGlkKVxuXHRcdFx0bXlMYXN0RmluaXNoZWRBcHByb3ZlID0gZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlKHNlbGYudXNlcklkLCBpZClcblx0XHRcdGlmIG15QXBwcm92ZVxuXHRcdFx0XHRpbnN0YW5jZS5pc19yZWFkID0gbXlBcHByb3ZlLmlzX3JlYWRcblx0XHRcdFx0aW5zdGFuY2Uuc3RhcnRfZGF0ZSA9IG15QXBwcm92ZS5zdGFydF9kYXRlXG5cdFx0XHRcdGlmIG15QXBwcm92ZS5hZ2VudFxuXHRcdFx0XHRcdGluc3RhbmNlLmFnZW50X3VzZXJfbmFtZSA9IG15QXBwcm92ZS51c2VyX25hbWVcblx0XHRcdGVsc2Vcblx0XHRcdFx0aW5zdGFuY2UuaXNfcmVhZCA9IHRydWVcblxuXHRcdFx0aWYgbXlMYXN0RmluaXNoZWRBcHByb3ZlXG5cdFx0XHRcdGluc3RhbmNlLm15X2ZpbmlzaF9kYXRlID0gbXlMYXN0RmluaXNoZWRBcHByb3ZlLmZpbmlzaF9kYXRlXG5cblx0XHRcdGluc3RhbmNlLmlzX2NjID0gaW5zdGFuY2UuY2NfdXNlcnM/LmluY2x1ZGVzKHNlbGYudXNlcklkKSB8fCBmYWxzZVxuXHRcdFx0aW5zdGFuY2UuY2NfY291bnQgPSBpbnN0YW5jZS5jY191c2Vycz8ubGVuZ3RoIHx8IDBcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZS5jY191c2Vyc1xuXHRcdFx0dHJ5XG5cdFx0XHRcdHNlbGYuY2hhbmdlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpO1xuXHRcdFx0Y2F0Y2ggZXJyb3Jcblx0XHRcdFx0Y29uc29sZS5sb2coJ2luc3RhbmNlIG9ic2VydmVDaGFuZ2VzIGVycm9yOiAnLCBlcnJvci5tZXNzYWdlKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ3NlbGYudXNlcklkOiAnLCBzZWxmLnVzZXJJZCk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCd0YWJsZU5hbWU6ICcsIHRhYmxlTmFtZSk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdpZHM6ICcsIEpTT04uc3RyaW5naWZ5KGlkcykpO1xuXHRcdFx0XHRjb25zb2xlLmxvZygnbXlBcHByb3ZlOiAnLCBKU09OLnN0cmluZ2lmeShteUFwcHJvdmUpKTtcblx0XHRyZW1vdmVkOiAoaWQpLT5cblx0XHRcdHNlbGYucmVtb3ZlZChcImluc3RhbmNlc1wiLCBpZCk7XG5cdH1cblxuXHRpZHMuZm9yRWFjaCAoaWQpLT5cblx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRyZXR1cm4gaWYgbm90IGluc3RhbmNlXG5cdFx0bXlBcHByb3ZlID0gZ2V0TXlBcHByb3ZlKHNlbGYudXNlcklkLCBpZClcblx0XHRteUxhc3RGaW5pc2hlZEFwcHJvdmUgPSBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUoc2VsZi51c2VySWQsIGlkKVxuXHRcdGlmIG15QXBwcm92ZVxuXHRcdFx0aW5zdGFuY2UuaXNfcmVhZCA9IG15QXBwcm92ZS5pc19yZWFkXG5cdFx0XHRpbnN0YW5jZS5zdGFydF9kYXRlID0gbXlBcHByb3ZlLnN0YXJ0X2RhdGVcblx0XHRcdGlmIG15QXBwcm92ZS5hZ2VudFxuXHRcdFx0XHRcdGluc3RhbmNlLmFnZW50X3VzZXJfbmFtZSA9IG15QXBwcm92ZS51c2VyX25hbWVcblx0XHRlbHNlXG5cdFx0XHRpbnN0YW5jZS5pc19yZWFkID0gdHJ1ZVxuXG5cdFx0aWYgbXlMYXN0RmluaXNoZWRBcHByb3ZlXG5cdFx0XHRpbnN0YW5jZS5teV9maW5pc2hfZGF0ZSA9IG15TGFzdEZpbmlzaGVkQXBwcm92ZS5maW5pc2hfZGF0ZVxuXG5cdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0aW5zdGFuY2UuY2NfY291bnQgPSBpbnN0YW5jZS5jY191c2Vycz8ubGVuZ3RoIHx8IDBcblx0XHRkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnNcblx0XHRzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG5cblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKVxuXG5NZXRlb3IucHVibGlzaCBcImluc3RhbmNlX3Rhc2tzX3RhYnVsYXJcIiwgKHRhYnVsYXJOYW1lLCBpZHMsIGZpZWxkcyktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0Y2hlY2sodGFidWxhck5hbWUsIFN0cmluZyk7XG5cblx0Y2hlY2soaWRzLCBBcnJheSk7XG5cblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKVxuXG5cdCMgY29uc29sZS5sb2coJ3RhYnVsYXJOYW1lOiAnLCB0YWJ1bGFyTmFtZSk7XG5cdCMgY29uc29sZS5sb2coJ2lkczogJywgSlNPTi5zdHJpbmdpZnkoaWRzKSk7XG5cdCMgY29uc29sZS5sb2coJ2ZpZWxkczogJywgSlNPTi5zdHJpbmdpZnkoZmllbGRzKSk7XG5cblx0ZGIuaW5zdGFuY2VfdGFza3MuZmluZCh7XG5cdFx0X2lkOiB7XG5cdFx0XHQkaW46IGlkc1xuXHRcdH1cblx0fSwge1xuXHRcdGZpZWxkczogZmllbGRzXG5cdH0pXG5cbk1ldGVvci5wdWJsaXNoIFwiaW5zdGFuY2VzX3RhYnVsYXJcIiwgKHRhYnVsYXJOYW1lLCBpZHMsIGZpZWxkcyktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0Y2hlY2sodGFidWxhck5hbWUsIFN0cmluZyk7XG5cblx0Y2hlY2soaWRzLCBBcnJheSk7XG5cblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKVxuXG5cdCMgY29uc29sZS5sb2coJ3RhYnVsYXJOYW1lOiAnLCB0YWJ1bGFyTmFtZSk7XG5cdCMgY29uc29sZS5sb2coJ2lkczogJywgSlNPTi5zdHJpbmdpZnkoaWRzKSk7XG5cdCMgY29uc29sZS5sb2coJ2ZpZWxkczogJywgSlNPTi5zdHJpbmdpZnkoZmllbGRzKSk7XG5cblx0ZGIuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdF9pZDoge1xuXHRcdFx0JGluOiBpZHNcblx0XHR9XG5cdH0sIHtcblx0XHRmaWVsZHM6IGZpZWxkc1xuXHR9KSIsInZhciBhc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUsIGxhc3RGaW5pc2hlZEFwcHJvdmVBZ2dyZWdhdGU7XG5cbmxhc3RGaW5pc2hlZEFwcHJvdmVBZ2dyZWdhdGUgPSBmdW5jdGlvbihpbnN0YW5jZWlkLCB1c2VySWQsIGRhdGFNYXAsIGNhbGxiYWNrKSB7XG4gIHZhciBvcGVyYXRpb247XG4gIG9wZXJhdGlvbiA9IFtcbiAgICB7XG4gICAgICBcIiRtYXRjaFwiOiB7XG4gICAgICAgIFwiX2lkXCI6IGluc3RhbmNlaWRcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBcIiRwcm9qZWN0XCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IDEsXG4gICAgICAgIFwiX2FwcHJvdmVcIjogXCIkdHJhY2VzLmFwcHJvdmVzXCJcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBcIiR1bndpbmRcIjogXCIkX2FwcHJvdmVcIlxuICAgIH0sIHtcbiAgICAgIFwiJHVud2luZFwiOiBcIiRfYXBwcm92ZVwiXG4gICAgfSwge1xuICAgICAgXCIkbWF0Y2hcIjoge1xuICAgICAgICBcIl9hcHByb3ZlLmlzX2ZpbmlzaGVkXCI6IHRydWUsXG4gICAgICAgICRvcjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiX2FwcHJvdmUuaGFuZGxlclwiOiB1c2VySWRcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBcIl9hcHByb3ZlLnVzZXJcIjogdXNlcklkXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgXCIkZ3JvdXBcIjoge1xuICAgICAgICBcIl9pZFwiOiBcIiRfaWRcIixcbiAgICAgICAgXCJmaW5pc2hfZGF0ZVwiOiB7XG4gICAgICAgICAgXCIkbGFzdFwiOiBcIiRfYXBwcm92ZS5maW5pc2hfZGF0ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG4gIHJldHVybiBkYi5pbnN0YW5jZXMucmF3Q29sbGVjdGlvbigpLmFnZ3JlZ2F0ZShvcGVyYXRpb24pLnRvQXJyYXkoZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkb2MpIHtcbiAgICAgIHJldHVybiBkYXRhTWFwLnB1c2goZG9jKTtcbiAgICB9KTtcbiAgICBpZiAoY2FsbGJhY2sgJiYgXy5pc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH0pO1xufTtcblxuYXN5bmNMYXN0RmluaXNoZWRBcHByb3ZlID0gTWV0ZW9yLndyYXBBc3luYyhsYXN0RmluaXNoZWRBcHByb3ZlQWdncmVnYXRlKTtcblxuTWV0ZW9yLnB1Ymxpc2goXCJpbnN0YW5jZV90YWJ1bGFyXCIsIGZ1bmN0aW9uKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpIHtcbiAgdmFyIGdldE15QXBwcm92ZSwgZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlLCBnZXRTdGVwQ3VycmVudE5hbWUsIGhhbmRsZSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgY2hlY2sodGFibGVOYW1lLCBTdHJpbmcpO1xuICBjaGVjayhpZHMsIEFycmF5KTtcbiAgY2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcbiAgZmllbGRzLmNjX3VzZXJzID0gMTtcbiAgc2VsZiA9IHRoaXM7XG4gIGdldE15TGFzdEZpbmlzaGVkQXBwcm92ZSA9IGZ1bmN0aW9uKHVzZXJJZCwgaW5zdGFuY2VJZCkge1xuICAgIHZhciBkYXRhO1xuICAgIGRhdGEgPSBbXTtcbiAgICBhc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUoaW5zdGFuY2VJZCwgdXNlcklkLCBkYXRhKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZGF0YVswXTtcbiAgICB9XG4gIH07XG4gIGdldE15QXBwcm92ZSA9IGZ1bmN0aW9uKHVzZXJJZCwgaW5zdGFuY2VJZCkge1xuICAgIHZhciBhcHByb3ZlLCBhcHByb3ZlcywgaW5zdGFuY2UsIGlzX3JlYWQsIG15QXBwcm92ZSwgbm90RmluaXNoZWRUcmFjZXM7XG4gICAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGluc3RhbmNlSWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgdHJhY2VzOiAxXG4gICAgICB9XG4gICAgfSk7XG4gICAgbXlBcHByb3ZlID0gbnVsbDtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaW5zdGFuY2UudHJhY2VzIHx8IGluc3RhbmNlLnRyYWNlcy5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5vdEZpbmlzaGVkVHJhY2VzID0gaW5zdGFuY2UudHJhY2VzLmZpbHRlclByb3BlcnR5KFwiaXNfZmluaXNoZWRcIiwgZmFsc2UpO1xuICAgIGlmIChub3RGaW5pc2hlZFRyYWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBhcHByb3ZlcyA9IG5vdEZpbmlzaGVkVHJhY2VzWzBdLmFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwiaXNfZmluaXNoZWRcIiwgZmFsc2UpLmZpbHRlclByb3BlcnR5KFwiaGFuZGxlclwiLCB1c2VySWQpO1xuICAgICAgaWYgKGFwcHJvdmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXBwcm92ZSA9IGFwcHJvdmVzWzBdO1xuICAgICAgICBteUFwcHJvdmUgPSB7XG4gICAgICAgICAgaWQ6IGFwcHJvdmUuX2lkLFxuICAgICAgICAgIGluc3RhbmNlOiBhcHByb3ZlLmluc3RhbmNlLFxuICAgICAgICAgIHRyYWNlOiBhcHByb3ZlLnRyYWNlLFxuICAgICAgICAgIGlzX3JlYWQ6IGFwcHJvdmUuaXNfcmVhZCxcbiAgICAgICAgICBzdGFydF9kYXRlOiBhcHByb3ZlLnN0YXJ0X2RhdGUsXG4gICAgICAgICAgYWdlbnQ6IGFwcHJvdmUuYWdlbnQsXG4gICAgICAgICAgdXNlcl9uYW1lOiBhcHByb3ZlLnVzZXJfbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW15QXBwcm92ZSkge1xuICAgICAgaXNfcmVhZCA9IGZhbHNlO1xuICAgICAgaW5zdGFuY2UudHJhY2VzLmZvckVhY2goZnVuY3Rpb24odHJhY2UpIHtcbiAgICAgICAgdmFyIHJlZjtcbiAgICAgICAgcmV0dXJuIHRyYWNlICE9IG51bGwgPyAocmVmID0gdHJhY2UuYXBwcm92ZXMpICE9IG51bGwgPyByZWYuZm9yRWFjaChmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgICAgICAgaWYgKGFwcHJvdmUudHlwZSA9PT0gJ2NjJyAmJiBhcHByb3ZlLnVzZXIgPT09IHVzZXJJZCAmJiBhcHByb3ZlLmlzX2ZpbmlzaGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKGFwcHJvdmUuaXNfcmVhZCkge1xuICAgICAgICAgICAgICBpc19yZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBteUFwcHJvdmUgPSB7XG4gICAgICAgICAgICAgIGlkOiBhcHByb3ZlLl9pZCxcbiAgICAgICAgICAgICAgaXNfcmVhZDogaXNfcmVhZCxcbiAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogYXBwcm92ZS5zdGFydF9kYXRlLFxuICAgICAgICAgICAgICBhZ2VudDogYXBwcm92ZS5hZ2VudCxcbiAgICAgICAgICAgICAgdXNlcl9uYW1lOiBhcHByb3ZlLnVzZXJfbmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBteUFwcHJvdmU7XG4gIH07XG4gIGdldFN0ZXBDdXJyZW50TmFtZSA9IGZ1bmN0aW9uKGluc3RhbmNlSWQpIHtcbiAgICB2YXIgaW5zdGFuY2UsIHJlZiwgcmVmMSwgc3RlcEN1cnJlbnROYW1lO1xuICAgIGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpbnN0YW5jZUlkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIFwidHJhY2VzLm5hbWVcIjogMSxcbiAgICAgICAgXCJ0cmFjZXNcIjoge1xuICAgICAgICAgICRzbGljZTogLTFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgc3RlcEN1cnJlbnROYW1lID0gKHJlZiA9IGluc3RhbmNlLnRyYWNlcykgIT0gbnVsbCA/IChyZWYxID0gcmVmWzBdKSAhPSBudWxsID8gcmVmMS5uYW1lIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcEN1cnJlbnROYW1lO1xuICB9O1xuICBoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGlkc1xuICAgIH1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgdHJhY2VzOiAwXG4gICAgfVxuICB9KS5vYnNlcnZlQ2hhbmdlcyh7XG4gICAgY2hhbmdlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHZhciBlcnJvciwgaW5zdGFuY2UsIG15QXBwcm92ZSwgbXlMYXN0RmluaXNoZWRBcHByb3ZlLCByZWYsIHJlZjE7XG4gICAgICBpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBpZFxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IGZpZWxkc1xuICAgICAgfSk7XG4gICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG15QXBwcm92ZSA9IGdldE15QXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpO1xuICAgICAgbXlMYXN0RmluaXNoZWRBcHByb3ZlID0gZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlKHNlbGYudXNlcklkLCBpZCk7XG4gICAgICBpZiAobXlBcHByb3ZlKSB7XG4gICAgICAgIGluc3RhbmNlLmlzX3JlYWQgPSBteUFwcHJvdmUuaXNfcmVhZDtcbiAgICAgICAgaW5zdGFuY2Uuc3RhcnRfZGF0ZSA9IG15QXBwcm92ZS5zdGFydF9kYXRlO1xuICAgICAgICBpZiAobXlBcHByb3ZlLmFnZW50KSB7XG4gICAgICAgICAgaW5zdGFuY2UuYWdlbnRfdXNlcl9uYW1lID0gbXlBcHByb3ZlLnVzZXJfbmFtZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdGFuY2UuaXNfcmVhZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAobXlMYXN0RmluaXNoZWRBcHByb3ZlKSB7XG4gICAgICAgIGluc3RhbmNlLm15X2ZpbmlzaF9kYXRlID0gbXlMYXN0RmluaXNoZWRBcHByb3ZlLmZpbmlzaF9kYXRlO1xuICAgICAgfVxuICAgICAgaW5zdGFuY2UuaXNfY2MgPSAoKHJlZiA9IGluc3RhbmNlLmNjX3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKHNlbGYudXNlcklkKSA6IHZvaWQgMCkgfHwgZmFsc2U7XG4gICAgICBpbnN0YW5jZS5jY19jb3VudCA9ICgocmVmMSA9IGluc3RhbmNlLmNjX3VzZXJzKSAhPSBudWxsID8gcmVmMS5sZW5ndGggOiB2b2lkIDApIHx8IDA7XG4gICAgICBkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbnN0YW5jZSBvYnNlcnZlQ2hhbmdlcyBlcnJvcjogJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzZWxmLnVzZXJJZDogJywgc2VsZi51c2VySWQpO1xuICAgICAgICBjb25zb2xlLmxvZygndGFibGVOYW1lOiAnLCB0YWJsZU5hbWUpO1xuICAgICAgICBjb25zb2xlLmxvZygnaWRzOiAnLCBKU09OLnN0cmluZ2lmeShpZHMpKTtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdteUFwcHJvdmU6ICcsIEpTT04uc3RyaW5naWZ5KG15QXBwcm92ZSkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiBzZWxmLnJlbW92ZWQoXCJpbnN0YW5jZXNcIiwgaWQpO1xuICAgIH1cbiAgfSk7XG4gIGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgdmFyIGluc3RhbmNlLCBteUFwcHJvdmUsIG15TGFzdEZpbmlzaGVkQXBwcm92ZSwgcmVmLCByZWYxO1xuICAgIGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczogZmllbGRzXG4gICAgfSk7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBteUFwcHJvdmUgPSBnZXRNeUFwcHJvdmUoc2VsZi51c2VySWQsIGlkKTtcbiAgICBteUxhc3RGaW5pc2hlZEFwcHJvdmUgPSBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUoc2VsZi51c2VySWQsIGlkKTtcbiAgICBpZiAobXlBcHByb3ZlKSB7XG4gICAgICBpbnN0YW5jZS5pc19yZWFkID0gbXlBcHByb3ZlLmlzX3JlYWQ7XG4gICAgICBpbnN0YW5jZS5zdGFydF9kYXRlID0gbXlBcHByb3ZlLnN0YXJ0X2RhdGU7XG4gICAgICBpZiAobXlBcHByb3ZlLmFnZW50KSB7XG4gICAgICAgIGluc3RhbmNlLmFnZW50X3VzZXJfbmFtZSA9IG15QXBwcm92ZS51c2VyX25hbWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLmlzX3JlYWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobXlMYXN0RmluaXNoZWRBcHByb3ZlKSB7XG4gICAgICBpbnN0YW5jZS5teV9maW5pc2hfZGF0ZSA9IG15TGFzdEZpbmlzaGVkQXBwcm92ZS5maW5pc2hfZGF0ZTtcbiAgICB9XG4gICAgaW5zdGFuY2UuaXNfY2MgPSAoKHJlZiA9IGluc3RhbmNlLmNjX3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKHNlbGYudXNlcklkKSA6IHZvaWQgMCkgfHwgZmFsc2U7XG4gICAgaW5zdGFuY2UuY2NfY291bnQgPSAoKHJlZjEgPSBpbnN0YW5jZS5jY191c2VycykgIT0gbnVsbCA/IHJlZjEubGVuZ3RoIDogdm9pZCAwKSB8fCAwO1xuICAgIGRlbGV0ZSBpbnN0YW5jZS5jY191c2VycztcbiAgICByZXR1cm4gc2VsZi5hZGRlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpO1xuICB9KTtcbiAgc2VsZi5yZWFkeSgpO1xuICByZXR1cm4gc2VsZi5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKFwiaW5zdGFuY2VfdGFza3NfdGFidWxhclwiLCBmdW5jdGlvbih0YWJ1bGFyTmFtZSwgaWRzLCBmaWVsZHMpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgY2hlY2sodGFidWxhck5hbWUsIFN0cmluZyk7XG4gIGNoZWNrKGlkcywgQXJyYXkpO1xuICBjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuICByZXR1cm4gZGIuaW5zdGFuY2VfdGFza3MuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGlkc1xuICAgIH1cbiAgfSwge1xuICAgIGZpZWxkczogZmllbGRzXG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKFwiaW5zdGFuY2VzX3RhYnVsYXJcIiwgZnVuY3Rpb24odGFidWxhck5hbWUsIGlkcywgZmllbGRzKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGNoZWNrKHRhYnVsYXJOYW1lLCBTdHJpbmcpO1xuICBjaGVjayhpZHMsIEFycmF5KTtcbiAgY2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcbiAgcmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IHtcbiAgICAgICRpbjogaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiBmaWVsZHNcbiAgfSk7XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoICdpbnN0YW5jZXNfZHJhZnQnLCAoc3BhY2VJZCkgLT5cblx0Y2hlY2sgc3BhY2VJZCwgU3RyaW5nXG5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVzZXJJZCA9IHRoaXMudXNlcklkXG5cdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7c3RhdGU6XCJkcmFmdFwiLHNwYWNlOnNwYWNlSWQsc3VibWl0dGVyOnVzZXJJZCwkb3I6W3tpbmJveF91c2VyczogeyRleGlzdHM6ZmFsc2V9fSwge2luYm94X3VzZXJzOiBbXX1dfSwge2ZpZWxkczoge19pZDogMSwgc3RhdGU6IDEsIHNwYWNlOiAxLCBzdWJtaXR0ZXI6IDEsIGluYm94X3VzZXJzOiAxLCBtb2RpZmllZDogMSwgbmFtZTogMX0sIHNvcnQ6e21vZGlmaWVkOiAtMX19KSIsIk1ldGVvci5wdWJsaXNoKCdpbnN0YW5jZXNfZHJhZnQnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIHZhciB1c2VySWQ7XG4gIGNoZWNrKHNwYWNlSWQsIFN0cmluZyk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHVzZXJJZCA9IHRoaXMudXNlcklkO1xuICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgIHN0YXRlOiBcImRyYWZ0XCIsXG4gICAgc3BhY2U6IHNwYWNlSWQsXG4gICAgc3VibWl0dGVyOiB1c2VySWQsXG4gICAgJG9yOiBbXG4gICAgICB7XG4gICAgICAgIGluYm94X3VzZXJzOiB7XG4gICAgICAgICAgJGV4aXN0czogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBpbmJveF91c2VyczogW11cbiAgICAgIH1cbiAgICBdXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIF9pZDogMSxcbiAgICAgIHN0YXRlOiAxLFxuICAgICAgc3BhY2U6IDEsXG4gICAgICBzdWJtaXR0ZXI6IDEsXG4gICAgICBpbmJveF91c2VyczogMSxcbiAgICAgIG1vZGlmaWVkOiAxLFxuICAgICAgbmFtZTogMVxuICAgIH0sXG4gICAgc29ydDoge1xuICAgICAgbW9kaWZpZWQ6IC0xXG4gICAgfVxuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2ggJ2Rpc3RyaWJ1dGVkX2luc3RhbmNlc19zdGF0ZV9ieV9pZHMnLCAoaW5zdGFuY2VfaWRzKS0+XG5cdGNoZWNrKGluc3RhbmNlX2lkcywgQXJyYXkpXG5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXHRcblx0dW5sZXNzIGluc3RhbmNlX2lkc1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRpZiBfLmlzRW1wdHkoaW5zdGFuY2VfaWRzKVxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpc1xuXG5cdGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IHskaW46IGluc3RhbmNlX2lkc319LCB7ZmllbGRzOiB7c3RhdGU6IDEsIHRyYWNlczp7JHNsaWNlOiAxfSB9IH0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRhZGRlZDogKGlkLCBmaWVsZHMpLT5cblx0XHRcdHNlbGYuYWRkZWQoJ2luc3RhbmNlcycsIGlkLCB7c3RhdGU6IGZpZWxkcy5zdGF0ZSwgaXNfcmVhZDogZmllbGRzLnRyYWNlc1swXS5hcHByb3Zlc1swXS5pc19yZWFkfSlcblxuXHRcdGNoYW5nZWQ6IChpZCwgZmllbGRzKS0+XG5cdFx0XHRpZiBmaWVsZHMuc3RhdGVcblx0XHRcdFx0c2VsZi5jaGFuZ2VkKCdpbnN0YW5jZXMnLCBpZCwge3N0YXRlOiBmaWVsZHMuc3RhdGV9KVxuXHRcdFx0aWYgZmllbGRzLnRyYWNlc1xuXHRcdFx0XHRzZWxmLmNoYW5nZWQoJ2luc3RhbmNlcycsIGlkLCB7aXNfcmVhZDogZmllbGRzLnRyYWNlc1swXS5hcHByb3Zlc1swXS5pc19yZWFkfSlcblx0fVxuXG5cdHRoaXMucmVhZHkoKVxuXHR0aGlzLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKVxuIiwiTWV0ZW9yLnB1Ymxpc2goJ2Rpc3RyaWJ1dGVkX2luc3RhbmNlc19zdGF0ZV9ieV9pZHMnLCBmdW5jdGlvbihpbnN0YW5jZV9pZHMpIHtcbiAgdmFyIGhhbmRsZSwgc2VsZjtcbiAgY2hlY2soaW5zdGFuY2VfaWRzLCBBcnJheSk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghaW5zdGFuY2VfaWRzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KGluc3RhbmNlX2lkcykpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGluc3RhbmNlX2lkc1xuICAgIH1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgc3RhdGU6IDEsXG4gICAgICB0cmFjZXM6IHtcbiAgICAgICAgJHNsaWNlOiAxXG4gICAgICB9XG4gICAgfVxuICB9KS5vYnNlcnZlQ2hhbmdlcyh7XG4gICAgYWRkZWQ6IGZ1bmN0aW9uKGlkLCBmaWVsZHMpIHtcbiAgICAgIHJldHVybiBzZWxmLmFkZGVkKCdpbnN0YW5jZXMnLCBpZCwge1xuICAgICAgICBzdGF0ZTogZmllbGRzLnN0YXRlLFxuICAgICAgICBpc19yZWFkOiBmaWVsZHMudHJhY2VzWzBdLmFwcHJvdmVzWzBdLmlzX3JlYWRcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hhbmdlZDogZnVuY3Rpb24oaWQsIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkcy5zdGF0ZSkge1xuICAgICAgICBzZWxmLmNoYW5nZWQoJ2luc3RhbmNlcycsIGlkLCB7XG4gICAgICAgICAgc3RhdGU6IGZpZWxkcy5zdGF0ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZHMudHJhY2VzKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoJ2luc3RhbmNlcycsIGlkLCB7XG4gICAgICAgICAgaXNfcmVhZDogZmllbGRzLnRyYWNlc1swXS5hcHByb3Zlc1swXS5pc19yZWFkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHRoaXMucmVhZHkoKTtcbiAgcmV0dXJuIHRoaXMub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2ggJ3JlbGF0ZWRfaW5zdGFjZXMnLCAoaW5zdGFuY2VJZCwgcmVsYXRlZF9pbnN0YW5jZXMpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBpbnN0YW5jZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHJlbGF0ZWRfaW5zdGFuY2VfaWRzID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoaW5zdGFuY2VJZCx7ZmllbGRzOiB7cmVsYXRlZF9pbnN0YW5jZXM6IDF9fSk/LnJlbGF0ZWRfaW5zdGFuY2VzXG5cblx0aWYgcmVsYXRlZF9pbnN0YW5jZV9pZHMgJiYgXy5pc0FycmF5KHJlbGF0ZWRfaW5zdGFuY2VfaWRzKVxuXHRcdHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiB7JGluIDogcmVsYXRlZF9pbnN0YW5jZV9pZHN9fSwge2ZpZWxkczoge19pZDogMSwgbmFtZTogMSwgc3BhY2U6IDF9fSlcblx0ZWxzZVxuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkiLCJNZXRlb3IucHVibGlzaCgncmVsYXRlZF9pbnN0YWNlcycsIGZ1bmN0aW9uKGluc3RhbmNlSWQsIHJlbGF0ZWRfaW5zdGFuY2VzKSB7XG4gIHZhciByZWYsIHJlbGF0ZWRfaW5zdGFuY2VfaWRzO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWluc3RhbmNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJlbGF0ZWRfaW5zdGFuY2VfaWRzID0gKHJlZiA9IGRiLmluc3RhbmNlcy5maW5kT25lKGluc3RhbmNlSWQsIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIHJlbGF0ZWRfaW5zdGFuY2VzOiAxXG4gICAgfVxuICB9KSkgIT0gbnVsbCA/IHJlZi5yZWxhdGVkX2luc3RhbmNlcyA6IHZvaWQgMDtcbiAgaWYgKHJlbGF0ZWRfaW5zdGFuY2VfaWRzICYmIF8uaXNBcnJheShyZWxhdGVkX2luc3RhbmNlX2lkcykpIHtcbiAgICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgICAgX2lkOiB7XG4gICAgICAgICRpbjogcmVsYXRlZF9pbnN0YW5jZV9pZHNcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgX2lkOiAxLFxuICAgICAgICBuYW1lOiAxLFxuICAgICAgICBzcGFjZTogMVxuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbn0pO1xuIiwiaWYgTWV0ZW9yLmlzU2VydmVyXG4gICAgTWV0ZW9yLnB1Ymxpc2ggJ3NwYWNlX3VzZXJfc2lnbnMnLCAoc3BhY2VJZCkgLT5cbiAgICAgICAgY2hlY2sgc3BhY2VJZCwgU3RyaW5nXG5cbiAgICAgICAgdW5sZXNzIHRoaXMudXNlcklkXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkeSgpXG5cbiAgICAgICAgcmV0dXJuIGRiLnNwYWNlX3VzZXJfc2lnbnMuZmluZCh7IHNwYWNlOiBzcGFjZUlkIH0sIHtmaWVsZHM6IHtjcmVhdGVkX2J5OiAwLCBjcmVhdGVkOiAwLCBtb2RpZmllZF9ieTogMH19KVxuIiwiaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICBNZXRlb3IucHVibGlzaCgnc3BhY2VfdXNlcl9zaWducycsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgICBjaGVjayhzcGFjZUlkLCBTdHJpbmcpO1xuICAgIGlmICghdGhpcy51c2VySWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gICAgfVxuICAgIHJldHVybiBkYi5zcGFjZV91c2VyX3NpZ25zLmZpbmQoe1xuICAgICAgc3BhY2U6IHNwYWNlSWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgY3JlYXRlZF9ieTogMCxcbiAgICAgICAgY3JlYXRlZDogMCxcbiAgICAgICAgbW9kaWZpZWRfYnk6IDBcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iLCIjIyNcbk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlIFwidXNlcl9pbmJveF9pbnN0YW5jZVwiLCAoKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1c2VyU3BhY2VJZHMgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcblx0XHR1c2VyOiB0aGlzLnVzZXJJZCxcblx0XHR1c2VyX2FjY2VwdGVkOiB0cnVlXG5cdH0sIHtmaWVsZHM6IHtzcGFjZTogMX19KS5mZXRjaCgpLmdldEVhY2goXCJzcGFjZVwiKTtcblx0cXVlcnkgPSB7c3BhY2U6IHskaW46IHVzZXJTcGFjZUlkc319XG5cblx0cXVlcnkuJG9yID0gW3tpbmJveF91c2VyczogdGhpcy51c2VySWR9LCB7Y2NfdXNlcnM6IHRoaXMudXNlcklkfV1cblxuXHRmaW5kOiAtPlxuXHRcdGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7XG5cdFx0XHRmaWVsZHM6IHtcblx0XHRcdFx0c3BhY2U6IDEsXG5cdFx0XHRcdGFwcGxpY2FudF9uYW1lOiAxLFxuXHRcdFx0XHRmbG93OiAxLFxuXHRcdFx0XHRpbmJveF91c2VyczogMSxcblx0XHRcdFx0Y2NfdXNlcnM6IDEsXG5cdFx0XHRcdHN0YXRlOiAxLFxuXHRcdFx0XHRuYW1lOiAxLFxuXHRcdFx0XHRtb2RpZmllZDogMSxcblx0XHRcdFx0Zm9ybTogMVxuXHRcdFx0fSwgc29ydDoge21vZGlmaWVkOiAtMX0sIHNraXA6IDAsIGxpbWl0OiAyMDBcblx0XHR9KTtcblx0Y2hpbGRyZW46IFtcblx0XHR7XG5cdFx0XHRmaW5kOiAoaW5zdGFuY2UsIHBvc3QpLT5cblx0XHRcdFx0ZGIuZmxvd3MuZmluZCh7X2lkOiBpbnN0YW5jZS5mbG93fSwge2ZpZWxkczoge25hbWU6IDEsIHNwYWNlOiAxfX0pO1xuXHRcdH1cblx0XVxuIyMjXG5cbiMjI1xuTWV0ZW9yLnB1Ymxpc2ggJ215X2luYm94X2luc3RhbmNlcycsIChzcGFjZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpcztcblxuXHQjXHR1c2VyU3BhY2VJZHMgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcblx0I1x0XHR1c2VyOiB0aGlzLnVzZXJJZCxcblx0I1x0XHR1c2VyX2FjY2VwdGVkOiB0cnVlXG5cdCNcdH0sIHtmaWVsZHM6IHtzcGFjZTogMX19KS5mZXRjaCgpLmdldEVhY2goXCJzcGFjZVwiKTtcblxuXHRxdWVyeSA9IHtzcGFjZTogc3BhY2VJZH1cblxuXHRxdWVyeS4kb3IgPSBbe2luYm94X3VzZXJzOiB0aGlzLnVzZXJJZH0sIHtjY191c2VyczogdGhpcy51c2VySWR9XVxuXG5cdGZpZWxkcyA9IHtcblx0XHRzcGFjZTogMSxcbiNcdFx0YXBwbGljYW50X25hbWU6IDEsXG5cdFx0ZmxvdzogMSxcblx0XHRpbmJveF91c2VyczogMSxcblx0XHRjY191c2VyczogMSxcblx0XHRzdGF0ZTogMSxcbiNcdFx0bmFtZTogMSxcbiNcdFx0bW9kaWZpZWQ6IDEsXG5cdFx0Zm9ybTogMVxuXHR9XG5cblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtzb3J0OiB7bW9kaWZpZWQ6IC0xfSwgc2tpcDogMCwgbGltaXQ6IDUwMH0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRhZGRlZDogKGlkKS0+XG5cdFx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRcdGluc3RhbmNlLmlzX2NjID0gaW5zdGFuY2UuY2NfdXNlcnM/LmluY2x1ZGVzKHNlbGYudXNlcklkKSB8fCBmYWxzZVxuXHRcdFx0ZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzXG5cdFx0XHRzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSlcblx0XHRjaGFuZ2VkOiAoaWQpLT5cblx0XHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaWR9LCB7ZmllbGRzOiBmaWVsZHN9KVxuXHRcdFx0cmV0dXJuIGlmIG5vdCBpbnN0YW5jZVxuXHRcdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0XHRkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnNcblx0XHRcdHNlbGYuY2hhbmdlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpO1xuXHRcdHJlbW92ZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcblx0fVxuXG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKClcbiMjI1xuXG5fZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSA9IChzcGFjZUlkLCB1c2VySWQsIF9pdGVtcywgY2FsbGJhY2spLT5cblx0ZGIuaW5zdGFuY2VzLnJhd0NvbGxlY3Rpb24oKS5hZ2dyZWdhdGUoW1xuXHRcdHtcblx0XHRcdCRtYXRjaDoge1xuXHRcdFx0XHRzcGFjZTogc3BhY2VJZCxcblx0XHRcdFx0JG9yOiBbe2luYm94X3VzZXJzOiB1c2VySWR9LCB7Y2NfdXNlcnM6IHVzZXJJZH1dXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHQkZ3JvdXA6IHtcblx0XHRcdFx0X2lkOiB7ZmxvdzogXCIkZmxvd1wiLCBjYXRlZ29yeTogXCIkY2F0ZWdvcnlcIn0sIGNvdW50OiB7JHN1bTogMX1cblx0XHRcdH1cblx0XHR9XG5cdF0pLnRvQXJyYXkgKGVyciwgZGF0YSktPlxuXHRcdGlmIGVyclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycilcblxuXHRcdGRhdGEuZm9yRWFjaCAoZG9jKSAtPlxuXHRcdFx0X2l0ZW1zLnB1c2ggZG9jXG5cblx0XHRpZiBjYWxsYmFjayAmJiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spXG5cdFx0XHRjYWxsYmFjaygpXG5cdFx0cmV0dXJuXG5cbl9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlID0gTWV0ZW9yLndyYXBBc3luYyhfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSlcblxuTWV0ZW9yLnB1Ymxpc2ggJ215X2luYm94X2Zsb3dfaW5zdGFuY2VzX2NvdW50JywgKHNwYWNlSWQpLT5cblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0c2VsZiA9IHRoaXM7XG5cblx0cXVlcnkgPSB7c3BhY2U6IHNwYWNlSWR9XG5cblx0cXVlcnkuJG9yID0gW3tpbmJveF91c2VyczogdGhpcy51c2VySWR9LCB7Y2NfdXNlcnM6IHRoaXMudXNlcklkfV1cblxuXHRkYXRhID0gW10gICPmlbDmja7moLzlvI/vvJpbe19pZDpmbG93SWQsIGNvdW50OiDlvoXlip7mlbDph499LCB7X2lkOmZsb3dJZDIsIGNvdW50OiDlvoXlip7mlbDph48yfV1cblx0X2FzeW5jX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUoc3BhY2VJZCwgc2VsZi51c2VySWQsIGRhdGEpXG5cblx0X2Zsb3dzRGF0YSA9IFtdXG5cblx0Xy5lYWNoIGRhdGEsIChkYXRhSXRlbSktPlxuXHRcdF9mbG93c0RhdGEucHVzaCh7X2lkOiBkYXRhSXRlbS5faWQuZmxvdywgY2F0ZWdvcnk6IGRhdGFJdGVtLl9pZC5jYXRlZ29yeSwgY291bnQ6IGRhdGFJdGVtLmNvdW50fSlcblxuXHRzZWxmLmFkZGVkKFwiZmxvd19pbnN0YW5jZXNcIiwgc3BhY2VJZCwge2Zsb3dzOiBfZmxvd3NEYXRhfSk7XG5cblx0X2NoYW5nZURhdGEgPSAoZG9jLCBhY3Rpb24pLT5cblx0XHRmbG93X2luc3RhbmNlID0gXy5maW5kIF9mbG93c0RhdGEsIChmKS0+XG5cdFx0XHRyZXR1cm4gZi5faWQgPT0gZG9jLmZsb3dcblx0XHRpZiBmbG93X2luc3RhbmNlXG5cdFx0XHRpZiBhY3Rpb24gPT0gXCJhZGRlZFwiXG5cdFx0XHRcdGZsb3dfaW5zdGFuY2UuY291bnQrK1xuXHRcdFx0ZWxzZSBpZiBhY3Rpb24gPT0gXCJyZW1vdmVkXCJcblx0XHRcdFx0Zmxvd19pbnN0YW5jZS5jb3VudC0tXG5cdFx0ZWxzZSBpZiBhY3Rpb24gPT0gXCJhZGRlZFwiXG5cdFx0XHRfZmxvd3NEYXRhLnB1c2gge19pZDogZG9jLmZsb3csIGNhdGVnb3J5OiBkb2MuY2F0ZWdvcnksIGNvdW50OiAxfVxuXG5cdFx0c2VsZi5jaGFuZ2VkKFwiZmxvd19pbnN0YW5jZXNcIiwgc3BhY2VJZCwge2Zsb3dzOiBfZmxvd3NEYXRhfSk7XG5cblx0X2luaXQgPSB0cnVlXG5cdGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7ZmllbGRzOiB7X2lkOiAxLCBpbmJveF91c2VyczogMSwgY2NfdXNlcnM6IDEsIGZsb3c6IDEsIGNhdGVnb3J5OiAxfX0pLm9ic2VydmUge1xuXHRcdGFkZGVkOiAoZG9jKS0+XG5cdFx0XHRpZiAhX2luaXRcblx0XHRcdFx0X2NoYW5nZURhdGEoZG9jLCBcImFkZGVkXCIpXG5cdFx0cmVtb3ZlZDogKGRvYyktPlxuXHRcdFx0aWYgIV9pbml0XG5cdFx0XHRcdF9jaGFuZ2VEYXRhKGRvYywgXCJyZW1vdmVkXCIpXG5cdH1cblx0X2luaXQgPSBmYWxzZVxuXG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKCkiLCJcbi8qXG5NZXRlb3IucHVibGlzaENvbXBvc2l0ZSBcInVzZXJfaW5ib3hfaW5zdGFuY2VcIiwgKCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dXNlclNwYWNlSWRzID0gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG5cdFx0dXNlcjogdGhpcy51c2VySWQsXG5cdFx0dXNlcl9hY2NlcHRlZDogdHJ1ZVxuXHR9LCB7ZmllbGRzOiB7c3BhY2U6IDF9fSkuZmV0Y2goKS5nZXRFYWNoKFwic3BhY2VcIik7XG5cdHF1ZXJ5ID0ge3NwYWNlOiB7JGluOiB1c2VyU3BhY2VJZHN9fVxuXG5cdHF1ZXJ5LiRvciA9IFt7aW5ib3hfdXNlcnM6IHRoaXMudXNlcklkfSwge2NjX3VzZXJzOiB0aGlzLnVzZXJJZH1dXG5cblx0ZmluZDogLT5cblx0XHRkYi5pbnN0YW5jZXMuZmluZChxdWVyeSwge1xuXHRcdFx0ZmllbGRzOiB7XG5cdFx0XHRcdHNwYWNlOiAxLFxuXHRcdFx0XHRhcHBsaWNhbnRfbmFtZTogMSxcblx0XHRcdFx0ZmxvdzogMSxcblx0XHRcdFx0aW5ib3hfdXNlcnM6IDEsXG5cdFx0XHRcdGNjX3VzZXJzOiAxLFxuXHRcdFx0XHRzdGF0ZTogMSxcblx0XHRcdFx0bmFtZTogMSxcblx0XHRcdFx0bW9kaWZpZWQ6IDEsXG5cdFx0XHRcdGZvcm06IDFcblx0XHRcdH0sIHNvcnQ6IHttb2RpZmllZDogLTF9LCBza2lwOiAwLCBsaW1pdDogMjAwXG5cdFx0fSk7XG5cdGNoaWxkcmVuOiBbXG5cdFx0e1xuXHRcdFx0ZmluZDogKGluc3RhbmNlLCBwb3N0KS0+XG5cdFx0XHRcdGRiLmZsb3dzLmZpbmQoe19pZDogaW5zdGFuY2UuZmxvd30sIHtmaWVsZHM6IHtuYW1lOiAxLCBzcGFjZTogMX19KTtcblx0XHR9XG5cdF1cbiAqL1xuXG4vKlxuTWV0ZW9yLnB1Ymxpc2ggJ215X2luYm94X2luc3RhbmNlcycsIChzcGFjZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpcztcblxuXHQgKlx0dXNlclNwYWNlSWRzID0gZGIuc3BhY2VfdXNlcnMuZmluZCh7XG5cdCAqXHRcdHVzZXI6IHRoaXMudXNlcklkLFxuXHQgKlx0XHR1c2VyX2FjY2VwdGVkOiB0cnVlXG5cdCAqXHR9LCB7ZmllbGRzOiB7c3BhY2U6IDF9fSkuZmV0Y2goKS5nZXRFYWNoKFwic3BhY2VcIik7XG5cblx0cXVlcnkgPSB7c3BhY2U6IHNwYWNlSWR9XG5cblx0cXVlcnkuJG9yID0gW3tpbmJveF91c2VyczogdGhpcy51c2VySWR9LCB7Y2NfdXNlcnM6IHRoaXMudXNlcklkfV1cblxuXHRmaWVsZHMgPSB7XG5cdFx0c3BhY2U6IDEsXG4gKlx0XHRhcHBsaWNhbnRfbmFtZTogMSxcblx0XHRmbG93OiAxLFxuXHRcdGluYm94X3VzZXJzOiAxLFxuXHRcdGNjX3VzZXJzOiAxLFxuXHRcdHN0YXRlOiAxLFxuICpcdFx0bmFtZTogMSxcbiAqXHRcdG1vZGlmaWVkOiAxLFxuXHRcdGZvcm06IDFcblx0fVxuXG5cdGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7c29ydDoge21vZGlmaWVkOiAtMX0sIHNraXA6IDAsIGxpbWl0OiA1MDB9KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0YWRkZWQ6IChpZCktPlxuXHRcdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpZH0sIHtmaWVsZHM6IGZpZWxkc30pXG5cdFx0XHRyZXR1cm4gaWYgbm90IGluc3RhbmNlXG5cdFx0XHRpbnN0YW5jZS5pc19jYyA9IGluc3RhbmNlLmNjX3VzZXJzPy5pbmNsdWRlcyhzZWxmLnVzZXJJZCkgfHwgZmFsc2Vcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZS5jY191c2Vyc1xuXHRcdFx0c2VsZi5hZGRlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpXG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRcdGluc3RhbmNlLmlzX2NjID0gaW5zdGFuY2UuY2NfdXNlcnM/LmluY2x1ZGVzKHNlbGYudXNlcklkKSB8fCBmYWxzZVxuXHRcdFx0ZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzXG5cdFx0XHRzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGluc3RhbmNlKTtcblx0XHRyZW1vdmVkOiAoaWQpLT5cblx0XHRcdHNlbGYucmVtb3ZlZChcImluc3RhbmNlc1wiLCBpZCk7XG5cdH1cblxuXHRzZWxmLnJlYWR5KCk7XG5cdHNlbGYub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpXG4gKi9cbnZhciBfYXN5bmNfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSwgX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGU7XG5cbl9nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlID0gZnVuY3Rpb24oc3BhY2VJZCwgdXNlcklkLCBfaXRlbXMsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBkYi5pbnN0YW5jZXMucmF3Q29sbGVjdGlvbigpLmFnZ3JlZ2F0ZShbXG4gICAge1xuICAgICAgJG1hdGNoOiB7XG4gICAgICAgIHNwYWNlOiBzcGFjZUlkLFxuICAgICAgICAkb3I6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbmJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgY2NfdXNlcnM6IHVzZXJJZFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgICRncm91cDoge1xuICAgICAgICBfaWQ6IHtcbiAgICAgICAgICBmbG93OiBcIiRmbG93XCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiJGNhdGVnb3J5XCJcbiAgICAgICAgfSxcbiAgICAgICAgY291bnQ6IHtcbiAgICAgICAgICAkc3VtOiAxXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF0pLnRvQXJyYXkoZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkb2MpIHtcbiAgICAgIHJldHVybiBfaXRlbXMucHVzaChkb2MpO1xuICAgIH0pO1xuICAgIGlmIChjYWxsYmFjayAmJiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5fYXN5bmNfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSA9IE1ldGVvci53cmFwQXN5bmMoX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUpO1xuXG5NZXRlb3IucHVibGlzaCgnbXlfaW5ib3hfZmxvd19pbnN0YW5jZXNfY291bnQnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIHZhciBfY2hhbmdlRGF0YSwgX2Zsb3dzRGF0YSwgX2luaXQsIGRhdGEsIGhhbmRsZSwgcXVlcnksIHNlbGY7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBxdWVyeSA9IHtcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9O1xuICBxdWVyeS4kb3IgPSBbXG4gICAge1xuICAgICAgaW5ib3hfdXNlcnM6IHRoaXMudXNlcklkXG4gICAgfSwge1xuICAgICAgY2NfdXNlcnM6IHRoaXMudXNlcklkXG4gICAgfVxuICBdO1xuICBkYXRhID0gW107XG4gIF9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlKHNwYWNlSWQsIHNlbGYudXNlcklkLCBkYXRhKTtcbiAgX2Zsb3dzRGF0YSA9IFtdO1xuICBfLmVhY2goZGF0YSwgZnVuY3Rpb24oZGF0YUl0ZW0pIHtcbiAgICByZXR1cm4gX2Zsb3dzRGF0YS5wdXNoKHtcbiAgICAgIF9pZDogZGF0YUl0ZW0uX2lkLmZsb3csXG4gICAgICBjYXRlZ29yeTogZGF0YUl0ZW0uX2lkLmNhdGVnb3J5LFxuICAgICAgY291bnQ6IGRhdGFJdGVtLmNvdW50XG4gICAgfSk7XG4gIH0pO1xuICBzZWxmLmFkZGVkKFwiZmxvd19pbnN0YW5jZXNcIiwgc3BhY2VJZCwge1xuICAgIGZsb3dzOiBfZmxvd3NEYXRhXG4gIH0pO1xuICBfY2hhbmdlRGF0YSA9IGZ1bmN0aW9uKGRvYywgYWN0aW9uKSB7XG4gICAgdmFyIGZsb3dfaW5zdGFuY2U7XG4gICAgZmxvd19pbnN0YW5jZSA9IF8uZmluZChfZmxvd3NEYXRhLCBmdW5jdGlvbihmKSB7XG4gICAgICByZXR1cm4gZi5faWQgPT09IGRvYy5mbG93O1xuICAgIH0pO1xuICAgIGlmIChmbG93X2luc3RhbmNlKSB7XG4gICAgICBpZiAoYWN0aW9uID09PSBcImFkZGVkXCIpIHtcbiAgICAgICAgZmxvd19pbnN0YW5jZS5jb3VudCsrO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IFwicmVtb3ZlZFwiKSB7XG4gICAgICAgIGZsb3dfaW5zdGFuY2UuY291bnQtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJhZGRlZFwiKSB7XG4gICAgICBfZmxvd3NEYXRhLnB1c2goe1xuICAgICAgICBfaWQ6IGRvYy5mbG93LFxuICAgICAgICBjYXRlZ29yeTogZG9jLmNhdGVnb3J5LFxuICAgICAgICBjb3VudDogMVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJmbG93X2luc3RhbmNlc1wiLCBzcGFjZUlkLCB7XG4gICAgICBmbG93czogX2Zsb3dzRGF0YVxuICAgIH0pO1xuICB9O1xuICBfaW5pdCA9IHRydWU7XG4gIGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBfaWQ6IDEsXG4gICAgICBpbmJveF91c2VyczogMSxcbiAgICAgIGNjX3VzZXJzOiAxLFxuICAgICAgZmxvdzogMSxcbiAgICAgIGNhdGVnb3J5OiAxXG4gICAgfVxuICB9KS5vYnNlcnZlKHtcbiAgICBhZGRlZDogZnVuY3Rpb24oZG9jKSB7XG4gICAgICBpZiAoIV9pbml0KSB7XG4gICAgICAgIHJldHVybiBfY2hhbmdlRGF0YShkb2MsIFwiYWRkZWRcIik7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVkOiBmdW5jdGlvbihkb2MpIHtcbiAgICAgIGlmICghX2luaXQpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFuZ2VEYXRhKGRvYywgXCJyZW1vdmVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIF9pbml0ID0gZmFsc2U7XG4gIHNlbGYucmVhZHkoKTtcbiAgcmV0dXJuIHNlbGYub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuIiwiXG5NZXRlb3IucHVibGlzaCAnZmxvd19tYWluX2F0dGFjaF90ZW1wbGF0ZScsIChzcGFjZUlkLCBmbG93SWQpLT5cblx0Y2hlY2soc3BhY2VJZCwgU3RyaW5nKVxuXHRjaGVjayhmbG93SWQsIFN0cmluZylcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWQgJiYgZmxvd0lkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHJldHVybiBDcmVhdG9yLmdldENvbGxlY3Rpb24oJ2Ntc19maWxlcycpLmZpbmQoeyBzcGFjZTogc3BhY2VJZCwgJ3BhcmVudC5vJzogJ2Zsb3dzJywgJ3BhcmVudC5pZHMnOiBmbG93SWQsICBuYW1lOiAn5q2j5paHLmRvY3gnIH0pXG4iLCJNZXRlb3IucHVibGlzaCgnZmxvd19tYWluX2F0dGFjaF90ZW1wbGF0ZScsIGZ1bmN0aW9uKHNwYWNlSWQsIGZsb3dJZCkge1xuICBjaGVjayhzcGFjZUlkLCBTdHJpbmcpO1xuICBjaGVjayhmbG93SWQsIFN0cmluZyk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghKHNwYWNlSWQgJiYgZmxvd0lkKSkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIENyZWF0b3IuZ2V0Q29sbGVjdGlvbignY21zX2ZpbGVzJykuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWQsXG4gICAgJ3BhcmVudC5vJzogJ2Zsb3dzJyxcbiAgICAncGFyZW50Lmlkcyc6IGZsb3dJZCxcbiAgICBuYW1lOiAn5q2j5paHLmRvY3gnXG4gIH0pO1xufSk7XG4iLCJ3b3JrZmxvd1RlbXBsYXRlID0ge31cblxuI+WPr+eUqOatpOiEmuacrOS7juaooeadv+W3peS9nOWMuuWBmuaJuemHj+WvvOWHuu+8mlxuI+S9v+eUqOeuoeeQhuWRmOi0puaIt+eZu+W9leWQju+8jOi/m+WFpUZsb3dNb2R1bGVz77yM5Zyo5o6n5Yi25Y+w5omn6KGM5Lul5LiL6ISa5pys5Y2z5Y+vXG4jZGIuZm9ybXMuZmluZCh7c3RhdGU6XCJlbmFibGVkXCJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGZvcm0pe3dpbmRvdy5vcGVuKE1ldGVvci5hYnNvbHV0ZVVybChcImFwaS93b3JrZmxvdy9leHBvcnQvZm9ybT9mb3JtPVwiK2Zvcm0uX2lkKSl9KVxud29ya2Zsb3dUZW1wbGF0ZVtcImVuXCJdID1bXVxuXG4j5Y+v55So5q2k6ISa5pys5LuO5qih5p2/5bel5L2c5Yy65YGa5om56YeP5a+85Ye677yaXG4j5L2/55So566h55CG5ZGY6LSm5oi355m75b2V5ZCO77yM6L+b5YWl5qih5p2/5LiT5Yy677yM5Zyo5o6n5Yi25Y+w5omn6KGM5Lul5LiL6ISa5pys5Y2z5Y+vXG4jZGIuZm9ybXMuZmluZCh7c3RhdGU6XCJlbmFibGVkXCJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGZvcm0pe3dpbmRvdy5vcGVuKE1ldGVvci5hYnNvbHV0ZVVybChcImFwaS93b3JrZmxvdy9leHBvcnQvZm9ybT9mb3JtPVwiK2Zvcm0uX2lkKSl9KVxud29ya2Zsb3dUZW1wbGF0ZVtcInpoLUNOXCJdID1bXVxuXG5NZXRlb3Iuc3RhcnR1cCAoKS0+XG5cdGZzID0gcmVxdWlyZSgnZnMnKVxuXHRwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cdG1pbWUgPSByZXF1aXJlKCdtaW1lJylcblx0cmVhZEZpbGVMaXN0ID0gKHBhdGhEaXIsIGZpbGVzTGlzdCktPlxuXHRcdGZpbGVzID0gZnMucmVhZGRpclN5bmMocGF0aERpcilcblx0XHRmaWxlcy5mb3JFYWNoIChuYW1lLCBpbmRleCktPlxuXHRcdFx0c3RhdCA9IGZzLnN0YXRTeW5jKHBhdGguam9pbihwYXRoRGlyLCBuYW1lKSlcblx0XHRcdGlmIHN0YXQuaXNEaXJlY3RvcnkoKVxuXHRcdFx0XHQjIOmAkuW9kuivu+WPluaWh+S7tlxuXHRcdFx0XHRyZWFkRmlsZUxpc3QocGF0aC5qb2luKHBhdGhEaXIsIG5hbWUpLCBmaWxlc0xpc3QpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdG9iaiA9IHt9XG5cdFx0XHRcdG9iai5wYXRoID0gcGF0aERpclxuXHRcdFx0XHRvYmoubmFtZSA9IG5hbWVcblx0XHRcdFx0ZmlsZXNMaXN0LnB1c2gob2JqKVxuXG5cdCPojrflj5Z6aC1jbuaWh+S7tuWkueS4i+eahOaJgOacieaWh+S7tlxuXHRmaWxlc0xpc3RfY24gPSBbXVxuXHRwYXRoX2NuID0gTWV0ZW9yLnNldHRpbmdzLndvcmtmbG93VGVtcGxhdGVzPy5wYXRoX2NuXG5cdGlmIHBhdGhfY25cblx0XHRhYnNvbHV0ZV9wYXRoX2NuID0gcGF0aC5yZXNvbHZlKHBhdGhfY24pXG5cdFx0Y29uc29sZS5sb2cgXCJhYnNvbHV0ZV9wYXRoX2NuXCIsIGFic29sdXRlX3BhdGhfY25cblx0XHRpZiBmcy5leGlzdHNTeW5jKGFic29sdXRlX3BhdGhfY24pXG5cdFx0XHRyZWFkRmlsZUxpc3QoYWJzb2x1dGVfcGF0aF9jbiwgZmlsZXNMaXN0X2NuKVxuXHRcdFx0ZmlsZXNMaXN0X2NuLmZvckVhY2ggKGZpbGUpLT5cblx0XHRcdFx0dHJ5XG5cdFx0XHRcdFx0aWYgbWltZS5nZXRUeXBlKGZpbGUubmFtZSkgaXMgXCJhcHBsaWNhdGlvbi9qc29uXCJcblx0XHRcdFx0XHRcdGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGZpbGUucGF0aCwgZmlsZS5uYW1lKSwgJ3V0ZjgnKVxuXHRcdFx0XHRcdFx0d29ya2Zsb3dUZW1wbGF0ZVtcInpoLUNOXCJdLnB1c2goSlNPTi5wYXJzZShkYXRhKSlcblx0XHRcdFx0Y2F0Y2ggZVxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IgXCLojrflj5Z6aC1jbuaWh+S7tuWkueS4i+eahOaJgOacieaWh+S7tlwiLCBwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciBlLnN0YWNrXG5cblx0I+iOt+WPlmVuLXVz5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XG5cdGZpbGVzTGlzdF91cyA9IFtdXG5cdHBhdGhfdXMgPSBNZXRlb3Iuc2V0dGluZ3Mud29ya2Zsb3dUZW1wbGF0ZXM/LnBhdGhfdXNcblx0aWYgcGF0aF91c1xuXHRcdGFic29sdXRlX3BhdGhfdXMgPSBwYXRoLnJlc29sdmUocGF0aF91cylcblx0XHRjb25zb2xlLmxvZyBcImFic29sdXRlX3BhdGhfdXNcIiwgYWJzb2x1dGVfcGF0aF91c1xuXHRcdGlmIGZzLmV4aXN0c1N5bmMoYWJzb2x1dGVfcGF0aF91cylcblx0XHRcdHJlYWRGaWxlTGlzdChhYnNvbHV0ZV9wYXRoX3VzLCBmaWxlc0xpc3RfdXMpXG5cdFx0XHRmaWxlc0xpc3RfdXMuZm9yRWFjaCAoZmlsZSktPlxuXHRcdFx0XHR0cnlcblx0XHRcdFx0XHRpZiBtaW1lLmdldFR5cGUoZmlsZS5uYW1lKSBpcyBcImFwcGxpY2F0aW9uL2pzb25cIlxuXHRcdFx0XHRcdFx0ZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpLCAndXRmOCcpXG5cdFx0XHRcdFx0XHR3b3JrZmxvd1RlbXBsYXRlW1wiZW5cIl0ucHVzaChKU09OLnBhcnNlKGRhdGEpKVxuXHRcdFx0XHRjYXRjaCBlXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciBcIuiOt+WPlmVuLXVz5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XCIsIHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSlcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yIGUuc3RhY2tcblx0XHRcdFx0XG5cdFx0XHRcdFx0XG5cblxuIiwiICAgICAgICAgICAgICAgICAgICAgXG5cbndvcmtmbG93VGVtcGxhdGUgPSB7fTtcblxud29ya2Zsb3dUZW1wbGF0ZVtcImVuXCJdID0gW107XG5cbndvcmtmbG93VGVtcGxhdGVbXCJ6aC1DTlwiXSA9IFtdO1xuXG5NZXRlb3Iuc3RhcnR1cChmdW5jdGlvbigpIHtcbiAgdmFyIGFic29sdXRlX3BhdGhfY24sIGFic29sdXRlX3BhdGhfdXMsIGZpbGVzTGlzdF9jbiwgZmlsZXNMaXN0X3VzLCBmcywgbWltZSwgcGF0aCwgcGF0aF9jbiwgcGF0aF91cywgcmVhZEZpbGVMaXN0LCByZWYsIHJlZjE7XG4gIGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgbWltZSA9IHJlcXVpcmUoJ21pbWUnKTtcbiAgcmVhZEZpbGVMaXN0ID0gZnVuY3Rpb24ocGF0aERpciwgZmlsZXNMaXN0KSB7XG4gICAgdmFyIGZpbGVzO1xuICAgIGZpbGVzID0gZnMucmVhZGRpclN5bmMocGF0aERpcik7XG4gICAgcmV0dXJuIGZpbGVzLmZvckVhY2goZnVuY3Rpb24obmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBvYmosIHN0YXQ7XG4gICAgICBzdGF0ID0gZnMuc3RhdFN5bmMocGF0aC5qb2luKHBhdGhEaXIsIG5hbWUpKTtcbiAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRGaWxlTGlzdChwYXRoLmpvaW4ocGF0aERpciwgbmFtZSksIGZpbGVzTGlzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSB7fTtcbiAgICAgICAgb2JqLnBhdGggPSBwYXRoRGlyO1xuICAgICAgICBvYmoubmFtZSA9IG5hbWU7XG4gICAgICAgIHJldHVybiBmaWxlc0xpc3QucHVzaChvYmopO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBmaWxlc0xpc3RfY24gPSBbXTtcbiAgcGF0aF9jbiA9IChyZWYgPSBNZXRlb3Iuc2V0dGluZ3Mud29ya2Zsb3dUZW1wbGF0ZXMpICE9IG51bGwgPyByZWYucGF0aF9jbiA6IHZvaWQgMDtcbiAgaWYgKHBhdGhfY24pIHtcbiAgICBhYnNvbHV0ZV9wYXRoX2NuID0gcGF0aC5yZXNvbHZlKHBhdGhfY24pO1xuICAgIGNvbnNvbGUubG9nKFwiYWJzb2x1dGVfcGF0aF9jblwiLCBhYnNvbHV0ZV9wYXRoX2NuKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhhYnNvbHV0ZV9wYXRoX2NuKSkge1xuICAgICAgcmVhZEZpbGVMaXN0KGFic29sdXRlX3BhdGhfY24sIGZpbGVzTGlzdF9jbik7XG4gICAgICBmaWxlc0xpc3RfY24uZm9yRWFjaChmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgIHZhciBkYXRhLCBlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChtaW1lLmdldFR5cGUoZmlsZS5uYW1lKSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcbiAgICAgICAgICAgIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGZpbGUucGF0aCwgZmlsZS5uYW1lKSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIHJldHVybiB3b3JrZmxvd1RlbXBsYXRlW1wiemgtQ05cIl0ucHVzaChKU09OLnBhcnNlKGRhdGEpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZSA9IGVycm9yO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCLojrflj5Z6aC1jbuaWh+S7tuWkueS4i+eahOaJgOacieaWh+S7tlwiLCBwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpKTtcbiAgICAgICAgICByZXR1cm4gY29uc29sZS5lcnJvcihlLnN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGZpbGVzTGlzdF91cyA9IFtdO1xuICBwYXRoX3VzID0gKHJlZjEgPSBNZXRlb3Iuc2V0dGluZ3Mud29ya2Zsb3dUZW1wbGF0ZXMpICE9IG51bGwgPyByZWYxLnBhdGhfdXMgOiB2b2lkIDA7XG4gIGlmIChwYXRoX3VzKSB7XG4gICAgYWJzb2x1dGVfcGF0aF91cyA9IHBhdGgucmVzb2x2ZShwYXRoX3VzKTtcbiAgICBjb25zb2xlLmxvZyhcImFic29sdXRlX3BhdGhfdXNcIiwgYWJzb2x1dGVfcGF0aF91cyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYWJzb2x1dGVfcGF0aF91cykpIHtcbiAgICAgIHJlYWRGaWxlTGlzdChhYnNvbHV0ZV9wYXRoX3VzLCBmaWxlc0xpc3RfdXMpO1xuICAgICAgcmV0dXJuIGZpbGVzTGlzdF91cy5mb3JFYWNoKGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgdmFyIGRhdGEsIGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG1pbWUuZ2V0VHlwZShmaWxlLm5hbWUpID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpLCAndXRmOCcpO1xuICAgICAgICAgICAgcmV0dXJuIHdvcmtmbG93VGVtcGxhdGVbXCJlblwiXS5wdXNoKEpTT04ucGFyc2UoZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIuiOt+WPlmVuLXVz5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XCIsIHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSkpO1xuICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiIyMjXG4qICAgICogICAgKiAgICAqICAgICogICAgKlxu4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAgfFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJQgZGF5IG9mIHdlZWsgKDAgLSA3KSAoMCBvciA3IGlzIFN1bilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIAgbW9udGggKDEgLSAxMilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBkYXkgb2YgbW9udGggKDEgLSAzMSlcbuKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGhvdXIgKDAgLSAyMylcbuKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgbWludXRlICgwIC0gNTkpXG7ilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgc2Vjb25kICgwIC0gNTksIE9QVElPTkFMKVxuIyMjXG5NZXRlb3Iuc3RhcnR1cCAtPlxuXHRpZiBNZXRlb3Iuc2V0dGluZ3MuY3Jvbj8uYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uXG5cdFx0c2NoZWR1bGUgPSByZXF1aXJlKCdub2RlLXNjaGVkdWxlJylcblx0XHQjIOWumuaXtuaJp+ihjOWQjOatpVxuXHRcdHJ1bGUgPSBNZXRlb3Iuc2V0dGluZ3MuY3Jvbi5hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb25cblx0XHRnb19uZXh0ID0gdHJ1ZVxuXHRcdHNjaGVkdWxlLnNjaGVkdWxlSm9iIHJ1bGUsIE1ldGVvci5iaW5kRW52aXJvbm1lbnQgKCktPlxuXHRcdFx0dHJ5XG5cdFx0XHRcdGlmICFnb19uZXh0XG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGdvX25leHQgPSBmYWxzZVxuXHRcdFx0XHRjb25zb2xlLnRpbWUgJ2F1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbidcblxuXHRcdFx0XHRub3cgPSBuZXcgRGF0ZVxuXG5cdFx0XHRcdCMg5bCG5aeU5omY6KeE5YiZ6K6+572u5Li65LiN5Y+v55SoXG5cdFx0XHRcdGRiLnByb2Nlc3NfZGVsZWdhdGlvbl9ydWxlcy51cGRhdGUoeyBlbmFibGVkOiB0cnVlLCBlbmRfdGltZTogeyAkbHRlOiBub3cgfSB9LCB7ICRzZXQ6IHsgZW5hYmxlZDogZmFsc2UgfSB9LCB7IG11bHRpIDp0cnVlIH0pXG5cblx0XHRcdFx0Y29uc29sZS50aW1lRW5kICdhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24nXG5cdFx0XHRcdGdvX25leHQgPSB0cnVlXG5cblx0XHRcdGNhdGNoIGVcblx0XHRcdFx0Y29uc29sZS5lcnJvciBcIkFVVE8gQVVUT19GSU5JU0hfUFJPQ0VTU19ERUxFR0FUSU9OIEVSUk9SOiBcIlxuXHRcdFx0XHRjb25zb2xlLmVycm9yIGUuc3RhY2tcblx0XHRcdFx0Z29fbmV4dCA9IHRydWVcblxuXHRcdCwgKGUpLT5cblx0XHRcdGNvbnNvbGUubG9nICdGYWlsZWQgdG8gYmluZCBlbnZpcm9ubWVudDogYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uLmNvZmZlZSdcblx0XHRcdGNvbnNvbGUubG9nIGUuc3RhY2tcbiIsIlxuLypcbiogICAgKiAgICAqICAgICogICAgKiAgICAqXG7ilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICB8XG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUlCBkYXkgb2Ygd2VlayAoMCAtIDcpICgwIG9yIDcgaXMgU3VuKVxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgCBtb250aCAoMSAtIDEyKVxu4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGRheSBvZiBtb250aCAoMSAtIDMxKVxu4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgaG91ciAoMCAtIDIzKVxu4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBtaW51dGUgKDAgLSA1OSlcbuKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBzZWNvbmQgKDAgLSA1OSwgT1BUSU9OQUwpXG4gKi9cbk1ldGVvci5zdGFydHVwKGZ1bmN0aW9uKCkge1xuICB2YXIgZ29fbmV4dCwgcmVmLCBydWxlLCBzY2hlZHVsZTtcbiAgaWYgKChyZWYgPSBNZXRlb3Iuc2V0dGluZ3MuY3JvbikgIT0gbnVsbCA/IHJlZi5hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24gOiB2b2lkIDApIHtcbiAgICBzY2hlZHVsZSA9IHJlcXVpcmUoJ25vZGUtc2NoZWR1bGUnKTtcbiAgICBydWxlID0gTWV0ZW9yLnNldHRpbmdzLmNyb24uYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uO1xuICAgIGdvX25leHQgPSB0cnVlO1xuICAgIHJldHVybiBzY2hlZHVsZS5zY2hlZHVsZUpvYihydWxlLCBNZXRlb3IuYmluZEVudmlyb25tZW50KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGUsIG5vdztcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZ29fbmV4dCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBnb19uZXh0ID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUudGltZSgnYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uJyk7XG4gICAgICAgIG5vdyA9IG5ldyBEYXRlO1xuICAgICAgICBkYi5wcm9jZXNzX2RlbGVnYXRpb25fcnVsZXMudXBkYXRlKHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGVuZF90aW1lOiB7XG4gICAgICAgICAgICAkbHRlOiBub3dcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAkc2V0OiB7XG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2F1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbicpO1xuICAgICAgICByZXR1cm4gZ29fbmV4dCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBVVRPIEFVVE9fRklOSVNIX1BST0NFU1NfREVMRUdBVElPTiBFUlJPUjogXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICByZXR1cm4gZ29fbmV4dCA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBiaW5kIGVudmlyb25tZW50OiBhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24uY29mZmVlJyk7XG4gICAgICByZXR1cm4gY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgfSkpO1xuICB9XG59KTtcbiIsIiMjI1xuKiAgICAqICAgICogICAgKiAgICAqICAgICpcbuKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIHxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSUIGRheSBvZiB3ZWVrICgwIC0gNykgKDAgb3IgNyBpcyBTdW4pXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSAIG1vbnRoICgxIC0gMTIpXG7ilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgZGF5IG9mIG1vbnRoICgxIC0gMzEpXG7ilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBob3VyICgwIC0gMjMpXG7ilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIG1pbnV0ZSAoMCAtIDU5KVxu4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHNlY29uZCAoMCAtIDU5LCBPUFRJT05BTClcbiMjI1xuTWV0ZW9yLnN0YXJ0dXAgLT5cblx0aWYgTWV0ZW9yLnNldHRpbmdzLmNyb24/LnRpbWVvdXRfYXV0b19zdWJtaXRcblx0XHRzY2hlZHVsZSA9IHJlcXVpcmUoJ25vZGUtc2NoZWR1bGUnKVxuXHRcdCMg5a6a5pe25omn6KGM5ZCM5q2lXG5cdFx0cnVsZSA9IE1ldGVvci5zZXR0aW5ncy5jcm9uLnRpbWVvdXRfYXV0b19zdWJtaXRcblx0XHRnb19uZXh0ID0gdHJ1ZVxuXHRcdHNjaGVkdWxlLnNjaGVkdWxlSm9iIHJ1bGUsIE1ldGVvci5iaW5kRW52aXJvbm1lbnQgKCktPlxuXHRcdFx0dHJ5XG5cdFx0XHRcdGlmICFnb19uZXh0XG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGdvX25leHQgPSBmYWxzZVxuXHRcdFx0XHRjb25zb2xlLnRpbWUgJ3RpbWVvdXRfYXV0b19zdWJtaXQnXG5cblx0XHRcdFx0dXVmbG93TWFuYWdlci50aW1lb3V0QXV0b1N1Ym1pdCgpXG5cblx0XHRcdFx0Y29uc29sZS50aW1lRW5kICd0aW1lb3V0X2F1dG9fc3VibWl0J1xuXHRcdFx0XHRnb19uZXh0ID0gdHJ1ZVxuXG5cdFx0XHRjYXRjaCBlXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IgXCJBVVRPIFRJTUVPVVRfQVVUT19TVUJNSVQgRVJST1I6IFwiXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IgZS5zdGFja1xuXHRcdFx0XHRnb19uZXh0ID0gdHJ1ZVxuXG5cdFx0LCAoZSktPlxuXHRcdFx0Y29uc29sZS5sb2cgJ0ZhaWxlZCB0byBiaW5kIGVudmlyb25tZW50OiB0aW1lb3V0X2F1dG9fc3VibWl0LmNvZmZlZSdcblx0XHRcdGNvbnNvbGUubG9nIGUuc3RhY2tcblxuTWV0ZW9yLm1ldGhvZHNcblx0dGltZW91dF9hdXRvX3N1Ym1pdDogKGluc19pZCktPlxuXHRcdHV1Zmxvd01hbmFnZXIudGltZW91dEF1dG9TdWJtaXQoaW5zX2lkKVxuXHRcdHJldHVybiB0cnVlXG5cblxuIiwiXG4vKlxuKiAgICAqICAgICogICAgKiAgICAqICAgICpcbuKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIHxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSUIGRheSBvZiB3ZWVrICgwIC0gNykgKDAgb3IgNyBpcyBTdW4pXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSAIG1vbnRoICgxIC0gMTIpXG7ilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgZGF5IG9mIG1vbnRoICgxIC0gMzEpXG7ilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBob3VyICgwIC0gMjMpXG7ilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIG1pbnV0ZSAoMCAtIDU5KVxu4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHNlY29uZCAoMCAtIDU5LCBPUFRJT05BTClcbiAqL1xuTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIHZhciBnb19uZXh0LCByZWYsIHJ1bGUsIHNjaGVkdWxlO1xuICBpZiAoKHJlZiA9IE1ldGVvci5zZXR0aW5ncy5jcm9uKSAhPSBudWxsID8gcmVmLnRpbWVvdXRfYXV0b19zdWJtaXQgOiB2b2lkIDApIHtcbiAgICBzY2hlZHVsZSA9IHJlcXVpcmUoJ25vZGUtc2NoZWR1bGUnKTtcbiAgICBydWxlID0gTWV0ZW9yLnNldHRpbmdzLmNyb24udGltZW91dF9hdXRvX3N1Ym1pdDtcbiAgICBnb19uZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm4gc2NoZWR1bGUuc2NoZWR1bGVKb2IocnVsZSwgTWV0ZW9yLmJpbmRFbnZpcm9ubWVudChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFnb19uZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdvX25leHQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS50aW1lKCd0aW1lb3V0X2F1dG9fc3VibWl0Jyk7XG4gICAgICAgIHV1Zmxvd01hbmFnZXIudGltZW91dEF1dG9TdWJtaXQoKTtcbiAgICAgICAgY29uc29sZS50aW1lRW5kKCd0aW1lb3V0X2F1dG9fc3VibWl0Jyk7XG4gICAgICAgIHJldHVybiBnb19uZXh0ID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFVVE8gVElNRU9VVF9BVVRPX1NVQk1JVCBFUlJPUjogXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICByZXR1cm4gZ29fbmV4dCA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBiaW5kIGVudmlyb25tZW50OiB0aW1lb3V0X2F1dG9fc3VibWl0LmNvZmZlZScpO1xuICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKGUuc3RhY2spO1xuICAgIH0pKTtcbiAgfVxufSk7XG5cbk1ldGVvci5tZXRob2RzKHtcbiAgdGltZW91dF9hdXRvX3N1Ym1pdDogZnVuY3Rpb24oaW5zX2lkKSB7XG4gICAgdXVmbG93TWFuYWdlci50aW1lb3V0QXV0b1N1Ym1pdChpbnNfaWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsIk1ldGVvci5zdGFydHVwICgpLT5cblx0VGFidWxhclRhYmxlcy5yZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyID0gbmV3IFRhYnVsYXIuVGFibGVcblx0XHRuYW1lOiBcInJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXJcIlxuXHRcdGNvbGxlY3Rpb246IGRiLmluc3RhbmNlc1xuXHRcdGNvbHVtbnM6IFtcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJfaWRcIixcblx0XHRcdFx0dGl0bGU6ICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInJldmVyc2VcIiBpZD1cInJldmVyc2VcIj4nLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlLFxuXHRcdFx0XHR3aWR0aDogJzFweCcsXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlucHV0ID0gJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInJlbGF0ZWQtaW5zdGFuY2VzLWxpc3QtY2hlY2tib3hcIiBuYW1lPVwicmVsYXRlZF9pbnN0YW5jZXNfaWRzXCIgaWQ9XCJyZWxhdGVkX2luc3RhbmNlc19pZHNcIiB2YWx1ZT1cIicgKyBkb2MuX2lkICsgJ1wiJ1xuXG5cdFx0XHRcdFx0aWYgVGFidWxhclRhYmxlcy5yZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyLnJlbGF0ZWRfaW5zdGFuY2VzPy5pbmNsdWRlcyhkb2MuX2lkKVxuXHRcdFx0XHRcdFx0aW5wdXQgKz0gXCIgY2hlY2tlZCBcIlxuXG5cdFx0XHRcdFx0aW5wdXQgKz0gXCI+XCJcblx0XHRcdFx0XHRyZXR1cm4gaW5wdXRcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwibmFtZVwiLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlLFxuXHRcdFx0XHR3aWR0aDogJzQ1JScsXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGhyZWYgPSAnJztcblx0XHRcdFx0XHRpZiBNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKVxuXHRcdFx0XHRcdFx0aHJlZiA9ICcnXG5cblx0XHRcdFx0XHRhYnNvbHV0ZSA9IGZhbHNlXG5cblx0XHRcdFx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0XHRcdGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZVxuXHRcdFx0XHRcdGlmIGFic29sdXRlXG5cdFx0XHRcdFx0XHRocmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIrZG9jLnNwYWNlK1wiL3ZpZXcvcmVhZG9ubHkvXCIgKyBkb2MuX2lkICsgJz9oaWRlX3RyYWNlcz0wJylcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRocmVmID0gU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiK2RvYy5zcGFjZStcIi92aWV3L3JlYWRvbmx5L1wiICsgZG9jLl9pZCArICc/aGlkZV90cmFjZXM9MCcpXG5cdFx0XHRcdFx0cmV0dXJuIFwiPGEgZGF0YS1pZD0nI3tkb2MuX2lkfScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J1wiK2hyZWYrXCInPlwiICsgZG9jLm5hbWUgKyBcIjwvYT5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJmbG93X25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJjdXJyZW50X3N0ZXBfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3RhdGUgPT0gXCJjb21wbGV0ZWRcIlxuXHRcdFx0XHRcdFx0anVkZ2UgPSBkb2MuZmluYWxfZGVjaXNpb24gfHwgXCJhcHByb3ZlZFwiXG5cblx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZSA9IGRvYy5jdXJyZW50X3N0ZXBfbmFtZSB8fCAnJ1xuXG5cdFx0XHRcdFx0cmV0dXJuIFwiXCJcIlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcC1jdXJyZW50LXN0YXRlICN7anVkZ2V9XCI+I3tzdGVwX2N1cnJlbnRfbmFtZX08L2Rpdj5cblx0XHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0fVxuXHRcdF1cblxuXHRcdGRvbTogXCJ0cFwiLFxuXHRcdGxlbmd0aENoYW5nZTogZmFsc2UsXG5cdFx0ZXh0cmFGaWVsZHM6IFtcInN0YXRlXCIsIFwiZmluYWxfZGVjaXNpb25cIiwgXCJzcGFjZVwiLCBcImtleXdvcmRzXCJdLFxuXHRcdHBhZ2VMZW5ndGg6IDEwLFxuXHRcdGluZm86IGZhbHNlLFxuXHRcdHNlYXJjaGluZzogdHJ1ZSxcblx0XHRyZXNwb25zaXZlOlxuXHRcdFx0ZGV0YWlsczogZmFsc2Vcblx0XHRhdXRvV2lkdGg6IGZhbHNlLFxuXHRcdGNoYW5nZVNlbGVjdG9yOiAoc2VsZWN0b3IsIHVzZXJJZCkgLT5cblx0XHRcdHVubGVzcyB1c2VySWRcblx0XHRcdFx0cmV0dXJuIHtfaWQ6IC0xfVxuXG5cdFx0XHRzcGFjZUlkID0gc2VsZWN0b3Iuc3BhY2Vcblx0XHRcdHVubGVzcyBzcGFjZUlkXG5cdFx0XHRcdGlmIHNlbGVjdG9yPy4kYW5kPy5sZW5ndGggPiAwXG5cdFx0XHRcdFx0c3BhY2VJZCA9IHNlbGVjdG9yLiRhbmQuZ2V0UHJvcGVydHkoJ3NwYWNlJylbMF1cblx0XHRcdHVubGVzcyBzcGFjZUlkXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlID0gZGIuc3BhY2VzLmZpbmRPbmUoc3BhY2VJZClcblx0XHRcdGlmICFzcGFjZVxuXHRcdFx0XHRzZWxlY3Rvci5zdGF0ZSA9IFwibm9uZVwiXG5cdFx0XHRpZiAhc3BhY2UuYWRtaW5zLmluY2x1ZGVzKHVzZXJJZClcblxuXHRcdFx0XHRmbG93X2lkcyA9IFtdXG5cdFx0XHRcdGN1clNwYWNlVXNlciA9IGRiLnNwYWNlX3VzZXJzLmZpbmRPbmUoe1xuXHRcdFx0XHRcdHNwYWNlOiBzcGFjZUlkLFxuXHRcdFx0XHRcdCd1c2VyJzogdXNlcklkXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGlmIGN1clNwYWNlVXNlclxuXHRcdFx0XHRcdG9yZ2FuaXphdGlvbnMgPSBkYi5vcmdhbml6YXRpb25zLmZpbmQoe1xuXHRcdFx0XHRcdFx0X2lkOiB7XG5cdFx0XHRcdFx0XHRcdCRpbjogY3VyU3BhY2VVc2VyLm9yZ2FuaXphdGlvbnNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5mZXRjaCgpXG5cdFx0XHRcdFx0Zmxvd3MgPSBkYi5mbG93cy5maW5kKHsgc3BhY2U6IHNwYWNlSWQgfSlcblx0XHRcdFx0XHRmbG93cy5mb3JFYWNoIChmbCktPlxuXHRcdFx0XHRcdFx0aWYgV29ya2Zsb3dNYW5hZ2VyLmNhbk1vbml0b3IoZmwsIGN1clNwYWNlVXNlciwgb3JnYW5pemF0aW9ucykgfHwgV29ya2Zsb3dNYW5hZ2VyLmNhbkFkbWluKGZsLCBjdXJTcGFjZVVzZXIsIG9yZ2FuaXphdGlvbnMpXG5cdFx0XHRcdFx0XHRcdGZsb3dfaWRzLnB1c2goZmwuX2lkKVxuXG5cdFx0XHRcdGlmIHNlbGVjdG9yPy4kYW5kPy5sZW5ndGggPiAwXG5cdFx0XHRcdFx0c2VsZWN0b3IuJGFuZFswXS4kb3IgPSBbe3N1Ym1pdHRlcjogdXNlcklkfSwge2FwcGxpY2FudDogdXNlcklkfSwge2luYm94X3VzZXJzOiB1c2VySWR9LCB7b3V0Ym94X3VzZXJzOiB1c2VySWR9LFxuXHRcdFx0XHRcdFx0XHR7Y2NfdXNlcnM6IHVzZXJJZH0sIHsgZmxvdzogeyAkaW46IGZsb3dfaWRzIH0gfV1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdF8uZXh0ZW5kIHNlbGVjdG9yLCB7XG5cdFx0XHRcdFx0XHQkb3I6IFt7c3VibWl0dGVyOiB1c2VySWR9LCB7YXBwbGljYW50OiB1c2VySWR9LCB7aW5ib3hfdXNlcnM6IHVzZXJJZH0sIHtvdXRib3hfdXNlcnM6IHVzZXJJZH0sXG5cdFx0XHRcdFx0XHRcdHtjY191c2VyczogdXNlcklkfSwgeyBmbG93OiB7ICRpbjogZmxvd19pZHMgfSB9XVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGVjdG9yIiwiTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBUYWJ1bGFyVGFibGVzLnJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIgPSBuZXcgVGFidWxhci5UYWJsZSh7XG4gICAgbmFtZTogXCJyZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyXCIsXG4gICAgY29sbGVjdGlvbjogZGIuaW5zdGFuY2VzLFxuICAgIGNvbHVtbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZGF0YTogXCJfaWRcIixcbiAgICAgICAgdGl0bGU6ICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInJldmVyc2VcIiBpZD1cInJldmVyc2VcIj4nLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICB3aWR0aDogJzFweCcsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgaW5wdXQsIHJlZjtcbiAgICAgICAgICBpbnB1dCA9ICc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJyZWxhdGVkLWluc3RhbmNlcy1saXN0LWNoZWNrYm94XCIgbmFtZT1cInJlbGF0ZWRfaW5zdGFuY2VzX2lkc1wiIGlkPVwicmVsYXRlZF9pbnN0YW5jZXNfaWRzXCIgdmFsdWU9XCInICsgZG9jLl9pZCArICdcIic7XG4gICAgICAgICAgaWYgKChyZWYgPSBUYWJ1bGFyVGFibGVzLnJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIucmVsYXRlZF9pbnN0YW5jZXMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoZG9jLl9pZCkgOiB2b2lkIDApIHtcbiAgICAgICAgICAgIGlucHV0ICs9IFwiIGNoZWNrZWQgXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0ICs9IFwiPlwiO1xuICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcIm5hbWVcIixcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6ICc0NSUnLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGFic29sdXRlLCBocmVmO1xuICAgICAgICAgIGhyZWYgPSAnJztcbiAgICAgICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50ICYmIChTdGVlZG9zLmlzTW9iaWxlKCkgfHwgU3RlZWRvcy5pc0NvcmRvdmEoKSkpIHtcbiAgICAgICAgICAgIGhyZWYgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgICAgICBhYnNvbHV0ZSA9IHRoaXMuYWJzb2x1dGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhYnNvbHV0ZSkge1xuICAgICAgICAgICAgaHJlZiA9IE1ldGVvci5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiICsgZG9jLnNwYWNlICsgXCIvdmlldy9yZWFkb25seS9cIiArIGRvYy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHJlZiA9IFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIiArIGRvYy5zcGFjZSArIFwiL3ZpZXcvcmVhZG9ubHkvXCIgKyBkb2MuX2lkICsgJz9oaWRlX3RyYWNlcz0wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoXCI8YSBkYXRhLWlkPSdcIiArIGRvYy5faWQgKyBcIicgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J1wiKSArIGhyZWYgKyBcIic+XCIgKyBkb2MubmFtZSArIFwiPC9hPlwiO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiYXBwbGljYW50X25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X25hbWVcIiksXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJmbG93X25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImN1cnJlbnRfc3RlcF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIganVkZ2UsIHN0ZXBfY3VycmVudF9uYW1lO1xuICAgICAgICAgIGlmIChkb2Muc3RhdGUgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGp1ZGdlID0gZG9jLmZpbmFsX2RlY2lzaW9uIHx8IFwiYXBwcm92ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWUgPSBkb2MuY3VycmVudF9zdGVwX25hbWUgfHwgJyc7XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz1cXFwic3RlcC1jdXJyZW50LXN0YXRlIFwiICsganVkZ2UgKyBcIlxcXCI+XCIgKyBzdGVwX2N1cnJlbnRfbmFtZSArIFwiPC9kaXY+XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGRvbTogXCJ0cFwiLFxuICAgIGxlbmd0aENoYW5nZTogZmFsc2UsXG4gICAgZXh0cmFGaWVsZHM6IFtcInN0YXRlXCIsIFwiZmluYWxfZGVjaXNpb25cIiwgXCJzcGFjZVwiLCBcImtleXdvcmRzXCJdLFxuICAgIHBhZ2VMZW5ndGg6IDEwLFxuICAgIGluZm86IGZhbHNlLFxuICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICByZXNwb25zaXZlOiB7XG4gICAgICBkZXRhaWxzOiBmYWxzZVxuICAgIH0sXG4gICAgYXV0b1dpZHRoOiBmYWxzZSxcbiAgICBjaGFuZ2VTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IsIHVzZXJJZCkge1xuICAgICAgdmFyIGN1clNwYWNlVXNlciwgZmxvd19pZHMsIGZsb3dzLCBvcmdhbml6YXRpb25zLCByZWYsIHJlZjEsIHNwYWNlLCBzcGFjZUlkO1xuICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZUlkID0gc2VsZWN0b3Iuc3BhY2U7XG4gICAgICBpZiAoIXNwYWNlSWQpIHtcbiAgICAgICAgaWYgKChzZWxlY3RvciAhPSBudWxsID8gKHJlZiA9IHNlbGVjdG9yLiRhbmQpICE9IG51bGwgPyByZWYubGVuZ3RoIDogdm9pZCAwIDogdm9pZCAwKSA+IDApIHtcbiAgICAgICAgICBzcGFjZUlkID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzcGFjZUlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc3BhY2UgPSBkYi5zcGFjZXMuZmluZE9uZShzcGFjZUlkKTtcbiAgICAgIGlmICghc3BhY2UpIHtcbiAgICAgICAgc2VsZWN0b3Iuc3RhdGUgPSBcIm5vbmVcIjtcbiAgICAgIH1cbiAgICAgIGlmICghc3BhY2UuYWRtaW5zLmluY2x1ZGVzKHVzZXJJZCkpIHtcbiAgICAgICAgZmxvd19pZHMgPSBbXTtcbiAgICAgICAgY3VyU3BhY2VVc2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG4gICAgICAgICAgc3BhY2U6IHNwYWNlSWQsXG4gICAgICAgICAgJ3VzZXInOiB1c2VySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdXJTcGFjZVVzZXIpIHtcbiAgICAgICAgICBvcmdhbml6YXRpb25zID0gZGIub3JnYW5pemF0aW9ucy5maW5kKHtcbiAgICAgICAgICAgIF9pZDoge1xuICAgICAgICAgICAgICAkaW46IGN1clNwYWNlVXNlci5vcmdhbml6YXRpb25zXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuZmV0Y2goKTtcbiAgICAgICAgICBmbG93cyA9IGRiLmZsb3dzLmZpbmQoe1xuICAgICAgICAgICAgc3BhY2U6IHNwYWNlSWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmbG93cy5mb3JFYWNoKGZ1bmN0aW9uKGZsKSB7XG4gICAgICAgICAgICBpZiAoV29ya2Zsb3dNYW5hZ2VyLmNhbk1vbml0b3IoZmwsIGN1clNwYWNlVXNlciwgb3JnYW5pemF0aW9ucykgfHwgV29ya2Zsb3dNYW5hZ2VyLmNhbkFkbWluKGZsLCBjdXJTcGFjZVVzZXIsIG9yZ2FuaXphdGlvbnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmbG93X2lkcy5wdXNoKGZsLl9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzZWxlY3RvciAhPSBudWxsID8gKHJlZjEgPSBzZWxlY3Rvci4kYW5kKSAhPSBudWxsID8gcmVmMS5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgICAgICAgIHNlbGVjdG9yLiRhbmRbMF0uJG9yID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdWJtaXR0ZXI6IHVzZXJJZFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBhcHBsaWNhbnQ6IHVzZXJJZFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBpbmJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIG91dGJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIGNjX3VzZXJzOiB1c2VySWRcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgZmxvdzoge1xuICAgICAgICAgICAgICAgICRpbjogZmxvd19pZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgXy5leHRlbmQoc2VsZWN0b3IsIHtcbiAgICAgICAgICAgICRvcjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3VibWl0dGVyOiB1c2VySWRcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGFwcGxpY2FudDogdXNlcklkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBpbmJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBvdXRib3hfdXNlcnM6IHVzZXJJZFxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgY2NfdXNlcnM6IHVzZXJJZFxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgZmxvdzoge1xuICAgICAgICAgICAgICAgICAgJGluOiBmbG93X2lkc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiU3RlZWRvcy5zdWJzW1wiSW5zdGFuY2VUYWJ1bGFyXCJdID0gbmV3IFN1YnNNYW5hZ2VyKClcblxuXG5faGFuZGxlTGlzdEZpZWxkcyA9IChmaWVsZHMpIC0+XG5cdGluc19maWVsZHMgPSBuZXcgQXJyYXkoKTtcblxuXHRmaWVsZHM/LmZvckVhY2ggKGYpLT5cblx0XHRpZiBmLnR5cGUgPT0gJ3RhYmxlJ1xuXHRcdFx0Y29uc29sZS5sb2cgJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJ1xuXHRcdGVsc2UgaWYgZi50eXBlID09ICdzZWN0aW9uJ1xuXHRcdFx0Zj8uZmllbGRzPy5mb3JFYWNoIChmMSktPlxuXHRcdFx0XHRpbnNfZmllbGRzLnB1c2ggZjFcblx0XHRlbHNlXG5cdFx0XHRpbnNfZmllbGRzLnB1c2ggZlxuXG5cdHJldHVybiBpbnNfZmllbGRzXG5cblxudXBkYXRlVGFidWxhclRpdGxlID0gKCktPlxuXG4jIOWmguaenGNvbHVtbnPmnInliqDlh4/vvIzor7fkv67mlLlUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMg5Ye95pWwXG5pbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyID0gKGZsb3dJZCwgZmllbGRzKS0+XG5cdG9wdGlvbnMgPSB7XG5cdFx0bmFtZTogXCJpbnN0YW5jZXNcIixcblx0XHRjb2xsZWN0aW9uOiBkYi5pbnN0YW5jZXMsXG5cdFx0cHViOiBcImluc3RhbmNlX3RhYnVsYXJcIixcblx0XHRvblVubG9hZDogKCktPlxuXHRcdFx0TWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApXG5cblx0XHRkcmF3Q2FsbGJhY2s6IChzZXR0aW5ncyktPlxuXHRcdFx0ZW1wdHlUZCA9ICQoXCIuZGF0YVRhYmxlc19lbXB0eVwiKVxuXHRcdFx0aWYgZW1wdHlUZC5sZW5ndGhcblx0XHRcdFx0ZW1wdHlUZFswXS5jb2xTcGFuID0gXCI2XCJcblx0XHRcdGlmICFTdGVlZG9zLmlzTW9iaWxlKCkgJiYgIVN0ZWVkb3MuaXNQYWQoKVxuXHRcdFx0XHRNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MClcblx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnNjcm9sbFRvcCgwKS5yZWFkeSAtPlxuXHRcdFx0XHRcdCQoXCIuaW5zdGFuY2UtbGlzdFwiKS5wZXJmZWN0U2Nyb2xsYmFyKFwidXBkYXRlXCIpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdCQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMClcblxuXHRcdFx0dGl0bGUgPSB0IFwicGFnZXJfaW5wdXRfaGludFwiXG5cdFx0XHRlbGxpcHNpc0xpbmsgPSBzZXR0aW5ncy5vSW5zdGFuY2UucGFyZW50KCkuZmluZCgnLnBhZ2luZ19udW1iZXJzIC5wYWdpbmF0aW9uIC5kaXNhYmxlZCBhJylcblx0XHRcdGVsbGlwc2lzTGluay5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmNzcyhcImN1cnNvclwiLCBcInBvaW50ZXJcIikuY2xpY2sgLT5cblx0XHRcdFx0aWYgISQodGhpcykuZmluZCgnaW5wdXQnKS5sZW5ndGhcblx0XHRcdFx0XHRpbnB1dCA9ICQoJzxpbnB1dCBjbGFzcz1cInBhZ2luYXRlX2lucHV0IGZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHBhZGRpbmc6MCAycHg7XCIvPicpXG5cdFx0XHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRcdFx0XHRpbnB1dC5jc3Moe1xuXHRcdFx0XHRcdFx0XHR3aWR0aDpcIjUycHhcIlxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiMjBweFwiXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGlucHV0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOlwiNTJweFwiXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogXCIxNnB4XCJcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0aW5wdXQuYXR0cihcInRpdGxlXCIsIHRpdGxlKS5hdHRyKFwicGxhY2Vob2xkZXJcIiwgdGl0bGUpXG5cdFx0XHRcdFx0JCh0aGlzKS5lbXB0eSgpLmFwcGVuZCBpbnB1dFxuXHRcdFx0XHRcdGdvUGFnZSA9IChpbmRleCktPlxuXHRcdFx0XHRcdFx0aWYgaW5kZXggPiAwXG5cdFx0XHRcdFx0XHRcdHBhZ2VzID0gTWF0aC5jZWlsKHNldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSAvIHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aClcblx0XHRcdFx0XHRcdFx0aWYgaW5kZXggPiBwYWdlc1xuXHRcdFx0XHRcdFx0XHRcdCMg6aG156CB6LaF5Ye657Si5byV5pe26Lez6L2s5Yiw5pyA5ZCO5LiA6aG1XG5cdFx0XHRcdFx0XHRcdFx0aW5kZXggPSBwYWdlc1xuXHRcdFx0XHRcdFx0XHRpbmRleC0tXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLm9JbnN0YW5jZS5EYXRhVGFibGUoKS5wYWdlKGluZGV4KS5kcmF3KCdwYWdlJylcblx0XHRcdFx0XHRpbnB1dC5ibHVyIChlKS0+XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKClcblx0XHRcdFx0XHRcdGdvUGFnZSBjdXJyZW50UGFnZVxuXHRcdFx0XHRcdFx0JCh0aGlzKS5wYXJlbnQoKS5odG1sICcuLi4nXG5cdFx0XHRcdFx0aW5wdXQua2V5ZG93biAoZSktPlxuXHRcdFx0XHRcdFx0aWYoZS5rZXlDb2RlLnRvU3RyaW5nKCkgPT0gXCIxM1wiKVxuXHRcdFx0XHRcdFx0XHRjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKClcblx0XHRcdFx0XHRcdFx0Z29QYWdlIGN1cnJlbnRQYWdlXG5cblx0XHRjcmVhdGVkUm93OiAocm93LCBkYXRhLCBkYXRhSW5kZXgpIC0+XG5cdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0aWYgZGF0YS5faWQgPT0gRmxvd1JvdXRlci5jdXJyZW50KCkucGFyYW1zLmluc3RhbmNlSWRcblx0XHRcdFx0XHRyb3cuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJzZWxlY3RlZFwiKVxuXHRcdGNvbHVtbnM6IFtcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJfaWRcIixcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRtb2RpZmllZFN0cmluZyA9IG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuXG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBkb2MubW9kaWZpZWRcblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnICYmIGRvYy5zdGF0ZSAhPSAnZHJhZnQnXG5cdFx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5zdGFydF9kYXRlIHx8IGRvYy5tb2RpZmllZFxuXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ291dGJveCcgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ21vbml0b3InXG5cdFx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5zdWJtaXRfZGF0ZSB8fCBkb2Muc3VibWl0X2RhdGVcblxuXHRcdFx0XHRcdG1vZGlmaWVkRnJvbU5vdyA9IFN0ZWVkb3MubW9tZW50UmVhY3RpdmVGcm9tTm93KG1vZGlmaWVkKTtcblx0XHRcdFx0XHRmbG93X25hbWUgPSBkb2MuZmxvd19uYW1lXG5cdFx0XHRcdFx0Y2NfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0IyDlvZPliY3nlKjmiLflnKhjYyB1c2Vy5Lit77yM5L2G5piv5LiN5ZyoaW5ib3ggdXNlcnPml7bmiY3mmL7npLon5Lyg6ZiFJ+aWh+Wtl1xuXHRcdFx0XHRcdGlmIGRvYy5pc19jYyAmJiAhZG9jLmluYm94X3VzZXJzPy5pbmNsdWRlcyhNZXRlb3IudXNlcklkKCkpICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiXG5cdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTxzcGFuPigje2RvYy5jdXJyZW50X3N0ZXBfbmFtZX0pPC9zcGFuPjwvZGl2PlwiXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gJ2RyYWZ0JyAmJiBkb2MuY3VycmVudF9zdGVwX25hbWVcblx0XHRcdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz4je2Zsb3dfbmFtZX08c3Bhbj4oI3tkb2MuY3VycmVudF9zdGVwX25hbWV9KTwvc3Bhbj48L2Rpdj5cIlxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTwvZGl2PlwiXG5cblx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRpZiBkb2MuYWdlbnRfdXNlcl9uYW1lICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHt1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZX0pICsgXCIpPC9sYWJlbD5cIlxuXG5cdFx0XHRcdFx0dW5yZWFkID0gJydcblxuXHRcdFx0XHRcdCMgaXNGYXZvcml0ZVNlbGVjdGVkID0gRmF2b3JpdGVzLmlzUmVjb3JkU2VsZWN0ZWQoXCJpbnN0YW5jZXNcIiwgZG9jLl9pZClcblx0XHRcdFx0XHQjIGlmIEZhdm9yaXRlcy5pc1JlY29yZFNlbGVjdGVkKFwiaW5zdGFuY2VzXCIsIGRvYy5faWQpXG5cdFx0XHRcdFx0IyBcdHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24taW9zLXN0YXItb3V0bGluZSBpbnN0YW5jZS1mYXZvcml0ZS1zZWxlY3RlZFwiPjwvaT4nXG5cdFx0XHRcdFx0IyBlbHNlIFxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT0gZmFsc2Vcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nXG5cdFx0XHRcdFx0ZWxzZSBpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PSB0cnVlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPidcblxuXHRcdFx0XHRcdHByaW9yaXR5SWNvbiA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eVZhbHVlID0gZG9jLnZhbHVlcz8ucHJpb3JpdHlcblx0XHRcdFx0XHRzd2l0Y2ggcHJpb3JpdHlWYWx1ZVxuXHRcdFx0XHRcdFx0d2hlbiBcIueJueaApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIue0p+aApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLlip7mlodcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIlxuXHRcdFx0XHRcdGlmIHByaW9yaXR5SWNvbkNsYXNzXG5cdFx0XHRcdFx0XHRpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS0je3ByaW9yaXR5SWNvbkNsYXNzfVwiXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPiN7dW5yZWFkfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgI3tpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzfSc+I3tkb2MubmFtZX0je2NjX3ZpZXd9I3thZ2VudF92aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+I3tkb2MuYXBwbGljYW50X25hbWV9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLWRldGFpbCc+I3tzdGVwX2N1cnJlbnRfbmFtZV92aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9J2luc3RhbmNlLW1vZGlmaWVkJyB0aXRsZT0nI3ttb2RpZmllZFN0cmluZ30nPiN7bW9kaWZpZWRGcm9tTm93fTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XCJcIlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImFwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJuYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX25hbWVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGNjX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdCMg5b2T5YmN55So5oi35ZyoY2MgdXNlcuS4re+8jOS9huaYr+S4jeWcqGluYm94IHVzZXJz5pe25omN5pi+56S6J+S8oOmYhSfmloflrZdcblx0XHRcdFx0XHRpZiBkb2MuaXNfY2MgJiYgIWRvYy5pbmJveF91c2Vycz8uaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnXG5cdFx0XHRcdFx0XHRjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIlxuXG5cdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgZG9jLmFnZW50X3VzZXJfbmFtZVxuXHRcdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge3VzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lfSkgKyBcIik8L2xhYmVsPlwiXG5cblx0XHRcdFx0XHR1bnJlYWQgPSAnJ1xuXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PSBmYWxzZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPidcblx0XHRcdFx0XHRlbHNlIGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09IHRydWVcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+J1xuXG5cdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiXG5cdFx0XHRcdFx0cHJpb3JpdHlWYWx1ZSA9IGRvYy52YWx1ZXM/LnByaW9yaXR5XG5cdFx0XHRcdFx0c3dpdGNoIHByaW9yaXR5VmFsdWVcblx0XHRcdFx0XHRcdHdoZW4gXCLnibnmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLntKfmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiXG5cdFx0XHRcdFx0XHR3aGVuIFwi5Yqe5paHXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCJcblx0XHRcdFx0XHRpZiBwcmlvcml0eUljb25DbGFzc1xuXHRcdFx0XHRcdFx0aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktI3twcmlvcml0eUljb25DbGFzc31cIlxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPiN7dW5yZWFkfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lICN7aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzc30nPiN7ZG9jLm5hbWV9I3tjY192aWV3fSN7YWdlbnRfdmlld308L2Rpdj5cblx0XHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwic3VibWl0X2RhdGVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3VibWl0X2RhdGVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5zdWJtaXRfZGF0ZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2Muc3VibWl0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiZmxvd19uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImN1cnJlbnRfc3RlcF9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0ZXBfY3VycmVudF9uYW1lXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3RhdGUgPT0gXCJjb21wbGV0ZWRcIlxuXHRcdFx0XHRcdFx0anVkZ2UgPSBkb2MuZmluYWxfZGVjaXNpb24gfHwgXCJhcHByb3ZlZFwiXG5cblx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZSA9IGRvYy5jdXJyZW50X3N0ZXBfbmFtZSB8fCAnJ1xuXG5cdFx0XHRcdFx0Y2NfdGFnID0gJydcblxuXHRcdFx0XHRcdGlmIGRvYy5jY19jb3VudCA+IDBcblx0XHRcdFx0XHRcdGNjX3RhZyA9IFRBUGkxOG4uX18oJ2NjX3RhZycpXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcC1jdXJyZW50LXN0YXRlICN7anVkZ2V9XCI+I3tzdGVwX2N1cnJlbnRfbmFtZX0je2NjX3RhZ308L2Rpdj5cblx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwibW9kaWZpZWRcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfbW9kaWZpZWRcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcInN0YXJ0X2RhdGVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RhcnRfZGF0ZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLnN0YXJ0X2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLnN0YXJ0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwibXlfZmluaXNoX2RhdGVcIixcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLm15X2ZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRyZXR1cm4gbW9tZW50KGRvYy5teV9maW5pc2hfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJtb2RpZmllZFwiLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJrZXl3b3Jkc1wiLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJpc19hcmNoaXZlZFwiLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2M/LnZhbHVlcz8ucmVjb3JkX25lZWQgJiYgZG9jLnZhbHVlcy5yZWNvcmRfbmVlZCA9PSBcInRydWVcIlxuXHRcdFx0XHRcdFx0aWYgZG9jPy5pc19hcmNoaXZlZFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdChcIllFU1wiKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHQoXCJOT1wiKVxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRkb206IGRvIC0+XG5cdFx0XHQjIOaJi+acuuS4iuS4jeaYvuekuuS4gOmhteaYvuekuuWkmuWwkeadoeiusOW9lemAiemhuVxuXHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRcdCd0cCdcblx0XHRcdGVsc2Vcblx0XHRcdFx0J3RwbCdcblx0XHRvcmRlcjogW1s0LCBcImRlc2NcIl1dLFxuXHRcdGV4dHJhRmllbGRzOiBbXCJmb3JtXCIsIFwiZmxvd1wiLCBcImluYm94X3VzZXJzXCIsIFwic3RhdGVcIiwgXCJzcGFjZVwiLCBcImFwcGxpY2FudFwiLCBcImZvcm1fdmVyc2lvblwiLFxuXHRcdFx0XCJmbG93X3ZlcnNpb25cIiwgXCJpc19jY1wiLCBcImNjX2NvdW50XCIsIFwiaXNfcmVhZFwiLCBcImN1cnJlbnRfc3RlcF9uYW1lXCIsIFwidmFsdWVzXCIsIFwia2V5d29yZHNcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcImZsb3dfbmFtZVwiLCBcImlzX2hpZGRlblwiLCBcImFnZW50X3VzZXJfbmFtZVwiXSxcblx0XHRsZW5ndGhDaGFuZ2U6IHRydWUsXG5cdFx0bGVuZ3RoTWVudTogWzEwLDE1LDIwLDI1LDUwLDEwMF0sXG5cdFx0cGFnZUxlbmd0aDogMTAsXG5cdFx0aW5mbzogZmFsc2UsXG5cdFx0c2VhcmNoaW5nOiB0cnVlLFxuXHRcdHJlc3BvbnNpdmU6XG5cdFx0XHRkZXRhaWxzOiBmYWxzZVxuXHRcdGF1dG9XaWR0aDogZmFsc2UsXG5cdFx0Y2hhbmdlU2VsZWN0b3I6IChzZWxlY3RvciwgdXNlcklkKSAtPlxuXHRcdFx0dW5sZXNzIHVzZXJJZFxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRzcGFjZSA9IHNlbGVjdG9yLnNwYWNlXG5cdFx0XHR1bmxlc3Mgc3BhY2Vcblx0XHRcdFx0aWYgc2VsZWN0b3I/LiRhbmQ/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRzcGFjZSA9IHNlbGVjdG9yLiRhbmQuZ2V0UHJvcGVydHkoJ3NwYWNlJylbMF1cblx0XHRcdHVubGVzcyBzcGFjZVxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRzcGFjZV91c2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7dXNlcjogdXNlcklkLCBzcGFjZTogc3BhY2V9LCB7ZmllbGRzOiB7X2lkOiAxfX0pXG5cdFx0XHR1bmxlc3Mgc3BhY2VfdXNlclxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRyZXR1cm4gc2VsZWN0b3Jcblx0XHRwYWdpbmdUeXBlOiBcIm51bWJlcnNcIlxuXHRcdFxuXHRcdCMgZ2V0U29ydDogKHNlbGVjdG9yLCBzb3J0KSAtPiBcblx0XHQjIFx0Y29uc29sZS5sb2coJ3NlbGVjdG9yOicsc2VsZWN0b3IpXG5cdFx0IyBcdGNvbnNvbGUubG9nKCdzb3J0Oicsc29ydClcblx0XHQjIFx0bmV3U29ydCA9IFtdXG5cdFx0IyBcdF8uZWFjaCBzZWxlY3RvciwgKHYsIGspIC0+XG5cdFx0IyBcdFx0bmV3U29ydC5wdXNoKFtrLCAxXSlcblx0XHQjIFx0bmV3U29ydCA9IG5ld1NvcnQuY29uY2F0KHNvcnQpXG5cdFx0IyBcdGNvbnNvbGUubG9nKCduZXdTb3J0OicsbmV3U29ydClcblx0XHQjIFx0cmV0dXJuIG5ld1NvcnRcblx0fVxuXG5cdGlmIGZsb3dJZFxuXHRcdGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBmbG93SWRcblxuXHRcdG9wdGlvbnMubmFtZSA9IGtleVxuXG5cdFx0VGFidWxhclRhYmxlcy5pbnN0YW5jZXMuZmllbGRzID0gZmllbGRzXG5cblx0XHRpbnNfZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMgVGFidWxhclRhYmxlcy5pbnN0YW5jZXMuZmllbGRzXG5cblx0XHRpbnNfZmllbGRzLmZvckVhY2ggKGYpLT5cblx0XHRcdGlmIGYudHlwZSAhPSAndGFibGUnICYmIGYuaXNfbGlzdF9kaXNwbGF5XG5cdFx0XHRcdG9wdGlvbnMuY29sdW1ucy5wdXNoXG5cdFx0XHRcdFx0ZGF0YTogKGYubmFtZSB8fCBmLmNvZGUpLFxuXHRcdFx0XHRcdHRpdGxlOiB0KGYubmFtZSB8fCBmLmNvZGUpLFxuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblxuXHRcdFx0XHRcdFx0dmFsdWVzID0gZG9jLnZhbHVlcyB8fCB7fVxuXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlc1tmLmNvZGVdXG5cblx0XHRcdFx0XHRcdHN3aXRjaCBmLnR5cGVcblx0XHRcdFx0XHRcdFx0d2hlbiAndXNlcidcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlPy5uYW1lXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2dyb3VwJ1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWU/LmZ1bGxuYW1lXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2RhdGUnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdFx0XHRcdFx0XHR3aGVuICdkYXRlVGltZSdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2NoZWNrYm94J1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlID09IHRydWUgfHwgdmFsdWUgPT0gJ3RydWUnXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X25vXCIpO1xuXHRcdFx0XHRcdFx0XHR3aGVuICdvZGF0YSdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgXy5pc0FycmF5KHZhbHVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IF8ucGx1Y2sodmFsdWUsICdAbGFiZWwnKS50b1N0cmluZygpXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbJ0BsYWJlbCddXG5cblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXG5cblx0cmV0dXJuIG9wdGlvbnM7XG5cblxuIyDlpoLmnpxjb2x1bW5z5pyJ5Yqg5YeP77yM6K+35L+u5pS5VGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zIOWHveaVsFxuaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIgPSAoZmxvd0lkLCBmaWVsZHMpLT5cblx0b3B0aW9ucyA9IHtcblx0XHRuYW1lOiBcImluc3RhbmNlX3Rhc2tzXCIsXG5cdFx0Y29sbGVjdGlvbjogZGIuaW5zdGFuY2VfdGFza3MsXG5cdFx0cHViOiBcImluc3RhbmNlX3Rhc2tzX3RhYnVsYXJcIixcblx0XHRvblVubG9hZDogKCktPlxuXHRcdFx0TWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApXG5cblx0XHRkcmF3Q2FsbGJhY2s6IChzZXR0aW5ncyktPlxuXHRcdFx0ZW1wdHlUZCA9ICQoXCIuZGF0YVRhYmxlc19lbXB0eVwiKVxuXHRcdFx0aWYgZW1wdHlUZC5sZW5ndGhcblx0XHRcdFx0ZW1wdHlUZFswXS5jb2xTcGFuID0gXCI2XCJcblx0XHRcdGlmICFTdGVlZG9zLmlzTW9iaWxlKCkgJiYgIVN0ZWVkb3MuaXNQYWQoKVxuXHRcdFx0XHRNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MClcblx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnNjcm9sbFRvcCgwKS5yZWFkeSAtPlxuXHRcdFx0XHRcdCQoXCIuaW5zdGFuY2UtbGlzdFwiKS5wZXJmZWN0U2Nyb2xsYmFyKFwidXBkYXRlXCIpXG5cdFx0XHRlbHNlXG5cdFx0XHRcdCQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMClcblxuXHRcdFx0dGl0bGUgPSB0IFwicGFnZXJfaW5wdXRfaGludFwiXG5cdFx0XHRlbGxpcHNpc0xpbmsgPSBzZXR0aW5ncy5vSW5zdGFuY2UucGFyZW50KCkuZmluZCgnLnBhZ2luZ19udW1iZXJzIC5wYWdpbmF0aW9uIC5kaXNhYmxlZCBhJylcblx0XHRcdGVsbGlwc2lzTGluay5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmNzcyhcImN1cnNvclwiLCBcInBvaW50ZXJcIikuY2xpY2sgLT5cblx0XHRcdFx0aWYgISQodGhpcykuZmluZCgnaW5wdXQnKS5sZW5ndGhcblx0XHRcdFx0XHRpbnB1dCA9ICQoJzxpbnB1dCBjbGFzcz1cInBhZ2luYXRlX2lucHV0IGZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHBhZGRpbmc6MCAycHg7XCIvPicpXG5cdFx0XHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRcdFx0XHRpbnB1dC5jc3Moe1xuXHRcdFx0XHRcdFx0XHR3aWR0aDpcIjUycHhcIlxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiMjBweFwiXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGlucHV0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOlwiNTJweFwiXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogXCIxNnB4XCJcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0aW5wdXQuYXR0cihcInRpdGxlXCIsIHRpdGxlKS5hdHRyKFwicGxhY2Vob2xkZXJcIiwgdGl0bGUpXG5cdFx0XHRcdFx0JCh0aGlzKS5lbXB0eSgpLmFwcGVuZCBpbnB1dFxuXHRcdFx0XHRcdGdvUGFnZSA9IChpbmRleCktPlxuXHRcdFx0XHRcdFx0aWYgaW5kZXggPiAwXG5cdFx0XHRcdFx0XHRcdHBhZ2VzID0gTWF0aC5jZWlsKHNldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSAvIHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aClcblx0XHRcdFx0XHRcdFx0aWYgaW5kZXggPiBwYWdlc1xuXHRcdFx0XHRcdFx0XHRcdCMg6aG156CB6LaF5Ye657Si5byV5pe26Lez6L2s5Yiw5pyA5ZCO5LiA6aG1XG5cdFx0XHRcdFx0XHRcdFx0aW5kZXggPSBwYWdlc1xuXHRcdFx0XHRcdFx0XHRpbmRleC0tXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLm9JbnN0YW5jZS5EYXRhVGFibGUoKS5wYWdlKGluZGV4KS5kcmF3KCdwYWdlJylcblx0XHRcdFx0XHRpbnB1dC5ibHVyIChlKS0+XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKClcblx0XHRcdFx0XHRcdGdvUGFnZSBjdXJyZW50UGFnZVxuXHRcdFx0XHRcdFx0JCh0aGlzKS5wYXJlbnQoKS5odG1sICcuLi4nXG5cdFx0XHRcdFx0aW5wdXQua2V5ZG93biAoZSktPlxuXHRcdFx0XHRcdFx0aWYoZS5rZXlDb2RlLnRvU3RyaW5nKCkgPT0gXCIxM1wiKVxuXHRcdFx0XHRcdFx0XHRjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKClcblx0XHRcdFx0XHRcdFx0Z29QYWdlIGN1cnJlbnRQYWdlXG5cblx0XHRjcmVhdGVkUm93OiAocm93LCBkYXRhLCBkYXRhSW5kZXgpIC0+XG5cdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0aWYgZGF0YS5pbnN0YW5jZSA9PSBGbG93Um91dGVyLmN1cnJlbnQoKS5wYXJhbXMuaW5zdGFuY2VJZFxuXHRcdFx0XHRcdHJvdy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNlbGVjdGVkXCIpXG5cdFx0Y29sdW1uczogW1xuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIl9pZFwiLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdG1vZGlmaWVkU3RyaW5nID0gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG5cblx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5tb2RpZmllZFxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLmluc3RhbmNlX3N0YXRlICE9ICdkcmFmdCdcblx0XHRcdFx0XHRcdG1vZGlmaWVkID0gZG9jLnN0YXJ0X2RhdGUgfHwgZG9jLm1vZGlmaWVkXG5cblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnb3V0Ym94J1xuXHRcdFx0XHRcdFx0bW9kaWZpZWQgPSBkb2Muc3VibWl0X2RhdGUgfHwgZG9jLm1vZGlmaWVkXG5cblx0XHRcdFx0XHRtb2RpZmllZEZyb21Ob3cgPSBTdGVlZG9zLm1vbWVudFJlYWN0aXZlRnJvbU5vdyhtb2RpZmllZCk7XG5cdFx0XHRcdFx0Zmxvd19uYW1lID0gZG9jLmZsb3dfbmFtZVxuXHRcdFx0XHRcdGNjX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdCMg5b2T5YmN55So5oi35ZyoY2MgdXNlcuS4re+8jOS9huaYr+S4jeWcqGluYm94IHVzZXJz5pe25omN5pi+56S6J+S8oOmYhSfmloflrZdcblx0XHRcdFx0XHRpZiBkb2MudHlwZSA9PSAnY2MnICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiXG5cdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTxzcGFuPigje2RvYy5zdGVwX25hbWV9KTwvc3Bhbj48L2Rpdj5cIlxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGlmIGRvYy5zdGVwX25hbWVcblx0XHRcdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz4je2Zsb3dfbmFtZX08c3Bhbj4oI3tkb2Muc3RlcF9uYW1lfSk8L3NwYW4+PC9kaXY+XCJcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz4je2Zsb3dfbmFtZX08L2Rpdj5cIlxuXG5cdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgZG9jLmFnZW50X3VzZXJfbmFtZSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnXG5cdFx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7dXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWV9KSArIFwiKTwvbGFiZWw+XCJcblxuXHRcdFx0XHRcdHVucmVhZCA9ICcnXG5cblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09IGZhbHNlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJpb24gaW9uLXJlY29yZCB1bnJlYWRcIj48L2k+J1xuXHRcdFx0XHRcdGVsc2UgaWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT0gdHJ1ZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjwvaT4nXG5cblx0XHRcdFx0XHRwcmlvcml0eUljb24gPSBcIlwiXG5cdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiXG5cdFx0XHRcdFx0cHJpb3JpdHlWYWx1ZSA9IGRvYy52YWx1ZXM/LnByaW9yaXR5XG5cdFx0XHRcdFx0c3dpdGNoIHByaW9yaXR5VmFsdWVcblx0XHRcdFx0XHRcdHdoZW4gXCLnibnmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLntKfmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiXG5cdFx0XHRcdFx0XHR3aGVuIFwi5Yqe5paHXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCJcblx0XHRcdFx0XHRpZiBwcmlvcml0eUljb25DbGFzc1xuXHRcdFx0XHRcdFx0aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktI3twcmlvcml0eUljb25DbGFzc31cIlxuXG5cdFx0XHRcdFx0cmV0dXJuIFwiXCJcIlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz4je3VucmVhZH08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lICN7aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzc30nPiN7ZG9jLmluc3RhbmNlX25hbWV9I3tjY192aWV3fSN7YWdlbnRfdmlld31cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPiN7ZG9jLmFwcGxpY2FudF9uYW1lfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1kZXRhaWwnPiN7c3RlcF9jdXJyZW50X25hbWVfdmlld31cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPSdpbnN0YW5jZS1tb2RpZmllZCcgdGl0bGU9JyN7bW9kaWZpZWRTdHJpbmd9Jz4je21vZGlmaWVkRnJvbU5vd308L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJhcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiaW5zdGFuY2VfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19uYW1lXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRjY192aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHQjIOW9k+WJjeeUqOaIt+WcqGNjIHVzZXLkuK3vvIzkvYbmmK/kuI3lnKhpbmJveCB1c2Vyc+aXtuaJjeaYvuekuifkvKDpmIUn5paH5a2XXG5cdFx0XHRcdFx0aWYgZG9jLmlzX2NjICYmICFkb2MuaW5ib3hfdXNlcnM/LmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRcdFx0Y2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCJcblxuXHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdGlmIGRvYy5hZ2VudF91c2VyX25hbWVcblx0XHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHt1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZX0pICsgXCIpPC9sYWJlbD5cIlxuXG5cdFx0XHRcdFx0dW5yZWFkID0gJydcblxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT0gZmFsc2Vcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nXG5cdFx0XHRcdFx0ZWxzZSBpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PSB0cnVlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPidcblxuXHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJcIlxuXHRcdFx0XHRcdHByaW9yaXR5VmFsdWUgPSBkb2MudmFsdWVzPy5wcmlvcml0eVxuXHRcdFx0XHRcdHN3aXRjaCBwcmlvcml0eVZhbHVlXG5cdFx0XHRcdFx0XHR3aGVuIFwi54m55oClXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiXG5cdFx0XHRcdFx0XHR3aGVuIFwi57Sn5oClXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIuWKnuaWh1wiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiXG5cdFx0XHRcdFx0aWYgcHJpb3JpdHlJY29uQ2xhc3Ncblx0XHRcdFx0XHRcdGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LSN7cHJpb3JpdHlJY29uQ2xhc3N9XCJcblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz4je3VucmVhZH08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSAje2luc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3N9Jz4je2RvYy5pbnN0YW5jZV9uYW1lfSN7Y2Nfdmlld30je2FnZW50X3ZpZXd9PC9kaXY+XG5cdFx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiYXBwbGljYW50X25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X25hbWVcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcInN1Ym1pdF9kYXRlXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N1Ym1pdF9kYXRlXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3VibWl0X2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLnN1Ym1pdF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImZsb3dfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJzdGVwX25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RlcF9jdXJyZW50X25hbWVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5pbnN0YW5jZV9zdGF0ZSA9PSBcImNvbXBsZXRlZFwiXG5cdFx0XHRcdFx0XHRqdWRnZSA9IGRvYy5qdWRnZSB8fCBcImFwcHJvdmVkXCJcblxuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLnN0ZXBfbmFtZSB8fCAnJ1xuXG5cdFx0XHRcdFx0Y2NfdGFnID0gJydcblxuXHRcdFx0XHRcdGlmIGRvYy5jY19jb3VudCA+IDBcblx0XHRcdFx0XHRcdGNjX3RhZyA9IFRBUGkxOG4uX18oJ2NjX3RhZycpXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcC1jdXJyZW50LXN0YXRlICN7anVkZ2V9XCI+I3tzdGVwX2N1cnJlbnRfbmFtZX0je2NjX3RhZ308L2Rpdj5cblx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwibW9kaWZpZWRcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfbW9kaWZpZWRcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcInN0YXJ0X2RhdGVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RhcnRfZGF0ZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLnN0YXJ0X2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLnN0YXJ0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiZmluaXNoX2RhdGVcIixcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRyZXR1cm4gbW9tZW50KGRvYy5maW5pc2hfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJtb2RpZmllZFwiLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJrZXl3b3Jkc1wiLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJpc19hcmNoaXZlZFwiLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2M/LnZhbHVlcz8ucmVjb3JkX25lZWQgJiYgZG9jLnZhbHVlcy5yZWNvcmRfbmVlZCA9PSBcInRydWVcIlxuXHRcdFx0XHRcdFx0aWYgZG9jPy5pc19hcmNoaXZlZFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdChcIllFU1wiKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHQoXCJOT1wiKVxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRkb206IGRvIC0+XG5cdFx0XHQjIOaJi+acuuS4iuS4jeaYvuekuuS4gOmhteaYvuekuuWkmuWwkeadoeiusOW9lemAiemhuVxuXHRcdFx0aWYgU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRcdCd0cCdcblx0XHRcdGVsc2Vcblx0XHRcdFx0J3RwbCdcblx0XHRvcmRlcjogW1s0LCBcImRlc2NcIl1dLFxuXHRcdGV4dHJhRmllbGRzOiBbXCJpbnN0YW5jZVwiLCBcImZvcm1cIiwgXCJmbG93XCIsIFwiaW5ib3hfdXNlcnNcIiwgXCJpbnN0YW5jZV9zdGF0ZVwiLCBcInNwYWNlXCIsIFwiYXBwbGljYW50XCIsIFwiZm9ybV92ZXJzaW9uXCIsXG5cdFx0XHRcImZsb3dfdmVyc2lvblwiLCBcInR5cGVcIiwgXCJpc19yZWFkXCIsIFwic3RlcF9uYW1lXCIsIFwidmFsdWVzXCIsIFwia2V5d29yZHNcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcImZsb3dfbmFtZVwiLCBcImlzX2hpZGRlblwiLCBcImFnZW50X3VzZXJfbmFtZVwiXSxcblx0XHRsZW5ndGhDaGFuZ2U6IHRydWUsXG5cdFx0bGVuZ3RoTWVudTogWzEwLDE1LDIwLDI1LDUwLDEwMF0sXG5cdFx0cGFnZUxlbmd0aDogMTAsXG5cdFx0aW5mbzogZmFsc2UsXG5cdFx0c2VhcmNoaW5nOiB0cnVlLFxuXHRcdHJlc3BvbnNpdmU6XG5cdFx0XHRkZXRhaWxzOiBmYWxzZVxuXHRcdGF1dG9XaWR0aDogZmFsc2UsXG5cdFx0Y2hhbmdlU2VsZWN0b3I6IChzZWxlY3RvciwgdXNlcklkKSAtPlxuXHRcdFx0dW5sZXNzIHVzZXJJZFxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRzcGFjZSA9IHNlbGVjdG9yLnNwYWNlXG5cdFx0XHR1bmxlc3Mgc3BhY2Vcblx0XHRcdFx0aWYgc2VsZWN0b3I/LiRhbmQ/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRzcGFjZSA9IHNlbGVjdG9yLiRhbmQuZ2V0UHJvcGVydHkoJ3NwYWNlJylbMF1cblx0XHRcdHVubGVzcyBzcGFjZVxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRzcGFjZV91c2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7dXNlcjogdXNlcklkLCBzcGFjZTogc3BhY2V9LCB7ZmllbGRzOiB7X2lkOiAxfX0pXG5cdFx0XHR1bmxlc3Mgc3BhY2VfdXNlclxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cdFx0XHRyZXR1cm4gc2VsZWN0b3Jcblx0XHRwYWdpbmdUeXBlOiBcIm51bWJlcnNcIlxuXG5cdH1cblxuXHRpZiBmbG93SWRcblx0XHRrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgZmxvd0lkXG5cblx0XHRvcHRpb25zLm5hbWUgPSBrZXlcblxuXHRcdFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VfdGFza3MuZmllbGRzID0gZmllbGRzXG5cblx0XHRpbnNfZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMgVGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcy5maWVsZHNcblxuXHRcdGluc19maWVsZHMuZm9yRWFjaCAoZiktPlxuXHRcdFx0aWYgZi50eXBlICE9ICd0YWJsZScgJiYgZi5pc19saXN0X2Rpc3BsYXlcblx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLnB1c2hcblx0XHRcdFx0XHRkYXRhOiAoZi5uYW1lIHx8IGYuY29kZSksXG5cdFx0XHRcdFx0dGl0bGU6IHQoZi5uYW1lIHx8IGYuY29kZSksXG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXG5cdFx0XHRcdFx0XHR2YWx1ZXMgPSBkb2MudmFsdWVzIHx8IHt9XG5cblx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVzW2YuY29kZV1cblxuXHRcdFx0XHRcdFx0c3dpdGNoIGYudHlwZVxuXHRcdFx0XHRcdFx0XHR3aGVuICd1c2VyJ1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWU/Lm5hbWVcblx0XHRcdFx0XHRcdFx0d2hlbiAnZ3JvdXAnXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZnVsbG5hbWVcblx0XHRcdFx0XHRcdFx0d2hlbiAnZGF0ZSdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2RhdGVUaW1lJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJylcblx0XHRcdFx0XHRcdFx0d2hlbiAnY2hlY2tib3gnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWUgPT0gdHJ1ZSB8fCB2YWx1ZSA9PSAndHJ1ZSdcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfeWVzXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIik7XG5cdFx0XHRcdFx0XHRcdHdoZW4gJ29kYXRhJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiBfLmlzQXJyYXkodmFsdWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gXy5wbHVjayh2YWx1ZSwgJ0BsYWJlbCcpLnRvU3RyaW5nKClcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ11cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cblxuXHRyZXR1cm4gb3B0aW9ucztcblxuXG5NZXRlb3Iuc3RhcnR1cCAoKS0+XG5cdFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VzID0gbmV3IFRhYnVsYXIuVGFibGUgaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhcigpXG5cdFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VfdGFza3MgPSBuZXcgVGFidWxhci5UYWJsZSBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcigpXG5cdFRhYnVsYXJUYWJsZXMuaW5ib3hfaW5zdGFuY2VzID0gbmV3IFRhYnVsYXIuVGFibGUgR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoXCJpbmJveFwiKVxuXHRUYWJ1bGFyVGFibGVzLm91dGJveF9pbnN0YW5jZXMgPSBuZXcgVGFidWxhci5UYWJsZSBHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhcIm91dGJveFwiKVxuXG5cbkdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zID0gKGJveCwgZmxvd0lkLCBmaWVsZHMpLT5cblx0a2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGJveCArIGZsb3dJZFxuXHRpZiBib3ggPT0gXCJpbmJveFwiXG5cdFx0b3B0aW9ucyA9IF9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyhmbG93SWQsIGZpZWxkcylcblx0ZWxzZSBpZiBib3ggPT0gXCJvdXRib3hcIlxuXHRcdG9wdGlvbnMgPSBfZ2V0X291dGJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zKGZsb3dJZCwgZmllbGRzKVxuXHRlbHNlXG5cdFx0b3B0aW9ucyA9IGluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpXG5cdFx0aWYgIWZsb3dJZFxuXHRcdFx0b3B0aW9ucy5uYW1lID0gXCJpbmJveF9pbnN0YW5jZXNcIlxuXHRpZiBmbG93SWRcblx0XHRvcHRpb25zLm5hbWUgPSBrZXlcblx0cmV0dXJuIG9wdGlvbnNcblxuX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zID0gKGZsb3dJZCwgZmllbGRzKS0+XG5cdG9wdGlvbnMgPSBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcihmbG93SWQsIGZpZWxkcylcblxuXHRpZiAhZmxvd0lkXG5cdFx0b3B0aW9ucy5uYW1lID0gXCJpbmJveF9pbnN0YW5jZXNcIlxuXG5cdG9wdGlvbnMub3JkZXIgPSBbWzgsIFwiZGVzY1wiXV1cblxuXHRvcHRpb25zLmdldFNvcnQgPSAoc2VsZWN0b3IsIHNvcnQpIC0+IFxuXHRcdGNvbnNvbGUubG9nKCdpbmJveF9pbnN0YW5jZXM6Jyxzb3J0KVxuXHRcdHJldHVybiBzb3J0XG5cblx0cmV0dXJuIG9wdGlvbnNcblxuX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyA9IChmbG93SWQsIGZpZWxkcyktPlxuXHRvcHRpb25zID0gaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpXG5cblx0aWYgIWZsb3dJZFxuXHRcdG9wdGlvbnMubmFtZSA9IFwib3V0Ym94X2luc3RhbmNlc1wiXG5cblx0b3B0aW9ucy5vcmRlciA9IFtbOSwgLTFdXVxuXG5cdG9wdGlvbnMuZ2V0U29ydCA9IChzZWxlY3Rvciwgc29ydCkgLT4gXG5cdFx0Y29uc29sZS5sb2coJ291dGJveF9pbnN0YW5jZXM6Jyxzb3J0KVxuXHRcdCMgbmV3U29ydCA9IFsgXG5cdFx0IyBcdFsnc3BhY2UnLCAxXSxcblx0XHQjIFx0WydoYW5kbGVyJywgMV0sXG5cdFx0IyBcdFsnaXNfZmluaXNoZWQnLCAxXSxcblx0XHQjIF1cblx0XHQjIG5ld1NvcnQgPSBuZXdTb3J0LmNvbmNhdChzb3J0KVxuXHRcdCMgcmV0dXJuIG5ld1NvcnRcblx0XHRyZXR1cm4gc29ydFxuXG5cdHJldHVybiBvcHRpb25zXG5cbmlmIE1ldGVvci5pc0NsaWVudFxuXHRUYWJ1bGFyVGFibGVzLmZsb3dJbnN0YW5jZXMgPSBuZXcgUmVhY3RpdmVWYXIoKVxuXG5NZXRlb3Iuc3RhcnR1cCAoKS0+XG5cdFRyYWNrZXIuYXV0b3J1biAoYykgLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnQgJiYgIVN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJmbG93SWRcIikgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gJ2RyYWZ0J1xuXHRcdFx0XHRNZXRlb3IuY2FsbCBcIm5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyXCIsIFNlc3Npb24uZ2V0KFwiYm94XCIpLCBTZXNzaW9uLmdldChcImZsb3dJZFwiKSwgKGVycm9yLCByZXN1bHQpIC0+XG5cdFx0XHRcdFx0bmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIgU2Vzc2lvbi5nZXQoXCJib3hcIiksIFNlc3Npb24uZ2V0KFwiZmxvd0lkXCIpLCByZXN1bHRcblx0XHRcdFx0XHRUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll9jaGFuZ2VPcmRlcigpXG5cblxubmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIgPSAoYm94LCBmbG93SWQsIGZpZWxkcyktPlxuXHRpZiAhZmllbGRzXG5cdFx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoe19pZDogZmxvd0lkfSwge2ZpZWxkczoge2Zvcm06IDF9fSlcblx0XHRmaWVsZHMgPSBkYi5mb3Jtcy5maW5kT25lKHsgX2lkOiBmbG93Py5mb3JtIH0sIHsgZmllbGRzOiB7ICdjdXJyZW50LmZpZWxkcyc6IDEgfSB9KT8uY3VycmVudD8uZmllbGRzXG5cblx0ZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMgZmllbGRzXG5cblx0aWYgZmllbGRzPy5maWx0ZXJQcm9wZXJ0eShcImlzX2xpc3RfZGlzcGxheVwiLCB0cnVlKT8ubGVuZ3RoID4gMFxuXHRcdGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBib3ggKyBmbG93SWRcblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFRhYnVsYXJUYWJsZXMuZmxvd0luc3RhbmNlcy5zZXQobmV3IFRhYnVsYXIuVGFibGUgR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoYm94LCBmbG93SWQsIGZpZWxkcykpXG5cdFx0ZWxzZVxuXHRcdFx0bmV3IFRhYnVsYXIuVGFibGUgR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoYm94LCBmbG93SWQsIGZpZWxkcylcblx0XHRjb25zb2xlLmxvZyBcIm5ldyBUYWJ1bGFyVGFibGVzIFwiLCBrZXlcblxuaWYgTWV0ZW9yLmlzU2VydmVyXG5cdE1ldGVvci5tZXRob2RzXG5cdFx0bmV3SW5zdGFuY2VzTGlzdFRhYnVsYXI6IChib3gsIGZsb3dJZCktPlxuXHRcdFx0bmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIoYm94LCBmbG93SWQpXG5cblx0XHRcdGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtfaWQ6IGZsb3dJZH0sIHtmaWVsZHM6IHtmb3JtOiAxfX0pXG5cdFx0XHRmaWVsZHMgPSBkYi5mb3Jtcy5maW5kT25lKHsgX2lkOiBmbG93Py5mb3JtIH0sIHsgZmllbGRzOiB7ICdjdXJyZW50LmZpZWxkcyc6IDEgfSB9KT8uY3VycmVudD8uZmllbGRzXG5cdFx0XHRyZXR1cm4gZmllbGRzXG5cblxuIiwidmFyIEdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zLCBfZ2V0X2luYm94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMsIF9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMsIF9oYW5kbGVMaXN0RmllbGRzLCBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhciwgaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhciwgbmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIsIHVwZGF0ZVRhYnVsYXJUaXRsZTtcblxuU3RlZWRvcy5zdWJzW1wiSW5zdGFuY2VUYWJ1bGFyXCJdID0gbmV3IFN1YnNNYW5hZ2VyKCk7XG5cbl9oYW5kbGVMaXN0RmllbGRzID0gZnVuY3Rpb24oZmllbGRzKSB7XG4gIHZhciBpbnNfZmllbGRzO1xuICBpbnNfZmllbGRzID0gbmV3IEFycmF5KCk7XG4gIGlmIChmaWVsZHMgIT0gbnVsbCkge1xuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgIHZhciByZWY7XG4gICAgICBpZiAoZi50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmxvZygnaWdub3JlIG9waW5pb24gZmllbGQgaW4gdGFibGUnKTtcbiAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGYgIT0gbnVsbCA/IChyZWYgPSBmLmZpZWxkcykgIT0gbnVsbCA/IHJlZi5mb3JFYWNoKGZ1bmN0aW9uKGYxKSB7XG4gICAgICAgICAgcmV0dXJuIGluc19maWVsZHMucHVzaChmMSk7XG4gICAgICAgIH0pIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluc19maWVsZHMucHVzaChmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gaW5zX2ZpZWxkcztcbn07XG5cbnVwZGF0ZVRhYnVsYXJUaXRsZSA9IGZ1bmN0aW9uKCkge307XG5cbmluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIgPSBmdW5jdGlvbihmbG93SWQsIGZpZWxkcykge1xuICB2YXIgaW5zX2ZpZWxkcywga2V5LCBvcHRpb25zO1xuICBvcHRpb25zID0ge1xuICAgIG5hbWU6IFwiaW5zdGFuY2VzXCIsXG4gICAgY29sbGVjdGlvbjogZGIuaW5zdGFuY2VzLFxuICAgIHB1YjogXCJpbnN0YW5jZV90YWJ1bGFyXCIsXG4gICAgb25VbmxvYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE1ldGVvci5zZXRUaW1lb3V0KFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucywgMTUwKTtcbiAgICB9LFxuICAgIGRyYXdDYWxsYmFjazogZnVuY3Rpb24oc2V0dGluZ3MpIHtcbiAgICAgIHZhciBlbGxpcHNpc0xpbmssIGVtcHR5VGQsIHRpdGxlO1xuICAgICAgZW1wdHlUZCA9ICQoXCIuZGF0YVRhYmxlc19lbXB0eVwiKTtcbiAgICAgIGlmIChlbXB0eVRkLmxlbmd0aCkge1xuICAgICAgICBlbXB0eVRkWzBdLmNvbFNwYW4gPSBcIjZcIjtcbiAgICAgIH1cbiAgICAgIGlmICghU3RlZWRvcy5pc01vYmlsZSgpICYmICFTdGVlZG9zLmlzUGFkKCkpIHtcbiAgICAgICAgTWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApO1xuICAgICAgICAkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKFwiLmluc3RhbmNlLWxpc3RcIikucGVyZmVjdFNjcm9sbGJhcihcInVwZGF0ZVwiKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApO1xuICAgICAgfVxuICAgICAgdGl0bGUgPSB0KFwicGFnZXJfaW5wdXRfaGludFwiKTtcbiAgICAgIGVsbGlwc2lzTGluayA9IHNldHRpbmdzLm9JbnN0YW5jZS5wYXJlbnQoKS5maW5kKCcucGFnaW5nX251bWJlcnMgLnBhZ2luYXRpb24gLmRpc2FibGVkIGEnKTtcbiAgICAgIHJldHVybiBlbGxpcHNpc0xpbmsuYXR0cihcInRpdGxlXCIsIHRpdGxlKS5jc3MoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZ29QYWdlLCBpbnB1dDtcbiAgICAgICAgaWYgKCEkKHRoaXMpLmZpbmQoJ2lucHV0JykubGVuZ3RoKSB7XG4gICAgICAgICAgaW5wdXQgPSAkKCc8aW5wdXQgY2xhc3M9XCJwYWdpbmF0ZV9pbnB1dCBmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiB0eXBlPVwidGV4dFwiIHN0eWxlPVwiYm9yZGVyOiBub25lOyBwYWRkaW5nOjAgMnB4O1wiLz4nKTtcbiAgICAgICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgICBpbnB1dC5jc3Moe1xuICAgICAgICAgICAgICB3aWR0aDogXCI1MnB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIyMHB4XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dC5jc3Moe1xuICAgICAgICAgICAgICB3aWR0aDogXCI1MnB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxNnB4XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCB0aXRsZSk7XG4gICAgICAgICAgJCh0aGlzKS5lbXB0eSgpLmFwcGVuZChpbnB1dCk7XG4gICAgICAgICAgZ29QYWdlID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBwYWdlcztcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgcGFnZXMgPSBNYXRoLmNlaWwoc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpIC8gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcGFnZXMpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHBhZ2VzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncy5vSW5zdGFuY2UuRGF0YVRhYmxlKCkucGFnZShpbmRleCkuZHJhdygncGFnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgaW5wdXQuYmx1cihmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBnb1BhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuICQodGhpcykucGFyZW50KCkuaHRtbCgnLi4uJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGlucHV0LmtleWRvd24oZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKGUua2V5Q29kZS50b1N0cmluZygpID09PSBcIjEzXCIpIHtcbiAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgICByZXR1cm4gZ29QYWdlKGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVkUm93OiBmdW5jdGlvbihyb3csIGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgICBpZiAoZGF0YS5faWQgPT09IEZsb3dSb3V0ZXIuY3VycmVudCgpLnBhcmFtcy5pbnN0YW5jZUlkKSB7XG4gICAgICAgICAgcmV0dXJuIHJvdy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjb2x1bW5zOiBbXG4gICAgICB7XG4gICAgICAgIGRhdGE6IFwiX2lkXCIsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgYWdlbnRfdmlldywgY2NfdmlldywgZmxvd19uYW1lLCBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzLCBtb2RpZmllZCwgbW9kaWZpZWRGcm9tTm93LCBtb2RpZmllZFN0cmluZywgcHJpb3JpdHlJY29uLCBwcmlvcml0eUljb25DbGFzcywgcHJpb3JpdHlWYWx1ZSwgcmVmLCByZWYxLCBzdGVwX2N1cnJlbnRfbmFtZV92aWV3LCB1bnJlYWQ7XG4gICAgICAgICAgbW9kaWZpZWRTdHJpbmcgPSBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgICBtb2RpZmllZCA9IGRvYy5tb2RpZmllZDtcbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcgJiYgZG9jLnN0YXRlICE9PSAnZHJhZnQnKSB7XG4gICAgICAgICAgICBtb2RpZmllZCA9IGRvYy5zdGFydF9kYXRlIHx8IGRvYy5tb2RpZmllZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnb3V0Ym94JyB8fCBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InKSB7XG4gICAgICAgICAgICBtb2RpZmllZCA9IGRvYy5zdWJtaXRfZGF0ZSB8fCBkb2Muc3VibWl0X2RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1vZGlmaWVkRnJvbU5vdyA9IFN0ZWVkb3MubW9tZW50UmVhY3RpdmVGcm9tTm93KG1vZGlmaWVkKTtcbiAgICAgICAgICBmbG93X25hbWUgPSBkb2MuZmxvd19uYW1lO1xuICAgICAgICAgIGNjX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuaXNfY2MgJiYgISgocmVmID0gZG9jLmluYm94X3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgOiB2b2lkIDApICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIjtcbiAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjxzcGFuPihcIiArIGRvYy5jdXJyZW50X3N0ZXBfbmFtZSArIFwiKTwvc3Bhbj48L2Rpdj5cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpICE9PSAnZHJhZnQnICYmIGRvYy5jdXJyZW50X3N0ZXBfbmFtZSkge1xuICAgICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8c3Bhbj4oXCIgKyBkb2MuY3VycmVudF9zdGVwX25hbWUgKyBcIik8L3NwYW4+PC9kaXY+XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYWdlbnRfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5hZ2VudF91c2VyX25hbWUgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgdXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWVcbiAgICAgICAgICAgIH0pICsgXCIpPC9sYWJlbD5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5yZWFkID0gJyc7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPic7XG4gICAgICAgICAgfSBlbHNlIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JpdHlJY29uID0gXCJcIjtcbiAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiXCI7XG4gICAgICAgICAgcHJpb3JpdHlWYWx1ZSA9IChyZWYxID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZjEucHJpb3JpdHkgOiB2b2lkIDA7XG4gICAgICAgICAgc3dpdGNoIChwcmlvcml0eVZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwi54m55oClXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi57Sn5oClXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIuWKnuaWh1wiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByaW9yaXR5SWNvbkNsYXNzKSB7XG4gICAgICAgICAgICBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS1cIiArIHByaW9yaXR5SWNvbkNsYXNzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS1yZWFkLWJhcic+XCIgKyB1bnJlYWQgKyBcIjwvZGl2PlxcbjxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgXCIgKyBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzICsgXCInPlwiICsgZG9jLm5hbWUgKyBjY192aWV3ICsgYWdlbnRfdmlldyArIFwiXFxuXHQ8c3Bhbj5cIiArIGRvYy5hcHBsaWNhbnRfbmFtZSArIFwiPC9zcGFuPlxcbjwvZGl2PlxcbjxkaXYgY2xhc3M9J2luc3RhbmNlLWRldGFpbCc+XCIgKyBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ICsgXCJcXG5cdDxzcGFuIGNsYXNzPSdpbnN0YW5jZS1tb2RpZmllZCcgdGl0bGU9J1wiICsgbW9kaWZpZWRTdHJpbmcgKyBcIic+XCIgKyBtb2RpZmllZEZyb21Ob3cgKyBcIjwvc3Bhbj5cXG48L2Rpdj5cIjtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImFwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIiksXG4gICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19uYW1lXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGFnZW50X3ZpZXcsIGNjX3ZpZXcsIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MsIHByaW9yaXR5SWNvbkNsYXNzLCBwcmlvcml0eVZhbHVlLCByZWYsIHJlZjEsIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcsIHVucmVhZDtcbiAgICAgICAgICBjY192aWV3ID0gXCJcIjtcbiAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCJcIjtcbiAgICAgICAgICBpZiAoZG9jLmlzX2NjICYmICEoKHJlZiA9IGRvYy5pbmJveF91c2VycykgIT0gbnVsbCA/IHJlZi5pbmNsdWRlcyhNZXRlb3IudXNlcklkKCkpIDogdm9pZCAwKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICAgICAgY2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuYWdlbnRfdXNlcl9uYW1lKSB7XG4gICAgICAgICAgICBhZ2VudF92aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICAgIHVzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lXG4gICAgICAgICAgICB9KSArIFwiKTwvbGFiZWw+XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHVucmVhZCA9ICcnO1xuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICB1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPic7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJcIjtcbiAgICAgICAgICBwcmlvcml0eVZhbHVlID0gKHJlZjEgPSBkb2MudmFsdWVzKSAhPSBudWxsID8gcmVmMS5wcmlvcml0eSA6IHZvaWQgMDtcbiAgICAgICAgICBzd2l0Y2ggKHByaW9yaXR5VmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCLnibnmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLntKfmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi5Yqe5paHXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJpb3JpdHlJY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LVwiICsgcHJpb3JpdHlJY29uQ2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz5cIiArIHVucmVhZCArIFwiPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSBcIiArIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgKyBcIic+XCIgKyBkb2MubmFtZSArIGNjX3ZpZXcgKyBhZ2VudF92aWV3ICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJzdWJtaXRfZGF0ZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19zdWJtaXRfZGF0ZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIGlmIChkb2Muc3VibWl0X2RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLnN1Ym1pdF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJmbG93X25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJjdXJyZW50X3N0ZXBfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19zdGVwX2N1cnJlbnRfbmFtZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBjY190YWcsIGp1ZGdlLCBzdGVwX2N1cnJlbnRfbmFtZTtcbiAgICAgICAgICBpZiAoZG9jLnN0YXRlID09PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgICBqdWRnZSA9IGRvYy5maW5hbF9kZWNpc2lvbiB8fCBcImFwcHJvdmVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLmN1cnJlbnRfc3RlcF9uYW1lIHx8ICcnO1xuICAgICAgICAgIGNjX3RhZyA9ICcnO1xuICAgICAgICAgIGlmIChkb2MuY2NfY291bnQgPiAwKSB7XG4gICAgICAgICAgICBjY190YWcgPSBUQVBpMThuLl9fKCdjY190YWcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz1cXFwic3RlcC1jdXJyZW50LXN0YXRlIFwiICsganVkZ2UgKyBcIlxcXCI+XCIgKyBzdGVwX2N1cnJlbnRfbmFtZSArIGNjX3RhZyArIFwiPC9kaXY+XCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibW9kaWZpZWRcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfbW9kaWZpZWRcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJzdGFydF9kYXRlXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0YXJ0X2RhdGVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLnN0YXJ0X2RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLnN0YXJ0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcIm15X2ZpbmlzaF9kYXRlXCIsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLm15X2ZpbmlzaF9kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5teV9maW5pc2hfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibW9kaWZpZWRcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJrZXl3b3Jkc1wiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImlzX2FyY2hpdmVkXCIsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgcmVmO1xuICAgICAgICAgIGlmICgoZG9jICE9IG51bGwgPyAocmVmID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZi5yZWNvcmRfbmVlZCA6IHZvaWQgMCA6IHZvaWQgMCkgJiYgZG9jLnZhbHVlcy5yZWNvcmRfbmVlZCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIGlmIChkb2MgIT0gbnVsbCA/IGRvYy5pc19hcmNoaXZlZCA6IHZvaWQgMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdChcIllFU1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0KFwiTk9cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfVxuICAgIF0sXG4gICAgZG9tOiAoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgIHJldHVybiAndHAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd0cGwnO1xuICAgICAgfVxuICAgIH0pKCksXG4gICAgb3JkZXI6IFtbNCwgXCJkZXNjXCJdXSxcbiAgICBleHRyYUZpZWxkczogW1wiZm9ybVwiLCBcImZsb3dcIiwgXCJpbmJveF91c2Vyc1wiLCBcInN0YXRlXCIsIFwic3BhY2VcIiwgXCJhcHBsaWNhbnRcIiwgXCJmb3JtX3ZlcnNpb25cIiwgXCJmbG93X3ZlcnNpb25cIiwgXCJpc19jY1wiLCBcImNjX2NvdW50XCIsIFwiaXNfcmVhZFwiLCBcImN1cnJlbnRfc3RlcF9uYW1lXCIsIFwidmFsdWVzXCIsIFwia2V5d29yZHNcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcImZsb3dfbmFtZVwiLCBcImlzX2hpZGRlblwiLCBcImFnZW50X3VzZXJfbmFtZVwiXSxcbiAgICBsZW5ndGhDaGFuZ2U6IHRydWUsXG4gICAgbGVuZ3RoTWVudTogWzEwLCAxNSwgMjAsIDI1LCA1MCwgMTAwXSxcbiAgICBwYWdlTGVuZ3RoOiAxMCxcbiAgICBpbmZvOiBmYWxzZSxcbiAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgcmVzcG9uc2l2ZToge1xuICAgICAgZGV0YWlsczogZmFsc2VcbiAgICB9LFxuICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgY2hhbmdlU2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yLCB1c2VySWQpIHtcbiAgICAgIHZhciByZWYsIHNwYWNlLCBzcGFjZV91c2VyO1xuICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZSA9IHNlbGVjdG9yLnNwYWNlO1xuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICBpZiAoKHNlbGVjdG9yICE9IG51bGwgPyAocmVmID0gc2VsZWN0b3IuJGFuZCkgIT0gbnVsbCA/IHJlZi5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgICAgICAgIHNwYWNlID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNwYWNlX3VzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtcbiAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICBzcGFjZTogc3BhY2VcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgX2lkOiAxXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCFzcGFjZV91c2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH0sXG4gICAgcGFnaW5nVHlwZTogXCJudW1iZXJzXCJcbiAgfTtcbiAgaWYgKGZsb3dJZCkge1xuICAgIGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBmbG93SWQ7XG4gICAgb3B0aW9ucy5uYW1lID0ga2V5O1xuICAgIFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VzLmZpZWxkcyA9IGZpZWxkcztcbiAgICBpbnNfZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMoVGFidWxhclRhYmxlcy5pbnN0YW5jZXMuZmllbGRzKTtcbiAgICBpbnNfZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZikge1xuICAgICAgaWYgKGYudHlwZSAhPT0gJ3RhYmxlJyAmJiBmLmlzX2xpc3RfZGlzcGxheSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGYubmFtZSB8fCBmLmNvZGUsXG4gICAgICAgICAgdGl0bGU6IHQoZi5uYW1lIHx8IGYuY29kZSksXG4gICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUsIHZhbHVlcztcbiAgICAgICAgICAgIHZhbHVlcyA9IGRvYy52YWx1ZXMgfHwge307XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1tmLmNvZGVdO1xuICAgICAgICAgICAgc3dpdGNoIChmLnR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUubmFtZSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLmZ1bGxuYW1lIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF95ZXNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdvZGF0YSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF8ucGx1Y2sodmFsdWUsICdAbGFiZWwnKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ107XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59O1xuXG5pbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhciA9IGZ1bmN0aW9uKGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBpbnNfZmllbGRzLCBrZXksIG9wdGlvbnM7XG4gIG9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJpbnN0YW5jZV90YXNrc1wiLFxuICAgIGNvbGxlY3Rpb246IGRiLmluc3RhbmNlX3Rhc2tzLFxuICAgIHB1YjogXCJpbnN0YW5jZV90YXNrc190YWJ1bGFyXCIsXG4gICAgb25VbmxvYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE1ldGVvci5zZXRUaW1lb3V0KFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucywgMTUwKTtcbiAgICB9LFxuICAgIGRyYXdDYWxsYmFjazogZnVuY3Rpb24oc2V0dGluZ3MpIHtcbiAgICAgIHZhciBlbGxpcHNpc0xpbmssIGVtcHR5VGQsIHRpdGxlO1xuICAgICAgZW1wdHlUZCA9ICQoXCIuZGF0YVRhYmxlc19lbXB0eVwiKTtcbiAgICAgIGlmIChlbXB0eVRkLmxlbmd0aCkge1xuICAgICAgICBlbXB0eVRkWzBdLmNvbFNwYW4gPSBcIjZcIjtcbiAgICAgIH1cbiAgICAgIGlmICghU3RlZWRvcy5pc01vYmlsZSgpICYmICFTdGVlZG9zLmlzUGFkKCkpIHtcbiAgICAgICAgTWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApO1xuICAgICAgICAkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKFwiLmluc3RhbmNlLWxpc3RcIikucGVyZmVjdFNjcm9sbGJhcihcInVwZGF0ZVwiKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApO1xuICAgICAgfVxuICAgICAgdGl0bGUgPSB0KFwicGFnZXJfaW5wdXRfaGludFwiKTtcbiAgICAgIGVsbGlwc2lzTGluayA9IHNldHRpbmdzLm9JbnN0YW5jZS5wYXJlbnQoKS5maW5kKCcucGFnaW5nX251bWJlcnMgLnBhZ2luYXRpb24gLmRpc2FibGVkIGEnKTtcbiAgICAgIHJldHVybiBlbGxpcHNpc0xpbmsuYXR0cihcInRpdGxlXCIsIHRpdGxlKS5jc3MoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZ29QYWdlLCBpbnB1dDtcbiAgICAgICAgaWYgKCEkKHRoaXMpLmZpbmQoJ2lucHV0JykubGVuZ3RoKSB7XG4gICAgICAgICAgaW5wdXQgPSAkKCc8aW5wdXQgY2xhc3M9XCJwYWdpbmF0ZV9pbnB1dCBmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiB0eXBlPVwidGV4dFwiIHN0eWxlPVwiYm9yZGVyOiBub25lOyBwYWRkaW5nOjAgMnB4O1wiLz4nKTtcbiAgICAgICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgICBpbnB1dC5jc3Moe1xuICAgICAgICAgICAgICB3aWR0aDogXCI1MnB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIyMHB4XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dC5jc3Moe1xuICAgICAgICAgICAgICB3aWR0aDogXCI1MnB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxNnB4XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCB0aXRsZSk7XG4gICAgICAgICAgJCh0aGlzKS5lbXB0eSgpLmFwcGVuZChpbnB1dCk7XG4gICAgICAgICAgZ29QYWdlID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBwYWdlcztcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgcGFnZXMgPSBNYXRoLmNlaWwoc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpIC8gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcGFnZXMpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHBhZ2VzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncy5vSW5zdGFuY2UuRGF0YVRhYmxlKCkucGFnZShpbmRleCkuZHJhdygncGFnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgaW5wdXQuYmx1cihmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBnb1BhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuICQodGhpcykucGFyZW50KCkuaHRtbCgnLi4uJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGlucHV0LmtleWRvd24oZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKGUua2V5Q29kZS50b1N0cmluZygpID09PSBcIjEzXCIpIHtcbiAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgICByZXR1cm4gZ29QYWdlKGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVkUm93OiBmdW5jdGlvbihyb3csIGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgICBpZiAoZGF0YS5pbnN0YW5jZSA9PT0gRmxvd1JvdXRlci5jdXJyZW50KCkucGFyYW1zLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICByZXR1cm4gcm93LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbHVtbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZGF0YTogXCJfaWRcIixcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBhZ2VudF92aWV3LCBjY192aWV3LCBmbG93X25hbWUsIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MsIG1vZGlmaWVkLCBtb2RpZmllZEZyb21Ob3csIG1vZGlmaWVkU3RyaW5nLCBwcmlvcml0eUljb24sIHByaW9yaXR5SWNvbkNsYXNzLCBwcmlvcml0eVZhbHVlLCByZWYsIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcsIHVucmVhZDtcbiAgICAgICAgICBtb2RpZmllZFN0cmluZyA9IG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgIG1vZGlmaWVkID0gZG9jLm1vZGlmaWVkO1xuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94JyAmJiBkb2MuaW5zdGFuY2Vfc3RhdGUgIT09ICdkcmFmdCcpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkID0gZG9jLnN0YXJ0X2RhdGUgfHwgZG9jLm1vZGlmaWVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdvdXRib3gnKSB7XG4gICAgICAgICAgICBtb2RpZmllZCA9IGRvYy5zdWJtaXRfZGF0ZSB8fCBkb2MubW9kaWZpZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1vZGlmaWVkRnJvbU5vdyA9IFN0ZWVkb3MubW9tZW50UmVhY3RpdmVGcm9tTm93KG1vZGlmaWVkKTtcbiAgICAgICAgICBmbG93X25hbWUgPSBkb2MuZmxvd19uYW1lO1xuICAgICAgICAgIGNjX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MudHlwZSA9PT0gJ2NjJyAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICAgICAgY2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCI7XG4gICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8c3Bhbj4oXCIgKyBkb2Muc3RlcF9uYW1lICsgXCIpPC9zcGFuPjwvZGl2PlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9jLnN0ZXBfbmFtZSkge1xuICAgICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8c3Bhbj4oXCIgKyBkb2Muc3RlcF9uYW1lICsgXCIpPC9zcGFuPjwvZGl2PlwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz5cIiArIGZsb3dfbmFtZSArIFwiPC9kaXY+XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuYWdlbnRfdXNlcl9uYW1lICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBhZ2VudF92aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICAgIHVzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lXG4gICAgICAgICAgICB9KSArIFwiKTwvbGFiZWw+XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHVucmVhZCA9ICcnO1xuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICB1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPic7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yaXR5SWNvbiA9IFwiXCI7XG4gICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIHByaW9yaXR5VmFsdWUgPSAocmVmID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZi5wcmlvcml0eSA6IHZvaWQgMDtcbiAgICAgICAgICBzd2l0Y2ggKHByaW9yaXR5VmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCLnibnmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLntKfmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi5Yqe5paHXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJpb3JpdHlJY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LVwiICsgcHJpb3JpdHlJY29uQ2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz5cIiArIHVucmVhZCArIFwiPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSBcIiArIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgKyBcIic+XCIgKyBkb2MuaW5zdGFuY2VfbmFtZSArIGNjX3ZpZXcgKyBhZ2VudF92aWV3ICsgXCJcXG5cdDxzcGFuPlwiICsgZG9jLmFwcGxpY2FudF9uYW1lICsgXCI8L3NwYW4+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtZGV0YWlsJz5cIiArIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgKyBcIlxcblx0PHNwYW4gY2xhc3M9J2luc3RhbmNlLW1vZGlmaWVkJyB0aXRsZT0nXCIgKyBtb2RpZmllZFN0cmluZyArIFwiJz5cIiArIG1vZGlmaWVkRnJvbU5vdyArIFwiPC9zcGFuPlxcbjwvZGl2PlwiO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiKSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJpbnN0YW5jZV9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX25hbWVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgYWdlbnRfdmlldywgY2NfdmlldywgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcywgcHJpb3JpdHlJY29uQ2xhc3MsIHByaW9yaXR5VmFsdWUsIHJlZiwgcmVmMSwgc3RlcF9jdXJyZW50X25hbWVfdmlldywgdW5yZWFkO1xuICAgICAgICAgIGNjX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuaXNfY2MgJiYgISgocmVmID0gZG9jLmluYm94X3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgOiB2b2lkIDApICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWdlbnRfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5hZ2VudF91c2VyX25hbWUpIHtcbiAgICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgdXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWVcbiAgICAgICAgICAgIH0pICsgXCIpPC9sYWJlbD5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5yZWFkID0gJyc7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPic7XG4gICAgICAgICAgfSBlbHNlIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIHByaW9yaXR5VmFsdWUgPSAocmVmMSA9IGRvYy52YWx1ZXMpICE9IG51bGwgPyByZWYxLnByaW9yaXR5IDogdm9pZCAwO1xuICAgICAgICAgIHN3aXRjaCAocHJpb3JpdHlWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcIueJueaApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIue0p+aApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLlip7mlodcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmlvcml0eUljb25DbGFzcykge1xuICAgICAgICAgICAgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktXCIgKyBwcmlvcml0eUljb25DbGFzcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPlwiICsgdW5yZWFkICsgXCI8L2Rpdj5cXG48ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lIFwiICsgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyArIFwiJz5cIiArIGRvYy5pbnN0YW5jZV9uYW1lICsgY2NfdmlldyArIGFnZW50X3ZpZXcgKyBcIjwvZGl2PlwiO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImFwcGxpY2FudF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9uYW1lXCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcInN1Ym1pdF9kYXRlXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N1Ym1pdF9kYXRlXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5zdWJtaXRfZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkb2Muc3VibWl0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImZsb3dfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcInN0ZXBfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19zdGVwX2N1cnJlbnRfbmFtZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBjY190YWcsIGp1ZGdlLCBzdGVwX2N1cnJlbnRfbmFtZTtcbiAgICAgICAgICBpZiAoZG9jLmluc3RhbmNlX3N0YXRlID09PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgICBqdWRnZSA9IGRvYy5qdWRnZSB8fCBcImFwcHJvdmVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLnN0ZXBfbmFtZSB8fCAnJztcbiAgICAgICAgICBjY190YWcgPSAnJztcbiAgICAgICAgICBpZiAoZG9jLmNjX2NvdW50ID4gMCkge1xuICAgICAgICAgICAgY2NfdGFnID0gVEFQaTE4bi5fXygnY2NfdGFnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9XFxcInN0ZXAtY3VycmVudC1zdGF0ZSBcIiArIGp1ZGdlICsgXCJcXFwiPlwiICsgc3RlcF9jdXJyZW50X25hbWUgKyBjY190YWcgKyBcIjwvZGl2PlwiO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcIm1vZGlmaWVkXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX21vZGlmaWVkXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgcmV0dXJuIG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwic3RhcnRfZGF0ZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19zdGFydF9kYXRlXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5zdGFydF9kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5zdGFydF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJmaW5pc2hfZGF0ZVwiLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5maW5pc2hfZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkb2MuZmluaXNoX2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcIm1vZGlmaWVkXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwia2V5d29yZHNcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJpc19hcmNoaXZlZFwiLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIHJlZjtcbiAgICAgICAgICBpZiAoKGRvYyAhPSBudWxsID8gKHJlZiA9IGRvYy52YWx1ZXMpICE9IG51bGwgPyByZWYucmVjb3JkX25lZWQgOiB2b2lkIDAgOiB2b2lkIDApICYmIGRvYy52YWx1ZXMucmVjb3JkX25lZWQgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICBpZiAoZG9jICE9IG51bGwgPyBkb2MuaXNfYXJjaGl2ZWQgOiB2b2lkIDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHQoXCJZRVNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdChcIk5PXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH1cbiAgICBdLFxuICAgIGRvbTogKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgICByZXR1cm4gJ3RwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAndHBsJztcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIG9yZGVyOiBbWzQsIFwiZGVzY1wiXV0sXG4gICAgZXh0cmFGaWVsZHM6IFtcImluc3RhbmNlXCIsIFwiZm9ybVwiLCBcImZsb3dcIiwgXCJpbmJveF91c2Vyc1wiLCBcImluc3RhbmNlX3N0YXRlXCIsIFwic3BhY2VcIiwgXCJhcHBsaWNhbnRcIiwgXCJmb3JtX3ZlcnNpb25cIiwgXCJmbG93X3ZlcnNpb25cIiwgXCJ0eXBlXCIsIFwiaXNfcmVhZFwiLCBcInN0ZXBfbmFtZVwiLCBcInZhbHVlc1wiLCBcImtleXdvcmRzXCIsIFwiZmluYWxfZGVjaXNpb25cIiwgXCJmbG93X25hbWVcIiwgXCJpc19oaWRkZW5cIiwgXCJhZ2VudF91c2VyX25hbWVcIl0sXG4gICAgbGVuZ3RoQ2hhbmdlOiB0cnVlLFxuICAgIGxlbmd0aE1lbnU6IFsxMCwgMTUsIDIwLCAyNSwgNTAsIDEwMF0sXG4gICAgcGFnZUxlbmd0aDogMTAsXG4gICAgaW5mbzogZmFsc2UsXG4gICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgIGRldGFpbHM6IGZhbHNlXG4gICAgfSxcbiAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgIGNoYW5nZVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvciwgdXNlcklkKSB7XG4gICAgICB2YXIgcmVmLCBzcGFjZSwgc3BhY2VfdXNlcjtcbiAgICAgIGlmICghdXNlcklkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc3BhY2UgPSBzZWxlY3Rvci5zcGFjZTtcbiAgICAgIGlmICghc3BhY2UpIHtcbiAgICAgICAgaWYgKChzZWxlY3RvciAhPSBudWxsID8gKHJlZiA9IHNlbGVjdG9yLiRhbmQpICE9IG51bGwgPyByZWYubGVuZ3RoIDogdm9pZCAwIDogdm9pZCAwKSA+IDApIHtcbiAgICAgICAgICBzcGFjZSA9IHNlbGVjdG9yLiRhbmQuZ2V0UHJvcGVydHkoJ3NwYWNlJylbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3BhY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZV91c2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG4gICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgc3BhY2U6IHNwYWNlXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIF9pZDogMVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghc3BhY2VfdXNlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICB9LFxuICAgIHBhZ2luZ1R5cGU6IFwibnVtYmVyc1wiXG4gIH07XG4gIGlmIChmbG93SWQpIHtcbiAgICBrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgZmxvd0lkO1xuICAgIG9wdGlvbnMubmFtZSA9IGtleTtcbiAgICBUYWJ1bGFyVGFibGVzLmluc3RhbmNlX3Rhc2tzLmZpZWxkcyA9IGZpZWxkcztcbiAgICBpbnNfZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMoVGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcy5maWVsZHMpO1xuICAgIGluc19maWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICBpZiAoZi50eXBlICE9PSAndGFibGUnICYmIGYuaXNfbGlzdF9kaXNwbGF5KSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgZGF0YTogZi5uYW1lIHx8IGYuY29kZSxcbiAgICAgICAgICB0aXRsZTogdChmLm5hbWUgfHwgZi5jb2RlKSxcbiAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSwgdmFsdWVzO1xuICAgICAgICAgICAgdmFsdWVzID0gZG9jLnZhbHVlcyB8fCB7fTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2YuY29kZV07XG4gICAgICAgICAgICBzd2l0Y2ggKGYudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5uYW1lIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZnVsbG5hbWUgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ29kYXRhJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXy5wbHVjayh2YWx1ZSwgJ0BsYWJlbCcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWydAbGFiZWwnXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbk1ldGVvci5zdGFydHVwKGZ1bmN0aW9uKCkge1xuICBUYWJ1bGFyVGFibGVzLmluc3RhbmNlcyA9IG5ldyBUYWJ1bGFyLlRhYmxlKGluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIoKSk7XG4gIFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VfdGFza3MgPSBuZXcgVGFidWxhci5UYWJsZShpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcigpKTtcbiAgVGFidWxhclRhYmxlcy5pbmJveF9pbnN0YW5jZXMgPSBuZXcgVGFidWxhci5UYWJsZShHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhcImluYm94XCIpKTtcbiAgcmV0dXJuIFRhYnVsYXJUYWJsZXMub3V0Ym94X2luc3RhbmNlcyA9IG5ldyBUYWJ1bGFyLlRhYmxlKEdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zKFwib3V0Ym94XCIpKTtcbn0pO1xuXG5HZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyA9IGZ1bmN0aW9uKGJveCwgZmxvd0lkLCBmaWVsZHMpIHtcbiAgdmFyIGtleSwgb3B0aW9ucztcbiAga2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGJveCArIGZsb3dJZDtcbiAgaWYgKGJveCA9PT0gXCJpbmJveFwiKSB7XG4gICAgb3B0aW9ucyA9IF9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyhmbG93SWQsIGZpZWxkcyk7XG4gIH0gZWxzZSBpZiAoYm94ID09PSBcIm91dGJveFwiKSB7XG4gICAgb3B0aW9ucyA9IF9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMoZmxvd0lkLCBmaWVsZHMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBpbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyKGZsb3dJZCwgZmllbGRzKTtcbiAgICBpZiAoIWZsb3dJZCkge1xuICAgICAgb3B0aW9ucy5uYW1lID0gXCJpbmJveF9pbnN0YW5jZXNcIjtcbiAgICB9XG4gIH1cbiAgaWYgKGZsb3dJZCkge1xuICAgIG9wdGlvbnMubmFtZSA9IGtleTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbl9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyA9IGZ1bmN0aW9uKGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBvcHRpb25zO1xuICBvcHRpb25zID0gaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpO1xuICBpZiAoIWZsb3dJZCkge1xuICAgIG9wdGlvbnMubmFtZSA9IFwiaW5ib3hfaW5zdGFuY2VzXCI7XG4gIH1cbiAgb3B0aW9ucy5vcmRlciA9IFtbOCwgXCJkZXNjXCJdXTtcbiAgb3B0aW9ucy5nZXRTb3J0ID0gZnVuY3Rpb24oc2VsZWN0b3IsIHNvcnQpIHtcbiAgICBjb25zb2xlLmxvZygnaW5ib3hfaW5zdGFuY2VzOicsIHNvcnQpO1xuICAgIHJldHVybiBzb3J0O1xuICB9O1xuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbl9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMgPSBmdW5jdGlvbihmbG93SWQsIGZpZWxkcykge1xuICB2YXIgb3B0aW9ucztcbiAgb3B0aW9ucyA9IGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyKGZsb3dJZCwgZmllbGRzKTtcbiAgaWYgKCFmbG93SWQpIHtcbiAgICBvcHRpb25zLm5hbWUgPSBcIm91dGJveF9pbnN0YW5jZXNcIjtcbiAgfVxuICBvcHRpb25zLm9yZGVyID0gW1s5LCAtMV1dO1xuICBvcHRpb25zLmdldFNvcnQgPSBmdW5jdGlvbihzZWxlY3Rvciwgc29ydCkge1xuICAgIGNvbnNvbGUubG9nKCdvdXRib3hfaW5zdGFuY2VzOicsIHNvcnQpO1xuICAgIHJldHVybiBzb3J0O1xuICB9O1xuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgVGFidWxhclRhYmxlcy5mbG93SW5zdGFuY2VzID0gbmV3IFJlYWN0aXZlVmFyKCk7XG59XG5cbk1ldGVvci5zdGFydHVwKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gVHJhY2tlci5hdXRvcnVuKGZ1bmN0aW9uKGMpIHtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50ICYmICFTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgIGlmIChTZXNzaW9uLmdldChcImZsb3dJZFwiKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSAhPT0gJ2RyYWZ0Jykge1xuICAgICAgICByZXR1cm4gTWV0ZW9yLmNhbGwoXCJuZXdJbnN0YW5jZXNMaXN0VGFidWxhclwiLCBTZXNzaW9uLmdldChcImJveFwiKSwgU2Vzc2lvbi5nZXQoXCJmbG93SWRcIiksIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHtcbiAgICAgICAgICBuZXdJbnN0YW5jZXNMaXN0VGFidWxhcihTZXNzaW9uLmdldChcImJveFwiKSwgU2Vzc2lvbi5nZXQoXCJmbG93SWRcIiksIHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX2NoYW5nZU9yZGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcblxubmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIgPSBmdW5jdGlvbihib3gsIGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBmbG93LCBrZXksIHJlZiwgcmVmMSwgcmVmMjtcbiAgaWYgKCFmaWVsZHMpIHtcbiAgICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgICBfaWQ6IGZsb3dJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBmb3JtOiAxXG4gICAgICB9XG4gICAgfSk7XG4gICAgZmllbGRzID0gKHJlZiA9IGRiLmZvcm1zLmZpbmRPbmUoe1xuICAgICAgX2lkOiBmbG93ICE9IG51bGwgPyBmbG93LmZvcm0gOiB2b2lkIDBcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgJ2N1cnJlbnQuZmllbGRzJzogMVxuICAgICAgfVxuICAgIH0pKSAhPSBudWxsID8gKHJlZjEgPSByZWYuY3VycmVudCkgIT0gbnVsbCA/IHJlZjEuZmllbGRzIDogdm9pZCAwIDogdm9pZCAwO1xuICB9XG4gIGZpZWxkcyA9IF9oYW5kbGVMaXN0RmllbGRzKGZpZWxkcyk7XG4gIGlmICgoZmllbGRzICE9IG51bGwgPyAocmVmMiA9IGZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcImlzX2xpc3RfZGlzcGxheVwiLCB0cnVlKSkgIT0gbnVsbCA/IHJlZjIubGVuZ3RoIDogdm9pZCAwIDogdm9pZCAwKSA+IDApIHtcbiAgICBrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgYm94ICsgZmxvd0lkO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIFRhYnVsYXJUYWJsZXMuZmxvd0luc3RhbmNlcy5zZXQobmV3IFRhYnVsYXIuVGFibGUoR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoYm94LCBmbG93SWQsIGZpZWxkcykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IFRhYnVsYXIuVGFibGUoR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoYm94LCBmbG93SWQsIGZpZWxkcykpO1xuICAgIH1cbiAgICByZXR1cm4gY29uc29sZS5sb2coXCJuZXcgVGFidWxhclRhYmxlcyBcIiwga2V5KTtcbiAgfVxufTtcblxuaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICBNZXRlb3IubWV0aG9kcyh7XG4gICAgbmV3SW5zdGFuY2VzTGlzdFRhYnVsYXI6IGZ1bmN0aW9uKGJveCwgZmxvd0lkKSB7XG4gICAgICB2YXIgZmllbGRzLCBmbG93LCByZWYsIHJlZjE7XG4gICAgICBuZXdJbnN0YW5jZXNMaXN0VGFidWxhcihib3gsIGZsb3dJZCk7XG4gICAgICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgICAgIF9pZDogZmxvd0lkXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIGZvcm06IDFcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmaWVsZHMgPSAocmVmID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgICAgIF9pZDogZmxvdyAhPSBudWxsID8gZmxvdy5mb3JtIDogdm9pZCAwXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICdjdXJyZW50LmZpZWxkcyc6IDFcbiAgICAgICAgfVxuICAgICAgfSkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5jdXJyZW50KSAhPSBudWxsID8gcmVmMS5maWVsZHMgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cbiAgfSk7XG59XG4iXX0= diff --git a/server/bundle/programs/server/packages/steedos_workflow.js.map b/server/bundle/programs/server/packages/steedos_workflow.js.map index d8c75374c1..d2650bd178 100644 --- a/server/bundle/programs/server/packages/steedos_workflow.js.map +++ b/server/bundle/programs/server/packages/steedos_workflow.js.map @@ -1 +1 @@ -{"version":3,"sources":["meteor://💻app/packages/steedos:workflow/checkNpm.js","meteor://💻app/packages/steedos:workflow/lib/URI.js","meteor://💻app/packages/steedos_workflow/lib/core.coffee","meteor://💻app/lib/core.coffee","meteor://💻app/packages/steedos_workflow/lib/models/instance_tasks.coffee","meteor://💻app/packages/steedos_workflow/lib/models/auth_tokens.coffee","meteor://💻app/packages/steedos_workflow/client/lib/instance_readonly_template.coffee","meteor://💻app/client/lib/instance_readonly_template.coffee","meteor://💻app/packages/steedos_workflow/client/lib/template_manager.coffee","meteor://💻app/client/lib/template_manager.coffee","meteor://💻app/packages/steedos:workflow/client/coreform/inputTypes/coreform-table/steedos-table.js","meteor://💻app/packages/steedos_workflow/client/views/instance/_image_sign.coffee","meteor://💻app/client/views/instance/_image_sign.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_traces_handler.coffee","meteor://💻app/client/views/instance/_traces_handler.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_instance_form.coffee","meteor://💻app/client/views/instance/_instance_form.coffee","meteor://💻app/packages/steedos:workflow/client/views/instance/_instance_attachments.js","meteor://💻app/packages/steedos_workflow/client/views/instance/_instance_sign_text.coffee","meteor://💻app/client/views/instance/_instance_sign_text.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_traces_help.coffee","meteor://💻app/client/views/instance/_traces_help.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_related_instances.coffee","meteor://💻app/client/views/instance/_related_instances.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_related_records.coffee","meteor://💻app/client/views/instance/_related_records.coffee","meteor://💻app/packages/steedos:workflow/routes/getSpaceUsers.js","meteor://💻app/packages/steedos:workflow/routes/getFormulaUserObjects.js","meteor://💻app/packages/steedos:workflow/routes/init_formula_values.js","meteor://💻app/packages/steedos:workflow/routes/api_workflow_forward.js","meteor://💻app/packages/steedos_workflow/routes/test_webhook.coffee","meteor://💻app/routes/test_webhook.coffee","meteor://💻app/packages/steedos_workflow/server/methods/set_instance_step_approve.coffee","meteor://💻app/packages/steedos:workflow/server/methods/get_instance_data.js","meteor://💻app/packages/steedos:workflow/server/methods/save_instance.js","meteor://💻app/packages/steedos:workflow/server/methods/trace_approve_cc.js","meteor://💻app/packages/steedos:workflow/server/methods/forward_instance.js","meteor://💻app/packages/steedos:workflow/server/methods/cfs_instances.js","meteor://💻app/packages/steedos_workflow/server/methods/instance_approve.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_return.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_remind.coffee","meteor://💻app/packages/steedos_workflow/server/methods/next_step_users_not_found.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_number_rules.coffee","meteor://💻app/packages/steedos_workflow/server/methods/check_main_attach.coffee","meteor://💻app/packages/steedos_workflow/server/methods/related_instances.coffee","meteor://💻app/packages/steedos_workflow/server/methods/edit_flow_positions.coffee","meteor://💻app/packages/steedos_workflow/server/methods/start_flow.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_traces.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_batch.coffee","meteor://💻app/packages/steedos_workflow/server/methods/flow.coffee","meteor://💻app/packages/steedos_workflow/server/methods/hide_instance.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_value.coffee","meteor://💻app/packages/steedos_workflow/server/routes/instance.coffee","meteor://💻app/server/routes/instance.coffee","meteor://💻app/packages/steedos_workflow/server/routes/steedos_css.coffee","meteor://💻app/server/routes/steedos_css.coffee","meteor://💻app/packages/steedos_workflow/server/routes/instance_draft_view.coffee","meteor://💻app/server/routes/instance_draft_view.coffee","meteor://💻app/packages/steedos:workflow/server/lib/1_form_formula.js","meteor://💻app/packages/steedos_workflow/server/publications/categories.coffee","meteor://💻app/server/publications/categories.coffee","meteor://💻app/packages/steedos_workflow/server/publications/cfs_instances.coffee","meteor://💻app/server/publications/cfs_instances.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flow_positions.coffee","meteor://💻app/server/publications/flow_positions.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flow_positions_tabular.coffee","meteor://💻app/server/publications/flow_positions_tabular.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flow_roles.coffee","meteor://💻app/server/publications/flow_roles.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flows.coffee","meteor://💻app/server/publications/flows.coffee","meteor://💻app/packages/steedos_workflow/server/publications/forms.coffee","meteor://💻app/server/publications/forms.coffee","meteor://💻app/packages/steedos_workflow/server/publications/instance_data.coffee","meteor://💻app/server/publications/instance_data.coffee","meteor://💻app/packages/steedos_workflow/server/publications/instance_list.coffee","meteor://💻app/server/publications/instance_list.coffee","meteor://💻app/packages/steedos_workflow/server/publications/instance_tabular.coffee","meteor://💻app/server/publications/instance_tabular.coffee","meteor://💻app/packages/steedos_workflow/server/publications/instance_draft.coffee","meteor://💻app/server/publications/instance_draft.coffee","meteor://💻app/packages/steedos_workflow/server/publications/distributed_instances_state_by_ids.coffee","meteor://💻app/server/publications/distributed_instances_state_by_ids.coffee","meteor://💻app/packages/steedos_workflow/server/publications/related_instaces.coffee","meteor://💻app/server/publications/related_instaces.coffee","meteor://💻app/packages/steedos_workflow/server/publications/space_user_signs.coffee","meteor://💻app/server/publications/space_user_signs.coffee","meteor://💻app/packages/steedos_workflow/server/publications/user_inbox_instance.coffee","meteor://💻app/server/publications/user_inbox_instance.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flow_main_attach_template.coffee","meteor://💻app/server/publications/flow_main_attach_template.coffee","meteor://💻app/packages/steedos_workflow/server/flow-template/workflow_template.coffee","meteor://💻app/server/flow-template/workflow_template.coffee","meteor://💻app/packages/steedos_workflow/server/schedule/auto_finish_process_delegation.coffee","meteor://💻app/server/schedule/auto_finish_process_delegation.coffee","meteor://💻app/packages/steedos_workflow/server/schedule/timeout_auto_submit.coffee","meteor://💻app/server/schedule/timeout_auto_submit.coffee","meteor://💻app/packages/steedos_workflow/related_instances_tabular.coffee","meteor://💻app/related_instances_tabular.coffee","meteor://💻app/packages/steedos_workflow/tabular.coffee","meteor://💻app/tabular.coffee"],"names":["checkNpmVersions","module","link","v","root","factory","define","amd","URI","punycode","IPv6","SecondLevelDomains","SLD","_URI","url","base","_urlSupplied","arguments","length","_baseSupplied","undefined","TypeError","location","href","absoluteTo","version","p","prototype","hasOwn","Object","hasOwnProperty","escapeRegEx","string","replace","getType","value","String","toString","call","slice","isArray","obj","filterArrayValues","data","lookup","i","_match","test","splice","arrayContains","list","_type","match","arraysEqual","one","two","sort","l","trimSlashes","text","trim_expression","_parts","protocol","username","password","hostname","urn","port","path","query","fragment","duplicateQueryParameters","escapeQuerySpace","protocol_expression","idn_expression","punycode_expression","ip4_expression","ip6_expression","find_uri_expression","findUri","start","end","trim","defaultPorts","http","https","ftp","gopher","ws","wss","invalid_hostname_characters","domAttributes","getDomAttribute","node","nodeName","toLowerCase","type","escapeForDumbFirefox36","escape","strictEncodeURIComponent","encodeURIComponent","encode","decode","decodeURIComponent","iso8859","unescape","unicode","characters","pathname","expression","map","reserved","urnpath","encodeQuery","escaped","decodeQuery","e","_part","generateAccessor","_group","c","generateSegmentedPathFunction","_sep","_codingFuncName","_innerCodingFuncName","actualCodingFunc","segments","split","join","decodePath","decodeUrnPath","recodePath","recodeUrnPath","encodeReserved","parse","parts","pos","indexOf","substring","parseAuthority","parseHost","bracketPos","t","charAt","firstColon","firstSlash","nextColon","parseUserinfo","lastIndexOf","shift","parseQuery","items","splits","name","push","build","buildAuthority","buildHost","buildUserinfo","buildQuery","unique","key","buildQueryParameter","addQuery","concat","removeQuery","hasQuery","withinArray","_booly","Boolean","op","commonPath","Math","min","withinString","callback","options","_start","_end","_trim","_attributeOpen","lastIndex","exec","index","ignoreHtml","attributeOpen","max","search","ignore","result","ensureValidHostname","toASCII","noConflict","removeAll","unconflicted","URITemplate","deferBuild","_deferred_build","_string","clone","valueOf","generateSimpleAccessor","generatePrefixAccessor","_key","hash","res","_object","attribute","src","is","what","ip","ip4","ip6","sld","idn","relative","has","_protocol","_port","_hostname","scheme","x","origin","authority","host","userinfo","resource","subdomain","domain","sub","RegExp","tld","get","ReferenceError","directory","filename","decodePathSegment","mutatedDirectory","normalizePath","suffix","s","segment","separator","absolute","Error","pop","unshift","segmentCoded","q","setQuery","setSearch","addSearch","removeSearch","hasSearch","normalize","normalizeProtocol","normalizeQuery","normalizeFragment","normalizeHostname","normalizePort","best","_path","_was_relative","_leadingParents","_parent","_pos","normalizePathname","normalizeSearch","normalizeHash","d","readable","uri","toUnicode","qp","kv","resolved","properties","basedir","relativeTo","relativeParts","baseParts","common","relativePath","basePath","parents","equals","one_map","two_map","checked","one_query","two_query","Workflow","ImageSign","TracesHandler","TracesTemplate","InstanceformTemplate","InstanceAttachmentTemplate","InstanceSignText","RelatedInstances","RelatedRecords","InstanceMacro","context","TracesManager","isOpinionField_from_string","field_formula","includesOpinionField","form","form_version","_form_version","field_formulas","fields","Array","Meteor","isServer","uuflowManager","getFormVersion","db","forms","findOne","_id","form_versions","forEach","f","ref","console","log","f1","formula","_","some","helpers","instance_tasks","Collection","_simpleSchema","SimpleSchema","instance","trace","is_finished","user","user_name","handler","handler_name","handler_organization","handler_organization_name","handler_organization_fullname","start_date","Date","due_date","is_read","is_error","values","deadline","remind_date","reminded_count","Number","read_date","description","modified","modified_by","sign_show","judge","next_steps","finish_date","cost_time","space","instance_name","submitter","submitter_name","applicant","applicant_name","applicant_organization_name","submit_date","flow","flow_name","step","step_name","category_name","instance_state","distribute_from_instance","forward_from_instance","keywords","is_archived","category","auth_tokens","_getLocale","_getRequiredFields","_getStartStepEditableFields","_getStartStepRequiredFields","_getTemplateData","_getViewHtml","getLinkText","marked","require","InstanceReadOnlyTemplate","instance_attachment","afSelectUserRead","afFormGroupRead","afFormGroup","create","tempalteName","steedosData","template","templateCompiled","templateRenderFunction","SpacebarsCompiler","compile","isBody","eval","Template","Blaze","createInstanceSignText","instanceSignTextCompiled","instanceSignTextHtml","instanceSignTextRenderFunction","instanceSignText","createImageSign","imageSignCompiled","imageSignHtml","imageSignRenderFunction","imageSign","createTracesHanlder","tracesHanlderCompiled","tracesHanlderHtml","tracesHanlderRenderFunction","instance_traces_handler","init","item","label","detail_url","Steedos","absoluteUrl","getValue","field","locale","utcOffset","date","fieldOptions","hours","month","nameField","records","seconds","selectedOption","selectedOptions","splitedValues","t0","t1","uiSchema","year","n","itemSplits","encodeURI","error","is_multiselect","getProperty","fullname","TAPi18n","__","formatDate","is_textarea","Npm","Spacebars","SafeString","find","filter","is_percent","numberToPercentString","digits","numberToString","isClient","authRequest","JSON","stringify","async","objectFind","filters","original","Creator","getObject","reference_to","NAME_FIELD_KEY","reference_to_field","getObjectNameFieldKey","getLabel","code","findPropertyByPK","getInstanceFormVersion","form_fields","current","where","historys","getFlowVersion","flow_version","flows","viewHtml","Assets","getText","ref1","toLocaleLowerCase","rev","is_required","steps","editableCode","startStep","keys","permissions","requiredFields","intersection","WorkflowManager","WorkflowManager_format","getAutoformSchemaValues","insname","ins_state","state","ins_final_decision","ins_code","ins_is_archived","ins_is_deleted","applicantContext","sessionUserId","editable","startStepEditableFields","passing","moment","format","getInstanceView","body","instanceCompiled","instanceRenderFunction","instanceTemplate","TemplateManager","getTemplate","templateName","instance_readonly_view","toHTMLWithData","getTracesView","traceCompiled","traceRenderFunction","tracesHtml","instance_style","trace_readonly_view","traces","getAttachmentView","attachmentCompiled","attachmentHtml","attachmentRenderFunction","attachments_readonly_view","getRelatedInstancesView","relatedInstancesCompiled","relatedInstancesHtml","relatedInstancesRenderFunction","related_instances_view","getRelatedRecordsView","relatedRecordsCompiled","relatedRecordsHtml","relatedRecordsRenderFunction","related_records_view","getOnLoadScript","form_script","getInstanceHtml","allCssLink","attachment","creatorService","cssHref","formDescription","formDescriptionHtml","html","ins_record_ids","instanceBoxStyle","jqHref","onLoadScript","openFileScript","related_instances","related_records","showTracesBtn","showTracesScript","traceCheck","width","settings","webservices","creator","record_ids","isMobile","showTrace","final_decision","showAttachments","isEmpty","tagger","styles","plugins","add_styles","formId","instance_title","pageTitle","pageTitleTrClass","val","CoreForm","pageTitleFieldName","handleTableTemplate","_export","table_fields","table_field","field_permission","pureCode","required","title_permission","removeSpecialCharacter","isOpinionField","tr_start","td_colspan","tr_end","includes","permission","_template","table","_templateHelps","steedos_instance","getInstance","atts","id","style","disabled","instanceId","form_types","ApproveManager","isReadOnly","steedos_form","innersubformContext","doc_values","Session","a","b","getAutoformSchema","instance_box_style","box","ins","print_template","instance_template","SteedosTable","checkItem","item_index","fieldObj","getField","fieldVal","getItemModalValue","sf_name","sfields","sf","InstanceManager","checkFormFieldValue","$","setTableItemValue","item_value","tableValue","getTableValue","getTableItemValue","removeTableItem","removed","setTableValue","getValidValue","validValue","handleData","instanceFields","getInstanceFields","getModalData","Form_formula","getFormulaFieldVariable","AutoForm","getFormValues","insertDoc","addItem","_item_value","getKeys","append","getTr","updateItem","tds","getRemoveTd","sfield","getTd","empty","runFormula","removeItem","hide","showModal","method","modalData","setTimeout","Modal","show","getCurrentDataForForm","ss","getFormSchema","schema","objectKeys","_makeGeneric","getThead","isObject","thead","trs","sf_length","wide_fields","filterProperty","is_wide","getTbody","sfieldsEditable","tbody","tr","td","td_value","getTDValue","view","CFDataManager","getFormulaSpaceUsers","u","getFormulaOrganizations","o","getFormulaOrganization","pluck","addInputType","valueOut","valueConverters","stringToStringArray","stringToNumber","stringToNumberArray","stringToBoolean","stringToBooleanArray","stringToDate","stringToDateArray","contextAdjust","maxlength","afTable","events","event","new_item_index","currentTarget","dataset","set","rendered","str","addItemTr","getCurrentStep","step_type","ccHasEditPermission","autorun","currentData","spaceUserSign","userId","space_user_signs","imageURL","sign","showSignImage","traceShowSignImage","objectUrl","object_name","record_id","app_id","getObjectUrl","unempty","unequals","include","ref2","ref3","getInstanceFlowVersion","approves","ref4","approve","judge_name","opinion_fields_code","sign_field_code","after_field","before_field","pre_fields","pre_wide_fields","sort_approve","order","p1","p2","_p1","_p2","getTime","_t","getCfClass","getTableThead","getTableBody","showLabel","templateData","getOpinionFieldStepsName","top_keywords","foo1","opinionFields","foo","json_formula","s1","error1","yijianlan","stepName","image_sign","only_cc_opinion","only_cc","default_description","only_handler","showCCOpinion","markDownToHtml","markDownString","f_label","that","isSection","registerHelper","ins_attach_download_url","getPermissions","instanceformChangeEvent","preventDefault","openWindow","target","onCreated","compiled","instanceCustomTemplate","instanceView","renderFunction","View","instance_custom_template","onRendered","currentApprove","currentStep","formula_fields","instanceNumberFields","setInstanceFormApplicant","nextSteps","nextStepUsers","InstanceEvent","initEvents","getCurrentApprove","each","element","schemaKey","toastr","reason","getFieldValue","InstanceNumberRules","instanceNumberBuilder","trigger","run","showMainTitle","workflowMainAttachTitle","enabled_add_main_attachment","current_step","currentTrace","getCurrentTrace","main_attach_count","cfs","instances","count","distribute_main_attach_count","start_step","getStartStep","can_edit_main_attach","enabled_edit_normal_attachment","getFlow","upload_after_being_distributed","isCC","getCCStep","can_edit_normal_attach","main_attachment","main_attach","normal_attachments","selector","$ne","dfis","distribute_from_instances","$in","distribute_main","firstVersionMain","metadata","parent","attachmentUploadedAt","uploadedAt","firstVersion","sortBy","instanceIds","attachments_count","flow_files","files","isDraftAndFlowfilesExist","compact","attachments","$or","fetch","myApprove","myTrace","isInbox","defaultDescription","approve_sort","approvesGroup","approves_sorted","completed_date","hasNext","haveDescriptionApprove","is_completed","last","top_approves","union","top_approve","groupBy","handlerApproves","descriptionApproves","workflow","showBlankApproveDescription","_display","isMyApprove","myApproveDescription","approveId","now","isOpinionOfField","imageSignData","getLastSignApprove","getHandlerSignShowApproves","lastMyApproveDescription","showApprove","judge_description","is_approved","is_rejected","is_readed","addClass","dateFormat","getFullYear","getStepName","stepId","getInstanceStep","showDeleteButton","approved","from_user","isShowModificationButton","approve_admins","isShow","contains","isEditing","is_editing","isShowDescription","getApproveStatusIcon","approveJudge","autoSubmitted","approveStatusIcon","getApproveStatusText","approveStatusText","getApproveJudgeClass","isForward","showForwardDeleteButton","forward_instance","isDistribute","showDistributeDeleteButton","hasFlowAdminPermission","finishDateSchema","isAndroidOrIOS","autoform","optional","readonly","dateTimePickerOptions","ignoreReadonly","widgetPositioning","horizontal","finishDateValues","showTracesView","show_modal_traces_list","space_settings","getInstanceStateText","instance_id","getInstanceStateColor","cla","firstTrace","last_distribute_from","dis_info","$exists","created","created_by","UUflow_api","getNameForUser","users","from_user_name","isCCOrDistributeOrForwardTerminated","judgeTerminated","instanceExists","agentDescription","userName","traceName","traceId","handlerDoc","handlerId","users_can_read_cc_handler_detail_info","getContactInfoForUser","stopPropagation","calling","err","removeClass","success","allowMultiple","closest","target_user_id","openSafeObjectUrl","forward_space","forwardspace","forwardinstance","Tracker","afterFlush","on","scrollTop","finish_input","opinion_input","showRelatedInstaces","related_instaces","related_instace_url","isCordova","show_delete","showRelatedRecords","relatedRecordUrl","objcetName","ids","process","env","CREATOR_NODE_ENV","JsonRoutes","add","req","next","hashData","action","to_users","sendResult","stack","errors","errorMessage","message","workflowMethods","methods","set_instance_step_approve","ins_id","step_approve","stepsApprovesOptions","apply","set_instance_skip_steps","get_instance_data","formCached","flowCached","draft_save_instance","inbox_save_instance","cc_do","cc_user_ids","cc_read","cc_submit","cc_remove","batch_cancel_cc","approve_ids","cc_save","space_id","flow_id","hasSaveInstanceToAttachment","isForwardAttachments","selectedUsers","action_type","related","from_approve_id","forward_remove","trace_id","approve_id","cancelDistribute","cfs_instances_remove","file_id","cfs_instances_set_current","cfs_instances_lock","user_id","cfs_instances_unlock","download_space_instance_attachments_to_disk","spaceId","cfsRecordIds","set_approve_have_read","change_approve_info","update_approve_sign","sign_type","lastSignApprove","update_sign_show","objs","myApprove_id","instance_return","instance_remind","remind_users","remind_count","remind_deadline","action_types","next_step_users_not_found","deal_type","params","_eval","check_main_attach","remove_related","re_ins_id","update_instance_related","updateFlowPosition","updateFlowRole","start_flow","flowId","get_instance_traces","categoryId","flowIds","get_batch_instances","get_batch_instances_count","get_my_approves","change_flow_state","hide_instance","insId","is_hidden","getInstanceValues","Cookies","getInstanceReadOnly","_hasPermission","_locale","_parent_instances","dataBuf","hide_traces","spaceUserCount","getAPILoginUser","access_token","getUserIdFromAccessToken","spaces","space_users","hasInstancePermissions","_parent_id","_parent_ins","charset","Buffer","setHeader","statusCode","ret_sync_token","spaceUser","spaceUserOrganizations","sync_token","APIAuthenticationCheck","headers","isSpaceAdmin","organizations","canMonitor","canAdmin","$gt","$nin","inbox_uers","cc_users","outbox_users","skip","limit","copies","allCss","WebApp","getRefreshableAssets","css","rootUrl","__meteor_runtime_config__","ROOT_URL_PATH_PREFIX","ROOT_URL","endsWith","h","g","m","k","getEach","uniq","mixin","dest","handerUserObject","organization","hr","sort_no","mobile","work_phone","position","userRoles","roles","handerOrgObject","org","init_formula_values","autoFormDoc","approver","__values","tableFields","tableValues","formulaTableValues","__tableValues","tablefield","getFormulaUserObjects","getFormulaOrgObjects","getFormulaUserObject","publish","check","ready","categories","app","flow_positions","role","publishComposite","tableName","Match","Optional","unblock","children","flow_roles","createTemplateFormAndFlow","perms","company_id","distribute_optional_users","distribute_to_self","enable_amisform","versionId","handle","self","latest","observeChanges","changed","added","onStop","stop","flow_ids","distribute_end_notification","allow_select_step","amis_schema","getMiniInstance","getMyapproveModified","instance_fields_0","miniApproveFields","needChange","triggerChangeFields","triggerChangeFieldsValues","myApproveModifieds","_instanceId","_trace","changeFields","_change","_rev","_my_approve_modifieds","isEqual","getInstanceTraces","_insId","inbox_users","asyncLastFinishedApprove","lastFinishedApproveAggregate","instanceid","dataMap","operation","rawCollection","aggregate","toArray","doc","isFunction","wrapAsync","getMyApprove","getMyLastFinishedApprove","getStepCurrentName","notFinishedTraces","agent","stepCurrentName","$slice","myLastFinishedApprove","agent_user_name","my_finish_date","is_cc","cc_count","tabularName","instance_ids","related_instance_ids","_async_get_flow_instances_aggregate","_get_flow_instances_aggregate","_items","$match","$group","$sum","_changeData","_flowsData","_init","dataItem","flow_instance","observe","getCollection","workflowTemplate","startup","absolute_path_cn","absolute_path_us","filesList_cn","filesList_us","fs","mime","path_cn","path_us","readFileList","pathDir","filesList","readdirSync","stat","statSync","isDirectory","workflowTemplates","resolve","existsSync","file","readFileSync","go_next","rule","schedule","cron","auto_finish_process_delegation","scheduleJob","bindEnvironment","time","process_delegation_rules","update","enabled","end_time","$lte","$set","multi","timeEnd","timeout_auto_submit","timeoutAutoSubmit","TabularTables","related_instances_tabular","Tabular","Table","collection","columns","title","orderable","render","input","step_current_name","current_step_name","dom","lengthChange","extraFields","pageLength","info","searching","responsive","details","autoWidth","changeSelector","curSpaceUser","$and","admins","fl","extend","GetBoxInstancesTabularOptions","_get_inbox_instances_tabular_options","_get_outbox_instances_tabular_options","_handleListFields","instanceTasksListTableTabular","instancesListTableTabular","newInstancesListTabular","updateTabularTitle","subs","SubsManager","ins_fields","pub","onUnload","instance_list","_tableColumns","drawCallback","ellipsisLink","emptyTd","colSpan","isPad","perfectScrollbar","oInstance","attr","click","goPage","height","pages","ceil","fnRecordsDisplay","_iDisplayLength","DataTable","page","draw","blur","currentPage","keydown","keyCode","createdRow","row","dataIndex","FlowRouter","setAttribute","agent_view","cc_view","instanceNamePriorityClass","modifiedFromNow","modifiedString","priorityIcon","priorityIconClass","priorityValue","step_current_name_view","unread","momentReactiveFromNow","priority","visible","cc_tag","record_need","lengthMenu","space_user","pagingType","is_list_display","inbox_instances","outbox_instances","getSort","flowInstances","ReactiveVar","_changeOrder"],"mappings":"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;AACAjG,SAAKgB,IAAItD,UAAJ,CAAe,CAAf,EAAkBmb,GAAlB,CAAsB,CAAtB,CAAL;;AAEA,QAAGrwB,QAAH;AACC,aAAOqE,OAAOsH,WAAP,CAAmB,WAASykB,UAAT,GAAoB,QAApB,GAA4B5Y,EAA/C,CAAP;AADD;AAGC,aAAO9L,QAAQC,WAAR,CAAoB,WAASykB,UAAT,GAAoB,QAApB,GAA4B5Y,EAAhD,CAAP;ACIE;AD9BJ;AAAA,CADD,C;;;;;;;;;;;;;;;;;;;;;;;AEAA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,K;;;;;;;;;;;AC/BA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,K;;;;;;;;;;;AC/BA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzmBA,IAAG8Y,QAAQC,GAAR,CAAYC,gBAAZ,KAAgC,aAAnC;AACIC,aAAWC,GAAX,CAAe,MAAf,EAAuB,eAAvB,EAAwC,UAACC,GAAD,EAAMlzB,GAAN,EAAWmzB,IAAX;AACpC,QAAA54B,CAAA,EAAA64B,QAAA;;AAAA;AAEIA,iBAAWF,IAAIhf,IAAf;AACA1M,cAAQC,GAAR,CAAY,UAAZ,EAAwB2rB,SAASC,MAAjC;AACA7rB,cAAQC,GAAR,CAAY,aAAZ,EAA2B2rB,SAAS7F,SAApC;AACA/lB,cAAQC,GAAR,CAAY,YAAZ,EAA0B2rB,SAASE,QAAnC;ACCN,aDEMN,WAAWO,UAAX,CAAsBvzB,GAAtB,EACQ;AAAAwR,cAAM,GAAN;AACA1b,cAAM;AADN,OADR,CCFN;ADNE,aAAA0Z,KAAA;AAWMjV,UAAAiV,KAAA;AACFhI,cAAQgI,KAAR,CAAcjV,EAAEi5B,KAAhB;ACCN,aDAMR,WAAWO,UAAX,CAAsBvzB,GAAtB,EACI;AAAAwR,cAAM,GAAN;AACA1b,cAAM;AAAE29B,kBAAQ,CAAC;AAACC,0BAAcn5B,EAAEo5B;AAAjB,WAAD;AAAV;AADN,OADJ,CCAN;AAUD;ADxBD;AC0BH,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BD,IAAAC,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAAC,6BAA2B,UAACC,MAAD,EAASC,YAAT,EAAuBC,oBAAvB;AAC1B,WAAOL,gBAAgBE,yBAAhB,CAA0CI,KAA1C,CAAgD,IAAhD,EAAsD9/B,SAAtD,CAAP;AADD;AAEA+/B,2BAAyB,UAACJ,MAAD,EAAS5G,MAAT,EAAiBkG,MAAjB;AACxB,WAAOO,gBAAgBO,uBAAhB,CAAwCD,KAAxC,CAA8C,IAA9C,EAAoD9/B,SAApD,CAAP;AAHD;AAAA,CADD,E;;;;;;;;;;;ACDA;;;;;;;AAOA,MAAM;AAAEw/B;AAAF,IAAsBhoB,OAAO,CAAC,mBAAD,CAAnC;;AACAhF,MAAM,CAACitB,OAAP,CAAe;AAEdO,mBAAiB,EAAE,UAAU1E,WAAV,EAAuB2E,UAAvB,EAAmCC,UAAnC,EAA+C;AACjE,WAAOV,eAAe,CAACQ,iBAAhB,CAAkCF,KAAlC,CAAwC,IAAxC,EAA8C9/B,SAA9C,CAAP;AACA;AAJa,CAAf,E;;;;;;;;;;;ACRA,MAAM;AAAEw/B;AAAF,IAAsBhoB,OAAO,CAAC,mBAAD,CAAnC;;AACAhF,MAAM,CAACitB,OAAP,CAAe;AAEdU,qBAAmB,EAAE,UAAUxZ,GAAV,EAAe;AACnC,WAAO6Y,eAAe,CAACW,mBAAhB,CAAoCL,KAApC,CAA0C,IAA1C,EAAgD9/B,SAAhD,CAAP;AACA,GAJa;AAMdogC,qBAAmB,EAAE,UAAUtR,OAAV,EAAmB;AACvC,WAAO0Q,eAAe,CAACY,mBAAhB,CAAoCN,KAApC,CAA0C,IAA1C,EAAgD9/B,SAAhD,CAAP;AACA;AARa,CAAf,E;;;;;;;;;;;ACDA;;;;;;;AAOA,MAAM;AAAEw/B;AAAF,IAAsBhoB,OAAO,CAAC,mBAAD,CAAnC;;AACAhF,MAAM,CAACitB,OAAP,CAAe;AACdY,OAAK,EAAE,UAAUvR,OAAV,EAAmBwR,WAAnB,EAAgClrB,WAAhC,EAA6C;AACnD,WAAOoqB,eAAe,CAACa,KAAhB,CAAsBP,KAAtB,CAA4B,IAA5B,EAAkC9/B,SAAlC,CAAP;AACA,GAHa;AAKdugC,SAAO,EAAE,UAAUzR,OAAV,EAAmB;AAC3B,WAAO0Q,eAAe,CAACe,OAAhB,CAAwBT,KAAxB,CAA8B,IAA9B,EAAoC9/B,SAApC,CAAP;AACA,GAPa;AASdwgC,WAAS,EAAE,UAAUb,MAAV,EAAkBvqB,WAAlB,EAA+BohB,SAA/B,EAA0CjJ,mBAA1C,EAA+D;AACzE,WAAOiS,eAAe,CAACgB,SAAhB,CAA0BV,KAA1B,CAAgC,IAAhC,EAAsC9/B,SAAtC,CAAP;AACA,GAXa;AAadygC,WAAS,EAAE,UAAU3a,UAAV,EAAsBiS,SAAtB,EAAiC;AAC3C,WAAOyH,eAAe,CAACiB,SAAhB,CAA0BX,KAA1B,CAAgC,IAAhC,EAAsC9/B,SAAtC,CAAP;AACA,GAfa;AAiBd0gC,iBAAe,EAAE,UAAUpF,WAAV,EAAuBqF,WAAvB,EAAoC;AACpD,WAAOnB,eAAe,CAACkB,eAAhB,CAAgCZ,KAAhC,CAAsC,IAAtC,EAA4C9/B,SAA5C,CAAP;AACA,GAnBa;AAqBd4gC,SAAO,EAAE,UAAUjB,MAAV,EAAkBvqB,WAAlB,EAA+BohB,SAA/B,EAA0CjJ,mBAA1C,EAA+D;AACvE,WAAOiS,eAAe,CAACoB,OAAhB,CAAwBd,KAAxB,CAA8B,IAA9B,EAAoC9/B,SAApC,CAAP;AACA;AAvBa,CAAf,E;;;;;;;;;;;ACRA;;;;;;;AAOA,MAAM;AAAEw/B;AAAF,IAAsBhoB,OAAO,CAAC,mBAAD,CAAnC;;AACAhF,MAAM,CAACitB,OAAP,CAAe;AACd;AACArF,kBAAgB,EAAE,UAAUkB,WAAV,EAAuBuF,QAAvB,EAAiCC,OAAjC,EAA0CC,2BAA1C,EAAuE3rB,WAAvE,EAAoF4rB,oBAApF,EAA0GC,aAA1G,EAAyHC,WAAzH,EAAsIC,OAAtI,EAA+IC,eAA/I,EAAgK;AACjL,QAAI,CAAC,KAAKzT,MAAV,EACC,MAAM,IAAInb,MAAM,CAACpE,KAAX,CAAiB,gBAAjB,CAAN;AAED;AACA,GAPa;AAUdizB,gBAAc,EAAE,UAAU/F,WAAV,EAAuBgG,QAAvB,EAAiCC,UAAjC,EAA6C;AAC5D,WAAO/B,eAAe,CAAC6B,cAAhB,CAA+BvB,KAA/B,CAAqC,IAArC,EAA2C9/B,SAA3C,CAAP;AACA,GAZa;AAcdwhC,kBAAgB,EAAE,UAAUlG,WAAV,EAAuBqF,WAAvB,EAAoC;AACrD,WAAOnB,eAAe,CAACgC,gBAAhB,CAAiC1B,KAAjC,CAAuC,IAAvC,EAA6C9/B,SAA7C,CAAP;AACA;AAhBa,CAAf,E;;;;;;;;;;;ACRA;;;;;;;AAOA,MAAM;AAAEw/B;AAAF,IAAsBhoB,OAAO,CAAC,mBAAD,CAAnC;;AACAhF,MAAM,CAACitB,OAAP,CAAe;AACXgC,sBAAoB,EAAE,UAAUC,OAAV,EAAmB;AACrC,WAAOlC,eAAe,CAACiC,oBAAhB,CAAqC3B,KAArC,CAA2C,IAA3C,EAAiD9/B,SAAjD,CAAP;AACH,GAHU;AAKX2hC,2BAAyB,EAAE,UAAUD,OAAV,EAAmB;AAC1C,WAAOlC,eAAe,CAACmC,yBAAhB,CAA0C7B,KAA1C,CAAgD,IAAhD,EAAsD9/B,SAAtD,CAAP;AACH,GAPU;AASX4hC,oBAAkB,EAAE,UAAUF,OAAV,EAAmBG,OAAnB,EAA4B1tB,SAA5B,EAAuC;AACvD,WAAOqrB,eAAe,CAACoC,kBAAhB,CAAmC9B,KAAnC,CAAyC,IAAzC,EAA+C9/B,SAA/C,CAAP;AACH,GAXU;AAaX8hC,sBAAoB,EAAE,UAAUJ,OAAV,EAAmB;AACrC,WAAOlC,eAAe,CAACsC,oBAAhB,CAAqChC,KAArC,CAA2C,IAA3C,EAAiD9/B,SAAjD,CAAP;AACH,GAfU;AAiBX+hC,6CAA2C,EAAE,UAAUC,OAAV,EAAmBC,YAAnB,EAAiC;AAC1E,WAAOzC,eAAe,CAACuC,2CAAhB,CAA4DjC,KAA5D,CAAkE,IAAlE,EAAwE9/B,SAAxE,CAAP;AACH;AAnBU,CAAf,E;;;;;;;;;;;;ACRA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAAyC,yBAAuB,UAACpc,UAAD,EAAa2W,OAAb,EAAsB1E,SAAtB;AACtB,WAAOyH,gBAAgB0C,qBAAhB,CAAsCpC,KAAtC,CAA4C,IAA5C,EAAkD9/B,SAAlD,CAAP;AADD;AAGAmiC,uBAAqB,UAACrc,UAAD,EAAa2W,OAAb,EAAsB1E,SAAtB,EAAiC3iB,WAAjC,EAA8CM,WAA9C;AACpB,WAAO8pB,gBAAgB2C,mBAAhB,CAAoCrC,KAApC,CAA0C,IAA1C,EAAgD9/B,SAAhD,CAAP;AAJD;AAMAoiC,uBAAqB,UAACtc,UAAD,EAAa2W,OAAb,EAAsB1E,SAAtB,EAAiC9I,eAAjC,EAAkD7Z,WAAlD,EAA+DitB,SAA/D,EAA0EC,eAA1E;AACpB,WAAO9C,gBAAgB4C,mBAAhB,CAAoCtC,KAApC,CAA0C,IAA1C,EAAgD9/B,SAAhD,CAAP;AAPD;AAUAuiC,oBAAkB,UAACC,IAAD,EAAOC,YAAP;AACjB,WAAOjD,gBAAgB+C,gBAAhB,CAAiCzC,KAAjC,CAAuC,IAAvC,EAA6C9/B,SAA7C,CAAP;AAXD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAAiD,mBAAiB,UAAC5T,OAAD,EAAUuE,MAAV;AAChB,WAAOmM,gBAAgBkD,eAAhB,CAAgC5C,KAAhC,CAAsC,IAAtC,EAA4C9/B,SAA5C,CAAP;AADD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAAkD,mBAAiB,UAACC,YAAD,EAAeC,YAAf,EAA6BC,eAA7B,EAA8CxH,WAA9C,EAA2DyH,YAA3D,EAAyEzB,QAAzE;AAChB,WAAO9B,gBAAgBmD,eAAhB,CAAgC7C,KAAhC,CAAsC,IAAtC,EAA4C9/B,SAA5C,CAAP;AADD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAAuD,6BAA2B,UAACC,SAAD,EAAY1sB,SAAZ,EAAuB2sB,MAAvB;AAC1B,WAAO1D,gBAAgBwD,yBAAhB,CAA0ClD,KAA1C,CAAgD,IAAhD,EAAsD9/B,SAAtD,CAAP;AADD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAmjC,KAAA,EAAA3D,eAAA;;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACF2D,QAAQ3rB,QAAQ,MAAR,CAAR;AAEAhF,OAAOitB,OAAP,CACC;AAAAjM,yBAAuB,UAACwO,OAAD,EAAUx5B,IAAV;AACtB,WAAOg3B,gBAAgBhM,qBAAhB,CAAsCsM,KAAtC,CAA4C,IAA5C,EAAkD9/B,SAAlD,CAAP;AADD;AAAA,CADD,E;;;;;;;;;;;;ACHA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAA2D,qBAAmB,UAACzD,MAAD,EAASn3B,IAAT;AAClB,WAAOg3B,gBAAgB4D,iBAAhB,CAAkCtD,KAAlC,CAAwC,IAAxC,EAA8C9/B,SAA9C,CAAP;AADD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAA4D,kBAAgB,UAAC1D,MAAD,EAAS2D,SAAT;AACf,WAAO9D,gBAAgB6D,cAAhB,CAA+BvD,KAA/B,CAAqC,IAArC,EAA2C9/B,SAA3C,CAAP;AADD;AAGAujC,2BAAyB,UAAC5D,MAAD,EAAS/c,iBAAT;AACxB,WAAO4c,gBAAgB+D,uBAAhB,CAAwCzD,KAAxC,CAA8C,IAA9C,EAAoD9/B,SAApD,CAAP;AAJD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAA+D,sBAAoB,UAAC9hC,IAAD;AACnB,WAAO89B,gBAAgBgE,kBAAhB,CAAmC1D,KAAnC,CAAyC,IAAzC,EAA+C9/B,SAA/C,CAAP;AADD;AAGAyjC,kBAAgB,UAAC/hC,IAAD;AACf,WAAO89B,gBAAgBiE,cAAhB,CAA+B3D,KAA/B,CAAqC,IAArC,EAA2C9/B,SAA3C,CAAP;AAJD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAAiE,cAAY,UAAC9tB,KAAD,EAAQ+tB,MAAR,EAAgB5/B,KAAhB;AAEX,WAAOy7B,gBAAgBkE,UAAhB,CAA2B5D,KAA3B,CAAiC,IAAjC,EAAuC9/B,SAAvC,CAAP;AAFD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAAmE,uBAAqB,UAACjE,MAAD;AACpB,WAAOH,gBAAgBoE,mBAAhB,CAAoC9D,KAApC,CAA0C,IAA1C,EAAgD9/B,SAAhD,CAAP;AADD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAA,yBAAuB,UAAC7pB,KAAD,EAAQiuB,UAAR,EAAoBC,OAApB;AACtB,WAAOtE,gBAAgBuE,mBAAhB,CAAoCjE,KAApC,CAA0C,IAA1C,EAAgD9/B,SAAhD,CAAP;AADD;AAGA,+BAA6B,UAAC4V,KAAD,EAAQiuB,UAAR,EAAoBC,OAApB;AAC5B,WAAOtE,gBAAgBwE,yBAAhB,CAA0ClE,KAA1C,CAAgD,IAAhD,EAAsD9/B,SAAtD,CAAP;AAJD;AAMA,qBAAmB,UAAC+1B,WAAD;AAClB,WAAOyJ,gBAAgByE,eAAhB,CAAgCnE,KAAhC,CAAsC,IAAtC,EAA4C9/B,SAA5C,CAAP;AAPD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAAyE,qBAAmB,UAACrmB,KAAD;AAClB,WAAO2hB,gBAAgB0E,iBAAhB,CAAkCpE,KAAlC,CAAwC,IAAxC,EAA8C9/B,SAA9C,CAAP;AADD;AAAA,CADD,E;;;;;;;;;;;;;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CAEC;AAAA0E,iBAAe,UAACC,KAAD,EAAQC,SAAR;AACd,WAAO7E,gBAAgB2E,aAAhB,CAA8BrE,KAA9B,CAAoC,IAApC,EAA0C9/B,SAA1C,CAAP;AADD;AAAA,CAFD,E;;;;;;;;;;;;ACDA,IAAAw/B,eAAA;AAAEA,kBAAoBhoB,QAAQ,mBAAR,EAAAgoB,eAApB;AACFhtB,OAAOitB,OAAP,CACC;AAAA6E,qBAAmB,UAACF,KAAD;AAClB,WAAO5E,gBAAgB8E,iBAAhB,CAAkCxE,KAAlC,CAAwC,IAAxC,EAA8C9/B,SAA9C,CAAP;AADD;AAAA,CADD,E;;;;;;;;;;;;ACDA,IAAAukC,OAAA,EAAAC,mBAAA;AAAAD,UAAU/sB,QAAQ,SAAR,CAAV;;AAEAgtB,sBAAsB,UAAC1F,GAAD,EAAMlzB,GAAN,EAAWmzB,IAAX,EAAiBh1B,OAAjB;AAErB,MAAA06B,cAAA,EAAAC,OAAA,EAAAC,iBAAA,EAAAC,OAAA,EAAAxpB,KAAA,EAAAypB,WAAA,EAAAviB,IAAA,EAAAvO,QAAA,EAAA+R,UAAA,EAAA3S,GAAA,EAAA8K,IAAA,EAAArI,KAAA,EAAAosB,OAAA,EAAA8C,cAAA,EAAA5wB,IAAA,EAAAyZ,MAAA;;AAAAzZ,SAAO2F,QAAQkrB,eAAR,CAAwBjG,GAAxB,EAA6BlzB,GAA7B,CAAP;;AAEA,MAAAkzB,OAAA,QAAA3rB,MAAA2rB,IAAA17B,KAAA,YAAA+P,IAAe6xB,YAAf,GAAe,MAAf,GAAe,MAAf;AACCrX,aAAS9T,QAAQorB,wBAAR,CAAiCnG,IAAI17B,KAAJ,CAAU4hC,YAA3C,CAAT;;AACA,QAAGrX,MAAH;AACCzZ,aAAO1B,OAAOypB,KAAP,CAAanpB,OAAb,CAAqB;AAACC,aAAK4a;AAAN,OAArB,CAAP;AAHF;ACQE;;ADHFqU,YAAUlD,IAAIoE,MAAJ,CAAWttB,KAArB;AAEAkQ,eAAagZ,IAAIoE,MAAJ,CAAW5H,WAAxB;AAEAvnB,aAAWnB,GAAGuhB,SAAH,CAAarhB,OAAb,CAAqB;AAACC,SAAK+S;AAAN,GAArB,CAAX;AAEAlQ,UAAQhD,GAAGsyB,MAAH,CAAUpyB,OAAV,CAAkB;AAACC,SAAKivB;AAAN,GAAlB,CAAR;AAEA6C,gBAAA,CAAA5mB,OAAA6gB,IAAA17B,KAAA,YAAA6a,KAAyB4mB,WAAzB,GAAyB,MAAzB;;AAEA,MAAG,CAAC96B,OAAJ;AACCA,cAAU;AAACwZ,iBAAW;AAAZ,KAAV;AADD;AAGCxZ,YAAQwZ,SAAR,GAAoB,IAApB;ACMC;;ADJF,MAAGshB,gBAAe,GAAlB;AACC,QAAG96B,OAAH;AACCA,cAAQwZ,SAAR,GAAoB,KAApB;AADD;AAGCxZ,gBAAU;AAACwZ,mBAAW;AAAZ,OAAV;AAJF;ACaE;;ADPF,MAAG,CAACxZ,QAAQ0Z,eAAZ;AACC1Z,YAAQ0Z,eAAR,GAA0B,IAA1B;ACSC;;ADPF,MAAG,CAAC7N,KAAJ;AACCgpB,eAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,YAAM,GAAN;AACA1b,YACC;AAAA,iBAAS,mCAAT;AACA,mBAAW;AADX;AAFD,KADD;AAKA;ACWC;;ADTF,MAAI,CAACqS,QAAL;AACC6qB,eAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,YAAM,GAAN;AACA1b,YACC;AAAA,iBAAS,sCAAT;AACA,mBAAW;AADX;AAFD,KADD;AAKA;ACaC;;ADXF,MAAG,CAACwS,IAAJ;AACC0qB,eAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,YAAM,GAAN;AACA1b,YACC;AAAA,iBAAS,oDAAT;AACA,mBAAW;AADX;AAFD,KADD;AAKA;ACeC;;ADbF,MAAGqS,SAAS6B,KAAT,KAAkBosB,OAArB;AACCpD,eAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,YAAM,GAAN;AACA1b,YACC;AAAA,iBAAS,+CAAT;AACA,mBAAW;AADX;AAFD,KADD;AAKA;ACiBC;;ADbFojC,mBAAiBlyB,GAAGuyB,WAAH,CAAeppB,IAAf,CAAoB;AAAE7H,UAAMA,KAAKnB,GAAb;AAAkB6C,WAAOosB;AAAzB,GAApB,EAAwD5N,KAAxD,EAAjB;;AAEA,MAAG0Q,mBAAkB,CAArB;AACC,QAAG,CAAClvB,KAAJ;AACCgpB,iBAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,cAAM,GAAN;AACA1b,cACC;AAAA,mBAAS,uCAAT;AACA,qBAAW;AADX;AAFD,OADD;AAKA;AAPF;AC2BE;;ADjBF+iC,mBAAiB7lB,gBAAgBwmB,sBAAhB,CAAuClxB,IAAvC,EAA6CH,QAA7C,CAAjB;;AAEA,MAAG,CAAC0wB,cAAD,IAAoB1wB,SAAS2C,wBAAhC;AACCiuB,wBAAoBnxB,EAAE6jB,KAAF,CAAQ,CAACtjB,SAAS2C,wBAAV,CAAR,EAA6C3C,SAASshB,yBAAT,IAAsC,EAAnF,CAApB;AAEAoP,qBAAiBjxB,EAAEuI,IAAF,CAAO4oB,iBAAP,EAA0B,UAACU,UAAD;AAC1C,UAAAC,WAAA;;AAAAA,oBAAc1yB,GAAGuhB,SAAH,CAAarhB,OAAb,CAAqB;AAACC,aAAIsyB;AAAL,OAArB,EAAuC;AAAC/yB,gBAAQ;AAACuO,kBAAQ;AAAT;AAAT,OAAvC,CAAd;AAEA,aAAOjC,gBAAgBwmB,sBAAhB,CAAuClxB,IAAvC,EAA6CoxB,WAA7C,CAAP;AAHgB,MAAjB;AC2BC;;ADtBF,MAAG,CAACb,cAAJ;AACCC,cAAU7qB,QAAQI,MAAR,CAAe/F,KAAKnB,GAApB,EAAyB,IAAzB,CAAV;AACAqI,YAAQI,QAAQC,EAAR,CAAW,4BAAX,EAAyC,EAAzC,EAA6CipB,OAA7C,CAAR;AACA94B,QAAI25B,OAAJ,GAAc,OAAd;AACA3G,eAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,YAAM,GAAN;AACA1b,YACC;AAAA,iBAAS0Z,KAAT;AACA,mBAAW;AADX;AAFD,KADD;AAKA;AC0BC;;ADxBFkH,SAAO7K,yBAAyBsK,eAAzB,CAAyC7N,IAAzC,EAA+C0B,KAA/C,EAAsD7B,QAAtD,EAAgEhK,OAAhE,CAAP;AACA66B,YAAU,IAAIY,MAAJ,CAAWljB,IAAX,CAAV;AACA1W,MAAI65B,SAAJ,CAAc,cAAd,EAA8B,0BAA9B;AACA75B,MAAI65B,SAAJ,CAAc,gBAAd,EAAgCb,QAAQ3kC,MAAxC;AACA2L,MAAI65B,SAAJ,CAAc,eAAd,EAA+B,cAAWb,QAAQ3kC,MAAR,GAAiB,CAA5B,IAA8B,GAA9B,GAAiC2kC,QAAQ3kC,MAAxE;AACA2L,MAAI85B,UAAJ,GAAiB,GAAjB;AC0BC,SDzBD95B,IAAI5H,GAAJ,CAAQse,IAAR,CCyBC;ADnIoB,CAAtB;;AA4GAsc,WAAWC,GAAX,CAAe,KAAf,EAAsB,mDAAtB,EAA2E2F,mBAA3E;AAEA5F,WAAWC,GAAX,CAAe,KAAf,EAAsB,kEAAtB,EAA0F,UAACC,GAAD,EAAMlzB,GAAN,EAAWmzB,IAAX;AACzF,MAAAh1B,OAAA;AAAA6B,MAAI65B,SAAJ,CAAc,cAAd,EAA8B,0BAA9B;AACA75B,MAAI65B,SAAJ,CAAc,qBAAd,EAAqC,yBAAuBtqB,UAAU2jB,IAAIoE,MAAJ,CAAWrtB,aAArB,CAA5D;AACAjK,MAAI65B,SAAJ,CAAc,mBAAd,EAAmC,EAAnC;AAEA17B,YAAU;AAACoE,cAAU;AAAX,GAAV;AAEA,SAAOq2B,oBAAoB1F,GAApB,EAAyBlzB,GAAzB,EAA8BmzB,IAA9B,EAAoCh1B,OAApC,CAAP;AAPD,G,CAQA;;;;;AAKA60B,WAAWC,GAAX,CAAe,KAAf,EAAsB,yBAAtB,EAAiD,UAACC,GAAD,EAAMlzB,GAAN,EAAWmzB,IAAX;AAEhD,MAAA7rB,CAAA,EAAAywB,MAAA,EAAAG,OAAA,EAAAjmB,KAAA,EAAAjc,CAAA,EAAAuyB,SAAA,EAAA/wB,KAAA,EAAA+P,GAAA,EAAA8K,IAAA,EAAAwQ,IAAA,EAAAC,IAAA,EAAAiX,cAAA,EAAA3D,OAAA,EAAA4D,SAAA,EAAAC,sBAAA,EAAAC,UAAA,EAAAjE,OAAA;;AAAA,MAAG,CAAChoB,QAAQksB,sBAAR,CAA+BjH,GAA/B,EAAoClzB,GAApC,CAAJ;AACC;ACgCC;;AD9BFi2B,YAAU/C,IAAInR,MAAd;AAEAqU,YAAUlD,IAAIkH,OAAJ,CAAY,YAAZ,CAAV;;AAEA,MAAG,CAAIhE,OAAP;AACCpD,eAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,YAAM,GAAN;AACA1b,YACC;AAAA,iBAAS,wCAAT;AACA,mBAAW;AADX;AAFD,KADD;AAKA;ACgCC;;AD9BFiiC,WAAA,CAAAxwB,MAAA2rB,IAAA17B,KAAA,YAAA+P,IAAoBwwB,MAApB,GAAoB,MAApB;;AAEA,MAAG,CAACA,MAAJ;AACC/E,eAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,YAAM,GAAN;AACA1b,YACC;AAAA,iBAAS,oCAAT;AACA,mBAAW;AADX;AAFD,KADD;AAKA;ACiCC;;AD/BF0B,UAAQ,EAAR;AAEAuiC,mBAAiB,IAAIjxB,IAAJ,GAAWkb,OAAX,EAAjB;AAEAkU,YAAUH,OAAO78B,KAAP,CAAa,GAAb,CAAV;AAGA+W,UAAQjL,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAAChJ,SAAK;AAACuiB,WAAKwO;AAAN;AAAN,GAAd,EAAqCvN,KAArC,EAAR;AAEA30B,MAAI,CAAJ;;AACA,SAAMA,IAAIic,MAAM5d,MAAhB;AACCiT,QAAI2K,MAAMjc,CAAN,CAAJ;AACAgkC,gBAAYhzB,GAAGuyB,WAAH,CAAeryB,OAAf,CAAuB;AAAC8C,aAAO1C,EAAE0C,KAAV;AAAiB1B,YAAM2tB;AAAvB,KAAvB,CAAZ;;AACA,QAAG,CAAC+D,SAAJ;AACChH,iBAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,cAAM,GAAN;AACA1b,cACC;AAAA,mBAAS,gDAA8CwR,EAAEH,GAAzD;AACA,qBAAW;AADX;AAFD,OADD;AAKA;AAND,YC6CG;;ADnCH,QAAG,CAAC8G,QAAQosB,YAAR,CAAqBjE,OAArB,EAA8BH,OAA9B,CAAJ;AACCgE,+BAAyBjzB,GAAGszB,aAAH,CAAiBnqB,IAAjB,CAAsB;AAC9ChJ,aAAK;AACJuiB,eAAKsQ,UAAUM;AADX;AADyC,OAAtB,EAItB3P,KAJsB,EAAzB;;AAMA,UAAG,CAAC3X,gBAAgBunB,UAAhB,CAA2BjzB,CAA3B,EAA8B0yB,SAA9B,EAAyCC,sBAAzC,CAAD,IAAqE,CAACjnB,gBAAgBwnB,QAAhB,CAAyBlzB,CAAzB,EAA4B0yB,SAA5B,EAAuCC,sBAAvC,CAAzE;AACCjH,mBAAWO,UAAX,CAAsBvzB,GAAtB,EACC;AAAAwR,gBAAM,GAAN;AACA1b,gBACC;AAAA,qBAAS,gDAA8CwR,EAAEH,GAAzD;AACA,uBAAW;AADX;AAFD,SADD;AAKA;AAbF;ACoDG;;ADtCHnR;AA3BD;;AA8BAwB,QAAMgT,IAAN,GAAa;AAACkf,SAAKwO;AAAN,GAAb;AAEA1gC,QAAMwS,KAAN,GAAcosB,OAAd;;AAEA,OAAA/jB,OAAA6gB,IAAA17B,KAAA,YAAA6a,KAAc6nB,UAAd,GAAc,MAAd;AACCA,iBAAa,IAAIpxB,IAAJ,CAASQ,OAAO4pB,IAAI17B,KAAJ,CAAU0iC,UAAjB,CAAT,CAAb;AACA1iC,UAAMiS,QAAN,GAAiB;AAACgxB,WAAKP;AAAN,KAAjB;ACyCC;;ADvCF,OAAArX,OAAAqQ,IAAA17B,KAAA,YAAAqrB,KAAcjL,cAAd,GAAc,MAAd;AACCpgB,UAAMogB,cAAN,GAAuB;AAAC8R,WAAMwJ,IAAI17B,KAAJ,CAAUogB,cAAV,CAAyB1c,KAAzB,CAA+B,GAA/B;AAAP,KAAvB;AADD;AAGC1D,UAAMogB,cAAN,GAAuB;AAAC8iB,YAAM,CAAC,YAAD,EAAe,UAAf;AAAP,KAAvB;AC6CC;;AD3CF,OAAA5X,OAAAoQ,IAAA17B,KAAA,YAAAsrB,KAAczP,KAAd,GAAc,MAAd;AACC7b,UAAM6b,KAAN,GAAc;AAACqW,WAAKwJ,IAAI17B,KAAJ,CAAU6b,KAAV,CAAgBnY,KAAhB,CAAsB,GAAtB;AAAN,KAAd;AADD;AAGC1D,UAAM6b,KAAN,GAAc,WAAd;AC+CC;;AD5CFkV,cAAYvhB,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB3Y,KAAlB,EAAyB;AAACkP,YAAQ;AAACi0B,kBAAY,CAAb;AAAgBC,gBAAU,CAA1B;AAA6BC,oBAAc,CAA3C;AAA8C5lB,cAAQ,CAAtD;AAAyDwV,mBAAa;AAAtE,KAAT;AAAmFqQ,UAAM,CAAzF;AAA4FC,WAAO;AAAnG,GAAzB,EAAkIpQ,KAAlI,EAAZ;AACApC,YAAUlhB,OAAV,CAAkB,UAACc,QAAD;AAEjB,QAAAsiB,WAAA;AAAAA,kBAAcnC,IAAIC,SAAJ,CAAcpY,IAAd,CAAmB;AAAC,2BAAqBhI,SAAShB,GAA/B;AAAmC,0BAAoB,IAAvD;AAA6D,6BAAuB;AAACoiB,aAAK;AAAN;AAApF,KAAnB,EAAqH;AAAC7iB,cAAQ;AAACs0B,gBAAQ;AAAT;AAAT,KAArH,EAA4IrQ,KAA5I,EAAd;ACkEE,WDhEFxiB,SAASsiB,WAAT,GAAuBA,WCgErB;ADpEH;AAOAuI,aAAWO,UAAX,CAAsBvzB,GAAtB,EACE;AAAAwR,UAAM,GAAN;AACA1b,UACC;AAAA,gBAAU,SAAV;AACA,oBAAcikC,cADd;AAEA,cAAQxR;AAFR;AAFD,GADF;AA9FD,G;;;;;;;;;;;;AE5HAyK,WAAWC,GAAX,CAAe,KAAf,EAAsB,cAAtB,EAAsC,UAACC,GAAD,EAAMlzB,GAAN,EAAWmzB,IAAX;AACrC,MAAA8H,MAAA,EAAA7kB,UAAA;AAAApW,MAAI65B,SAAJ,CAAc,cAAd,EAA8B,UAA9B;AACAoB,WAASC,OAAOC,oBAAP,EAAT;AAEA/kB,eAAa,EAAb;AAEA6kB,SAAO5zB,OAAP,CAAe,UAAC+zB,GAAD;AACd,QAAA7kB,OAAA,EAAA8kB,OAAA;;AAAA,QAAGC,0BAA0BC,oBAA7B;AACCF,gBAAUC,0BAA0BE,QAApC;;AACA,UAAGH,QAAQI,QAAR,CAAiB,GAAjB,CAAH;AACCllB,kBAAU8kB,QAAQjmC,OAAR,CAAgBkmC,0BAA0BC,oBAA1B,GAAiD,GAAjE,EAAsE,EAAtE,IAA4EH,IAAInnC,GAA1F;AADD;AAGCsiB,kBAAU8kB,QAAQjmC,OAAR,CAAgBkmC,0BAA0BC,oBAA1C,EAAgE,EAAhE,IAAsEH,IAAInnC,GAApF;AALF;AAAA;AAOCsiB,gBAAU3P,OAAOsH,WAAP,CAAmBktB,IAAInnC,GAAvB,CAAV;ACCE;;AACD,WDDFmiB,cAAc,iBAAeG,OAAf,GAAuB,ICCnC;ADVH;AAWAvW,MAAI85B,UAAJ,GAAiB,GAAjB;ACEC,SDDD95B,IAAI5H,GAAJ,CAAQge,UAAR,CCCC;ADnBF,G;;;;;;;;;;;;AEDA4c,WAAWC,GAAX,CAAe,KAAf,EAAsB,6CAAtB,EAAqE,UAACC,GAAD,EAAMlzB,GAAN,EAAWmzB,IAAX;AACpE,MAAA6F,OAAA,EAAAxuB,IAAA,EAAAutB,MAAA,EAAAzxB,IAAA,EAAAoQ,IAAA,EAAAvO,QAAA,EAAAhK,OAAA,EAAA6L,KAAA,EAAAosB,OAAA,EAAA9tB,IAAA,EAAA2tB,OAAA;;AAAA,MAAG,CAAChoB,QAAQksB,sBAAR,CAA+BjH,GAA/B,EAAoClzB,GAApC,CAAJ;AACC;ACEC;;ADAFi2B,YAAU/C,IAAInR,MAAd;AAEAzZ,SAAOtB,GAAGqpB,KAAH,CAASnpB,OAAT,CAAiB;AAAEC,SAAK8uB;AAAP,GAAjB,CAAP;AAEAG,YAAUlD,IAAIoE,MAAJ,CAAWttB,KAArB;AAEA+tB,WAAS7E,IAAIoE,MAAJ,CAAW9sB,IAApB;AAEAR,UAAQhD,GAAGsyB,MAAH,CAAUpyB,OAAV,CAAkB;AAAEC,SAAKivB;AAAP,GAAlB,CAAR;AAEA5rB,SAAOxD,GAAGiL,KAAH,CAAS/K,OAAT,CAAiB;AAAEC,SAAK4wB;AAAP,GAAjB,EAAkC;AAAErxB,YAAQ;AAAE9J,YAAM,CAAR;AAAW,qBAAe,CAA1B;AAA6B0J,YAAM;AAAnC;AAAV,GAAlC,CAAP;AAEAA,SAAOU,GAAGC,KAAH,CAASC,OAAT,CAAiB;AAAEC,SAAKqD,KAAKlE;AAAZ,GAAjB,EAAqC;AAAEI,YAAQ;AAAE,qBAAe;AAAjB;AAAV,GAArC,CAAP;AAEAvI,YAAU;AACTwZ,eAAW,KADF;AAETE,qBAAiB,KAFR;AAGTrD,kBAAc,SAHL;AAITZ,cAAU,IAJD;AAKTyD,WAAO,MALE;AAMTtC,oBAAgB,kBANP;AAOTkD,aAAS,wMAKCzN,KAAK5N,IALN,GAKW;AAZX,GAAV;AA6BAuL,aAAW;AACVqC,UAAMA,KAAKrD,GADD;AAEV6K,kBAAcxH,KAAKoH,OAAL,CAAazK,GAFjB;AAGVb,UAAMA,KAAKa,GAHD;AAIVZ,kBAAcD,KAAKsL,OAAL,CAAazK,GAJjB;AAKV+B,YAAQ,EALE;AAMVtM,UAAM4N,KAAK5N,IAND;AAOVoN,WAAOosB;AAPG,GAAX;AAUA1f,SAAO7K,yBAAyBsK,eAAzB,CAAyC7N,IAAzC,EAA+C0B,KAA/C,EAAsD7B,QAAtD,EAAgEhK,OAAhE,CAAP;AAEA66B,YAAU,IAAIY,MAAJ,CAAWljB,IAAX,CAAV;AAEA1W,MAAI65B,SAAJ,CAAc,gBAAd,EAAgCb,QAAQ3kC,MAAxC;AAEA2L,MAAI65B,SAAJ,CAAc,eAAd,EAA+B,cAAWb,QAAQ3kC,MAAR,GAAiB,CAA5B,IAA8B,GAA9B,GAAiC2kC,QAAQ3kC,MAAxE;AAEA2L,MAAI85B,UAAJ,GAAiB,GAAjB;ACZC,SDcD95B,IAAI5H,GAAJ,CAAQse,IAAR,CCdC;ADrDF,G;;;;;;;;;;;AEAA/P,KAAK,CAAC7R,SAAN,CAAgBoqB,cAAhB,GAAiC,UAASwc,CAAT,EAAY9kC,CAAZ,EAAc;AAC3C,MAAI+kC,CAAC,GAAG,EAAR;AACA,OAAKt0B,OAAL,CAAa,UAASpL,CAAT,EAAW;AACpB,QAAI2/B,CAAC,GAAG3/B,CAAC,GAAEA,CAAC,CAACy/B,CAAD,CAAH,GAAO,IAAhB;AACA,QAAIz3B,CAAC,GAAG,KAAR;;AACA,QAAG23B,CAAC,YAAYj1B,KAAhB,EAAsB;AAClB1C,OAAC,GAAG23B,CAAC,CAACriB,QAAF,CAAW3iB,CAAX,CAAJ;AACH,KAFD,MAEK;AACDqN,OAAC,GAAIrN,CAAC,KAAKrC,SAAP,GAAmB,KAAnB,GAAyBqnC,CAAC,IAAEhlC,CAAhC;AACH;;AACD,QAAGqN,CAAH,EAAK;AACD03B,OAAC,CAAC9+B,IAAF,CAAOZ,CAAP;AACH;AACJ,GAXD;AAYA,SAAO0/B,CAAP;AACH,CAfD;;AAiBAh1B,KAAK,CAAC7R,SAAN,CAAgB4a,WAAhB,GAA8B,UAASmsB,CAAT,EAAW;AACrC,MAAIvoC,CAAC,GAAG,IAAIqT,KAAJ,EAAR;AACA,OAAKU,OAAL,CAAa,UAASpL,CAAT,EAAW;AACpB,QAAI2/B,CAAC,GAAG3/B,CAAC,GAAEA,CAAC,CAAC4/B,CAAD,CAAH,GAAO,IAAhB;AACAvoC,KAAC,CAACuJ,IAAF,CAAO++B,CAAP;AACH,GAHD;AAIA,SAAOtoC,CAAP;AACH,CAPD;;AASAqT,KAAK,CAAC7R,SAAN,CAAgBgnC,OAAhB,GAA0B,UAAStqB,IAAT,EAAc;AACpC,MAAIe,GAAG,GAAG,EAAV;;AACA,OAAI,IAAIvc,CAAC,GAAG,CAAZ,EAAgBA,CAAC,GAAG,KAAK3B,MAAzB,EAAkC2B,CAAC,EAAnC,EAAsC;AAClCuc,OAAG,CAAC1V,IAAJ,CAAS,KAAK7G,CAAL,EAAQwb,IAAR,CAAT;AACH;;AACD,SAAOe,GAAP;AACH,CAND;;AAQA5L,KAAK,CAAC7R,SAAN,CAAgBinC,IAAhB,GAAuB,YAAU;AAC7B,MAAIrhB,CAAC,GAAG,EAAR;AACA,OAAKrT,OAAL,CAAa,UAASsT,CAAT,EAAW;AACpB,QAAGD,CAAC,CAAC9e,OAAF,CAAU+e,CAAV,IAAe,CAAlB,EACI;AAACD,OAAC,CAACA,CAAC,CAACrmB,MAAH,CAAD,GAAcsmB,CAAd;AAAgB;AACxB,GAHD;AAIA,SAAOD,CAAP;AACH,CAPD;;AASAmC,YAAY,GAAG,EAAf;;AAGAA,YAAY,CAACmf,KAAb,GAAqB,UAASC,IAAT,EAAe97B,GAAf,EAAmB;AACpC,OAAI,IAAI/C,GAAR,IAAe+C,GAAf,EAAmB;AACf87B,QAAI,CAAC7+B,GAAD,CAAJ,GAAY+C,GAAG,CAAC/C,GAAD,CAAf;AACH;;AACD,SAAO6+B,IAAP;AACH,CALD;;AAQApf,YAAY,CAACqf,gBAAb,GAAgC,UAASpc,CAAT,EAAW;AAEvC,MAAGA,CAAC,YAAYnZ,KAAhB,EAAsB;AAClB,QAAI2B,IAAI,GAAG,EAAX;AAEAA,QAAI,CAAC1L,IAAL,GAAYkjB,CAAC,CAACpQ,WAAF,CAAc,MAAd,CAAZ;AACApH,QAAI,CAAC6zB,YAAL,GAAoB,EAApB;AACA7zB,QAAI,CAAC6zB,YAAL,CAAkBv/B,IAAlB,GAAyBkjB,CAAC,CAACpQ,WAAF,CAAc,cAAd,EAA8BA,WAA9B,CAA0C,MAA1C,CAAzB;AACApH,QAAI,CAAC6zB,YAAL,CAAkBxsB,QAAlB,GAA6BmQ,CAAC,CAACpQ,WAAF,CAAc,cAAd,EAA8BA,WAA9B,CAA0C,UAA1C,CAA7B;AAEApH,QAAI,CAAC8zB,EAAL,GAAUtc,CAAC,CAACpQ,WAAF,CAAc,IAAd,CAAV;AAEApH,QAAI,CAAC+zB,OAAL,GAAevc,CAAC,CAACpQ,WAAF,CAAc,SAAd,CAAf;AAENpH,QAAI,CAACg0B,MAAL,GAAcxc,CAAC,CAACpQ,WAAF,CAAc,QAAd,CAAd;AAEApH,QAAI,CAACi0B,UAAL,GAAkBzc,CAAC,CAACpQ,WAAF,CAAc,YAAd,CAAlB;AAEApH,QAAI,CAACk0B,QAAL,GAAgB1c,CAAC,CAACpQ,WAAF,CAAc,UAAd,CAAhB;AAEM,QAAI+sB,SAAS,GAAG3c,CAAC,CAACpQ,WAAF,CAAc,OAAd,CAAhB;AACA,QAAIgtB,KAAK,GAAG,IAAI/1B,KAAJ,EAAZ;AACA81B,aAAS,CAACp1B,OAAV,CAAkB,UAASrR,CAAT,EAAW;AACzB0mC,WAAK,GAAGA,KAAK,CAACn/B,MAAN,CAAavH,CAAb,CAAR;AACH,KAFD;AAGA0mC,SAAK,CAACX,IAAN;AACAzzB,QAAI,CAACo0B,KAAL,GAAaA,KAAb;AACA,WAAOp0B,IAAP;AACH,GA1BD,MA0BK;AACD,WAAOwX,CAAP;AACH;AACJ,CA/BD;;AAiCAjD,YAAY,CAAC8f,eAAb,GAA+B,UAAS3c,CAAT,EAAW;AAEtC,MAAGA,CAAC,YAAYrZ,KAAhB,EAAsB;AAClB,QAAIi2B,GAAG,GAAG,EAAV;AACNA,OAAG,CAAC7iB,EAAJ,GAASiG,CAAC,CAACtQ,WAAF,CAAc,KAAd,CAAT;AACMktB,OAAG,CAAChgC,IAAJ,GAAWojB,CAAC,CAACtQ,WAAF,CAAc,MAAd,CAAX;AACAktB,OAAG,CAACjtB,QAAJ,GAAeqQ,CAAC,CAACtQ,WAAF,CAAc,UAAd,CAAf;AAEA,WAAOktB,GAAP;AACH,GAPD,MAOK;AACD,WAAO5c,CAAP;AACH;AACJ,CAZD;AAgBA;;;;;;;AAKAnD,YAAY,CAACggB,mBAAb,GAAmC,UAASn2B,MAAT,EAAiBo2B,WAAjB,EAA8BC,QAA9B,EAAwC3yB,SAAxC,EAAmDgsB,OAAnD,EAA2D;AAC1F,MAAI4G,QAAQ,GAAG,EAAf,CAD0F,CAE1F;;AACA,MAAGt2B,MAAM,IAAIA,MAAM,CAACrS,MAAjB,IAA2ByoC,WAA9B,EAA2C;AACvC;AACAp2B,UAAM,CAACW,OAAP,CAAe,UAAS+G,KAAT,EAAe;AAC1B,UAAIjV,IAAI,GAAGiV,KAAK,CAACjV,IAAjB;;AACA,UAAGA,IAAH,EAAS;AACL,YAAGA,IAAI,KAAK,OAAZ,EAAqB;AACjB;;;;;;;AAOA,cAAI8jC,WAAW,GAAG7uB,KAAK,CAACsN,OAAxB;AAAA,cACIwhB,WAAW,GAAGJ,WAAW,CAAC1uB,KAAK,CAACoD,IAAP,CAD7B;AAAA,cAEI2rB,kBAAkB,GAAG,EAFzB;AAAA,cAGIC,aAAa,GAAG,EAHpB,CARiB,CAYjB;;AACA,cAAGH,WAAW,IAAIA,WAAW,CAAC5oC,MAA3B,IAAqC6oC,WAArC,IAAoDA,WAAW,YAAYv2B,KAA9E,EAAqF;AACjFu2B,uBAAW,CAAC71B,OAAZ,CAAoB,UAAS4U,UAAT,EAAoB;AACpCkhB,gCAAkB,CAACtgC,IAAnB,CAAwBggB,YAAY,CAACggB,mBAAb,CAAiCI,WAAjC,EAA8ChhB,UAA9C,CAAxB;AACH,aAFD,EAEG,IAFH,EADiF,CAIjF;;AACAghB,uBAAW,CAAC51B,OAAZ,CAAoB,UAASg2B,UAAT,EAAoB;AACpCD,2BAAa,CAACC,UAAU,CAAC7rB,IAAZ,CAAb,GAAiC2rB,kBAAkB,CAACrB,OAAnB,CAA2BuB,UAAU,CAAC7rB,IAAtC,CAAjC;AACH,aAFD;AAGAwrB,oBAAQ,GAAGngB,YAAY,CAACmf,KAAb,CAAmBgB,QAAnB,EAA6BI,aAA7B,CAAX;AACH;AACJ,SAvBD,MAuBO,IAAIjkC,IAAI,IAAI,MAAZ,EAAmB;AACtB6jC,kBAAQ,CAAC5uB,KAAK,CAACoD,IAAP,CAAR,GAAuBqL,YAAY,CAACqf,gBAAb,CAA8BlpB,eAAe,CAACsqB,qBAAhB,CAAsClH,OAAtC,EAA+C0G,WAAW,CAAC1uB,KAAK,CAACoD,IAAP,CAA1D,CAA9B,CAAvB;AAEH,SAHM,MAGA,IAAIrY,IAAI,IAAI,OAAZ,EAAoB;AACvB6jC,kBAAQ,CAAC5uB,KAAK,CAACoD,IAAP,CAAR,GAAuBqL,YAAY,CAAC8f,eAAb,CAA6B3pB,eAAe,CAACuqB,oBAAhB,CAAqCT,WAAW,CAAC1uB,KAAK,CAACoD,IAAP,CAAhD,CAA7B,CAAvB;AAEH,SAHM,MAGA,IAAIrY,IAAI,IAAI,OAAZ,EAAoB;AACtC6jC,kBAAQ,CAAC5uB,KAAK,CAACoD,IAAP,CAAR,GAAuBsrB,WAAW,CAAC1uB,KAAK,CAACoD,IAAP,CAAX,IAA2B,EAAlD;AAEA,SAHkB,MAGZ;AACS;AACAwrB,kBAAQ,CAAC5uB,KAAK,CAACoD,IAAP,CAAR,GAAuBsrB,WAAW,CAAC1uB,KAAK,CAACoD,IAAP,CAAlC;AACH;AACJ;AACJ,KAxCD,EAwCG,IAxCH;AAyCH,GA9CyF,CA+C1F;;;AACAwrB,UAAQ,CAAC,UAAD,CAAR,GAAuBhqB,eAAe,CAACwqB,oBAAhB,CAAqCpH,OAArC,EAA8C2G,QAA9C,CAAvB,CAhD0F,CAiD1F;;AACAC,UAAQ,CAAC,WAAD,CAAR,GAAwBhqB,eAAe,CAACwqB,oBAAhB,CAAqCpH,OAArC,EAA8ChsB,SAA9C,CAAxB;AAEA,SAAO4yB,QAAP;AACH,CArDD,C;;;;;;;;;;;;AC5GAp2B,OAAO62B,OAAP,CAAe,YAAf,EAA6B,UAACrH,OAAD;AAC5BsH,QAAMtH,OAAN,EAAe7gC,MAAf;;AAEA,OAAO,KAAKwsB,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACAC;;ADEF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACAC;;ADGF,SAAO32B,GAAG42B,UAAH,CAAcztB,IAAd,CAAmB;AAAEnG,WAAOosB;AAAT,GAAnB,EAAuC;AAAE1vB,YAAQ;AAAE9J,YAAM,CAAR;AAAWoN,aAAO,CAAlB;AAAqBqyB,eAAS,CAA9B;AAAiCwB,WAAK;AAAtC;AAAV,GAAvC,CAAP;AAVD,G;;;;;;;;;;;;AECAj3B,OAAO62B,OAAP,CAAe,eAAf,EAAgC,UAACtT,WAAD;AAC/BuT,QAAMvT,WAAN,EAAmBxjB,KAAnB;;AAEA,OAAO,KAAKob,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACDC;;ADGF,OAAOxT,WAAP;AACE,WAAO,KAAKwT,KAAL,EAAP;ACDA;;ADGF,SAAOrV,IAAIC,SAAJ,CAAcpY,IAAd,CAAmB;AAAC,yBAAqB;AAACuZ,WAAKS;AAAN,KAAtB;AAA2CO,SAAK,CAAC;AAAC,6BAAuB;AAACnB,aAAK;AAAN;AAAxB,KAAD,EAAsC;AAAC,6BAAuB,IAAxB;AAA8B,wBAAkB,KAAKxH;AAArD,KAAtC;AAAhD,GAAnB,CAAP;AATD,G;;;;;;;;;;;;AECAnb,OAAO62B,OAAP,CAAe,gBAAf,EAAiC,UAACrH,OAAD;AAEhC,OAAO,KAAKrU,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACFC;;ADIF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACFC;;ADIF,SAAO32B,GAAG82B,cAAH,CAAkB3tB,IAAlB,CAAuB;AAACnG,WAAOosB;AAAR,GAAvB,EAAyC;AAAC1vB,YAAQ;AAACq3B,YAAK,CAAN;AAAS1N,aAAO,CAAhB;AAAmBuM,WAAK;AAAxB;AAAT,GAAzC,CAAP;AARD,G;;;;;;;;;;;;AEFAh2B,OAAOo3B,gBAAP,CAAwB,wBAAxB,EAAkD,UAACC,SAAD,EAAYrL,GAAZ,EAAiBlsB,MAAjB;AACjDg3B,QAAMO,SAAN,EAAiB1oC,MAAjB;AACAmoC,QAAM9K,GAAN,EAAWjsB,KAAX;AACA+2B,QAAMh3B,MAAN,EAAcw3B,MAAMC,QAAN,CAAenpC,MAAf,CAAd;;AAEA,OAAO,KAAK+sB,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACAC;;ADEF,OAAKS,OAAL;ACAC,SDED;AAAAjuB,UAAM;AACL,WAAKiuB,OAAL;ACAI,aDCJp3B,GAAG82B,cAAH,CAAkB3tB,IAAlB,CAAuB;AAAChJ,aAAK;AAACuiB,eAAKkJ;AAAN;AAAN,OAAvB,EAA0C;AAAAlsB,gBAAQA;AAAR,OAA1C,CCDI;ADDL;AAIA23B,cAAU,CACT;AACCluB,YAAM,UAACqsB,QAAD;AACL,aAAC4B,OAAD;ACMM,eDJNp3B,GAAGs3B,UAAH,CAAcnuB,IAAd,CAAmB;AAAEhJ,eAAKq1B,SAASuB;AAAhB,SAAnB,EAA2C;AAAAr3B,kBAAQ;AAAA9J,kBAAM;AAAN;AAAR,SAA3C,CCIM;ADRR;AAAA,KADS,EAOT;AACCuT,YAAM,UAACqsB,QAAD;AACL,aAAC4B,OAAD;ACWM,eDTNp3B,GAAGszB,aAAH,CAAiBnqB,IAAjB,CAAsB;AAAEhJ,eAAKq1B,SAASI;AAAhB,SAAtB,EAA6C;AAAAl2B,kBAAQ;AAAAiJ,sBAAU;AAAV;AAAR,SAA7C,CCSM;ADbR;AAAA,KAPS,EAaT;AACCQ,YAAM,UAACqsB,QAAD;AACL,aAAC4B,OAAD;ACgBM,eDdNp3B,GAAGuyB,WAAH,CAAeppB,IAAf,CAAoB;AACnBnG,iBAAOwyB,SAASxyB,KADG;AAEnB1B,gBAAM;AAAAohB,iBAAK8S,SAASnM;AAAd;AAFa,SAApB,EAGG;AAAA3pB,kBACF;AAAAsD,mBAAO,CAAP;AACA1B,kBAAM,CADN;AAEA1L,kBAAM;AAFN;AADE,SAHH,CCcM;ADlBR;AAAA,KAbS;AAJV,GCFC;ADRF,G;;;;;;;;;;;;AEECgK,OAAO62B,OAAP,CAAe,YAAf,EAA6B,UAACrH,OAAD;AAE5B,OAAO,KAAKrU,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACFA;;ADID,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACFA;;ADKD,SAAO32B,GAAGs3B,UAAH,CAAcnuB,IAAd,CAAmB;AAACnG,WAAOosB;AAAR,GAAnB,EAAqC;AAAC1vB,YAAQ;AAAC9J,YAAK;AAAN;AAAT,GAArC,CAAP;AATD,G;;;;;;;;;;;;AEFDgK,OAAO62B,OAAP,CAAe,OAAf,EAAwB,UAACrH,OAAD;AACvB,OAAO,KAAKrU,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACCC;;ADCF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACCC;;ADEF,MAAG32B,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAACnG,WAAOosB;AAAR,GAAd,EAAgC5N,KAAhC,OAA2C,CAA9C;AACCxhB,OAAGsyB,MAAH,CAAUiF,yBAAV,CAAoCnI,OAApC;ACEC;;ADAF,SAAOpvB,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAACnG,WAAOosB;AAAR,GAAd,EAAgC;AACtC1vB,YAAQ;AACP9J,YAAM,CADC;AAEP0J,YAAM,CAFC;AAGP+M,aAAO,CAHA;AAIPmrB,aAAO,CAJA;AAKPx0B,aAAO,CALA;AAMPy0B,kBAAY,CANL;AAOPpC,eAAS,CAPF;AAQPqC,iCAA2B,CARpB;AASPC,0BAAoB,CATb;AAUPC,uBAAiB;AAVV;AAD8B,GAAhC,CAAP;AAXD;AA0BAh4B,OAAO62B,OAAP,CAAe,eAAf,EAAgC,UAACrH,OAAD,EAAU2B,MAAV;AAC/B,OAAO,KAAKhW,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACKC;;ADHF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACKC;;ADHF,OAAO5F,MAAP;AACC,WAAO,KAAK4F,KAAL,EAAP;ACKC;;ADHF,SAAO32B,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAAChJ,SAAK4wB,MAAN;AAAc/tB,WAAOosB;AAArB,GAAd,EAA6C;AACnD1vB,YAAQ;AACP9J,YAAM,CADC;AAEP0J,YAAM,CAFC;AAGP+M,aAAO,CAHA;AAIPmrB,aAAO,CAJA;AAKPx0B,aAAO,CALA;AAMPy0B,kBAAY,CANL;AAOPpC,eAAS,CAPF;AAQPqC,iCAA2B,CARpB;AASPC,0BAAoB,CATb;AAUPC,uBAAiB;AAVV;AAD2C,GAA7C,CAAP;AAVD;AA0BAh4B,OAAO62B,OAAP,CAAe,cAAf,EAA+B,UAACrH,OAAD,EAAU2B,MAAV,EAAkB8G,SAAlB;AAC9B,MAAA9sB,cAAA,EAAA+sB,MAAA,EAAAC,IAAA;;AAAA,OAAO,KAAKhd,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACSC;;ADPF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACSC;;ADPF,OAAO5F,MAAP;AACC,WAAO,KAAK4F,KAAL,EAAP;ACSC;;ADPF,OAAOkB,SAAP;AACC,WAAO,KAAKlB,KAAL,EAAP;ACSC;;ADNFoB,SAAO,IAAP;;AAEAhtB,mBAAiB,UAACgI,EAAD,EAAM8kB,SAAN;AAChB,QAAAr0B,IAAA,EAAAwH,YAAA;AAAAxH,WAAOxD,GAAGiL,KAAH,CAAS/K,OAAT,CAAiB;AAACC,WAAM4S;AAAP,KAAjB,CAAP;;AACA,QAAGvP,IAAH;AACCwH,qBAAexH,KAAKoH,OAApB;AACAI,mBAAagtB,MAAb,GAAsB,IAAtB;;AAEA,UAAGhtB,aAAa7K,GAAb,KAAoB03B,SAAvB;AACC7sB,uBAAexH,KAAKsH,QAAL,CAAcL,gBAAd,CAA+B,KAA/B,EAAsCotB,SAAtC,CAAf;AACA7sB,qBAAagtB,MAAb,GAAsB,KAAtB;ACSG;;ADPJ,aAAOhtB,YAAP;ACSE;ADnBa,GAAjB;;AAWA8sB,WAAS93B,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAAChJ,SAAK4wB;AAAN,GAAd,EAA6B;AAACrxB,YAAQ;AAACS,WAAK,CAAN;AAAS,0BAAoB;AAA7B;AAAT,GAA7B,EAAwE83B,cAAxE,CAAuF;AAC/FC,aAAS,UAACnlB,EAAD;ACkBL,aDjBHglB,KAAKG,OAAL,CAAa,eAAb,EAA8BL,SAA9B,EAAyC9sB,eAAegI,EAAf,EAAmB8kB,SAAnB,CAAzC,CCiBG;ADnB2F;AAAA,GAAvF,CAAT;AAMAE,OAAKI,KAAL,CAAW,eAAX,EAA4BN,SAA5B,EAAuC9sB,eAAegmB,MAAf,EAAuB8G,SAAvB,CAAvC;AACAE,OAAKpB,KAAL;ACiBC,SDhBDoB,KAAKK,MAAL,CAAY;ACiBT,WDhBFN,OAAOO,IAAP,ECgBE;ADjBH,ICgBC;ADnDF;AAsCAz4B,OAAO62B,OAAP,CAAe,2BAAf,EAA4C,UAAC6B,QAAD;AAC3C,OAAO,KAAKvd,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACmBC;;ADjBF,OAAO2B,QAAP;AACC,WAAO,KAAK3B,KAAL,EAAP;ACmBC;;ADjBF,SAAO32B,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAAChJ,SAAK;AAACuiB,WAAK4V;AAAN;AAAN,GAAd,EAAsC;AAC5C54B,YAAQ;AACP9J,YAAM,CADC;AAEP0J,YAAM,CAFC;AAGP+M,aAAO,CAHA;AAIPmrB,aAAO,CAJA;AAKPx0B,aAAO,CALA;AAMP00B,iCAA2B,CANpB;AAOPC,0BAAoB,CAPb;AAQPY,mCAA6B,CARtB;AASPd,kBAAY,CATL;AAUPG,uBAAiB;AAVV;AADoC,GAAtC,CAAP;AAPD;AAsBAh4B,OAAO62B,OAAP,CAAe,MAAf,EAAuB,UAACrH,OAAD,EAAU2B,MAAV;AACtB,OAAO,KAAKhW,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACwBC;;ADtBF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACwBC;;ADtBF,OAAO5F,MAAP;AACC,WAAO,KAAK4F,KAAL,EAAP;ACwBC;;ADrBF,SAAO32B,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAAChJ,SAAK4wB,MAAN;AAAc/tB,WAAOosB;AAArB,GAAd,EAA6C;AACnD1vB,YAAQ;AACPsU,sBAAgB,CADT;AAEPC,yBAAmB,CAFZ;AAGP+F,cAAQ,CAHD;AAIP0d,iCAA2B,CAJpB;AAKPC,0BAAoB,CALb;AAMP5V,sCAAgC,CANzB;AAOPwW,mCAA6B,CAPtB;AAQPd,kBAAY,CARL;AASPe,yBAAmB,CATZ;AAUPZ,uBAAiB;AAVV;AAD2C,GAA7C,CAAP;AAXD;AAyBAh4B,OAAO62B,OAAP,CAAe,YAAf,EAA6B,UAACrH,OAAD,EAAU2B,MAAV;AAC5B,OAAO,KAAKhW,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;AC4BC;;AD1BF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;AC4BC;;AD1BF,OAAO5F,MAAP;AACC,WAAO,KAAK4F,KAAL,EAAP;AC4BC;;AD1BF,SAAOrV,IAAIgC,KAAJ,CAAUna,IAAV,CAAe;AAAE,sBAAkBimB,OAApB;AAA6B,4BAAwB,OAArD;AAA8D,0BAAsB2B;AAApF,GAAf,CAAP;AAVD;AAYAnxB,OAAOo3B,gBAAP,CAAwB,eAAxB,EAAyC,UAACC,SAAD,EAAYrL,GAAZ,EAAiBlsB,MAAjB;AACxCg3B,QAAMO,SAAN,EAAiB1oC,MAAjB;AACAmoC,QAAM9K,GAAN,EAAWjsB,KAAX;AACA+2B,QAAMh3B,MAAN,EAAcw3B,MAAMC,QAAN,CAAenpC,MAAf,CAAd;;AAEA,OAAO,KAAK+sB,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACgCC;;AD9BF,OAAKS,OAAL;ACgCC,SD9BD;AAAAjuB,UAAM;AACL,WAAKiuB,OAAL;ACgCI,aD/BJp3B,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAAChJ,aAAK;AAACuiB,eAAKkJ;AAAN;AAAN,OAAd,EAAiC;AAAAlsB,gBAAQA;AAAR,OAAjC,CC+BI;ADjCL;AAIA23B,cAAU,CACT;AACCluB,YAAM,UAAC3F,IAAD;AACL,aAAC4zB,OAAD;ACsCM,eDpCNp3B,GAAGuyB,WAAH,CAAeppB,IAAf,CAAoB;AACnBnG,iBAAOQ,KAAKR,KADO;AAEnB1B,gBAAMkC,KAAKoH,OAAL,CAAalI;AAFA,SAApB,EAGG;AAAAhD,kBACF;AAAAsD,mBAAO,CAAP;AACA1B,kBAAM,CADN;AAEA1L,kBAAM;AAFN;AADE,SAHH,CCoCM;ADxCR;AAAA,KADS,EAaT;AACCuT,YAAM,UAAC3F,IAAD;AACL,aAAC4zB,OAAD;ACwCM,eDtCNp3B,GAAGC,KAAH,CAASkJ,IAAT,CAAc;AACbnG,iBAAOQ,KAAKR,KADC;AAEb7C,eAAKqD,KAAKlE;AAFG,SAAd,EAGG;AAAAI,kBACF;AAAAsD,mBAAO,CAAP;AACA7C,iBAAK,CADL;AAEAvK,kBAAM,CAFN;AAGAsO,sBAAU;AAHV;AADE,SAHH,CCsCM;AD1CR;AAAA,KAbS,EA0BT;AACCiF,YAAM,UAAC3F,IAAD;AACL,aAAC4zB,OAAD;AC0CM,eDxCNp3B,GAAG42B,UAAH,CAAcztB,IAAd,CAAmB;AAClBnG,iBAAOQ,KAAKR;AADM,SAAnB,EAEG;AAAAtD,kBACF;AAAAsD,mBAAO,CAAP;AACA7C,iBAAK,CADL;AAEAvK,kBAAM;AAFN;AADE,SAFH,CCwCM;AD5CR;AAAA,KA1BS;AAJV,GC8BC;ADxCF,G;;;;;;;;;;;;AErJAgK,OAAO62B,OAAP,CAAe,OAAf,EAAwB,UAACrH,OAAD;AACvB,OAAO,KAAKrU,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACCC;;ADCF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACCC;;ADEF,SAAO32B,GAAGC,KAAH,CAASkJ,IAAT,CAAc;AAACnG,WAAOosB;AAAR,GAAd,EAAgC;AAAC1vB,YAAQ;AAAC9J,YAAM,CAAP;AAAUsO,gBAAU,CAApB;AAAuBmI,aAAO,CAA9B;AAAiC7J,mBAAa,CAA9C;AAAiDuL,sBAAgB,CAAjE;AAAoE0qB,mBAAa;AAAjF;AAAT,GAAhC,CAAP;AARD;AAUA74B,OAAO62B,OAAP,CAAe,eAAf,EAAgC,UAACrH,OAAD,EAAUje,MAAV;AAC/B,OAAO,KAAK4J,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACYC;;ADVF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACYC;;ADTF,SAAO32B,GAAGC,KAAH,CAASkJ,IAAT,CAAc;AAAChJ,SAAKgR,MAAN;AAAcnO,WAAOosB;AAArB,GAAd,EAA6C;AAAC1vB,YAAQ;AAAC9J,YAAM,CAAP;AAAUsO,gBAAU,CAApB;AAAuBmI,aAAO,CAA9B;AAAiC7J,mBAAa,CAA9C;AAAiDuL,sBAAgB,CAAjE;AAAoE0qB,mBAAa;AAAjF;AAAT,GAA7C,CAAP;AARD;AAWA74B,OAAO62B,OAAP,CAAe,cAAf,EAA+B,UAACrH,OAAD,EAAUje,MAAV,EAAkB0mB,SAAlB;AAC9B,MAAA93B,cAAA,EAAA+3B,MAAA,EAAAC,IAAA;;AAAA,OAAO,KAAKhd,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACwBC;;ADtBF,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACwBC;;ADtBF,OAAOxlB,MAAP;AACC,WAAO,KAAKwlB,KAAL,EAAP;ACwBC;;ADtBF,OAAOkB,SAAP;AACC,WAAO,KAAKlB,KAAL,EAAP;ACwBC;;ADrBFoB,SAAO,IAAP;;AAEAh4B,mBAAiB,UAACgT,EAAD,EAAM8kB,SAAN;AAChB,QAAAv4B,IAAA,EAAAC,YAAA;AAAAD,WAAOU,GAAGC,KAAH,CAASC,OAAT,CAAiB;AAACC,WAAM4S;AAAP,KAAjB,CAAP;;AACA,QAAG,CAACzT,IAAJ;AACC,aAAO,EAAP;ACyBE;;ADxBHC,mBAAeD,KAAKsL,OAApB;AACArL,iBAAay4B,MAAb,GAAsB,IAAtB;;AACA,QAAGz4B,aAAaY,GAAb,KAAoB03B,SAAvB;AACCt4B,qBAAeD,KAAKwL,QAAL,CAAcL,gBAAd,CAA+B,KAA/B,EAAsCotB,SAAtC,CAAf;AACAt4B,mBAAay4B,MAAb,GAAsB,KAAtB;AC0BE;;ADzBH,WAAOz4B,YAAP;AATgB,GAAjB;;AAWAu4B,WAAS93B,GAAGC,KAAH,CAASkJ,IAAT,CAAc;AAAChJ,SAAKgR;AAAN,GAAd,EAA6B;AAACzR,YAAQ;AAACS,WAAK,CAAN;AAAS,0BAAoB;AAA7B;AAAT,GAA7B,EAAwE83B,cAAxE,CAAuF;AAC/FC,aAAS,UAACnlB,EAAD;ACkCL,aDjCHglB,KAAKG,OAAL,CAAa,eAAb,EAA8BL,SAA9B,EAAyC93B,eAAegT,EAAf,EAAmB8kB,SAAnB,CAAzC,CCiCG;ADnC2F;AAAA,GAAvF,CAAT;AAKAE,OAAKI,KAAL,CAAW,eAAX,EAA4BN,SAA5B,EAAuC93B,eAAeoR,MAAf,EAAuB0mB,SAAvB,CAAvC;AACAE,OAAKpB,KAAL;ACkCC,SDjCDoB,KAAKK,MAAL,CAAY;ACkCT,WDjCFN,OAAOO,IAAP,ECiCE;ADlCH,ICiCC;ADnEF,G;;;;;;;;;;;;AErBAz4B,OAAO62B,OAAP,CAAe,eAAf,EAAgC,UAACvjB,UAAD,EAAaY,GAAb;AAC/B,MAAA4kB,eAAA,EAAAC,oBAAA,EAAAb,MAAA,EAAA32B,QAAA,EAAAy3B,iBAAA,EAAAC,iBAAA,EAAAC,UAAA,EAAAf,IAAA,EAAAgB,mBAAA,EAAAC,yBAAA;;AAAA,OAAO,KAAKje,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACEC;;ADAF,QAAQzjB,cAAclT,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB;AAAChJ,SAAK+S;AAAN,GAAlB,EAAqCsO,KAArC,EAAtB;AACC,WAAO,KAAKmV,KAAL,EAAP;ACIC;;ADFFoB,SAAO,IAAP;AAEAc,sBAAoB,CAAC,KAAD,EAAQ,aAAR,EAAuB,MAAvB,EAA+B,SAA/B,EAA0C,cAA1C,EAA0D,MAA1D,EAAkE,YAAlE,EAAgF,aAAhF,EACnB,SADmB,EACR,OADQ,EACC,aADD,EACgB,gBADhB,EACkC,WADlC,EAC+C,gBAD/C,EACiE,gBADjE,CAApB;AAGAE,wBAAsB,CAAC,cAAD,EAAiB,cAAjB,EAAiC,mBAAjC,EAAsD,wBAAtD,EAAgF,QAAhF,EAA0F,aAA1F,CAAtB;AAEAC,8BAA4B,EAA5B;AAEAJ,sBAAoB;AACnB,qBAAiB,CADE;AAInB,iDAA6C,CAJ1B;AAKnB,4CAAwC,CALrB;AAMnB,iCAA6B,CANV;AAQnB,gCAA4B,CART;AAUnB,gCAA4B,CAVT;AAWnB,mCAA+B,CAXZ;AAYnB,sCAAkC,CAZf;AAanB,mCAA+B,CAbZ;AAcnB,gCAA4B,CAdT;AAenB,mCAA+B,CAfZ;AAgBnB,gCAA4B,CAhBT;AAiBnB,uCAAmC,CAjBhB;AAkBnB,sCAAkC;AAlBf,GAApB;;AAqBAD,yBAAuB,UAAC1qB,MAAD;AACtB,QAAAgrB,kBAAA;AAAAA,yBAAqB,IAAIt5B,KAAJ,EAArB;;ACLE,QAAIsO,UAAU,IAAd,EAAoB;ADOtBA,aAAQ5N,OAAR,CAAgB,UAACe,KAAD;AACf,YAAAb,GAAA;ACLK,eAAOa,SAAS,IAAT,GAAgB,CAACb,MAAMa,MAAM4a,QAAb,KAA0B,IAA1B,GAAiCzb,IDK5CF,OCL4C,CDKpC,UAAC6b,OAAD;AACxB,cAAIA,QAAQ5a,IAAR,KAAgBy2B,KAAKhd,MAArB,IAA+BmB,QAAQ1a,OAAR,KAAmBu2B,KAAKhd,MAA3D;ACJQ,mBDQPke,mBAAmBpjC,IAAnB,CAAwBqmB,QAAQ3Z,SAAhC,CCRO;AACD;ADER,SCL6D,CAAjC,GDK5B,MCLY,GDKZ,MCLK;ADIN;ACEG;;ADMH,WAAO02B,kBAAP;AAXsB,GAAvB;;AAcAP,oBAAkB,UAACQ,WAAD;AACjB,QAAA/3B,QAAA,EAAAZ,GAAA,EAAA8K,IAAA,EAAAkd,sBAAA,EAAAta,MAAA;AAAA9M,eAAWnB,GAAGuhB,SAAH,CAAarhB,OAAb,CAAqB;AAACC,WAAK+4B;AAAN,KAArB,EAAyC;AAACx5B,cAAQk5B;AAAT,KAAzC,CAAX;;AAEA,QAAGz3B,QAAH;AAEC43B,0BAAoB14B,OAApB,CAA4B,UAACjK,GAAD;AAC3B,YAAGA,QAAO,wBAAV;ACFM,iBDGL4iC,0BAA0B5iC,GAA1B,IAAiCuiC,qBAAqBx3B,SAAS8M,MAA9B,CCH5B;ADEN;ACAM,iBDGL+qB,0BAA0B5iC,GAA1B,IAAiC+K,SAAS/K,GAAT,CCH5B;AACD;ADFN;AAQAmyB,+BAAA,EAAAhoB,MAAAP,GAAAwoB,cAAA,CAAAtoB,OAAA;ACHK8C,eAAO7B,SAAS6B,KDGrB;ACFK5M,aAAK;ADEV,SCDM;AACDsJ,gBAAQ;AACNwC,kBAAQ;AADF;AADP,ODCN,MCGU,IDHV,GCGiB3B,IDHwH2B,MAAzI,GAAyI,MAAzI,KAAmJ,KAAnJ;;AAEA,UAAGqmB,sBAAH;AAECta,iBAAS,IAAItO,KAAJ,EAAT;;ACEI,YAAIwB,YAAY,IAAhB,EAAsB;AACpB,cAAI,CAACkK,OAAOlK,SAAS8M,MAAjB,KAA4B,IAAhC,EAAsC;AACpC5C,iBDFUhL,OCEV,CDFkB,UAACe,KAAD;AACzB,kBAAA+3B,MAAA,EAAAnd,QAAA,EAAAH,IAAA;;AAAAsd,uBAASv4B,EAAElI,KAAF,CAAQ0I,KAAR,CAAT;AAEA4a,yBAAW,IAAIrc,KAAJ,EAAX;;ACGS,kBAAIyB,SAAS,IAAb,EAAmB;AACjB,oBAAI,CAACya,OAAOza,MAAM4a,QAAd,KAA2B,IAA/B,EAAqC;AACnCH,uBDHIxb,OCGJ,CDHY,UAAC6b,OAAD;AACxB,wBAAGA,QAAQ/pB,IAAR,KAAgB,IAAhB,IAAwB+pB,QAAQ5a,IAAR,KAAgBy2B,KAAKhd,MAA7C,IAAuDmB,QAAQ1a,OAAR,KAAmBu2B,KAAKhd,MAA/E,IAA0F,CAACna,EAAEkQ,OAAF,CAAUoL,QAAQG,eAAlB,CAA9F;ACIgB,6BDHfL,SAASnmB,IAAT,CAAcqmB,OAAd,CCGe;AACD;ADNhB,mBCGa;AAKD;AACF;;ADLVid,qBAAOnd,QAAP,GAAkBA,QAAlB;ACOS,qBDLT/N,OAAOpY,IAAP,CAAYsjC,MAAZ,CCKS;ADhBV,aCEQ;AAgBD;AACF;;ADNLh4B,iBAAS8M,MAAT,GAAkBA,MAAlB;AA7BF;ACsCG;;ADPH,WAAO9M,QAAP;AAlCiB,GAAlB;;AAqCA23B,eAAa,UAACM,YAAD;AACZ,QAAAC,OAAA,EAAAC,IAAA;;AAAA,QAAGF,YAAH;AAECC,gBAAU,KAAV;AAEAC,aAAO14B,EAAEuI,IAAF,CAAO4vB,mBAAP,EAA4B,UAAC3iC,GAAD;AAClC,YAAA0C,IAAA,EAAAygC,qBAAA;;AAAAzgC,eAAO1C,GAAP;;AAEA,YAAGA,QAAO,wBAAV;AACC0C,iBAAO,QAAP;ACOI;;ADLL,YAAG8H,EAAEhH,GAAF,CAAMw/B,YAAN,EAAoBtgC,IAApB,CAAH;AAEC,cAAG1C,QAAO,wBAAV;AAECmjC,oCAAwBZ,qBAAqBS,aAAanrB,MAAlC,CAAxB;AAIA,mBAAO,CAACrN,EAAE44B,OAAF,CAAUR,0BAA0B5iC,GAA1B,CAAV,EAA0CmjC,qBAA1C,CAAR;AAND;AAQC,mBAAO,CAAC34B,EAAE44B,OAAF,CAAUR,0BAA0B5iC,GAA1B,CAAV,EAA0CgjC,aAAahjC,GAAb,CAA1C,CAAR;AAVF;ACaK;ADnBC,QAAP;;AAkBA,UAAGkjC,IAAH;AACCD,kBAAU,IAAV;ACIG;;ADAJ,aAAOA,OAAP;ACEE;;ADAH,WAAO,IAAP;AA9BY,GAAb;;AAgCAvB,WAAS93B,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB;AAAChJ,SAAK+S;AAAN,GAAlB,EAAqC+kB,cAArC,CAAoD;AAC5DC,aAAS,UAACnlB,EAAD,EAAKrT,MAAL;AACR,UAAGoU,QAAO,OAAP,IAAkBglB,WAAWp5B,MAAX,CAArB;ACIK,eDHJq4B,KAAKG,OAAL,CAAa,WAAb,EAA0BnlB,EAA1B,EAA8B2lB,gBAAgB3lB,EAAhB,CAA9B,CCGI;AACD;ADPuD;AAI5DsC,aAAS,UAACtC,EAAD;ACML,aDLHglB,KAAK1iB,OAAL,CAAa,WAAb,EAA0BtC,EAA1B,CCKG;ADVwD;AAAA,GAApD,CAAT;AAQA5R,aAAWu3B,gBAAgBxlB,UAAhB,CAAX;AAEA6kB,OAAKI,KAAL,CAAW,WAAX,EAAAh3B,YAAA,OAAwBA,SAAUhB,GAAlC,GAAkC,MAAlC,EAAuCgB,QAAvC;AAEA42B,OAAKpB,KAAL;ACIC,SDFDoB,KAAKK,MAAL,CAAY;ACGT,WDFFN,OAAOO,IAAP,ECEE;ADHH,ICEC;ADxIF;AA0IAz4B,OAAO62B,OAAP,CAAe,iBAAf,EAAkC,UAACvjB,UAAD;AACjC,MAAAumB,iBAAA,EAAA3B,MAAA,EAAAC,IAAA;;AAAA,OAAO,KAAKhd,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACKC;;ADHF,OAAOzjB,UAAP;AACC,WAAO,KAAKyjB,KAAL,EAAP;ACKC;;ADHFoB,SAAO,IAAP;;AAEA0B,sBAAoB,UAACC,MAAD;AACnB,WAAO15B,GAAGuhB,SAAH,CAAarhB,OAAb,CAAqB;AAACC,WAAKu5B;AAAN,KAArB,EAAoC;AAACh6B,cAAQ;AAACS,aAAK,CAAN;AAAS8N,gBAAQ;AAAjB;AAAT,KAApC,CAAP;AADmB,GAApB;;AAIA6pB,WAAU93B,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB;AAAChJ,SAAK+S;AAAN,GAAlB,EAAqC+kB,cAArC,CAAoD;AAC7DC,aAAS,UAACnlB,EAAD;ACYL,aDXHglB,KAAKG,OAAL,CAAa,iBAAb,EAAgChlB,UAAhC,EAA4CumB,kBAAkBvmB,UAAlB,CAA5C,CCWG;ADbyD;AAAA,GAApD,CAAV;AAKA6kB,OAAKI,KAAL,CAAW,iBAAX,EAA8BjlB,UAA9B,EAA0CumB,kBAAkBvmB,UAAlB,CAA1C;AAEA6kB,OAAKpB,KAAL;ACWC,SDVDoB,KAAKK,MAAL,CAAY;ACWT,WDVFN,OAAOO,IAAP,ECUE;ADXH,ICUC;AD/BF,G;;;;;;;;;;;;AEzICz4B,OAAO62B,OAAP,CAAe,gBAAf,EAAiC,UAACrH,OAAD,EAAUtb,GAAV,EAAeid,MAAf;AAEhC,MAAAvgC,KAAA;;AAAA,OAAO,KAAKuqB,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACAA;;ADED,OAAOvH,OAAP;AACC,WAAO,KAAKuH,KAAL,EAAP;ACAA;;ADEDnmC,UAAQ;AAACwS,WAAOosB;AAAR,GAAR;;AACA,MAAGtb,QAAO,OAAV;AACCtjB,UAAMmpC,WAAN,GAAoB,KAAK5e,MAAzB;AADD,SAEK,IAAGjH,QAAO,QAAV;AACJtjB,UAAMqjC,YAAN,GAAqB,KAAK9Y,MAA1B;AADI,SAEA,IAAGjH,QAAO,OAAV;AACJtjB,UAAM0S,SAAN,GAAkB,KAAK6X,MAAvB;AACAvqB,UAAM6b,KAAN,GAAc,OAAd;AAFI,SAGA,IAAGyH,QAAO,SAAV;AACJtjB,UAAM0S,SAAN,GAAkB,KAAK6X,MAAvB;AACAvqB,UAAM6b,KAAN,GAAc,SAAd;AAFI,SAGA,IAAGyH,QAAO,WAAV;AACJtjB,UAAM0S,SAAN,GAAkB,KAAK6X,MAAvB;AACAvqB,UAAM6b,KAAN,GAAc,WAAd;AAFI,SAGA,IAAGyH,QAAO,SAAV;AACJtjB,UAAMgT,IAAN,GAAautB,MAAb;AACAvgC,UAAM6b,KAAN,GAAc;AAACqW,WAAK,CAAC,SAAD,EAAW,WAAX;AAAN,KAAd;AAFI;AAIJlyB,UAAM6b,KAAN,GAAc,MAAd;ACIA;;ADFD,SAAOrM,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB3Y,KAAlB,EAAyB;AAACkP,YAAQ;AAAC9J,YAAK,CAAN;AAASqzB,eAAQ,CAAjB;AAAoB3pB,YAAK,CAAzB;AAA4BkE,YAAM,CAAlC;AAAqCR,aAAM,CAA3C;AAA8CP,gBAAS,CAAvD;AAA0DW,iBAAW,CAArE;AAAwEa,mBAAY,CAApF;AAAuF1E,oBAAc,CAArG;AAAwGyL,oBAAc;AAAtH;AAAT,GAAzB,CAAP;AA5BD,G;;;;;;;;;;;;AEDD,IAAA4uB,wBAAA,EAAAC,4BAAA;;AAAAA,+BAA+B,UAACC,UAAD,EAAa/e,MAAb,EAAqBgf,OAArB,EAA8B7iC,QAA9B;AAC9B,MAAA8iC,SAAA;AAAAA,cAAY,CAAC;AACZ,cAAU;AACT,aAAOF;AADE;AADE,GAAD,EAIT;AAAC,gBAAY;AAAC,cAAQ,CAAT;AAAY,kBAAY;AAAxB;AAAb,GAJS,EAIkD;AAAC,eAAW;AAAZ,GAJlD,EAI4E;AAAC,eAAW;AAAZ,GAJ5E,EAKX;AAAC,cAAU;AAAC,8BAAwB,IAAzB;AAA+BpW,WAAI,CAAC;AAAC,4BAAoB3I;AAArB,OAAD,EAA8B;AAAC,yBAAiBA;AAAlB,OAA9B;AAAnC;AAAX,GALW,EAMX;AAAC,cAAU;AAAC,aAAO,MAAR;AAAgB,qBAAe;AAAC,iBAAS;AAAV;AAA/B;AAAX,GANW,CAAZ;ACqCC,SD5BD/a,GAAGuhB,SAAH,CAAa0Y,aAAb,GAA6BC,SAA7B,CAAuCF,SAAvC,EAAkDG,OAAlD,CAA0D,UAAC/P,GAAD,EAAMt7B,IAAN;AACzD,QAAGs7B,GAAH;AACC,YAAM,IAAI5uB,KAAJ,CAAU4uB,GAAV,CAAN;AC6BE;;AD3BHt7B,SAAKuR,OAAL,CAAa,UAAC+5B,GAAD;AC6BT,aD5BHL,QAAQlkC,IAAR,CAAaukC,GAAb,CC4BG;AD7BJ;;AAGA,QAAGljC,YAAY0J,EAAEy5B,UAAF,CAAanjC,QAAb,CAAf;AACCA;AC6BE;ADrCJ,IC4BC;ADtC6B,CAA/B;;AAqBA0iC,2BAA2Bh6B,OAAO06B,SAAP,CAAiBT,4BAAjB,CAA3B;AAEAj6B,OAAO62B,OAAP,CAAe,kBAAf,EAAmC,UAACQ,SAAD,EAAYrL,GAAZ,EAAiBlsB,MAAjB;AAClC,MAAA66B,YAAA,EAAAC,wBAAA,EAAAC,kBAAA,EAAA3C,MAAA,EAAAC,IAAA;;AAAA,OAAO,KAAKhd,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACgCC;;AD9BFD,QAAMO,SAAN,EAAiB1oC,MAAjB;AAEAmoC,QAAM9K,GAAN,EAAWjsB,KAAX;AAEA+2B,QAAMh3B,MAAN,EAAcw3B,MAAMC,QAAN,CAAenpC,MAAf,CAAd;AAEA0R,SAAOk0B,QAAP,GAAkB,CAAlB;AAEAmE,SAAO,IAAP;;AAEAyC,6BAA2B,UAACzf,MAAD,EAAS7H,UAAT;AAC1B,QAAApkB,IAAA;AAAAA,WAAO,EAAP;AACA8qC,6BAAyB1mB,UAAzB,EAAqC6H,MAArC,EAA6CjsB,IAA7C;;AACA,QAAGA,KAAKzB,MAAL,GAAc,CAAjB;AACC,aAAOyB,KAAK,CAAL,CAAP;AC4BE;ADhCuB,GAA3B;;AAOAyrC,iBAAe,UAACxf,MAAD,EAAS7H,UAAT;AACd,QAAAgJ,OAAA,EAAAF,QAAA,EAAA7a,QAAA,EAAAa,OAAA,EAAA4hB,SAAA,EAAA8W,iBAAA;AAAAv5B,eAAWnB,GAAGuhB,SAAH,CAAarhB,OAAb,CAAqB;AAACC,WAAK+S;AAAN,KAArB,EAAwC;AAACxT,cAAQ;AAACuO,gBAAQ;AAAT;AAAT,KAAxC,CAAX;AACA2V,gBAAY,IAAZ;;AAEA,QAAG,CAACziB,QAAJ;AACC;ACkCE;;ADhCH,QAAG,CAACA,SAAS8M,MAAV,IAAoB9M,SAAS8M,MAAT,CAAgB5gB,MAAhB,GAAyB,CAAhD;AACC;ACkCE;;ADhCHqtC,wBAAoBv5B,SAAS8M,MAAT,CAAgBiK,cAAhB,CAA+B,aAA/B,EAA8C,KAA9C,CAApB;;AAEA,QAAGwiB,kBAAkBrtC,MAAlB,GAA2B,CAA9B;AACC2uB,iBAAW0e,kBAAkB,CAAlB,EAAqB1e,QAArB,CAA8B9D,cAA9B,CAA6C,aAA7C,EAA4D,KAA5D,EAAmEA,cAAnE,CAAkF,SAAlF,EAA6F6C,MAA7F,CAAX;;AAEA,UAAGiB,SAAS3uB,MAAT,GAAkB,CAArB;AACC6uB,kBAAUF,SAAS,CAAT,CAAV;AACA4H,oBAAY;AACX7Q,cAAImJ,QAAQ/b,GADD;AAEXgB,oBAAU+a,QAAQ/a,QAFP;AAGXC,iBAAO8a,QAAQ9a,KAHJ;AAIXY,mBAASka,QAAQla,OAJN;AAKXH,sBAAYqa,QAAQra,UALT;AAMX84B,iBAAOze,QAAQye,KANJ;AAOXp5B,qBAAW2a,QAAQ3a;AAPR,SAAZ;AALF;AC8CG;;AD/BH,QAAG,CAACqiB,SAAJ;AACC5hB,gBAAU,KAAV;AACAb,eAAS8M,MAAT,CAAgB5N,OAAhB,CAAwB,UAACe,KAAD;AACvB,YAAAb,GAAA;ACiCI,eAAOa,SAAS,IAAT,GAAgB,CAACb,MAAMa,MAAM4a,QAAb,KAA0B,IAA1B,GAAiCzb,IDjC3CF,OCiC2C,CDjCnC,UAAC6b,OAAD;AACxB,cAAGA,QAAQ/pB,IAAR,KAAgB,IAAhB,IAAyB+pB,QAAQ5a,IAAR,KAAgByZ,MAAzC,IAAoDmB,QAAQ7a,WAAR,KAAuB,KAA9E;AACC,gBAAG6a,QAAQla,OAAX;AACCA,wBAAU,IAAV;ACkCM;;AACD,mBDlCN4hB,YAAY;AAAC7Q,kBAAImJ,QAAQ/b,GAAb;AAAkB6B,uBAASA,OAA3B;AAAoCH,0BAAYqa,QAAQra,UAAxD;AAAoE84B,qBAAOze,QAAQye,KAAnF;AAA0Fp5B,yBAAW2a,QAAQ3a;AAA7G,aCkCN;AAOD;AD7CP,SCiC4D,CAAjC,GDjC3B,MCiCW,GDjCX,MCiCI;ADlCL;ACiDE;;AD1CH,WAAOqiB,SAAP;AApCc,GAAf;;AAsCA6W,uBAAqB,UAACvnB,UAAD;AACpB,QAAA/R,QAAA,EAAAZ,GAAA,EAAA8K,IAAA,EAAAuvB,eAAA;AAAAz5B,eAAWnB,GAAGuhB,SAAH,CAAarhB,OAAb,CAAqB;AAACC,WAAK+S;AAAN,KAArB,EAAwC;AAACxT,cAAQ;AAAC,uBAAe,CAAhB;AAAmB,kBAAU;AAACm7B,kBAAQ,CAAC;AAAV;AAA7B;AAAT,KAAxC,CAAX;;AACA,QAAG15B,QAAH;AACCy5B,wBAAA,CAAAr6B,MAAAY,SAAA8M,MAAA,aAAA5C,OAAA9K,IAAA,cAAA8K,KAAuCzV,IAAvC,GAAuC,MAAvC,GAAuC,MAAvC;ACsDE;;ADpDH,WAAOglC,eAAP;AALoB,GAArB;;AAOA9C,WAAS93B,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB;AAAChJ,SAAK;AAACuiB,WAAKkJ;AAAN;AAAN,GAAlB,EAAqC;AAAClsB,YAAQ;AAACuO,cAAQ;AAAT;AAAT,GAArC,EAA4DgqB,cAA5D,CAA2E;AACnFC,aAAS,UAACnlB,EAAD;AACR,UAAAvK,KAAA,EAAArH,QAAA,EAAAyiB,SAAA,EAAAkX,qBAAA,EAAAv6B,GAAA,EAAA8K,IAAA;AAAAlK,iBAAWnB,GAAGuhB,SAAH,CAAarhB,OAAb,CAAqB;AAACC,aAAK4S;AAAN,OAArB,EAAgC;AAACrT,gBAAQA;AAAT,OAAhC,CAAX;;AACA,UAAU,CAAIyB,QAAd;AAAA;ACoEI;;ADnEJyiB,kBAAY2W,aAAaxC,KAAKhd,MAAlB,EAA0BhI,EAA1B,CAAZ;AACA+nB,8BAAwBN,yBAAyBzC,KAAKhd,MAA9B,EAAsChI,EAAtC,CAAxB;;AACA,UAAG6Q,SAAH;AACCziB,iBAASa,OAAT,GAAmB4hB,UAAU5hB,OAA7B;AACAb,iBAASU,UAAT,GAAsB+hB,UAAU/hB,UAAhC;;AACA,YAAG+hB,UAAU+W,KAAb;AACCx5B,mBAAS45B,eAAT,GAA2BnX,UAAUriB,SAArC;AAJF;AAAA;AAMCJ,iBAASa,OAAT,GAAmB,IAAnB;ACsEG;;ADpEJ,UAAG84B,qBAAH;AACC35B,iBAAS65B,cAAT,GAA0BF,sBAAsBh4B,WAAhD;ACsEG;;ADpEJ3B,eAAS85B,KAAT,KAAA16B,MAAAY,SAAAyyB,QAAA,YAAArzB,IAAoCgS,QAApC,CAA6CwlB,KAAKhd,MAAlD,IAAiB,MAAjB,KAA6D,KAA7D;AACA5Z,eAAS+5B,QAAT,KAAA7vB,OAAAlK,SAAAyyB,QAAA,YAAAvoB,KAAuChe,MAAvC,GAAuC,MAAvC,KAAiD,CAAjD;AACA,aAAO8T,SAASyyB,QAAhB;;AACA;ACsEK,eDrEJmE,KAAKG,OAAL,CAAa,WAAb,EAA0BnlB,EAA1B,EAA8B5R,QAA9B,CCqEI;ADtEL,eAAA2c,MAAA;AAEMtV,gBAAAsV,MAAA;AACLtd,gBAAQC,GAAR,CAAY,iCAAZ,EAA+C+H,MAAMmkB,OAArD;AACAnsB,gBAAQC,GAAR,CAAY,eAAZ,EAA6Bs3B,KAAKhd,MAAlC;AACAva,gBAAQC,GAAR,CAAY,aAAZ,EAA2Bw2B,SAA3B;AACAz2B,gBAAQC,GAAR,CAAY,OAAZ,EAAqBkJ,KAAKC,SAAL,CAAegiB,GAAf,CAArB;ACuEI,eDtEJprB,QAAQC,GAAR,CAAY,aAAZ,EAA2BkJ,KAAKC,SAAL,CAAega,SAAf,CAA3B,CCsEI;AACD;ADlG8E;AA4BnFvO,aAAS,UAACtC,EAAD;ACyEL,aDxEHglB,KAAK1iB,OAAL,CAAa,WAAb,EAA0BtC,EAA1B,CCwEG;ADrG+E;AAAA,GAA3E,CAAT;AAgCA6Y,MAAIvrB,OAAJ,CAAY,UAAC0S,EAAD;AACX,QAAA5R,QAAA,EAAAyiB,SAAA,EAAAkX,qBAAA,EAAAv6B,GAAA,EAAA8K,IAAA;AAAAlK,eAAWnB,GAAGuhB,SAAH,CAAarhB,OAAb,CAAqB;AAACC,WAAK4S;AAAN,KAArB,EAAgC;AAACrT,cAAQA;AAAT,KAAhC,CAAX;;AACA,QAAU,CAAIyB,QAAd;AAAA;AC+EG;;AD9EHyiB,gBAAY2W,aAAaxC,KAAKhd,MAAlB,EAA0BhI,EAA1B,CAAZ;AACA+nB,4BAAwBN,yBAAyBzC,KAAKhd,MAA9B,EAAsChI,EAAtC,CAAxB;;AACA,QAAG6Q,SAAH;AACCziB,eAASa,OAAT,GAAmB4hB,UAAU5hB,OAA7B;AACAb,eAASU,UAAT,GAAsB+hB,UAAU/hB,UAAhC;;AACA,UAAG+hB,UAAU+W,KAAb;AACEx5B,iBAAS45B,eAAT,GAA2BnX,UAAUriB,SAArC;AAJH;AAAA;AAMCJ,eAASa,OAAT,GAAmB,IAAnB;ACiFE;;AD/EH,QAAG84B,qBAAH;AACC35B,eAAS65B,cAAT,GAA0BF,sBAAsBh4B,WAAhD;ACiFE;;AD/EH3B,aAAS85B,KAAT,KAAA16B,MAAAY,SAAAyyB,QAAA,YAAArzB,IAAoCgS,QAApC,CAA6CwlB,KAAKhd,MAAlD,IAAiB,MAAjB,KAA6D,KAA7D;AACA5Z,aAAS+5B,QAAT,KAAA7vB,OAAAlK,SAAAyyB,QAAA,YAAAvoB,KAAuChe,MAAvC,GAAuC,MAAvC,KAAiD,CAAjD;AACA,WAAO8T,SAASyyB,QAAhB;ACiFE,WDhFFmE,KAAKI,KAAL,CAAW,WAAX,EAAwBplB,EAAxB,EAA4B5R,QAA5B,CCgFE;ADnGH;AAqBA42B,OAAKpB,KAAL;ACiFC,SDhFDoB,KAAKK,MAAL,CAAY;ACiFT,WDhFFN,OAAOO,IAAP,ECgFE;ADjFH,ICgFC;ADxMF;AA2HAz4B,OAAO62B,OAAP,CAAe,wBAAf,EAAyC,UAAC0E,WAAD,EAAcvP,GAAd,EAAmBlsB,MAAnB;AACxC,OAAO,KAAKqb,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACmFC;;ADjFFD,QAAMyE,WAAN,EAAmB5sC,MAAnB;AAEAmoC,QAAM9K,GAAN,EAAWjsB,KAAX;AAEA+2B,QAAMh3B,MAAN,EAAcw3B,MAAMC,QAAN,CAAenpC,MAAf,CAAd;ACiFC,SD3EDgS,GAAGe,cAAH,CAAkBoI,IAAlB,CAAuB;AACtBhJ,SAAK;AACJuiB,WAAKkJ;AADD;AADiB,GAAvB,EAIG;AACFlsB,YAAQA;AADN,GAJH,CC2EC;ADzFF;AAsBAE,OAAO62B,OAAP,CAAe,mBAAf,EAAoC,UAAC0E,WAAD,EAAcvP,GAAd,EAAmBlsB,MAAnB;AACnC,OAAO,KAAKqb,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;AC6EC;;AD3EFD,QAAMyE,WAAN,EAAmB5sC,MAAnB;AAEAmoC,QAAM9K,GAAN,EAAWjsB,KAAX;AAEA+2B,QAAMh3B,MAAN,EAAcw3B,MAAMC,QAAN,CAAenpC,MAAf,CAAd;AC2EC,SDrEDgS,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB;AACjBhJ,SAAK;AACJuiB,WAAKkJ;AADD;AADY,GAAlB,EAIG;AACFlsB,YAAQA;AADN,GAJH,CCqEC;ADnFF,G;;;;;;;;;;;;AExKAE,OAAO62B,OAAP,CAAe,iBAAf,EAAkC,UAACrH,OAAD;AACjC,MAAArU,MAAA;AAAA2b,QAAMtH,OAAN,EAAe7gC,MAAf;;AAEA,OAAO,KAAKwsB,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACCC;;ADCF5b,WAAS,KAAKA,MAAd;AACA,SAAO/a,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB;AAACkD,WAAM,OAAP;AAAerJ,WAAMosB,OAArB;AAA6BlsB,eAAU6X,MAAvC;AAA8C2I,SAAI,CAAC;AAACiW,mBAAa;AAAC3Q,iBAAQ;AAAT;AAAd,KAAD,EAAiC;AAAC2Q,mBAAa;AAAd,KAAjC;AAAlD,GAAlB,EAA0H;AAACj6B,YAAQ;AAACS,WAAK,CAAN;AAASkM,aAAO,CAAhB;AAAmBrJ,aAAO,CAA1B;AAA6BE,iBAAW,CAAxC;AAA2Cy2B,mBAAa,CAAxD;AAA2Dl3B,gBAAU,CAArE;AAAwE7M,YAAM;AAA9E,KAAT;AAA2FjG,UAAK;AAAC8S,gBAAU,CAAC;AAAZ;AAAhG,GAA1H,CAAP;AAPD,G;;;;;;;;;;;;AEAA7C,OAAO62B,OAAP,CAAe,oCAAf,EAAqD,UAAC2E,YAAD;AACpD,MAAAtD,MAAA,EAAAC,IAAA;AAAArB,QAAM0E,YAAN,EAAoBz7B,KAApB;;AAEA,OAAO,KAAKob,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACCC;;ADCF,OAAOyE,YAAP;AACC,WAAO,KAAKzE,KAAL,EAAP;ACCC;;ADCF,MAAG/1B,EAAEkQ,OAAF,CAAUsqB,YAAV,CAAH;AACC,WAAO,KAAKzE,KAAL,EAAP;ACCC;;ADCFoB,SAAO,IAAP;AAEAD,WAAS93B,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB;AAAChJ,SAAK;AAACuiB,WAAK0Y;AAAN;AAAN,GAAlB,EAA8C;AAAC17B,YAAQ;AAAC2M,aAAO,CAAR;AAAW4B,cAAO;AAAC4sB,gBAAQ;AAAT;AAAlB;AAAT,GAA9C,EAA0F5C,cAA1F,CAAyG;AACjHE,WAAO,UAACplB,EAAD,EAAKrT,MAAL;ACWH,aDVHq4B,KAAKI,KAAL,CAAW,WAAX,EAAwBplB,EAAxB,EAA4B;AAAC1G,eAAO3M,OAAO2M,KAAf;AAAsBrK,iBAAStC,OAAOuO,MAAP,CAAc,CAAd,EAAiB+N,QAAjB,CAA0B,CAA1B,EAA6Bha;AAA5D,OAA5B,CCUG;ADZ6G;AAIjHk2B,aAAS,UAACnlB,EAAD,EAAKrT,MAAL;AACR,UAAGA,OAAO2M,KAAV;AACC0rB,aAAKG,OAAL,CAAa,WAAb,EAA0BnlB,EAA1B,EAA8B;AAAC1G,iBAAO3M,OAAO2M;AAAf,SAA9B;ACgBG;;ADfJ,UAAG3M,OAAOuO,MAAV;ACiBK,eDhBJ8pB,KAAKG,OAAL,CAAa,WAAb,EAA0BnlB,EAA1B,EAA8B;AAAC/Q,mBAAStC,OAAOuO,MAAP,CAAc,CAAd,EAAiB+N,QAAjB,CAA0B,CAA1B,EAA6Bha;AAAvC,SAA9B,CCgBI;AAGD;AD3B4G;AAAA,GAAzG,CAAT;AAWA,OAAK20B,KAAL;ACoBC,SDnBD,KAAKyB,MAAL,CAAY;ACoBT,WDnBFN,OAAOO,IAAP,ECmBE;ADpBH,ICmBC;AD7CF,G;;;;;;;;;;;;AEAAz4B,OAAO62B,OAAP,CAAe,kBAAf,EAAmC,UAACvjB,UAAD,EAAalD,iBAAb;AAClC,MAAAzP,GAAA,EAAA86B,oBAAA;;AAAA,OAAO,KAAKtgB,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACEC;;ADAF,OAAOzjB,UAAP;AACC,WAAO,KAAKyjB,KAAL,EAAP;ACEC;;ADAF0E,yBAAA,CAAA96B,MAAAP,GAAAuhB,SAAA,CAAArhB,OAAA,CAAAgT,UAAA;ACEGxT,YAAQ;AACNsQ,yBAAmB;AADb;ADFX,SCKQ,IDLR,GCKezP,IDL2EyP,iBAA1F,GAA0F,MAA1F;;AAEA,MAAGqrB,wBAAwBz6B,EAAEjS,OAAF,CAAU0sC,oBAAV,CAA3B;AACC,WAAOr7B,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB;AAAChJ,WAAK;AAACuiB,aAAM2Y;AAAP;AAAN,KAAlB,EAAuD;AAAC37B,cAAQ;AAACS,aAAK,CAAN;AAASvK,cAAM,CAAf;AAAkBoN,eAAO;AAAzB;AAAT,KAAvD,CAAP;AADD;AAGC,WAAO,KAAK2zB,KAAL,EAAP;ACeC;AD3BH,G;;;;;;;;;;;;AEAA,IAAG/2B,OAAOC,QAAV;AACID,SAAO62B,OAAP,CAAe,kBAAf,EAAmC,UAACrH,OAAD;AAC/BsH,UAAMtH,OAAN,EAAe7gC,MAAf;;AAEA,SAAO,KAAKwsB,MAAZ;AACI,aAAO,KAAK4b,KAAL,EAAP;ACAP;;ADEG,WAAO32B,GAAGgb,gBAAH,CAAoB7R,IAApB,CAAyB;AAAEnG,aAAOosB;AAAT,KAAzB,EAA6C;AAAC1vB,cAAQ;AAACwpB,oBAAY,CAAb;AAAgBD,iBAAS,CAAzB;AAA4BvmB,qBAAa;AAAzC;AAAT,KAA7C,CAAP;AANJ;ACeH,C;;;;;;;;;;;;AChBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAnCA,IAAA44B,mCAAA,EAAAC,6BAAA;;AAqFAA,gCAAgC,UAACnM,OAAD,EAAUrU,MAAV,EAAkBygB,MAAlB,EAA0BtkC,QAA1B;ACG9B,SDFD8I,GAAGuhB,SAAH,CAAa0Y,aAAb,GAA6BC,SAA7B,CAAuC,CACtC;AACCuB,YAAQ;AACPz4B,aAAOosB,OADA;AAEP1L,WAAK,CAAC;AAACiW,qBAAa5e;AAAd,OAAD,EAAwB;AAAC6Y,kBAAU7Y;AAAX,OAAxB;AAFE;AADT,GADsC,EAOtC;AACC2gB,YAAQ;AACPv7B,WAAK;AAACqD,cAAM,OAAP;AAAgBU,kBAAU;AAA1B,OADE;AACsCsd,aAAO;AAACma,cAAM;AAAP;AAD7C;AADT,GAPsC,CAAvC,EAYGxB,OAZH,CAYW,UAAC/P,GAAD,EAAMt7B,IAAN;AACV,QAAGs7B,GAAH;AACC,YAAM,IAAI5uB,KAAJ,CAAU4uB,GAAV,CAAN;ACcE;;ADZHt7B,SAAKuR,OAAL,CAAa,UAAC+5B,GAAD;ACcT,aDbHoB,OAAO3lC,IAAP,CAAYukC,GAAZ,CCaG;ADdJ;;AAGA,QAAGljC,YAAY0J,EAAEy5B,UAAF,CAAanjC,QAAb,CAAf;AACCA;ACcE;ADlCJ,ICEC;ADH8B,CAAhC;;AAwBAokC,sCAAsC17B,OAAO06B,SAAP,CAAiBiB,6BAAjB,CAAtC;AAEA37B,OAAO62B,OAAP,CAAe,+BAAf,EAAgD,UAACrH,OAAD;AAE/C,MAAAwM,WAAA,EAAAC,UAAA,EAAAC,KAAA,EAAAhtC,IAAA,EAAAgpC,MAAA,EAAAtnC,KAAA,EAAAunC,IAAA;;AAAA,OAAO,KAAKhd,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACgBC;;ADdFoB,SAAO,IAAP;AAEAvnC,UAAQ;AAACwS,WAAOosB;AAAR,GAAR;AAEA5+B,QAAMkzB,GAAN,GAAY,CAAC;AAACiW,iBAAa,KAAK5e;AAAnB,GAAD,EAA6B;AAAC6Y,cAAU,KAAK7Y;AAAhB,GAA7B,CAAZ;AAEAjsB,SAAO,EAAP;;AACAwsC,sCAAoClM,OAApC,EAA6C2I,KAAKhd,MAAlD,EAA0DjsB,IAA1D;;AAEA+sC,eAAa,EAAb;;AAEAj7B,IAAEyf,IAAF,CAAOvxB,IAAP,EAAa,UAACitC,QAAD;ACmBV,WDlBFF,WAAWhmC,IAAX,CAAgB;AAACsK,WAAK47B,SAAS57B,GAAT,CAAaqD,IAAnB;AAAyBU,gBAAU63B,SAAS57B,GAAT,CAAa+D,QAAhD;AAA0Dsd,aAAOua,SAASva;AAA1E,KAAhB,CCkBE;ADnBH;;AAGAuW,OAAKI,KAAL,CAAW,gBAAX,EAA6B/I,OAA7B,EAAsC;AAACnkB,WAAO4wB;AAAR,GAAtC;;AAEAD,gBAAc,UAACxB,GAAD,EAAM/N,MAAN;AACb,QAAA2P,aAAA;AAAAA,oBAAgBp7B,EAAEuI,IAAF,CAAO0yB,UAAP,EAAmB,UAACv7B,CAAD;AAClC,aAAOA,EAAEH,GAAF,KAASi6B,IAAI52B,IAApB;AADe,MAAhB;;AAEA,QAAGw4B,aAAH;AACC,UAAG3P,WAAU,OAAb;AACC2P,sBAAcxa,KAAd;AADD,aAEK,IAAG6K,WAAU,SAAb;AACJ2P,sBAAcxa,KAAd;AAJF;AAAA,WAKK,IAAG6K,WAAU,OAAb;AACJwP,iBAAWhmC,IAAX,CAAgB;AAACsK,aAAKi6B,IAAI52B,IAAV;AAAgBU,kBAAUk2B,IAAIl2B,QAA9B;AAAwCsd,eAAO;AAA/C,OAAhB;AC+BE;;AACD,WD9BFuW,KAAKG,OAAL,CAAa,gBAAb,EAA+B9I,OAA/B,EAAwC;AAACnkB,aAAO4wB;AAAR,KAAxC,CC8BE;ADzCW,GAAd;;AAaAC,UAAQ,IAAR;AACAhE,WAAS93B,GAAGuhB,SAAH,CAAapY,IAAb,CAAkB3Y,KAAlB,EAAyB;AAACkP,YAAQ;AAACS,WAAK,CAAN;AAASw5B,mBAAa,CAAtB;AAAyB/F,gBAAU,CAAnC;AAAsCpwB,YAAM,CAA5C;AAA+CU,gBAAU;AAAzD;AAAT,GAAzB,EAAgG+3B,OAAhG,CAAwG;AAChH9D,WAAO,UAACiC,GAAD;AACN,UAAG,CAAC0B,KAAJ;ACyCK,eDxCJF,YAAYxB,GAAZ,EAAiB,OAAjB,CCwCI;AACD;AD5C2G;AAIhH/kB,aAAS,UAAC+kB,GAAD;AACR,UAAG,CAAC0B,KAAJ;AC2CK,eD1CJF,YAAYxB,GAAZ,EAAiB,SAAjB,CC0CI;AACD;ADjD2G;AAAA,GAAxG,CAAT;AAQA0B,UAAQ,KAAR;AAEA/D,OAAKpB,KAAL;AC4CC,SD3CDoB,KAAKK,MAAL,CAAY;AC4CT,WD3CFN,OAAOO,IAAP,EC2CE;AD5CH,IC2CC;ADzFF,G;;;;;;;;;;;;AE9GAz4B,OAAO62B,OAAP,CAAe,2BAAf,EAA4C,UAACrH,OAAD,EAAU2B,MAAV;AAC3C2F,QAAMtH,OAAN,EAAe7gC,MAAf;AACAmoC,QAAM3F,MAAN,EAAcxiC,MAAd;;AAEA,OAAO,KAAKwsB,MAAZ;AACC,WAAO,KAAK4b,KAAL,EAAP;ACDC;;ADGF,QAAOvH,WAAW2B,MAAlB;AACC,WAAO,KAAK4F,KAAL,EAAP;ACDC;;ADGF,SAAO1sB,QAAQiyB,aAAR,CAAsB,WAAtB,EAAmC/yB,IAAnC,CAAwC;AAAEnG,WAAOosB,OAAT;AAAkB,gBAAY,OAA9B;AAAuC,kBAAc2B,MAArD;AAA8Dn7B,UAAM;AAApE,GAAxC,CAAP;AAVD,G;;;;;;;;;;;;AEDAumC,mBAAmB,EAAnB;AAKAA,iBAAiB,IAAjB,IAAwB,EAAxB;AAKAA,iBAAiB,OAAjB,IAA2B,EAA3B;AAEAv8B,OAAOw8B,OAAP,CAAe;AACd,MAAAC,gBAAA,EAAAC,gBAAA,EAAAC,YAAA,EAAAC,YAAA,EAAAC,EAAA,EAAAC,IAAA,EAAAnsC,IAAA,EAAAosC,OAAA,EAAAC,OAAA,EAAAC,YAAA,EAAAt8B,GAAA,EAAA8K,IAAA;AAAAoxB,OAAK73B,QAAQ,IAAR,CAAL;AACArU,SAAOqU,QAAQ,MAAR,CAAP;AACA83B,SAAO93B,QAAQ,MAAR,CAAP;;AACAi4B,iBAAe,UAACC,OAAD,EAAUC,SAAV;AACd,QAAAzZ,KAAA;AAAAA,YAAQmZ,GAAGO,WAAH,CAAeF,OAAf,CAAR;ACDE,WDEFxZ,MAAMjjB,OAAN,CAAc,UAACzK,IAAD,EAAO8B,KAAP;AACb,UAAA9I,GAAA,EAAAquC,IAAA;AAAAA,aAAOR,GAAGS,QAAH,CAAY3sC,KAAK4D,IAAL,CAAU2oC,OAAV,EAAmBlnC,IAAnB,CAAZ,CAAP;;AACA,UAAGqnC,KAAKE,WAAL,EAAH;ACAK,eDEJN,aAAatsC,KAAK4D,IAAL,CAAU2oC,OAAV,EAAmBlnC,IAAnB,CAAb,EAAuCmnC,SAAvC,CCFI;ADAL;AAICnuC,cAAM,EAAN;AACAA,YAAI2B,IAAJ,GAAWusC,OAAX;AACAluC,YAAIgH,IAAJ,GAAWA,IAAX;ACDI,eDEJmnC,UAAUlnC,IAAV,CAAejH,GAAf,CCFI;AACD;ADRL,MCFE;ADAY,GAAf;;AAcA2tC,iBAAe,EAAf;AACAI,YAAA,CAAAp8B,MAAAX,OAAA0Q,QAAA,CAAA8sB,iBAAA,YAAA78B,IAA6Co8B,OAA7C,GAA6C,MAA7C;;AACA,MAAGA,OAAH;AACCN,uBAAmB9rC,KAAK8sC,OAAL,CAAaV,OAAb,CAAnB;AACAn8B,YAAQC,GAAR,CAAY,kBAAZ,EAAgC47B,gBAAhC;;AACA,QAAGI,GAAGa,UAAH,CAAcjB,gBAAd,CAAH;AACCQ,mBAAaR,gBAAb,EAA+BE,YAA/B;AACAA,mBAAal8B,OAAb,CAAqB,UAACk9B,IAAD;AACpB,YAAAzuC,IAAA,EAAAyE,CAAA;;AAAA;AACC,cAAGmpC,KAAKruC,OAAL,CAAakvC,KAAK3nC,IAAlB,MAA2B,kBAA9B;AACC9G,mBAAO2tC,GAAGe,YAAH,CAAgBjtC,KAAK4D,IAAL,CAAUopC,KAAKhtC,IAAf,EAAqBgtC,KAAK3nC,IAA1B,CAAhB,EAAiD,MAAjD,CAAP;ACCM,mBDANumC,iBAAiB,OAAjB,EAA0BtmC,IAA1B,CAA+B8T,KAAKlV,KAAL,CAAW3F,IAAX,CAA/B,CCAM;ADHR;AAAA,iBAAA0Z,KAAA;AAIMjV,cAAAiV,KAAA;AACLhI,kBAAQgI,KAAR,CAAc,kBAAd,EAAkCjY,KAAK4D,IAAL,CAAUopC,KAAKhtC,IAAf,EAAqBgtC,KAAK3nC,IAA1B,CAAlC;ACGK,iBDFL4K,QAAQgI,KAAR,CAAcjV,EAAEi5B,KAAhB,CCEK;AACD;ADVN;AALF;ACkBE;;ADHFgQ,iBAAe,EAAf;AACAI,YAAA,CAAAvxB,OAAAzL,OAAA0Q,QAAA,CAAA8sB,iBAAA,YAAA/xB,KAA6CuxB,OAA7C,GAA6C,MAA7C;;AACA,MAAGA,OAAH;AACCN,uBAAmB/rC,KAAK8sC,OAAL,CAAaT,OAAb,CAAnB;AACAp8B,YAAQC,GAAR,CAAY,kBAAZ,EAAgC67B,gBAAhC;;AACA,QAAGG,GAAGa,UAAH,CAAchB,gBAAd,CAAH;AACCO,mBAAaP,gBAAb,EAA+BE,YAA/B;ACKG,aDJHA,aAAan8B,OAAb,CAAqB,UAACk9B,IAAD;AACpB,YAAAzuC,IAAA,EAAAyE,CAAA;;AAAA;AACC,cAAGmpC,KAAKruC,OAAL,CAAakvC,KAAK3nC,IAAlB,MAA2B,kBAA9B;AACC9G,mBAAO2tC,GAAGe,YAAH,CAAgBjtC,KAAK4D,IAAL,CAAUopC,KAAKhtC,IAAf,EAAqBgtC,KAAK3nC,IAA1B,CAAhB,EAAiD,MAAjD,CAAP;ACMM,mBDLNumC,iBAAiB,IAAjB,EAAuBtmC,IAAvB,CAA4B8T,KAAKlV,KAAL,CAAW3F,IAAX,CAA5B,CCKM;ADRR;AAAA,iBAAA0Z,KAAA;AAIMjV,cAAAiV,KAAA;AACLhI,kBAAQgI,KAAR,CAAc,kBAAd,EAAkCjY,KAAK4D,IAAL,CAAUopC,KAAKhtC,IAAf,EAAqBgtC,KAAK3nC,IAA1B,CAAlC;ACQK,iBDPL4K,QAAQgI,KAAR,CAAcjV,EAAEi5B,KAAhB,CCOK;AACD;ADfN,QCIG;ADTL;ACuBE;AD5DH,G;;;;;;;;;;;;;;;;;;;;;;;;AEZA;;;;;;;;;;GAWA5sB,OAAOw8B,OAAP,CAAe;AACd,MAAAqB,OAAA,EAAAl9B,GAAA,EAAAm9B,IAAA,EAAAC,QAAA;;AAAA,OAAAp9B,MAAAX,OAAA0Q,QAAA,CAAAstB,IAAA,YAAAr9B,IAAyBs9B,8BAAzB,GAAyB,MAAzB;AACCF,eAAW/4B,QAAQ,eAAR,CAAX;AAEA84B,WAAO99B,OAAO0Q,QAAP,CAAgBstB,IAAhB,CAAqBC,8BAA5B;AACAJ,cAAU,IAAV;ACEE,WDDFE,SAASG,WAAT,CAAqBJ,IAArB,EAA2B99B,OAAOm+B,eAAP,CAAuB;AACjD,UAAAxqC,CAAA,EAAA6xB,GAAA;;AAAA;AACC,YAAG,CAACqY,OAAJ;AACC;ACGI;;ADFLA,kBAAU,KAAV;AACAj9B,gBAAQw9B,IAAR,CAAa,gCAAb;AAEA5Y,cAAM,IAAItjB,IAAJ,EAAN;AAGA9B,WAAGi+B,wBAAH,CAA4BC,MAA5B,CAAmC;AAAEC,mBAAS,IAAX;AAAiBC,oBAAU;AAAEC,kBAAMjZ;AAAR;AAA3B,SAAnC,EAA+E;AAAEkZ,gBAAM;AAAEH,qBAAS;AAAX;AAAR,SAA/E,EAA6G;AAAEI,iBAAO;AAAT,SAA7G;AAEA/9B,gBAAQg+B,OAAR,CAAgB,gCAAhB;ACWI,eDVJf,UAAU,ICUN;ADtBL,eAAAj1B,KAAA;AAcMjV,YAAAiV,KAAA;AACLhI,gBAAQgI,KAAR,CAAc,6CAAd;AACAhI,gBAAQgI,KAAR,CAAcjV,EAAEi5B,KAAhB;ACWI,eDVJiR,UAAU,ICUN;AACD;AD7BsB,OAoBzB,UAAClqC,CAAD;AACDiN,cAAQC,GAAR,CAAY,mEAAZ;ACWG,aDVHD,QAAQC,GAAR,CAAYlN,EAAEi5B,KAAd,CCUG;ADhCuB,MAA3B,CCCE;AAiCD;ADxCH,G;;;;;;;;;;;;AEXA;;;;;;;;;;GAWA5sB,OAAOw8B,OAAP,CAAe;AACd,MAAAqB,OAAA,EAAAl9B,GAAA,EAAAm9B,IAAA,EAAAC,QAAA;;AAAA,OAAAp9B,MAAAX,OAAA0Q,QAAA,CAAAstB,IAAA,YAAAr9B,IAAyBk+B,mBAAzB,GAAyB,MAAzB;AACCd,eAAW/4B,QAAQ,eAAR,CAAX;AAEA84B,WAAO99B,OAAO0Q,QAAP,CAAgBstB,IAAhB,CAAqBa,mBAA5B;AACAhB,cAAU,IAAV;ACEE,WDDFE,SAASG,WAAT,CAAqBJ,IAArB,EAA2B99B,OAAOm+B,eAAP,CAAuB;AACjD,UAAAxqC,CAAA;;AAAA;AACC,YAAG,CAACkqC,OAAJ;AACC;ACGI;;ADFLA,kBAAU,KAAV;AACAj9B,gBAAQw9B,IAAR,CAAa,qBAAb;AAEAl+B,sBAAc4+B,iBAAd;AAEAl+B,gBAAQg+B,OAAR,CAAgB,qBAAhB;ACEI,eDDJf,UAAU,ICCN;ADVL,eAAAj1B,KAAA;AAWMjV,YAAAiV,KAAA;AACLhI,gBAAQgI,KAAR,CAAc,kCAAd;AACAhI,gBAAQgI,KAAR,CAAcjV,EAAEi5B,KAAhB;ACEI,eDDJiR,UAAU,ICCN;AACD;ADjBsB,OAiBzB,UAAClqC,CAAD;AACDiN,cAAQC,GAAR,CAAY,wDAAZ;ACEG,aDDHD,QAAQC,GAAR,CAAYlN,EAAEi5B,KAAd,CCCG;ADpBuB,MAA3B,CCCE;AAqBD;AD5BH;AA2BA5sB,OAAOitB,OAAP,CACC;AAAA4R,uBAAqB,UAAC1R,MAAD;AACpBjtB,kBAAc4+B,iBAAd,CAAgC3R,MAAhC;AACA,WAAO,IAAP;AAFD;AAAA,CADD,E;;;;;;;;;;;;AEtCAntB,OAAOw8B,OAAP,CAAe;ACCb,SDADuC,cAAcC,yBAAd,GAA0C,IAAIC,QAAQC,KAAZ,CACzC;AAAAlpC,UAAM,2BAAN;AACAmpC,gBAAY/+B,GAAGuhB,SADf;AAEAyd,aAAS,CACR;AACClwC,YAAM,KADP;AAECmwC,aAAO,qDAFR;AAGCC,iBAAW,KAHZ;AAIC7uB,aAAO,KAJR;AAKC8uB,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAAgF,KAAA,EAAA7+B,GAAA;AAAA6+B,gBAAQ,mIAAmIhF,IAAIj6B,GAAvI,GAA6I,GAArJ;;AAEA,aAAAI,MAAAo+B,cAAAC,yBAAA,CAAA5uB,iBAAA,YAAAzP,IAA8DgS,QAA9D,CAAuE6nB,IAAIj6B,GAA3E,IAAG,MAAH;AACCi/B,mBAAS,WAAT;ACCK;;ADCNA,iBAAS,GAAT;AACA,eAAOA,KAAP;AAZF;AAAA,KADQ,EAeR;AACCtwC,YAAM,MADP;AAECowC,iBAAW,KAFZ;AAGC7uB,aAAO,KAHR;AAIC8uB,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAA7+B,QAAA,EAAA7N,IAAA;AAAAA,eAAO,EAAP;;AACA,YAAGkS,OAAO6J,QAAP,KAAoBxC,QAAQyJ,QAAR,MAAsBzJ,QAAQskB,SAAR,EAA1C,CAAH;AACC79B,iBAAO,EAAP;ACEK;;ADAN6N,mBAAW,KAAX;;AAEA,YAAGqE,OAAOC,QAAV;AACCtE,qBAAW,KAAKA,QAAhB;ACCK;;ADAN,YAAGA,QAAH;AACC7N,iBAAOkS,OAAOsH,WAAP,CAAmB,oBAAkBkzB,IAAIp3B,KAAtB,GAA4B,iBAA5B,GAAgDo3B,IAAIj6B,GAApD,GAA0D,gBAA7E,CAAP;AADD;AAGCzS,iBAAOuZ,QAAQC,WAAR,CAAoB,oBAAkBkzB,IAAIp3B,KAAtB,GAA4B,iBAA5B,GAAgDo3B,IAAIj6B,GAApD,GAA0D,gBAA9E,CAAP;ACEK;;ADDN,eAAO,iBAAei6B,IAAIj6B,GAAnB,GAAuB,0BAAvB,GAAiDzS,IAAjD,GAAsD,IAAtD,GAA6D0sC,IAAIxkC,IAAjE,GAAwE,MAA/E;AAjBF;AAAA,KAfQ,EAkCR;AACC9G,YAAM,gBADP;AAECmwC,aAAOhqC,EAAE,0BAAF,CAFR;AAGCiqC,iBAAW;AAHZ,KAlCQ,EAuCR;AACCpwC,YAAM,WADP;AAECmwC,aAAOhqC,EAAE,gBAAF,CAFR;AAGCiqC,iBAAW;AAHZ,KAvCQ,EA4CR;AACCpwC,YAAM,mBADP;AAECmwC,aAAOhqC,EAAE,gBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAAx3B,KAAA,EAAAy8B,iBAAA;;AAAA,YAAGjF,IAAI/tB,KAAJ,KAAa,WAAhB;AACCzJ,kBAAQw3B,IAAIxpB,cAAJ,IAAsB,UAA9B;ACEK;;ADANyuB,4BAAoBjF,IAAIkF,iBAAJ,IAAyB,EAA7C;AAEA,eAAO,qCAC4B18B,KAD5B,GACkC,KADlC,GACsCy8B,iBADtC,GACwD,QAD/D;AATF;AAAA,KA5CQ,CAFT;AA6DAE,SAAK,IA7DL;AA8DAC,kBAAc,KA9Dd;AA+DAC,iBAAa,CAAC,OAAD,EAAU,gBAAV,EAA4B,OAA5B,EAAqC,UAArC,CA/Db;AAgEAC,gBAAY,EAhEZ;AAiEAC,UAAM,KAjEN;AAkEAC,eAAW,IAlEX;AAmEAC,gBACC;AAAAC,eAAS;AAAT,KApED;AAqEAC,eAAW,KArEX;AAsEAC,oBAAgB,UAAC1d,QAAD,EAAWvH,MAAX;AACf,UAAAklB,YAAA,EAAA3H,QAAA,EAAArtB,KAAA,EAAAqoB,aAAA,EAAA/yB,GAAA,EAAA8K,IAAA,EAAArI,KAAA,EAAAosB,OAAA;;AAAA,WAAOrU,MAAP;AACC,eAAO;AAAC5a,eAAK,CAAC;AAAP,SAAP;ACGG;;ADDJivB,gBAAU9M,SAAStf,KAAnB;;AACA,WAAOosB,OAAP;AACC,aAAA9M,YAAA,QAAA/hB,MAAA+hB,SAAA4d,IAAA,YAAA3/B,IAAmBlT,MAAnB,GAAmB,MAAnB,GAAmB,MAAnB,IAA4B,CAA5B;AACC+hC,oBAAU9M,SAAS4d,IAAT,CAAcx3B,WAAd,CAA0B,OAA1B,EAAmC,CAAnC,CAAV;AAFF;ACMI;;ADHJ,WAAO0mB,OAAP;AACC,eAAO;AAACjvB,eAAK,CAAC;AAAP,SAAP;ACOG;;ADNJ6C,cAAQhD,GAAGsyB,MAAH,CAAUpyB,OAAV,CAAkBkvB,OAAlB,CAAR;;AACA,UAAG,CAACpsB,KAAJ;AACCsf,iBAASjW,KAAT,GAAiB,MAAjB;ACQG;;ADPJ,UAAG,CAACrJ,MAAMm9B,MAAN,CAAa5tB,QAAb,CAAsBwI,MAAtB,CAAJ;AAECud,mBAAW,EAAX;AACA2H,uBAAejgC,GAAGuyB,WAAH,CAAeryB,OAAf,CAAuB;AACrC8C,iBAAOosB,OAD8B;AAErC,kBAAQrU;AAF6B,SAAvB,CAAf;;AAIA,YAAGklB,YAAH;AACC3M,0BAAgBtzB,GAAGszB,aAAH,CAAiBnqB,IAAjB,CAAsB;AACrChJ,iBAAK;AACJuiB,mBAAKud,aAAa3M;AADd;AADgC,WAAtB,EAIb3P,KAJa,EAAhB;AAKA1Y,kBAAQjL,GAAGiL,KAAH,CAAS9B,IAAT,CAAc;AAAEnG,mBAAOosB;AAAT,WAAd,CAAR;AACAnkB,gBAAM5K,OAAN,CAAc,UAAC+/B,EAAD;AACb,gBAAGp0B,gBAAgBunB,UAAhB,CAA2B6M,EAA3B,EAA+BH,YAA/B,EAA6C3M,aAA7C,KAA+DtnB,gBAAgBwnB,QAAhB,CAAyB4M,EAAzB,EAA6BH,YAA7B,EAA2C3M,aAA3C,CAAlE;ACUQ,qBDTPgF,SAASziC,IAAT,CAAcuqC,GAAGjgC,GAAjB,CCSO;AACD;ADZR;ACcI;;ADVL,aAAAmiB,YAAA,QAAAjX,OAAAiX,SAAA4d,IAAA,YAAA70B,KAAmBhe,MAAnB,GAAmB,MAAnB,GAAmB,MAAnB,IAA4B,CAA5B;AACCi1B,mBAAS4d,IAAT,CAAc,CAAd,EAAiBxc,GAAjB,GAAuB,CAAC;AAACxgB,uBAAW6X;AAAZ,WAAD,EAAsB;AAAC3X,uBAAW2X;AAAZ,WAAtB,EAA2C;AAAC4e,yBAAa5e;AAAd,WAA3C,EAAkE;AAAC8Y,0BAAc9Y;AAAf,WAAlE,EACrB;AAAC6Y,sBAAU7Y;AAAX,WADqB,EACD;AAAEvX,kBAAM;AAAEkf,mBAAK4V;AAAP;AAAR,WADC,CAAvB;AADD;AAIC13B,YAAEy/B,MAAF,CAAS/d,QAAT,EAAmB;AAClBoB,iBAAK,CAAC;AAACxgB,yBAAW6X;AAAZ,aAAD,EAAsB;AAAC3X,yBAAW2X;AAAZ,aAAtB,EAA2C;AAAC4e,2BAAa5e;AAAd,aAA3C,EAAkE;AAAC8Y,4BAAc9Y;AAAf,aAAlE,EACJ;AAAC6Y,wBAAU7Y;AAAX,aADI,EACgB;AAAEvX,oBAAM;AAAEkf,qBAAK4V;AAAP;AAAR,aADhB;AADa,WAAnB;AAtBF;ACoEI;;ADzCJ,aAAOhW,QAAP;AA9GD;AAAA,GADyC,CCAzC;ADDF,G;;;;;;;;;;;;AEAA,IAAAge,6BAAA,EAAAC,oCAAA,EAAAC,qCAAA,EAAAC,iBAAA,EAAAC,6BAAA,EAAAC,yBAAA,EAAAC,uBAAA,EAAAC,kBAAA;;AAAA55B,QAAQ65B,IAAR,CAAa,iBAAb,IAAkC,IAAIC,WAAJ,EAAlC;;AAGAN,oBAAoB,UAAC/gC,MAAD;AACnB,MAAAshC,UAAA;AAAAA,eAAa,IAAIrhC,KAAJ,EAAb;;ACGC,MAAID,UAAU,IAAd,EAAoB;ADDrBA,WAAQW,OAAR,CAAgB,UAACC,CAAD;AACf,UAAAC,GAAA;;AAAA,UAAGD,EAAEnO,IAAF,KAAU,OAAb;ACIM,eDHLqO,QAAQC,GAAR,CAAY,+BAAZ,CCGK;ADJN,aAEK,IAAGH,EAAEnO,IAAF,KAAU,SAAb;ACIC,eAAOmO,KAAK,IAAL,GAAY,CAACC,MAAMD,EAAEZ,MAAT,KAAoB,IAApB,GAA2Ba,IDHxCF,OCGwC,CDHhC,UAACK,EAAD;ACIZ,iBDHNsgC,WAAWnrC,IAAX,CAAgB6K,EAAhB,CCGM;ADJP,SCGmD,CAA3B,GDHxB,MCGY,GDHZ,MCGK;ADJD;ACQC,eDJLsgC,WAAWnrC,IAAX,CAAgByK,CAAhB,CCIK;AACD;ADZN;ACcE;;ADLF,SAAO0gC,UAAP;AAZmB,CAApB;;AAeAH,qBAAqB,cAArB;;AAGAF,4BAA4B,UAAC5P,MAAD,EAASrxB,MAAT;AAC3B,MAAAshC,UAAA,EAAA5qC,GAAA,EAAAe,OAAA;AAAAA,YAAU;AACTvB,UAAM,WADG;AAETmpC,gBAAY/+B,GAAGuhB,SAFN;AAGT0f,SAAK,kBAHI;AAITC,cAAU;ACON,aDNHthC,OAAOuX,UAAP,CAAkBvR,SAASu7B,aAAT,CAAuBC,aAAzC,EAAwD,GAAxD,CCMG;ADXK;AAOTC,kBAAc,UAAC/wB,QAAD;AACb,UAAAgxB,YAAA,EAAAC,OAAA,EAAAtC,KAAA;AAAAsC,gBAAUzsB,EAAE,mBAAF,CAAV;;AACA,UAAGysB,QAAQl0C,MAAX;AACCk0C,gBAAQ,CAAR,EAAWC,OAAX,GAAqB,GAArB;ACQG;;ADPJ,UAAG,CAACv6B,QAAQyJ,QAAR,EAAD,IAAuB,CAACzJ,QAAQw6B,KAAR,EAA3B;AACC7hC,eAAOuX,UAAP,CAAkBvR,SAASu7B,aAAT,CAAuBC,aAAzC,EAAwD,GAAxD;AACAtsB,UAAE,gBAAF,EAAoBmW,SAApB,CAA8B,CAA9B,EAAiC0L,KAAjC,CAAuC;ACSjC,iBDRL7hB,EAAE,gBAAF,EAAoB4sB,gBAApB,CAAqC,QAArC,CCQK;ADTN;AAFD;AAKC5sB,UAAE,gBAAF,EAAoBmW,SAApB,CAA8B,CAA9B;ACUG;;ADRJgU,cAAQhqC,EAAE,kBAAF,CAAR;AACAqsC,qBAAehxB,SAASqxB,SAAT,CAAmB7e,MAAnB,GAA4B3Z,IAA5B,CAAiC,yCAAjC,CAAf;ACUG,aDTHm4B,aAAaM,IAAb,CAAkB,OAAlB,EAA2B3C,KAA3B,EAAkC7K,GAAlC,CAAsC,QAAtC,EAAgD,SAAhD,EAA2DyN,KAA3D,CAAiE;AAChE,YAAAC,MAAA,EAAA1C,KAAA;;AAAA,YAAG,CAACtqB,EAAE,IAAF,EAAQ3L,IAAR,CAAa,OAAb,EAAsB9b,MAA1B;AACC+xC,kBAAQtqB,EAAE,wGAAF,CAAR;;AACA,cAAG7N,QAAQyJ,QAAR,EAAH;AACC0uB,kBAAMhL,GAAN,CAAU;AACT/jB,qBAAM,MADG;AAET0xB,sBAAQ;AAFC,aAAV;AADD;AAMC3C,kBAAMhL,GAAN,CAAU;AACT/jB,qBAAM,MADG;AAET0xB,sBAAQ;AAFC,aAAV;ACcK;;ADVN3C,gBAAMwC,IAAN,CAAW,OAAX,EAAoB3C,KAApB,EAA2B2C,IAA3B,CAAgC,aAAhC,EAA+C3C,KAA/C;AACAnqB,YAAE,IAAF,EAAQ8B,KAAR,GAAgBP,MAAhB,CAAuB+oB,KAAvB;;AACA0C,mBAAS,UAACpqC,KAAD;AACR,gBAAAsqC,KAAA;;AAAA,gBAAGtqC,QAAQ,CAAX;AACCsqC,sBAAQjrC,KAAKkrC,IAAL,CAAU3xB,SAAS4xB,gBAAT,KAA8B5xB,SAAS6xB,eAAjD,CAAR;;AACA,kBAAGzqC,QAAQsqC,KAAX;AAECtqC,wBAAQsqC,KAAR;ACYO;;ADXRtqC;ACaO,qBDZP4Y,SAASqxB,SAAT,CAAmBS,SAAnB,GAA+BC,IAA/B,CAAoC3qC,KAApC,EAA2C4qC,IAA3C,CAAgD,MAAhD,CCYO;AACD;ADpBC,WAAT;;AAQAlD,gBAAMmD,IAAN,CAAW,UAAChvC,CAAD;AACV,gBAAAivC,WAAA;AAAAA,0BAAc1tB,EAAE,IAAF,EAAQvD,GAAR,EAAd;AACAuwB,mBAAOU,WAAP;ACgBM,mBDfN1tB,EAAE,IAAF,EAAQgO,MAAR,GAAiBpT,IAAjB,CAAsB,KAAtB,CCeM;ADlBP;ACoBK,iBDhBL0vB,MAAMqD,OAAN,CAAc,UAAClvC,CAAD;AACb,gBAAAivC,WAAA;;AAAA,gBAAGjvC,EAAEmvC,OAAF,CAAUl0C,QAAV,OAAwB,IAA3B;AACCg0C,4BAAc1tB,EAAE,IAAF,EAAQvD,GAAR,EAAd;ACkBO,qBDjBPuwB,OAAOU,WAAP,CCiBO;AACD;ADrBR,YCgBK;AAOD;ADlDN,QCSG;AD7BK;AAoDTG,gBAAY,UAACC,GAAD,EAAM9zC,IAAN,EAAY+zC,SAAZ;AACX,UAAGjjC,OAAO6J,QAAV;AACC,YAAG3a,KAAKqR,GAAL,KAAY2iC,WAAWl4B,OAAX,GAAqB0lB,MAArB,CAA4Bpd,UAA3C;ACsBM,iBDrBL0vB,IAAIG,YAAJ,CAAiB,OAAjB,EAA0B,UAA1B,CCqBK;ADvBP;ACyBI;AD9EI;AAwDT/D,aAAS,CACR;AACClwC,YAAM,KADP;AAECowC,iBAAW,KAFZ;AAGCC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAA4I,UAAA,EAAAC,OAAA,EAAAx/B,SAAA,EAAAy/B,yBAAA,EAAAzgC,QAAA,EAAA0gC,eAAA,EAAAC,cAAA,EAAAC,YAAA,EAAAC,iBAAA,EAAAC,aAAA,EAAAhjC,GAAA,EAAA8K,IAAA,EAAAm4B,sBAAA,EAAAC,MAAA;AAAAL,yBAAiBr2B,OAAOqtB,IAAI33B,QAAX,EAAqBuK,MAArB,CAA4B,YAA5B,CAAjB;AAEAvK,mBAAW23B,IAAI33B,QAAf;;AACA,YAAGgR,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAtB,IAAiCw/B,IAAI/tB,KAAJ,KAAa,OAAjD;AACC5J,qBAAW23B,IAAIv4B,UAAJ,IAAkBu4B,IAAI33B,QAAjC;ACyBK;;ADvBN,YAAGgR,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,QAAtB,IAAkC6Y,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,SAA3D;AACC6H,qBAAW23B,IAAI72B,WAAJ,IAAmB62B,IAAI72B,WAAlC;ACyBK;;ADvBN4/B,0BAAkBl8B,QAAQy8B,qBAAR,CAA8BjhC,QAA9B,CAAlB;AACAgB,oBAAY22B,IAAI32B,SAAhB;AACAw/B,kBAAU,EAAV;AACAO,iCAAyB,EAAzB;;AAEA,YAAGpJ,IAAIa,KAAJ,IAAa,GAAA16B,MAAA65B,IAAAT,WAAA,YAAAp5B,IAAkBgS,QAAlB,CAA2B3S,OAAOmb,MAAP,EAA3B,IAAC,MAAD,CAAb,IAA4DtH,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAArF;AACCqoC,oBAAU,8BAA8Br6B,QAAQC,EAAR,CAAW,mBAAX,CAA9B,GAAgE,YAA1E;AACA26B,mCAAyB,4BAA0B//B,SAA1B,GAAoC,SAApC,GAA6C22B,IAAIkF,iBAAjD,GAAmE,gBAA5F;AAFD;AAIC,cAAG7rB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAtB,IAAiCw/B,IAAIkF,iBAAxC;AACCkE,qCAAyB,4BAA0B//B,SAA1B,GAAoC,SAApC,GAA6C22B,IAAIkF,iBAAjD,GAAmE,gBAA5F;AADD;AAGCkE,qCAAyB,4BAA0B//B,SAA1B,GAAoC,QAA7D;AAPF;ACgCM;;ADvBNu/B,qBAAa,EAAb;;AACA,YAAG5I,IAAIW,eAAJ,IAAuBtnB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAhD;AACCooC,uBAAa,8BAA8Bp6B,QAAQC,EAAR,CAAW,sCAAX,EAAmD;AAAC8gB,sBAAUyQ,IAAIW;AAAf,WAAnD,CAA9B,GAAoH,WAAjI;AC2BK;;ADzBN0I,iBAAS,EAAT;;AAMA,YAAGhwB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAtB,IAAiCw/B,IAAIp4B,OAAJ,KAAe,KAAnD;AACCyhC,mBAAS,uCAAT;AADD,eAEK,IAAGhwB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,SAAtB,IAAmCw/B,IAAI3I,SAAJ,KAAiB,IAAvD;AACJgS,mBAAS,4BAAT;ACsBK;;ADpBNJ,uBAAe,EAAf;AACAC,4BAAoB,EAApB;AACAC,wBAAA,CAAAl4B,OAAA+uB,IAAAl4B,MAAA,YAAAmJ,KAA4Bs4B,QAA5B,GAA4B,MAA5B;;AACA,gBAAOJ,aAAP;AAAA,eACM,IADN;AAEED,gCAAoB,QAApB;AADI;;AADN,eAGM,IAHN;AAIEA,gCAAoB,SAApB;AADI;;AAHN,eAKM,IALN;AAMEA,gCAAoB,OAApB;AANF;;AAOA,YAAGA,iBAAH;AACCJ,sCAA4B,mCAAiCI,iBAA7D;ACyBK;;ADvBN,eAAO,oCAC6BG,MAD7B,GACoC,oCADpC,GAEwBP,yBAFxB,GAEkD,IAFlD,GAEsD9I,IAAIxkC,IAF1D,GAEiEqtC,OAFjE,GAE2ED,UAF3E,GAEsF,WAFtF,GAGK5I,IAAI/2B,cAHT,GAGwB,gDAHxB,GAK2BmgC,sBAL3B,GAKkD,4CALlD,GAMsCJ,cANtC,GAMqD,IANrD,GAMyDD,eANzD,GAMyE,iBANhF;AAvDF;AAAA,KADQ,EAkER;AACCr0C,YAAM,6BADP;AAECmwC,aAAOhqC,EAAE,uCAAF,CAFR;AAGC2uC,eAAS;AAHV,KAlEQ,EAuER;AACC90C,YAAM,MADP;AAECmwC,aAAOhqC,EAAE,gBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAA4I,UAAA,EAAAC,OAAA,EAAAC,yBAAA,EAAAI,iBAAA,EAAAC,aAAA,EAAAhjC,GAAA,EAAA8K,IAAA,EAAAm4B,sBAAA,EAAAC,MAAA;AAAAR,kBAAU,EAAV;AACAO,iCAAyB,EAAzB;;AAEA,YAAGpJ,IAAIa,KAAJ,IAAa,GAAA16B,MAAA65B,IAAAT,WAAA,YAAAp5B,IAAkBgS,QAAlB,CAA2B3S,OAAOmb,MAAP,EAA3B,IAAC,MAAD,CAAb,IAA4DtH,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAArF;AACCqoC,oBAAU,8BAA8Br6B,QAAQC,EAAR,CAAW,mBAAX,CAA9B,GAAgE,YAA1E;ACgBK;;ADdNm6B,qBAAa,EAAb;;AACA,YAAG5I,IAAIW,eAAP;AACCiI,uBAAa,8BAA8Bp6B,QAAQC,EAAR,CAAW,sCAAX,EAAmD;AAAC8gB,sBAAUyQ,IAAIW;AAAf,WAAnD,CAA9B,GAAoH,WAAjI;ACkBK;;ADhBN0I,iBAAS,EAAT;;AAEA,YAAGhwB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAtB,IAAiCw/B,IAAIp4B,OAAJ,KAAe,KAAnD;AACCyhC,mBAAS,uCAAT;AADD,eAEK,IAAGhwB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,SAAtB,IAAmCw/B,IAAI3I,SAAJ,KAAiB,IAAvD;AACJgS,mBAAS,4BAAT;ACiBK;;ADfNH,4BAAoB,EAApB;AACAC,wBAAA,CAAAl4B,OAAA+uB,IAAAl4B,MAAA,YAAAmJ,KAA4Bs4B,QAA5B,GAA4B,MAA5B;;AACA,gBAAOJ,aAAP;AAAA,eACM,IADN;AAEED,gCAAoB,QAApB;AADI;;AADN,eAGM,IAHN;AAIEA,gCAAoB,SAApB;AADI;;AAHN,eAKM,IALN;AAMEA,gCAAoB,OAApB;AANF;;AAOA,YAAGA,iBAAH;AACCJ,sCAA4B,mCAAiCI,iBAA7D;ACoBK;;ADnBN,eAAO,oCAC4BG,MAD5B,GACmC,oCADnC,GAEuBP,yBAFvB,GAEiD,IAFjD,GAEqD9I,IAAIxkC,IAFzD,GAEgEqtC,OAFhE,GAE0ED,UAF1E,GAEqF,QAF5F;AAhCF;AAoCCY,eAAS,KApCV;AAqCC1E,iBAAW;AArCZ,KAvEQ,EA8GR;AACCpwC,YAAM,gBADP;AAECmwC,aAAOhqC,EAAE,0BAAF,CAFR;AAGC2uC,eAAS,KAHV;AAIC1E,iBAAW;AAJZ,KA9GQ,EAoHR;AACCpwC,YAAM,aADP;AAECmwC,aAAOhqC,EAAE,uBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAGA,IAAI72B,WAAP;AACC,iBAAOwJ,OAAOqtB,IAAI72B,WAAX,EAAwByJ,MAAxB,CAA+B,kBAA/B,CAAP;ACiBK;ADtBR;AAOC42B,eAAS,KAPV;AAQC1E,iBAAW;AARZ,KApHQ,EA8HR;AACCpwC,YAAM,WADP;AAECmwC,aAAOhqC,EAAE,gBAAF,CAFR;AAGC2uC,eAAS,KAHV;AAIC1E,iBAAW;AAJZ,KA9HQ,EAoIR;AACCpwC,YAAM,mBADP;AAECmwC,aAAOhqC,EAAE,6BAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAAyJ,MAAA,EAAAjhC,KAAA,EAAAy8B,iBAAA;;AAAA,YAAGjF,IAAI/tB,KAAJ,KAAa,WAAhB;AACCzJ,kBAAQw3B,IAAIxpB,cAAJ,IAAsB,UAA9B;ACiBK;;ADfNyuB,4BAAoBjF,IAAIkF,iBAAJ,IAAyB,EAA7C;AAEAuE,iBAAS,EAAT;;AAEA,YAAGzJ,IAAIc,QAAJ,GAAe,CAAlB;AACC2I,mBAASj7B,QAAQC,EAAR,CAAW,QAAX,CAAT;ACeK;;ADbN,eAAO,qCAC2BjG,KAD3B,GACiC,KADjC,GACqCy8B,iBADrC,GACyDwE,MADzD,GACgE,QADvE;AAdF;AAiBCD,eAAS,KAjBV;AAkBC1E,iBAAW;AAlBZ,KApIQ,EAwJR;AACCpwC,YAAM,UADP;AAECmwC,aAAOhqC,EAAE,oBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,eAAOrtB,OAAOqtB,IAAI33B,QAAX,EAAqBuK,MAArB,CAA4B,kBAA5B,CAAP;AAJF;AAMC42B,eAAS,KANV;AAOC1E,iBAAW;AAPZ,KAxJQ,EAiKR;AACCpwC,YAAM,YADP;AAECmwC,aAAOhqC,EAAE,sBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAGA,IAAIv4B,UAAP;AACC,iBAAOkL,OAAOqtB,IAAIv4B,UAAX,EAAuBmL,MAAvB,CAA8B,kBAA9B,CAAP;ACYK;ADjBR;AAOC42B,eAAS,KAPV;AAQC1E,iBAAW;AARZ,KAjKQ,EA2KR;AACCpwC,YAAM,gBADP;AAECqwC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAGA,IAAIY,cAAP;AACC,iBAAOjuB,OAAOqtB,IAAIY,cAAX,EAA2BhuB,MAA3B,CAAkC,kBAAlC,CAAP;ACYK;ADhBR;AAMC42B,eAAS,KANV;AAOC1E,iBAAW;AAPZ,KA3KQ,EAoLR;AACCpwC,YAAM,UADP;AAEC80C,eAAS;AAFV,KApLQ,EAwLR;AACC90C,YAAM,UADP;AAEC80C,eAAS;AAFV,KAxLQ,EA4LR;AACC90C,YAAM,aADP;AAECqwC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAA75B,GAAA;;AAAA,aAAA65B,OAAA,QAAA75B,MAAA65B,IAAAl4B,MAAA,YAAA3B,IAAgBujC,WAAhB,GAAgB,MAAhB,GAAgB,MAAhB,KAA+B1J,IAAIl4B,MAAJ,CAAW4hC,WAAX,KAA0B,MAAzD;AACC,cAAA1J,OAAA,OAAGA,IAAKn2B,WAAR,GAAQ,MAAR;AACC,mBAAOhP,EAAE,KAAF,CAAP;ACWM;;ADVP,iBAAOA,EAAE,IAAF,CAAP;ACYK;ADlBR;AAOC2uC,eAAS,KAPV;AAQC1E,iBAAW;AARZ,KA5LQ,CAxDA;AA+PTK,SAAQ;AAEP,UAAGt4B,QAAQyJ,QAAR,EAAH;ACaK,eDZJ,ICYI;ADbL;ACeK,eDZJ,KCYI;AACD;ADlBG,OA/PC;AAqQTiM,WAAO,CAAC,CAAC,CAAD,EAAI,MAAJ,CAAD,CArQE;AAsQT8iB,iBAAa,CAAC,MAAD,EAAS,MAAT,EAAiB,aAAjB,EAAgC,OAAhC,EAAyC,OAAzC,EAAkD,WAAlD,EAA+D,cAA/D,EACZ,cADY,EACI,OADJ,EACa,UADb,EACyB,SADzB,EACoC,mBADpC,EACyD,QADzD,EACmE,UADnE,EAC+E,gBAD/E,EACiG,WADjG,EAC8G,WAD9G,EAC2H,iBAD3H,CAtQJ;AAwQTD,kBAAc,IAxQL;AAyQTuE,gBAAY,CAAC,EAAD,EAAI,EAAJ,EAAO,EAAP,EAAU,EAAV,EAAa,EAAb,EAAgB,GAAhB,CAzQH;AA0QTrE,gBAAY,EA1QH;AA2QTC,UAAM,KA3QG;AA4QTC,eAAW,IA5QF;AA6QTC,gBACC;AAAAC,eAAS;AAAT,KA9QQ;AA+QTC,eAAW,KA/QF;AAgRTC,oBAAgB,UAAC1d,QAAD,EAAWvH,MAAX;AACf,UAAAxa,GAAA,EAAAyC,KAAA,EAAAghC,UAAA;;AAAA,WAAOjpB,MAAP;AACC,eAAO;AAAC5a,eAAK,CAAC;AAAP,SAAP;ACkBG;;ADjBJ6C,cAAQsf,SAAStf,KAAjB;;AACA,WAAOA,KAAP;AACC,aAAAsf,YAAA,QAAA/hB,MAAA+hB,SAAA4d,IAAA,YAAA3/B,IAAmBlT,MAAnB,GAAmB,MAAnB,GAAmB,MAAnB,IAA4B,CAA5B;AACC2V,kBAAQsf,SAAS4d,IAAT,CAAcx3B,WAAd,CAA0B,OAA1B,EAAmC,CAAnC,CAAR;AAFF;ACsBI;;ADnBJ,WAAO1F,KAAP;AACC,eAAO;AAAC7C,eAAK,CAAC;AAAP,SAAP;ACuBG;;ADtBJ6jC,mBAAahkC,GAAGuyB,WAAH,CAAeryB,OAAf,CAAuB;AAACoB,cAAMyZ,MAAP;AAAe/X,eAAOA;AAAtB,OAAvB,EAAqD;AAACtD,gBAAQ;AAACS,eAAK;AAAN;AAAT,OAArD,CAAb;;AACA,WAAO6jC,UAAP;AACC,eAAO;AAAC7jC,eAAK,CAAC;AAAP,SAAP;ACiCG;;ADhCJ,aAAOmiB,QAAP;AA5RQ;AA6RT2hB,gBAAY;AA7RH,GAAV;;AA0SA,MAAGlT,MAAH;AACC36B,UAAM,iBAAiB26B,MAAvB;AAEA55B,YAAQvB,IAAR,GAAeQ,GAAf;AAEAuoC,kBAAcpd,SAAd,CAAwB7hB,MAAxB,GAAiCA,MAAjC;AAEAshC,iBAAaP,kBAAkB9B,cAAcpd,SAAd,CAAwB7hB,MAA1C,CAAb;AAEAshC,eAAW3gC,OAAX,CAAmB,UAACC,CAAD;AAClB,UAAGA,EAAEnO,IAAF,KAAU,OAAV,IAAqBmO,EAAE4jC,eAA1B;ACoBK,eDnBJ/sC,QAAQ6nC,OAAR,CAAgBnpC,IAAhB,CACC;AAAA/G,gBAAOwR,EAAE1K,IAAF,IAAU0K,EAAEkK,IAAnB;AACAy0B,iBAAOhqC,EAAEqL,EAAE1K,IAAF,IAAU0K,EAAEkK,IAAd,CADP;AAEAo5B,mBAAS,KAFT;AAGA1E,qBAAW,KAHX;AAIAC,kBAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AAEP,gBAAA9rC,KAAA,EAAA4T,MAAA;AAAAA,qBAASk4B,IAAIl4B,MAAJ,IAAc,EAAvB;AAEA5T,oBAAQ4T,OAAO5B,EAAEkK,IAAT,CAAR;;AAEA,oBAAOlK,EAAEnO,IAAT;AAAA,mBACM,MADN;AAEE7D,iCAAA,OAAQA,MAAOsH,IAAf,GAAe,MAAf;AADI;;AADN,mBAGM,OAHN;AAIEtH,iCAAA,OAAQA,MAAOqa,QAAf,GAAe,MAAf;AADI;;AAHN,mBAKM,MALN;AAME,oBAAGra,KAAH;AACCA,0BAAQye,OAAOze,KAAP,EAAc0e,MAAd,CAAqB,YAArB,CAAR;ACoBQ;;ADtBL;;AALN,mBAQM,UARN;AASE,oBAAG1e,KAAH;AACCA,0BAAQye,OAAOze,KAAP,EAAc0e,MAAd,CAAqB,kBAArB,CAAR;ACsBQ;;ADxBL;;AARN,mBAWM,UAXN;AAYE,oBAAG1e,UAAS,IAAT,IAAiBA,UAAS,MAA7B;AACCA,0BAAQsa,QAAQC,EAAR,CAAW,yBAAX,CAAR;AADD;AAGCva,0BAAQsa,QAAQC,EAAR,CAAW,wBAAX,CAAR;ACwBQ;;AD5BL;;AAXN,mBAgBM,OAhBN;AAiBE,oBAAGva,KAAH;AACC,sBAAGsS,EAAEjS,OAAF,CAAUL,KAAV,CAAH;AACCA,4BAAQsS,EAAEsY,KAAF,CAAQ5qB,KAAR,EAAe,QAAf,EAAyBE,QAAzB,EAAR;AADD;AAGCF,4BAAQA,MAAM,QAAN,CAAR;AAJF;AC+BS;;ADhDX;;AAuBA,mBAAOA,KAAP;AAjCD;AAAA,SADD,CCmBI;AA6CD;ADlEL;ACoEC;;AD7BF,SAAO6I,OAAP;AA3V2B,CAA5B;;AA+VAupC,gCAAgC,UAAC3P,MAAD,EAASrxB,MAAT;AAC/B,MAAAshC,UAAA,EAAA5qC,GAAA,EAAAe,OAAA;AAAAA,YAAU;AACTvB,UAAM,gBADG;AAETmpC,gBAAY/+B,GAAGe,cAFN;AAGTkgC,SAAK,wBAHI;AAITC,cAAU;AC+BN,aD9BHthC,OAAOuX,UAAP,CAAkBvR,SAASu7B,aAAT,CAAuBC,aAAzC,EAAwD,GAAxD,CC8BG;ADnCK;AAOTC,kBAAc,UAAC/wB,QAAD;AACb,UAAAgxB,YAAA,EAAAC,OAAA,EAAAtC,KAAA;AAAAsC,gBAAUzsB,EAAE,mBAAF,CAAV;;AACA,UAAGysB,QAAQl0C,MAAX;AACCk0C,gBAAQ,CAAR,EAAWC,OAAX,GAAqB,GAArB;ACgCG;;AD/BJ,UAAG,CAACv6B,QAAQyJ,QAAR,EAAD,IAAuB,CAACzJ,QAAQw6B,KAAR,EAA3B;AACC7hC,eAAOuX,UAAP,CAAkBvR,SAASu7B,aAAT,CAAuBC,aAAzC,EAAwD,GAAxD;AACAtsB,UAAE,gBAAF,EAAoBmW,SAApB,CAA8B,CAA9B,EAAiC0L,KAAjC,CAAuC;ACiCjC,iBDhCL7hB,EAAE,gBAAF,EAAoB4sB,gBAApB,CAAqC,QAArC,CCgCK;ADjCN;AAFD;AAKC5sB,UAAE,gBAAF,EAAoBmW,SAApB,CAA8B,CAA9B;ACkCG;;ADhCJgU,cAAQhqC,EAAE,kBAAF,CAAR;AACAqsC,qBAAehxB,SAASqxB,SAAT,CAAmB7e,MAAnB,GAA4B3Z,IAA5B,CAAiC,yCAAjC,CAAf;ACkCG,aDjCHm4B,aAAaM,IAAb,CAAkB,OAAlB,EAA2B3C,KAA3B,EAAkC7K,GAAlC,CAAsC,QAAtC,EAAgD,SAAhD,EAA2DyN,KAA3D,CAAiE;AAChE,YAAAC,MAAA,EAAA1C,KAAA;;AAAA,YAAG,CAACtqB,EAAE,IAAF,EAAQ3L,IAAR,CAAa,OAAb,EAAsB9b,MAA1B;AACC+xC,kBAAQtqB,EAAE,wGAAF,CAAR;;AACA,cAAG7N,QAAQyJ,QAAR,EAAH;AACC0uB,kBAAMhL,GAAN,CAAU;AACT/jB,qBAAM,MADG;AAET0xB,sBAAQ;AAFC,aAAV;AADD;AAMC3C,kBAAMhL,GAAN,CAAU;AACT/jB,qBAAM,MADG;AAET0xB,sBAAQ;AAFC,aAAV;ACsCK;;ADlCN3C,gBAAMwC,IAAN,CAAW,OAAX,EAAoB3C,KAApB,EAA2B2C,IAA3B,CAAgC,aAAhC,EAA+C3C,KAA/C;AACAnqB,YAAE,IAAF,EAAQ8B,KAAR,GAAgBP,MAAhB,CAAuB+oB,KAAvB;;AACA0C,mBAAS,UAACpqC,KAAD;AACR,gBAAAsqC,KAAA;;AAAA,gBAAGtqC,QAAQ,CAAX;AACCsqC,sBAAQjrC,KAAKkrC,IAAL,CAAU3xB,SAAS4xB,gBAAT,KAA8B5xB,SAAS6xB,eAAjD,CAAR;;AACA,kBAAGzqC,QAAQsqC,KAAX;AAECtqC,wBAAQsqC,KAAR;ACoCO;;ADnCRtqC;ACqCO,qBDpCP4Y,SAASqxB,SAAT,CAAmBS,SAAnB,GAA+BC,IAA/B,CAAoC3qC,KAApC,EAA2C4qC,IAA3C,CAAgD,MAAhD,CCoCO;AACD;AD5CC,WAAT;;AAQAlD,gBAAMmD,IAAN,CAAW,UAAChvC,CAAD;AACV,gBAAAivC,WAAA;AAAAA,0BAAc1tB,EAAE,IAAF,EAAQvD,GAAR,EAAd;AACAuwB,mBAAOU,WAAP;ACwCM,mBDvCN1tB,EAAE,IAAF,EAAQgO,MAAR,GAAiBpT,IAAjB,CAAsB,KAAtB,CCuCM;AD1CP;AC4CK,iBDxCL0vB,MAAMqD,OAAN,CAAc,UAAClvC,CAAD;AACb,gBAAAivC,WAAA;;AAAA,gBAAGjvC,EAAEmvC,OAAF,CAAUl0C,QAAV,OAAwB,IAA3B;AACCg0C,4BAAc1tB,EAAE,IAAF,EAAQvD,GAAR,EAAd;AC0CO,qBDzCPuwB,OAAOU,WAAP,CCyCO;AACD;AD7CR,YCwCK;AAOD;AD1EN,QCiCG;ADrDK;AAoDTG,gBAAY,UAACC,GAAD,EAAM9zC,IAAN,EAAY+zC,SAAZ;AACX,UAAGjjC,OAAO6J,QAAV;AACC,YAAG3a,KAAKqS,QAAL,KAAiB2hC,WAAWl4B,OAAX,GAAqB0lB,MAArB,CAA4Bpd,UAAhD;AC8CM,iBD7CL0vB,IAAIG,YAAJ,CAAiB,OAAjB,EAA0B,UAA1B,CC6CK;AD/CP;ACiDI;ADtGI;AAwDT/D,aAAS,CACR;AACClwC,YAAM,KADP;AAECowC,iBAAW,KAFZ;AAGCC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAA4I,UAAA,EAAAC,OAAA,EAAAx/B,SAAA,EAAAy/B,yBAAA,EAAAzgC,QAAA,EAAA0gC,eAAA,EAAAC,cAAA,EAAAC,YAAA,EAAAC,iBAAA,EAAAC,aAAA,EAAAhjC,GAAA,EAAAijC,sBAAA,EAAAC,MAAA;AAAAL,yBAAiBr2B,OAAOqtB,IAAI33B,QAAX,EAAqBuK,MAArB,CAA4B,YAA5B,CAAjB;AAEAvK,mBAAW23B,IAAI33B,QAAf;;AACA,YAAGgR,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAtB,IAAiCw/B,IAAIv2B,cAAJ,KAAsB,OAA1D;AACCpB,qBAAW23B,IAAIv4B,UAAJ,IAAkBu4B,IAAI33B,QAAjC;ACiDK;;AD/CN,YAAGgR,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,QAAzB;AACC6H,qBAAW23B,IAAI72B,WAAJ,IAAmB62B,IAAI33B,QAAlC;ACiDK;;AD/CN0gC,0BAAkBl8B,QAAQy8B,qBAAR,CAA8BjhC,QAA9B,CAAlB;AACAgB,oBAAY22B,IAAI32B,SAAhB;AACAw/B,kBAAU,EAAV;AACAO,iCAAyB,EAAzB;;AAEA,YAAGpJ,IAAIjoC,IAAJ,KAAY,IAAZ,IAAoBshB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAA7C;AACCqoC,oBAAU,8BAA8Br6B,QAAQC,EAAR,CAAW,mBAAX,CAA9B,GAAgE,YAA1E;AACA26B,mCAAyB,4BAA0B//B,SAA1B,GAAoC,SAApC,GAA6C22B,IAAIz2B,SAAjD,GAA2D,gBAApF;AAFD;AAIC,cAAGy2B,IAAIz2B,SAAP;AACC6/B,qCAAyB,4BAA0B//B,SAA1B,GAAoC,SAApC,GAA6C22B,IAAIz2B,SAAjD,GAA2D,gBAApF;AADD;AAGC6/B,qCAAyB,4BAA0B//B,SAA1B,GAAoC,QAA7D;AAPF;ACwDM;;AD/CNu/B,qBAAa,EAAb;;AACA,YAAG5I,IAAIW,eAAJ,IAAuBtnB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAhD;AACCooC,uBAAa,8BAA8Bp6B,QAAQC,EAAR,CAAW,sCAAX,EAAmD;AAAC8gB,sBAAUyQ,IAAIW;AAAf,WAAnD,CAA9B,GAAoH,WAAjI;ACmDK;;ADjDN0I,iBAAS,EAAT;;AAEA,YAAGhwB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAtB,IAAiCw/B,IAAIp4B,OAAJ,KAAe,KAAnD;AACCyhC,mBAAS,uCAAT;AADD,eAEK,IAAGhwB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,SAAtB,IAAmCw/B,IAAI3I,SAAJ,KAAiB,IAAvD;AACJgS,mBAAS,4BAAT;ACkDK;;ADhDNJ,uBAAe,EAAf;AACAC,4BAAoB,EAApB;AACAC,wBAAA,CAAAhjC,MAAA65B,IAAAl4B,MAAA,YAAA3B,IAA4BojC,QAA5B,GAA4B,MAA5B;;AACA,gBAAOJ,aAAP;AAAA,eACM,IADN;AAEED,gCAAoB,QAApB;AADI;;AADN,eAGM,IAHN;AAIEA,gCAAoB,SAApB;AADI;;AAHN,eAKM,IALN;AAMEA,gCAAoB,OAApB;AANF;;AAOA,YAAGA,iBAAH;AACCJ,sCAA4B,mCAAiCI,iBAA7D;ACqDK;;ADnDN,eAAO,oCAC6BG,MAD7B,GACoC,oCADpC,GAEwBP,yBAFxB,GAEkD,IAFlD,GAEsD9I,IAAIn3B,aAF1D,GAE0EggC,OAF1E,GAEoFD,UAFpF,GAE+F,WAF/F,GAGK5I,IAAI/2B,cAHT,GAGwB,gDAHxB,GAK2BmgC,sBAL3B,GAKkD,4CALlD,GAMsCJ,cANtC,GAMqD,IANrD,GAMyDD,eANzD,GAMyE,iBANhF;AAnDF;AAAA,KADQ,EA8DR;AACCr0C,YAAM,6BADP;AAECmwC,aAAOhqC,EAAE,uCAAF,CAFR;AAGC2uC,eAAS;AAHV,KA9DQ,EAmER;AACC90C,YAAM,eADP;AAECmwC,aAAOhqC,EAAE,gBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAA4I,UAAA,EAAAC,OAAA,EAAAC,yBAAA,EAAAI,iBAAA,EAAAC,aAAA,EAAAhjC,GAAA,EAAA8K,IAAA,EAAAm4B,sBAAA,EAAAC,MAAA;AAAAR,kBAAU,EAAV;AACAO,iCAAyB,EAAzB;;AAEA,YAAGpJ,IAAIa,KAAJ,IAAa,GAAA16B,MAAA65B,IAAAT,WAAA,YAAAp5B,IAAkBgS,QAAlB,CAA2B3S,OAAOmb,MAAP,EAA3B,IAAC,MAAD,CAAb,IAA4DtH,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAArF;AACCqoC,oBAAU,8BAA8Br6B,QAAQC,EAAR,CAAW,mBAAX,CAA9B,GAAgE,YAA1E;AC4CK;;AD1CNm6B,qBAAa,EAAb;;AACA,YAAG5I,IAAIW,eAAP;AACCiI,uBAAa,8BAA8Bp6B,QAAQC,EAAR,CAAW,sCAAX,EAAmD;AAAC8gB,sBAAUyQ,IAAIW;AAAf,WAAnD,CAA9B,GAAoH,WAAjI;AC8CK;;AD5CN0I,iBAAS,EAAT;;AAEA,YAAGhwB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAtB,IAAiCw/B,IAAIp4B,OAAJ,KAAe,KAAnD;AACCyhC,mBAAS,uCAAT;AADD,eAEK,IAAGhwB,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,SAAtB,IAAmCw/B,IAAI3I,SAAJ,KAAiB,IAAvD;AACJgS,mBAAS,4BAAT;AC6CK;;AD3CNH,4BAAoB,EAApB;AACAC,wBAAA,CAAAl4B,OAAA+uB,IAAAl4B,MAAA,YAAAmJ,KAA4Bs4B,QAA5B,GAA4B,MAA5B;;AACA,gBAAOJ,aAAP;AAAA,eACM,IADN;AAEED,gCAAoB,QAApB;AADI;;AADN,eAGM,IAHN;AAIEA,gCAAoB,SAApB;AADI;;AAHN,eAKM,IALN;AAMEA,gCAAoB,OAApB;AANF;;AAOA,YAAGA,iBAAH;AACCJ,sCAA4B,mCAAiCI,iBAA7D;ACgDK;;AD/CN,eAAO,oCAC4BG,MAD5B,GACmC,oCADnC,GAEuBP,yBAFvB,GAEiD,IAFjD,GAEqD9I,IAAIn3B,aAFzD,GAEyEggC,OAFzE,GAEmFD,UAFnF,GAE8F,QAFrG;AAhCF;AAoCCY,eAAS,KApCV;AAqCC1E,iBAAW;AArCZ,KAnEQ,EA0GR;AACCpwC,YAAM,gBADP;AAECmwC,aAAOhqC,EAAE,0BAAF,CAFR;AAGC2uC,eAAS,KAHV;AAIC1E,iBAAW;AAJZ,KA1GQ,EAgHR;AACCpwC,YAAM,aADP;AAECmwC,aAAOhqC,EAAE,uBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAGA,IAAI72B,WAAP;AACC,iBAAOwJ,OAAOqtB,IAAI72B,WAAX,EAAwByJ,MAAxB,CAA+B,kBAA/B,CAAP;AC6CK;ADlDR;AAOC42B,eAAS,KAPV;AAQC1E,iBAAW;AARZ,KAhHQ,EA0HR;AACCpwC,YAAM,WADP;AAECmwC,aAAOhqC,EAAE,gBAAF,CAFR;AAGC2uC,eAAS,KAHV;AAIC1E,iBAAW;AAJZ,KA1HQ,EAgIR;AACCpwC,YAAM,WADP;AAECmwC,aAAOhqC,EAAE,6BAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAAyJ,MAAA,EAAAjhC,KAAA,EAAAy8B,iBAAA;;AAAA,YAAGjF,IAAIv2B,cAAJ,KAAsB,WAAzB;AACCjB,kBAAQw3B,IAAIx3B,KAAJ,IAAa,UAArB;AC6CK;;AD3CNy8B,4BAAoBjF,IAAIz2B,SAAJ,IAAiB,EAArC;AAEAkgC,iBAAS,EAAT;;AAEA,YAAGzJ,IAAIc,QAAJ,GAAe,CAAlB;AACC2I,mBAASj7B,QAAQC,EAAR,CAAW,QAAX,CAAT;AC2CK;;ADzCN,eAAO,qCAC2BjG,KAD3B,GACiC,KADjC,GACqCy8B,iBADrC,GACyDwE,MADzD,GACgE,QADvE;AAdF;AAiBCD,eAAS,KAjBV;AAkBC1E,iBAAW;AAlBZ,KAhIQ,EAoJR;AACCpwC,YAAM,UADP;AAECmwC,aAAOhqC,EAAE,oBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,eAAOrtB,OAAOqtB,IAAI33B,QAAX,EAAqBuK,MAArB,CAA4B,kBAA5B,CAAP;AAJF;AAMC42B,eAAS,KANV;AAOC1E,iBAAW;AAPZ,KApJQ,EA6JR;AACCpwC,YAAM,YADP;AAECmwC,aAAOhqC,EAAE,sBAAF,CAFR;AAGCkqC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAGA,IAAIv4B,UAAP;AACC,iBAAOkL,OAAOqtB,IAAIv4B,UAAX,EAAuBmL,MAAvB,CAA8B,kBAA9B,CAAP;ACwCK;AD7CR;AAOC42B,eAAS,KAPV;AAQC1E,iBAAW;AARZ,KA7JQ,EAuKR;AACCpwC,YAAM,aADP;AAECqwC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAGA,IAAIt3B,WAAP;AACC,iBAAOiK,OAAOqtB,IAAIt3B,WAAX,EAAwBkK,MAAxB,CAA+B,kBAA/B,CAAP;ACwCK;AD5CR;AAMC42B,eAAS,KANV;AAOC1E,iBAAW;AAPZ,KAvKQ,EAgLR;AACCpwC,YAAM,UADP;AAEC80C,eAAS;AAFV,KAhLQ,EAoLR;AACC90C,YAAM,UADP;AAEC80C,eAAS;AAFV,KApLQ,EAwLR;AACC90C,YAAM,aADP;AAECqwC,cAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AACP,YAAA75B,GAAA;;AAAA,aAAA65B,OAAA,QAAA75B,MAAA65B,IAAAl4B,MAAA,YAAA3B,IAAgBujC,WAAhB,GAAgB,MAAhB,GAAgB,MAAhB,KAA+B1J,IAAIl4B,MAAJ,CAAW4hC,WAAX,KAA0B,MAAzD;AACC,cAAA1J,OAAA,OAAGA,IAAKn2B,WAAR,GAAQ,MAAR;AACC,mBAAOhP,EAAE,KAAF,CAAP;ACuCM;;ADtCP,iBAAOA,EAAE,IAAF,CAAP;ACwCK;AD9CR;AAOC2uC,eAAS,KAPV;AAQC1E,iBAAW;AARZ,KAxLQ,CAxDA;AA2PTK,SAAQ;AAEP,UAAGt4B,QAAQyJ,QAAR,EAAH;ACyCK,eDxCJ,ICwCI;ADzCL;AC2CK,eDxCJ,KCwCI;AACD;AD9CG,OA3PC;AAiQTiM,WAAO,CAAC,CAAC,CAAD,EAAI,MAAJ,CAAD,CAjQE;AAkQT8iB,iBAAa,CAAC,UAAD,EAAa,MAAb,EAAqB,MAArB,EAA6B,aAA7B,EAA4C,gBAA5C,EAA8D,OAA9D,EAAuE,WAAvE,EAAoF,cAApF,EACZ,cADY,EACI,MADJ,EACY,SADZ,EACuB,WADvB,EACoC,QADpC,EAC8C,UAD9C,EAC0D,gBAD1D,EAC4E,WAD5E,EACyF,WADzF,EACsG,iBADtG,CAlQJ;AAoQTD,kBAAc,IApQL;AAqQTuE,gBAAY,CAAC,EAAD,EAAI,EAAJ,EAAO,EAAP,EAAU,EAAV,EAAa,EAAb,EAAgB,GAAhB,CArQH;AAsQTrE,gBAAY,EAtQH;AAuQTC,UAAM,KAvQG;AAwQTC,eAAW,IAxQF;AAyQTC,gBACC;AAAAC,eAAS;AAAT,KA1QQ;AA2QTC,eAAW,KA3QF;AA4QTC,oBAAgB,UAAC1d,QAAD,EAAWvH,MAAX;AACf,UAAAxa,GAAA,EAAAyC,KAAA,EAAAghC,UAAA;;AAAA,WAAOjpB,MAAP;AACC,eAAO;AAAC5a,eAAK,CAAC;AAAP,SAAP;AC8CG;;AD7CJ6C,cAAQsf,SAAStf,KAAjB;;AACA,WAAOA,KAAP;AACC,aAAAsf,YAAA,QAAA/hB,MAAA+hB,SAAA4d,IAAA,YAAA3/B,IAAmBlT,MAAnB,GAAmB,MAAnB,GAAmB,MAAnB,IAA4B,CAA5B;AACC2V,kBAAQsf,SAAS4d,IAAT,CAAcx3B,WAAd,CAA0B,OAA1B,EAAmC,CAAnC,CAAR;AAFF;ACkDI;;AD/CJ,WAAO1F,KAAP;AACC,eAAO;AAAC7C,eAAK,CAAC;AAAP,SAAP;ACmDG;;ADlDJ6jC,mBAAahkC,GAAGuyB,WAAH,CAAeryB,OAAf,CAAuB;AAACoB,cAAMyZ,MAAP;AAAe/X,eAAOA;AAAtB,OAAvB,EAAqD;AAACtD,gBAAQ;AAACS,eAAK;AAAN;AAAT,OAArD,CAAb;;AACA,WAAO6jC,UAAP;AACC,eAAO;AAAC7jC,eAAK,CAAC;AAAP,SAAP;AC6DG;;AD5DJ,aAAOmiB,QAAP;AAxRQ;AAyRT2hB,gBAAY;AAzRH,GAAV;;AA6RA,MAAGlT,MAAH;AACC36B,UAAM,iBAAiB26B,MAAvB;AAEA55B,YAAQvB,IAAR,GAAeQ,GAAf;AAEAuoC,kBAAc59B,cAAd,CAA6BrB,MAA7B,GAAsCA,MAAtC;AAEAshC,iBAAaP,kBAAkB9B,cAAc59B,cAAd,CAA6BrB,MAA/C,CAAb;AAEAshC,eAAW3gC,OAAX,CAAmB,UAACC,CAAD;AAClB,UAAGA,EAAEnO,IAAF,KAAU,OAAV,IAAqBmO,EAAE4jC,eAA1B;ACyDK,eDxDJ/sC,QAAQ6nC,OAAR,CAAgBnpC,IAAhB,CACC;AAAA/G,gBAAOwR,EAAE1K,IAAF,IAAU0K,EAAEkK,IAAnB;AACAy0B,iBAAOhqC,EAAEqL,EAAE1K,IAAF,IAAU0K,EAAEkK,IAAd,CADP;AAEAo5B,mBAAS,KAFT;AAGA1E,qBAAW,KAHX;AAIAC,kBAAQ,UAAC5tB,GAAD,EAAMpf,IAAN,EAAYioC,GAAZ;AAEP,gBAAA9rC,KAAA,EAAA4T,MAAA;AAAAA,qBAASk4B,IAAIl4B,MAAJ,IAAc,EAAvB;AAEA5T,oBAAQ4T,OAAO5B,EAAEkK,IAAT,CAAR;;AAEA,oBAAOlK,EAAEnO,IAAT;AAAA,mBACM,MADN;AAEE7D,iCAAA,OAAQA,MAAOsH,IAAf,GAAe,MAAf;AADI;;AADN,mBAGM,OAHN;AAIEtH,iCAAA,OAAQA,MAAOqa,QAAf,GAAe,MAAf;AADI;;AAHN,mBAKM,MALN;AAME,oBAAGra,KAAH;AACCA,0BAAQye,OAAOze,KAAP,EAAc0e,MAAd,CAAqB,YAArB,CAAR;ACyDQ;;AD3DL;;AALN,mBAQM,UARN;AASE,oBAAG1e,KAAH;AACCA,0BAAQye,OAAOze,KAAP,EAAc0e,MAAd,CAAqB,kBAArB,CAAR;AC2DQ;;AD7DL;;AARN,mBAWM,UAXN;AAYE,oBAAG1e,UAAS,IAAT,IAAiBA,UAAS,MAA7B;AACCA,0BAAQsa,QAAQC,EAAR,CAAW,yBAAX,CAAR;AADD;AAGCva,0BAAQsa,QAAQC,EAAR,CAAW,wBAAX,CAAR;AC6DQ;;ADjEL;;AAXN,mBAgBM,OAhBN;AAiBE,oBAAGva,KAAH;AACC,sBAAGsS,EAAEjS,OAAF,CAAUL,KAAV,CAAH;AACCA,4BAAQsS,EAAEsY,KAAF,CAAQ5qB,KAAR,EAAe,QAAf,EAAyBE,QAAzB,EAAR;AADD;AAGCF,4BAAQA,MAAM,QAAN,CAAR;AAJF;ACoES;;ADrFX;;AAuBA,mBAAOA,KAAP;AAjCD;AAAA,SADD,CCwDI;AA6CD;ADvGL;ACyGC;;ADlEF,SAAO6I,OAAP;AA9U+B,CAAhC;;AAiVAyI,OAAOw8B,OAAP,CAAe;AACduC,gBAAcpd,SAAd,GAA0B,IAAIsd,QAAQC,KAAZ,CAAkB6B,2BAAlB,CAA1B;AACAhC,gBAAc59B,cAAd,GAA+B,IAAI89B,QAAQC,KAAZ,CAAkB4B,+BAAlB,CAA/B;AACA/B,gBAAcwF,eAAd,GAAgC,IAAItF,QAAQC,KAAZ,CAAkBwB,8BAA8B,OAA9B,CAAlB,CAAhC;ACoEC,SDnED3B,cAAcyF,gBAAd,GAAiC,IAAIvF,QAAQC,KAAZ,CAAkBwB,8BAA8B,QAA9B,CAAlB,CCmEhC;ADvEF;;AAOAA,gCAAgC,UAACxsB,GAAD,EAAMid,MAAN,EAAcrxB,MAAd;AAC/B,MAAAtJ,GAAA,EAAAe,OAAA;AAAAf,QAAM,iBAAiB0d,GAAjB,GAAuBid,MAA7B;;AACA,MAAGjd,QAAO,OAAV;AACC3c,cAAUopC,qCAAqCxP,MAArC,EAA6CrxB,MAA7C,CAAV;AADD,SAEK,IAAGoU,QAAO,QAAV;AACJ3c,cAAUqpC,sCAAsCzP,MAAtC,EAA8CrxB,MAA9C,CAAV;AADI;AAGJvI,cAAUwpC,0BAA0B5P,MAA1B,EAAkCrxB,MAAlC,CAAV;;AACA,QAAG,CAACqxB,MAAJ;AACC55B,cAAQvB,IAAR,GAAe,iBAAf;AALG;AC2EH;;ADrEF,MAAGm7B,MAAH;AACC55B,YAAQvB,IAAR,GAAeQ,GAAf;ACuEC;;ADtEF,SAAOe,OAAP;AAZ+B,CAAhC;;AAcAopC,uCAAuC,UAACxP,MAAD,EAASrxB,MAAT;AACtC,MAAAvI,OAAA;AAAAA,YAAUupC,8BAA8B3P,MAA9B,EAAsCrxB,MAAtC,CAAV;;AAEA,MAAG,CAACqxB,MAAJ;AACC55B,YAAQvB,IAAR,GAAe,iBAAf;ACyEC;;ADvEFuB,UAAQwlB,KAAR,GAAgB,CAAC,CAAC,CAAD,EAAI,MAAJ,CAAD,CAAhB;;AAEAxlB,UAAQktC,OAAR,GAAkB,UAAC/hB,QAAD,EAAW3yB,IAAX;AACjB6Q,YAAQC,GAAR,CAAY,kBAAZ,EAA+B9Q,IAA/B;AACA,WAAOA,IAAP;AAFiB,GAAlB;;AAIA,SAAOwH,OAAP;AAZsC,CAAvC;;AAcAqpC,wCAAwC,UAACzP,MAAD,EAASrxB,MAAT;AACvC,MAAAvI,OAAA;AAAAA,YAAUupC,8BAA8B3P,MAA9B,EAAsCrxB,MAAtC,CAAV;;AAEA,MAAG,CAACqxB,MAAJ;AACC55B,YAAQvB,IAAR,GAAe,kBAAf;ACyEC;;ADvEFuB,UAAQwlB,KAAR,GAAgB,CAAC,CAAC,CAAD,EAAI,CAAC,CAAL,CAAD,CAAhB;;AAEAxlB,UAAQktC,OAAR,GAAkB,UAAC/hB,QAAD,EAAW3yB,IAAX;AACjB6Q,YAAQC,GAAR,CAAY,mBAAZ,EAAgC9Q,IAAhC;AAQA,WAAOA,IAAP;AATiB,GAAlB;;AAWA,SAAOwH,OAAP;AAnBuC,CAAxC;;AAqBA,IAAGyI,OAAO6J,QAAV;AACCk1B,gBAAc2F,aAAd,GAA8B,IAAIC,WAAJ,EAA9B;ACkEA;;ADhED3kC,OAAOw8B,OAAP,CAAe;ACmEb,SDlEDtR,QAAQlQ,OAAR,CAAgB,UAACjnB,CAAD;AACf,QAAGiM,OAAO6J,QAAP,IAAmB,CAACxC,QAAQyJ,QAAR,EAAvB;AACC,UAAG+C,QAAQ7Y,GAAR,CAAY,QAAZ,KAAyB6Y,QAAQ7Y,GAAR,CAAY,KAAZ,MAAsB,OAAlD;ACmEK,eDlEJgF,OAAOnR,IAAP,CAAY,yBAAZ,EAAuCglB,QAAQ7Y,GAAR,CAAY,KAAZ,CAAvC,EAA2D6Y,QAAQ7Y,GAAR,CAAY,QAAZ,CAA3D,EAAkF,UAAC4N,KAAD,EAAQxQ,MAAR;AACjF4oC,kCAAwBntB,QAAQ7Y,GAAR,CAAY,KAAZ,CAAxB,EAA4C6Y,QAAQ7Y,GAAR,CAAY,QAAZ,CAA5C,EAAmE5C,MAAnE;ACmEK,iBDlEL4N,SAASu7B,aAAT,CAAuBqD,YAAvB,ECkEK;ADpEN,UCkEI;ADpEN;ACyEG;AD1EJ,ICkEC;ADnEF;;AASA5D,0BAA0B,UAAC9sB,GAAD,EAAMid,MAAN,EAAcrxB,MAAd;AACzB,MAAA8D,IAAA,EAAApN,GAAA,EAAAmK,GAAA,EAAA8K,IAAA,EAAAwQ,IAAA;;AAAA,MAAG,CAACnc,MAAJ;AACC8D,WAAOxD,GAAGiL,KAAH,CAAS/K,OAAT,CAAiB;AAACC,WAAK4wB;AAAN,KAAjB,EAAgC;AAACrxB,cAAQ;AAACJ,cAAM;AAAP;AAAT,KAAhC,CAAP;AACAI,aAAA,CAAAa,MAAAP,GAAAC,KAAA,CAAAC,OAAA;AC8EIC,WAAKqD,QAAQ,IAAR,GAAeA,KAAKlE,IAApB,GAA2B,KAAK;AD9EzC,OC+EK;AACDI,cAAQ;AACN,0BAAkB;AADZ;AADP,KD/EL,MCmFS,IDnFT,GCmFgB,CAAC2L,OAAO9K,IAAIqK,OAAZ,KAAwB,IAAxB,GAA+BS,KDnF+C3L,MCmF9E,GDnF8E,MAA9F,GAA8F,MAA9F;ACoFC;;ADlFFA,WAAS+gC,kBAAkB/gC,MAAlB,CAAT;;AAEA,OAAAA,UAAA,QAAAmc,OAAAnc,OAAAwY,cAAA,qCAAA2D,KAAoDxuB,MAApD,GAAoD,MAApD,GAAoD,MAApD,IAA6D,CAA7D;AACC+I,UAAM,iBAAiB0d,GAAjB,GAAuBid,MAA7B;;AACA,QAAGnxB,OAAO6J,QAAV;AACCk1B,oBAAc2F,aAAd,CAA4BjqB,GAA5B,CAAgC,IAAIwkB,QAAQC,KAAZ,CAAkBwB,8BAA8BxsB,GAA9B,EAAmCid,MAAnC,EAA2CrxB,MAA3C,CAAlB,CAAhC;AADD;AAGC,UAAIm/B,QAAQC,KAAZ,CAAkBwB,8BAA8BxsB,GAA9B,EAAmCid,MAAnC,EAA2CrxB,MAA3C,CAAlB;ACmFE;;AACD,WDnFFc,QAAQC,GAAR,CAAY,oBAAZ,EAAkCrK,GAAlC,CCmFE;AACD;ADjGuB,CAA1B;;AAeA,IAAGwJ,OAAOC,QAAV;AACCD,SAAOitB,OAAP,CACC;AAAA+T,6BAAyB,UAAC9sB,GAAD,EAAMid,MAAN;AACxB,UAAArxB,MAAA,EAAA8D,IAAA,EAAAjD,GAAA,EAAA8K,IAAA;AAAAu1B,8BAAwB9sB,GAAxB,EAA6Bid,MAA7B;AAEAvtB,aAAOxD,GAAGiL,KAAH,CAAS/K,OAAT,CAAiB;AAACC,aAAK4wB;AAAN,OAAjB,EAAgC;AAACrxB,gBAAQ;AAACJ,gBAAM;AAAP;AAAT,OAAhC,CAAP;AACAI,eAAA,CAAAa,MAAAP,GAAAC,KAAA,CAAAC,OAAA;AC4FKC,aAAKqD,QAAQ,IAAR,GAAeA,KAAKlE,IAApB,GAA2B,KAAK;AD5F1C,SC6FM;AACDI,gBAAQ;AACN,4BAAkB;AADZ;AADP,OD7FN,MCiGU,IDjGV,GCiGiB,CAAC2L,OAAO9K,IAAIqK,OAAZ,KAAwB,IAAxB,GAA+BS,KDjG8C3L,MCiG7E,GDjG6E,MAA9F,GAA8F,MAA9F;AACA,aAAOA,MAAP;AALD;AAAA,GADD;AC0GA,C","file":"/packages/steedos_workflow.js","sourcesContent":["import { checkNpmVersions } from 'meteor/tmeasday:check-npm-versions';\ncheckNpmVersions({\n\t\"node-schedule\": \"^1.3.1\",\n\t\"xml2js\": \"^0.4.19\",\n}, 'steedos:workflow');","/*!\n * URI.js - Mutating URLs\n *\n * Version: 1.17.0\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n * GPL v3 http://opensource.org/licenses/GPL-3.0\n *\n */\n(function (root, factory) {\n\t'use strict';\n\t// https://github.com/umdjs/umd/blob/master/returnExports.js\n\t// if (typeof exports === 'object') {\n\t// // Node\n\t// module.exports = factory(require('./punycode'), require('./IPv6'), require('./SecondLevelDomains'));\n\t// } else\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['./punycode', './IPv6', './SecondLevelDomains'], factory);\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root);\n\t}\n}(this, function (punycode, IPv6, SLD, root) {\n\t'use strict';\n\t/*global location, escape, unescape */\n\t// FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n\t/*jshint camelcase: false */\n\n\t// save current URI variable, if any\n\tvar _URI = root && root.URI;\n\n\tfunction URI(url, base) {\n\t\tvar _urlSupplied = arguments.length >= 1;\n\t\tvar _baseSupplied = arguments.length >= 2;\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof URI)) {\n\t\t\tif (_urlSupplied) {\n\t\t\t\tif (_baseSupplied) {\n\t\t\t\t\treturn new URI(url, base);\n\t\t\t\t}\n\n\t\t\t\treturn new URI(url);\n\t\t\t}\n\n\t\t\treturn new URI();\n\t\t}\n\n\t\tif (url === undefined) {\n\t\t\tif (_urlSupplied) {\n\t\t\t\tthrow new TypeError('undefined is not a valid argument for URI');\n\t\t\t}\n\n\t\t\tif (typeof location !== 'undefined') {\n\t\t\t\turl = location.href + '';\n\t\t\t} else {\n\t\t\t\turl = '';\n\t\t\t}\n\t\t}\n\n\t\tthis.href(url);\n\n\t\t// resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor\n\t\tif (base !== undefined) {\n\t\t\treturn this.absoluteTo(base);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tURI.version = '1.17.0';\n\n\tvar p = URI.prototype;\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\n\tfunction escapeRegEx(string) {\n\t\t// https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963\n\t\treturn string.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n\t}\n\n\tfunction getType(value) {\n\t\t// IE8 doesn't return [Object Undefined] but [Object Object] for undefined value\n\t\tif (value === undefined) {\n\t\t\treturn 'Undefined';\n\t\t}\n\n\t\treturn String(Object.prototype.toString.call(value)).slice(8, -1);\n\t}\n\n\tfunction isArray(obj) {\n\t\treturn getType(obj) === 'Array';\n\t}\n\n\tfunction filterArrayValues(data, value) {\n\t\tvar lookup = {};\n\t\tvar i, length;\n\n\t\tif (getType(value) === 'RegExp') {\n\t\t\tlookup = null;\n\t\t} else if (isArray(value)) {\n\t\t\tfor (i = 0, length = value.length; i < length; i++) {\n\t\t\t\tlookup[value[i]] = true;\n\t\t\t}\n\t\t} else {\n\t\t\tlookup[value] = true;\n\t\t}\n\n\t\tfor (i = 0, length = data.length; i < length; i++) {\n\t\t\t/*jshint laxbreak: true */\n\t\t\tvar _match = lookup && lookup[data[i]] !== undefined\n\t\t\t\t|| !lookup && value.test(data[i]);\n\t\t\t/*jshint laxbreak: false */\n\t\t\tif (_match) {\n\t\t\t\tdata.splice(i, 1);\n\t\t\t\tlength--;\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction arrayContains(list, value) {\n\t\tvar i, length;\n\n\t\t// value may be string, number, array, regexp\n\t\tif (isArray(value)) {\n\t\t\t// Note: this can be optimized to O(n) (instead of current O(m * n))\n\t\t\tfor (i = 0, length = value.length; i < length; i++) {\n\t\t\t\tif (!arrayContains(list, value[i])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvar _type = getType(value);\n\t\tfor (i = 0, length = list.length; i < length; i++) {\n\t\t\tif (_type === 'RegExp') {\n\t\t\t\tif (typeof list[i] === 'string' && list[i].match(value)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (list[i] === value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction arraysEqual(one, two) {\n\t\tif (!isArray(one) || !isArray(two)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// arrays can't be equal if they have different amount of content\n\t\tif (one.length !== two.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tone.sort();\n\t\ttwo.sort();\n\n\t\tfor (var i = 0, l = one.length; i < l; i++) {\n\t\t\tif (one[i] !== two[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction trimSlashes(text) {\n\t\tvar trim_expression = /^\\/+|\\/+$/g;\n\t\treturn text.replace(trim_expression, '');\n\t}\n\n\tURI._parts = function() {\n\t\treturn {\n\t\t\tprotocol: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\thostname: null,\n\t\t\turn: null,\n\t\t\tport: null,\n\t\t\tpath: null,\n\t\t\tquery: null,\n\t\t\tfragment: null,\n\t\t\t// state\n\t\t\tduplicateQueryParameters: URI.duplicateQueryParameters,\n\t\t\tescapeQuerySpace: URI.escapeQuerySpace\n\t\t};\n\t};\n\t// state: allow duplicate query parameters (a=1&a=1)\n\tURI.duplicateQueryParameters = false;\n\t// state: replaces + with %20 (space in query strings)\n\tURI.escapeQuerySpace = true;\n\t// static properties\n\tURI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i;\n\tURI.idn_expression = /[^a-z0-9\\.-]/i;\n\tURI.punycode_expression = /(xn--)/i;\n\t// well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care?\n\tURI.ip4_expression = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\n\t// credits to Rich Brown\n\t// source: http://forums.intermapper.com/viewtopic.php?p=1096#1096\n\t// specification: http://www.ietf.org/rfc/rfc4291.txt\n\tURI.ip6_expression = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;\n\t// expression used is \"gruber revised\" (@gruber v2) determined to be the\n\t// best solution in a regex-golf we did a couple of ages ago at\n\t// * http://mathiasbynens.be/demo/url-regex\n\t// * http://rodneyrehm.de/t/url-regex.html\n\tURI.find_uri_expression = /\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))/ig;\n\tURI.findUri = {\n\t\t// valid \"scheme://\" or \"www.\"\n\t\tstart: /\\b(?:([a-z][a-z0-9.+-]*:\\/\\/)|www\\.)/gi,\n\t\t// everything up to the next whitespace\n\t\tend: /[\\s\\r\\n]|$/,\n\t\t// trim trailing punctuation captured by end RegExp\n\t\ttrim: /[`!()\\[\\]{};:'\".,<>?«»“”„‘’]+$/\n\t};\n\t// http://www.iana.org/assignments/uri-schemes.html\n\t// http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports\n\tURI.defaultPorts = {\n\t\thttp: '80',\n\t\thttps: '443',\n\t\tftp: '21',\n\t\tgopher: '70',\n\t\tws: '80',\n\t\twss: '443'\n\t};\n\t// allowed hostname characters according to RFC 3986\n\t// ALPHA DIGIT \"-\" \".\" \"_\" \"~\" \"!\" \"$\" \"&\" \"'\" \"(\" \")\" \"*\" \"+\" \",\" \";\" \"=\" %encoded\n\t// I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . -\n\tURI.invalid_hostname_characters = /[^a-zA-Z0-9\\.-]/;\n\t// map DOM Elements to their URI attribute\n\tURI.domAttributes = {\n\t\t'a': 'href',\n\t\t'blockquote': 'cite',\n\t\t'link': 'href',\n\t\t'base': 'href',\n\t\t'script': 'src',\n\t\t'form': 'action',\n\t\t'img': 'src',\n\t\t'area': 'href',\n\t\t'iframe': 'src',\n\t\t'embed': 'src',\n\t\t'source': 'src',\n\t\t'track': 'src',\n\t\t'input': 'src', // but only if type=\"image\"\n\t\t'audio': 'src',\n\t\t'video': 'src'\n\t};\n\tURI.getDomAttribute = function(node) {\n\t\tif (!node || !node.nodeName) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tvar nodeName = node.nodeName.toLowerCase();\n\t\t// should only expose src for type=\"image\"\n\t\tif (nodeName === 'input' && node.type !== 'image') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn URI.domAttributes[nodeName];\n\t};\n\n\tfunction escapeForDumbFirefox36(value) {\n\t\t// https://github.com/medialize/URI.js/issues/91\n\t\treturn escape(value);\n\t}\n\n\t// encoding / decoding according to RFC3986\n\tfunction strictEncodeURIComponent(string) {\n\t\t// see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent\n\t\treturn encodeURIComponent(string)\n\t\t\t.replace(/[!'()*]/g, escapeForDumbFirefox36)\n\t\t\t.replace(/\\*/g, '%2A');\n\t}\n\tURI.encode = strictEncodeURIComponent;\n\tURI.decode = decodeURIComponent;\n\tURI.iso8859 = function() {\n\t\tURI.encode = escape;\n\t\tURI.decode = unescape;\n\t};\n\tURI.unicode = function() {\n\t\tURI.encode = strictEncodeURIComponent;\n\t\tURI.decode = decodeURIComponent;\n\t};\n\tURI.characters = {\n\t\tpathname: {\n\t\t\tencode: {\n\t\t\t\t// RFC3986 2.1: For consistency, URI producers and normalizers should\n\t\t\t\t// use uppercase hexadecimal digits for all percent-encodings.\n\t\t\t\texpression: /%(24|26|2B|2C|3B|3D|3A|40)/ig,\n\t\t\t\tmap: {\n\t\t\t\t\t// -._~!'()*\n\t\t\t\t\t'%24': '$',\n\t\t\t\t\t'%26': '&',\n\t\t\t\t\t'%2B': '+',\n\t\t\t\t\t'%2C': ',',\n\t\t\t\t\t'%3B': ';',\n\t\t\t\t\t'%3D': '=',\n\t\t\t\t\t'%3A': ':',\n\t\t\t\t\t'%40': '@'\n\t\t\t\t}\n\t\t\t},\n\t\t\tdecode: {\n\t\t\t\texpression: /[\\/\\?#]/g,\n\t\t\t\tmap: {\n\t\t\t\t\t'/': '%2F',\n\t\t\t\t\t'?': '%3F',\n\t\t\t\t\t'#': '%23'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treserved: {\n\t\t\tencode: {\n\t\t\t\t// RFC3986 2.1: For consistency, URI producers and normalizers should\n\t\t\t\t// use uppercase hexadecimal digits for all percent-encodings.\n\t\t\t\texpression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,\n\t\t\t\tmap: {\n\t\t\t\t\t// gen-delims\n\t\t\t\t\t'%3A': ':',\n\t\t\t\t\t'%2F': '/',\n\t\t\t\t\t'%3F': '?',\n\t\t\t\t\t'%23': '#',\n\t\t\t\t\t'%5B': '[',\n\t\t\t\t\t'%5D': ']',\n\t\t\t\t\t'%40': '@',\n\t\t\t\t\t// sub-delims\n\t\t\t\t\t'%21': '!',\n\t\t\t\t\t'%24': '$',\n\t\t\t\t\t'%26': '&',\n\t\t\t\t\t'%27': '\\'',\n\t\t\t\t\t'%28': '(',\n\t\t\t\t\t'%29': ')',\n\t\t\t\t\t'%2A': '*',\n\t\t\t\t\t'%2B': '+',\n\t\t\t\t\t'%2C': ',',\n\t\t\t\t\t'%3B': ';',\n\t\t\t\t\t'%3D': '='\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\turnpath: {\n\t\t\t// The characters under `encode` are the characters called out by RFC 2141 as being acceptable\n\t\t\t// for usage in a URN. RFC2141 also calls out \"-\", \".\", and \"_\" as acceptable characters, but\n\t\t\t// these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also\n\t\t\t// note that the colon character is not featured in the encoding map; this is because URI.js\n\t\t\t// gives the colons in URNs semantic meaning as the delimiters of path segements, and so it\n\t\t\t// should not appear unencoded in a segment itself.\n\t\t\t// See also the note above about RFC3986 and capitalalized hex digits.\n\t\t\tencode: {\n\t\t\t\texpression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,\n\t\t\t\tmap: {\n\t\t\t\t\t'%21': '!',\n\t\t\t\t\t'%24': '$',\n\t\t\t\t\t'%27': '\\'',\n\t\t\t\t\t'%28': '(',\n\t\t\t\t\t'%29': ')',\n\t\t\t\t\t'%2A': '*',\n\t\t\t\t\t'%2B': '+',\n\t\t\t\t\t'%2C': ',',\n\t\t\t\t\t'%3B': ';',\n\t\t\t\t\t'%3D': '=',\n\t\t\t\t\t'%40': '@'\n\t\t\t\t}\n\t\t\t},\n\t\t\t// These characters are the characters called out by RFC2141 as \"reserved\" characters that\n\t\t\t// should never appear in a URN, plus the colon character (see note above).\n\t\t\tdecode: {\n\t\t\t\texpression: /[\\/\\?#:]/g,\n\t\t\t\tmap: {\n\t\t\t\t\t'/': '%2F',\n\t\t\t\t\t'?': '%3F',\n\t\t\t\t\t'#': '%23',\n\t\t\t\t\t':': '%3A'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tURI.encodeQuery = function(string, escapeQuerySpace) {\n\t\tvar escaped = URI.encode(string + '');\n\t\tif (escapeQuerySpace === undefined) {\n\t\t\tescapeQuerySpace = URI.escapeQuerySpace;\n\t\t}\n\n\t\treturn escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped;\n\t};\n\tURI.decodeQuery = function(string, escapeQuerySpace) {\n\t\tstring += '';\n\t\tif (escapeQuerySpace === undefined) {\n\t\t\tescapeQuerySpace = URI.escapeQuerySpace;\n\t\t}\n\n\t\ttry {\n\t\t\treturn URI.decode(escapeQuerySpace ? string.replace(/\\+/g, '%20') : string);\n\t\t} catch(e) {\n\t\t\t// we're not going to mess with weird encodings,\n\t\t\t// give up and return the undecoded original string\n\t\t\t// see https://github.com/medialize/URI.js/issues/87\n\t\t\t// see https://github.com/medialize/URI.js/issues/92\n\t\t\treturn string;\n\t\t}\n\t};\n\t// generate encode/decode path functions\n\tvar _parts = {'encode':'encode', 'decode':'decode'};\n\tvar _part;\n\tvar generateAccessor = function(_group, _part) {\n\t\treturn function(string) {\n\t\t\ttry {\n\t\t\t\treturn URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) {\n\t\t\t\t\treturn URI.characters[_group][_part].map[c];\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\t// we're not going to mess with weird encodings,\n\t\t\t\t// give up and return the undecoded original string\n\t\t\t\t// see https://github.com/medialize/URI.js/issues/87\n\t\t\t\t// see https://github.com/medialize/URI.js/issues/92\n\t\t\t\treturn string;\n\t\t\t}\n\t\t};\n\t};\n\n\tfor (_part in _parts) {\n\t\tURI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]);\n\t\tURI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);\n\t}\n\n\tvar generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) {\n\t\treturn function(string) {\n\t\t\t// Why pass in names of functions, rather than the function objects themselves? The\n\t\t\t// definitions of some functions (but in particular, URI.decode) will occasionally change due\n\t\t\t// to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure\n\t\t\t// that the functions we use here are \"fresh\".\n\t\t\tvar actualCodingFunc;\n\t\t\tif (!_innerCodingFuncName) {\n\t\t\t\tactualCodingFunc = URI[_codingFuncName];\n\t\t\t} else {\n\t\t\t\tactualCodingFunc = function(string) {\n\t\t\t\t\treturn URI[_codingFuncName](URI[_innerCodingFuncName](string));\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar segments = (string + '').split(_sep);\n\n\t\t\tfor (var i = 0, length = segments.length; i < length; i++) {\n\t\t\t\tsegments[i] = actualCodingFunc(segments[i]);\n\t\t\t}\n\n\t\t\treturn segments.join(_sep);\n\t\t};\n\t};\n\n\t// This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions.\n\tURI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment');\n\tURI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment');\n\tURI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode');\n\tURI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode');\n\n\tURI.encodeReserved = generateAccessor('reserved', 'encode');\n\n\tURI.parse = function(string, parts) {\n\t\tvar pos;\n\t\tif (!parts) {\n\t\t\tparts = {};\n\t\t}\n\t\t// [protocol\"://\"[username[\":\"password]\"@\"]hostname[\":\"port]\"/\"?][path][\"?\"querystring][\"#\"fragment]\n\n\t\t// extract fragment\n\t\tpos = string.indexOf('#');\n\t\tif (pos > -1) {\n\t\t\t// escaping?\n\t\t\tparts.fragment = string.substring(pos + 1) || null;\n\t\t\tstring = string.substring(0, pos);\n\t\t}\n\n\t\t// extract query\n\t\tpos = string.indexOf('?');\n\t\tif (pos > -1) {\n\t\t\t// escaping?\n\t\t\tparts.query = string.substring(pos + 1) || null;\n\t\t\tstring = string.substring(0, pos);\n\t\t}\n\n\t\t// extract protocol\n\t\tif (string.substring(0, 2) === '//') {\n\t\t\t// relative-scheme\n\t\t\tparts.protocol = null;\n\t\t\tstring = string.substring(2);\n\t\t\t// extract \"user:pass@host:port\"\n\t\t\tstring = URI.parseAuthority(string, parts);\n\t\t} else {\n\t\t\tpos = string.indexOf(':');\n\t\t\tif (pos > -1) {\n\t\t\t\tparts.protocol = string.substring(0, pos) || null;\n\t\t\t\tif (parts.protocol && !parts.protocol.match(URI.protocol_expression)) {\n\t\t\t\t\t// : may be within the path\n\t\t\t\t\tparts.protocol = undefined;\n\t\t\t\t} else if (string.substring(pos + 1, pos + 3) === '//') {\n\t\t\t\t\tstring = string.substring(pos + 3);\n\n\t\t\t\t\t// extract \"user:pass@host:port\"\n\t\t\t\t\tstring = URI.parseAuthority(string, parts);\n\t\t\t\t} else {\n\t\t\t\t\tstring = string.substring(pos + 1);\n\t\t\t\t\tparts.urn = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// what's left must be the path\n\t\tparts.path = string;\n\n\t\t// and we're done\n\t\treturn parts;\n\t};\n\tURI.parseHost = function(string, parts) {\n\t\t// Copy chrome, IE, opera backslash-handling behavior.\n\t\t// Back slashes before the query string get converted to forward slashes\n\t\t// See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124\n\t\t// See: https://code.google.com/p/chromium/issues/detail?id=25916\n\t\t// https://github.com/medialize/URI.js/pull/233\n\t\tstring = string.replace(/\\\\/g, '/');\n\n\t\t// extract host:port\n\t\tvar pos = string.indexOf('/');\n\t\tvar bracketPos;\n\t\tvar t;\n\n\t\tif (pos === -1) {\n\t\t\tpos = string.length;\n\t\t}\n\n\t\tif (string.charAt(0) === '[') {\n\t\t\t// IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6\n\t\t\t// I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts\n\t\t\t// IPv6+port in the format [2001:db8::1]:80 (for the time being)\n\t\t\tbracketPos = string.indexOf(']');\n\t\t\tparts.hostname = string.substring(1, bracketPos) || null;\n\t\t\tparts.port = string.substring(bracketPos + 2, pos) || null;\n\t\t\tif (parts.port === '/') {\n\t\t\t\tparts.port = null;\n\t\t\t}\n\t\t} else {\n\t\t\tvar firstColon = string.indexOf(':');\n\t\t\tvar firstSlash = string.indexOf('/');\n\t\t\tvar nextColon = string.indexOf(':', firstColon + 1);\n\t\t\tif (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) {\n\t\t\t\t// IPv6 host contains multiple colons - but no port\n\t\t\t\t// this notation is actually not allowed by RFC 3986, but we're a liberal parser\n\t\t\t\tparts.hostname = string.substring(0, pos) || null;\n\t\t\t\tparts.port = null;\n\t\t\t} else {\n\t\t\t\tt = string.substring(0, pos).split(':');\n\t\t\t\tparts.hostname = t[0] || null;\n\t\t\t\tparts.port = t[1] || null;\n\t\t\t}\n\t\t}\n\n\t\tif (parts.hostname && string.substring(pos).charAt(0) !== '/') {\n\t\t\tpos++;\n\t\t\tstring = '/' + string;\n\t\t}\n\n\t\treturn string.substring(pos) || '/';\n\t};\n\tURI.parseAuthority = function(string, parts) {\n\t\tstring = URI.parseUserinfo(string, parts);\n\t\treturn URI.parseHost(string, parts);\n\t};\n\tURI.parseUserinfo = function(string, parts) {\n\t\t// extract username:password\n\t\tvar firstSlash = string.indexOf('/');\n\t\tvar pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1);\n\t\tvar t;\n\n\t\t// authority@ must come before /path\n\t\tif (pos > -1 && (firstSlash === -1 || pos < firstSlash)) {\n\t\t\tt = string.substring(0, pos).split(':');\n\t\t\tparts.username = t[0] ? URI.decode(t[0]) : null;\n\t\t\tt.shift();\n\t\t\tparts.password = t[0] ? URI.decode(t.join(':')) : null;\n\t\t\tstring = string.substring(pos + 1);\n\t\t} else {\n\t\t\tparts.username = null;\n\t\t\tparts.password = null;\n\t\t}\n\n\t\treturn string;\n\t};\n\tURI.parseQuery = function(string, escapeQuerySpace) {\n\t\tif (!string) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// throw out the funky business - \"?\"[name\"=\"value\"&\"]+\n\t\tstring = string.replace(/&+/g, '&').replace(/^\\?*&*|&+$/g, '');\n\n\t\tif (!string) {\n\t\t\treturn {};\n\t\t}\n\n\t\tvar items = {};\n\t\tvar splits = string.split('&');\n\t\tvar length = splits.length;\n\t\tvar v, name, value;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tv = splits[i].split('=');\n\t\t\tname = URI.decodeQuery(v.shift(), escapeQuerySpace);\n\t\t\t// no \"=\" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters\n\t\t\tvalue = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null;\n\n\t\t\tif (hasOwn.call(items, name)) {\n\t\t\t\tif (typeof items[name] === 'string' || items[name] === null) {\n\t\t\t\t\titems[name] = [items[name]];\n\t\t\t\t}\n\n\t\t\t\titems[name].push(value);\n\t\t\t} else {\n\t\t\t\titems[name] = value;\n\t\t\t}\n\t\t}\n\n\t\treturn items;\n\t};\n\n\tURI.build = function(parts) {\n\t\tvar t = '';\n\n\t\tif (parts.protocol) {\n\t\t\tt += parts.protocol + ':';\n\t\t}\n\n\t\tif (!parts.urn && (t || parts.hostname)) {\n\t\t\tt += '//';\n\t\t}\n\n\t\tt += (URI.buildAuthority(parts) || '');\n\n\t\tif (typeof parts.path === 'string') {\n\t\t\tif (parts.path.charAt(0) !== '/' && typeof parts.hostname === 'string') {\n\t\t\t\tt += '/';\n\t\t\t}\n\n\t\t\tt += parts.path;\n\t\t}\n\n\t\tif (typeof parts.query === 'string' && parts.query) {\n\t\t\tt += '?' + parts.query;\n\t\t}\n\n\t\tif (typeof parts.fragment === 'string' && parts.fragment) {\n\t\t\tt += '#' + parts.fragment;\n\t\t}\n\t\treturn t;\n\t};\n\tURI.buildHost = function(parts) {\n\t\tvar t = '';\n\n\t\tif (!parts.hostname) {\n\t\t\treturn '';\n\t\t} else if (URI.ip6_expression.test(parts.hostname)) {\n\t\t\tt += '[' + parts.hostname + ']';\n\t\t} else {\n\t\t\tt += parts.hostname;\n\t\t}\n\n\t\tif (parts.port) {\n\t\t\tt += ':' + parts.port;\n\t\t}\n\n\t\treturn t;\n\t};\n\tURI.buildAuthority = function(parts) {\n\t\treturn URI.buildUserinfo(parts) + URI.buildHost(parts);\n\t};\n\tURI.buildUserinfo = function(parts) {\n\t\tvar t = '';\n\n\t\tif (parts.username) {\n\t\t\tt += URI.encode(parts.username);\n\n\t\t\tif (parts.password) {\n\t\t\t\tt += ':' + URI.encode(parts.password);\n\t\t\t}\n\n\t\t\tt += '@';\n\t\t}\n\n\t\treturn t;\n\t};\n\tURI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) {\n\t\t// according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html\n\t\t// being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed\n\t\t// the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax!\n\t\t// URI.js treats the query string as being application/x-www-form-urlencoded\n\t\t// see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type\n\n\t\tvar t = '';\n\t\tvar unique, key, i, length;\n\t\tfor (key in data) {\n\t\t\tif (hasOwn.call(data, key) && key) {\n\t\t\t\tif (isArray(data[key])) {\n\t\t\t\t\tunique = {};\n\t\t\t\t\tfor (i = 0, length = data[key].length; i < length; i++) {\n\t\t\t\t\t\tif (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) {\n\t\t\t\t\t\t\tt += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace);\n\t\t\t\t\t\t\tif (duplicateQueryParameters !== true) {\n\t\t\t\t\t\t\t\tunique[data[key][i] + ''] = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (data[key] !== undefined) {\n\t\t\t\t\tt += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn t.substring(1);\n\t};\n\tURI.buildQueryParameter = function(name, value, escapeQuerySpace) {\n\t\t// http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded\n\t\t// don't append \"=\" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization\n\t\treturn URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : '');\n\t};\n\n\tURI.addQuery = function(data, name, value) {\n\t\tif (typeof name === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (hasOwn.call(name, key)) {\n\t\t\t\t\tURI.addQuery(data, key, name[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof name === 'string') {\n\t\t\tif (data[name] === undefined) {\n\t\t\t\tdata[name] = value;\n\t\t\t\treturn;\n\t\t\t} else if (typeof data[name] === 'string') {\n\t\t\t\tdata[name] = [data[name]];\n\t\t\t}\n\n\t\t\tif (!isArray(value)) {\n\t\t\t\tvalue = [value];\n\t\t\t}\n\n\t\t\tdata[name] = (data[name] || []).concat(value);\n\t\t} else {\n\t\t\tthrow new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n\t\t}\n\t};\n\tURI.removeQuery = function(data, name, value) {\n\t\tvar i, length, key;\n\n\t\tif (isArray(name)) {\n\t\t\tfor (i = 0, length = name.length; i < length; i++) {\n\t\t\t\tdata[name[i]] = undefined;\n\t\t\t}\n\t\t} else if (getType(name) === 'RegExp') {\n\t\t\tfor (key in data) {\n\t\t\t\tif (name.test(key)) {\n\t\t\t\t\tdata[key] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof name === 'object') {\n\t\t\tfor (key in name) {\n\t\t\t\tif (hasOwn.call(name, key)) {\n\t\t\t\t\tURI.removeQuery(data, key, name[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof name === 'string') {\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (getType(value) === 'RegExp') {\n\t\t\t\t\tif (!isArray(data[name]) && value.test(data[name])) {\n\t\t\t\t\t\tdata[name] = undefined;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata[name] = filterArrayValues(data[name], value);\n\t\t\t\t\t}\n\t\t\t\t} else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) {\n\t\t\t\t\tdata[name] = undefined;\n\t\t\t\t} else if (isArray(data[name])) {\n\t\t\t\t\tdata[name] = filterArrayValues(data[name], value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata[name] = undefined;\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter');\n\t\t}\n\t};\n\tURI.hasQuery = function(data, name, value, withinArray) {\n\t\tif (typeof name === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (hasOwn.call(name, key)) {\n\t\t\t\t\tif (!URI.hasQuery(data, key, name[key])) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else if (typeof name !== 'string') {\n\t\t\tthrow new TypeError('URI.hasQuery() accepts an object, string as the name parameter');\n\t\t}\n\n\t\tswitch (getType(value)) {\n\t\t\tcase 'Undefined':\n\t\t\t\t// true if exists (but may be empty)\n\t\t\t\treturn name in data; // data[name] !== undefined;\n\n\t\t\tcase 'Boolean':\n\t\t\t\t// true if exists and non-empty\n\t\t\t\tvar _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]);\n\t\t\t\treturn value === _booly;\n\n\t\t\tcase 'Function':\n\t\t\t\t// allow complex comparison\n\t\t\t\treturn !!value(data[name], name, data);\n\n\t\t\tcase 'Array':\n\t\t\t\tif (!isArray(data[name])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar op = withinArray ? arrayContains : arraysEqual;\n\t\t\t\treturn op(data[name], value);\n\n\t\t\tcase 'RegExp':\n\t\t\t\tif (!isArray(data[name])) {\n\t\t\t\t\treturn Boolean(data[name] && data[name].match(value));\n\t\t\t\t}\n\n\t\t\t\tif (!withinArray) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn arrayContains(data[name], value);\n\n\t\t\tcase 'Number':\n\t\t\t\tvalue = String(value);\n\t\t\t/* falls through */\n\t\t\tcase 'String':\n\t\t\t\tif (!isArray(data[name])) {\n\t\t\t\t\treturn data[name] === value;\n\t\t\t\t}\n\n\t\t\t\tif (!withinArray) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn arrayContains(data[name], value);\n\n\t\t\tdefault:\n\t\t\t\tthrow new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter');\n\t\t}\n\t};\n\n\n\tURI.commonPath = function(one, two) {\n\t\tvar length = Math.min(one.length, two.length);\n\t\tvar pos;\n\n\t\t// find first non-matching character\n\t\tfor (pos = 0; pos < length; pos++) {\n\t\t\tif (one.charAt(pos) !== two.charAt(pos)) {\n\t\t\t\tpos--;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (pos < 1) {\n\t\t\treturn one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : '';\n\t\t}\n\n\t\t// revert to last /\n\t\tif (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') {\n\t\t\tpos = one.substring(0, pos).lastIndexOf('/');\n\t\t}\n\n\t\treturn one.substring(0, pos + 1);\n\t};\n\n\tURI.withinString = function(string, callback, options) {\n\t\toptions || (options = {});\n\t\tvar _start = options.start || URI.findUri.start;\n\t\tvar _end = options.end || URI.findUri.end;\n\t\tvar _trim = options.trim || URI.findUri.trim;\n\t\tvar _attributeOpen = /[a-z0-9-]=[\"']?$/i;\n\n\t\t_start.lastIndex = 0;\n\t\twhile (true) {\n\t\t\tvar match = _start.exec(string);\n\t\t\tif (!match) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar start = match.index;\n\t\t\tif (options.ignoreHtml) {\n\t\t\t\t// attribut(e=[\"']?$)\n\t\t\t\tvar attributeOpen = string.slice(Math.max(start - 3, 0), start);\n\t\t\t\tif (attributeOpen && _attributeOpen.test(attributeOpen)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar end = start + string.slice(start).search(_end);\n\t\t\tvar slice = string.slice(start, end).replace(_trim, '');\n\t\t\tif (options.ignore && options.ignore.test(slice)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tend = start + slice.length;\n\t\t\tvar result = callback(slice, start, end, string);\n\t\t\tstring = string.slice(0, start) + result + string.slice(end);\n\t\t\t_start.lastIndex = start + result.length;\n\t\t}\n\n\t\t_start.lastIndex = 0;\n\t\treturn string;\n\t};\n\n\tURI.ensureValidHostname = function(v) {\n\t\t// Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986)\n\t\t// they are not part of DNS and therefore ignored by URI.js\n\n\t\tif (v.match(URI.invalid_hostname_characters)) {\n\t\t\t// test punycode\n\t\t\tif (!punycode) {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-] and Punycode.js is not available');\n\t\t\t}\n\n\t\t\tif (punycode.toASCII(v).match(URI.invalid_hostname_characters)) {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n\t\t\t}\n\t\t}\n\t};\n\n\t// noConflict\n\tURI.noConflict = function(removeAll) {\n\t\tif (removeAll) {\n\t\t\tvar unconflicted = {\n\t\t\t\tURI: this.noConflict()\n\t\t\t};\n\n\t\t\tif (root.URITemplate && typeof root.URITemplate.noConflict === 'function') {\n\t\t\t\tunconflicted.URITemplate = root.URITemplate.noConflict();\n\t\t\t}\n\n\t\t\tif (root.IPv6 && typeof root.IPv6.noConflict === 'function') {\n\t\t\t\tunconflicted.IPv6 = root.IPv6.noConflict();\n\t\t\t}\n\n\t\t\tif (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') {\n\t\t\t\tunconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict();\n\t\t\t}\n\n\t\t\treturn unconflicted;\n\t\t} else if (root.URI === this) {\n\t\t\troot.URI = _URI;\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tp.build = function(deferBuild) {\n\t\tif (deferBuild === true) {\n\t\t\tthis._deferred_build = true;\n\t\t} else if (deferBuild === undefined || this._deferred_build) {\n\t\t\tthis._string = URI.build(this._parts);\n\t\t\tthis._deferred_build = false;\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tp.clone = function() {\n\t\treturn new URI(this);\n\t};\n\n\tp.valueOf = p.toString = function() {\n\t\treturn this.build(false)._string;\n\t};\n\n\n\tfunction generateSimpleAccessor(_part){\n\t\treturn function(v, build) {\n\t\t\tif (v === undefined) {\n\t\t\t\treturn this._parts[_part] || '';\n\t\t\t} else {\n\t\t\t\tthis._parts[_part] = v || null;\n\t\t\t\tthis.build(!build);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction generatePrefixAccessor(_part, _key){\n\t\treturn function(v, build) {\n\t\t\tif (v === undefined) {\n\t\t\t\treturn this._parts[_part] || '';\n\t\t\t} else {\n\t\t\t\tif (v !== null) {\n\t\t\t\t\tv = v + '';\n\t\t\t\t\tif (v.charAt(0) === _key) {\n\t\t\t\t\t\tv = v.substring(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._parts[_part] = v;\n\t\t\t\tthis.build(!build);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t};\n\t}\n\n\tp.protocol = generateSimpleAccessor('protocol');\n\tp.username = generateSimpleAccessor('username');\n\tp.password = generateSimpleAccessor('password');\n\tp.hostname = generateSimpleAccessor('hostname');\n\tp.port = generateSimpleAccessor('port');\n\tp.query = generatePrefixAccessor('query', '?');\n\tp.fragment = generatePrefixAccessor('fragment', '#');\n\n\tp.search = function(v, build) {\n\t\tvar t = this.query(v, build);\n\t\treturn typeof t === 'string' && t.length ? ('?' + t) : t;\n\t};\n\tp.hash = function(v, build) {\n\t\tvar t = this.fragment(v, build);\n\t\treturn typeof t === 'string' && t.length ? ('#' + t) : t;\n\t};\n\n\tp.pathname = function(v, build) {\n\t\tif (v === undefined || v === true) {\n\t\t\tvar res = this._parts.path || (this._parts.hostname ? '/' : '');\n\t\t\treturn v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res;\n\t\t} else {\n\t\t\tif (this._parts.urn) {\n\t\t\t\tthis._parts.path = v ? URI.recodeUrnPath(v) : '';\n\t\t\t} else {\n\t\t\t\tthis._parts.path = v ? URI.recodePath(v) : '/';\n\t\t\t}\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.path = p.pathname;\n\tp.href = function(href, build) {\n\t\tvar key;\n\n\t\tif (href === undefined) {\n\t\t\treturn this.toString();\n\t\t}\n\n\t\tthis._string = '';\n\t\tthis._parts = URI._parts();\n\n\t\tvar _URI = href instanceof URI;\n\t\tvar _object = typeof href === 'object' && (href.hostname || href.path || href.pathname);\n\t\tif (href.nodeName) {\n\t\t\tvar attribute = URI.getDomAttribute(href);\n\t\t\thref = href[attribute] || '';\n\t\t\t_object = false;\n\t\t}\n\n\t\t// window.location is reported to be an object, but it's not the sort\n\t\t// of object we're looking for:\n\t\t// * location.protocol ends with a colon\n\t\t// * location.query != object.search\n\t\t// * location.hash != object.fragment\n\t\t// simply serializing the unknown object should do the trick\n\t\t// (for location, not for everything...)\n\t\tif (!_URI && _object && href.pathname !== undefined) {\n\t\t\thref = href.toString();\n\t\t}\n\n\t\tif (typeof href === 'string' || href instanceof String) {\n\t\t\tthis._parts = URI.parse(String(href), this._parts);\n\t\t} else if (_URI || _object) {\n\t\t\tvar src = _URI ? href._parts : href;\n\t\t\tfor (key in src) {\n\t\t\t\tif (hasOwn.call(this._parts, key)) {\n\t\t\t\t\tthis._parts[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('invalid input');\n\t\t}\n\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\n\t// identification accessors\n\tp.is = function(what) {\n\t\tvar ip = false;\n\t\tvar ip4 = false;\n\t\tvar ip6 = false;\n\t\tvar name = false;\n\t\tvar sld = false;\n\t\tvar idn = false;\n\t\tvar punycode = false;\n\t\tvar relative = !this._parts.urn;\n\n\t\tif (this._parts.hostname) {\n\t\t\trelative = false;\n\t\t\tip4 = URI.ip4_expression.test(this._parts.hostname);\n\t\t\tip6 = URI.ip6_expression.test(this._parts.hostname);\n\t\t\tip = ip4 || ip6;\n\t\t\tname = !ip;\n\t\t\tsld = name && SLD && SLD.has(this._parts.hostname);\n\t\t\tidn = name && URI.idn_expression.test(this._parts.hostname);\n\t\t\tpunycode = name && URI.punycode_expression.test(this._parts.hostname);\n\t\t}\n\n\t\tswitch (what.toLowerCase()) {\n\t\t\tcase 'relative':\n\t\t\t\treturn relative;\n\n\t\t\tcase 'absolute':\n\t\t\t\treturn !relative;\n\n\t\t\t// hostname identification\n\t\t\tcase 'domain':\n\t\t\tcase 'name':\n\t\t\t\treturn name;\n\n\t\t\tcase 'sld':\n\t\t\t\treturn sld;\n\n\t\t\tcase 'ip':\n\t\t\t\treturn ip;\n\n\t\t\tcase 'ip4':\n\t\t\tcase 'ipv4':\n\t\t\tcase 'inet4':\n\t\t\t\treturn ip4;\n\n\t\t\tcase 'ip6':\n\t\t\tcase 'ipv6':\n\t\t\tcase 'inet6':\n\t\t\t\treturn ip6;\n\n\t\t\tcase 'idn':\n\t\t\t\treturn idn;\n\n\t\t\tcase 'url':\n\t\t\t\treturn !this._parts.urn;\n\n\t\t\tcase 'urn':\n\t\t\t\treturn !!this._parts.urn;\n\n\t\t\tcase 'punycode':\n\t\t\t\treturn punycode;\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t// component specific input validation\n\tvar _protocol = p.protocol;\n\tvar _port = p.port;\n\tvar _hostname = p.hostname;\n\n\tp.protocol = function(v, build) {\n\t\tif (v !== undefined) {\n\t\t\tif (v) {\n\t\t\t\t// accept trailing ://\n\t\t\t\tv = v.replace(/:(\\/\\/)?$/, '');\n\n\t\t\t\tif (!v.match(URI.protocol_expression)) {\n\t\t\t\t\tthrow new TypeError('Protocol \"' + v + '\" contains characters other than [A-Z0-9.+-] or doesn\\'t start with [A-Z]');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn _protocol.call(this, v, build);\n\t};\n\tp.scheme = p.protocol;\n\tp.port = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v !== undefined) {\n\t\t\tif (v === 0) {\n\t\t\t\tv = null;\n\t\t\t}\n\n\t\t\tif (v) {\n\t\t\t\tv += '';\n\t\t\t\tif (v.charAt(0) === ':') {\n\t\t\t\t\tv = v.substring(1);\n\t\t\t\t}\n\n\t\t\t\tif (v.match(/[^0-9]/)) {\n\t\t\t\t\tthrow new TypeError('Port \"' + v + '\" contains characters other than [0-9]');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn _port.call(this, v, build);\n\t};\n\tp.hostname = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v !== undefined) {\n\t\t\tvar x = {};\n\t\t\tvar res = URI.parseHost(v, x);\n\t\t\tif (res !== '/') {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n\t\t\t}\n\n\t\t\tv = x.hostname;\n\t\t}\n\t\treturn _hostname.call(this, v, build);\n\t};\n\n\t// compound accessors\n\tp.origin = function(v, build) {\n\t\tvar parts;\n\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\tvar protocol = this.protocol();\n\t\t\tvar authority = this.authority();\n\t\t\tif (!authority) return '';\n\t\t\treturn (protocol ? protocol + '://' : '') + this.authority();\n\t\t} else {\n\t\t\tvar origin = URI(v);\n\t\t\tthis\n\t\t\t\t.protocol(origin.protocol())\n\t\t\t\t.authority(origin.authority())\n\t\t\t\t.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.host = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\treturn this._parts.hostname ? URI.buildHost(this._parts) : '';\n\t\t} else {\n\t\t\tvar res = URI.parseHost(v, this._parts);\n\t\t\tif (res !== '/') {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.authority = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\treturn this._parts.hostname ? URI.buildAuthority(this._parts) : '';\n\t\t} else {\n\t\t\tvar res = URI.parseAuthority(v, this._parts);\n\t\t\tif (res !== '/') {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.userinfo = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\tif (!this._parts.username) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar t = URI.buildUserinfo(this._parts);\n\t\t\treturn t.substring(0, t.length -1);\n\t\t} else {\n\t\t\tif (v[v.length-1] !== '@') {\n\t\t\t\tv += '@';\n\t\t\t}\n\n\t\t\tURI.parseUserinfo(v, this._parts);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.resource = function(v, build) {\n\t\tvar parts;\n\n\t\tif (v === undefined) {\n\t\t\treturn this.path() + this.search() + this.hash();\n\t\t}\n\n\t\tparts = URI.parse(v);\n\t\tthis._parts.path = parts.path;\n\t\tthis._parts.query = parts.query;\n\t\tthis._parts.fragment = parts.fragment;\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\n\t// fraction accessors\n\tp.subdomain = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\t// convenience, return \"www\" from \"www.example.org\"\n\t\tif (v === undefined) {\n\t\t\tif (!this._parts.hostname || this.is('IP')) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// grab domain and add another segment\n\t\t\tvar end = this._parts.hostname.length - this.domain().length - 1;\n\t\t\treturn this._parts.hostname.substring(0, end) || '';\n\t\t} else {\n\t\t\tvar e = this._parts.hostname.length - this.domain().length;\n\t\t\tvar sub = this._parts.hostname.substring(0, e);\n\t\t\tvar replace = new RegExp('^' + escapeRegEx(sub));\n\n\t\t\tif (v && v.charAt(v.length - 1) !== '.') {\n\t\t\t\tv += '.';\n\t\t\t}\n\n\t\t\tif (v) {\n\t\t\t\tURI.ensureValidHostname(v);\n\t\t\t}\n\n\t\t\tthis._parts.hostname = this._parts.hostname.replace(replace, v);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.domain = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (typeof v === 'boolean') {\n\t\t\tbuild = v;\n\t\t\tv = undefined;\n\t\t}\n\n\t\t// convenience, return \"example.org\" from \"www.example.org\"\n\t\tif (v === undefined) {\n\t\t\tif (!this._parts.hostname || this.is('IP')) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// if hostname consists of 1 or 2 segments, it must be the domain\n\t\t\tvar t = this._parts.hostname.match(/\\./g);\n\t\t\tif (t && t.length < 2) {\n\t\t\t\treturn this._parts.hostname;\n\t\t\t}\n\n\t\t\t// grab tld and add another segment\n\t\t\tvar end = this._parts.hostname.length - this.tld(build).length - 1;\n\t\t\tend = this._parts.hostname.lastIndexOf('.', end -1) + 1;\n\t\t\treturn this._parts.hostname.substring(end) || '';\n\t\t} else {\n\t\t\tif (!v) {\n\t\t\t\tthrow new TypeError('cannot set domain empty');\n\t\t\t}\n\n\t\t\tURI.ensureValidHostname(v);\n\n\t\t\tif (!this._parts.hostname || this.is('IP')) {\n\t\t\t\tthis._parts.hostname = v;\n\t\t\t} else {\n\t\t\t\tvar replace = new RegExp(escapeRegEx(this.domain()) + '$');\n\t\t\t\tthis._parts.hostname = this._parts.hostname.replace(replace, v);\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.tld = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (typeof v === 'boolean') {\n\t\t\tbuild = v;\n\t\t\tv = undefined;\n\t\t}\n\n\t\t// return \"org\" from \"www.example.org\"\n\t\tif (v === undefined) {\n\t\t\tif (!this._parts.hostname || this.is('IP')) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar pos = this._parts.hostname.lastIndexOf('.');\n\t\t\tvar tld = this._parts.hostname.substring(pos + 1);\n\n\t\t\tif (build !== true && SLD && SLD.list[tld.toLowerCase()]) {\n\t\t\t\treturn SLD.get(this._parts.hostname) || tld;\n\t\t\t}\n\n\t\t\treturn tld;\n\t\t} else {\n\t\t\tvar replace;\n\n\t\t\tif (!v) {\n\t\t\t\tthrow new TypeError('cannot set TLD empty');\n\t\t\t} else if (v.match(/[^a-zA-Z0-9-]/)) {\n\t\t\t\tif (SLD && SLD.is(v)) {\n\t\t\t\t\treplace = new RegExp(escapeRegEx(this.tld()) + '$');\n\t\t\t\t\tthis._parts.hostname = this._parts.hostname.replace(replace, v);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new TypeError('TLD \"' + v + '\" contains characters other than [A-Z0-9]');\n\t\t\t\t}\n\t\t\t} else if (!this._parts.hostname || this.is('IP')) {\n\t\t\t\tthrow new ReferenceError('cannot set TLD on non-domain host');\n\t\t\t} else {\n\t\t\t\treplace = new RegExp(escapeRegEx(this.tld()) + '$');\n\t\t\t\tthis._parts.hostname = this._parts.hostname.replace(replace, v);\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.directory = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined || v === true) {\n\t\t\tif (!this._parts.path && !this._parts.hostname) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (this._parts.path === '/') {\n\t\t\t\treturn '/';\n\t\t\t}\n\n\t\t\tvar end = this._parts.path.length - this.filename().length - 1;\n\t\t\tvar res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : '');\n\n\t\t\treturn v ? URI.decodePath(res) : res;\n\n\t\t} else {\n\t\t\tvar e = this._parts.path.length - this.filename().length;\n\t\t\tvar directory = this._parts.path.substring(0, e);\n\t\t\tvar replace = new RegExp('^' + escapeRegEx(directory));\n\n\t\t\t// fully qualifier directories begin with a slash\n\t\t\tif (!this.is('relative')) {\n\t\t\t\tif (!v) {\n\t\t\t\t\tv = '/';\n\t\t\t\t}\n\n\t\t\t\tif (v.charAt(0) !== '/') {\n\t\t\t\t\tv = '/' + v;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// directories always end with a slash\n\t\t\tif (v && v.charAt(v.length - 1) !== '/') {\n\t\t\t\tv += '/';\n\t\t\t}\n\n\t\t\tv = URI.recodePath(v);\n\t\t\tthis._parts.path = this._parts.path.replace(replace, v);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.filename = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined || v === true) {\n\t\t\tif (!this._parts.path || this._parts.path === '/') {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar pos = this._parts.path.lastIndexOf('/');\n\t\t\tvar res = this._parts.path.substring(pos+1);\n\n\t\t\treturn v ? URI.decodePathSegment(res) : res;\n\t\t} else {\n\t\t\tvar mutatedDirectory = false;\n\n\t\t\tif (v.charAt(0) === '/') {\n\t\t\t\tv = v.substring(1);\n\t\t\t}\n\n\t\t\tif (v.match(/\\.?\\//)) {\n\t\t\t\tmutatedDirectory = true;\n\t\t\t}\n\n\t\t\tvar replace = new RegExp(escapeRegEx(this.filename()) + '$');\n\t\t\tv = URI.recodePath(v);\n\t\t\tthis._parts.path = this._parts.path.replace(replace, v);\n\n\t\t\tif (mutatedDirectory) {\n\t\t\t\tthis.normalizePath(build);\n\t\t\t} else {\n\t\t\t\tthis.build(!build);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.suffix = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined || v === true) {\n\t\t\tif (!this._parts.path || this._parts.path === '/') {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar filename = this.filename();\n\t\t\tvar pos = filename.lastIndexOf('.');\n\t\t\tvar s, res;\n\n\t\t\tif (pos === -1) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// suffix may only contain alnum characters (yup, I made this up.)\n\t\t\ts = filename.substring(pos+1);\n\t\t\tres = (/^[a-z0-9%]+$/i).test(s) ? s : '';\n\t\t\treturn v ? URI.decodePathSegment(res) : res;\n\t\t} else {\n\t\t\tif (v.charAt(0) === '.') {\n\t\t\t\tv = v.substring(1);\n\t\t\t}\n\n\t\t\tvar suffix = this.suffix();\n\t\t\tvar replace;\n\n\t\t\tif (!suffix) {\n\t\t\t\tif (!v) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t\tthis._parts.path += '.' + URI.recodePath(v);\n\t\t\t} else if (!v) {\n\t\t\t\treplace = new RegExp(escapeRegEx('.' + suffix) + '$');\n\t\t\t} else {\n\t\t\t\treplace = new RegExp(escapeRegEx(suffix) + '$');\n\t\t\t}\n\n\t\t\tif (replace) {\n\t\t\t\tv = URI.recodePath(v);\n\t\t\t\tthis._parts.path = this._parts.path.replace(replace, v);\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.segment = function(segment, v, build) {\n\t\tvar separator = this._parts.urn ? ':' : '/';\n\t\tvar path = this.path();\n\t\tvar absolute = path.substring(0, 1) === '/';\n\t\tvar segments = path.split(separator);\n\n\t\tif (segment !== undefined && typeof segment !== 'number') {\n\t\t\tbuild = v;\n\t\t\tv = segment;\n\t\t\tsegment = undefined;\n\t\t}\n\n\t\tif (segment !== undefined && typeof segment !== 'number') {\n\t\t\tthrow new Error('Bad segment \"' + segment + '\", must be 0-based integer');\n\t\t}\n\n\t\tif (absolute) {\n\t\t\tsegments.shift();\n\t\t}\n\n\t\tif (segment < 0) {\n\t\t\t// allow negative indexes to address from the end\n\t\t\tsegment = Math.max(segments.length + segment, 0);\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\t/*jshint laxbreak: true */\n\t\t\treturn segment === undefined\n\t\t\t\t? segments\n\t\t\t\t: segments[segment];\n\t\t\t/*jshint laxbreak: false */\n\t\t} else if (segment === null || segments[segment] === undefined) {\n\t\t\tif (isArray(v)) {\n\t\t\t\tsegments = [];\n\t\t\t\t// collapse empty elements within array\n\t\t\t\tfor (var i=0, l=v.length; i < l; i++) {\n\t\t\t\t\tif (!v[i].length && (!segments.length || !segments[segments.length -1].length)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (segments.length && !segments[segments.length -1].length) {\n\t\t\t\t\t\tsegments.pop();\n\t\t\t\t\t}\n\n\t\t\t\t\tsegments.push(trimSlashes(v[i]));\n\t\t\t\t}\n\t\t\t} else if (v || typeof v === 'string') {\n\t\t\t\tv = trimSlashes(v);\n\t\t\t\tif (segments[segments.length -1] === '') {\n\t\t\t\t\t// empty trailing elements have to be overwritten\n\t\t\t\t\t// to prevent results such as /foo//bar\n\t\t\t\t\tsegments[segments.length -1] = v;\n\t\t\t\t} else {\n\t\t\t\t\tsegments.push(v);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (v) {\n\t\t\t\tsegments[segment] = trimSlashes(v);\n\t\t\t} else {\n\t\t\t\tsegments.splice(segment, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (absolute) {\n\t\t\tsegments.unshift('');\n\t\t}\n\n\t\treturn this.path(segments.join(separator), build);\n\t};\n\tp.segmentCoded = function(segment, v, build) {\n\t\tvar segments, i, l;\n\n\t\tif (typeof segment !== 'number') {\n\t\t\tbuild = v;\n\t\t\tv = segment;\n\t\t\tsegment = undefined;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\tsegments = this.segment(segment, v, build);\n\t\t\tif (!isArray(segments)) {\n\t\t\t\tsegments = segments !== undefined ? URI.decode(segments) : undefined;\n\t\t\t} else {\n\t\t\t\tfor (i = 0, l = segments.length; i < l; i++) {\n\t\t\t\t\tsegments[i] = URI.decode(segments[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn segments;\n\t\t}\n\n\t\tif (!isArray(v)) {\n\t\t\tv = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v;\n\t\t} else {\n\t\t\tfor (i = 0, l = v.length; i < l; i++) {\n\t\t\t\tv[i] = URI.encode(v[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn this.segment(segment, v, build);\n\t};\n\n\t// mutating query string\n\tvar q = p.query;\n\tp.query = function(v, build) {\n\t\tif (v === true) {\n\t\t\treturn URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\t} else if (typeof v === 'function') {\n\t\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\t\tvar result = v.call(this, data);\n\t\t\tthis._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t} else if (v !== undefined && typeof v !== 'string') {\n\t\t\tthis._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t} else {\n\t\t\treturn q.call(this, v, build);\n\t\t}\n\t};\n\tp.setQuery = function(name, value, build) {\n\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\n\t\tif (typeof name === 'string' || name instanceof String) {\n\t\t\tdata[name] = value !== undefined ? value : null;\n\t\t} else if (typeof name === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (hasOwn.call(name, key)) {\n\t\t\t\t\tdata[key] = name[key];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n\t\t}\n\n\t\tthis._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\tif (typeof name !== 'string') {\n\t\t\tbuild = value;\n\t\t}\n\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\tp.addQuery = function(name, value, build) {\n\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\tURI.addQuery(data, name, value === undefined ? null : value);\n\t\tthis._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\tif (typeof name !== 'string') {\n\t\t\tbuild = value;\n\t\t}\n\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\tp.removeQuery = function(name, value, build) {\n\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\tURI.removeQuery(data, name, value);\n\t\tthis._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\tif (typeof name !== 'string') {\n\t\t\tbuild = value;\n\t\t}\n\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\tp.hasQuery = function(name, value, withinArray) {\n\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\treturn URI.hasQuery(data, name, value, withinArray);\n\t};\n\tp.setSearch = p.setQuery;\n\tp.addSearch = p.addQuery;\n\tp.removeSearch = p.removeQuery;\n\tp.hasSearch = p.hasQuery;\n\n\t// sanitizing URLs\n\tp.normalize = function() {\n\t\tif (this._parts.urn) {\n\t\t\treturn this\n\t\t\t\t.normalizeProtocol(false)\n\t\t\t\t.normalizePath(false)\n\t\t\t\t.normalizeQuery(false)\n\t\t\t\t.normalizeFragment(false)\n\t\t\t\t.build();\n\t\t}\n\n\t\treturn this\n\t\t\t.normalizeProtocol(false)\n\t\t\t.normalizeHostname(false)\n\t\t\t.normalizePort(false)\n\t\t\t.normalizePath(false)\n\t\t\t.normalizeQuery(false)\n\t\t\t.normalizeFragment(false)\n\t\t\t.build();\n\t};\n\tp.normalizeProtocol = function(build) {\n\t\tif (typeof this._parts.protocol === 'string') {\n\t\t\tthis._parts.protocol = this._parts.protocol.toLowerCase();\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizeHostname = function(build) {\n\t\tif (this._parts.hostname) {\n\t\t\tif (this.is('IDN') && punycode) {\n\t\t\t\tthis._parts.hostname = punycode.toASCII(this._parts.hostname);\n\t\t\t} else if (this.is('IPv6') && IPv6) {\n\t\t\t\tthis._parts.hostname = IPv6.best(this._parts.hostname);\n\t\t\t}\n\n\t\t\tthis._parts.hostname = this._parts.hostname.toLowerCase();\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizePort = function(build) {\n\t\t// remove port of it's the protocol's default\n\t\tif (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) {\n\t\t\tthis._parts.port = null;\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizePath = function(build) {\n\t\tvar _path = this._parts.path;\n\t\tif (!_path) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this._parts.urn) {\n\t\t\tthis._parts.path = URI.recodeUrnPath(this._parts.path);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this._parts.path === '/') {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar _was_relative;\n\t\tvar _leadingParents = '';\n\t\tvar _parent, _pos;\n\n\t\t// handle relative paths\n\t\tif (_path.charAt(0) !== '/') {\n\t\t\t_was_relative = true;\n\t\t\t_path = '/' + _path;\n\t\t}\n\n\t\t// handle relative files (as opposed to directories)\n\t\tif (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') {\n\t\t\t_path += '/';\n\t\t}\n\n\t\t// resolve simples\n\t\t_path = _path\n\t\t\t.replace(/(\\/(\\.\\/)+)|(\\/\\.$)/g, '/')\n\t\t\t.replace(/\\/{2,}/g, '/');\n\n\t\t// remember leading parents\n\t\tif (_was_relative) {\n\t\t\t_leadingParents = _path.substring(1).match(/^(\\.\\.\\/)+/) || '';\n\t\t\tif (_leadingParents) {\n\t\t\t\t_leadingParents = _leadingParents[0];\n\t\t\t}\n\t\t}\n\n\t\t// resolve parents\n\t\twhile (true) {\n\t\t\t_parent = _path.indexOf('/..');\n\t\t\tif (_parent === -1) {\n\t\t\t\t// no more ../ to resolve\n\t\t\t\tbreak;\n\t\t\t} else if (_parent === 0) {\n\t\t\t\t// top level cannot be relative, skip it\n\t\t\t\t_path = _path.substring(3);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t_pos = _path.substring(0, _parent).lastIndexOf('/');\n\t\t\tif (_pos === -1) {\n\t\t\t\t_pos = _parent;\n\t\t\t}\n\t\t\t_path = _path.substring(0, _pos) + _path.substring(_parent + 3);\n\t\t}\n\n\t\t// revert to relative\n\t\tif (_was_relative && this.is('relative')) {\n\t\t\t_path = _leadingParents + _path.substring(1);\n\t\t}\n\n\t\t_path = URI.recodePath(_path);\n\t\tthis._parts.path = _path;\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\tp.normalizePathname = p.normalizePath;\n\tp.normalizeQuery = function(build) {\n\t\tif (typeof this._parts.query === 'string') {\n\t\t\tif (!this._parts.query.length) {\n\t\t\t\tthis._parts.query = null;\n\t\t\t} else {\n\t\t\t\tthis.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace));\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizeFragment = function(build) {\n\t\tif (!this._parts.fragment) {\n\t\t\tthis._parts.fragment = null;\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizeSearch = p.normalizeQuery;\n\tp.normalizeHash = p.normalizeFragment;\n\n\tp.iso8859 = function() {\n\t\t// expect unicode input, iso8859 output\n\t\tvar e = URI.encode;\n\t\tvar d = URI.decode;\n\n\t\tURI.encode = escape;\n\t\tURI.decode = decodeURIComponent;\n\t\ttry {\n\t\t\tthis.normalize();\n\t\t} finally {\n\t\t\tURI.encode = e;\n\t\t\tURI.decode = d;\n\t\t}\n\t\treturn this;\n\t};\n\n\tp.unicode = function() {\n\t\t// expect iso8859 input, unicode output\n\t\tvar e = URI.encode;\n\t\tvar d = URI.decode;\n\n\t\tURI.encode = strictEncodeURIComponent;\n\t\tURI.decode = unescape;\n\t\ttry {\n\t\t\tthis.normalize();\n\t\t} finally {\n\t\t\tURI.encode = e;\n\t\t\tURI.decode = d;\n\t\t}\n\t\treturn this;\n\t};\n\n\tp.readable = function() {\n\t\tvar uri = this.clone();\n\t\t// removing username, password, because they shouldn't be displayed according to RFC 3986\n\t\turi.username('').password('').normalize();\n\t\tvar t = '';\n\t\tif (uri._parts.protocol) {\n\t\t\tt += uri._parts.protocol + '://';\n\t\t}\n\n\t\tif (uri._parts.hostname) {\n\t\t\tif (uri.is('punycode') && punycode) {\n\t\t\t\tt += punycode.toUnicode(uri._parts.hostname);\n\t\t\t\tif (uri._parts.port) {\n\t\t\t\t\tt += ':' + uri._parts.port;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tt += uri.host();\n\t\t\t}\n\t\t}\n\n\t\tif (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') {\n\t\t\tt += '/';\n\t\t}\n\n\t\tt += uri.path(true);\n\t\tif (uri._parts.query) {\n\t\t\tvar q = '';\n\t\t\tfor (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) {\n\t\t\t\tvar kv = (qp[i] || '').split('=');\n\t\t\t\tq += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace)\n\t\t\t\t\t.replace(/&/g, '%26');\n\n\t\t\t\tif (kv[1] !== undefined) {\n\t\t\t\t\tq += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace)\n\t\t\t\t\t\t.replace(/&/g, '%26');\n\t\t\t\t}\n\t\t\t}\n\t\t\tt += '?' + q.substring(1);\n\t\t}\n\n\t\tt += URI.decodeQuery(uri.hash(), true);\n\t\treturn t;\n\t};\n\n\t// resolving relative and absolute URLs\n\tp.absoluteTo = function(base) {\n\t\tvar resolved = this.clone();\n\t\tvar properties = ['protocol', 'username', 'password', 'hostname', 'port'];\n\t\tvar basedir, i, p;\n\n\t\tif (this._parts.urn) {\n\t\t\tthrow new Error('URNs do not have any generally defined hierarchical components');\n\t\t}\n\n\t\tif (!(base instanceof URI)) {\n\t\t\tbase = new URI(base);\n\t\t}\n\n\t\tif (!resolved._parts.protocol) {\n\t\t\tresolved._parts.protocol = base._parts.protocol;\n\t\t}\n\n\t\tif (this._parts.hostname) {\n\t\t\treturn resolved;\n\t\t}\n\n\t\tfor (i = 0; (p = properties[i]); i++) {\n\t\t\tresolved._parts[p] = base._parts[p];\n\t\t}\n\n\t\tif (!resolved._parts.path) {\n\t\t\tresolved._parts.path = base._parts.path;\n\t\t\tif (!resolved._parts.query) {\n\t\t\t\tresolved._parts.query = base._parts.query;\n\t\t\t}\n\t\t} else if (resolved._parts.path.substring(-2) === '..') {\n\t\t\tresolved._parts.path += '/';\n\t\t}\n\n\t\tif (resolved.path().charAt(0) !== '/') {\n\t\t\tbasedir = base.directory();\n\t\t\tbasedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : '';\n\t\t\tresolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path;\n\t\t\tresolved.normalizePath();\n\t\t}\n\n\t\tresolved.build();\n\t\treturn resolved;\n\t};\n\tp.relativeTo = function(base) {\n\t\tvar relative = this.clone().normalize();\n\t\tvar relativeParts, baseParts, common, relativePath, basePath;\n\n\t\tif (relative._parts.urn) {\n\t\t\tthrow new Error('URNs do not have any generally defined hierarchical components');\n\t\t}\n\n\t\tbase = new URI(base).normalize();\n\t\trelativeParts = relative._parts;\n\t\tbaseParts = base._parts;\n\t\trelativePath = relative.path();\n\t\tbasePath = base.path();\n\n\t\tif (relativePath.charAt(0) !== '/') {\n\t\t\tthrow new Error('URI is already relative');\n\t\t}\n\n\t\tif (basePath.charAt(0) !== '/') {\n\t\t\tthrow new Error('Cannot calculate a URI relative to another relative URI');\n\t\t}\n\n\t\tif (relativeParts.protocol === baseParts.protocol) {\n\t\t\trelativeParts.protocol = null;\n\t\t}\n\n\t\tif (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) {\n\t\t\treturn relative.build();\n\t\t}\n\n\t\tif (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) {\n\t\t\treturn relative.build();\n\t\t}\n\n\t\tif (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) {\n\t\t\trelativeParts.hostname = null;\n\t\t\trelativeParts.port = null;\n\t\t} else {\n\t\t\treturn relative.build();\n\t\t}\n\n\t\tif (relativePath === basePath) {\n\t\t\trelativeParts.path = '';\n\t\t\treturn relative.build();\n\t\t}\n\n\t\t// determine common sub path\n\t\tcommon = URI.commonPath(relativePath, basePath);\n\n\t\t// If the paths have nothing in common, return a relative URL with the absolute path.\n\t\tif (!common) {\n\t\t\treturn relative.build();\n\t\t}\n\n\t\tvar parents = baseParts.path\n\t\t\t.substring(common.length)\n\t\t\t.replace(/[^\\/]*$/, '')\n\t\t\t.replace(/.*?\\//g, '../');\n\n\t\trelativeParts.path = (parents + relativeParts.path.substring(common.length)) || './';\n\n\t\treturn relative.build();\n\t};\n\n\t// comparing URIs\n\tp.equals = function(uri) {\n\t\tvar one = this.clone();\n\t\tvar two = new URI(uri);\n\t\tvar one_map = {};\n\t\tvar two_map = {};\n\t\tvar checked = {};\n\t\tvar one_query, two_query, key;\n\n\t\tone.normalize();\n\t\ttwo.normalize();\n\n\t\t// exact match\n\t\tif (one.toString() === two.toString()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// extract query string\n\t\tone_query = one.query();\n\t\ttwo_query = two.query();\n\t\tone.query('');\n\t\ttwo.query('');\n\n\t\t// definitely not equal if not even non-query parts match\n\t\tif (one.toString() !== two.toString()) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// query parameters have the same length, even if they're permuted\n\t\tif (one_query.length !== two_query.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tone_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace);\n\t\ttwo_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace);\n\n\t\tfor (key in one_map) {\n\t\t\tif (hasOwn.call(one_map, key)) {\n\t\t\t\tif (!isArray(one_map[key])) {\n\t\t\t\t\tif (one_map[key] !== two_map[key]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} else if (!arraysEqual(one_map[key], two_map[key])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tchecked[key] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (key in two_map) {\n\t\t\tif (hasOwn.call(two_map, key)) {\n\t\t\t\tif (!checked[key]) {\n\t\t\t\t\t// two contains a parameter not present in one\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n\n\t// state\n\tp.duplicateQueryParameters = function(v) {\n\t\tthis._parts.duplicateQueryParameters = !!v;\n\t\treturn this;\n\t};\n\n\tp.escapeQuerySpace = function(v) {\n\t\tthis._parts.escapeQuerySpace = !!v;\n\t\treturn this;\n\t};\n\n\treturn URI;\n}));","Workflow = {}\n\n@ImageSign = {};\n\n@TracesHandler = {};\n\n@TracesTemplate = {};\n\n@InstanceformTemplate = {};\n\n@InstanceAttachmentTemplate = {};\n\n@InstanceSignText = {}\n\n@RelatedInstances = {}\n\n@RelatedRecords = {}\n\n@InstanceMacro = {context: {}}\n\n@TracesManager = {};\n\nInstanceSignText.isOpinionField_from_string = (field_formula)->\n\treturn (field_formula?.indexOf(\"{traces.\") > -1 || field_formula?.indexOf(\"{signature.traces.\") > -1 || field_formula?.indexOf(\"{yijianlan:\") > -1 || field_formula?.indexOf(\"{\\\"yijianlan\\\":\") > -1 || field_formula?.indexOf(\"{'yijianlan':\") > -1)\n\nInstanceSignText.includesOpinionField = (form, form_version)->\n\tfield_formulas = new Array();\n\n\t_form_version = {}\n\n\tif Meteor.isServer\n\t\t_form_version = uuflowManager.getFormVersion(db.forms.findOne({_id: form}), form_version)\n\telse\n\t\t_form_version = db.form_versions.findOne({_id: form_version, form: form})\n\n\tfields = _form_version?.fields || []\n\n\tfields.forEach (f)->\n\t\tif f.type == 'table'\n\t\t\tconsole.log 'ignore opinion field in table'\n\t\telse if f.type == 'section'\n\t\t\tf?.fields?.forEach (f1)->\n\t\t\t\tfield_formulas.push f1.formula\n\t\telse\n\t\t\tfield_formulas.push f.formula\n\n\t_.some field_formulas, (field_formula)->\n\t\treturn InstanceformTemplate.helpers.isOpinionField_from_string(field_formula)\n\n"," \n\nWorkflow = {};\n\nthis.ImageSign = {};\n\nthis.TracesHandler = {};\n\nthis.TracesTemplate = {};\n\nthis.InstanceformTemplate = {};\n\nthis.InstanceAttachmentTemplate = {};\n\nthis.InstanceSignText = {};\n\nthis.RelatedInstances = {};\n\nthis.RelatedRecords = {};\n\nthis.InstanceMacro = {\n context: {}\n};\n\nthis.TracesManager = {};\n\nInstanceSignText.isOpinionField_from_string = function(field_formula) {\n return (field_formula != null ? field_formula.indexOf(\"{traces.\") : void 0) > -1 || (field_formula != null ? field_formula.indexOf(\"{signature.traces.\") : void 0) > -1 || (field_formula != null ? field_formula.indexOf(\"{yijianlan:\") : void 0) > -1 || (field_formula != null ? field_formula.indexOf(\"{\\\"yijianlan\\\":\") : void 0) > -1 || (field_formula != null ? field_formula.indexOf(\"{'yijianlan':\") : void 0) > -1;\n};\n\nInstanceSignText.includesOpinionField = function(form, form_version) {\n var _form_version, field_formulas, fields;\n field_formulas = new Array();\n _form_version = {};\n if (Meteor.isServer) {\n _form_version = uuflowManager.getFormVersion(db.forms.findOne({\n _id: form\n }), form_version);\n } else {\n _form_version = db.form_versions.findOne({\n _id: form_version,\n form: form\n });\n }\n fields = (_form_version != null ? _form_version.fields : void 0) || [];\n fields.forEach(function(f) {\n var ref;\n if (f.type === 'table') {\n return console.log('ignore opinion field in table');\n } else if (f.type === 'section') {\n return f != null ? (ref = f.fields) != null ? ref.forEach(function(f1) {\n return field_formulas.push(f1.formula);\n }) : void 0 : void 0;\n } else {\n return field_formulas.push(f.formula);\n }\n });\n return _.some(field_formulas, function(field_formula) {\n return InstanceformTemplate.helpers.isOpinionField_from_string(field_formula);\n });\n};\n","db.instance_tasks = new Meteor.Collection('instance_tasks')\n\ndb.instance_tasks._simpleSchema = new SimpleSchema\n instance:\n type: String\n trace:\n type: String\n is_finished:\n type: String\n user:\n type: String\n user_name:\n type: String\n handler:\n type: String\n handler_name:\n type: String\n handler_organization:\n type: String\n handler_organization_name:\n type: String\n handler_organization_fullname:\n type: String\n start_date:\n type: Date\n due_date:\n type: Date\n is_read:\n type: Boolean\n is_error:\n type: Boolean\n values:\n type: Object\n deadline:\n type: Date\n remind_date:\n type: Date\n reminded_count:\n type: Number\n read_date:\n type: Date\n description:\n type: String\n modified:\n type: Date\n modified_by:\n type: String\n sign_show:\n type: Boolean\n judge:\n type: String\n next_steps:\n type: Array\n \"next_steps.$\":\n type: Object\n \"next_steps.$.step\":\n type: String\n \"next_steps.$.users\":\n type: [String]\n finish_date:\n type: Date\n cost_time:\n type: Number\n space:\n type: String\n instance_name:\n type: String\n submitter:\n type: String\n submitter_name:\n type: String\n applicant:\n type: String\n applicant_name:\n type: String\n applicant_organization_name:\n type: String\n submit_date:\n type: Date\n flow:\n type: String\n flow_name:\n type: String\n form:\n type: String\n step:\n type: String\n step_name:\n type: String\n category_name:\n type: String\n instance_state:\n type: String\n distribute_from_instance:\n type: String\n forward_from_instance:\n type: String\n keywords:\n type: String\n is_archived:\n type: Boolean\n category:\n type: String\n","db.auth_tokens = new Meteor.Collection('auth_tokens')","marked = require(\"marked\")\n\nInstanceReadOnlyTemplate = {};\n\n\nInstanceReadOnlyTemplate.instance_attachment = \"\"\"\n\t\n\t\t\n\t\t\t{{this.name}}\n\t\t\n\t\n\"\"\"\n\nInstanceReadOnlyTemplate.afSelectUserRead = \"\"\"\n\t
{{value}}
\n\"\"\"\n\n\nInstanceReadOnlyTemplate.afFormGroupRead = \"\"\"\n\t
\n\t\t{{#with getField this.name}}\n\t\t\t{{#if equals type 'section'}}\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t

{{{description}}}

\n\t\t\t\t\t
\n\t\t\t{{else}}\n\t\t\t\t{{#if equals type 'table'}}\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{{description}}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{{{getTableThead this}}}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{{{getTableBody this}}}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t{{else}}\n\t\t\t\t\t{{#if showLabel}}\n\t\t\t\t\t\t\n\t\t\t\t\t{{/if}}\n\t\t\t\t\t
{{{getValue code}}}
\n\t\t\t\t{{/if}}\n\t\t\t{{/if}}\n\t\t{{/with}}\n\t
\n\"\"\"\n\nInstanceReadOnlyTemplate.afFormGroup = \"\"\"\n\n\t{{#with getField this.name}}\n\t\t\t{{#if equals type 'section'}}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t

{{{description}}}

\n\t\t\t\t\t
\n \t\t\t\t
\n\t\t\t{{else}}\n\t\t\t\t{{#if equals type 'table'}}\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{{description}}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{{{getTableThead this}}}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{{{getTableBody this}}}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t{{else}}\n\t\t\t\t\t{{#if equals type 'input'}}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{#if is_textarea}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t{{#unless is_textarea}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{/unless}}\n\t\t\t\t\t\t
\n\t\t\t\t\t{{else}}\n\t\t\t\t\t\t{{#if equals type 'number'}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t{{#if equals type 'date'}}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t{{#if equals type 'dateTime'}}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t{{#if equals type 'password'}}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t{{#if equals type 'select'}}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'radio'}}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#each options this}}\n \t\t\t\t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t\t\t\t\t{{/each}}\n \t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'multiSelect'}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#each options this}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/each}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'url'}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'email'}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'checkbox'}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{{getValue code}}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{/if}}\n\t\t\t\t{{/if}}\n\t\t\t{{/if}}\n\t\t{{/with}}\n\"\"\"\n\nInstanceReadOnlyTemplate.create = (tempalteName, steedosData) ->\n\ttemplate = InstanceReadOnlyTemplate[tempalteName]\n\n\ttemplateCompiled = SpacebarsCompiler.compile(template, {isBody: true});\n\n\ttemplateRenderFunction = eval(templateCompiled);\n\n\tTemplate[tempalteName] = new Blaze.Template(tempalteName, templateRenderFunction);\n\tTemplate[tempalteName].steedosData = steedosData\n\tTemplate[tempalteName].helpers InstanceformTemplate.helpers\n\nInstanceReadOnlyTemplate.createInstanceSignText = (steedosData)->\n\tinstanceSignTextHtml = _getViewHtml('client/views/instance/instance_sign_text.html')\n\n\tinstanceSignTextCompiled = SpacebarsCompiler.compile(instanceSignTextHtml, {isBody: true});\n\n\tinstanceSignTextRenderFunction = eval(instanceSignTextCompiled);\n\n\tTemplate.instanceSignText = new Blaze.Template(\"instanceSignText\", instanceSignTextRenderFunction);\n\tTemplate.instanceSignText.steedosData = steedosData\n\tTemplate.instanceSignText.helpers InstanceSignText.helpers\n\nInstanceReadOnlyTemplate.createImageSign = (steedosData) ->\n\timageSignHtml = _getViewHtml('client/views/instance/image_sign.html')\n\timageSignCompiled = SpacebarsCompiler.compile(imageSignHtml, {isBody: true});\n\timageSignRenderFunction = eval(imageSignCompiled);\n\tTemplate.imageSign = new Blaze.Template(\"imageSign\", imageSignRenderFunction);\n\tTemplate.imageSign.steedosData = steedosData\n\tTemplate.imageSign.helpers ImageSign.helpers\n\nInstanceReadOnlyTemplate.createTracesHanlder = (steedosData) ->\n\ttracesHanlderHtml = _getViewHtml('client/views/instance/traces_handler.html')\n\ttracesHanlderCompiled = SpacebarsCompiler.compile(tracesHanlderHtml, {isBody: true});\n\ttracesHanlderRenderFunction = eval(tracesHanlderCompiled);\n\tTemplate.instance_traces_handler = new Blaze.Template(\"instance_traces_handler\", tracesHanlderRenderFunction);\n\tTemplate.instance_traces_handler.steedosData = steedosData\n\tTemplate.instance_traces_handler.helpers TracesHandler.helpers\n\n\nInstanceReadOnlyTemplate.init = (steedosData) ->\n\tInstanceReadOnlyTemplate.create(\"afSelectUserRead\", steedosData);\n\n\tif Meteor.isServer\n\t\tInstanceReadOnlyTemplate.create(\"afFormGroup\", steedosData);\n\n\tInstanceReadOnlyTemplate.create(\"afFormGroupRead\", steedosData);\n\tif Meteor.isServer\n\t\tInstanceReadOnlyTemplate.create(\"instance_attachment\", {absolute: steedosData.absolute});\n\t\tInstanceReadOnlyTemplate.createImageSign(steedosData)\n\t\tInstanceReadOnlyTemplate.createTracesHanlder(steedosData);\n\t\tInstanceReadOnlyTemplate.createInstanceSignText(steedosData)\n\ngetLinkText = (item, label, detail_url)->\n\tif detail_url\n\t\tdetail_url = detail_url.replace(\"{_id}\", item._id)\n\t\tif !/^http(s?):\\/\\//.test(detail_url)\n\t\t\tdetail_url = Steedos.absoluteUrl(detail_url)\n\t\treturn ''+label+'';\n\telse\n\t\treturn label\n\nInstanceReadOnlyTemplate.getValue = (value, field, locale, utcOffset) ->\n\tif !value && value != false\n\t\treturn ''\n\tif [\"select\", \"multiSelect\", \"radio\"].indexOf(field.type) > -1\n\t\tfieldOptions = field.options.split(\"\\n\").map (n)->\n\t\t\titemSplits = n.split(\":\")\n\t\t\treturn {\n\t\t\t\tlabel: itemSplits[0],\n\t\t\t\tvalue: itemSplits[1] || n\n\t\t\t}\n\tswitch field.type\n\t\twhen 'email'\n\t\t\tvalue = if value then '' + value + '' else ''\n\t\twhen 'url'\n\t\t\tif value\n\t\t\t\tif value.indexOf(\"http\") == 0\n\t\t\t\t\ttry\n\t\t\t\t\t\tvalue = \"\" + value + \"\";\n\t\t\t\t\tcatch e\n\t\t\t\t\t\tvalue = \"\" + value + \"\";\n\n\t\t\t\telse\n\t\t\t\t\tvalue = \"\" + value + \"\";\n\t\t\telse\n\t\t\t\tvalue = ''\n\t\twhen 'group'\n\t\t\tif field.is_multiselect\n\t\t\t\tvalue = value?.getProperty(\"fullname\").toString()\n\t\t\telse\n\t\t\t\tvalue = value?.fullname\n\t\twhen 'user'\n\t\t\tif field.is_multiselect\n\t\t\t\tvalue = value?.getProperty(\"name\").toString()\n\t\t\telse\n\t\t\t\tvalue = value?.name\n\t\twhen 'password'\n\t\t\tvalue = '******'\n\t\twhen 'checkbox'\n\t\t\tif value && value != 'false'\n\t\t\t\tvalue = TAPi18n.__(\"form_field_checkbox_yes\", {}, locale)\n\t\t\telse\n\t\t\t\tvalue = TAPi18n.__(\"form_field_checkbox_no\", {}, locale)\n\t\twhen 'dateTime'\n\t\t\tif value && value.length == 16\n\t\t\t\tt = value.split(\"T\")\n\t\t\t\tt0 = t[0].split(\"-\");\n\t\t\t\tt1 = t[1].split(\":\");\n\n\t\t\t\tyear = t0[0];\n\t\t\t\tmonth = t0[1];\n\t\t\t\tdate = t0[2];\n\t\t\t\thours = t1[0];\n\t\t\t\tseconds = t1[1];\n\n\t\t\t\tvalue = new Date(year, month - 1, date, hours, seconds)\n\t\t\telse\n\t\t\t\tvalue = new Date(value)\n\n\t\t\tvalue = InstanceReadOnlyTemplate.formatDate(value, utcOffset);\n\t\twhen 'input'\n\t\t\tif field.is_textarea\n\t\t\t\tif Meteor.isServer\n\t\t\t\t\tmarked = Npm.require('marked')\n\t\t\t\tvalue = Spacebars.SafeString(marked.parse(value))\n\t\twhen 'select'\n\t\t\tselectedOption = fieldOptions.find((item) -> return item.value == value)\n\t\t\tif selectedOption\n\t\t\t\tvalue = selectedOption.label\n\t\twhen 'radio'\n\t\t\tselectedOption = fieldOptions.find((item) -> return item.value == value)\n\t\t\tif selectedOption\n\t\t\t\tvalue = selectedOption.label\n\t\twhen 'multiSelect'\n\t\t\tsplitedValues = value.split(\",\")\n\t\t\tselectedOptions = fieldOptions.filter((item) -> return splitedValues.indexOf(item.value) > -1)\n\t\t\tif selectedOptions.length\n\t\t\t\tvalue = selectedOptions.map((item) -> return item.label).join(\",\")\n\t\twhen 'number'\n\t\t\tif value or value == 0\n\t\t\t\tif field.is_percent\n\t\t\t\t\tvalue = Steedos.numberToPercentString value, field.digits\n\t\t\t\telse\n\t\t\t\t\tvalue = Steedos.numberToString value, field.digits\n\t\twhen 'odata'\n\t\t\tdetail_url = field.detail_url\n\t\t\tif field.is_multiselect\n\t\t\t\tvalue = _.map value, (item)->\n\t\t\t\t\treturn getLinkText(item, item['@label'], detail_url)\n\t\t\telse\n\t\t\t\tvalue = getLinkText(value, value['@label'], detail_url)\n\t\twhen 'image'\n\t\t\tif field.is_multiselect\n\t\t\t\tvalue = _.map value, (item)->\n\t\t\t\t\treturn '
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
'\n\t\t\t\tvalue = value.join(\"\");\n\t\t\telse\n\t\t\t\tvalue = '
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
'\n\t\twhen 'file'\n\t\t\tif value\n\t\t\t\tif !field.is_multiselect\n\t\t\t\t\tvalue = [value]\n\t\t\t\tif Meteor.isClient\n\t\t\t\t\tres = Steedos.authRequest('/api/v1/cfs_files_filerecord?filters=[[\"_id\",\"in\", '+JSON.stringify(value)+']]&fields=[\"_id\",\"original\"]', {async:false})\n\t\t\t\t\trecords = res.data.items\n\t\t\t\telse if Meteor.isServer\n\t\t\t\t\trecords = Steedos.objectFind(\"cfs_files_filerecord\", { filters: [[\"_id\", 'in', value]], fields: [\"_id\", \"original\"] });\n\n\t\t\t\tvalue = _.map records, (item)->\n\t\t\t\t\treturn \"#{item.original.name}\"\n\n\t\t\t\tvalue = value.join(\"\");\n\t\twhen 'lookup'\n\t\t\tif value\n\t\t\t\tif !field.is_multiselect\n\t\t\t\t\tvalue = [value]\n\t\t\t\tif Meteor.isClient\n\t\t\t\t\tuiSchema = Creator.getObject(field.reference_to)\n\t\t\t\t\tnameField = uiSchema?.NAME_FIELD_KEY || 'name'\n\t\t\t\t\tres = Steedos.authRequest('/api/v1/'+field.reference_to+'?filters=[[\"'+(field.reference_to_field || '_id')+'\",\"in\", '+JSON.stringify(value)+']]&fields=[\"_id\",\"'+nameField+'\"]', {async:false})\n\t\t\t\t\trecords = res.data.items\n\t\t\t\telse if Meteor.isServer\n\t\t\t\t\tnameField = Steedos.getObjectNameFieldKey(field.reference_to);\n\t\t\t\t\trecords = Steedos.objectFind(field.reference_to, { filters: [[(field.reference_to_field || '_id'), 'in', value]], fields: [\"_id\", nameField] });\n\t\t\t\tvalue = _.map records, (item)->\n\t\t\t\t\treturn \"#{item[nameField]}\"\n\n\t\t\t\tvalue = value.join(\"\");\t\n\t\twhen 'html'\n\t\t\tvalue = if value then \"
#{value}
\" else ''\n\n\treturn value;\n\nInstanceReadOnlyTemplate.getLabel = (fields, code) ->\n\tfield = fields.findPropertyByPK(\"code\", code)\n\tif field\n\t\tif field.name\n\t\t\treturn field.name\n\t\telse\n\t\t\treturn field.code\n\n\nInstanceReadOnlyTemplate.getInstanceFormVersion = (instance)->\n\tform = db.forms.findOne(instance.form);\n\n\tform_version = {}\n\n\tform_fields = [];\n\n\tif form.current._id == instance.form_version\n\t\tform_version = form.current\n\telse\n\t\tform_version = _.where(form.historys, {_id: instance.form_version})[0]\n\n\tform_version.fields.forEach (field)->\n\t\tif field.type == 'section'\n\t\t\tform_fields.push(field);\n\t\t\tif field.fields\n\t\t\t\tfield.fields.forEach (f) ->\n\t\t\t\t\tform_fields.push(f);\n\t\telse if field.type == 'table'\n\t\t\tfield['sfields'] = field['fields']\n\t\t\tdelete field['fields']\n\t\t\tform_fields.push(field);\n\t\telse\n\t\t\tform_fields.push(field);\n\n\tform_version.fields = form_fields;\n\n\treturn form_version;\n\nInstanceReadOnlyTemplate.getFlowVersion = (instance)->\n\tflow = db.flows.findOne(instance.flow);\n\tflow_version = {}\n\tif flow.current._id == instance.flow_version\n\t\tflow_version = flow.current\n\telse\n\t\tflow_version = _.where(flow.historys, {_id: instance.flow_version})[0]\n\n\treturn flow_version;\n\n\n_getViewHtml = (path) ->\n\tviewHtml = Assets.getText(path)\n\n\tif viewHtml\n\t\tviewHtml = viewHtml.replace(//i,\"\").replace(/<\\/template>/i,\"\")\n\n\treturn viewHtml;\n\n_getLocale = (user)->\n\tif user?.locale?.toLocaleLowerCase() == 'zh-cn'\n\t\tlocale = \"zh-CN\"\n\telse if user?.locale?.toLocaleLowerCase() == 'en-us'\n\t\tlocale = \"en\"\n\telse\n\t\tlocale = \"zh-CN\"\n\treturn locale\n\n\n_getRequiredFields = (fields, rev)->\n\tif !rev\n\t\trev = [];\n\n\tfields.forEach (field)->\n\t\tif field.type == 'section'\n\t\t\t_getRequiredFields(field.fields, rev)\n\t\telse if field.type == 'table'\n\n\t\telse\n\t\t\tif field.is_required\n\t\t\t\trev.push field.code\n\treturn rev;\n\n_getStartStepEditableFields = (fields, steps)->\n\tstartStep = steps.findPropertyByPK(\"step_type\",\"start\")\n\n\teditableCode = []\n\n\t_.keys(startStep.permissions).forEach (key)->\n\t\tif startStep.permissions[key] == 'editable'\n\t\t\teditableCode.push key\n\n\treturn editableCode\n\n_getStartStepRequiredFields = (fields, steps)->\n\trequiredFields = _getRequiredFields(fields)\n\n\teditableCode = _getStartStepEditableFields(fields, steps)\n\n\treturn _.intersection(requiredFields, editableCode)\n\n_getTemplateData = (user, space, instance, options)->\n\tif Meteor.isServer\n\t\tform_version = InstanceReadOnlyTemplate.getInstanceFormVersion(instance)\n\telse\n\t\tform_version = WorkflowManager.getInstanceFormVersion(instance)\n\n\tlocale = _getLocale(user)\n\n\tsteedosData = {}\n\n\tif Meteor.isClient\n\t\tsteedosData = _.clone(WorkflowManager_format.getAutoformSchemaValues())\n\t\tsteedosData.insname = instance.name\n\t\tsteedosData.ins_state = instance.state\n\t\tsteedosData.ins_final_decision = instance.ins_final_decision\n\t\tsteedosData.ins_code = instance.code\n\t\tsteedosData.ins_is_archived = instance.is_archived\n\t\tsteedosData.ins_is_deleted = instance.ins_is_deleted\n\t\tsteedosData.applicant_name = instance.applicant_name\n\t\tsteedosData.applicantContext = instance.applicant_name\n\n\tsteedosData.instance = instance\n\tsteedosData.form_version = form_version\n\tsteedosData.locale = locale\n\tsteedosData.utcOffset = user.utcOffset\n\tsteedosData.space = instance.space\n\tsteedosData.sessionUserId = user._id\n\n\tif Meteor.isServer\n\t\tif options?.editable\n\t\t\tform = db.forms.findOne({_id: instance.form})\n\n\t\t\tflow = db.flows.findOne({_id: instance.flow})\n\n\t\t\tsteedosData.startStepEditableFields = _getStartStepEditableFields(form.current.fields, flow.current.steps);\n\n\treturn steedosData;\n\nInstanceReadOnlyTemplate.formatDate = (date, utcOffset)->\n\tif Meteor.isServer\n\t\tpassing = false;\n\telse\n\t\tpassing = true;\n\n\tif !utcOffset && utcOffset !=0\n\t\tutcOffset = 8\n\n\treturn moment(date).utcOffset(utcOffset, passing).format(\"YYYY-MM-DD HH:mm\");\n\nInstanceReadOnlyTemplate.getInstanceView = (user, space, instance, options)->\n\n\tsteedosData = _getTemplateData(user, space, instance, options)\n\n\tsteedosData.absolute = false;\n\n\tif options?.absolute\n\t\tsteedosData.absolute = true;\n\n\tinstanceTemplate = TemplateManager.getTemplate(instance, options?.templateName);\n\n\tinstanceTemplate = instanceTemplate.replace(/afSelectUser/g,\"afSelectUserRead\")\n\n\tif !options?.editable\n\t\tinstanceTemplate = instanceTemplate.replace(/afFormGroup/g,\"afFormGroupRead\")\n\n\tinstanceCompiled = SpacebarsCompiler.compile(instanceTemplate, {isBody: true});\n\n\tinstanceRenderFunction = eval(instanceCompiled);\n\n\tTemplate.instance_readonly_view = new Blaze.Template(\"instance_readonly_view\", instanceRenderFunction);\n\n\tTemplate.instance_readonly_view.steedosData = steedosData\n\n\tTemplate.instance_readonly_view.helpers InstanceformTemplate.helpers\n\n\tInstanceReadOnlyTemplate.init(steedosData);\n\n\tbody = Blaze.toHTMLWithData(Template.instance_readonly_view, steedosData)\n\n\treturn \"\"\"\n\t\t
\n\t\t\t#{body}\n\t\t
\n\t\"\"\"\n\nInstanceReadOnlyTemplate.getTracesView = (user, space, instance, options)->\n\n\tsteedosData = _getTemplateData(user, space, instance)\n\n\tform = db.forms.findOne(instance.form);\n\tif form.instance_style == \"table\" || options?.templateName == \"table\"\n\t\ttracesHtml = _getViewHtml('client/views/instance/traces_table.html')\n\telse\n\t\ttracesHtml = _getViewHtml('client/views/instance/traces.html')\n\n\ttraceCompiled = SpacebarsCompiler.compile(tracesHtml, {isBody: true});\n\n\ttraceRenderFunction = eval(traceCompiled);\n\n\tTemplate.trace_readonly_view = new Blaze.Template(\"trace_readonly_view\", traceRenderFunction);\n\n\tTemplate.trace_readonly_view.steedosData = steedosData\n\n\tTemplate.trace_readonly_view.helpers TracesTemplate.helpers\n\n\tbody = Blaze.toHTMLWithData(Template.trace_readonly_view, instance.traces)\n\n\treturn body;\n\nInstanceReadOnlyTemplate.getAttachmentView = (user, space, instance)->\n\n\tsteedosData = _getTemplateData(user, space, instance)\n\n\tattachmentHtml = _getViewHtml('client/views/instance/instance_attachments.html')\n\n\tattachmentCompiled = SpacebarsCompiler.compile(attachmentHtml, {isBody: true});\n\n\tattachmentRenderFunction = eval(attachmentCompiled);\n\n\tTemplate.attachments_readonly_view = new Blaze.Template(\"attachments_readonly_view\", attachmentRenderFunction);\n\n\tTemplate.attachments_readonly_view.steedosData = steedosData\n\n\tTemplate.attachments_readonly_view.helpers InstanceAttachmentTemplate.helpers\n\n\tbody = Blaze.toHTMLWithData(Template.attachments_readonly_view)\n\n\treturn body;\n\nInstanceReadOnlyTemplate.getRelatedInstancesView = (user, space, instance, options)->\n\tsteedosData = _getTemplateData(user, space, instance)\n\n\tsteedosData.absolute = false;\n\n\tif options?.absolute\n\t\tsteedosData.absolute = true;\n\n\trelatedInstancesHtml = _getViewHtml('client/views/instance/related_instances.html')\n\n\trelatedInstancesCompiled = SpacebarsCompiler.compile(relatedInstancesHtml, {isBody: true});\n\n\trelatedInstancesRenderFunction = eval(relatedInstancesCompiled);\n\n\tTemplate.related_instances_view = new Blaze.Template(\"related_instances_view\", relatedInstancesRenderFunction);\n\n\tTemplate.related_instances_view.steedosData = steedosData\n\n\tTemplate.related_instances_view.helpers RelatedInstances.helpers\n\n\tbody = Blaze.toHTMLWithData(Template.related_instances_view, steedosData)\n\n\treturn body;\n\nInstanceReadOnlyTemplate.getRelatedRecordsView = (user, space, instance, options)->\n\tsteedosData = _getTemplateData(user, space, instance)\n\n\tsteedosData.absolute = false;\n\n\tif options?.absolute\n\t\tsteedosData.absolute = true;\n\n\trelatedRecordsHtml = _getViewHtml('client/views/instance/related_records.html')\n\n\trelatedRecordsCompiled = SpacebarsCompiler.compile(relatedRecordsHtml, {isBody: true});\n\n\trelatedRecordsRenderFunction = eval(relatedRecordsCompiled);\n\n\tTemplate.related_records_view = new Blaze.Template(\"related_records_view\", relatedRecordsRenderFunction);\n\n\tTemplate.related_records_view.steedosData = steedosData\n\n\tTemplate.related_records_view.helpers RelatedRecords.helpers\n\n\tbody = Blaze.toHTMLWithData(Template.related_records_view, steedosData)\n\n\treturn body;\n\nInstanceReadOnlyTemplate.getOnLoadScript = (instance)->\n\tform_version = WorkflowManager.getFormVersion(instance.form, instance.form_version)\n\n\tform_script = form_version.form_script;\n\n\tif form_script && form_script.replace(/\\n/g,\"\").replace(/\\s/g,\"\").length > 0\n\t\tform_script = \"CoreForm = {};CoreForm.instanceform = {};\" + form_script\n\t\tform_script += \";if(CoreForm.form_OnLoad){window.onload = CoreForm.form_OnLoad();}\"\n\telse\n\t\tform_script = \"\"\n\n\n\nInstanceReadOnlyTemplate.getInstanceHtml = (user, space, instance, options)->\n\n\tbody = InstanceReadOnlyTemplate.getInstanceView(user, space, instance, options);\n\n\tonLoadScript = InstanceReadOnlyTemplate.getOnLoadScript(instance);\n\n\tcreatorService = Meteor.settings.public.webservices?.creator?.url\n\tins_record_ids = instance.record_ids\n\tlocale = _getLocale(user);\n\topenFileScript = \"\"\"\n\t\t\tif(window.isNode && isNode()){\n\t\t\t\tattachs = document.getElementsByClassName(\"ins_attach_href\");\n\t\t\t\tfor(var i = 0; i < attachs.length; i++){\n\t\t\t\t\tattach = attachs[i];\n\t\t\t\t\tattach.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tif(isImage(this.dataset.type) || isHtml(this.dataset.type)){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\topenWindow(\"/api/files/instances/\" + this.dataset.id);\n\t\t\t\t\t\t}else if(nw_core.canOpenFile(this.dataset.name)){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tnw_core.openFile(this.href, this.dataset.name)\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar flow = \"#{instance.flow}\";\n\t\t\tvar space = \"#{instance.space}\";\n\n\t\t\tfunction getCookie(name){\n\t\t\t\tlet pattern = RegExp(name + \"=.[^;]*\")\n\t\t\t\tlet matched = document.cookie.match(pattern)\n\t\t\t\tif(matched){\n\t\t\t\t\tlet cookie = matched[0].split('=')\n\t\t\t\t\treturn cookie[1]\n\t\t\t\t}\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\tvar records = document.getElementsByClassName(\"ins-related-records\");\n\t\t\tfor(var i = 0; i < records.length; i++){\n\t\t\t\t\tvar record = records[i];\n\t\t\t\t\trecord.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tvar creatorService = \"#{creatorService}\"\n\t\t\t\t\t\tvar ins_record_ids = #{JSON.stringify(ins_record_ids)}\n\t\t\t\t\t\tif(creatorService && ins_record_ids && ins_record_ids.length > 0){\n\t\t\t\t\t\t\tvar objcetName = ins_record_ids[0].o\n\t\t\t\t\t\t\tvar id = ins_record_ids[0].ids[0]\n\t\t\t\t\t\t\tvar uobj = {};\n\t\t\t\t\t\t\tuobj[\"X-User-Id\"] = getCookie(\"X-User-Id\");\n\t\t\t\t\t\t\tuobj[\"X-Auth-Token\"] = getCookie(\"X-Auth-Token\");\n\t\t\t\t\t\t\tredirectUrl = creatorService + \"app/-/\" + objcetName + \"/view/\" + id + \"?\" + $.param(uobj);\n\t\t\t\t\t\t\topenWindow(redirectUrl);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\"\"\";\n\n\n\tif !Steedos.isMobile()\n\t\tform = db.forms.findOne(instance.form);\n\t\tif form?.instance_style == 'table'\n\t\t\tinstance_style = \"instance-table\"\n\n\tif options?.templateName == 'table'\n\t\tinstance_style = \"instance-table\"\n\n\tif options?.instance_style\n\t\tinstance_style = options.instance_style\n\n\tif !options || options.showTrace == true\n\t\ttrace = InstanceReadOnlyTemplate.getTracesView(user, space, instance)\n\telse\n\t\ttrace = \"\"\n\n\tinstanceBoxStyle = \"\";\n\n\tif instance && instance.final_decision\n\t\tif instance.final_decision == \"approved\"\n\t\t\tinstanceBoxStyle = \"box-success\"\n\t\telse if (instance.final_decision == \"rejected\")\n\t\t\tinstanceBoxStyle = \"box-danger\"\n\tif !options || options.showAttachments == true\n\t\tattachment = InstanceReadOnlyTemplate.getAttachmentView(user, space, instance)\n\t\trelated_instances = InstanceReadOnlyTemplate.getRelatedInstancesView(user, space, instance, options)\n\t\trelated_records = InstanceReadOnlyTemplate.getRelatedRecordsView(user, space, instance, options)\n\telse\n\t\tattachment = \"\"\n\t\trelated_instances = \"\"\n\t\trelated_records = \"\"\n\n\n\twidth = \"960px\"\n\t#\t如果给table的parent设置width,则会导致阿里云邮箱显示table 异常\n\tif options?.width\n\t\twidth = \"\"\n\n\tcssHref = Meteor.absoluteUrl(\"steedos-css\")\n\t\n\tjqHref = Meteor.absoluteUrl(\"website/libs/jquery.min.js\")\n\n\tallCssLink = \"\"\"\"\"\"\n\n\ttraceCheck = \"\"\n\tif !_.isEmpty(trace)\n\t\ttraceCheck = \"checked\"\n\tif options?.tagger == 'email' || options?.editable\n\t\tshowTracesBtn = \"\"\n\telse\n\t\tshowTracesBtn = \"\"\"\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\t\"\"\"\n\n\tshowTracesScript = \"\"\"\n\t\t$( document ).ready(function(){\n\t\t\tvar b = document.getElementById('cbx-print-traces');\n\t\t\tvar t = document.getElementsByClassName('instance-traces')[0];\n\t\t\tif (b && b.checked && t){\n\t\t\t\tt.style = 'display: block;'\n\t\t\t} else if(t){\n\t\t\t\tt.style = 'display: none;'\n\t\t\t}\n\t\t\tif(b){\n\t\t\t\tb.addEventListener('change', function(e){\n\t\t\t\t\tif (e.target.checked){\n\t\t\t\t\t\tt.style = 'display: block;'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.style = 'display: none;'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tvar attachmentsCheckbox = document.getElementById('cbx-print-attachments');\n\t\t\tvar attachmentsView = document.getElementsByClassName('attachments-section')[0];\n\t\t\tif (attachmentsCheckbox && attachmentsCheckbox.checked && attachmentsView){\n\t\t\t\tattachmentsView.style = 'display: block;'\n\t\t\t} else if(attachmentsView){\n\t\t\t\tattachmentsView.style = 'display: none;'\n\t\t\t}\n\t\t\tif(attachmentsCheckbox){\n\t\t\t\tattachmentsCheckbox.addEventListener('change', function(e){\n\t\t\t\t\tif (e.target.checked){\n\t\t\t\t\t\tattachmentsView.style = 'display: block;'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattachmentsView.style = 'display: none;'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\"\"\"\n\n\tif options?.styles\n\t\tallCssLink = \"\"\n\n\tform = db.forms.findOne({_id: instance.form});\n\tformDescriptionHtml = \"\"\n\tif form\n\t\tformDescription = form.description\n\t\tif formDescription\n\t\t\tformDescription = formDescription.replace(/\\n/g,\"
\")\n\t\t\tformDescriptionHtml = \"\"\"\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t#{formDescription}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\"\"\"\n\n\thtml = \"\"\"\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t#{allCssLink}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t#{options.plugins || \"\"}\n\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t#{showTracesBtn}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t#{formDescriptionHtml}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t#{attachment}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t#{related_instances}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t#{related_records}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t#{body}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t#{trace}\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\n\t\"\"\"\n\n\treturn html","var _getLocale, _getRequiredFields, _getStartStepEditableFields, _getStartStepRequiredFields, _getTemplateData, _getViewHtml, getLinkText, marked; \n\nmarked = require(\"marked\");\n\nInstanceReadOnlyTemplate = {};\n\nInstanceReadOnlyTemplate.instance_attachment = \"\\n\t\\n\t\t{{this.name}}\\n\t\\n\";\n\nInstanceReadOnlyTemplate.afSelectUserRead = \"
{{value}}
\";\n\nInstanceReadOnlyTemplate.afFormGroupRead = \"
\\n\t{{#with getField this.name}}\\n\t\t{{#if equals type 'section'}}\\n\t\t\t\t
\\n\t\t\t\t\t\\n\t\t\t\t\t

{{{description}}}

\\n\t\t\t\t
\\n\t\t{{else}}\\n\t\t\t{{#if equals type 'table'}}\\n\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t{{{description}}}\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t{{{getTableThead this}}}\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t{{{getTableBody this}}}\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t{{else}}\\n\t\t\t\t{{#if showLabel}}\\n\t\t\t\t\t\\n\t\t\t\t{{/if}}\\n\t\t\t\t
{{{getValue code}}}
\\n\t\t\t{{/if}}\\n\t\t{{/if}}\\n\t{{/with}}\\n
\";\n\nInstanceReadOnlyTemplate.afFormGroup = \"\\n{{#with getField this.name}}\\n\t\t{{#if equals type 'section'}}\\n\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t\\n\t\t\t\t\t

{{{description}}}

\\n\t\t\t\t
\\n \t\t\t\t
\\n\t\t{{else}}\\n\t\t\t{{#if equals type 'table'}}\\n\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t{{{description}}}\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t{{{getTableThead this}}}\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t{{{getTableBody this}}}\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t{{else}}\\n\t\t\t\t{{#if equals type 'input'}}\\n\t\t\t\t\t
\\n\t\t\t\t\t\t\\n\t\t\t\t\t\t{{#if is_textarea}}\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t{{#unless is_textarea}}\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t{{/unless}}\\n\t\t\t\t\t
\\n\t\t\t\t{{else}}\\n\t\t\t\t\t{{#if equals type 'number'}}\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t
\\n\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t{{#if equals type 'date'}}\\n\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t{{#if equals type 'dateTime'}}\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t{{#if equals type 'password'}}\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t{{#if equals type 'select'}}\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t{{#if equals type 'radio'}}\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{#each options this}}\\n \t\t\t\t\t\t\t\t\t\t\t\t\\n \t\t\t\t\t\t\t\t\t\t\t\t\t{{/each}}\\n \t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'multiSelect'}}\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#each options this}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/each}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'url'}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'email'}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'checkbox'}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{{getValue code}}}
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t{{/if}}\\n\t\t\t\t{{/if}}\\n\t\t\t{{/if}}\\n\t\t{{/if}}\\n\t{{/with}}\";\n\nInstanceReadOnlyTemplate.create = function(tempalteName, steedosData) {\n var template, templateCompiled, templateRenderFunction;\n template = InstanceReadOnlyTemplate[tempalteName];\n templateCompiled = SpacebarsCompiler.compile(template, {\n isBody: true\n });\n templateRenderFunction = eval(templateCompiled);\n Template[tempalteName] = new Blaze.Template(tempalteName, templateRenderFunction);\n Template[tempalteName].steedosData = steedosData;\n return Template[tempalteName].helpers(InstanceformTemplate.helpers);\n};\n\nInstanceReadOnlyTemplate.createInstanceSignText = function(steedosData) {\n var instanceSignTextCompiled, instanceSignTextHtml, instanceSignTextRenderFunction;\n instanceSignTextHtml = _getViewHtml('client/views/instance/instance_sign_text.html');\n instanceSignTextCompiled = SpacebarsCompiler.compile(instanceSignTextHtml, {\n isBody: true\n });\n instanceSignTextRenderFunction = eval(instanceSignTextCompiled);\n Template.instanceSignText = new Blaze.Template(\"instanceSignText\", instanceSignTextRenderFunction);\n Template.instanceSignText.steedosData = steedosData;\n return Template.instanceSignText.helpers(InstanceSignText.helpers);\n};\n\nInstanceReadOnlyTemplate.createImageSign = function(steedosData) {\n var imageSignCompiled, imageSignHtml, imageSignRenderFunction;\n imageSignHtml = _getViewHtml('client/views/instance/image_sign.html');\n imageSignCompiled = SpacebarsCompiler.compile(imageSignHtml, {\n isBody: true\n });\n imageSignRenderFunction = eval(imageSignCompiled);\n Template.imageSign = new Blaze.Template(\"imageSign\", imageSignRenderFunction);\n Template.imageSign.steedosData = steedosData;\n return Template.imageSign.helpers(ImageSign.helpers);\n};\n\nInstanceReadOnlyTemplate.createTracesHanlder = function(steedosData) {\n var tracesHanlderCompiled, tracesHanlderHtml, tracesHanlderRenderFunction;\n tracesHanlderHtml = _getViewHtml('client/views/instance/traces_handler.html');\n tracesHanlderCompiled = SpacebarsCompiler.compile(tracesHanlderHtml, {\n isBody: true\n });\n tracesHanlderRenderFunction = eval(tracesHanlderCompiled);\n Template.instance_traces_handler = new Blaze.Template(\"instance_traces_handler\", tracesHanlderRenderFunction);\n Template.instance_traces_handler.steedosData = steedosData;\n return Template.instance_traces_handler.helpers(TracesHandler.helpers);\n};\n\nInstanceReadOnlyTemplate.init = function(steedosData) {\n InstanceReadOnlyTemplate.create(\"afSelectUserRead\", steedosData);\n if (Meteor.isServer) {\n InstanceReadOnlyTemplate.create(\"afFormGroup\", steedosData);\n }\n InstanceReadOnlyTemplate.create(\"afFormGroupRead\", steedosData);\n if (Meteor.isServer) {\n InstanceReadOnlyTemplate.create(\"instance_attachment\", {\n absolute: steedosData.absolute\n });\n InstanceReadOnlyTemplate.createImageSign(steedosData);\n InstanceReadOnlyTemplate.createTracesHanlder(steedosData);\n return InstanceReadOnlyTemplate.createInstanceSignText(steedosData);\n }\n};\n\ngetLinkText = function(item, label, detail_url) {\n if (detail_url) {\n detail_url = detail_url.replace(\"{_id}\", item._id);\n if (!/^http(s?):\\/\\//.test(detail_url)) {\n detail_url = Steedos.absoluteUrl(detail_url);\n }\n return '' + label + '';\n } else {\n return label;\n }\n};\n\nInstanceReadOnlyTemplate.getValue = function(value, field, locale, utcOffset) {\n var date, detail_url, e, fieldOptions, hours, month, nameField, records, res, seconds, selectedOption, selectedOptions, splitedValues, t, t0, t1, uiSchema, year;\n if (!value && value !== false) {\n return '';\n }\n if ([\"select\", \"multiSelect\", \"radio\"].indexOf(field.type) > -1) {\n fieldOptions = field.options.split(\"\\n\").map(function(n) {\n var itemSplits;\n itemSplits = n.split(\":\");\n return {\n label: itemSplits[0],\n value: itemSplits[1] || n\n };\n });\n }\n switch (field.type) {\n case 'email':\n value = value ? '' + value + '' : '';\n break;\n case 'url':\n if (value) {\n if (value.indexOf(\"http\") === 0) {\n try {\n value = \"\" + value + \"\";\n } catch (error) {\n e = error;\n value = \"\" + value + \"\";\n }\n } else {\n value = \"\" + value + \"\";\n }\n } else {\n value = '';\n }\n break;\n case 'group':\n if (field.is_multiselect) {\n value = value != null ? value.getProperty(\"fullname\").toString() : void 0;\n } else {\n value = value != null ? value.fullname : void 0;\n }\n break;\n case 'user':\n if (field.is_multiselect) {\n value = value != null ? value.getProperty(\"name\").toString() : void 0;\n } else {\n value = value != null ? value.name : void 0;\n }\n break;\n case 'password':\n value = '******';\n break;\n case 'checkbox':\n if (value && value !== 'false') {\n value = TAPi18n.__(\"form_field_checkbox_yes\", {}, locale);\n } else {\n value = TAPi18n.__(\"form_field_checkbox_no\", {}, locale);\n }\n break;\n case 'dateTime':\n if (value && value.length === 16) {\n t = value.split(\"T\");\n t0 = t[0].split(\"-\");\n t1 = t[1].split(\":\");\n year = t0[0];\n month = t0[1];\n date = t0[2];\n hours = t1[0];\n seconds = t1[1];\n value = new Date(year, month - 1, date, hours, seconds);\n } else {\n value = new Date(value);\n }\n value = InstanceReadOnlyTemplate.formatDate(value, utcOffset);\n break;\n case 'input':\n if (field.is_textarea) {\n if (Meteor.isServer) {\n marked = Npm.require('marked');\n }\n value = Spacebars.SafeString(marked.parse(value));\n }\n break;\n case 'select':\n selectedOption = fieldOptions.find(function(item) {\n return item.value === value;\n });\n if (selectedOption) {\n value = selectedOption.label;\n }\n break;\n case 'radio':\n selectedOption = fieldOptions.find(function(item) {\n return item.value === value;\n });\n if (selectedOption) {\n value = selectedOption.label;\n }\n break;\n case 'multiSelect':\n splitedValues = value.split(\",\");\n selectedOptions = fieldOptions.filter(function(item) {\n return splitedValues.indexOf(item.value) > -1;\n });\n if (selectedOptions.length) {\n value = selectedOptions.map(function(item) {\n return item.label;\n }).join(\",\");\n }\n break;\n case 'number':\n if (value || value === 0) {\n if (field.is_percent) {\n value = Steedos.numberToPercentString(value, field.digits);\n } else {\n value = Steedos.numberToString(value, field.digits);\n }\n }\n break;\n case 'odata':\n detail_url = field.detail_url;\n if (field.is_multiselect) {\n value = _.map(value, function(item) {\n return getLinkText(item, item['@label'], detail_url);\n });\n } else {\n value = getLinkText(value, value['@label'], detail_url);\n }\n break;\n case 'image':\n if (field.is_multiselect) {\n value = _.map(value, function(item) {\n return '
';\n });\n value = value.join(\"\");\n } else {\n value = '
';\n }\n break;\n case 'file':\n if (value) {\n if (!field.is_multiselect) {\n value = [value];\n }\n if (Meteor.isClient) {\n res = Steedos.authRequest('/api/v1/cfs_files_filerecord?filters=[[\"_id\",\"in\", ' + JSON.stringify(value) + ']]&fields=[\"_id\",\"original\"]', {\n async: false\n });\n records = res.data.items;\n } else if (Meteor.isServer) {\n records = Steedos.objectFind(\"cfs_files_filerecord\", {\n filters: [[\"_id\", 'in', value]],\n fields: [\"_id\", \"original\"]\n });\n }\n value = _.map(records, function(item) {\n return \"\" + item.original.name + \"\";\n });\n value = value.join(\"\");\n }\n break;\n case 'lookup':\n if (value) {\n if (!field.is_multiselect) {\n value = [value];\n }\n if (Meteor.isClient) {\n uiSchema = Creator.getObject(field.reference_to);\n nameField = (uiSchema != null ? uiSchema.NAME_FIELD_KEY : void 0) || 'name';\n res = Steedos.authRequest('/api/v1/' + field.reference_to + '?filters=[[\"' + (field.reference_to_field || '_id') + '\",\"in\", ' + JSON.stringify(value) + ']]&fields=[\"_id\",\"' + nameField + '\"]', {\n async: false\n });\n records = res.data.items;\n } else if (Meteor.isServer) {\n nameField = Steedos.getObjectNameFieldKey(field.reference_to);\n records = Steedos.objectFind(field.reference_to, {\n filters: [[field.reference_to_field || '_id', 'in', value]],\n fields: [\"_id\", nameField]\n });\n }\n value = _.map(records, function(item) {\n return \"\" + item[nameField] + \"\";\n });\n value = value.join(\"\");\n }\n break;\n case 'html':\n value = value ? \"
\" + value + \"
\" : '';\n }\n return value;\n};\n\nInstanceReadOnlyTemplate.getLabel = function(fields, code) {\n var field;\n field = fields.findPropertyByPK(\"code\", code);\n if (field) {\n if (field.name) {\n return field.name;\n } else {\n return field.code;\n }\n }\n};\n\nInstanceReadOnlyTemplate.getInstanceFormVersion = function(instance) {\n var form, form_fields, form_version;\n form = db.forms.findOne(instance.form);\n form_version = {};\n form_fields = [];\n if (form.current._id === instance.form_version) {\n form_version = form.current;\n } else {\n form_version = _.where(form.historys, {\n _id: instance.form_version\n })[0];\n }\n form_version.fields.forEach(function(field) {\n if (field.type === 'section') {\n form_fields.push(field);\n if (field.fields) {\n return field.fields.forEach(function(f) {\n return form_fields.push(f);\n });\n }\n } else if (field.type === 'table') {\n field['sfields'] = field['fields'];\n delete field['fields'];\n return form_fields.push(field);\n } else {\n return form_fields.push(field);\n }\n });\n form_version.fields = form_fields;\n return form_version;\n};\n\nInstanceReadOnlyTemplate.getFlowVersion = function(instance) {\n var flow, flow_version;\n flow = db.flows.findOne(instance.flow);\n flow_version = {};\n if (flow.current._id === instance.flow_version) {\n flow_version = flow.current;\n } else {\n flow_version = _.where(flow.historys, {\n _id: instance.flow_version\n })[0];\n }\n return flow_version;\n};\n\n_getViewHtml = function(path) {\n var viewHtml;\n viewHtml = Assets.getText(path);\n if (viewHtml) {\n viewHtml = viewHtml.replace(//i, \"\").replace(/<\\/template>/i, \"\");\n }\n return viewHtml;\n};\n\n_getLocale = function(user) {\n var locale, ref, ref1;\n if ((user != null ? (ref = user.locale) != null ? ref.toLocaleLowerCase() : void 0 : void 0) === 'zh-cn') {\n locale = \"zh-CN\";\n } else if ((user != null ? (ref1 = user.locale) != null ? ref1.toLocaleLowerCase() : void 0 : void 0) === 'en-us') {\n locale = \"en\";\n } else {\n locale = \"zh-CN\";\n }\n return locale;\n};\n\n_getRequiredFields = function(fields, rev) {\n if (!rev) {\n rev = [];\n }\n fields.forEach(function(field) {\n if (field.type === 'section') {\n return _getRequiredFields(field.fields, rev);\n } else if (field.type === 'table') {\n\n } else {\n if (field.is_required) {\n return rev.push(field.code);\n }\n }\n });\n return rev;\n};\n\n_getStartStepEditableFields = function(fields, steps) {\n var editableCode, startStep;\n startStep = steps.findPropertyByPK(\"step_type\", \"start\");\n editableCode = [];\n _.keys(startStep.permissions).forEach(function(key) {\n if (startStep.permissions[key] === 'editable') {\n return editableCode.push(key);\n }\n });\n return editableCode;\n};\n\n_getStartStepRequiredFields = function(fields, steps) {\n var editableCode, requiredFields;\n requiredFields = _getRequiredFields(fields);\n editableCode = _getStartStepEditableFields(fields, steps);\n return _.intersection(requiredFields, editableCode);\n};\n\n_getTemplateData = function(user, space, instance, options) {\n var flow, form, form_version, locale, steedosData;\n if (Meteor.isServer) {\n form_version = InstanceReadOnlyTemplate.getInstanceFormVersion(instance);\n } else {\n form_version = WorkflowManager.getInstanceFormVersion(instance);\n }\n locale = _getLocale(user);\n steedosData = {};\n if (Meteor.isClient) {\n steedosData = _.clone(WorkflowManager_format.getAutoformSchemaValues());\n steedosData.insname = instance.name;\n steedosData.ins_state = instance.state;\n steedosData.ins_final_decision = instance.ins_final_decision;\n steedosData.ins_code = instance.code;\n steedosData.ins_is_archived = instance.is_archived;\n steedosData.ins_is_deleted = instance.ins_is_deleted;\n steedosData.applicant_name = instance.applicant_name;\n steedosData.applicantContext = instance.applicant_name;\n }\n steedosData.instance = instance;\n steedosData.form_version = form_version;\n steedosData.locale = locale;\n steedosData.utcOffset = user.utcOffset;\n steedosData.space = instance.space;\n steedosData.sessionUserId = user._id;\n if (Meteor.isServer) {\n if (options != null ? options.editable : void 0) {\n form = db.forms.findOne({\n _id: instance.form\n });\n flow = db.flows.findOne({\n _id: instance.flow\n });\n steedosData.startStepEditableFields = _getStartStepEditableFields(form.current.fields, flow.current.steps);\n }\n }\n return steedosData;\n};\n\nInstanceReadOnlyTemplate.formatDate = function(date, utcOffset) {\n var passing;\n if (Meteor.isServer) {\n passing = false;\n } else {\n passing = true;\n }\n if (!utcOffset && utcOffset !== 0) {\n utcOffset = 8;\n }\n return moment(date).utcOffset(utcOffset, passing).format(\"YYYY-MM-DD HH:mm\");\n};\n\nInstanceReadOnlyTemplate.getInstanceView = function(user, space, instance, options) {\n var body, instanceCompiled, instanceRenderFunction, instanceTemplate, steedosData;\n steedosData = _getTemplateData(user, space, instance, options);\n steedosData.absolute = false;\n if (options != null ? options.absolute : void 0) {\n steedosData.absolute = true;\n }\n instanceTemplate = TemplateManager.getTemplate(instance, options != null ? options.templateName : void 0);\n instanceTemplate = instanceTemplate.replace(/afSelectUser/g, \"afSelectUserRead\");\n if (!(options != null ? options.editable : void 0)) {\n instanceTemplate = instanceTemplate.replace(/afFormGroup/g, \"afFormGroupRead\");\n }\n instanceCompiled = SpacebarsCompiler.compile(instanceTemplate, {\n isBody: true\n });\n instanceRenderFunction = eval(instanceCompiled);\n Template.instance_readonly_view = new Blaze.Template(\"instance_readonly_view\", instanceRenderFunction);\n Template.instance_readonly_view.steedosData = steedosData;\n Template.instance_readonly_view.helpers(InstanceformTemplate.helpers);\n InstanceReadOnlyTemplate.init(steedosData);\n body = Blaze.toHTMLWithData(Template.instance_readonly_view, steedosData);\n return \"
\\n\t\" + body + \"\\n
\";\n};\n\nInstanceReadOnlyTemplate.getTracesView = function(user, space, instance, options) {\n var body, form, steedosData, traceCompiled, traceRenderFunction, tracesHtml;\n steedosData = _getTemplateData(user, space, instance);\n form = db.forms.findOne(instance.form);\n if (form.instance_style === \"table\" || (options != null ? options.templateName : void 0) === \"table\") {\n tracesHtml = _getViewHtml('client/views/instance/traces_table.html');\n } else {\n tracesHtml = _getViewHtml('client/views/instance/traces.html');\n }\n traceCompiled = SpacebarsCompiler.compile(tracesHtml, {\n isBody: true\n });\n traceRenderFunction = eval(traceCompiled);\n Template.trace_readonly_view = new Blaze.Template(\"trace_readonly_view\", traceRenderFunction);\n Template.trace_readonly_view.steedosData = steedosData;\n Template.trace_readonly_view.helpers(TracesTemplate.helpers);\n body = Blaze.toHTMLWithData(Template.trace_readonly_view, instance.traces);\n return body;\n};\n\nInstanceReadOnlyTemplate.getAttachmentView = function(user, space, instance) {\n var attachmentCompiled, attachmentHtml, attachmentRenderFunction, body, steedosData;\n steedosData = _getTemplateData(user, space, instance);\n attachmentHtml = _getViewHtml('client/views/instance/instance_attachments.html');\n attachmentCompiled = SpacebarsCompiler.compile(attachmentHtml, {\n isBody: true\n });\n attachmentRenderFunction = eval(attachmentCompiled);\n Template.attachments_readonly_view = new Blaze.Template(\"attachments_readonly_view\", attachmentRenderFunction);\n Template.attachments_readonly_view.steedosData = steedosData;\n Template.attachments_readonly_view.helpers(InstanceAttachmentTemplate.helpers);\n body = Blaze.toHTMLWithData(Template.attachments_readonly_view);\n return body;\n};\n\nInstanceReadOnlyTemplate.getRelatedInstancesView = function(user, space, instance, options) {\n var body, relatedInstancesCompiled, relatedInstancesHtml, relatedInstancesRenderFunction, steedosData;\n steedosData = _getTemplateData(user, space, instance);\n steedosData.absolute = false;\n if (options != null ? options.absolute : void 0) {\n steedosData.absolute = true;\n }\n relatedInstancesHtml = _getViewHtml('client/views/instance/related_instances.html');\n relatedInstancesCompiled = SpacebarsCompiler.compile(relatedInstancesHtml, {\n isBody: true\n });\n relatedInstancesRenderFunction = eval(relatedInstancesCompiled);\n Template.related_instances_view = new Blaze.Template(\"related_instances_view\", relatedInstancesRenderFunction);\n Template.related_instances_view.steedosData = steedosData;\n Template.related_instances_view.helpers(RelatedInstances.helpers);\n body = Blaze.toHTMLWithData(Template.related_instances_view, steedosData);\n return body;\n};\n\nInstanceReadOnlyTemplate.getRelatedRecordsView = function(user, space, instance, options) {\n var body, relatedRecordsCompiled, relatedRecordsHtml, relatedRecordsRenderFunction, steedosData;\n steedosData = _getTemplateData(user, space, instance);\n steedosData.absolute = false;\n if (options != null ? options.absolute : void 0) {\n steedosData.absolute = true;\n }\n relatedRecordsHtml = _getViewHtml('client/views/instance/related_records.html');\n relatedRecordsCompiled = SpacebarsCompiler.compile(relatedRecordsHtml, {\n isBody: true\n });\n relatedRecordsRenderFunction = eval(relatedRecordsCompiled);\n Template.related_records_view = new Blaze.Template(\"related_records_view\", relatedRecordsRenderFunction);\n Template.related_records_view.steedosData = steedosData;\n Template.related_records_view.helpers(RelatedRecords.helpers);\n body = Blaze.toHTMLWithData(Template.related_records_view, steedosData);\n return body;\n};\n\nInstanceReadOnlyTemplate.getOnLoadScript = function(instance) {\n var form_script, form_version;\n form_version = WorkflowManager.getFormVersion(instance.form, instance.form_version);\n form_script = form_version.form_script;\n if (form_script && form_script.replace(/\\n/g, \"\").replace(/\\s/g, \"\").length > 0) {\n form_script = \"CoreForm = {};CoreForm.instanceform = {};\" + form_script;\n return form_script += \";if(CoreForm.form_OnLoad){window.onload = CoreForm.form_OnLoad();}\";\n } else {\n return form_script = \"\";\n }\n};\n\nInstanceReadOnlyTemplate.getInstanceHtml = function(user, space, instance, options) {\n var allCssLink, attachment, body, creatorService, cssHref, form, formDescription, formDescriptionHtml, html, ins_record_ids, instanceBoxStyle, instance_style, jqHref, locale, onLoadScript, openFileScript, ref, ref1, related_instances, related_records, showTracesBtn, showTracesScript, trace, traceCheck, width;\n body = InstanceReadOnlyTemplate.getInstanceView(user, space, instance, options);\n onLoadScript = InstanceReadOnlyTemplate.getOnLoadScript(instance);\n creatorService = (ref = Meteor.settings[\"public\"].webservices) != null ? (ref1 = ref.creator) != null ? ref1.url : void 0 : void 0;\n ins_record_ids = instance.record_ids;\n locale = _getLocale(user);\n openFileScript = \"if(window.isNode && isNode()){\\n\tattachs = document.getElementsByClassName(\\\"ins_attach_href\\\");\\n\tfor(var i = 0; i < attachs.length; i++){\\n\t\tattach = attachs[i];\\n\t\tattach.addEventListener(\\\"click\\\", function(e){\\n\t\t\tif(isImage(this.dataset.type) || isHtml(this.dataset.type)){\\n\t\t\t\te.preventDefault();\\n\t\t\t\topenWindow(\\\"/api/files/instances/\\\" + this.dataset.id);\\n\t\t\t}else if(nw_core.canOpenFile(this.dataset.name)){\\n\t\t\t\te.preventDefault();\\n\t\t\t\tnw_core.openFile(this.href, this.dataset.name)\\n\t\t\t}\\n\t\t});\\n\t}\\n}\\n\\nvar flow = \\\"\" + instance.flow + \"\\\";\\nvar space = \\\"\" + instance.space + \"\\\";\\n\\nfunction getCookie(name){\\n\tlet pattern = RegExp(name + \\\"=.[^;]*\\\")\\n\tlet matched = document.cookie.match(pattern)\\n\tif(matched){\\n\t\tlet cookie = matched[0].split('=')\\n\t\treturn cookie[1]\\n\t}\\n\treturn ''\\n}\\n\\nvar records = document.getElementsByClassName(\\\"ins-related-records\\\");\\nfor(var i = 0; i < records.length; i++){\\n\t\tvar record = records[i];\\n\t\trecord.addEventListener(\\\"click\\\", function(e){\\n\t\t\tvar creatorService = \\\"\" + creatorService + \"\\\"\\n\t\t\tvar ins_record_ids = \" + (JSON.stringify(ins_record_ids)) + \"\\n\t\t\tif(creatorService && ins_record_ids && ins_record_ids.length > 0){\\n\t\t\t\tvar objcetName = ins_record_ids[0].o\\n\t\t\t\tvar id = ins_record_ids[0].ids[0]\\n\t\t\t\tvar uobj = {};\\n\t\t\t\tuobj[\\\"X-User-Id\\\"] = getCookie(\\\"X-User-Id\\\");\\n\t\t\t\tuobj[\\\"X-Auth-Token\\\"] = getCookie(\\\"X-Auth-Token\\\");\\n\t\t\t\tredirectUrl = creatorService + \\\"app/-/\\\" + objcetName + \\\"/view/\\\" + id + \\\"?\\\" + $.param(uobj);\\n\t\t\t\topenWindow(redirectUrl);\\n\t\t\t}\\n\t\t});\\n\t}\\n\";\n if (!Steedos.isMobile()) {\n form = db.forms.findOne(instance.form);\n if ((form != null ? form.instance_style : void 0) === 'table') {\n instance_style = \"instance-table\";\n }\n }\n if ((options != null ? options.templateName : void 0) === 'table') {\n instance_style = \"instance-table\";\n }\n if (options != null ? options.instance_style : void 0) {\n instance_style = options.instance_style;\n }\n if (!options || options.showTrace === true) {\n trace = InstanceReadOnlyTemplate.getTracesView(user, space, instance);\n } else {\n trace = \"\";\n }\n instanceBoxStyle = \"\";\n if (instance && instance.final_decision) {\n if (instance.final_decision === \"approved\") {\n instanceBoxStyle = \"box-success\";\n } else if (instance.final_decision === \"rejected\") {\n instanceBoxStyle = \"box-danger\";\n }\n }\n if (!options || options.showAttachments === true) {\n attachment = InstanceReadOnlyTemplate.getAttachmentView(user, space, instance);\n related_instances = InstanceReadOnlyTemplate.getRelatedInstancesView(user, space, instance, options);\n related_records = InstanceReadOnlyTemplate.getRelatedRecordsView(user, space, instance, options);\n } else {\n attachment = \"\";\n related_instances = \"\";\n related_records = \"\";\n }\n width = \"960px\";\n if (options != null ? options.width : void 0) {\n width = \"\";\n }\n cssHref = Meteor.absoluteUrl(\"steedos-css\");\n jqHref = Meteor.absoluteUrl(\"website/libs/jquery.min.js\");\n allCssLink = \"\";\n traceCheck = \"\";\n if (!_.isEmpty(trace)) {\n traceCheck = \"checked\";\n }\n if ((options != null ? options.tagger : void 0) === 'email' || (options != null ? options.editable : void 0)) {\n showTracesBtn = \"\";\n } else {\n showTracesBtn = \"
\\n\t
\\n\t\t\\n\t\t\\n\t
\\n
\";\n }\n showTracesScript = \"$( document ).ready(function(){\\n\tvar b = document.getElementById('cbx-print-traces');\\n\tvar t = document.getElementsByClassName('instance-traces')[0];\\n\tif (b && b.checked && t){\\n\t\tt.style = 'display: block;'\\n\t} else if(t){\\n\t\tt.style = 'display: none;'\\n\t}\\n\tif(b){\\n\t\tb.addEventListener('change', function(e){\\n\t\t\tif (e.target.checked){\\n\t\t\t\tt.style = 'display: block;'\\n\t\t\t} else {\\n\t\t\t\tt.style = 'display: none;'\\n\t\t\t}\\n\t\t});\\n\t}\\n\\n\\n\tvar attachmentsCheckbox = document.getElementById('cbx-print-attachments');\\n\tvar attachmentsView = document.getElementsByClassName('attachments-section')[0];\\n\tif (attachmentsCheckbox && attachmentsCheckbox.checked && attachmentsView){\\n\t\tattachmentsView.style = 'display: block;'\\n\t} else if(attachmentsView){\\n\t\tattachmentsView.style = 'display: none;'\\n\t}\\n\tif(attachmentsCheckbox){\\n\t\tattachmentsCheckbox.addEventListener('change', function(e){\\n\t\t\tif (e.target.checked){\\n\t\t\t\tattachmentsView.style = 'display: block;'\\n\t\t\t} else {\\n\t\t\t\tattachmentsView.style = 'display: none;'\\n\t\t\t}\\n\t\t});\\n\t}\\n});\\n\";\n if (options != null ? options.styles : void 0) {\n allCssLink = \"\";\n }\n form = db.forms.findOne({\n _id: instance.form\n });\n formDescriptionHtml = \"\";\n if (form) {\n formDescription = form.description;\n if (formDescription) {\n formDescription = formDescription.replace(/\\n/g, \"
\");\n formDescriptionHtml = \"
\\n\t
\\n\t\t\" + formDescription + \"\\n\t
\\n
\";\n }\n }\n html = \"\\n\\n\t\\n\t\t\\n\t\t\" + allCssLink + \"\\n\t\t\\n\t\t\\n\t\t\" + (options.plugins || \"\") + \"\\n\\n\t\t\\n\t\\n\t\\n\t\t
\\n\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t\" + showTracesBtn + \"\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\" + formDescriptionHtml + \"\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\" + attachment + \"\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\" + related_instances + \"\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\" + related_records + \"\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\" + body + \"\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\" + trace + \"\\n\t\t\t\t\t\t\t
\\n\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t
\\n\t\t
\\n\t\\n\t\\n\";\n return html;\n};\n","TemplateManager = {};\n\nformId = 'instanceform';\n\n\nTemplateManager.instance_title = ()->\n\tpageTitle = \"\"\"\n\t\t{{instance.name}}\n\t\"\"\"\n\n\tpageTitleTrClass = \"instance-name\"\n\n\tif CoreForm?.pageTitleFieldName\n\t\tpageTitle = \"\"\"\n\t\t\t\t{{> afFormGroup name=\"#{CoreForm.pageTitleFieldName}\" label=false}}\n\t\t\"\"\"\n\t\tpageTitleTrClass = \"\"\n\n\tif CoreForm?.pageTitle\n\t\tpageTitle = \"\"\"\n\t\t\t#{CoreForm.pageTitle}\n\t\t\"\"\"\n\t\tpageTitleTrClass = \"\"\n\n\tval =\n\t\tpageTitle: pageTitle\n\t\tpageTitleTrClass: pageTitleTrClass\n\n\treturn val\n\nTemplateManager.handleTableTemplate = (instance, _export) ->\n\n\ttemplate = \"\"\"\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t
\n\t\t\t\t\t#{this.instance_title().pageTitle}\n\t\t\t\t
\n\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\"\"\";\n\n\ttable_fields = InstanceformTemplate.helpers.table_fields(instance)\n\n\ttable_fields && table_fields.forEach (table_field)->\n\n\t\trequired = \"\"\n\t\tif !CoreForm?.pageTitleFieldName || CoreForm?.pageTitleFieldName != table_field.code\n\t\t\tif table_field.is_required\n\t\t\t\trequired = \"is-required\"\n\n\t\t\tif _export\n\t\t\t\trequired = \"\";\n\n\t\t\tpureCode = Steedos.removeSpecialCharacter(table_field.code);\n\n\t\t\tif InstanceformTemplate.helpers.isOpinionField(table_field)\n\t\t\t\ttemplate += table_field.tr_start\n\t\t\t\ttemplate += \"\"\"\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\"\"\"\n\t\t\t\ttemplate += table_field.tr_end\n\t\t\telse\n\t\t\t\tif InstanceformTemplate.helpers.includes(table_field.type, 'section,table')\n\t\t\t\t\ttemplate += table_field.tr_start\n\t\t\t\t\ttemplate += \"\"\"\n\t\t\t\t\t\t\n\t\t\t\t\t\"\"\"\n\t\t\t\t\ttemplate += table_field.tr_end\n\t\t\t\telse\n\t\t\t\t\ttemplate += table_field.tr_start\n\n\t\t\t\t\tif _export\n\t\t\t\t\t\ttitle_permission = \"\"\n\t\t\t\t\t\tfield_permission = \"\"\n\t\t\t\t\telse\n\t\t\t\t\t\ttitle_permission = \"title-\" + table_field.permission\n\t\t\t\t\t\tfield_permission = \"field-\" + table_field.permission\n\n\t\t\t\t\ttemplate += \"\"\"\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\"\"\"\n\t\t\t\t\ttemplate += table_field.tr_end\n\n\ttemplate += \"\"\"\n\t\t
\n\t\t\t\t\t\t{{afFieldLabelText name=\"#{table_field.code}\"}}\n\t\t\t\t\t\n\t\t\t\t\t\t{{> instanceSignText name=\"#{table_field.code}\"}}\n\t\t\t\t\t\n\t\t\t\t\t\t {{> afFormGroup name=\"#{table_field.code}\" label=false}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{afFieldLabelText name=\"#{table_field.code}\"}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{> afFormGroup name=\"#{table_field.code}\" label=false}}\n\t\t\t\t\t\t
\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t
\n\t\"\"\"\n\treturn template\n\n#此处模板公用与:instance 编辑、查看、打印、转发时生成附件、发送邮件body部分(table 模板)\n#如果有修改,请测试确认其他功能是否正常。\nTemplateManager._template =\n\tdefault: (instance)->\n\n\t\ttemplate = \"\"\"\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

#{TemplateManager.instance_title().pageTitle}

\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t{{#each steedos_form.fields}}\n\t\t\t\t{{#if isOpinionField this}}\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t{{> instanceSignText name=this.code}}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t{{else}}\n\t\t\t\t\t{{#if includes this.type 'section,table'}}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{{> afFormGroup name=this.code label=false}}\n\t\t\t\t\t\t
\n\t\t\t\t\t{{else}}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{{> afFormGroup name=this.code}}\n\t\t\t\t\t\t
\n\t\t\t\t\t{{/if}}\n\t\t\t\t{{/if}}\n\t\t\t{{/each}}\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t {{_t \"instance_initiator\"}} :\n\t\t\t\t\t
\n\t\t\t\t\t{{>Template.dynamic template=\"afSelectUser\" data=applicantContext}}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\"\"\"\n\t\treturn template\n\n\ttable: (instance)->\n\t\treturn TemplateManager.handleTableTemplate(instance)\n#\ttable: '''\n#\t\t\n#\t\t\t\n#\t\t\t\t\n#\t\t\t\n# \n#\t\t\t\t\n#\t\t\t\n#
\n#\t\t\t\t\t

{{instance.name}}

\n#\t\t\t\t\t\n#\t\t\t\t
\n#\t\t\t\t\t\n#\t\t\t\t\t{{>Template.dynamic template=\"afSelectUser\" data=applicantContext}}\n#\t\t\t\t
\n#\t\t\n#\t\t {{#each table_fields}}\n#\t\t\t\t{{#if isOpinionField this}}\n#\t\t\t\t\t{{{tr_start}}}\n#\t\t\t\t\t\t\n#\t\t\t\t\t\t\n#\t\t\t\t\t{{{tr_end}}}\n#\t\t\t\t{{else}}\n#\t\t\t\t\t{{#if includes this.type 'section,table'}}\n#\t\t\t\t\t\t{{{tr_start}}}\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t{{{tr_end}}}\n#\t\t\t\t\t{{else}}\n#\t\t\t\t\t\t{{{tr_start}}}\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t{{{tr_end}}}\n#\t\t\t\t\t{{/if}}\n#\t\t\t\t{{/if}}\n#\n#\t\t {{/each}}\n#\t\t
\n#\t\t\t\t\t\t\t{{afFieldLabelText name=this.code}}\n#\t\t\t\t\t\t\n#\t\t\t\t\t\t\t{{> instanceSignText step=(getOpinionFieldStepName this) default=''}}\n#\t\t\t\t\t\t\n#\t\t\t\t\t\t\t {{> afFormGroup name=this.code label=false}}\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t\t\t{{afFieldLabelText name=this.code}}\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t\t\t{{> afFormGroup name=this.code label=false}}\n#\t\t\t\t\t\t\t
\n#\t'''\n\nTemplateManager._templateHelps =\n\tapplicantContext: ->\n\t\tsteedos_instance = WorkflowManager.getInstance();\n\t\tdata = {\n\t\t\tname: 'ins_applicant',\n\t\t\tatts: {\n\t\t\t\tname: 'ins_applicant',\n\t\t\t\tid: 'ins_applicant',\n\t\t\t\tclass: 'selectUser form-control',\n\t\t\t\tstyle: 'padding:6px 12px;width:140px;display:inline'\n\t\t\t}\n\t\t}\n#\t\tif not steedos_instance || steedos_instance.state != \"draft\"\n\t\tdata.atts.disabled = true\n\t\treturn data;\n\ninstanceId: ->\n\treturn 'instanceform';#\"instance_\" + Session.get(\"instanceId\");\n\nform_types: ->\n\tif ApproveManager.isReadOnly()\n\t\treturn 'disabled';\n\telse\n\t\treturn 'method';\n\nsteedos_form: ->\n\tform_version = WorkflowManager.getInstanceFormVersion();\n\tif form_version\n\t\treturn form_version\n\ninnersubformContext: (obj)->\n\tdoc_values = WorkflowManager_format.getAutoformSchemaValues();\n\tobj[\"tableValues\"] = if doc_values then doc_values[obj.code] else []\n\tobj[\"formId\"] = formId;\n\treturn obj;\n\ninstance: ->\n\tSession.get(\"change_date\")\n\tif (Session.get(\"instanceId\"))\n\t\tsteedos_instance = WorkflowManager.getInstance();\n\t\treturn steedos_instance;\n\nequals: (a, b) ->\n\treturn (a == b)\n\nincludes: (a, b) ->\n\treturn b.split(',').includes(a);\n\nfields: ->\n\tform_version = WorkflowManager.getInstanceFormVersion();\n\tif form_version\n\t\treturn new SimpleSchema(WorkflowManager_format.getAutoformSchema(form_version));\n\ndoc_values: ->\n\tWorkflowManager_format.getAutoformSchemaValues();\n\ninstance_box_style: ->\n\tbox = Session.get(\"box\")\n\tif box == \"inbox\" || box == \"draft\"\n\t\tjudge = Session.get(\"judge\")\n\t\tif judge\n\t\t\tif (judge == \"approved\")\n\t\t\t\treturn \"box-success\"\n\t\t\telse if (judge == \"rejected\")\n\t\t\t\treturn \"box-danger\"\n\tins = WorkflowManager.getInstance();\n\tif ins && ins.final_decision\n\t\tif ins.final_decision == \"approved\"\n\t\t\treturn \"box-success\"\n\t\telse if (ins.final_decision == \"rejected\")\n\t\t\treturn \"box-danger\"\n\n\nTemplateManager.getTemplate = (instance, templateName) ->\n\tflow = db.flows.findOne(instance.flow);\n\tform = db.forms.findOne(instance.form);\n\n\tif templateName\n\t\tif templateName == 'table'\n\t\t\treturn TemplateManager._template.table(instance)\n\t\treturn TemplateManager._template.default(instance)\n\n\tif Session?.get(\"instancePrint\")\n\t\tif flow?.print_template\n\t\t\treturn \"
\" + flow.print_template + \"
\"\n\t\telse\n\t\t\tif flow?.instance_template\n\t\t\t\treturn \"
\" + flow.instance_template + \"
\"\n\t\t\telse\n\t\t\t\treturn TemplateManager._template.table(instance)\n\telse\n\t\tif Steedos.isMobile()\n\t\t\treturn TemplateManager._template.default(instance)\n\n\t\tif flow?.instance_template\n\t\t\treturn \"
\" + flow.instance_template + \"
\"\n\n\t\tif form?.instance_style\n\t\t\tif form.instance_style == 'table'\n\t\t\t\treturn TemplateManager._template.table(instance)\n\t\t\treturn TemplateManager._template.default(instance)\n\t\telse\n\t\t\treturn TemplateManager._template.default(instance)\n\n#TemplateManager.exportTemplate = (flowId) ->\n#\ttemplate = TemplateManager.getTemplate(flowId);\n#\n#\tflow = WorkflowManager.getFlow(flowId);\n#\n#\tif flow?.instance_template\n#\t\treturn template;\n#\n#\treturn template;\n\n","var formId; \n\nTemplateManager = {};\n\nformId = 'instanceform';\n\nTemplateManager.instance_title = function() {\n var pageTitle, pageTitleTrClass, val;\n pageTitle = \"{{instance.name}}\";\n pageTitleTrClass = \"instance-name\";\n if (typeof CoreForm !== \"undefined\" && CoreForm !== null ? CoreForm.pageTitleFieldName : void 0) {\n pageTitle = \"{{> afFormGroup name=\\\"\" + CoreForm.pageTitleFieldName + \"\\\" label=false}}\";\n pageTitleTrClass = \"\";\n }\n if (typeof CoreForm !== \"undefined\" && CoreForm !== null ? CoreForm.pageTitle : void 0) {\n pageTitle = \"\" + CoreForm.pageTitle;\n pageTitleTrClass = \"\";\n }\n val = {\n pageTitle: pageTitle,\n pageTitleTrClass: pageTitleTrClass\n };\n return val;\n};\n\nTemplateManager.handleTableTemplate = function(instance, _export) {\n var table_fields, template;\n template = \"
\\n\t\\n\t\t\\n\t\t\t\\n\t\t\\n\\n\t
\\n\t\t\t\t\" + (this.instance_title().pageTitle) + \"\\n\t\t\t
\\n\t\\n\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\";\n table_fields = InstanceformTemplate.helpers.table_fields(instance);\n table_fields && table_fields.forEach(function(table_field) {\n var field_permission, pureCode, required, title_permission;\n required = \"\";\n if (!(typeof CoreForm !== \"undefined\" && CoreForm !== null ? CoreForm.pageTitleFieldName : void 0) || (typeof CoreForm !== \"undefined\" && CoreForm !== null ? CoreForm.pageTitleFieldName : void 0) !== table_field.code) {\n if (table_field.is_required) {\n required = \"is-required\";\n }\n if (_export) {\n required = \"\";\n }\n pureCode = Steedos.removeSpecialCharacter(table_field.code);\n if (InstanceformTemplate.helpers.isOpinionField(table_field)) {\n template += table_field.tr_start;\n template += \"\\n\";\n return template += table_field.tr_end;\n } else {\n if (InstanceformTemplate.helpers.includes(table_field.type, 'section,table')) {\n template += table_field.tr_start;\n template += \"\";\n return template += table_field.tr_end;\n } else {\n template += table_field.tr_start;\n if (_export) {\n title_permission = \"\";\n field_permission = \"\";\n } else {\n title_permission = \"title-\" + table_field.permission;\n field_permission = \"field-\" + table_field.permission;\n }\n template += \"\\n\";\n return template += table_field.tr_end;\n }\n }\n }\n });\n template += \"\t
\\n\t{{afFieldLabelText name=\\\"\" + table_field.code + \"\\\"}}\\n\\n\t{{> instanceSignText name=\\\"\" + table_field.code + \"\\\"}}\\n\\n {{> afFormGroup name=\\\"\" + table_field.code + \"\\\" label=false}}\\n\\n\t{{afFieldLabelText name=\\\"\" + table_field.code + \"\\\"}}\\n\\n\t{{> afFormGroup name=\\\"\" + table_field.code + \"\\\" label=false}}\\n
\\n\\n\t\\n\t\t\\n\t\t\t\\n\t\t\t\\n\t\t\\n\t\\n
\";\n return template;\n};\n\nTemplateManager._template = {\n \"default\": function(instance) {\n var template;\n template = \"
\\n\t
\\n\t\t

\" + (TemplateManager.instance_title().pageTitle) + \"

\\n\t\t\\n\t
\\n\t\\n
\\n{{#each steedos_form.fields}}\\n\t{{#if isOpinionField this}}\\n\t\t
\\n\t\t\t
\\n\t\t\t\t\\n\\n\t\t\t\t{{> instanceSignText name=this.code}}\\n\t\t\t
\\n\t\t
\\n\t{{else}}\\n\t\t{{#if includes this.type 'section,table'}}\\n\t\t\t
\\n\t\t\t\t{{> afFormGroup name=this.code label=false}}\\n\t\t\t
\\n\t\t{{else}}\\n\t\t\t
\\n\t\t\t{{> afFormGroup name=this.code}}\\n\t\t\t
\\n\t\t{{/if}}\\n\t{{/if}}\\n{{/each}}\\n
\\n\t
\\n\t
\\n\t\t
\\n\t\t {{_t \\\"instance_initiator\\\"}} :\\n\t\t
\\n\t\t{{>Template.dynamic template=\\\"afSelectUser\\\" data=applicantContext}}\\n\t
\\n\t
\\n
\";\n return template;\n },\n table: function(instance) {\n return TemplateManager.handleTableTemplate(instance);\n }\n};\n\nTemplateManager._templateHelps = {\n applicantContext: function() {\n var data, steedos_instance;\n steedos_instance = WorkflowManager.getInstance();\n data = {\n name: 'ins_applicant',\n atts: {\n name: 'ins_applicant',\n id: 'ins_applicant',\n \"class\": 'selectUser form-control',\n style: 'padding:6px 12px;width:140px;display:inline'\n }\n };\n data.atts.disabled = true;\n return data;\n }\n};\n\n({\n instanceId: function() {\n return 'instanceform';\n },\n form_types: function() {\n if (ApproveManager.isReadOnly()) {\n return 'disabled';\n } else {\n return 'method';\n }\n },\n steedos_form: function() {\n var form_version;\n form_version = WorkflowManager.getInstanceFormVersion();\n if (form_version) {\n return form_version;\n }\n },\n innersubformContext: function(obj) {\n var doc_values;\n doc_values = WorkflowManager_format.getAutoformSchemaValues();\n obj[\"tableValues\"] = doc_values ? doc_values[obj.code] : [];\n obj[\"formId\"] = formId;\n return obj;\n },\n instance: function() {\n var steedos_instance;\n Session.get(\"change_date\");\n if (Session.get(\"instanceId\")) {\n steedos_instance = WorkflowManager.getInstance();\n return steedos_instance;\n }\n },\n equals: function(a, b) {\n return a === b;\n },\n includes: function(a, b) {\n return b.split(',').includes(a);\n },\n fields: function() {\n var form_version;\n form_version = WorkflowManager.getInstanceFormVersion();\n if (form_version) {\n return new SimpleSchema(WorkflowManager_format.getAutoformSchema(form_version));\n }\n },\n doc_values: function() {\n return WorkflowManager_format.getAutoformSchemaValues();\n },\n instance_box_style: function() {\n var box, ins, judge;\n box = Session.get(\"box\");\n if (box === \"inbox\" || box === \"draft\") {\n judge = Session.get(\"judge\");\n if (judge) {\n if (judge === \"approved\") {\n return \"box-success\";\n } else if (judge === \"rejected\") {\n return \"box-danger\";\n }\n }\n }\n ins = WorkflowManager.getInstance();\n if (ins && ins.final_decision) {\n if (ins.final_decision === \"approved\") {\n return \"box-success\";\n } else if (ins.final_decision === \"rejected\") {\n return \"box-danger\";\n }\n }\n }\n});\n\nTemplateManager.getTemplate = function(instance, templateName) {\n var flow, form;\n flow = db.flows.findOne(instance.flow);\n form = db.forms.findOne(instance.form);\n if (templateName) {\n if (templateName === 'table') {\n return TemplateManager._template.table(instance);\n }\n return TemplateManager._template[\"default\"](instance);\n }\n if (typeof Session !== \"undefined\" && Session !== null ? Session.get(\"instancePrint\") : void 0) {\n if (flow != null ? flow.print_template : void 0) {\n return \"
\" + flow.print_template + \"
\";\n } else {\n if (flow != null ? flow.instance_template : void 0) {\n return \"
\" + flow.instance_template + \"
\";\n } else {\n return TemplateManager._template.table(instance);\n }\n }\n } else {\n if (Steedos.isMobile()) {\n return TemplateManager._template[\"default\"](instance);\n }\n if (flow != null ? flow.instance_template : void 0) {\n return \"
\" + flow.instance_template + \"
\";\n }\n if (form != null ? form.instance_style : void 0) {\n if (form.instance_style === 'table') {\n return TemplateManager._template.table(instance);\n }\n return TemplateManager._template[\"default\"](instance);\n } else {\n return TemplateManager._template[\"default\"](instance);\n }\n }\n};\n","SteedosTable = {};\n\nSteedosTable.formId = \"instanceform\";\n\nSteedosTable.checkItem = function (field, item_index) {\n var fieldObj = SteedosTable.getField(field);\n\n var fieldVal = SteedosTable.getItemModalValue(field, item_index);\n\n var sf_name = '';\n var rev = true;\n fieldObj.sfields.forEach(function (sf) {\n if (sf.permission == 'editable') {\n sf_name = fieldObj.code + \".\" + sf.code;\n if (!InstanceManager.checkFormFieldValue($(\"[name='\" + sf_name + \"']\")[0], sf_name, fieldVal[sf.code])) {\n rev = false;\n }\n }\n });\n\n return rev;\n}\n\nSteedosTable.setTableItemValue = function (field, item_index, item_value) {\n\n var tableValue = SteedosTable.getTableValue(field);\n tableValue[item_index] = item_value;\n}\n\nSteedosTable.getTableItemValue = function (field, item_index) {\n return SteedosTable.getTableValue(field)[item_index];\n}\n\nSteedosTable.removeTableItem = function (field, item_index) {\n var item_value = SteedosTable.getTableItemValue(field, item_index);\n item_value.removed = true;\n}\n\nSteedosTable.setTableValue = function (field, value) {\n $(\"table[name='\" + field + \"']\").val({\n val: value\n });\n}\n\nSteedosTable.getTableValue = function (field) {\n return $(\"table[name='\" + field + \"']\").val().val;\n}\n\nSteedosTable.getValidValue = function (field) {\n var value = SteedosTable.getTableValue(field);\n\n if (!value) {\n return\n }\n\n var validValue = [];\n\n value.forEach(function (v) {\n if (!v.removed) {\n validValue.push(v);\n }\n });\n return validValue;\n}\n\n\nSteedosTable.handleData = function (field, values) {\n\n if (!values || !(values instanceof Array)) {\n return values;\n }\n\n var fieldObj = SteedosTable.getField(field);\n\n values.forEach(function (v) {\n fieldObj.sfields.forEach(function (f) {\n if (f.type == 'user' || f.type == 'group') {\n var value = v[f.code]\n if (f.is_multiselect) {\n if (value && value.length > 0 && typeof (value[0]) == 'object') {\n v[f.code] = v[f.code].getProperty(\"id\");\n }\n } else {\n if (value && typeof (value) == 'object') {\n v[f.code] = v[f.code].id;\n }\n }\n } else if (f.type == 'dateTime') {\n var value = v[f.code]\n if (value) {\n if (value.length == 16) {\n var t = value.split(\"T\");\n var t0 = t[0].split(\"-\");\n var t1 = t[1].split(\":\");\n\n year = t0[0];\n month = t0[1];\n date = t0[2];\n hours = t1[0];\n seconds = t1[1];\n value = new Date(year, month - 1, date, hours, seconds);\n v[f.code] = value;\n }\n\n }\n }\n });\n });\n return values;\n}\n\nSteedosTable.getField = function (field) {\n var instanceFields = WorkflowManager.getInstanceFields();\n if (!instanceFields)\n return;\n\n var fieldObj = instanceFields.findPropertyByPK(\"code\", field);\n\n return fieldObj;\n}\n\n\nSteedosTable.getModalData = function (field, index) {\n\n var data = {};\n\n var fieldObj = SteedosTable.getField(field);\n\n if (!fieldObj) {\n return;\n }\n\n data.field = fieldObj;\n\n data.field.formula = Form_formula.getFormulaFieldVariable(\"Form_formula.field_values\", fieldObj.sfields);\n\n data.value = {};\n\n data.value[field] = SteedosTable.getTableItemValue(field, index);\n\n data.index = index;\n\n return data;\n}\n\n\n\nSteedosTable.getItemModalValue = function (field, item_index) {\n\n if (!AutoForm.getFormValues(\"steedos_table_modal_\" + field + \"_\" + item_index)) {\n return {}\n }\n\n var item_value = AutoForm.getFormValues(\"steedos_table_modal_\" + field + \"_\" + item_index).insertDoc[field];\n return item_value;\n}\n\n\nSteedosTable.addItem = function (field, index, _item_value) {\n var keys = SteedosTable.getKeys(field);\n var item_value = _item_value || SteedosTable.getItemModalValue(field, index);\n $(\"tbody[name='\" + field + \"Tbody']\").append(SteedosTable.getTr(keys, item_value, index, field, true))\n\n}\n\nSteedosTable.updateItem = function (field, index, _item_value) {\n\n var item = $(\"tr[name='\" + field + \"_item_\" + index + \"']\");\n\n var item_value = _item_value || SteedosTable.getItemModalValue(field, index);\n\n if (item && item.length > 0) {\n var keys = SteedosTable.getKeys(field);\n var tds = SteedosTable.getRemoveTd(field, index);\n\n var sfields = SteedosTable.getField(field).sfields;\n\n keys.forEach(function (key) {\n var sfield = sfields.findPropertyByPK(\"code\", key);\n\n var value = item_value[key];\n\n tds = tds + SteedosTable.getTd(sfield, index, value);\n\n });\n\n item.empty();\n\n item.append(tds);\n\n } else {\n\n SteedosTable.addItem(field, index);\n }\n\n if (SteedosTable.getTableValue(field)) {\n\n SteedosTable.setTableItemValue(field, index, item_value);\n\n //SteedosTable.valueHash[field][index] = item_value;\n\n } else {\n //SteedosTable.valueHash[field] = [item_value];\n\n SteedosTable.setTableValue(field, [item_value])\n\n }\n\n //执行主表公式计算\n InstanceManager.runFormula(field);\n\n}\n\nSteedosTable.removeItem = function (field, index) {\n\n $(\"tr[name='\" + field + \"_item_\" + index + \"']\").hide();\n\n SteedosTable.removeTableItem(field, index);\n\n InstanceManager.runFormula(field);\n}\n\nSteedosTable.showModal = function (field, index, method) {\n\n\n var modalData = SteedosTable.getModalData(field, index);\n\n modalData.method = method;\n setTimeout(function(){\n Modal.show(\"steedosTableModal\", modalData);\n }, 300)\n}\n\nSteedosTable.getKeys = function (field) {\n if (!AutoForm.getCurrentDataForForm(SteedosTable.formId)) {\n return [];\n }\n\n var ss = AutoForm.getFormSchema(SteedosTable.formId);\n\n var keys = [];\n\n if (ss.schema(field + \".$\").type === Object) {\n keys = ss.objectKeys(SimpleSchema._makeGeneric(field) + '.$')\n }\n\n return keys;\n\n}\n\nSteedosTable.getThead = function (field, editable) {\n\n var fieldObj = field;\n if (!_.isObject(field))\n fieldObj = SteedosTable.getField(field);\n\n if (!fieldObj) {\n return '';\n }\n\n var thead = '',\n trs = '',\n label = '',\n width = 100;\n\n if (editable) {\n // trs = \"\"\n trs = \"\"\n }\n\n var sfields = fieldObj.sfields;\n\n if (!sfields) {\n return thead;\n }\n\n var sf_length = sfields.length;\n\n if (sf_length > 0) {\n var wide_fields = sfields.filterProperty(\"is_wide\", true);\n\n width = 100 / (sf_length + wide_fields.length);\n }\n\n sfields.forEach(function (sf, index) {\n\n label = (sf.name != null && sf.name.length > 0) ? sf.name : sf.code;\n\n trs = trs + \"\" + label + \"\"\n });\n\n thead = '' + trs + '';\n\n return thead;\n}\n\nSteedosTable.getTbody = function (keys, field, values, editable, sfieldsEditable) {\n var tbody = \"\";\n\n if (values instanceof Array) {\n values.forEach(function (value, index) {\n tbody = tbody + SteedosTable.getTr(keys, value, index, field, editable, sfieldsEditable);\n });\n }\n\n return tbody;\n}\n\nSteedosTable.getTr = function (keys, item_value, index, field, editable, sfieldsEditable) {\n\n var fieldObj = field;\n if (!_.isObject(field))\n fieldObj = SteedosTable.getField(field);\n\n var tr = \"\";\n\n var tds = \"\";\n\n if (editable) {\n tds = SteedosTable.getRemoveTd(fieldObj.code, index);\n }\n\n var sfields = fieldObj.sfields;\n\n keys.forEach(function (key) {\n var sfield = sfields.findPropertyByPK(\"code\", key);\n\n var value = item_value[key];\n\n tds = tds + SteedosTable.getTd(sfield, index, value);\n\n });\n\n tr = tr + tds + \"\";\n return tr;\n}\n\nSteedosTable.getRemoveTd = function (field, index) {\n // return \"