UNPKG

ember-legacy-class-transform

Version:
199 lines 21.7 kB
import * as HBS from '../types/nodes'; function unreachable() { throw new Error('unreachable'); } export default function build(ast) { if (!ast) { return ''; } var output = []; switch (ast.type) { case 'Program': { var chainBlock = ast['chained'] && ast.body[0]; if (chainBlock) { chainBlock['chained'] = true; } var body = buildEach(ast.body).join(''); output.push(body); } break; case 'ElementNode': output.push('<', ast.tag); if (ast.attributes.length) { output.push(' ', buildEach(ast.attributes).join(' ')); } if (ast.modifiers.length) { output.push(' ', buildEach(ast.modifiers).join(' ')); } if (ast.comments.length) { output.push(' ', buildEach(ast.comments).join(' ')); } output.push('>'); output.push.apply(output, buildEach(ast.children)); output.push('</', ast.tag, '>'); break; case 'AttrNode': output.push(ast.name, '='); var value = build(ast.value); if (ast.value.type === 'TextNode') { output.push('"', value, '"'); } else { output.push(value); } break; case 'ConcatStatement': output.push('"'); ast.parts.forEach(function (node) { if (node.type === 'StringLiteral') { output.push(node.original); } else { output.push(build(node)); } }); output.push('"'); break; case 'TextNode': output.push(ast.chars); break; case 'MustacheStatement': { output.push(compactJoin(['{{', pathParams(ast), '}}'])); } break; case 'MustacheCommentStatement': { output.push(compactJoin(['{{!--', ast.value, '--}}'])); } break; case 'ElementModifierStatement': { output.push(compactJoin(['{{', pathParams(ast), '}}'])); } break; case 'PathExpression': output.push(ast.original); break; case 'SubExpression': { output.push('(', pathParams(ast), ')'); } break; case 'BooleanLiteral': output.push(ast.value ? 'true' : 'false'); break; case 'BlockStatement': { var lines = []; if (ast['chained']) { lines.push(['{{else ', pathParams(ast), '}}'].join('')); } else { lines.push(openBlock(ast)); } lines.push(build(ast.program)); if (ast.inverse) { if (!ast.inverse['chained']) { lines.push('{{else}}'); } lines.push(build(ast.inverse)); } if (!ast['chained']) { lines.push(closeBlock(ast)); } output.push(lines.join('')); } break; case 'PartialStatement': { output.push(compactJoin(['{{>', pathParams(ast), '}}'])); } break; case 'CommentStatement': { output.push(compactJoin(['<!--', ast.value, '-->'])); } break; case 'StringLiteral': { output.push('"' + ast.value + '"'); } break; case 'NumberLiteral': { output.push(String(ast.value)); } break; case 'UndefinedLiteral': { output.push('undefined'); } break; case 'NullLiteral': { output.push('null'); } break; case 'Hash': { output.push(ast.pairs.map(function (pair) { return build(pair); }).join(' ')); } break; case 'HashPair': { output.push(ast.key + '=' + build(ast.value)); } break; } return output.join(''); } function compact(array) { var newArray = []; array.forEach(function (a) { if (typeof a !== 'undefined' && a !== null && a !== '') { newArray.push(a); } }); return newArray; } function buildEach(asts) { return asts.map(build); } function pathParams(ast) { var path = void 0; switch (ast.type) { case 'MustacheStatement': case 'SubExpression': case 'ElementModifierStatement': case 'BlockStatement': if (HBS.isLiteral(ast.path)) { return String(ast.path.value); } path = build(ast.path); break; case 'PartialStatement': path = build(ast.name); break; default: return unreachable(); } return compactJoin([path, buildEach(ast.params).join(' '), build(ast.hash)], ' '); } function compactJoin(array, delimiter) { return compact(array).join(delimiter || ''); } function blockParams(block) { var params = block.program.blockParams; if (params.length) { return ' as |' + params.join(' ') + '|'; } return null; } function openBlock(block) { return ['{{#', pathParams(block), blockParams(block), '}}'].join(''); } function closeBlock(block) { return ['{{/', build(block.path), '}}'].join(''); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9nZW5lcmF0aW9uL3ByaW50LmpzIl0sIm5hbWVzIjpbIkhCUyIsInVucmVhY2hhYmxlIiwiRXJyb3IiLCJidWlsZCIsImFzdCIsIm91dHB1dCIsInR5cGUiLCJjaGFpbkJsb2NrIiwiYm9keSIsImJ1aWxkRWFjaCIsImpvaW4iLCJwdXNoIiwidGFnIiwiYXR0cmlidXRlcyIsImxlbmd0aCIsIm1vZGlmaWVycyIsImNvbW1lbnRzIiwiYXBwbHkiLCJjaGlsZHJlbiIsIm5hbWUiLCJ2YWx1ZSIsInBhcnRzIiwiZm9yRWFjaCIsIm5vZGUiLCJvcmlnaW5hbCIsImNoYXJzIiwiY29tcGFjdEpvaW4iLCJwYXRoUGFyYW1zIiwibGluZXMiLCJvcGVuQmxvY2siLCJwcm9ncmFtIiwiaW52ZXJzZSIsImNsb3NlQmxvY2siLCJTdHJpbmciLCJwYWlycyIsIm1hcCIsInBhaXIiLCJrZXkiLCJjb21wYWN0IiwiYXJyYXkiLCJuZXdBcnJheSIsImEiLCJhc3RzIiwicGF0aCIsImlzTGl0ZXJhbCIsInBhcmFtcyIsImhhc2giLCJkZWxpbWl0ZXIiLCJibG9ja1BhcmFtcyIsImJsb2NrIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUtBLEdBQVosTUFBcUIsZ0JBQXJCO0FBQ0EsU0FBU0MsV0FBVCxHQUF1QjtBQUNuQixVQUFNLElBQUlDLEtBQUosQ0FBVSxhQUFWLENBQU47QUFDSDtBQUNELGVBQWUsU0FBU0MsS0FBVCxDQUFlQyxHQUFmLEVBQW9CO0FBQy9CLFFBQUksQ0FBQ0EsR0FBTCxFQUFVO0FBQ04sZUFBTyxFQUFQO0FBQ0g7QUFDRCxRQUFNQyxTQUFTLEVBQWY7QUFDQSxZQUFRRCxJQUFJRSxJQUFaO0FBQ0ksYUFBSyxTQUFMO0FBQ0k7QUFDSSxvQkFBTUMsYUFBYUgsSUFBSSxTQUFKLEtBQWtCQSxJQUFJSSxJQUFKLENBQVMsQ0FBVCxDQUFyQztBQUNBLG9CQUFJRCxVQUFKLEVBQWdCO0FBQ1pBLCtCQUFXLFNBQVgsSUFBd0IsSUFBeEI7QUFDSDtBQUNE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QUEyQkQsWUFBWUMsS0FBWixDQUEzQixFQUErQyxJQUEvQyxFQUFxRHZDLElBQXJELENBQTBELEVBQTFELENBQVA7QUFDSDtBQUNELFNBQVNzQixVQUFULENBQW9CaUIsS0FBcEIsRUFBMkI7QUFDdkIsV0FBTyxDQUFDLEtBQUQsRUFBUTlDLE1BQU04QyxNQUFNTixJQUFaLENBQVIsRUFBMkIsSUFBM0IsRUFBaUNqQyxJQUFqQyxDQUFzQyxFQUF0QyxDQUFQO0FBQ0giLCJmaWxlIjoibGliL2dlbmVyYXRpb24vcHJpbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBIQlMgZnJvbSAnLi4vdHlwZXMvbm9kZXMnO1xuZnVuY3Rpb24gdW5yZWFjaGFibGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bnJlYWNoYWJsZScpO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGQoYXN0KSB7XG4gICAgaWYgKCFhc3QpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgICBzd2l0Y2ggKGFzdC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1Byb2dyYW0nOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWluQmxvY2sgPSBhc3RbJ2NoYWluZWQnXSAmJiBhc3QuYm9keVswXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hhaW5CbG9jaykge1xuICAgICAgICAgICAgICAgICAgICBjaGFpbkJsb2NrWydjaGFpbmVkJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gYnVpbGRFYWNoKGFzdC5ib2R5KS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChib2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdFbGVtZW50Tm9kZSc6XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnPCcsIGFzdC50YWcpO1xuICAgICAgICAgICAgaWYgKGFzdC5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCcgJywgYnVpbGRFYWNoKGFzdC5hdHRyaWJ1dGVzKS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFzdC5tb2RpZmllcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJyAnLCBidWlsZEVhY2goYXN0Lm1vZGlmaWVycykuam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhc3QuY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJyAnLCBidWlsZEVhY2goYXN0LmNvbW1lbnRzKS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0LnB1c2goJz4nKTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoLmFwcGx5KG91dHB1dCwgYnVpbGRFYWNoKGFzdC5jaGlsZHJlbikpO1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goJzwvJywgYXN0LnRhZywgJz4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdBdHRyTm9kZSc6XG4gICAgICAgICAgICBvdXRwdXQucHVzaChhc3QubmFtZSwgJz0nKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYnVpbGQoYXN0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChhc3QudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJykge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCdcIicsIHZhbHVlLCAnXCInKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnXCInKTtcbiAgICAgICAgICAgIGFzdC5wYXJ0cy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChub2RlLm9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChidWlsZChub2RlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnXCInKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgICAgICBvdXRwdXQucHVzaChhc3QuY2hhcnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjb21wYWN0Sm9pbihbJ3t7JywgcGF0aFBhcmFtcyhhc3QpLCAnfX0nXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ011c3RhY2hlQ29tbWVudFN0YXRlbWVudCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyd7eyEtLScsIGFzdC52YWx1ZSwgJy0tfX0nXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0VsZW1lbnRNb2RpZmllclN0YXRlbWVudCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyd7eycsIHBhdGhQYXJhbXMoYXN0KSwgJ319J10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYXRoRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBvdXRwdXQucHVzaChhc3Qub3JpZ2luYWwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1N1YkV4cHJlc3Npb24nOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCcoJywgcGF0aFBhcmFtcyhhc3QpLCAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Jvb2xlYW5MaXRlcmFsJzpcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGFzdC52YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChhc3RbJ2NoYWluZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKFsne3tlbHNlICcsIHBhdGhQYXJhbXMoYXN0KSwgJ319J10uam9pbignJykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2gob3BlbkJsb2NrKGFzdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGJ1aWxkKGFzdC5wcm9ncmFtKSk7XG4gICAgICAgICAgICAgICAgaWYgKGFzdC5pbnZlcnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXN0LmludmVyc2VbJ2NoYWluZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaCgne3tlbHNlfX0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGJ1aWxkKGFzdC5pbnZlcnNlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghYXN0WydjaGFpbmVkJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChjbG9zZUJsb2NrKGFzdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChsaW5lcy5qb2luKCcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUGFydGlhbFN0YXRlbWVudCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyd7ez4nLCBwYXRoUGFyYW1zKGFzdCksICd9fSddKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQ29tbWVudFN0YXRlbWVudCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goY29tcGFjdEpvaW4oWyc8IS0tJywgYXN0LnZhbHVlLCAnLS0+J10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTdHJpbmdMaXRlcmFsJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChgXCIke2FzdC52YWx1ZX1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ051bWJlckxpdGVyYWwnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKFN0cmluZyhhc3QudmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdVbmRlZmluZWRMaXRlcmFsJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTnVsbExpdGVyYWwnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCdudWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSGFzaCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goYXN0LnBhaXJzLm1hcChwYWlyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkKHBhaXIpO1xuICAgICAgICAgICAgICAgIH0pLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSGFzaFBhaXInOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGAke2FzdC5rZXl9PSR7YnVpbGQoYXN0LnZhbHVlKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xufVxuZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICAgIGNvbnN0IG5ld0FycmF5ID0gW107XG4gICAgYXJyYXkuZm9yRWFjaChhID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBhICE9PSAndW5kZWZpbmVkJyAmJiBhICE9PSBudWxsICYmIGEgIT09ICcnKSB7XG4gICAgICAgICAgICBuZXdBcnJheS5wdXNoKGEpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld0FycmF5O1xufVxuZnVuY3Rpb24gYnVpbGRFYWNoKGFzdHMpIHtcbiAgICByZXR1cm4gYXN0cy5tYXAoYnVpbGQpO1xufVxuZnVuY3Rpb24gcGF0aFBhcmFtcyhhc3QpIHtcbiAgICBsZXQgcGF0aDtcbiAgICBzd2l0Y2ggKGFzdC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnU3ViRXhwcmVzc2lvbic6XG4gICAgICAgIGNhc2UgJ0VsZW1lbnRNb2RpZmllclN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGlmIChIQlMuaXNMaXRlcmFsKGFzdC5wYXRoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXN0LnBhdGgudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0aCA9IGJ1aWxkKGFzdC5wYXRoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYXJ0aWFsU3RhdGVtZW50JzpcbiAgICAgICAgICAgIHBhdGggPSBidWlsZChhc3QubmFtZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB1bnJlYWNoYWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGFjdEpvaW4oW3BhdGgsIGJ1aWxkRWFjaChhc3QucGFyYW1zKS5qb2luKCcgJyksIGJ1aWxkKGFzdC5oYXNoKV0sICcgJyk7XG59XG5mdW5jdGlvbiBjb21wYWN0Sm9pbihhcnJheSwgZGVsaW1pdGVyKSB7XG4gICAgcmV0dXJuIGNvbXBhY3QoYXJyYXkpLmpvaW4oZGVsaW1pdGVyIHx8ICcnKTtcbn1cbmZ1bmN0aW9uIGJsb2NrUGFyYW1zKGJsb2NrKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYmxvY2sucHJvZ3JhbS5ibG9ja1BhcmFtcztcbiAgICBpZiAocGFyYW1zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gYCBhcyB8JHtwYXJhbXMuam9pbignICcpfXxgO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIG9wZW5CbG9jayhibG9jaykge1xuICAgIHJldHVybiBbJ3t7IycsIHBhdGhQYXJhbXMoYmxvY2spLCBibG9ja1BhcmFtcyhibG9jayksICd9fSddLmpvaW4oJycpO1xufVxuZnVuY3Rpb24gY2xvc2VCbG9jayhibG9jaykge1xuICAgIHJldHVybiBbJ3t7LycsIGJ1aWxkKGJsb2NrLnBhdGgpLCAnfX0nXS5qb2luKCcnKTtcbn0iXX0=