diff --git a/CHANGELOG.md b/CHANGELOG.md index deee7e3..834a436 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# v2.3.2 +## 06/03/2021 + +1. [](#bugfix) + * Better validation for Git Repository value on both Wizard and Backend. + * Prevent malicious commands from being executed in Wizard when "Verifying Authentication, Connection and Branch". + # v2.3.1 ## 04/30/2021 diff --git a/app/wizard/index.js b/app/wizard/index.js index ff6540f..c18b257 100644 --- a/app/wizard/index.js +++ b/app/wizard/index.js @@ -5,6 +5,7 @@ import { config } from 'grav-config'; import $ from 'jquery'; import 'whatwg-fetch'; +const GIT_REGEX = /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\.git)(\/?|\#[-\d\w._]+?)$/; const WIZARD = $('[data-remodal-id="wizard"]'); const RESET_LOCAL = $('[data-remodal-id="reset-local"]'); const SERVICES = { 'github': 'github.com', 'bitbucket': 'bitbucket.org', 'gitlab': 'gitlab.com', 'allothers': 'allothers.repo' }; @@ -252,9 +253,16 @@ $(document).on('change', '[name="gitsync[repository]"]', () => { $(document).on('input', '[name="gitsync[repo_url]"]', (event) => { const target = $(event.currentTarget); const value = target.val(); + const isGitURL = GIT_REGEX.test(value); const next = WIZARD.find('[data-gitsync-action="next"]'); - if (value.length) { + target.removeClass('invalid'); + + if (!isGitURL) { + target.addClass('invalid'); + } + + if (isGitURL && value.length) { enableButton(next); } else { disableButton(next); diff --git a/blueprints.yaml b/blueprints.yaml index 150ef92..fe6c5ee 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -1,7 +1,7 @@ name: Git Sync type: plugin slug: git-sync -version: 2.3.1 +version: 2.3.2 description: Allows to synchronize portions of Grav with Git Repositories (GitHub, BitBucket, GitLab) icon: git author: @@ -62,7 +62,7 @@ form: underline: true SyncNotice: - type: spacer + type: hidden markdown: true text: | ! To improve the speed of saving pages you can disable automatic sync. Then, changes to a page will not be sent to the remote repository on every save. To sync your changes to the repository tap the GitSync button () in the top left of the Administration Panel, or use the below Scheduler option to add the GitSync Syncronization Job to the Scheduler (Grav 1.6 required). diff --git a/classes/GitSync.php b/classes/GitSync.php index 0c90830..e6aaa91 100644 --- a/classes/GitSync.php +++ b/classes/GitSync.php @@ -4,6 +4,7 @@ use Grav\Common\Grav; use Grav\Common\Plugin; use Grav\Common\Utils; +use http\Exception\RuntimeException; use RocketTheme\Toolbox\File\File; use SebastianBergmann\Git\Git; @@ -115,6 +116,10 @@ public function getRuntimeInformation() */ public function testRepository($url, $branch) { + if (!preg_match(Helper::GIT_REGEX, $url)) { + throw new \RuntimeException("Git Repository value does not match the supported format."); + } + $branch = $branch ? '"' . $branch . '"' : ''; return $this->execute("ls-remote \"{$url}\" {$branch}"); } diff --git a/classes/Helper.php b/classes/Helper.php index 5208924..9dac08f 100644 --- a/classes/Helper.php +++ b/classes/Helper.php @@ -13,6 +13,9 @@ class Helper /** @var string */ private static $hash = '594ef69d-6c29-45f7-893a-f1b4342687d3'; + /** @var string */ + const GIT_REGEX = '/(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\.git)(\/?|\#[-\d\w._]+?)$/'; + /** * Checks if the user/ folder is already initialized * diff --git a/css-compiled/git-sync.css b/css-compiled/git-sync.css index 5f21f69..465b7fd 100644 --- a/css-compiled/git-sync.css +++ b/css-compiled/git-sync.css @@ -43,6 +43,10 @@ background: #efefef; border-color: #ddd; } +[data-remodal-id="wizard"] input.invalid, [data-remodal-id="reset-local"] input.invalid { + border-color: #f4516d; + color: #f4516d; } + [data-remodal-id="wizard"] label.disabled, [data-remodal-id="reset-local"] label.disabled { color: #ccc; } @@ -130,4 +134,4 @@ -o-transform: translateY(0) !important; transform: translateY(0) !important; } -/*# sourceMappingURL=../css-compiled/git-sync.css.map */ \ No newline at end of file +/*# sourceMappingURL=git-sync.css.map */ \ No newline at end of file diff --git a/js/app.js b/js/app.js index 31a077b..bb1ba56 100644 --- a/js/app.js +++ b/js/app.js @@ -13,7 +13,7 @@ /***/ 849: /***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => { -eval("\n;// CONCATENATED MODULE: external \"GitSync\"\nconst external_GitSync_namespaceObject = GitSync;\nvar external_GitSync_default = /*#__PURE__*/__webpack_require__.n(external_GitSync_namespaceObject);\n// EXTERNAL MODULE: external \"jQuery\"\nvar external_jQuery_ = __webpack_require__(609);\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_);\n// EXTERNAL MODULE: ../../../grav/grav-plugin-admin/themes/grav/node_modules/toastr/toastr.js\nvar toastr = __webpack_require__(860);\nvar toastr_default = /*#__PURE__*/__webpack_require__.n(toastr);\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/toastr.js\n\n(toastr_default()).options.positionClass = 'toast-top-right';\n(toastr_default()).options.preventDuplicates = true;\n/* harmony default export */ const utils_toastr = ((toastr_default()));\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/offline.js\n\n\nvar offlineElement = external_jQuery_default()('#offline-status');\nexternal_jQuery_default()(window).on('offline', function () {\n offlineElement.slideDown();\n});\nexternal_jQuery_default()(window).on('online', function () {\n offlineElement.slideUp();\n});\nexternal_jQuery_default()(document).ready(function () {\n if (!offline) {\n offlineElement.slideDown();\n }\n}); // assume online if can't check\n\n/* harmony default export */ const offline = (typeof __webpack_require__.g.navigator.onLine !== 'undefined' ? __webpack_require__.g.navigator.onLine : true);\n;// CONCATENATED MODULE: external \"GravAdmin\"\nconst external_GravAdmin_namespaceObject = GravAdmin;\n// EXTERNAL MODULE: ../../../grav/grav-plugin-admin/themes/grav/node_modules/mout/string/trim.js\nvar trim = __webpack_require__(284);\nvar trim_default = /*#__PURE__*/__webpack_require__.n(trim);\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/response.js\n\n\n\n\n\nvar UNLOADING = false;\n\nvar error = function error(response) {\n var error = new Error(response.statusText || response || '');\n error.response = response;\n return error;\n};\n\nfunction parseStatus(response) {\n return response;\n /* Whoops can handle JSON responses so we don't need this for now.\n if (response.status >= 200 && response.status < 300) {\n return response;\n } else {\n throw error(response);\n }\n */\n}\nfunction parseJSON(response) {\n return response.text().then(function (text) {\n var parsed = text;\n\n try {\n parsed = JSON.parse(text);\n } catch (error) {\n var content = document.createElement('div');\n content.innerHTML = text;\n var the_error = new Error();\n the_error.stack = trim_default()(content.innerText);\n throw the_error;\n }\n\n return parsed;\n });\n}\nfunction userFeedback(response) {\n if (UNLOADING) {\n return true;\n }\n\n var status = response.status || (response.error ? 'error' : '');\n var message = response.message || (response.error ? response.error.message : null);\n var settings = response.toastr || null;\n var backup;\n\n switch (status) {\n case 'unauthenticated':\n document.location.href = external_GravAdmin_namespaceObject.config.base_url_relative;\n throw error('Logged out');\n\n case 'unauthorized':\n status = 'error';\n message = message || 'Unauthorized.';\n break;\n\n case 'error':\n status = 'error';\n message = message || 'Unknown error.';\n break;\n\n case 'success':\n status = 'success';\n message = message || '';\n break;\n\n default:\n status = 'error';\n message = message || 'Invalid AJAX response.';\n break;\n }\n\n if (settings) {\n backup = Object.assign({}, utils_toastr.options);\n Object.keys(settings).forEach(function (key) {\n utils_toastr.options[key] = settings[key];\n });\n }\n\n if (message && (offline || !offline && status !== 'error')) {\n utils_toastr[status === 'success' ? 'success' : 'error'](message);\n }\n\n if (settings) {\n utils_toastr.options = backup;\n }\n\n return response;\n}\nfunction userFeedbackError(error) {\n if (UNLOADING) {\n return true;\n }\n\n var stack = error.stack ? \"
\".concat(error.stack, \"
\") : '';\n utils_toastr.error(\"Fetch Failed: \".concat(secret, \"
\"));\n});\nexternal_jQuery_default()(document).on('change', '[name=\"gitsync[repository]\"]', function (event) {\n var target = external_jQuery_default()(event.target);\n\n if (!target.is(':checked')) {\n return;\n }\n\n SERVICE = target.val();\n Object.keys(SERVICES).forEach(function (service) {\n WIZARD.find(\".hidden-step-\".concat(service))[service === SERVICE ? 'removeClass' : 'addClass']('hidden');\n\n if (service === SERVICE) {\n WIZARD.find('.webhook-secret-wrapper')[service === 'bitbucket' ? 'addClass' : 'removeClass']('hidden');\n WIZARD.find('input[name=\"gitsync[repo_url]\"][placeholder]').attr('placeholder', TEMPLATES.REPO_URL.replace(/\\{placeholder\\}/, SERVICES[service])).end().find('input[name=\"gitsync[branch]\"]').attr('placeholder', BRANCHES[service]).val(BRANCHES[service]);\n }\n });\n});\nexternal_jQuery_default()(document).on('click', '[data-access-tokens-details]', function (event) {\n event.preventDefault();\n var button = external_jQuery_default()(event.currentTarget);\n var panel = button.closest('.access-tokens').find('.access-tokens-details');\n panel.slideToggle(250, function () {\n var isVisible = panel.is(':visible');\n var icon = button.find('.fa');\n icon.removeClass('fa-chevron-down fa-chevron-up').addClass(\"fa-chevron-\".concat(isVisible ? 'up' : 'down'));\n });\n});\n\nvar showNotices = function showNotices(element) {\n var target = external_jQuery_default()(element);\n var selection = target.val().replace(/\\//g, '-');\n var column = target.closest('.columns').find('.column:last');\n column.find('[class*=\"description-\"]').addClass('hidden');\n column.find(\".description-\".concat(selection)).removeClass('hidden').hide().fadeIn({\n duration: 250\n });\n};\n\nexternal_jQuery_default()(document).on('input', '[data-remodal-id=\"wizard\"] .step-4 input[type=\"checkbox\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n\n if (!target.is(':checked')) {\n return;\n }\n\n showNotices(target);\n});\nexternal_jQuery_default()(document).on('mouseenter', '[data-remodal-id=\"wizard\"] .step-4 .info-desc', function (event) {\n var target = external_jQuery_default()(event.currentTarget).siblings('input[type=\"checkbox\"]');\n showNotices(target);\n});\nexternal_jQuery_default()(document).on('mouseleave', '[data-remodal-id=\"wizard\"] .step-4 label', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var container = target.closest('.columns');\n var column = container.find('.column:last-child');\n column.find('[class*=\"description-\"]').addClass('hidden');\n});\nexternal_jQuery_default()(document).on('mouseleave', '[data-remodal-id=\"wizard\"] .columns .column:first-child', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var column = target.siblings('.column');\n column.find('[class*=\"description-\"]').addClass('hidden');\n});\nexternal_jQuery_default()(document).ready(function () {\n STEPS = WIZARD.find('[class^=\"step-\"]').length - 1;\n WIZARD.wrapInner('');\n RESET_LOCAL.wrapInner('');\n\n if (WIZARD.length && ((external_GitSync_default()).first_time || !(external_GitSync_default()).git_installed)) {\n openWizard();\n }\n});\n/* harmony default export */ const wizard = ((/* unused pure expression or super */ null && (Settings)));\n;// CONCATENATED MODULE: ./app/main.js\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy9leHRlcm5hbCBcIkdpdFN5bmNcIj9jNTkxIiwid2VicGFjazovL3RyaWxieS1ncmF2LXBsdWdpbi1naXRzeW5jLy4uL2dyYXYvZ3Jhdi1wbHVnaW4tYWRtaW4vdGhlbWVzL2dyYXYvYXBwL3V0aWxzL3RvYXN0ci5qcz8zMTZmIiwid2VicGFjazovL3RyaWxieS1ncmF2LXBsdWdpbi1naXRzeW5jLy4uL2dyYXYvZ3Jhdi1wbHVnaW4tYWRtaW4vdGhlbWVzL2dyYXYvYXBwL3V0aWxzL29mZmxpbmUuanM/YmNkYyIsIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy9leHRlcm5hbCBcIkdyYXZBZG1pblwiP2M2ZWIiLCJ3ZWJwYWNrOi8vdHJpbGJ5LWdyYXYtcGx1Z2luLWdpdHN5bmMvLi4vZ3Jhdi9ncmF2LXBsdWdpbi1hZG1pbi90aGVtZXMvZ3Jhdi9hcHAvdXRpbHMvcmVzcG9uc2UuanM/MWRmYSIsIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy8uLi9ncmF2L2dyYXYtcGx1Z2luLWFkbWluL3RoZW1lcy9ncmF2L2FwcC91dGlscy9yZXF1ZXN0LmpzPzhiZDEiLCJ3ZWJwYWNrOi8vdHJpbGJ5LWdyYXYtcGx1Z2luLWdpdHN5bmMvLi9hcHAvd2l6YXJkL2luZGV4LmpzP2JjYjciXSwibmFtZXMiOlsidG9hc3RyIiwib2ZmbGluZUVsZW1lbnQiLCIkIiwid2luZG93Iiwib24iLCJzbGlkZURvd24iLCJzbGlkZVVwIiwiZG9jdW1lbnQiLCJyZWFkeSIsImlzT25saW5lIiwiZ2xvYmFsIiwibmF2aWdhdG9yIiwib25MaW5lIiwiVU5MT0FESU5HIiwiZXJyb3IiLCJyZXNwb25zZSIsIkVycm9yIiwic3RhdHVzVGV4dCIsInBhcnNlU3RhdHVzIiwicGFyc2VKU09OIiwidGV4dCIsInRoZW4iLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJjb250ZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRoZV9lcnJvciIsInN0YWNrIiwidHJpbSIsImlubmVyVGV4dCIsInVzZXJGZWVkYmFjayIsInN0YXR1cyIsIm1lc3NhZ2UiLCJzZXR0aW5ncyIsImJhY2t1cCIsImxvY2F0aW9uIiwiaHJlZiIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwidXNlckZlZWRiYWNrRXJyb3IiLCJjb25zb2xlIiwicmF3IiwicmVxdWVzdCIsInVybCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsIm1ldGhvZCIsImRhdGEiLCJGb3JtRGF0YSIsImJvZHkiLCJhZG1pbl9ub25jZSIsIm1hcCIsImFwcGVuZCIsImNyZWRlbnRpYWxzIiwiaGVhZGVycyIsImZldGNoIiwiV0laQVJEIiwiUkVTRVRfTE9DQUwiLCJTRVJWSUNFUyIsIkJSQU5DSEVTIiwiVEVNUExBVEVTIiwiUkVQT19VUkwiLCJvcGVuV2l6YXJkIiwibW9kYWwiLCJyZW1vZGFsIiwiY2xvc2VPbkNvbmZpcm0iLCJwcmV2aW91cyIsImZpbmQiLCJuZXh0Iiwic2F2ZSIsIlNURVAiLCJoaWRlIiwicmVtb3ZlQ2xhc3MiLCJzaG93IiwiYWRkQ2xhc3MiLCJ3ZWJob29rIiwidmFsIiwid2ViaG9va19zZWNyZXQiLCJ0cmlnZ2VyIiwib3BlbiIsImRpc2FibGVCdXR0b24iLCJhdHRyIiwiZW5hYmxlQnV0dG9uIiwiU1RFUFMiLCJTRVJWSUNFIiwiZSIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiYWN0aW9uIiwiVVJJIiwicmVsYXRpdmVVUkkiLCJ0YXNrIiwib25lIiwiY2xvc2UiLCJ1c2VyIiwibm9Vc2VyIiwiaXMiLCJwYXNzd29yZCIsInJlcG9zaXRvcnkiLCJicmFuY2giLCJ3ZWJob29rX2VuYWJsZWQiLCJwdXNoIiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJqb2luIiwiZm9sZGVycyIsImkiLCJpdGVtIiwidmFsdWUiLCJwcm9wIiwiZGF0YUZvbGRlcnMiLCJzZWxlY3RpemUiLCJzZXRWYWx1ZSIsInRvQXJyYXkiLCJ0ZXN0IiwiYnRvYSIsInN0cmluZ2lmeSIsInNlbGVjdGVkUmVwbyIsInJlcG9VUkwiLCJjdXJyZW50VGFyZ2V0IiwiY2hlY2tlZCIsInNlY3JldCIsImh0bWwiLCJzZXJ2aWNlIiwicmVwbGFjZSIsImVuZCIsImJ1dHRvbiIsInBhbmVsIiwic2xpZGVUb2dnbGUiLCJpc1Zpc2libGUiLCJpY29uIiwic2hvd05vdGljZXMiLCJlbGVtZW50Iiwic2VsZWN0aW9uIiwiY29sdW1uIiwiZmFkZUluIiwiZHVyYXRpb24iLCJzaWJsaW5ncyIsImNvbnRhaW5lciIsIndyYXBJbm5lciIsIlNldHRpbmdzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU0sZ0NBQTRCLFc7Ozs7Ozs7OztBQ0FsQztBQUVBQSx3Q0FBQSxHQUErQixpQkFBL0I7QUFDQUEsNENBQUEsR0FBbUMsSUFBbkM7QUFFQSxtREFBZUEsa0JBQWYsRTs7QUNMQTtBQUNBO0FBRUEsSUFBTUMsY0FBYyxHQUFHQyx5QkFBQyxDQUFDLGlCQUFELENBQXhCO0FBRUFBLHlCQUFDLENBQUNDLE1BQUQsQ0FBRCxDQUFVQyxFQUFWLENBQWEsU0FBYixFQUF3QixZQUFNO0FBQzFCSCxnQkFBYyxDQUFDSSxTQUFmO0FBQ0gsQ0FGRDtBQUlBSCx5QkFBQyxDQUFDQyxNQUFELENBQUQsQ0FBVUMsRUFBVixDQUFhLFFBQWIsRUFBdUIsWUFBTTtBQUN6QkgsZ0JBQWMsQ0FBQ0ssT0FBZjtBQUNILENBRkQ7QUFJQUoseUJBQUMsQ0FBQ0ssUUFBRCxDQUFELENBQVlDLEtBQVosQ0FBa0IsWUFBTTtBQUNwQixNQUFJLENBQUNDLE9BQUwsRUFBZTtBQUNYUixrQkFBYyxDQUFDSSxTQUFmO0FBQ0g7QUFDSixDQUpELEUsQ0FNQTs7QUFDQSw4Q0FBZSxPQUFPSyxxQkFBTSxDQUFDQyxTQUFQLENBQWlCQyxNQUF4QixLQUFtQyxXQUFuQyxHQUFpREYscUJBQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsTUFBbEUs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LENBQUMwRixLQUFLLENBQUNtQyxhQUFQLENBQWhCO0FBQ0EsTUFBTW1CLFNBQVMsR0FBR3BELE1BQU0sQ0FBQ0MsT0FBUCxDQUFlLFVBQWYsQ0FBbEI7QUFDQSxNQUFNK0MsTUFBTSxHQUFHSSxTQUFTLENBQUN6RSxJQUFWLENBQWUsb0JBQWYsQ0FBZjtBQUVBcUUsUUFBTSxDQUFDckUsSUFBUCxDQUFZLHlCQUFaLEVBQXVDTyxRQUF2QyxDQUFnRCxRQUFoRDtBQUNILENBTkQ7QUFRQTlFLHlCQUFDLENBQUNLLFFBQUQsQ0FBRCxDQUFZSCxFQUFaLENBQWUsWUFBZixFQUE2Qix5REFBN0IsRUFBd0YsVUFBQ3dGLEtBQUQsRUFBVztBQUMvRixNQUFNRSxNQUFNLEdBQUc1Rix5QkFBQyxDQUFDMEYsS0FBSyxDQUFDbUMsYUFBUCxDQUFoQjtBQUNBLE1BQU1lLE1BQU0sR0FBR2hELE1BQU0sQ0FBQ21ELFFBQVAsQ0FBZ0IsU0FBaEIsQ0FBZjtBQUVBSCxRQUFNLENBQUNyRSxJQUFQLENBQVkseUJBQVosRUFBdUNPLFFBQXZDLENBQWdELFFBQWhEO0FBQ0gsQ0FMRDtBQU9BOUUseUJBQUMsQ0FBQ0ssUUFBRCxDQUFELENBQVlDLEtBQVosQ0FBa0IsWUFBTTtBQUNwQmlGLE9BQUssR0FBRzNCLE1BQU0sQ0FBQ1csSUFBUCxDQUFZLGtCQUFaLEVBQWdDc0MsTUFBaEMsR0FBeUMsQ0FBakQ7QUFDQWpELFFBQU0sQ0FBQ3FGLFNBQVAsQ0FBaUIsZUFBakI7QUFDQXBGLGFBQVcsQ0FBQ29GLFNBQVosQ0FBc0IsZUFBdEI7O0FBRUEsTUFBSXJGLE1BQU0sQ0FBQ2lELE1BQVAsS0FBa0JxQyx1Q0FBQSxJQUF1QixDQUFDQSwwQ0FBMUMsQ0FBSixFQUF1RTtBQUNuRWhGLGNBQVU7QUFDYjtBQUNKLENBUkQ7QUFVQSw2Q0FBZWdGLHdEQUFmLEkiLCJmaWxlIjoiODQ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IEdpdFN5bmM7IiwiaW1wb3J0IHRvYXN0ciBmcm9tICd0b2FzdHInO1xuXG50b2FzdHIub3B0aW9ucy5wb3NpdGlvbkNsYXNzID0gJ3RvYXN0LXRvcC1yaWdodCc7XG50b2FzdHIub3B0aW9ucy5wcmV2ZW50RHVwbGljYXRlcyA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IHRvYXN0cjtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgaXNPbmxpbmUgZnJvbSAnLi4vdXRpbHMvb2ZmbGluZSc7XG5cbmNvbnN0IG9mZmxpbmVFbGVtZW50ID0gJCgnI29mZmxpbmUtc3RhdHVzJyk7XG5cbiQod2luZG93KS5vbignb2ZmbGluZScsICgpID0+IHtcbiAgICBvZmZsaW5lRWxlbWVudC5zbGlkZURvd24oKTtcbn0pO1xuXG4kKHdpbmRvdykub24oJ29ubGluZScsICgpID0+IHtcbiAgICBvZmZsaW5lRWxlbWVudC5zbGlkZVVwKCk7XG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgIGlmICghaXNPbmxpbmUpIHtcbiAgICAgICAgb2ZmbGluZUVsZW1lbnQuc2xpZGVEb3duKCk7XG4gICAgfVxufSk7XG5cbi8vIGFzc3VtZSBvbmxpbmUgaWYgY2FuJ3QgY2hlY2tcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBnbG9iYWwubmF2aWdhdG9yLm9uTGluZSAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwubmF2aWdhdG9yLm9uTGluZSA6IHRydWU7XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gR3JhdkFkbWluOyIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgdG9hc3RyIGZyb20gJy4vdG9hc3RyJztcbmltcG9ydCBpc09ubGluZSBmcm9tICcuL29mZmxpbmUnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnZ3Jhdi1jb25maWcnO1xuaW1wb3J0IHRyaW0gZnJvbSAnbW91dC9zdHJpbmcvdHJpbSc7XG5cbmxldCBVTkxPQURJTkcgPSBmYWxzZTtcbmxldCBlcnJvciA9IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgbGV0IGVycm9yID0gbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQgfHwgcmVzcG9uc2UgfHwgJycpO1xuICAgIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5cbiAgICByZXR1cm4gZXJyb3I7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdGF0dXMocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG5cbiAgICAvKiBXaG9vcHMgY2FuIGhhbmRsZSBKU09OIHJlc3BvbnNlcyBzbyB3ZSBkb24ndCBuZWVkIHRoaXMgZm9yIG5vdy5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcihyZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VKU09OKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS50aGVuKCh0ZXh0KSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQgPSB0ZXh0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IHRleHQ7XG5cbiAgICAgICAgICAgIGxldCB0aGVfZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIHRoZV9lcnJvci5zdGFjayA9IHRyaW0oY29udGVudC5pbm5lclRleHQpO1xuXG4gICAgICAgICAgICB0aHJvdyB0aGVfZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlckZlZWRiYWNrKHJlc3BvbnNlKSB7XG4gICAgaWYgKFVOTE9BRElORykgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgbGV0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyB8fCAocmVzcG9uc2UuZXJyb3IgPyAnZXJyb3InIDogJycpO1xuICAgIGxldCBtZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZSB8fCAocmVzcG9uc2UuZXJyb3IgPyByZXNwb25zZS5lcnJvci5tZXNzYWdlIDogbnVsbCk7XG4gICAgbGV0IHNldHRpbmdzID0gcmVzcG9uc2UudG9hc3RyIHx8IG51bGw7XG4gICAgbGV0IGJhY2t1cDtcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgJ3VuYXV0aGVudGljYXRlZCc6XG4gICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gY29uZmlnLmJhc2VfdXJsX3JlbGF0aXZlO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3IoJ0xvZ2dlZCBvdXQnKTtcbiAgICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgICAgIHN0YXR1cyA9ICdlcnJvcic7XG4gICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSB8fCAnVW5hdXRob3JpemVkLic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdVbmtub3duIGVycm9yLic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgICAgICBzdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSB8fCAnJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIEFKQVggcmVzcG9uc2UuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBiYWNrdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0b2FzdHIub3B0aW9ucyk7XG4gICAgICAgIE9iamVjdC5rZXlzKHNldHRpbmdzKS5mb3JFYWNoKChrZXkpID0+IHsgdG9hc3RyLm9wdGlvbnNba2V5XSA9IHNldHRpbmdzW2tleV07IH0pO1xuICAgIH1cblxuICAgIGlmIChtZXNzYWdlICYmIChpc09ubGluZSB8fCAoIWlzT25saW5lICYmIHN0YXR1cyAhPT0gJ2Vycm9yJykpKSB7XG4gICAgICAgIHRvYXN0cltzdGF0dXMgPT09ICdzdWNjZXNzJyA/ICdzdWNjZXNzJyA6ICdlcnJvciddKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICB0b2FzdHIub3B0aW9ucyA9IGJhY2t1cDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyRmVlZGJhY2tFcnJvcihlcnJvcikge1xuICAgIGlmIChVTkxPQURJTkcpIHsgcmV0dXJuIHRydWU7IH1cbiAgICBsZXQgc3RhY2sgPSBlcnJvci5zdGFjayA/IGA8cHJlPjxjb2RlPiR7ZXJyb3Iuc3RhY2t9PC9jb2RlPjwvcHJlPmAgOiAnJztcbiAgICB0b2FzdHIuZXJyb3IoYEZldGNoIEZhaWxlZDogPGJyIC8+ICR7ZXJyb3IubWVzc2FnZX0gJHtzdGFja31gKTtcbiAgICBjb25zb2xlLmVycm9yKGAke2Vycm9yLm1lc3NhZ2V9IGF0ICR7ZXJyb3Iuc3RhY2t9YCk7XG59XG5cbiQoZ2xvYmFsKS5vbignYmVmb3JldW5sb2FkLl9hamF4JywgKCkgPT4ge1xuICAgIFVOTE9BRElORyA9IHRydWU7XG59KTtcbiIsImltcG9ydCB7IHBhcnNlU3RhdHVzLCBwYXJzZUpTT04sIHVzZXJGZWVkYmFjaywgdXNlckZlZWRiYWNrRXJyb3IgfSBmcm9tICcuL3Jlc3BvbnNlJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ2dyYXYtY29uZmlnJztcblxubGV0IHJhdztcbmxldCByZXF1ZXN0ID0gZnVuY3Rpb24odXJsLCBvcHRpb25zID0ge30sIGNhbGxiYWNrID0gKCkgPT4gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXRob2QgJiYgb3B0aW9ucy5tZXRob2QgPT09ICdwb3N0Jykge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgICAgIG9wdGlvbnMuYm9keSA9IE9iamVjdC5hc3NpZ24oeyAnYWRtaW4tbm9uY2UnOiBjb25maWcuYWRtaW5fbm9uY2UgfSwgb3B0aW9ucy5ib2R5IHx8IHt9KTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5ib2R5KS5tYXAoKGtleSkgPT4gZGF0YS5hcHBlbmQoa2V5LCBvcHRpb25zLmJvZHlba2V5XSkpO1xuICAgICAgICBvcHRpb25zLmJvZHkgPSBkYXRhO1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVybCwgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICByYXcgPSByZXNwb25zZTtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocGFyc2VTdGF0dXMpXG4gICAgICAgIC50aGVuKHBhcnNlSlNPTilcbiAgICAgICAgLnRoZW4odXNlckZlZWRiYWNrKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IGNhbGxiYWNrKHJlc3BvbnNlLCByYXcpKVxuICAgICAgICAuY2F0Y2godXNlckZlZWRiYWNrRXJyb3IpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVxdWVzdDtcbiIsImltcG9ydCBTZXR0aW5ncyBmcm9tICdnaXQtc3luYyc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICdhZG1pbi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB0b2FzdHIgZnJvbSAnYWRtaW4vdXRpbHMvdG9hc3RyJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ2dyYXYtY29uZmlnJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJ3doYXR3Zy1mZXRjaCc7XG5cbmNvbnN0IFdJWkFSRCA9ICQoJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0nKTtcbmNvbnN0IFJFU0VUX0xPQ0FMID0gJCgnW2RhdGEtcmVtb2RhbC1pZD1cInJlc2V0LWxvY2FsXCJdJyk7XG5jb25zdCBTRVJWSUNFUyA9IHsgJ2dpdGh1Yic6ICdnaXRodWIuY29tJywgJ2JpdGJ1Y2tldCc6ICdiaXRidWNrZXQub3JnJywgJ2dpdGxhYic6ICdnaXRsYWIuY29tJywgJ2FsbG90aGVycyc6ICdhbGxvdGhlcnMucmVwbycgfTtcbmNvbnN0IEJSQU5DSEVTID0geyAnZ2l0aHViJzogJ21haW4nLCAnYml0YnVja2V0JzogJ21hc3RlcicsICdnaXRsYWInOiAnbWFzdGVyJywgJ2FsbG90aGVycyc6ICdtYXN0ZXInIH07XG5jb25zdCBURU1QTEFURVMgPSB7XG4gICAgUkVQT19VUkw6ICdodHRwczovL3twbGFjZWhvbGRlcn0vZ2V0Z3Jhdi9ncmF2LmdpdCdcbn07XG5cbmNvbnN0IG9wZW5XaXphcmQgPSAoKSA9PiB7XG4gICAgY29uc3QgbW9kYWwgPSBXSVpBUkQucmVtb2RhbCh7IGNsb3NlT25Db25maXJtOiBmYWxzZSB9KTtcbiAgICBjb25zdCBwcmV2aW91cyA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInByZXZpb3VzXCJdJyk7XG4gICAgY29uc3QgbmV4dCA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cIm5leHRcIl0nKTtcbiAgICBjb25zdCBzYXZlID0gV0laQVJELmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwic2F2ZVwiXScpO1xuXG4gICAgU1RFUCA9IDA7XG5cbiAgICBXSVpBUkQuZmluZChgZm9ybSA+IFtjbGFzc149c3RlcC1dOm5vdCguc3RlcC0ke1NURVB9KSA+IC5wYW5lbGApLmhpZGUoKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgV0laQVJELmZpbmQoYGZvcm0gPiBbY2xhc3M9XCJzdGVwLSR7U1RFUH1cIl0gPiAucGFuZWxgKS5zaG93KCk7XG5cbiAgICBuZXh0LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICBwcmV2aW91cy5hZGRDbGFzcygnaGlkZGVuJyk7XG4gICAgc2F2ZS5hZGRDbGFzcygnaGlkZGVuJyk7XG5cbiAgICBjb25zdCB3ZWJob29rID0gJCgnW25hbWU9XCJkYXRhW3dlYmhvb2tdXCJdJykudmFsKCk7XG4gICAgY29uc3Qgd2ViaG9va19zZWNyZXQgPSAkKCdbbmFtZT1cImRhdGFbd2ViaG9va19zZWNyZXRdXCJdJykudmFsKCk7XG4gICAgJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9zaXRvcnldXCJdJykudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgJCgnW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tdXCJdJykudmFsKHdlYmhvb2spO1xuICAgICQoJ1tuYW1lPVwiZ2l0c3luY1t3ZWJob29rX3NlY3JldF1cIl0nKS52YWwod2ViaG9va19zZWNyZXQpO1xuICAgICQoJy5naXRzeW5jLXdlYmhvb2snKS50ZXh0KHdlYmhvb2spO1xuXG4gICAgbW9kYWwub3BlbigpO1xufTtcblxuY29uc3QgZGlzYWJsZUJ1dHRvbiA9IChuZXh0KSA9PiB7XG4gICAgbmV4dFxuICAgICAgICAuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKVxuICAgICAgICAuYWRkQ2xhc3MoJ2hpbnQtLXRvcCcpO1xufTtcblxuY29uc3QgZW5hYmxlQnV0dG9uID0gKG5leHQpID0+IHtcbiAgICBuZXh0XG4gICAgICAgIC5hdHRyKCdkaXNhYmxlZCcsIG51bGwpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnaGludC0tdG9wJyk7XG59O1xuXG5sZXQgU1RFUCA9IDA7XG5sZXQgU1RFUFMgPSAwO1xubGV0IFNFUlZJQ0UgPSBudWxsO1xuXG4kKGRvY3VtZW50KS5vbignY2xvc2VkJywgV0laQVJELCBmdW5jdGlvbihlKSB7XG4gICAgU1RFUCA9IDA7XG59KTtcblxuJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWdpdHN5bmMtdXNlcmFjdGlvbl0nLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdbZGF0YS1naXRzeW5jLXVzZXJhY3Rpb25dJyk7XG4gICAgY29uc3QgYWN0aW9uID0gdGFyZ2V0LmRhdGEoJ2dpdHN5bmNVc2VyYWN0aW9uJyk7XG4gICAgY29uc3QgVVJJID0gYCR7Y29uZmlnLmN1cnJlbnRfdXJsfS5qc29uYDtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3dpemFyZCc6XG4gICAgICAgICAgICBvcGVuV2l6YXJkKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3luYyc6XG4gICAgICAgICAgICBjb25zdCByZWxhdGl2ZVVSSSA9IHRhcmdldC5kYXRhKCdnaXRzeW5jLXVyaScpO1xuICAgICAgICAgICAgdGFyZ2V0LmZpbmQoJ2knKS5yZW1vdmVDbGFzcygnZmEtY2xvdWQgZmEtZ2l0JykuYWRkQ2xhc3MoJ2ZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4nKTtcblxuICAgICAgICAgICAgcmVxdWVzdChyZWxhdGl2ZVVSSSB8fCBVUkksIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICBib2R5OiB7IHRhc2s6ICdzeW5jaHJvbml6ZScgfVxuICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhcmdldC5maW5kKCdpJykucmVtb3ZlQ2xhc3MoJ2ZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4nKS5hZGRDbGFzcyhyZWxhdGl2ZVVSSSA/ICdmYS1naXQnIDogJ2ZhLWNsb3VkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgICAgICBjb25zdCBtb2RhbCA9IFJFU0VUX0xPQ0FMLnJlbW9kYWwoeyBjbG9zZU9uQ29uZmlybTogZmFsc2UgfSk7XG4gICAgICAgICAgICBtb2RhbC5vcGVuKCk7XG5cbiAgICAgICAgICAgIGlmICghUkVTRVRfTE9DQUwuZGF0YSgnX3Jlc2V0X2V2ZW50X3NldF8nKSkge1xuICAgICAgICAgICAgICAgIFJFU0VUX0xPQ0FMLmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwicmVzZXQtbG9jYWxcIl0nKS5vbmUoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICBSRVNFVF9MT0NBTC5kYXRhKCdfcmVzZXRfZXZlbnRfc2V0XycsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZmluZCgnaScpLnJlbW92ZUNsYXNzKCdmYS1oaXN0b3J5JykuYWRkQ2xhc3MoJ2ZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdChVUkksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogeyB0YXNrOiAncmVzZXRsb2NhbCcgfVxuICAgICAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSRVNFVF9MT0NBTC5kYXRhKCdfcmVzZXRfZXZlbnRfc2V0XycsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5maW5kKCdpJykucmVtb3ZlQ2xhc3MoJ2ZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4nKS5hZGRDbGFzcygnZmEtaGlzdG9yeScpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtZ2l0c3luYy1hY3Rpb25dJywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdbZGF0YS1naXRzeW5jLWFjdGlvbl0nKTtcbiAgICBjb25zdCBwcmV2aW91cyA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInByZXZpb3VzXCJdJyk7XG4gICAgY29uc3QgbmV4dCA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cIm5leHRcIl0nKTtcbiAgICBjb25zdCBzYXZlID0gV0laQVJELmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwic2F2ZVwiXScpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhcmdldC5kYXRhKCdnaXRzeW5jQWN0aW9uJyk7XG4gICAgY29uc3QgdXNlciA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tyZXBvX3VzZXJdXCJdJykudmFsKCk7XG4gICAgY29uc3Qgbm9Vc2VyID0gJCgnW25hbWU9XCJnaXRzeW5jW25vX3VzZXJdXCJdJykuaXMoJzpjaGVja2VkJyk7XG4gICAgY29uc3QgcGFzc3dvcmQgPSAkKCdbbmFtZT1cImdpdHN5bmNbcmVwb19wYXNzd29yZF1cIl0nKS52YWwoKTtcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9fdXJsXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IGJyYW5jaCA9ICQoJ1tuYW1lPVwiZ2l0c3luY1ticmFuY2hdXCJdJykudmFsKCk7XG4gICAgY29uc3Qgd2ViaG9vayA9ICQoJ1tuYW1lPVwiZ2l0c3luY1t3ZWJob29rXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IHdlYmhvb2tfZW5hYmxlZCA9ICQoJ1tuYW1lPVwiZ2l0c3luY1t3ZWJob29rX2VuYWJsZWRdXCJdJykuaXMoJzpjaGVja2VkJyk7XG4gICAgY29uc3Qgd2ViaG9va19zZWNyZXQgPSAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va19zZWNyZXRdXCJdJykudmFsKCk7XG5cbiAgICBpZiAodGFyZ2V0LmF0dHIoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlcnJvciA9IFtdO1xuXG4gICAgaWYgKCF1c2VyICYmICFub1VzZXIpIHtcbiAgICAgICAgZXJyb3IucHVzaCgnVXNlcm5hbWUgaXMgbWlzc2luZy4nKTtcbiAgICB9XG4gICAgLypcbiAgICBpZiAoIXBhc3N3b3JkKSB7XG4gICAgICAgIGVycm9yLnB1c2goJ1Bhc3N3b3JkIGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuICAgICovXG4gICAgaWYgKCFyZXBvc2l0b3J5KSB7XG4gICAgICAgIGVycm9yLnB1c2goJ1JlcG9zaXRvcnkgaXMgbWlzc2luZy4nKTtcbiAgICB9XG5cbiAgICBpZiAoWydzYXZlJywgJ3Rlc3QnXS5pbmNsdWRlcyhhY3Rpb24pKSB7XG4gICAgICAgIHRhcmdldC5maW5kKCcuZmEnKS5yZW1vdmVDbGFzcyhhY3Rpb24gPT09ICd0ZXN0JyA/ICdmYS1wbHVnJyA6ICdmYS1jaGVjaycpLmFkZENsYXNzKCdmYS1zcGluIGZhLWNpcmNsZS1vLW5vdGNoJyk7XG5cbiAgICAgICAgaWYgKGVycm9yLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9hc3RyLmVycm9yKGVycm9yLmpvaW4oJzxiciAvPicpKTtcbiAgICAgICAgICAgIHRhcmdldC5maW5kKCcuZmEnKS5yZW1vdmVDbGFzcygnZmEtc3BpbiBmYS1jaXJjbGUtby1ub3RjaCcpLmFkZENsYXNzKGFjdGlvbiA9PT0gJ3Rlc3QnID8gJ2ZhLXBsdWcnIDogJ2ZhLWNoZWNrJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhY3Rpb24gPT09ICdzYXZlJykge1xuICAgICAgICBjb25zdCBmb2xkZXJzID0gJCgnW25hbWU9XCJnaXRzeW5jW2ZvbGRlcnNdXCJdOmNoZWNrZWQnKS5tYXAoKGksIGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbcmVwb3NpdG9yeV1cIl0nKS52YWwocmVwb3NpdG9yeSk7XG4gICAgICAgICQoJ1tuYW1lPVwiZGF0YVtub191c2VyXVwiXScpLnZhbChub1VzZXIgPyAnMScgOiAnMCcpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbdXNlcl1cIl0nKS52YWwodXNlcik7XG4gICAgICAgICQoJ1tuYW1lPVwiZGF0YVtwYXNzd29yZF1cIl0nKS52YWwocGFzc3dvcmQpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbYnJhbmNoXVwiXScpLnZhbChicmFuY2gpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbcmVtb3RlXVticmFuY2hdXCJdJykudmFsKGJyYW5jaCk7XG4gICAgICAgICQoJ1tuYW1lPVwiZGF0YVt3ZWJob29rXVwiXScpLnZhbCh3ZWJob29rKTtcbiAgICAgICAgJChgW25hbWU9XCJkYXRhW3dlYmhvb2tfZW5hYmxlZF1cIl1bdmFsdWU9XCIke3dlYmhvb2tfZW5hYmxlZCA/IDEgOiAwfVwiXWApLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW3dlYmhvb2tfc2VjcmV0XVwiXScpLnZhbCh3ZWJob29rX3NlY3JldCk7XG5cbiAgICAgICAgY29uc3QgZGF0YUZvbGRlcnMgPSAkKCdbbmFtZT1cImRhdGFbZm9sZGVyc11bXVwiXScpO1xuICAgICAgICBpZiAoZGF0YUZvbGRlcnMgJiYgZGF0YUZvbGRlcnNbMF0gJiYgZGF0YUZvbGRlcnNbMF0uc2VsZWN0aXplKSB7XG4gICAgICAgICAgICBkYXRhRm9sZGVyc1swXS5zZWxlY3RpemUuc2V0VmFsdWUoZm9sZGVycy50b0FycmF5KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCgnW25hbWU9XCJ0YXNrXCJdW3ZhbHVlPVwic2F2ZVwiXScpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24gPT09ICd0ZXN0Jykge1xuICAgICAgICBjb25zdCBVUkkgPSBgJHtjb25maWcuY3VycmVudF91cmx9Lmpzb25gO1xuICAgICAgICBjb25zdCB0ZXN0ID0gZ2xvYmFsLmJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdXNlcjogbm9Vc2VyID8gJycgOiB1c2VyLFxuICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICByZXBvc2l0b3J5LFxuICAgICAgICAgICAgYnJhbmNoXG4gICAgICAgIH0pKTtcblxuICAgICAgICByZXF1ZXN0KFVSSSwge1xuICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgICAgICBib2R5OiB7IHRlc3QsIHRhc2s6ICd0ZXN0Q29ubmVjdGlvbicgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0YXJnZXQuZmluZCgnLmZhJykucmVtb3ZlQ2xhc3MoJ2ZhLXNwaW4gZmEtY2lyY2xlLW8tbm90Y2gnKS5hZGRDbGFzcygnZmEtcGx1ZycpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgV0laQVJELmZpbmQoYC5zdGVwLSR7U1RFUH0gPiAucGFuZWxgKS5zbGlkZVVwKCk7XG4gICAgU1RFUCArPSBhY3Rpb24gPT09ICduZXh0JyA/ICsxIDogLTE7XG4gICAgV0laQVJELmZpbmQoYC5zdGVwLSR7U1RFUH0gPiAucGFuZWxgKS5zbGlkZURvd24oKTtcblxuICAgIHNhdmUuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgIHByZXZpb3VzLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICB9XG5cbiAgICBpZiAoU1RFUCA8PSAwKSB7XG4gICAgICAgIHByZXZpb3VzLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgZW5hYmxlQnV0dG9uKG5leHQpO1xuICAgIH1cblxuICAgIGlmIChTVEVQID4gMCkge1xuICAgICAgICBuZXh0LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICB9XG5cbiAgICBpZiAoU1RFUCA9PT0gMSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJlcG8gPSAkKCdbbmFtZT1cImdpdHN5bmNbcmVwb3NpdG9yeV1cIl06Y2hlY2tlZCcpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmVwby5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRpc2FibGVCdXR0b24obmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmFibGVCdXR0b24obmV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoU1RFUCA9PT0gMikge1xuICAgICAgICBjb25zdCByZXBvVVJMID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9fdXJsXVwiXScpLnZhbCgpO1xuICAgICAgICBpZiAoIXJlcG9VUkwubGVuZ3RoIHx8ICFicmFuY2gpIHtcbiAgICAgICAgICAgIGRpc2FibGVCdXR0b24obmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmFibGVCdXR0b24obmV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoU1RFUCA9PT0gU1RFUFMpIHtcbiAgICAgICAgbmV4dC5hZGRDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIHByZXZpb3VzLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgc2F2ZS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgfVxufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdpbnB1dCcsICdbbmFtZT1cImdpdHN5bmNbbm9fdXNlcl1cIl0nLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHVzZXIgPSAkKCdbbmFtZT1cImdpdHN5bmNbcmVwb191c2VyXVwiXScpO1xuICAgIGlmICh0YXJnZXQuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgdXNlclxuICAgICAgICAgICAgLnZhbCgnJylcbiAgICAgICAgICAgIC5wcm9wKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpXG4gICAgICAgICAgICAuYXR0cigncGxhY2Vob2xkZXInLCAnPHVzZXJuYW1lIG5vdCByZXF1aXJlZD4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB1c2VyXG4gICAgICAgICAgICAucHJvcCgnZGlzYWJsZWQnLCBudWxsKVxuICAgICAgICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgJ1VzZXJuYW1lLCBub3QgZW1haWwnKTtcbiAgICB9XG59KTtcbiQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW25hbWU9XCJnaXRzeW5jW3JlcG9zaXRvcnldXCJdJywgKCkgPT4ge1xuICAgIGVuYWJsZUJ1dHRvbihXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJuZXh0XCJdJykpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdpbnB1dCcsICdbbmFtZT1cImdpdHN5bmNbcmVwb191cmxdXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWwoKTtcbiAgICBjb25zdCBuZXh0ID0gV0laQVJELmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwibmV4dFwiXScpO1xuXG4gICAgaWYgKHZhbHVlLmxlbmd0aCkge1xuICAgICAgICBlbmFibGVCdXR0b24obmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGlzYWJsZUJ1dHRvbihuZXh0KTtcbiAgICB9XG59KTtcblxuJChkb2N1bWVudCkub24oJ2tleXVwJywgJ1tkYXRhLWdpdHN5bmMtdXJpYmFzZV0gW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tdXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWwoKTtcbiAgICAkKCcuZ2l0c3luYy13ZWJob29rJykudGV4dCh2YWx1ZSk7XG59KTtcblxuJChkb2N1bWVudCkub24oJ2tleXVwJywgJ1tkYXRhLWdpdHN5bmMtdXJpYmFzZV0gW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfc2VjcmV0XVwiXScsIChldmVudCkgPT4ge1xuICAgICQoJ1tkYXRhLWdpdHN5bmMtdXJpYmFzZV0gW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfZW5hYmxlZF1cIl0nKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbignY2hhbmdlJywgJ1tkYXRhLWdpdHN5bmMtdXJpYmFzZV0gW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfZW5hYmxlZF1cIl0nLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IGNoZWNrZWQgPSB0YXJnZXQuaXMoJzpjaGVja2VkJyk7XG4gICAgY29uc3Qgc2VjcmV0ID0gJCgnW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfc2VjcmV0XVwiXScpLnZhbCgpO1xuICAgIHRhcmdldC5jbG9zZXN0KCcud2ViaG9vay1zZWNyZXQtd3JhcHBlcicpLmZpbmQoJ2xhYmVsOmxhc3QtY2hpbGQnKVtjaGVja2VkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKCdoaWRkZW4nKTtcbiAgICAkKCcuZ2l0c3luYy13ZWJob29rLXNlY3JldCcpLmh0bWwoIWNoZWNrZWQgfHwgIXNlY3JldC5sZW5ndGggPyAnPGVtPmxlYXZlIGVtcHR5PC9lbT4nIDogYDxjb2RlPiR7c2VjcmV0fTwvY29kZT5gKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbignY2hhbmdlJywgJ1tuYW1lPVwiZ2l0c3luY1tyZXBvc2l0b3J5XVwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoIXRhcmdldC5pcygnOmNoZWNrZWQnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgU0VSVklDRSA9IHRhcmdldC52YWwoKTtcblxuICAgIE9iamVjdC5rZXlzKFNFUlZJQ0VTKS5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIFdJWkFSRC5maW5kKGAuaGlkZGVuLXN0ZXAtJHtzZXJ2aWNlfWApW3NlcnZpY2UgPT09IFNFUlZJQ0UgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2hpZGRlbicpO1xuICAgICAgICBpZiAoc2VydmljZSA9PT0gU0VSVklDRSkge1xuICAgICAgICAgICAgV0laQVJELmZpbmQoJy53ZWJob29rLXNlY3JldC13cmFwcGVyJylbc2VydmljZSA9PT0gJ2JpdGJ1Y2tldCcgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJ2hpZGRlbicpO1xuICAgICAgICAgICAgV0laQVJEXG4gICAgICAgICAgICAgICAgLmZpbmQoJ2lucHV0W25hbWU9XCJnaXRzeW5jW3JlcG9fdXJsXVwiXVtwbGFjZWhvbGRlcl0nKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdwbGFjZWhvbGRlcicsIFRFTVBMQVRFUy5SRVBPX1VSTC5yZXBsYWNlKC9cXHtwbGFjZWhvbGRlclxcfS8sIFNFUlZJQ0VTW3NlcnZpY2VdKSlcbiAgICAgICAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAgICAgICAuZmluZCgnaW5wdXRbbmFtZT1cImdpdHN5bmNbYnJhbmNoXVwiXScpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgQlJBTkNIRVNbc2VydmljZV0pXG4gICAgICAgICAgICAgICAgLnZhbChCUkFOQ0hFU1tzZXJ2aWNlXSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1hY2Nlc3MtdG9rZW5zLWRldGFpbHNdJywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGJ1dHRvbiA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgcGFuZWwgPSBidXR0b24uY2xvc2VzdCgnLmFjY2Vzcy10b2tlbnMnKS5maW5kKCcuYWNjZXNzLXRva2Vucy1kZXRhaWxzJyk7XG5cbiAgICBwYW5lbC5zbGlkZVRvZ2dsZSgyNTAsICgpID0+IHtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gcGFuZWwuaXMoJzp2aXNpYmxlJyk7XG4gICAgICAgIGNvbnN0IGljb24gPSBidXR0b24uZmluZCgnLmZhJyk7XG5cbiAgICAgICAgaWNvbi5yZW1vdmVDbGFzcygnZmEtY2hldnJvbi1kb3duIGZhLWNoZXZyb24tdXAnKS5hZGRDbGFzcyhgZmEtY2hldnJvbi0ke2lzVmlzaWJsZSA/ICd1cCcgOiAnZG93bid9YCk7XG4gICAgfSk7XG59KTtcblxuY29uc3Qgc2hvd05vdGljZXMgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZWxlbWVudCk7XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0YXJnZXQudmFsKCkucmVwbGFjZSgvXFwvL2csICctJyk7XG4gICAgY29uc3QgY29sdW1uID0gdGFyZ2V0LmNsb3Nlc3QoJy5jb2x1bW5zJykuZmluZCgnLmNvbHVtbjpsYXN0Jyk7XG5cbiAgICBjb2x1bW4uZmluZCgnW2NsYXNzKj1cImRlc2NyaXB0aW9uLVwiXScpLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICBjb2x1bW4uZmluZChgLmRlc2NyaXB0aW9uLSR7c2VsZWN0aW9ufWApLnJlbW92ZUNsYXNzKCdoaWRkZW4nKS5oaWRlKCkuZmFkZUluKHtcbiAgICAgICAgZHVyYXRpb246IDI1MFxuICAgIH0pO1xufTtcblxuJChkb2N1bWVudCkub24oJ2lucHV0JywgJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0gLnN0ZXAtNCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGlmICghdGFyZ2V0LmlzKCc6Y2hlY2tlZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzaG93Tm90aWNlcyh0YXJnZXQpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdtb3VzZWVudGVyJywgJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0gLnN0ZXAtNCAuaW5mby1kZXNjJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS5zaWJsaW5ncygnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgc2hvd05vdGljZXModGFyZ2V0KTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbignbW91c2VsZWF2ZScsICdbZGF0YS1yZW1vZGFsLWlkPVwid2l6YXJkXCJdIC5zdGVwLTQgbGFiZWwnLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRhcmdldC5jbG9zZXN0KCcuY29sdW1ucycpO1xuICAgIGNvbnN0IGNvbHVtbiA9IGNvbnRhaW5lci5maW5kKCcuY29sdW1uOmxhc3QtY2hpbGQnKTtcblxuICAgIGNvbHVtbi5maW5kKCdbY2xhc3MqPVwiZGVzY3JpcHRpb24tXCJdJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdtb3VzZWxlYXZlJywgJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0gLmNvbHVtbnMgLmNvbHVtbjpmaXJzdC1jaGlsZCcsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgY29sdW1uID0gdGFyZ2V0LnNpYmxpbmdzKCcuY29sdW1uJyk7XG5cbiAgICBjb2x1bW4uZmluZCgnW2NsYXNzKj1cImRlc2NyaXB0aW9uLVwiXScpLmFkZENsYXNzKCdoaWRkZW4nKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgU1RFUFMgPSBXSVpBUkQuZmluZCgnW2NsYXNzXj1cInN0ZXAtXCJdJykubGVuZ3RoIC0gMTtcbiAgICBXSVpBUkQud3JhcElubmVyKCc8Zm9ybT48L2Zvcm0+Jyk7XG4gICAgUkVTRVRfTE9DQUwud3JhcElubmVyKCc8Zm9ybT48L2Zvcm0+Jyk7XG5cbiAgICBpZiAoV0laQVJELmxlbmd0aCAmJiAoU2V0dGluZ3MuZmlyc3RfdGltZSB8fCAhU2V0dGluZ3MuZ2l0X2luc3RhbGxlZCkpIHtcbiAgICAgICAgb3BlbldpemFyZCgpO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTZXR0aW5ncztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///849\n");
+eval("\n;// CONCATENATED MODULE: external \"GitSync\"\nconst external_GitSync_namespaceObject = GitSync;\nvar external_GitSync_default = /*#__PURE__*/__webpack_require__.n(external_GitSync_namespaceObject);\n// EXTERNAL MODULE: external \"jQuery\"\nvar external_jQuery_ = __webpack_require__(609);\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_);\n// EXTERNAL MODULE: ../../../grav/grav-plugin-admin/themes/grav/node_modules/toastr/toastr.js\nvar toastr = __webpack_require__(860);\nvar toastr_default = /*#__PURE__*/__webpack_require__.n(toastr);\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/toastr.js\n\n(toastr_default()).options.positionClass = 'toast-top-right';\n(toastr_default()).options.preventDuplicates = true;\n/* harmony default export */ const utils_toastr = ((toastr_default()));\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/offline.js\n\n\nvar offlineElement = external_jQuery_default()('#offline-status');\nexternal_jQuery_default()(window).on('offline', function () {\n offlineElement.slideDown();\n});\nexternal_jQuery_default()(window).on('online', function () {\n offlineElement.slideUp();\n});\nexternal_jQuery_default()(document).ready(function () {\n if (!offline) {\n offlineElement.slideDown();\n }\n}); // assume online if can't check\n\n/* harmony default export */ const offline = (typeof __webpack_require__.g.navigator.onLine !== 'undefined' ? __webpack_require__.g.navigator.onLine : true);\n;// CONCATENATED MODULE: external \"GravAdmin\"\nconst external_GravAdmin_namespaceObject = GravAdmin;\n// EXTERNAL MODULE: ../../../grav/grav-plugin-admin/themes/grav/node_modules/mout/string/trim.js\nvar trim = __webpack_require__(284);\nvar trim_default = /*#__PURE__*/__webpack_require__.n(trim);\n;// CONCATENATED MODULE: ../../../grav/grav-plugin-admin/themes/grav/app/utils/response.js\n\n\n\n\n\nvar UNLOADING = false;\n\nvar error = function error(response) {\n var error = new Error(response.statusText || response || '');\n error.response = response;\n return error;\n};\n\nfunction parseStatus(response) {\n return response;\n /* Whoops can handle JSON responses so we don't need this for now.\n if (response.status >= 200 && response.status < 300) {\n return response;\n } else {\n throw error(response);\n }\n */\n}\nfunction parseJSON(response) {\n return response.text().then(function (text) {\n var parsed = text;\n\n try {\n parsed = JSON.parse(text);\n } catch (error) {\n var content = document.createElement('div');\n content.innerHTML = text;\n var the_error = new Error();\n the_error.stack = trim_default()(content.innerText);\n throw the_error;\n }\n\n return parsed;\n });\n}\nfunction userFeedback(response) {\n if (UNLOADING) {\n return true;\n }\n\n var status = response.status || (response.error ? 'error' : '');\n var message = response.message || (response.error ? response.error.message : null);\n var settings = response.toastr || null;\n var backup;\n\n switch (status) {\n case 'unauthenticated':\n document.location.href = external_GravAdmin_namespaceObject.config.base_url_relative;\n throw error('Logged out');\n\n case 'unauthorized':\n status = 'error';\n message = message || 'Unauthorized.';\n break;\n\n case 'error':\n status = 'error';\n message = message || 'Unknown error.';\n break;\n\n case 'success':\n status = 'success';\n message = message || '';\n break;\n\n default:\n status = 'error';\n message = message || 'Invalid AJAX response.';\n break;\n }\n\n if (settings) {\n backup = Object.assign({}, utils_toastr.options);\n Object.keys(settings).forEach(function (key) {\n utils_toastr.options[key] = settings[key];\n });\n }\n\n if (message && (offline || !offline && status !== 'error')) {\n utils_toastr[status === 'success' ? 'success' : 'error'](message);\n }\n\n if (settings) {\n utils_toastr.options = backup;\n }\n\n return response;\n}\nfunction userFeedbackError(error) {\n if (UNLOADING) {\n return true;\n }\n\n var stack = error.stack ? \"\".concat(error.stack, \"
\") : '';\n utils_toastr.error(\"Fetch Failed: \".concat(secret, \"
\"));\n});\nexternal_jQuery_default()(document).on('change', '[name=\"gitsync[repository]\"]', function (event) {\n var target = external_jQuery_default()(event.target);\n\n if (!target.is(':checked')) {\n return;\n }\n\n SERVICE = target.val();\n Object.keys(SERVICES).forEach(function (service) {\n WIZARD.find(\".hidden-step-\".concat(service))[service === SERVICE ? 'removeClass' : 'addClass']('hidden');\n\n if (service === SERVICE) {\n WIZARD.find('.webhook-secret-wrapper')[service === 'bitbucket' ? 'addClass' : 'removeClass']('hidden');\n WIZARD.find('input[name=\"gitsync[repo_url]\"][placeholder]').attr('placeholder', TEMPLATES.REPO_URL.replace(/\\{placeholder\\}/, SERVICES[service])).end().find('input[name=\"gitsync[branch]\"]').attr('placeholder', BRANCHES[service]).val(BRANCHES[service]);\n }\n });\n});\nexternal_jQuery_default()(document).on('click', '[data-access-tokens-details]', function (event) {\n event.preventDefault();\n var button = external_jQuery_default()(event.currentTarget);\n var panel = button.closest('.access-tokens').find('.access-tokens-details');\n panel.slideToggle(250, function () {\n var isVisible = panel.is(':visible');\n var icon = button.find('.fa');\n icon.removeClass('fa-chevron-down fa-chevron-up').addClass(\"fa-chevron-\".concat(isVisible ? 'up' : 'down'));\n });\n});\n\nvar showNotices = function showNotices(element) {\n var target = external_jQuery_default()(element);\n var selection = target.val().replace(/\\//g, '-');\n var column = target.closest('.columns').find('.column:last');\n column.find('[class*=\"description-\"]').addClass('hidden');\n column.find(\".description-\".concat(selection)).removeClass('hidden').hide().fadeIn({\n duration: 250\n });\n};\n\nexternal_jQuery_default()(document).on('input', '[data-remodal-id=\"wizard\"] .step-4 input[type=\"checkbox\"]', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n\n if (!target.is(':checked')) {\n return;\n }\n\n showNotices(target);\n});\nexternal_jQuery_default()(document).on('mouseenter', '[data-remodal-id=\"wizard\"] .step-4 .info-desc', function (event) {\n var target = external_jQuery_default()(event.currentTarget).siblings('input[type=\"checkbox\"]');\n showNotices(target);\n});\nexternal_jQuery_default()(document).on('mouseleave', '[data-remodal-id=\"wizard\"] .step-4 label', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var container = target.closest('.columns');\n var column = container.find('.column:last-child');\n column.find('[class*=\"description-\"]').addClass('hidden');\n});\nexternal_jQuery_default()(document).on('mouseleave', '[data-remodal-id=\"wizard\"] .columns .column:first-child', function (event) {\n var target = external_jQuery_default()(event.currentTarget);\n var column = target.siblings('.column');\n column.find('[class*=\"description-\"]').addClass('hidden');\n});\nexternal_jQuery_default()(document).ready(function () {\n STEPS = WIZARD.find('[class^=\"step-\"]').length - 1;\n WIZARD.wrapInner('');\n RESET_LOCAL.wrapInner('');\n\n if (WIZARD.length && ((external_GitSync_default()).first_time || !(external_GitSync_default()).git_installed)) {\n openWizard();\n }\n});\n/* harmony default export */ const wizard = ((/* unused pure expression or super */ null && (Settings)));\n;// CONCATENATED MODULE: ./app/main.js\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy9leHRlcm5hbCBcIkdpdFN5bmNcIj9jNTkxIiwid2VicGFjazovL3RyaWxieS1ncmF2LXBsdWdpbi1naXRzeW5jLy4uL2dyYXYvZ3Jhdi1wbHVnaW4tYWRtaW4vdGhlbWVzL2dyYXYvYXBwL3V0aWxzL3RvYXN0ci5qcz8zMTZmIiwid2VicGFjazovL3RyaWxieS1ncmF2LXBsdWdpbi1naXRzeW5jLy4uL2dyYXYvZ3Jhdi1wbHVnaW4tYWRtaW4vdGhlbWVzL2dyYXYvYXBwL3V0aWxzL29mZmxpbmUuanM/YmNkYyIsIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy9leHRlcm5hbCBcIkdyYXZBZG1pblwiP2M2ZWIiLCJ3ZWJwYWNrOi8vdHJpbGJ5LWdyYXYtcGx1Z2luLWdpdHN5bmMvLi4vZ3Jhdi9ncmF2LXBsdWdpbi1hZG1pbi90aGVtZXMvZ3Jhdi9hcHAvdXRpbHMvcmVzcG9uc2UuanM/MWRmYSIsIndlYnBhY2s6Ly90cmlsYnktZ3Jhdi1wbHVnaW4tZ2l0c3luYy8uLi9ncmF2L2dyYXYtcGx1Z2luLWFkbWluL3RoZW1lcy9ncmF2L2FwcC91dGlscy9yZXF1ZXN0LmpzPzhiZDEiLCJ3ZWJwYWNrOi8vdHJpbGJ5LWdyYXYtcGx1Z2luLWdpdHN5bmMvLi9hcHAvd2l6YXJkL2luZGV4LmpzP2JjYjciXSwibmFtZXMiOlsidG9hc3RyIiwib2ZmbGluZUVsZW1lbnQiLCIkIiwid2luZG93Iiwib24iLCJzbGlkZURvd24iLCJzbGlkZVVwIiwiZG9jdW1lbnQiLCJyZWFkeSIsImlzT25saW5lIiwiZ2xvYmFsIiwibmF2aWdhdG9yIiwib25MaW5lIiwiVU5MT0FESU5HIiwiZXJyb3IiLCJyZXNwb25zZSIsIkVycm9yIiwic3RhdHVzVGV4dCIsInBhcnNlU3RhdHVzIiwicGFyc2VKU09OIiwidGV4dCIsInRoZW4iLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJjb250ZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRoZV9lcnJvciIsInN0YWNrIiwidHJpbSIsImlubmVyVGV4dCIsInVzZXJGZWVkYmFjayIsInN0YXR1cyIsIm1lc3NhZ2UiLCJzZXR0aW5ncyIsImJhY2t1cCIsImxvY2F0aW9uIiwiaHJlZiIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwidXNlckZlZWRiYWNrRXJyb3IiLCJjb25zb2xlIiwicmF3IiwicmVxdWVzdCIsInVybCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsIm1ldGhvZCIsImRhdGEiLCJGb3JtRGF0YSIsImJvZHkiLCJhZG1pbl9ub25jZSIsIm1hcCIsImFwcGVuZCIsImNyZWRlbnRpYWxzIiwiaGVhZGVycyIsImZldGNoIiwiR0lUX1JFR0VYIiwiV0laQVJEIiwiUkVTRVRfTE9DQUwiLCJTRVJWSUNFUyIsIkJSQU5DSEVTIiwiVEVNUExBVEVTIiwiUkVQT19VUkwiLCJvcGVuV2l6YXJkIiwibW9kYWwiLCJyZW1vZGFsIiwiY2xvc2VPbkNvbmZpcm0iLCJwcmV2aW91cyIsImZpbmQiLCJuZXh0Iiwic2F2ZSIsIlNURVAiLCJoaWRlIiwicmVtb3ZlQ2xhc3MiLCJzaG93IiwiYWRkQ2xhc3MiLCJ3ZWJob29rIiwidmFsIiwid2ViaG9va19zZWNyZXQiLCJ0cmlnZ2VyIiwib3BlbiIsImRpc2FibGVCdXR0b24iLCJhdHRyIiwiZW5hYmxlQnV0dG9uIiwiU1RFUFMiLCJTRVJWSUNFIiwiZSIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiYWN0aW9uIiwiVVJJIiwicmVsYXRpdmVVUkkiLCJ0YXNrIiwib25lIiwiY2xvc2UiLCJ1c2VyIiwibm9Vc2VyIiwiaXMiLCJwYXNzd29yZCIsInJlcG9zaXRvcnkiLCJicmFuY2giLCJ3ZWJob29rX2VuYWJsZWQiLCJwdXNoIiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJqb2luIiwiZm9sZGVycyIsImkiLCJpdGVtIiwidmFsdWUiLCJwcm9wIiwiZGF0YUZvbGRlcnMiLCJzZWxlY3RpemUiLCJzZXRWYWx1ZSIsInRvQXJyYXkiLCJ0ZXN0IiwiYnRvYSIsInN0cmluZ2lmeSIsInNlbGVjdGVkUmVwbyIsInJlcG9VUkwiLCJjdXJyZW50VGFyZ2V0IiwiaXNHaXRVUkwiLCJjaGVja2VkIiwic2VjcmV0IiwiaHRtbCIsInNlcnZpY2UiLCJyZXBsYWNlIiwiZW5kIiwiYnV0dG9uIiwicGFuZWwiLCJzbGlkZVRvZ2dsZSIsImlzVmlzaWJsZSIsImljb24iLCJzaG93Tm90aWNlcyIsImVsZW1lbnQiLCJzZWxlY3Rpb24iLCJjb2x1bW4iLCJmYWRlSW4iLCJkdXJhdGlvbiIsInNpYmxpbmdzIiwiY29udGFpbmVyIiwid3JhcElubmVyIiwiU2V0dGluZ3MiXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxnQ0FBNEIsVzs7Ozs7Ozs7O0FDQWxDO0FBRUFBLHdDQUFBLEdBQStCLGlCQUEvQjtBQUNBQSw0Q0FBQSxHQUFtQyxJQUFuQztBQUVBLG1EQUFlQSxrQkFBZixFOztBQ0xBO0FBQ0E7QUFFQSxJQUFNQyxjQUFjLEdBQUdDLHlCQUFDLENBQUMsaUJBQUQsQ0FBeEI7QUFFQUEseUJBQUMsQ0FBQ0MsTUFBRCxDQUFELENBQVVDLEVBQVYsQ0FBYSxTQUFiLEVBQXdCLFlBQU07QUFDMUJILGdCQUFjLENBQUNJLFNBQWY7QUFDSCxDQUZEO0FBSUFILHlCQUFDLENBQUNDLE1BQUQsQ0FBRCxDQUFVQyxFQUFWLENBQWEsUUFBYixFQUF1QixZQUFNO0FBQ3pCSCxnQkFBYyxDQUFDSyxPQUFmO0FBQ0gsQ0FGRDtBQUlBSix5QkFBQyxDQUFDSyxRQUFELENBQUQsQ0FBWUMsS0FBWixDQUFrQixZQUFNO0FBQ3BCLE1BQUksQ0FBQ0MsT0FBTCxFQUFlO0FBQ1hSLGtCQUFjLENBQUNJLFNBQWY7QUFDSDtBQUNKLENBSkQsRSxDQU1BOztBQUNBLDhDQUFlLE9BQU9LLHFCQUFNLENBQUNDLFNBQVAsQ0FBaUJDLE1BQXhCLEtBQW1DLFdBQW5DLEdBQWlERixxQkFBTSxD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QUFzQixlQUF0Qjs7QUFFQSxNQUFJdEYsTUFBTSxDQUFDaUQsTUFBUCxLQUFrQnNDLHVDQUFBLElBQXVCLENBQUNBLDBDQUExQyxDQUFKLEVBQXVFO0FBQ25FakYsY0FBVTtBQUNiO0FBQ0osQ0FSRDtBQVVBLDZDQUFlaUYsd0RBQWYsSSIsImZpbGUiOiI4NDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gR2l0U3luYzsiLCJpbXBvcnQgdG9hc3RyIGZyb20gJ3RvYXN0cic7XG5cbnRvYXN0ci5vcHRpb25zLnBvc2l0aW9uQ2xhc3MgPSAndG9hc3QtdG9wLXJpZ2h0JztcbnRvYXN0ci5vcHRpb25zLnByZXZlbnREdXBsaWNhdGVzID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgdG9hc3RyO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBpc09ubGluZSBmcm9tICcuLi91dGlscy9vZmZsaW5lJztcblxuY29uc3Qgb2ZmbGluZUVsZW1lbnQgPSAkKCcjb2ZmbGluZS1zdGF0dXMnKTtcblxuJCh3aW5kb3cpLm9uKCdvZmZsaW5lJywgKCkgPT4ge1xuICAgIG9mZmxpbmVFbGVtZW50LnNsaWRlRG93bigpO1xufSk7XG5cbiQod2luZG93KS5vbignb25saW5lJywgKCkgPT4ge1xuICAgIG9mZmxpbmVFbGVtZW50LnNsaWRlVXAoKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgaWYgKCFpc09ubGluZSkge1xuICAgICAgICBvZmZsaW5lRWxlbWVudC5zbGlkZURvd24oKTtcbiAgICB9XG59KTtcblxuLy8gYXNzdW1lIG9ubGluZSBpZiBjYW4ndCBjaGVja1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIGdsb2JhbC5uYXZpZ2F0b3Iub25MaW5lICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbC5uYXZpZ2F0b3Iub25MaW5lIDogdHJ1ZTtcbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSBHcmF2QWRtaW47IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB0b2FzdHIgZnJvbSAnLi90b2FzdHInO1xuaW1wb3J0IGlzT25saW5lIGZyb20gJy4vb2ZmbGluZSc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICdncmF2LWNvbmZpZyc7XG5pbXBvcnQgdHJpbSBmcm9tICdtb3V0L3N0cmluZy90cmltJztcblxubGV0IFVOTE9BRElORyA9IGZhbHNlO1xubGV0IGVycm9yID0gZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCB8fCByZXNwb25zZSB8fCAnJyk7XG4gICAgZXJyb3IucmVzcG9uc2UgPSByZXNwb25zZTtcblxuICAgIHJldHVybiBlcnJvcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0YXR1cyhyZXNwb25zZSkge1xuICAgIHJldHVybiByZXNwb25zZTtcblxuICAgIC8qIFdob29wcyBjYW4gaGFuZGxlIEpTT04gcmVzcG9uc2VzIHNvIHdlIGRvbid0IG5lZWQgdGhpcyBmb3Igbm93LlxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICovXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUpTT04ocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLnRoZW4oKHRleHQpID0+IHtcbiAgICAgICAgbGV0IHBhcnNlZCA9IHRleHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gdGV4dDtcblxuICAgICAgICAgICAgbGV0IHRoZV9lcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgdGhlX2Vycm9yLnN0YWNrID0gdHJpbShjb250ZW50LmlubmVyVGV4dCk7XG5cbiAgICAgICAgICAgIHRocm93IHRoZV9lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyRmVlZGJhY2socmVzcG9uc2UpIHtcbiAgICBpZiAoVU5MT0FESU5HKSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICBsZXQgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzIHx8IChyZXNwb25zZS5lcnJvciA/ICdlcnJvcicgOiAnJyk7XG4gICAgbGV0IG1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlIHx8IChyZXNwb25zZS5lcnJvciA/IHJlc3BvbnNlLmVycm9yLm1lc3NhZ2UgOiBudWxsKTtcbiAgICBsZXQgc2V0dGluZ3MgPSByZXNwb25zZS50b2FzdHIgfHwgbnVsbDtcbiAgICBsZXQgYmFja3VwO1xuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSAndW5hdXRoZW50aWNhdGVkJzpcbiAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBjb25maWcuYmFzZV91cmxfcmVsYXRpdmU7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcignTG9nZ2VkIG91dCcpO1xuICAgICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdVbmF1dGhvcml6ZWQuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3IuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgICAgIHN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICcnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQUpBWCByZXNwb25zZS4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGJhY2t1cCA9IE9iamVjdC5hc3NpZ24oe30sIHRvYXN0ci5vcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LmtleXMoc2V0dGluZ3MpLmZvckVhY2goKGtleSkgPT4geyB0b2FzdHIub3B0aW9uc1trZXldID0gc2V0dGluZ3Nba2V5XTsgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1lc3NhZ2UgJiYgKGlzT25saW5lIHx8ICghaXNPbmxpbmUgJiYgc3RhdHVzICE9PSAnZXJyb3InKSkpIHtcbiAgICAgICAgdG9hc3RyW3N0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJ10obWVzc2FnZSk7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIHRvYXN0ci5vcHRpb25zID0gYmFja3VwO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZXJGZWVkYmFja0Vycm9yKGVycm9yKSB7XG4gICAgaWYgKFVOTE9BRElORykgeyByZXR1cm4gdHJ1ZTsgfVxuICAgIGxldCBzdGFjayA9IGVycm9yLnN0YWNrID8gYDxwcmU+PGNvZGU+JHtlcnJvci5zdGFja308L2NvZGU+PC9wcmU+YCA6ICcnO1xuICAgIHRvYXN0ci5lcnJvcihgRmV0Y2ggRmFpbGVkOiA8YnIgLz4gJHtlcnJvci5tZXNzYWdlfSAke3N0YWNrfWApO1xuICAgIGNvbnNvbGUuZXJyb3IoYCR7ZXJyb3IubWVzc2FnZX0gYXQgJHtlcnJvci5zdGFja31gKTtcbn1cblxuJChnbG9iYWwpLm9uKCdiZWZvcmV1bmxvYWQuX2FqYXgnLCAoKSA9PiB7XG4gICAgVU5MT0FESU5HID0gdHJ1ZTtcbn0pO1xuIiwiaW1wb3J0IHsgcGFyc2VTdGF0dXMsIHBhcnNlSlNPTiwgdXNlckZlZWRiYWNrLCB1c2VyRmVlZGJhY2tFcnJvciB9IGZyb20gJy4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnZ3Jhdi1jb25maWcnO1xuXG5sZXQgcmF3O1xubGV0IHJlcXVlc3QgPSBmdW5jdGlvbih1cmwsIG9wdGlvbnMgPSB7fSwgY2FsbGJhY2sgPSAoKSA9PiB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1ldGhvZCAmJiBvcHRpb25zLm1ldGhvZCA9PT0gJ3Bvc3QnKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAgICAgb3B0aW9ucy5ib2R5ID0gT2JqZWN0LmFzc2lnbih7ICdhZG1pbi1ub25jZSc6IGNvbmZpZy5hZG1pbl9ub25jZSB9LCBvcHRpb25zLmJvZHkgfHwge30pO1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zLmJvZHkpLm1hcCgoa2V5KSA9PiBkYXRhLmFwcGVuZChrZXksIG9wdGlvbnMuYm9keVtrZXldKSk7XG4gICAgICAgIG9wdGlvbnMuYm9keSA9IGRhdGE7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9XG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZmV0Y2godXJsLCBvcHRpb25zKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHJhdyA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihwYXJzZVN0YXR1cylcbiAgICAgICAgLnRoZW4ocGFyc2VKU09OKVxuICAgICAgICAudGhlbih1c2VyRmVlZGJhY2spXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gY2FsbGJhY2socmVzcG9uc2UsIHJhdykpXG4gICAgICAgIC5jYXRjaCh1c2VyRmVlZGJhY2tFcnJvcik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZXF1ZXN0O1xuIiwiaW1wb3J0IFNldHRpbmdzIGZyb20gJ2dpdC1zeW5jJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ2FkbWluL3V0aWxzL3JlcXVlc3QnO1xuaW1wb3J0IHRvYXN0ciBmcm9tICdhZG1pbi91dGlscy90b2FzdHInO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnZ3Jhdi1jb25maWcnO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAnd2hhdHdnLWZldGNoJztcblxuY29uc3QgR0lUX1JFR0VYID0gLyg/OmdpdHxzc2h8aHR0cHM/fGdpdEBbLVxcdy5dKyk6KFxcL1xcLyk/KC4qPykoXFwuZ2l0KShcXC8/fFxcI1stXFxkXFx3Ll9dKz8pJC87XG5jb25zdCBXSVpBUkQgPSAkKCdbZGF0YS1yZW1vZGFsLWlkPVwid2l6YXJkXCJdJyk7XG5jb25zdCBSRVNFVF9MT0NBTCA9ICQoJ1tkYXRhLXJlbW9kYWwtaWQ9XCJyZXNldC1sb2NhbFwiXScpO1xuY29uc3QgU0VSVklDRVMgPSB7ICdnaXRodWInOiAnZ2l0aHViLmNvbScsICdiaXRidWNrZXQnOiAnYml0YnVja2V0Lm9yZycsICdnaXRsYWInOiAnZ2l0bGFiLmNvbScsICdhbGxvdGhlcnMnOiAnYWxsb3RoZXJzLnJlcG8nIH07XG5jb25zdCBCUkFOQ0hFUyA9IHsgJ2dpdGh1Yic6ICdtYWluJywgJ2JpdGJ1Y2tldCc6ICdtYXN0ZXInLCAnZ2l0bGFiJzogJ21hc3RlcicsICdhbGxvdGhlcnMnOiAnbWFzdGVyJyB9O1xuY29uc3QgVEVNUExBVEVTID0ge1xuICAgIFJFUE9fVVJMOiAnaHR0cHM6Ly97cGxhY2Vob2xkZXJ9L2dldGdyYXYvZ3Jhdi5naXQnXG59O1xuXG5jb25zdCBvcGVuV2l6YXJkID0gKCkgPT4ge1xuICAgIGNvbnN0IG1vZGFsID0gV0laQVJELnJlbW9kYWwoeyBjbG9zZU9uQ29uZmlybTogZmFsc2UgfSk7XG4gICAgY29uc3QgcHJldmlvdXMgPSBXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJwcmV2aW91c1wiXScpO1xuICAgIGNvbnN0IG5leHQgPSBXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJuZXh0XCJdJyk7XG4gICAgY29uc3Qgc2F2ZSA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInNhdmVcIl0nKTtcblxuICAgIFNURVAgPSAwO1xuXG4gICAgV0laQVJELmZpbmQoYGZvcm0gPiBbY2xhc3NePXN0ZXAtXTpub3QoLnN0ZXAtJHtTVEVQfSkgPiAucGFuZWxgKS5oaWRlKCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgIFdJWkFSRC5maW5kKGBmb3JtID4gW2NsYXNzPVwic3RlcC0ke1NURVB9XCJdID4gLnBhbmVsYCkuc2hvdygpO1xuXG4gICAgbmV4dC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgcHJldmlvdXMuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgIHNhdmUuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuXG4gICAgY29uc3Qgd2ViaG9vayA9ICQoJ1tuYW1lPVwiZGF0YVt3ZWJob29rXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IHdlYmhvb2tfc2VjcmV0ID0gJCgnW25hbWU9XCJkYXRhW3dlYmhvb2tfc2VjcmV0XVwiXScpLnZhbCgpO1xuICAgICQoJ1tuYW1lPVwiZ2l0c3luY1tyZXBvc2l0b3J5XVwiXScpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICQoJ1tuYW1lPVwiZ2l0c3luY1t3ZWJob29rXVwiXScpLnZhbCh3ZWJob29rKTtcbiAgICAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va19zZWNyZXRdXCJdJykudmFsKHdlYmhvb2tfc2VjcmV0KTtcbiAgICAkKCcuZ2l0c3luYy13ZWJob29rJykudGV4dCh3ZWJob29rKTtcblxuICAgIG1vZGFsLm9wZW4oKTtcbn07XG5cbmNvbnN0IGRpc2FibGVCdXR0b24gPSAobmV4dCkgPT4ge1xuICAgIG5leHRcbiAgICAgICAgLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJylcbiAgICAgICAgLmFkZENsYXNzKCdoaW50LS10b3AnKTtcbn07XG5cbmNvbnN0IGVuYWJsZUJ1dHRvbiA9IChuZXh0KSA9PiB7XG4gICAgbmV4dFxuICAgICAgICAuYXR0cignZGlzYWJsZWQnLCBudWxsKVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2hpbnQtLXRvcCcpO1xufTtcblxubGV0IFNURVAgPSAwO1xubGV0IFNURVBTID0gMDtcbmxldCBTRVJWSUNFID0gbnVsbDtcblxuJChkb2N1bWVudCkub24oJ2Nsb3NlZCcsIFdJWkFSRCwgZnVuY3Rpb24oZSkge1xuICAgIFNURVAgPSAwO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1naXRzeW5jLXVzZXJhY3Rpb25dJywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnW2RhdGEtZ2l0c3luYy11c2VyYWN0aW9uXScpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhcmdldC5kYXRhKCdnaXRzeW5jVXNlcmFjdGlvbicpO1xuICAgIGNvbnN0IFVSSSA9IGAke2NvbmZpZy5jdXJyZW50X3VybH0uanNvbmA7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICBjYXNlICd3aXphcmQnOlxuICAgICAgICAgICAgb3BlbldpemFyZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N5bmMnOlxuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVVUkkgPSB0YXJnZXQuZGF0YSgnZ2l0c3luYy11cmknKTtcbiAgICAgICAgICAgIHRhcmdldC5maW5kKCdpJykucmVtb3ZlQ2xhc3MoJ2ZhLWNsb3VkIGZhLWdpdCcpLmFkZENsYXNzKCdmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluJyk7XG5cbiAgICAgICAgICAgIHJlcXVlc3QocmVsYXRpdmVVUkkgfHwgVVJJLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgICAgICAgICAgYm9keTogeyB0YXNrOiAnc3luY2hyb25pemUnIH1cbiAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuZmluZCgnaScpLnJlbW92ZUNsYXNzKCdmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluJykuYWRkQ2xhc3MocmVsYXRpdmVVUkkgPyAnZmEtZ2l0JyA6ICdmYS1jbG91ZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAgICAgICAgY29uc3QgbW9kYWwgPSBSRVNFVF9MT0NBTC5yZW1vZGFsKHsgY2xvc2VPbkNvbmZpcm06IGZhbHNlIH0pO1xuICAgICAgICAgICAgbW9kYWwub3BlbigpO1xuXG4gICAgICAgICAgICBpZiAoIVJFU0VUX0xPQ0FMLmRhdGEoJ19yZXNldF9ldmVudF9zZXRfJykpIHtcbiAgICAgICAgICAgICAgICBSRVNFVF9MT0NBTC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInJlc2V0LWxvY2FsXCJdJykub25lKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgUkVTRVRfTE9DQUwuZGF0YSgnX3Jlc2V0X2V2ZW50X3NldF8nLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZpbmQoJ2knKS5yZW1vdmVDbGFzcygnZmEtaGlzdG9yeScpLmFkZENsYXNzKCdmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QoVVJJLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHsgdGFzazogJ3Jlc2V0bG9jYWwnIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgUkVTRVRfTE9DQUwuZGF0YSgnX3Jlc2V0X2V2ZW50X3NldF8nLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZmluZCgnaScpLnJlbW92ZUNsYXNzKCdmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluJykuYWRkQ2xhc3MoJ2ZhLWhpc3RvcnknKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59KTtcblxuJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWdpdHN5bmMtYWN0aW9uXScsIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnW2RhdGEtZ2l0c3luYy1hY3Rpb25dJyk7XG4gICAgY29uc3QgcHJldmlvdXMgPSBXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJwcmV2aW91c1wiXScpO1xuICAgIGNvbnN0IG5leHQgPSBXSVpBUkQuZmluZCgnW2RhdGEtZ2l0c3luYy1hY3Rpb249XCJuZXh0XCJdJyk7XG4gICAgY29uc3Qgc2F2ZSA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cInNhdmVcIl0nKTtcbiAgICBjb25zdCBhY3Rpb24gPSB0YXJnZXQuZGF0YSgnZ2l0c3luY0FjdGlvbicpO1xuICAgIGNvbnN0IHVzZXIgPSAkKCdbbmFtZT1cImdpdHN5bmNbcmVwb191c2VyXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IG5vVXNlciA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tub191c2VyXVwiXScpLmlzKCc6Y2hlY2tlZCcpO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9fcGFzc3dvcmRdXCJdJykudmFsKCk7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tyZXBvX3VybF1cIl0nKS52YWwoKTtcbiAgICBjb25zdCBicmFuY2ggPSAkKCdbbmFtZT1cImdpdHN5bmNbYnJhbmNoXVwiXScpLnZhbCgpO1xuICAgIGNvbnN0IHdlYmhvb2sgPSAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va11cIl0nKS52YWwoKTtcbiAgICBjb25zdCB3ZWJob29rX2VuYWJsZWQgPSAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va19lbmFibGVkXVwiXScpLmlzKCc6Y2hlY2tlZCcpO1xuICAgIGNvbnN0IHdlYmhvb2tfc2VjcmV0ID0gJCgnW25hbWU9XCJnaXRzeW5jW3dlYmhvb2tfc2VjcmV0XVwiXScpLnZhbCgpO1xuXG4gICAgaWYgKHRhcmdldC5hdHRyKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZXJyb3IgPSBbXTtcblxuICAgIGlmICghdXNlciAmJiAhbm9Vc2VyKSB7XG4gICAgICAgIGVycm9yLnB1c2goJ1VzZXJuYW1lIGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuICAgIC8qXG4gICAgaWYgKCFwYXNzd29yZCkge1xuICAgICAgICBlcnJvci5wdXNoKCdQYXNzd29yZCBpcyBtaXNzaW5nLicpO1xuICAgIH1cbiAgICAqL1xuICAgIGlmICghcmVwb3NpdG9yeSkge1xuICAgICAgICBlcnJvci5wdXNoKCdSZXBvc2l0b3J5IGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuXG4gICAgaWYgKFsnc2F2ZScsICd0ZXN0J10uaW5jbHVkZXMoYWN0aW9uKSkge1xuICAgICAgICB0YXJnZXQuZmluZCgnLmZhJykucmVtb3ZlQ2xhc3MoYWN0aW9uID09PSAndGVzdCcgPyAnZmEtcGx1ZycgOiAnZmEtY2hlY2snKS5hZGRDbGFzcygnZmEtc3BpbiBmYS1jaXJjbGUtby1ub3RjaCcpO1xuXG4gICAgICAgIGlmIChlcnJvci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvYXN0ci5lcnJvcihlcnJvci5qb2luKCc8YnIgLz4nKSk7XG4gICAgICAgICAgICB0YXJnZXQuZmluZCgnLmZhJykucmVtb3ZlQ2xhc3MoJ2ZhLXNwaW4gZmEtY2lyY2xlLW8tbm90Y2gnKS5hZGRDbGFzcyhhY3Rpb24gPT09ICd0ZXN0JyA/ICdmYS1wbHVnJyA6ICdmYS1jaGVjaycpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAnc2F2ZScpIHtcbiAgICAgICAgY29uc3QgZm9sZGVycyA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tmb2xkZXJzXVwiXTpjaGVja2VkJykubWFwKChpLCBpdGVtKSA9PiBpdGVtLnZhbHVlKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW3JlcG9zaXRvcnldXCJdJykudmFsKHJlcG9zaXRvcnkpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbbm9fdXNlcl1cIl0nKS52YWwobm9Vc2VyID8gJzEnIDogJzAnKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW3VzZXJdXCJdJykudmFsKHVzZXIpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbcGFzc3dvcmRdXCJdJykudmFsKHBhc3N3b3JkKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW2JyYW5jaF1cIl0nKS52YWwoYnJhbmNoKTtcbiAgICAgICAgJCgnW25hbWU9XCJkYXRhW3JlbW90ZV1bYnJhbmNoXVwiXScpLnZhbChicmFuY2gpO1xuICAgICAgICAkKCdbbmFtZT1cImRhdGFbd2ViaG9va11cIl0nKS52YWwod2ViaG9vayk7XG4gICAgICAgICQoYFtuYW1lPVwiZGF0YVt3ZWJob29rX2VuYWJsZWRdXCJdW3ZhbHVlPVwiJHt3ZWJob29rX2VuYWJsZWQgPyAxIDogMH1cIl1gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICQoJ1tuYW1lPVwiZGF0YVt3ZWJob29rX3NlY3JldF1cIl0nKS52YWwod2ViaG9va19zZWNyZXQpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFGb2xkZXJzID0gJCgnW25hbWU9XCJkYXRhW2ZvbGRlcnNdW11cIl0nKTtcbiAgICAgICAgaWYgKGRhdGFGb2xkZXJzICYmIGRhdGFGb2xkZXJzWzBdICYmIGRhdGFGb2xkZXJzWzBdLnNlbGVjdGl6ZSkge1xuICAgICAgICAgICAgZGF0YUZvbGRlcnNbMF0uc2VsZWN0aXplLnNldFZhbHVlKGZvbGRlcnMudG9BcnJheSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQoJ1tuYW1lPVwidGFza1wiXVt2YWx1ZT1cInNhdmVcIl0nKS50cmlnZ2VyKCdjbGljaycpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAndGVzdCcpIHtcbiAgICAgICAgY29uc3QgVVJJID0gYCR7Y29uZmlnLmN1cnJlbnRfdXJsfS5qc29uYDtcbiAgICAgICAgY29uc3QgdGVzdCA9IGdsb2JhbC5idG9hKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXI6IG5vVXNlciA/ICcnIDogdXNlcixcbiAgICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgICAgcmVwb3NpdG9yeSxcbiAgICAgICAgICAgIGJyYW5jaFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgcmVxdWVzdChVUkksIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgYm9keTogeyB0ZXN0LCB0YXNrOiAndGVzdENvbm5lY3Rpb24nIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGFyZ2V0LmZpbmQoJy5mYScpLnJlbW92ZUNsYXNzKCdmYS1zcGluIGZhLWNpcmNsZS1vLW5vdGNoJykuYWRkQ2xhc3MoJ2ZhLXBsdWcnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFdJWkFSRC5maW5kKGAuc3RlcC0ke1NURVB9ID4gLnBhbmVsYCkuc2xpZGVVcCgpO1xuICAgIFNURVAgKz0gYWN0aW9uID09PSAnbmV4dCcgPyArMSA6IC0xO1xuICAgIFdJWkFSRC5maW5kKGAuc3RlcC0ke1NURVB9ID4gLnBhbmVsYCkuc2xpZGVEb3duKCk7XG5cbiAgICBzYXZlLmFkZENsYXNzKCdoaWRkZW4nKTtcblxuICAgIGlmIChhY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICBwcmV2aW91cy5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgfVxuXG4gICAgaWYgKFNURVAgPD0gMCkge1xuICAgICAgICBwcmV2aW91cy5hZGRDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIGVuYWJsZUJ1dHRvbihuZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoU1RFUCA+IDApIHtcbiAgICAgICAgbmV4dC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgfVxuXG4gICAgaWYgKFNURVAgPT09IDEpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZXBvID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9zaXRvcnldXCJdOmNoZWNrZWQnKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJlcG8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBkaXNhYmxlQnV0dG9uKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5hYmxlQnV0dG9uKG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFNURVAgPT09IDIpIHtcbiAgICAgICAgY29uc3QgcmVwb1VSTCA9ICQoJ1tuYW1lPVwiZ2l0c3luY1tyZXBvX3VybF1cIl0nKS52YWwoKTtcbiAgICAgICAgaWYgKCFyZXBvVVJMLmxlbmd0aCB8fCAhYnJhbmNoKSB7XG4gICAgICAgICAgICBkaXNhYmxlQnV0dG9uKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5hYmxlQnV0dG9uKG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFNURVAgPT09IFNURVBTKSB7XG4gICAgICAgIG5leHQuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICBwcmV2aW91cy5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIHNhdmUucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5vbignaW5wdXQnLCAnW25hbWU9XCJnaXRzeW5jW25vX3VzZXJdXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB1c2VyID0gJCgnW25hbWU9XCJnaXRzeW5jW3JlcG9fdXNlcl1cIl0nKTtcbiAgICBpZiAodGFyZ2V0LmlzKCc6Y2hlY2tlZCcpKSB7XG4gICAgICAgIHVzZXJcbiAgICAgICAgICAgIC52YWwoJycpXG4gICAgICAgICAgICAucHJvcCgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKVxuICAgICAgICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgJzx1c2VybmFtZSBub3QgcmVxdWlyZWQ+Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdXNlclxuICAgICAgICAgICAgLnByb3AoJ2Rpc2FibGVkJywgbnVsbClcbiAgICAgICAgICAgIC5hdHRyKCdwbGFjZWhvbGRlcicsICdVc2VybmFtZSwgbm90IGVtYWlsJyk7XG4gICAgfVxufSk7XG4kKGRvY3VtZW50KS5vbignY2hhbmdlJywgJ1tuYW1lPVwiZ2l0c3luY1tyZXBvc2l0b3J5XVwiXScsICgpID0+IHtcbiAgICBlbmFibGVCdXR0b24oV0laQVJELmZpbmQoJ1tkYXRhLWdpdHN5bmMtYWN0aW9uPVwibmV4dFwiXScpKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbignaW5wdXQnLCAnW25hbWU9XCJnaXRzeW5jW3JlcG9fdXJsXVwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsKCk7XG4gICAgY29uc3QgaXNHaXRVUkwgPSBHSVRfUkVHRVgudGVzdCh2YWx1ZSk7XG4gICAgY29uc3QgbmV4dCA9IFdJWkFSRC5maW5kKCdbZGF0YS1naXRzeW5jLWFjdGlvbj1cIm5leHRcIl0nKTtcblxuICAgIHRhcmdldC5yZW1vdmVDbGFzcygnaW52YWxpZCcpO1xuXG4gICAgaWYgKCFpc0dpdFVSTCkge1xuICAgICAgICB0YXJnZXQuYWRkQ2xhc3MoJ2ludmFsaWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNHaXRVUkwgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGVuYWJsZUJ1dHRvbihuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkaXNhYmxlQnV0dG9uKG5leHQpO1xuICAgIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5vbigna2V5dXAnLCAnW2RhdGEtZ2l0c3luYy11cmliYXNlXSBbbmFtZT1cImdpdHN5bmNbd2ViaG9va11cIl0nLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LnZhbCgpO1xuICAgICQoJy5naXRzeW5jLXdlYmhvb2snKS50ZXh0KHZhbHVlKTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbigna2V5dXAnLCAnW2RhdGEtZ2l0c3luYy11cmliYXNlXSBbbmFtZT1cImdpdHN5bmNbd2ViaG9va19zZWNyZXRdXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgJCgnW2RhdGEtZ2l0c3luYy11cmliYXNlXSBbbmFtZT1cImdpdHN5bmNbd2ViaG9va19lbmFibGVkXVwiXScpLnRyaWdnZXIoJ2NoYW5nZScpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW2RhdGEtZ2l0c3luYy11cmliYXNlXSBbbmFtZT1cImdpdHN5bmNbd2ViaG9va19lbmFibGVkXVwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgY2hlY2tlZCA9IHRhcmdldC5pcygnOmNoZWNrZWQnKTtcbiAgICBjb25zdCBzZWNyZXQgPSAkKCdbbmFtZT1cImdpdHN5bmNbd2ViaG9va19zZWNyZXRdXCJdJykudmFsKCk7XG4gICAgdGFyZ2V0LmNsb3Nlc3QoJy53ZWJob29rLXNlY3JldC13cmFwcGVyJykuZmluZCgnbGFiZWw6bGFzdC1jaGlsZCcpW2NoZWNrZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2hpZGRlbicpO1xuICAgICQoJy5naXRzeW5jLXdlYmhvb2stc2VjcmV0JykuaHRtbCghY2hlY2tlZCB8fCAhc2VjcmV0Lmxlbmd0aCA/ICc8ZW0+bGVhdmUgZW1wdHk8L2VtPicgOiBgPGNvZGU+JHtzZWNyZXR9PC9jb2RlPmApO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW25hbWU9XCJnaXRzeW5jW3JlcG9zaXRvcnldXCJdJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpO1xuICAgIGlmICghdGFyZ2V0LmlzKCc6Y2hlY2tlZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBTRVJWSUNFID0gdGFyZ2V0LnZhbCgpO1xuXG4gICAgT2JqZWN0LmtleXMoU0VSVklDRVMpLmZvckVhY2goKHNlcnZpY2UpID0+IHtcbiAgICAgICAgV0laQVJELmZpbmQoYC5oaWRkZW4tc3RlcC0ke3NlcnZpY2V9YClbc2VydmljZSA9PT0gU0VSVklDRSA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXSgnaGlkZGVuJyk7XG4gICAgICAgIGlmIChzZXJ2aWNlID09PSBTRVJWSUNFKSB7XG4gICAgICAgICAgICBXSVpBUkQuZmluZCgnLndlYmhvb2stc2VjcmV0LXdyYXBwZXInKVtzZXJ2aWNlID09PSAnYml0YnVja2V0JyA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSgnaGlkZGVuJyk7XG4gICAgICAgICAgICBXSVpBUkRcbiAgICAgICAgICAgICAgICAuZmluZCgnaW5wdXRbbmFtZT1cImdpdHN5bmNbcmVwb191cmxdXCJdW3BsYWNlaG9sZGVyXScpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3BsYWNlaG9sZGVyJywgVEVNUExBVEVTLlJFUE9fVVJMLnJlcGxhY2UoL1xce3BsYWNlaG9sZGVyXFx9LywgU0VSVklDRVNbc2VydmljZV0pKVxuICAgICAgICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgICAgICAgIC5maW5kKCdpbnB1dFtuYW1lPVwiZ2l0c3luY1ticmFuY2hdXCJdJylcbiAgICAgICAgICAgICAgICAuYXR0cigncGxhY2Vob2xkZXInLCBCUkFOQ0hFU1tzZXJ2aWNlXSlcbiAgICAgICAgICAgICAgICAudmFsKEJSQU5DSEVTW3NlcnZpY2VdKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59KTtcblxuJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWFjY2Vzcy10b2tlbnMtZGV0YWlsc10nLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgYnV0dG9uID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCBwYW5lbCA9IGJ1dHRvbi5jbG9zZXN0KCcuYWNjZXNzLXRva2VucycpLmZpbmQoJy5hY2Nlc3MtdG9rZW5zLWRldGFpbHMnKTtcblxuICAgIHBhbmVsLnNsaWRlVG9nZ2xlKDI1MCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBwYW5lbC5pcygnOnZpc2libGUnKTtcbiAgICAgICAgY29uc3QgaWNvbiA9IGJ1dHRvbi5maW5kKCcuZmEnKTtcblxuICAgICAgICBpY29uLnJlbW92ZUNsYXNzKCdmYS1jaGV2cm9uLWRvd24gZmEtY2hldnJvbi11cCcpLmFkZENsYXNzKGBmYS1jaGV2cm9uLSR7aXNWaXNpYmxlID8gJ3VwJyA6ICdkb3duJ31gKTtcbiAgICB9KTtcbn0pO1xuXG5jb25zdCBzaG93Tm90aWNlcyA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChlbGVtZW50KTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRhcmdldC52YWwoKS5yZXBsYWNlKC9cXC8vZywgJy0nKTtcbiAgICBjb25zdCBjb2x1bW4gPSB0YXJnZXQuY2xvc2VzdCgnLmNvbHVtbnMnKS5maW5kKCcuY29sdW1uOmxhc3QnKTtcblxuICAgIGNvbHVtbi5maW5kKCdbY2xhc3MqPVwiZGVzY3JpcHRpb24tXCJdJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgIGNvbHVtbi5maW5kKGAuZGVzY3JpcHRpb24tJHtzZWxlY3Rpb259YCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpLmhpZGUoKS5mYWRlSW4oe1xuICAgICAgICBkdXJhdGlvbjogMjUwXG4gICAgfSk7XG59O1xuXG4kKGRvY3VtZW50KS5vbignaW5wdXQnLCAnW2RhdGEtcmVtb2RhbC1pZD1cIndpemFyZFwiXSAuc3RlcC00IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgaWYgKCF0YXJnZXQuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNob3dOb3RpY2VzKHRhcmdldCk7XG59KTtcblxuJChkb2N1bWVudCkub24oJ21vdXNlZW50ZXInLCAnW2RhdGEtcmVtb2RhbC1pZD1cIndpemFyZFwiXSAuc3RlcC00IC5pbmZvLWRlc2MnLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLnNpYmxpbmdzKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICBzaG93Tm90aWNlcyh0YXJnZXQpO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdtb3VzZWxlYXZlJywgJ1tkYXRhLXJlbW9kYWwtaWQ9XCJ3aXphcmRcIl0gLnN0ZXAtNCBsYWJlbCcsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGFyZ2V0LmNsb3Nlc3QoJy5jb2x1bW5zJyk7XG4gICAgY29uc3QgY29sdW1uID0gY29udGFpbmVyLmZpbmQoJy5jb2x1bW46bGFzdC1jaGlsZCcpO1xuXG4gICAgY29sdW1uLmZpbmQoJ1tjbGFzcyo9XCJkZXNjcmlwdGlvbi1cIl0nKS5hZGRDbGFzcygnaGlkZGVuJyk7XG59KTtcblxuJChkb2N1bWVudCkub24oJ21vdXNlbGVhdmUnLCAnW2RhdGEtcmVtb2RhbC1pZD1cIndpemFyZFwiXSAuY29sdW1ucyAuY29sdW1uOmZpcnN0LWNoaWxkJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCBjb2x1bW4gPSB0YXJnZXQuc2libGluZ3MoJy5jb2x1bW4nKTtcblxuICAgIGNvbHVtbi5maW5kKCdbY2xhc3MqPVwiZGVzY3JpcHRpb24tXCJdJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xufSk7XG5cbiQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICBTVEVQUyA9IFdJWkFSRC5maW5kKCdbY2xhc3NePVwic3RlcC1cIl0nKS5sZW5ndGggLSAxO1xuICAgIFdJWkFSRC53cmFwSW5uZXIoJzxmb3JtPjwvZm9ybT4nKTtcbiAgICBSRVNFVF9MT0NBTC53cmFwSW5uZXIoJzxmb3JtPjwvZm9ybT4nKTtcblxuICAgIGlmIChXSVpBUkQubGVuZ3RoICYmIChTZXR0aW5ncy5maXJzdF90aW1lIHx8ICFTZXR0aW5ncy5naXRfaW5zdGFsbGVkKSkge1xuICAgICAgICBvcGVuV2l6YXJkKCk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///849\n");
/***/ }),
@@ -167,7 +167,7 @@ module.exports = jQuery;
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
-/******/ if(runtime) runtime(__webpack_require__);
+/******/ if(runtime) var result = runtime(__webpack_require__);
/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
@@ -176,7 +176,7 @@ module.exports = jQuery;
/******/ }
/******/ installedChunks[chunkIds[i]] = 0;
/******/ }
-/******/ __webpack_require__.O();
+/******/ return __webpack_require__.O(result);
/******/ }
/******/
/******/ var chunkLoadingGlobal = self["webpackChunktrilby_grav_plugin_gitsync"] = self["webpackChunktrilby_grav_plugin_gitsync"] || [];
diff --git a/package.json b/package.json
index 704c50b..3834211 100644
--- a/package.json
+++ b/package.json
@@ -19,26 +19,26 @@
},
"homepage": "https://github.com/trilbymedia/grav-plugin-git-sync#readme",
"devDependencies": {
- "@babel/core": "^7.13.15",
+ "@babel/core": "^7.14.3",
"@babel/plugin-proposal-class-properties": "^7.13.0",
- "@babel/plugin-proposal-json-strings": "^7.13.8",
- "@babel/plugin-proposal-object-rest-spread": "^7.13.8",
+ "@babel/plugin-proposal-json-strings": "^7.14.2",
+ "@babel/plugin-proposal-object-rest-spread": "^7.14.4",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/polyfill": "^7.11.5",
- "@babel/preset-env": "^7.13.15",
+ "@babel/polyfill": "^7.12.1",
+ "@babel/preset-env": "^7.14.4",
"babel-eslint": "^10.1.0",
"babel-loader": "^8.2.2",
- "css-loader": "^5.2.2",
- "eslint": "^7.24.0",
+ "css-loader": "^5.2.6",
+ "eslint": "^7.27.0",
"eslint-loader": "^4.0.2",
- "exports-loader": "^2.0.0",
- "imports-loader": "^2.0.0",
+ "exports-loader": "^3.0.0",
+ "imports-loader": "^3.0.0",
"json-loader": "^0.5.7",
"style-loader": "^2.0.0",
"uglifyjs-webpack-plugin": "^2.2.0",
- "webpack": "^5.33.2",
- "webpack-cli": "^4.6.0",
+ "webpack": "^5.38.1",
+ "webpack-cli": "^4.7.0",
"whatwg-fetch": "^3.6.2"
}
}
diff --git a/scss/plugin/_wizard.scss b/scss/plugin/_wizard.scss
index fcdbe7a..3a6adef 100644
--- a/scss/plugin/_wizard.scss
+++ b/scss/plugin/_wizard.scss
@@ -66,6 +66,11 @@
border-color: #ddd;
}
+ input.invalid {
+ border-color: #f4516d;
+ color: #f4516d;
+ }
+
label {
&.disabled {
color: #ccc;
diff --git a/templates/partials/modal-wizard.html.twig b/templates/partials/modal-wizard.html.twig
index 38047d9..4974c4c 100644
--- a/templates/partials/modal-wizard.html.twig
+++ b/templates/partials/modal-wizard.html.twig
@@ -167,7 +167,7 @@
diff --git a/yarn.lock b/yarn.lock index a2fb9aa..a5166e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,25 +23,30 @@ dependencies: "@babel/highlight" "^7.12.13" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.12": version "7.13.15" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== -"@babel/core@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.15.tgz#a6d40917df027487b54312202a06812c4f7792d0" - integrity sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ== +"@babel/compat-data@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58" + integrity sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ== + +"@babel/core@^7.14.3": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38" + integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-compilation-targets" "^7.13.13" - "@babel/helper-module-transforms" "^7.13.14" - "@babel/helpers" "^7.13.10" - "@babel/parser" "^7.13.15" + "@babel/generator" "^7.14.3" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.14.2" + "@babel/helpers" "^7.14.0" + "@babel/parser" "^7.14.3" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.14" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -67,6 +72,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.14.2", "@babel/generator@^7.14.3": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" + integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== + dependencies: + "@babel/types" "^7.14.2" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -89,7 +103,7 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.8": +"@babel/helper-compilation-targets@^7.13.0": version "7.13.13" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== @@ -99,6 +113,16 @@ browserslist "^4.14.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516" + integrity sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA== + dependencies: + "@babel/compat-data" "^7.14.4" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.16.6" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.13.0": version "7.13.11" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" @@ -110,6 +134,18 @@ "@babel/helper-replace-supers" "^7.13.0" "@babel/helper-split-export-declaration" "^7.12.13" +"@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.3": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz#abf888d836a441abee783c75229279748705dc42" + integrity sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-replace-supers" "^7.14.4" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-create-regexp-features-plugin@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" @@ -166,6 +202,15 @@ "@babel/template" "^7.12.13" "@babel/types" "^7.12.13" +"@babel/helper-function-name@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" + integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.14.2" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -202,7 +247,7 @@ dependencies: "@babel/types" "^7.13.12" -"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": +"@babel/helper-module-transforms@^7.13.0": version "7.13.14" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== @@ -216,6 +261,20 @@ "@babel/traverse" "^7.13.13" "@babel/types" "^7.13.14" +"@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" + integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.14.0" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -259,7 +318,17 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.12" -"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": +"@babel/helper-replace-supers@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz#b2ab16875deecfff3ddfcd539bc315f72998d836" + integrity sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.4" + +"@babel/helper-simple-access@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== @@ -297,6 +366,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" @@ -312,14 +386,14 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" -"@babel/helpers@^7.13.10": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" - integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== +"@babel/helpers@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" + integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== dependencies: "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" "@babel/highlight@^7.10.4": version "7.10.4" @@ -349,6 +423,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.15.tgz#8e66775fb523599acb6a289e12929fa5ab0954d8" integrity sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ== +"@babel/parser@^7.14.2", "@babel/parser@^7.14.3": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18" + integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA== + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" @@ -358,10 +437,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-proposal-optional-chaining" "^7.13.12" -"@babel/plugin-proposal-async-generator-functions@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz#80e549df273a3b3050431b148c892491df1bcc5b" - integrity sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA== +"@babel/plugin-proposal-async-generator-functions@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" + integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-remap-async-to-generator" "^7.13.0" @@ -375,69 +454,78 @@ "@babel/helper-create-class-features-plugin" "^7.13.0" "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-proposal-dynamic-import@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== +"@babel/plugin-proposal-class-static-block@^7.14.3": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz#5a527e2cae4a4753119c3a3e7f64ecae8ccf1360" + integrity sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.3" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-class-static-block" "^7.12.13" + +"@babel/plugin-proposal-dynamic-import@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" + integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" - integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== +"@babel/plugin-proposal-export-namespace-from@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" + integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== +"@babel/plugin-proposal-json-strings@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" + integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" - integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== +"@babel/plugin-proposal-logical-assignment-operators@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" + integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" - integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" + integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" - integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== +"@babel/plugin-proposal-numeric-separator@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" + integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== +"@babel/plugin-proposal-object-rest-spread@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz#0e2b4de419915dc0b409378e829412e2031777c4" + integrity sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA== dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" + "@babel/compat-data" "^7.14.4" + "@babel/helper-compilation-targets" "^7.14.4" "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-parameters" "^7.14.2" -"@babel/plugin-proposal-optional-catch-binding@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== +"@babel/plugin-proposal-optional-catch-binding@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" + integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" @@ -451,6 +539,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" + integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-private-methods@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" @@ -459,6 +556,16 @@ "@babel/helper-create-class-features-plugin" "^7.13.0" "@babel/helper-plugin-utils" "^7.13.0" +"@babel/plugin-proposal-private-property-in-object@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" + integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.14.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.0" + "@babel/plugin-proposal-unicode-property-regex@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" @@ -489,6 +596,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-class-static-block@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" + integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -559,6 +673,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-private-property-in-object@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" + integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-top-level-await@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" @@ -589,23 +710,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-block-scoping@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== +"@babel/plugin-transform-block-scoping@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz#caf140b0b2e2462c509553d140e6d0abefb61ed8" + integrity sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-classes@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== +"@babel/plugin-transform-classes@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz#a83c15503fc71a0f99e876fdce7dadbc6575ec3a" + integrity sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" + "@babel/helper-function-name" "^7.14.2" "@babel/helper-optimise-call-expression" "^7.12.13" "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-replace-supers" "^7.14.4" "@babel/helper-split-export-declaration" "^7.12.13" globals "^11.1.0" @@ -616,10 +737,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-destructuring@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" - integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== +"@babel/plugin-transform-destructuring@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz#acbec502e9951f30f4441eaca1d2f29efade59ed" + integrity sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" @@ -683,23 +804,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-amd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" - integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== +"@babel/plugin-transform-modules-amd@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" + integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.2" "@babel/helper-plugin-utils" "^7.13.0" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" - integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== +"@babel/plugin-transform-modules-commonjs@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" + integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== dependencies: - "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.0" "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-simple-access" "^7.13.12" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.13.8": @@ -713,12 +834,12 @@ "@babel/helper-validator-identifier" "^7.12.11" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" - integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== +"@babel/plugin-transform-modules-umd@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" + integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.0" "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": @@ -743,10 +864,10 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/helper-replace-supers" "^7.12.13" -"@babel/plugin-transform-parameters@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" + integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== dependencies: "@babel/helper-plugin-utils" "^7.13.0" @@ -822,7 +943,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/polyfill@^7.11.5": +"@babel/polyfill@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g== @@ -830,31 +951,34 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.15.tgz#c8a6eb584f96ecba183d3d414a83553a599f478f" - integrity sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA== +"@babel/preset-env@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.4.tgz#73fc3228c59727e5e974319156f304f0d6685a2d" + integrity sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA== dependencies: - "@babel/compat-data" "^7.13.15" - "@babel/helper-compilation-targets" "^7.13.13" + "@babel/compat-data" "^7.14.4" + "@babel/helper-compilation-targets" "^7.14.4" "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.13.15" + "@babel/plugin-proposal-async-generator-functions" "^7.14.2" "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-dynamic-import" "^7.13.8" - "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.13.8" - "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.13.8" - "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-class-static-block" "^7.14.3" + "@babel/plugin-proposal-dynamic-import" "^7.14.2" + "@babel/plugin-proposal-export-namespace-from" "^7.14.2" + "@babel/plugin-proposal-json-strings" "^7.14.2" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" + "@babel/plugin-proposal-numeric-separator" "^7.14.2" + "@babel/plugin-proposal-object-rest-spread" "^7.14.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" + "@babel/plugin-proposal-optional-chaining" "^7.14.2" "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-proposal-private-property-in-object" "^7.14.0" "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.12.13" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -864,14 +988,15 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.0" "@babel/plugin-syntax-top-level-await" "^7.12.13" "@babel/plugin-transform-arrow-functions" "^7.13.0" "@babel/plugin-transform-async-to-generator" "^7.13.0" "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.12.13" - "@babel/plugin-transform-classes" "^7.13.0" + "@babel/plugin-transform-block-scoping" "^7.14.4" + "@babel/plugin-transform-classes" "^7.14.4" "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.14.4" "@babel/plugin-transform-dotall-regex" "^7.12.13" "@babel/plugin-transform-duplicate-keys" "^7.12.13" "@babel/plugin-transform-exponentiation-operator" "^7.12.13" @@ -879,14 +1004,14 @@ "@babel/plugin-transform-function-name" "^7.12.13" "@babel/plugin-transform-literals" "^7.12.13" "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.13.0" - "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/plugin-transform-modules-amd" "^7.14.2" + "@babel/plugin-transform-modules-commonjs" "^7.14.0" "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.13.0" + "@babel/plugin-transform-modules-umd" "^7.14.0" "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" "@babel/plugin-transform-new-target" "^7.12.13" "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-parameters" "^7.14.2" "@babel/plugin-transform-property-literals" "^7.12.13" "@babel/plugin-transform-regenerator" "^7.13.15" "@babel/plugin-transform-reserved-words" "^7.12.13" @@ -898,7 +1023,7 @@ "@babel/plugin-transform-unicode-escapes" "^7.12.13" "@babel/plugin-transform-unicode-regex" "^7.12.13" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.13.14" + "@babel/types" "^7.14.4" babel-plugin-polyfill-corejs2 "^0.2.0" babel-plugin-polyfill-corejs3 "^0.2.0" babel-plugin-polyfill-regenerator "^0.2.0" @@ -941,7 +1066,7 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13": version "7.13.15" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.15.tgz#c38bf7679334ddd4028e8e1f7b3aa5019f0dada7" integrity sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ== @@ -955,6 +1080,20 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" + integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.2" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.14.2" + "@babel/types" "^7.14.2" + debug "^4.1.0" + globals "^11.1.0" + "@babel/traverse@^7.7.0": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" @@ -988,15 +1127,23 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0" + integrity sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + to-fast-properties "^2.0.0" + "@discoveryjs/json-ext@^0.5.0": version "0.5.2" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== -"@eslint/eslintrc@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" - integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== +"@eslint/eslintrc@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" + integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -1029,16 +1176,11 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": +"@types/estree@*", "@types/estree@^0.0.47": version "0.0.47" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== -"@types/estree@^0.0.46": - version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" - integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== - "@types/json-schema@*", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" @@ -1175,22 +1317,22 @@ "@webassemblyjs/ast" "1.11.0" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.2.tgz#2a20812bfb3a2ebb0b27ee26a52eeb3e3f000836" - integrity sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA== +"@webpack-cli/configtest@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.3.tgz#204bcff87cda3ea4810881f7ea96e5f5321b87b9" + integrity sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw== -"@webpack-cli/info@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.3.tgz#ef819d10ace2976b6d134c7c823a3e79ee31a92c" - integrity sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q== +"@webpack-cli/info@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.4.tgz#7381fd41c9577b2d8f6c2594fad397ef49ad5573" + integrity sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.1.tgz#911d1b3ff4a843304b9c3bacf67bb34672418441" - integrity sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw== +"@webpack-cli/serve@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.4.0.tgz#f84fd07bcacefe56ce762925798871092f0f228e" + integrity sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1212,10 +1354,10 @@ acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4: - version "8.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.1.tgz#fb0026885b9ac9f48bac1e185e4af472971149ff" - integrity sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g== +acorn@^8.2.1: + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" + integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== ajv-errors@^1.0.0: version "1.0.1" @@ -1398,6 +1540,17 @@ browserslist@^4.14.5, browserslist@^4.16.3: escalade "^3.1.1" node-releases "^1.1.71" +browserslist@^4.16.6: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1424,29 +1577,21 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - caniuse-lite@^1.0.30001208: version "1.0.30001208" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz#a999014a35cebd4f98c405930a057a0d75352eb9" integrity sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA== +caniuse-lite@^1.0.30001219: + version "1.0.30001233" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001233.tgz#b7cb4a377a4b12ed240d2fa5c792951a06e5f2c4" + integrity sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg== + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1590,15 +1735,14 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-loader@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.2.tgz#65f2c1482255f15847ecad6cbc515cae8a5b234e" - integrity sha512-IS722y7Lh2Yq+acMR74tdf3faMOLRP2RfLwS0VzSS7T98IHtacMWJLku3A0OBTFHB07zAa4nWBhA8gfxwQVWGQ== +css-loader@^5.2.6: + version "5.2.6" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.6.tgz#c3c82ab77fea1f360e587d871a6811f4450cc8d1" + integrity sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w== dependencies: - camelcase "^6.2.0" icss-utils "^5.1.0" loader-utils "^2.0.0" - postcss "^8.2.10" + postcss "^8.2.15" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" @@ -1665,6 +1809,11 @@ electron-to-chromium@^1.3.712: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz#78d4c857070755fb58ab64bcc173db1d51cbc25f" integrity sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ== +electron-to-chromium@^1.3.723: + version "1.3.746" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.746.tgz#4ff1251986d751ba6e0acee516e04bc205511463" + integrity sha512-3ffyGODL38apwSsIgXaWnAKNXChsjXhAmBTjbqCbrv1fBbVltuNLWh0zdrQbwK/oxPQ/Gss/kYfFAPPGu9mszQ== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1682,15 +1831,15 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" - integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== +enhanced-resolve@^5.8.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" + integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5, enquirer@^2.3.6: +enquirer@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -1724,6 +1873,11 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + eslint-loader@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-4.0.2.tgz#386a1e21bcb613b3cf2d252a3b708023ccfb41ec" @@ -1735,7 +1889,7 @@ eslint-loader@^4.0.2: object-hash "^2.0.3" schema-utils "^2.6.5" -eslint-scope@^5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -1760,25 +1914,27 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.24.0: - version "7.24.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.24.0.tgz#2e44fa62d93892bfdb100521f17345ba54b8513a" - integrity sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ== +eslint@^7.27.0: + version "7.27.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7" + integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.0" + "@eslint/eslintrc" "^0.4.1" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" enquirer "^2.3.5" + escape-string-regexp "^4.0.0" eslint-scope "^5.1.1" eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" espree "^7.3.1" esquery "^1.4.0" esutils "^2.0.2" + fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" @@ -1790,7 +1946,7 @@ eslint@^7.24.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.21" + lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -1799,7 +1955,7 @@ eslint@^7.24.0: semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^6.0.4" + table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -1871,14 +2027,14 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exports-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-2.0.0.tgz#ca7861b86726997bb4e55001888d2af940935979" - integrity sha512-k/VFrVEUmotfkk8vZ+njG5NEXpr5Ee+BonV+AYINV2hNo3o+/UB8nEuCUQk2k6IyWIoobmXoTFO0igxrQcMV4Q== +exports-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-3.0.0.tgz#dcc4596a034b3fa002a53f77bc8f04c9667166c2" + integrity sha512-b23Yg5SKR63ZvikGrQgfGgwd40MDehaYb7vOXgD7C0fMV04wS8U1I4f7n1j1wEhtQNKUqgdFox/ol2rOruOpOA== dependencies: source-map "^0.6.1" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -2011,15 +2167,6 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -2093,11 +2240,6 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-symbols@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2149,12 +2291,11 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -imports-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-2.0.0.tgz#f2f5152c6d8798a286b28a44eeae62142b60aa2c" - integrity sha512-ZwEx0GfsJ1QckGqHSS1uu1sjpUgT3AYFOr3nT07dVnfeyc/bOICSw48067hr0u7DW8TZVzNVvdnvA62U9lG8nQ== +imports-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-3.0.0.tgz#069c314cb55a80e59ae72b5313273dafff8b3fc4" + integrity sha512-PhDB+rxpc95/1cM8ehxWAcuDIDi3eXhqHhax09iyUeAYBJ2bT6QbBp7aDj8IfU9Ns+2l1K226GhoWVAU823CTA== dependencies: - loader-utils "^2.0.0" source-map "^0.6.1" strip-comments "^2.0.1" @@ -2191,13 +2332,6 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== - dependencies: - call-bind "^1.0.0" - is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -2222,11 +2356,6 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2239,11 +2368,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -2403,10 +2527,10 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.truncate@^4.4.2: version "4.4.2" @@ -2418,11 +2542,6 @@ lodash@^4.17.19: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -2526,10 +2645,10 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nanoid@^3.1.22: - version "3.1.22" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" - integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== +nanoid@^3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== natural-compare@^1.4.0: version "1.4.0" @@ -2744,14 +2863,14 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.2.10: - version "8.2.10" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.10.tgz#ca7a042aa8aff494b334d0ff3e9e77079f6f702b" - integrity sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw== +postcss@^8.2.15: + version "8.3.0" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.0.tgz#b1a713f6172ca427e3f05ef1303de8b65683325f" + integrity sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ== dependencies: colorette "^1.2.2" - nanoid "^3.1.22" - source-map "^0.6.1" + nanoid "^3.1.23" + source-map-js "^0.6.2" prelude-ls@^1.2.1: version "1.2.1" @@ -3072,6 +3191,11 @@ source-list-map@^2.0.0, source-list-map@^2.0.1: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +source-map-js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" + integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== + source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -3187,20 +3311,17 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -table@^6.0.4: - version "6.1.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.1.0.tgz#676a0cfb206008b59e783fcd94ef8ba7d67d966c" - integrity sha512-T4G5KMmqIk6X87gLKWyU5exPpTjLjY5KyrFWaIjv3SvgaIUGXV7UEzGEnZJdTA38/yUS6f9PlKezQ0bYXG3iIQ== +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== dependencies: ajv "^8.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" lodash.clonedeep "^4.5.0" - lodash.flatten "^4.4.0" lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.0" + strip-ansi "^6.0.0" tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" @@ -3362,26 +3483,25 @@ v8-compile-cache@^2.2.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -watchpack@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" - integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== +watchpack@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" + integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-cli@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.6.0.tgz#27ae86bfaec0cf393fcfd58abdc5a229ad32fd16" - integrity sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA== +webpack-cli@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.0.tgz#3195a777f1f802ecda732f6c95d24c0004bc5a35" + integrity sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.2" - "@webpack-cli/info" "^1.2.3" - "@webpack-cli/serve" "^1.3.1" + "@webpack-cli/configtest" "^1.0.3" + "@webpack-cli/info" "^1.2.4" + "@webpack-cli/serve" "^1.4.0" colorette "^1.2.1" commander "^7.0.0" - enquirer "^2.3.6" execa "^5.0.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" @@ -3406,30 +3526,30 @@ webpack-sources@^1.4.0: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-sources@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" - integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== +webpack-sources@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa" + integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ== dependencies: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.33.2: - version "5.33.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.33.2.tgz#c049717c9b038febf5a72fd2f53319ad59a8c1fc" - integrity sha512-X4b7F1sYBmJx8mlh2B7mV5szEkE0jYNJ2y3akgAP0ERi0vLCG1VvdsIxt8lFd4st6SUy0lf7W0CCQS566MBpJg== +webpack@^5.38.1: + version "5.38.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.38.1.tgz#5224c7f24c18e729268d3e3bc97240d6e880258e" + integrity sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g== dependencies: "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.46" + "@types/estree" "^0.0.47" "@webassemblyjs/ast" "1.11.0" "@webassemblyjs/wasm-edit" "1.11.0" "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.0.4" + acorn "^8.2.1" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.7.0" + enhanced-resolve "^5.8.0" es-module-lexer "^0.4.0" - eslint-scope "^5.1.1" + eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.4" @@ -3440,8 +3560,8 @@ webpack@^5.33.2: schema-utils "^3.0.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.1" - watchpack "^2.0.0" - webpack-sources "^2.1.1" + watchpack "^2.2.0" + webpack-sources "^2.3.0" whatwg-fetch@^3.6.2: version "3.6.2"