UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

228 lines (227 loc) • 24.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _executeAccess = /*#__PURE__*/ _interop_require_default(require("../../auth/executeAccess")); const _afterChange = require("../../fields/hooks/afterChange"); const _afterRead = require("../../fields/hooks/afterRead"); const _beforeChange = require("../../fields/hooks/beforeChange"); const _beforeValidate = require("../../fields/hooks/beforeValidate"); const _commitTransaction = require("../../utilities/commitTransaction"); const _initTransaction = require("../../utilities/initTransaction"); const _killTransaction = require("../../utilities/killTransaction"); const _getLatestGlobalVersion = require("../../versions/getLatestGlobalVersion"); const _saveVersion = require("../../versions/saveVersion"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } async function update(args) { const { slug, autosave, depth, draft: draftArg, globalConfig, overrideAccess, req: { fallbackLocale, locale, payload }, req, showHiddenFields } = args; try { const shouldCommit = await (0, _initTransaction.initTransaction)(req); let { data } = args; const shouldSaveDraft = Boolean(draftArg && globalConfig.versions?.drafts); // ///////////////////////////////////// // 1. Retrieve and execute access // ///////////////////////////////////// const accessResults = !overrideAccess ? await (0, _executeAccess.default)({ data, req }, globalConfig.access.update) : true; // ///////////////////////////////////// // Retrieve document // ///////////////////////////////////// const query = overrideAccess ? undefined : accessResults; // ///////////////////////////////////// // 2. Retrieve document // ///////////////////////////////////// const { global, globalExists } = await (0, _getLatestGlobalVersion.getLatestGlobalVersion)({ slug, config: globalConfig, locale, payload, req, where: query }); let globalJSON = {}; if (global) { globalJSON = JSON.parse(JSON.stringify(global)); if (globalJSON._id) { delete globalJSON._id; } } const originalDoc = await (0, _afterRead.afterRead)({ collection: null, context: req.context, depth: 0, doc: globalJSON, fallbackLocale, global: globalConfig, locale, overrideAccess: true, req, showHiddenFields }); // ///////////////////////////////////// // beforeValidate - Fields // ///////////////////////////////////// data = await (0, _beforeValidate.beforeValidate)({ collection: null, context: req.context, data, doc: originalDoc, global: globalConfig, operation: 'update', overrideAccess, req }); // ///////////////////////////////////// // beforeValidate - Global // ///////////////////////////////////// await globalConfig.hooks.beforeValidate.reduce(async (priorHook, hook)=>{ await priorHook; data = await hook({ context: req.context, data, global: globalConfig, originalDoc, req }) || data; }, Promise.resolve()); // ///////////////////////////////////// // beforeChange - Global // ///////////////////////////////////// await globalConfig.hooks.beforeChange.reduce(async (priorHook, hook)=>{ await priorHook; data = await hook({ context: req.context, data, global: globalConfig, originalDoc, req }) || data; }, Promise.resolve()); // ///////////////////////////////////// // beforeChange - Fields // ///////////////////////////////////// let result = await (0, _beforeChange.beforeChange)({ collection: null, context: req.context, data, doc: originalDoc, docWithLocales: globalJSON, global: globalConfig, operation: 'update', req, skipValidation: shouldSaveDraft }); // ///////////////////////////////////// // Update // ///////////////////////////////////// if (!shouldSaveDraft) { if (globalExists) { result = await payload.db.updateGlobal({ slug, data: result, req }); } else { result = await payload.db.createGlobal({ slug, data: result, req }); } } // ///////////////////////////////////// // Create version // ///////////////////////////////////// if (globalConfig.versions) { const { globalType } = result; result = await (0, _saveVersion.saveVersion)({ autosave, docWithLocales: { ...result, createdAt: result.createdAt, updatedAt: result.updatedAt }, draft: shouldSaveDraft, global: globalConfig, payload, req }); result.globalType = globalType; } // ///////////////////////////////////// // afterRead - Fields // ///////////////////////////////////// result = await (0, _afterRead.afterRead)({ collection: null, context: req.context, depth, doc: result, fallbackLocale: null, global: globalConfig, locale, overrideAccess, req, showHiddenFields }); // ///////////////////////////////////// // afterRead - Global // ///////////////////////////////////// await globalConfig.hooks.afterRead.reduce(async (priorHook, hook)=>{ await priorHook; result = await hook({ context: req.context, doc: result, global: globalConfig, req }) || result; }, Promise.resolve()); // ///////////////////////////////////// // afterChange - Fields // ///////////////////////////////////// result = await (0, _afterChange.afterChange)({ collection: null, context: req.context, data, doc: result, global: globalConfig, operation: 'update', previousDoc: originalDoc, req }); // ///////////////////////////////////// // afterChange - Global // ///////////////////////////////////// await globalConfig.hooks.afterChange.reduce(async (priorHook, hook)=>{ await priorHook; result = await hook({ context: req.context, doc: result, global: globalConfig, previousDoc: originalDoc, req }) || result; }, Promise.resolve()); // ///////////////////////////////////// // Return results // ///////////////////////////////////// if (shouldCommit) await (0, _commitTransaction.commitTransaction)(req); return result; } catch (error) { await (0, _killTransaction.killTransaction)(req); throw error; } } const _default = update; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nbG9iYWxzL29wZXJhdGlvbnMvdXBkYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVlcFBhcnRpYWwgfSBmcm9tICd0cy1lc3NlbnRpYWxzJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRlZFR5cGVzIH0gZnJvbSAnLi4vLi4vJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uLy4uL2V4cHJlc3MvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFdoZXJlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy90eXBlcydcblxuaW1wb3J0IGV4ZWN1dGVBY2Nlc3MgZnJvbSAnLi4vLi4vYXV0aC9leGVjdXRlQWNjZXNzJ1xuaW1wb3J0IHsgYWZ0ZXJDaGFuZ2UgfSBmcm9tICcuLi8uLi9maWVsZHMvaG9va3MvYWZ0ZXJDaGFuZ2UnXG5pbXBvcnQgeyBhZnRlclJlYWQgfSBmcm9tICcuLi8uLi9maWVsZHMvaG9va3MvYWZ0ZXJSZWFkJ1xuaW1wb3J0IHsgYmVmb3JlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2JlZm9yZUNoYW5nZSdcbmltcG9ydCB7IGJlZm9yZVZhbGlkYXRlIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2JlZm9yZVZhbGlkYXRlJ1xuaW1wb3J0IHsgY29tbWl0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29tbWl0VHJhbnNhY3Rpb24nXG5pbXBvcnQgeyBpbml0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvaW5pdFRyYW5zYWN0aW9uJ1xuaW1wb3J0IHsga2lsbFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2tpbGxUcmFuc2FjdGlvbidcbmltcG9ydCB7IGdldExhdGVzdEdsb2JhbFZlcnNpb24gfSBmcm9tICcuLi8uLi92ZXJzaW9ucy9nZXRMYXRlc3RHbG9iYWxWZXJzaW9uJ1xuaW1wb3J0IHsgc2F2ZVZlcnNpb24gfSBmcm9tICcuLi8uLi92ZXJzaW9ucy9zYXZlVmVyc2lvbidcblxudHlwZSBBcmdzPFQgZXh0ZW5kcyB7IFtmaWVsZDogbnVtYmVyIHwgc3RyaW5nIHwgc3ltYm9sXTogdW5rbm93biB9PiA9IHtcbiAgYXV0b3NhdmU/OiBib29sZWFuXG4gIGRhdGE6IERlZXBQYXJ0aWFsPE9taXQ8VCwgJ2lkJz4+XG4gIGRlcHRoPzogbnVtYmVyXG4gIGRyYWZ0PzogYm9vbGVhblxuICBnbG9iYWxDb25maWc6IFNhbml0aXplZEdsb2JhbENvbmZpZ1xuICBvdmVycmlkZUFjY2Vzcz86IGJvb2xlYW5cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxuICBzaG93SGlkZGVuRmllbGRzPzogYm9vbGVhblxuICBzbHVnOiBzdHJpbmdcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlPFRTbHVnIGV4dGVuZHMga2V5b2YgR2VuZXJhdGVkVHlwZXNbJ2dsb2JhbHMnXT4oXG4gIGFyZ3M6IEFyZ3M8R2VuZXJhdGVkVHlwZXNbJ2dsb2JhbHMnXVtUU2x1Z10+LFxuKTogUHJvbWlzZTxHZW5lcmF0ZWRUeXBlc1snZ2xvYmFscyddW1RTbHVnXT4ge1xuICBjb25zdCB7XG4gICAgc2x1ZyxcbiAgICBhdXRvc2F2ZSxcbiAgICBkZXB0aCxcbiAgICBkcmFmdDogZHJhZnRBcmcsXG4gICAgZ2xvYmFsQ29uZmlnLFxuICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgIHJlcTogeyBmYWxsYmFja0xvY2FsZSwgbG9jYWxlLCBwYXlsb2FkIH0sXG4gICAgcmVxLFxuICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gIH0gPSBhcmdzXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzaG91bGRDb21taXQgPSBhd2FpdCBpbml0VHJhbnNhY3Rpb24ocmVxKVxuXG4gICAgbGV0IHsgZGF0YSB9ID0gYXJnc1xuXG4gICAgY29uc3Qgc2hvdWxkU2F2ZURyYWZ0ID0gQm9vbGVhbihkcmFmdEFyZyAmJiBnbG9iYWxDb25maWcudmVyc2lvbnM/LmRyYWZ0cylcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyAxLiBSZXRyaWV2ZSBhbmQgZXhlY3V0ZSBhY2Nlc3NcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBjb25zdCBhY2Nlc3NSZXN1bHRzID0gIW92ZXJyaWRlQWNjZXNzXG4gICAgICA/IGF3YWl0IGV4ZWN1dGVBY2Nlc3MoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdsb2JhbENvbmZpZy5hY2Nlc3MudXBkYXRlLFxuICAgICAgICApXG4gICAgICA6IHRydWVcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSZXRyaWV2ZSBkb2N1bWVudFxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IHF1ZXJ5OiBXaGVyZSA9IG92ZXJyaWRlQWNjZXNzID8gdW5kZWZpbmVkIDogKGFjY2Vzc1Jlc3VsdHMgYXMgV2hlcmUpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gMi4gUmV0cmlldmUgZG9jdW1lbnRcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgY29uc3QgeyBnbG9iYWwsIGdsb2JhbEV4aXN0cyB9ID0gYXdhaXQgZ2V0TGF0ZXN0R2xvYmFsVmVyc2lvbih7XG4gICAgICBzbHVnLFxuICAgICAgY29uZmlnOiBnbG9iYWxDb25maWcsXG4gICAgICBsb2NhbGUsXG4gICAgICBwYXlsb2FkLFxuICAgICAgcmVxLFxuICAgICAgd2hlcmU6IHF1ZXJ5LFxuICAgIH0pXG5cbiAgICBsZXQgZ2xvYmFsSlNPTjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuXG4gICAgaWYgKGdsb2JhbCkge1xuICAgICAgZ2xvYmFsSlNPTiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsKSlcblxuICAgICAgaWYgKGdsb2JhbEpTT04uX2lkKSB7XG4gICAgICAgIGRlbGV0ZSBnbG9iYWxKU09OLl9pZFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsRG9jID0gYXdhaXQgYWZ0ZXJSZWFkKHtcbiAgICAgIGNvbGxlY3Rpb246IG51bGwsXG4gICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgZG9jOiBnbG9iYWxKU09OLFxuICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICBnbG9iYWw6IGdsb2JhbENvbmZpZyxcbiAgICAgIGxvY2FsZSxcbiAgICAgIG92ZXJyaWRlQWNjZXNzOiB0cnVlLFxuICAgICAgcmVxLFxuICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICB9KVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGJlZm9yZVZhbGlkYXRlIC0gRmllbGRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgZGF0YSA9IGF3YWl0IGJlZm9yZVZhbGlkYXRlKHtcbiAgICAgIGNvbGxlY3Rpb246IG51bGwsXG4gICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgIGRhdGEsXG4gICAgICBkb2M6IG9yaWdpbmFsRG9jLFxuICAgICAgZ2xvYmFsOiBnbG9iYWxDb25maWcsXG4gICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICByZXEsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBiZWZvcmVWYWxpZGF0ZSAtIEdsb2JhbFxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGdsb2JhbENvbmZpZy5ob29rcy5iZWZvcmVWYWxpZGF0ZS5yZWR1Y2UoYXN5bmMgKHByaW9ySG9vaywgaG9vaykgPT4ge1xuICAgICAgYXdhaXQgcHJpb3JIb29rXG5cbiAgICAgIGRhdGEgPVxuICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBnbG9iYWw6IGdsb2JhbENvbmZpZyxcbiAgICAgICAgICBvcmlnaW5hbERvYyxcbiAgICAgICAgICByZXEsXG4gICAgICAgIH0pKSB8fCBkYXRhXG4gICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYmVmb3JlQ2hhbmdlIC0gR2xvYmFsXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgZ2xvYmFsQ29uZmlnLmhvb2tzLmJlZm9yZUNoYW5nZS5yZWR1Y2UoYXN5bmMgKHByaW9ySG9vaywgaG9vaykgPT4ge1xuICAgICAgYXdhaXQgcHJpb3JIb29rXG5cbiAgICAgIGRhdGEgPVxuICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBnbG9iYWw6IGdsb2JhbENvbmZpZyxcbiAgICAgICAgICBvcmlnaW5hbERvYyxcbiAgICAgICAgICByZXEsXG4gICAgICAgIH0pKSB8fCBkYXRhXG4gICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYmVmb3JlQ2hhbmdlIC0gRmllbGRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IGJlZm9yZUNoYW5nZSh7XG4gICAgICBjb2xsZWN0aW9uOiBudWxsLFxuICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICBkYXRhLFxuICAgICAgZG9jOiBvcmlnaW5hbERvYyxcbiAgICAgIGRvY1dpdGhMb2NhbGVzOiBnbG9iYWxKU09OLFxuICAgICAgZ2xvYmFsOiBnbG9iYWxDb25maWcsXG4gICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgICAgcmVxLFxuICAgICAgc2tpcFZhbGlkYXRpb246IHNob3VsZFNhdmVEcmFmdCxcbiAgICB9KVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFVwZGF0ZVxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGlmICghc2hvdWxkU2F2ZURyYWZ0KSB7XG4gICAgICBpZiAoZ2xvYmFsRXhpc3RzKSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHBheWxvYWQuZGIudXBkYXRlR2xvYmFsKHtcbiAgICAgICAgICBzbHVnLFxuICAgICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgICByZXEsXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmRiLmNyZWF0ZUdsb2JhbCh7XG4gICAgICAgICAgc2x1ZyxcbiAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgcmVxLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDcmVhdGUgdmVyc2lvblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGlmIChnbG9iYWxDb25maWcudmVyc2lvbnMpIHtcbiAgICAgIGNvbnN0IHsgZ2xvYmFsVHlwZSB9ID0gcmVzdWx0XG4gICAgICByZXN1bHQgPSBhd2FpdCBzYXZlVmVyc2lvbih7XG4gICAgICAgIGF1dG9zYXZlLFxuICAgICAgICBkb2NXaXRoTG9jYWxlczoge1xuICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHJlc3VsdC5jcmVhdGVkQXQsXG4gICAgICAgICAgdXBkYXRlZEF0OiByZXN1bHQudXBkYXRlZEF0LFxuICAgICAgICB9LFxuICAgICAgICBkcmFmdDogc2hvdWxkU2F2ZURyYWZ0LFxuICAgICAgICBnbG9iYWw6IGdsb2JhbENvbmZpZyxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgcmVxLFxuICAgICAgfSlcbiAgICAgIHJlc3VsdC5nbG9iYWxUeXBlID0gZ2xvYmFsVHlwZVxuICAgIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlclJlYWQgLSBGaWVsZHNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICByZXN1bHQgPSBhd2FpdCBhZnRlclJlYWQoe1xuICAgICAgY29sbGVjdGlvbjogbnVsbCxcbiAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgZGVwdGgsXG4gICAgICBkb2M6IHJlc3VsdCxcbiAgICAgIGZhbGxiYWNrTG9jYWxlOiBudWxsLFxuICAgICAgZ2xvYmFsOiBnbG9iYWxDb25maWcsXG4gICAgICBsb2NhbGUsXG4gICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgIHJlcSxcbiAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlclJlYWQgLSBHbG9iYWxcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBnbG9iYWxDb25maWcuaG9va3MuYWZ0ZXJSZWFkLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBob29rKSA9PiB7XG4gICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgcmVzdWx0ID1cbiAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgICAgIGdsb2JhbDogZ2xvYmFsQ29uZmlnLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgfSkpIHx8IHJlc3VsdFxuICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFmdGVyQ2hhbmdlIC0gRmllbGRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgcmVzdWx0ID0gYXdhaXQgYWZ0ZXJDaGFuZ2Uoe1xuICAgICAgY29sbGVjdGlvbjogbnVsbCxcbiAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgZGF0YSxcbiAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgZ2xvYmFsOiBnbG9iYWxDb25maWcsXG4gICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgICAgcHJldmlvdXNEb2M6IG9yaWdpbmFsRG9jLFxuICAgICAgcmVxLFxuICAgIH0pXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYWZ0ZXJDaGFuZ2UgLSBHbG9iYWxcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBnbG9iYWxDb25maWcuaG9va3MuYWZ0ZXJDaGFuZ2UucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICByZXN1bHQgPVxuICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgZG9jOiByZXN1bHQsXG4gICAgICAgICAgZ2xvYmFsOiBnbG9iYWxDb25maWcsXG4gICAgICAgICAgcHJldmlvdXNEb2M6IG9yaWdpbmFsRG9jLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgfSkpIHx8IHJlc3VsdFxuICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJldHVybiByZXN1bHRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaWYgKHNob3VsZENvbW1pdCkgYXdhaXQgY29tbWl0VHJhbnNhY3Rpb24ocmVxKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGF3YWl0IGtpbGxUcmFuc2FjdGlvbihyZXEpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB1cGRhdGVcbiJdLCJuYW1lcyI6WyJ1cGRhdGUiLCJhcmdzIiwic2x1ZyIsImF1dG9zYXZlIiwiZGVwdGgiLCJkcmFmdCIsImRyYWZ0QXJnIiwiZ2xvYmFsQ29uZmlnIiwib3ZlcnJpZGVBY2Nlc3MiLCJyZXEiLCJmYWxsYmFja0xvY2FsZSIsImxvY2FsZSIsInBheWxvYWQiLCJzaG93SGlkZGVuRmllbGRzIiwic2hvdWxkQ29tbWl0IiwiaW5pdFRyYW5zYWN0aW9uIiwiZGF0YSIsInNob3VsZFNhdmVEcmFmdCIsIkJvb2xlYW4iLCJ2ZXJzaW9ucyIsImRyYWZ0cyIsImFjY2Vzc1Jlc3VsdHMiLCJleGVjdXRlQWNjZXNzIiwiYWNjZXNzIiwicXVlcnkiLCJ1bmRlZmluZWQiLCJnbG9iYWwiLCJnbG9iYWxFeGlzdHMiLCJnZXRMYXRlc3RHbG9iYWxWZXJzaW9uIiwiY29uZmlnIiwid2hlcmUiLCJnbG9iYWxKU09OIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiX2lkIiwib3JpZ2luYWxEb2MiLCJhZnRlclJlYWQiLCJjb2xsZWN0aW9uIiwiY29udGV4dCIsImRvYyIsImJlZm9yZVZhbGlkYXRlIiwib3BlcmF0aW9uIiwiaG9va3MiLCJyZWR1Y2UiLCJwcmlvckhvb2siLCJob29rIiwiUHJvbWlzZSIsInJlc29sdmUiLCJiZWZvcmVDaGFuZ2UiLCJyZXN1bHQiLCJkb2NXaXRoTG9jYWxlcyIsInNraXBWYWxpZGF0aW9uIiwiZGIiLCJ1cGRhdGVHbG9iYWwiLCJjcmVhdGVHbG9iYWwiLCJnbG9iYWxUeXBlIiwic2F2ZVZlcnNpb24iLCJjcmVhdGVkQXQiLCJ1cGRhdGVkQXQiLCJhZnRlckNoYW5nZSIsInByZXZpb3VzRG9jIiwiY29tbWl0VHJhbnNhY3Rpb24iLCJlcnJvciIsImtpbGxUcmFuc2FjdGlvbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFtU0E7OztlQUFBOzs7c0VBNVIwQjs2QkFDRTsyQkFDRjs4QkFDRztnQ0FDRTttQ0FDRztpQ0FDRjtpQ0FDQTt3Q0FDTzs2QkFDWDs7Ozs7O0FBYzVCLGVBQWVBLE9BQ2JDLElBQTRDO0lBRTVDLE1BQU0sRUFDSkMsSUFBSSxFQUNKQyxRQUFRLEVBQ1JDLEtBQUssRUFDTEMsT0FBT0MsUUFBUSxFQUNmQyxZQUFZLEVBQ1pDLGNBQWMsRUFDZEMsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEVBQ3hDSCxHQUFHLEVBQ0hJLGdCQUFnQixFQUNqQixHQUFHWjtJQUVKLElBQUk7UUFDRixNQUFNYSxlQUFlLE1BQU1DLElBQUFBLGdDQUFlLEVBQUNOO1FBRTNDLElBQUksRUFBRU8sSUFBSSxFQUFFLEdBQUdmO1FBRWYsTUFBTWdCLGtCQUFrQkMsUUFBUVosWUFBWUMsYUFBYVksUUFBUSxFQUFFQztRQUVuRSx3Q0FBd0M7UUFDeEMsaUNBQWlDO1FBQ2pDLHdDQUF3QztRQUV4QyxNQUFNQyxnQkFBZ0IsQ0FB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