UNPKG

cdkdx

Version:

Zero-config CLI for aws cdk development

197 lines 19.7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Bundler = exports.Lambdas = void 0; const path_1 = __importDefault(require("path")); const fs_extra_1 = __importDefault(require("fs-extra")); const webpack_1 = __importStar(require("webpack")); const fork_ts_checker_webpack_plugin_1 = __importDefault(require("fork-ts-checker-webpack-plugin")); const friendly_errors_webpack_plugin_1 = __importDefault(require("friendly-errors-webpack-plugin")); const size_plugin_1 = __importDefault(require("size-plugin")); const terser_webpack_plugin_1 = __importDefault(require("terser-webpack-plugin")); const webpack_license_plugin_1 = __importDefault(require("webpack-license-plugin")); const cdkdx_config_1 = require("./cdkdx-config"); const plugins_1 = require("./plugins"); class Lambdas { constructor(srcPath) { this.entries = {}; this.warnings = new Array(); if (fs_extra_1.default.existsSync(srcPath)) { fs_extra_1.default.readdirSync(srcPath).forEach((name) => { if (name === Lambdas.SHARED_FOLDER) return; const lambdaPath = path_1.default.join(srcPath, name); if (!fs_extra_1.default.statSync(lambdaPath).isDirectory()) return; let entry = path_1.default.join(lambdaPath, 'index.ts'); if (fs_extra_1.default.existsSync(entry)) { this.entries[name] = entry; } else { entry = path_1.default.join(lambdaPath, 'index.tsx'); if (fs_extra_1.default.existsSync(entry)) { this.entries[name] = entry; } else { this.warnings.push(entry); } } }); } } hasEntries() { return Object.keys(this.entries).length > 0; } hasWarnings() { return this.warnings.length > 0; } } exports.Lambdas = Lambdas; Lambdas.SHARED_FOLDER = 'shared'; class Bundler { constructor(props) { var _a; const compilerOptions = { importsNotUsedAsValues: 'preserve', noEmit: false, declaration: false, inlineSourceMap: false, sourceMap: true, composite: false, }; const cdkdxConfig = new cdkdx_config_1.CdkdxConfig(props.projectInfo); const config = cdkdxConfig.webpack({ target: 'node', mode: 'production', devtool: 'source-map', optimization: { minimize: props.minify, minimizer: [ new terser_webpack_plugin_1.default({ cache: true, parallel: true, extractComments: true, sourceMap: true, }), ], }, entry: { ...props.lambdas.entries, }, resolve: { extensions: ['.ts', '.tsx', '.js'], }, module: { rules: [ { test: /\.tsx?$/, include: props.projectInfo.lambdasSrcPath, exclude: /node_modules/, use: { loader: 'ts-loader', options: { configFile: props.tsConfigFile, transpileOnly: true, compilerOptions, }, }, }, { test: /\.html$/i, include: props.projectInfo.lambdasSrcPath, loader: 'html-loader', options: { minimize: props.minify, }, }, ], }, plugins: [ // https://github.com/jmblog/how-to-optimize-momentjs-with-webpack new webpack_1.IgnorePlugin(/^\.\/locale$/, /moment$/), new size_plugin_1.default({ writeFile: true, publish: false, filename: 'lambda-file-sizes.json', }), new fork_ts_checker_webpack_plugin_1.default({ typescript: { enabled: true, configFile: props.tsConfigFile, configOverwrite: { compilerOptions, }, }, }), new plugins_1.NodeModulesPlugin({ nodeModules: props.projectInfo.nodeModules, }), //new LambdaFileSizePlugin({}), new friendly_errors_webpack_plugin_1.default({ clearConsole: false, }), ], output: { path: props.projectInfo.lambdasOutPath, filename: '[name]/index.js', libraryTarget: 'commonjs2', }, externals: [ ...props.projectInfo.externals, ...props.projectInfo.nodeModules, ], }); if (props.projectInfo.isConstructLib) { (_a = config.plugins) === null || _a === void 0 ? void 0 : _a.push(new webpack_license_plugin_1.default({ outputFilename: 'thirdPartyNotice.json' })); } this.compiler = (0, webpack_1.default)(config); } async run() { return new Promise((resolve, reject) => { this.compiler.run((err, stats) => { if (err) { return reject(err); } if (stats.hasErrors()) { return reject('Webpack compilation error, see above'); } resolve(); }); }); } watch() { return this.compiler.watch({ aggregateTimeout: 300, poll: undefined, }, (_err, _stats) => { return; }); } } exports.Bundler = Bundler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLHdEQUEwQjtBQUMxQixtREFBZ0Q7QUFDaEQsb0dBQXdFO0FBQ3hFLG9HQUF5RTtBQUN6RSw4REFBcUM7QUFDckMsa0ZBQWlEO0FBQ2pELG9GQUFtRDtBQUduRCxpREFBNkM7QUFDN0MsdUNBQThDO0FBRTlDLE1BQWEsT0FBTztJQU1sQixZQUFZLE9BQWU7UUFIWCxZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUNyQyxhQUFRLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUc3QyxJQUFJLGtCQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFCLGtCQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN2QyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsYUFBYTtvQkFBRSxPQUFPO2dCQUUzQyxNQUFNLFVBQVUsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFNUMsSUFBSSxDQUFDLGtCQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtvQkFBRSxPQUFPO2dCQUVuRCxJQUFJLEtBQUssR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFOUMsSUFBSSxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQzVCO3FCQUFNO29CQUNMLEtBQUssR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMs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LENBQUMsQ0FBQztpQkFDdkQ7Z0JBRUQsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUs7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUN4QjtZQUNFLGdCQUFnQixFQUFFLEdBQUc7WUFDckIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsRUFDRCxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNmLE9BQU87UUFDVCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXJJRCwwQkFxSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgd2VicGFjaywgeyBJZ25vcmVQbHVnaW4gfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCBGb3JrVHNDaGVja2VyV2VicGFja1BsdWdpbiBmcm9tICdmb3JrLXRzLWNoZWNrZXItd2VicGFjay1wbHVnaW4nO1xuaW1wb3J0IEZyaWVuZGx5RXJyb3JzV2VicGFja1BsdWdpbiBmcm9tICdmcmllbmRseS1lcnJvcnMtd2VicGFjay1wbHVnaW4nO1xuaW1wb3J0IFNpemVQbHVnaW4gZnJvbSAnc2l6ZS1wbHVnaW4nO1xuaW1wb3J0IFRlcnNlclBsdWdpbiBmcm9tICd0ZXJzZXItd2VicGFjay1wbHVnaW4nO1xuaW1wb3J0IExpY2Vuc2VQbHVnaW4gZnJvbSAnd2VicGFjay1saWNlbnNlLXBsdWdpbic7XG5cbmltcG9ydCB7IFByb2plY3RJbmZvIH0gZnJvbSAnLi9wcm9qZWN0LWluZm8nO1xuaW1wb3J0IHsgQ2RrZHhDb25maWcgfSBmcm9tICcuL2Nka2R4LWNvbmZpZyc7XG5pbXBvcnQgeyBOb2RlTW9kdWxlc1BsdWdpbiB9IGZyb20gJy4vcGx1Z2lucyc7XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFzIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTSEFSRURfRk9MREVSID0gJ3NoYXJlZCc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVudHJpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihzcmNQYXRoOiBzdHJpbmcpIHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzcmNQYXRoKSkge1xuICAgICAgZnMucmVhZGRpclN5bmMoc3JjUGF0aCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBpZiAobmFtZSA9PT0gTGFtYmRhcy5TSEFSRURfRk9MREVSKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbGFtYmRhUGF0aCA9IHBhdGguam9pbihzcmNQYXRoLCBuYW1lKTtcblxuICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKGxhbWJkYVBhdGgpLmlzRGlyZWN0b3J5KCkpIHJldHVybjtcblxuICAgICAgICBsZXQgZW50cnkgPSBwYXRoLmpvaW4obGFtYmRhUGF0aCwgJ2luZGV4LnRzJyk7XG5cbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZW50cnkpKSB7XG4gICAgICAgICAgdGhpcy5lbnRyaWVzW25hbWVdID0gZW50cnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cnkgPSBwYXRoLmpvaW4obGFtYmRhUGF0aCwgJ2luZGV4LnRzeCcpO1xuXG4gICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZW50cnkpKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXNbbmFtZV0gPSBlbnRyeTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNFbnRyaWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmVudHJpZXMpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgaGFzV2FybmluZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2FybmluZ3MubGVuZ3RoID4gMDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZXJQcm9wcyB7XG4gIHByb2plY3RJbmZvOiBQcm9qZWN0SW5mbztcbiAgdHNDb25maWdGaWxlOiBzdHJpbmc7XG4gIGxhbWJkYXM6IExhbWJkYXM7XG4gIG1pbmlmeTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1bmRsZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVyOiB3ZWJwYWNrLkNvbXBpbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBCdW5kbGVyUHJvcHMpIHtcbiAgICBjb25zdCBjb21waWxlck9wdGlvbnMgPSB7XG4gICAgICBpbXBvcnRzTm90VXNlZEFzVmFsdWVzOiAncHJlc2VydmUnLFxuICAgICAgbm9FbWl0OiBmYWxzZSxcbiAgICAgIGRlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICAgIGlubGluZVNvdXJjZU1hcDogZmFsc2UsXG4gICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICBjb21wb3NpdGU6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjb25zdCBjZGtkeENvbmZpZyA9IG5ldyBDZGtkeENvbmZpZyhwcm9wcy5wcm9qZWN0SW5mbyk7XG5cbiAgICBjb25zdCBjb25maWc6IHdlYnBhY2suQ29uZmlndXJhdGlvbiA9IGNka2R4Q29uZmlnLndlYnBhY2soe1xuICAgICAgdGFyZ2V0OiAnbm9kZScsXG4gICAgICBtb2RlOiAncHJvZHVjdGlvbicsXG4gICAgICBkZXZ0b29sOiAnc291cmNlLW1hcCcsXG4gICAgICBvcHRpbWl6YXRpb246IHtcbiAgICAgICAgbWluaW1pemU6IHByb3BzLm1pbmlmeSxcbiAgICAgICAgbWluaW1pemVyOiBbXG4gICAgICAgICAgbmV3IFRlcnNlclBsdWdpbih7XG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHBhcmFsbGVsOiB0cnVlLFxuICAgICAgICAgICAgZXh0cmFjdENvbW1lbnRzOiB0cnVlLFxuICAgICAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGVudHJ5OiB7XG4gICAgICAgIC4uLnByb3BzLmxhbWJkYXMuZW50cmllcyxcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiB7XG4gICAgICAgIGV4dGVuc2lvbnM6IFsnLnRzJywgJy50c3gnLCAnLmpzJ10sXG4gICAgICB9LFxuICAgICAgbW9kdWxlOiB7XG4gICAgICAgIHJ1bGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVzdDogL1xcLnRzeD8kLyxcbiAgICAgICAgICAgIGluY2x1ZGU6IHByb3BzLnByb2plY3RJbmZvLmxhbWJkYXNTcmNQYXRoLFxuICAgICAgICAgICAgZXhjbHVkZTogL25vZGVfbW9kdWxlcy8sXG4gICAgICAgICAgICB1c2U6IHtcbiAgICAgICAgICAgICAgbG9hZGVyOiAndHMtbG9hZGVyJyxcbiAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGU6IHByb3BzLnRzQ29uZmlnRmlsZSxcbiAgICAgICAgICAgICAgICB0cmFuc3BpbGVPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXN0OiAvXFwuaHRtbCQvaSxcbiAgICAgICAgICAgIGluY2x1ZGU6IHByb3BzLnByb2plY3RJbmZvLmxhbWJkYXNTcmNQYXRoLFxuICAgICAgICAgICAgbG9hZGVyOiAnaHRtbC1sb2FkZXInLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBtaW5pbWl6ZTogcHJvcHMubWluaWZ5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ptYmxvZy9ob3ctdG8tb3B0aW1pemUtbW9tZW50anMtd2l0aC13ZWJwYWNrXG4gICAgICAgIG5ldyBJZ25vcmVQbHVnaW4oL15cXC5cXC9sb2NhbGUkLywgL21vbWVudCQvKSxcbiAgICAgICAgbmV3IFNpemVQbHVnaW4oe1xuICAgICAgICAgIHdyaXRlRmlsZTogdHJ1ZSxcbiAgICAgICAgICBwdWJsaXNoOiBmYWxzZSxcbiAgICAgICAgICBmaWxlbmFtZTogJ2xhbWJkYS1maWxlLXNpemVzLmpzb24nLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IEZvcmtUc0NoZWNrZXJXZWJwYWNrUGx1Z2luKHtcbiAgICAgICAgICB0eXBlc2NyaXB0OiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlnRmlsZTogcHJvcHMudHNDb25maWdGaWxlLFxuICAgICAgICAgICAgY29uZmlnT3ZlcndyaXRlOiB7XG4gICAgICAgICAgICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBOb2RlTW9kdWxlc1BsdWdpbih7XG4gICAgICAgICAgbm9kZU1vZHVsZXM6IHByb3BzLnByb2plY3RJbmZvLm5vZGVNb2R1bGVzLFxuICAgICAgICB9KSxcbiAgICAgICAgLy9uZXcgTGFtYmRhRmlsZVNpemVQbHVnaW4oe30pLFxuICAgICAgICBuZXcgRnJpZW5kbHlFcnJvcnNXZWJwYWNrUGx1Z2luKHtcbiAgICAgICAgICBjbGVhckNvbnNvbGU6IGZhbHNlLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgICBvdXRwdXQ6IHtcbiAgICAgICAgcGF0aDogcHJvcHMucHJvamVjdEluZm8ubGFtYmRhc091dFBhdGgsXG4gICAgICAgIGZpbGVuYW1lOiAnW25hbWVdL2luZGV4LmpzJyxcbiAgICAgICAgbGlicmFyeVRhcmdldDogJ2NvbW1vbmpzMicsXG4gICAgICB9LFxuICAgICAgZXh0ZXJuYWxzOiBbXG4gICAgICAgIC4uLnByb3BzLnByb2plY3RJbmZvLmV4dGVybmFscyxcbiAgICAgICAgLi4ucHJvcHMucHJvamVjdEluZm8ubm9kZU1vZHVsZXMsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnByb2plY3RJbmZvLmlzQ29uc3RydWN0TGliKSB7XG4gICAgICBjb25maWcucGx1Z2lucz8ucHVzaChcbiAgICAgICAgbmV3IExpY2Vuc2VQbHVnaW4oeyBvdXRwdXRGaWxlbmFtZTogJ3RoaXJkUGFydHlOb3RpY2UuanNvbicgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGlsZXIgPSB3ZWJwYWNrKGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbXBpbGVyLnJ1bigoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRzLmhhc0Vycm9ycygpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdCgnV2VicGFjayBjb21waWxhdGlvbiBlcnJvciwgc2VlIGFib3ZlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB3YXRjaCgpOiB3ZWJwYWNrLldhdGNoaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlci53YXRjaChcbiAgICAgIHtcbiAgICAgICAgYWdncmVnYXRlVGltZW91dDogMzAwLFxuICAgICAgICBwb2xsOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgKF9lcnIsIF9zdGF0cykgPT4ge1xuICAgICAgICByZXR1cm47XG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==