UNPKG

knex-firebird-dialect

Version:
106 lines (103 loc) 17.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _compiler = _interopRequireDefault(require("knex/lib/schema/compiler")); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // Firebird: Column Builder & Compiler // ------- // Schema Compiler // ------- var SchemaCompiler_Firebird = /*#__PURE__*/function (_SchemaCompiler) { function SchemaCompiler_Firebird() { (0, _classCallCheck2["default"])(this, SchemaCompiler_Firebird); return _callSuper(this, SchemaCompiler_Firebird, arguments); } (0, _inherits2["default"])(SchemaCompiler_Firebird, _SchemaCompiler); return (0, _createClass2["default"])(SchemaCompiler_Firebird, [{ key: "hasTable", value: function hasTable(tableName) { var fullTableName = this.formatter.wrap(prefixedTableName(this.schema, String(tableName))).toUpperCase(); var sql = "select 1 from rdb$relations where rdb$relation_name = '".concat(fullTableName, "'"); this.pushQuery({ sql: sql, output: function output(_ref) { var rows = _ref.rows, fields = _ref.fields; if (!rows || rows.length === 0) { return false; } var key = fields[0]; return Number(rows[0][key]) === 1; } }); } // Compile the query to determine if a column exists. }, { key: "hasColumn", value: function hasColumn(tableName, column) { this.pushQuery({ sql: "select i.rdb$field_name as \"field\" from " + "rdb$relations r join rdb$RELATION_FIELDS i " + "on (i.rdb$relation_name = r.rdb$relation_name) " + "where r.rdb$relation_name = '".concat(this.formatter.wrap(tableName.toUpperCase()), "'"), output: function output(_ref2) { var rows = _ref2.rows, fields = _ref2.fields; var key = fields[0].trim(); var target = column.trim().toLowerCase(); var _iterator = _createForOfIteratorHelper(rows), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var row = _step.value; if (row[key].trim().toLowerCase() === target) { return true; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return false; } }); } }, { key: "getColumnName", value: function getColumnName() { var name = _superPropGet(SchemaCompiler_Firebird, "getColumnName", this, 3)([arguments]); return this.client.config.connection.lowercase_keys ? name.toLowerCase() : name; } }, { key: "dropTableIfExists", value: function dropTableIfExists(tableName) { var fullTableName = this.formatter.wrap(prefixedTableName(this.schema, tableName)).toUpperCase(); var dropTableSql = this.dropTablePrefix + fullTableName; this.pushQuery("\n EXECUTE BLOCK AS BEGIN\n if (exists(select 1 from rdb$relations where rdb$relation_name = '".concat(fullTableName, "')) then\n execute statement '").concat(dropTableSql, "';\n END\n ")); return this; } // eslint-disable-next-line no-unused-vars }, { key: "renameTable", value: function renameTable(tableName, to) { throw new Error("".concat(this.name, " is not implemented for this dialect (http://www.firebirdfaq.org/faq363/).")); } }]); }(_compiler["default"]); function prefixedTableName(prefix, table) { return prefix ? "".concat(prefix, ".").concat(table) : table; } SchemaCompiler_Firebird.prototype.lowerCase = true; var _default = exports["default"] = SchemaCompiler_Firebird; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tcGlsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiU2NoZW1hQ29tcGlsZXJfRmlyZWJpcmQiLCJfU2NoZW1hQ29tcGlsZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiYXJndW1lbnRzIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJoYXNUYWJsZSIsInRhYmxlTmFtZSIsImZ1bGxUYWJsZU5hbWUiLCJmb3JtYXR0ZXIiLCJ3cmFwIiwicHJlZml4ZWRUYWJsZU5hbWUiLCJzY2hlbWEiLCJTdHJpbmciLCJ0b1VwcGVyQ2FzZSIsInNxbCIsImNvbmNhdCIsInB1c2hRdWVyeSIsIm91dHB1dCIsIl9yZWYiLCJyb3dzIiwiZmllbGRzIiwiTnVtYmVyIiwiaGFzQ29sdW1uIiwiY29sdW1uIiwiX3JlZjIiLCJ0cmltIiwidGFyZ2V0IiwidG9Mb3dlckNhc2UiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInJvdyIsImVyciIsImdldENvbHVtbk5hbWUiLCJjbGllbnQiLCJjb25maWciLCJjb25uZWN0aW9uIiwibG93ZXJjYXNlX2tleXMiLCJkcm9wVGFibGVJZkV4aXN0cyIsImRyb3BUYWJsZVNxbCIsImRyb3BUYWJsZVByZWZpeCIsInJlbmFtZVRhYmxlIiwidG8iLCJFcnJvciIsIlNjaGVtYUNvbXBpbGVyIiwicHJlZml4IiwidGFibGUiLCJsb3dlckNhc2UiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hL2NvbXBpbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEZpcmViaXJkOiBDb2x1bW4gQnVpbGRlciAmIENvbXBpbGVyXG4vLyAtLS0tLS0tXG5pbXBvcnQgU2NoZW1hQ29tcGlsZXIgZnJvbSBcImtuZXgvbGliL3NjaGVtYS9jb21waWxlclwiO1xuXG4vLyBTY2hlbWEgQ29tcGlsZXJcbi8vIC0tLS0tLS1cbmNsYXNzIFNjaGVtYUNvbXBpbGVyX0ZpcmViaXJkIGV4dGVuZHMgU2NoZW1hQ29tcGlsZXIge1xuICBoYXNUYWJsZSh0YWJsZU5hbWUpIHtcbiAgICBjb25zdCBmdWxsVGFibGVOYW1lID0gdGhpcy5mb3JtYXR0ZXJcbiAgICAgIC53cmFwKHByZWZpeGVkVGFibGVOYW1lKHRoaXMuc2NoZW1hLCBTdHJpbmcodGFibGVOYW1lKSkpXG4gICAgICAudG9VcHBlckNhc2UoKTtcblxuICAgIGNvbnN0IHNxbCA9IGBzZWxlY3QgMSBmcm9tIHJkYiRyZWxhdGlvbnMgd2hlcmUgcmRiJHJlbGF0aW9uX25hbWUgPSAnJHtmdWxsVGFibGVOYW1lfSdgO1xuICAgIHRoaXMucHVzaFF1ZXJ5KHtcbiAgICAgIHNxbCxcbiAgICAgIG91dHB1dDogKHsgcm93cywgZmllbGRzIH0pID0+IHtcbiAgICAgICAgaWYgKCFyb3dzIHx8IHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IGZpZWxkc1swXTtcbiAgICAgICAgcmV0dXJuIE51bWJlcihyb3dzWzBdW2tleV0pID09PSAxO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENvbXBpbGUgdGhlIHF1ZXJ5IHRvIGRldGVybWluZSBpZiBhIGNvbHVtbiBleGlzdHMuXG4gIGhhc0NvbHVtbih0YWJsZU5hbWUsIGNvbHVtbikge1xuICAgIHRoaXMucHVzaFF1ZXJ5KHtcbiAgICAgIHNxbDpcbiAgICAgICAgYHNlbGVjdCBpLnJkYiRmaWVsZF9uYW1lIGFzIFwiZmllbGRcIiBmcm9tIGAgK1xuICAgICAgICBgcmRiJHJlbGF0aW9ucyByIGpvaW4gcmRiJFJFTEFUSU9OX0ZJRUxEUyBpIGAgK1xuICAgICAgICBgb24gKGkucmRiJHJlbGF0aW9uX25hbWUgPSByLnJkYiRyZWxhdGlvbl9uYW1lKSBgICtcbiAgICAgICAgYHdoZXJlIHIucmRiJHJlbGF0aW9uX25hbWUgPSAnJHt0aGlzLmZvcm1hdHRlci53cmFwKFxuICAgICAgICAgIHRhYmxlTmFtZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICl9J2AsXG4gICAgICBvdXRwdXQoeyByb3dzLCBmaWVsZHMgfSkge1xuICAgICAgICBjb25zdCBrZXkgPSBmaWVsZHNbMF0udHJpbSgpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBjb2x1bW4udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgICBpZiAocm93W2tleV0udHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRDb2x1bW5OYW1lKCkge1xuICAgIGNvbnN0IG5hbWUgPSBzdXBlci5nZXRDb2x1bW5OYW1lKGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmNvbmZpZy5jb25uZWN0aW9uLmxvd2VyY2FzZV9rZXlzXG4gICAgICA/IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgOiBuYW1lO1xuICB9XG5cbiAgZHJvcFRhYmxlSWZFeGlzdHModGFibGVOYW1lKSB7XG4gICAgY29uc3QgZnVsbFRhYmxlTmFtZSA9IHRoaXMuZm9ybWF0dGVyXG4gICAgICAud3JhcChwcmVmaXhlZFRhYmxlTmFtZSh0aGlzLnNjaGVtYSwgdGFibGVOYW1lKSlcbiAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGRyb3BUYWJsZVNxbCA9IHRoaXMuZHJvcFRhYmxlUHJlZml4ICsgZnVsbFRhYmxlTmFtZTtcblxuICAgIHRoaXMucHVzaFF1ZXJ5KGBcbiAgICAgIEVYRUNVVEUgQkxPQ0sgQVMgQkVHSU5cbiAgICAgIGlmIChleGlzdHMoc2VsZWN0IDEgZnJvbSByZGIkcmVsYXRpb25zIHdoZXJlIHJkYiRyZWxhdGlvbl9uYW1lID0gJyR7ZnVsbFRhYmxlTmFtZX0nKSkgdGhlblxuICAgICAgZXhlY3V0ZSBzdGF0ZW1lbnQgJyR7ZHJvcFRhYmxlU3FsfSc7XG4gICAgICBFTkRcbiAgICBgKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJlbmFtZVRhYmxlKHRhYmxlTmFtZSwgdG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHt0aGlzLm5hbWV9IGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBkaWFsZWN0IChodHRwOi8vd3d3LmZpcmViaXJkZmFxLm9yZy9mYXEzNjMvKS5gXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVmaXhlZFRhYmxlTmFtZShwcmVmaXgsIHRhYmxlKSB7XG4gIHJldHVybiBwcmVmaXggPyBgJHtwcmVmaXh9LiR7dGFibGV9YCA6IHRhYmxlO1xufVxuXG5TY2hlbWFDb21waWxlcl9GaXJlYmlyZC5wcm90b3R5cGUubG93ZXJDYXNlID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgU2NoZW1hQ29tcGlsZXJfRmlyZWJpcmQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFBQSxTQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBc0QsU0FBQUMsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxVQUFBQSxDQUFBLEtBQUFlLENBQUEsRUFBQUwsQ0FBQSxnQkFBQU0sU0FBQSxpSkFBQUMsQ0FBQSxFQUFBQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFSLENBQUEsV0FBQUEsRUFBQSxJQUFBVCxDQUFBLEdBQUFBLENBQUEsQ0FBQWtCLElBQUEsQ0FBQXBCLENBQUEsTUFBQVksQ0FBQSxXQUFBQSxFQUFBLFFBQUFaLENBQUEsR0FBQUUsQ0FBQSxDQUFBbUIsSUFBQSxXQUFBSCxDQUFBLEdBQUFsQixDQUFBLENBQUFhLElBQUEsRUFBQWIsQ0FBQSxLQUFBQyxDQUFBLFdBQUFBLEVBQUFELENBQUEsSUFBQW1CLENBQUEsT0FBQUYsQ0FBQSxHQUFBakIsQ0FBQSxLQUFBZSxDQUFBLFdBQUFBLEVBQUEsVUFBQUcsQ0FBQSxZQUFBaEIsQ0FBQSxjQUFBQSxDQUFBLDhCQUFBaUIsQ0FBQSxRQUFBRixDQUFBO0FBQUEsU0FBQVYsNEJBQUFQLENBQUEsRUFBQWtCLENBQUEsUUFBQWxCLENBQUEsMkJBQUFBLENBQUEsU0FBQXNCLGlCQUFBLENBQUF0QixDQUFBLEVBQUFrQixDQUFBLE9BQUFoQixDQUFBLE1BQUFxQixRQUFBLENBQUFILElBQUEsQ0FBQXBCLENBQUEsRUFBQXdCLEtBQUEsNkJBQUF0QixDQUFBLElBQUFGLENBQUEsQ0FBQXlCLFdBQUEsS0FBQXZCLENBQUEsR0FBQUYsQ0FBQSxDQUFBeUIsV0FBQSxDQUFBQyxJQUFBLGFBQUF4QixDQUFBLGNBQUFBLENBQUEsR0FBQUcsS0FBQSxDQUFBc0IsSUFBQSxDQUFBM0IsQ0FBQSxvQkFBQUUsQ0FBQSwrQ0FBQTBCLElBQUEsQ0FBQTFCLENBQUEsSUFBQW9CLGlCQUFBLENBQUF0QixDQUFBLEVBQUFrQixDQUFBO0FBQUEsU0FBQUksa0JBQUF0QixDQUFBLEVBQUFrQixDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBUSxNQUFBLE1BQUFVLENBQUEsR0FBQWxCLENBQUEsQ0FBQVEsTUFBQSxZQUFBUCxDQUFBLE1BQUFXLENBQUEsR0FBQVAsS0FBQSxDQUFBYSxDQUFBLEdBQUFqQixDQUFBLEdBQUFpQixDQUFBLEVBQUFqQixDQUFBLElBQUFXLENBQUEsQ0FBQVgsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsVUFBQVcsQ0FBQTtBQUFBLFNBQUFpQixXQUFBM0IsQ0FBQSxFQUFBZSxDQUFBLEVBQUFoQixDQUFBLFdBQUFnQixDQUFBLE9BQUFhLGdCQUFBLGFBQUFiLENBQUEsT0FBQWMsMkJBQUEsYUFBQTdCLENBQUEsRUFBQThCLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBakIsQ0FBQSxFQUFBaEIsQ0FBQSxZQUFBNkIsZ0JBQUEsYUFBQTVCLENBQUEsRUFBQXVCLFdBQUEsSUFBQVIsQ0FBQSxDQUFBa0IsS0FBQSxDQUFBakMsQ0FBQSxFQUFBRCxDQUFBO0FBQUEsU0FBQStCLDBCQUFBLGNBQUE5QixDQUFBLElBQUFrQyxPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBbEIsSUFBQSxDQUFBYSxPQUFBLENBQUFDLFNBQUEsQ0FBQUUsT0FBQSxpQ0FBQWxDLENBQUEsYUFBQThCLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUE5QixDQUFBO0FBQUEsU0FBQXFDLGNBQUFyQyxDQUFBLEVBQUFlLENBQUEsRUFBQWhCLENBQUEsRUFBQUQsQ0FBQSxRQUFBd0MsQ0FBQSxPQUFBQyxLQUFBLGlCQUFBWCxnQkFBQSxpQkFBQTlCLENBQUEsR0FBQUUsQ0FBQSxDQUFBbUMsU0FBQSxHQUFBbkMsQ0FBQSxHQUFBZSxDQUFBLEVBQUFoQixDQUFBLGNBQUFELENBQUEseUJBQUF3QyxDQUFBLGFBQUF0QyxDQUFBLFdBQUFzQyxDQUFBLENBQUFMLEtBQUEsQ0FBQWxDLENBQUEsRUFBQUMsQ0FBQSxPQUFBc0MsQ0FBQSxJQUZ0RDtBQUNBO0FBR0E7QUFDQTtBQUFBLElBQ01FLHVCQUF1QiwwQkFBQUMsZUFBQTtFQUFBLFNBQUFELHdCQUFBO0lBQUEsSUFBQUUsZ0JBQUEsbUJBQUFGLHVCQUFBO0lBQUEsT0FBQWIsVUFBQSxPQUFBYSx1QkFBQSxFQUFBRyxTQUFBO0VBQUE7RUFBQSxJQUFBQyxVQUFBLGFBQUFKLHVCQUFBLEVBQUFDLGVBQUE7RUFBQSxXQUFBSSxhQUFBLGFBQUFMLHVCQUFBO0lBQUFNLEdBQUE7SUFBQWxDLEtBQUEsRUFDM0IsU0FBQW1DLFFBQVFBLENBQUNDLFNBQVMsRUFBRTtNQUNsQixJQUFNQyxhQUFhLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQ2pDQyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLElBQUksQ0FBQ0MsTUFBTSxFQUFFQyxNQUFNLENBQUNOLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDdkRPLFdBQVcsQ0FBQyxDQUFDO01BRWhCLElBQU1DLEdBQUcsNkRBQUFDLE1BQUEsQ0FBNkRSLGFBQWEsTUFBRztNQUN0RixJQUFJLENBQUNTLFNBQVMsQ0FBQztRQUNiRixHQUFHLEVBQUhBLEdBQUc7UUFDSEcsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUFDLElBQUEsRUFBd0I7VUFBQSxJQUFuQkMsSUFBSSxHQUFBRCxJQUFBLENBQUpDLElBQUk7WUFBRUMsTUFBTSxHQUFBRixJQUFBLENBQU5FLE1BQU07VUFDckIsSUFBSSxDQUFDRCxJQUFJLElBQUlBLElBQUksQ0FBQ3ZELE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxLQUFLO1VBQ2Q7VUFDQSxJQUFNd0MsR0FBRyxHQUFHZ0IsTUFBTSxDQUFDLENBQUMsQ0FBQztVQUNyQixPQUFPQyxNQUFNLENBQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2YsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ25DO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7O0lBRUE7RUFBQTtJQUFBQSxHQUFBO0lBQUFsQyxLQUFBLEVBQ0EsU0FBQW9ELFNBQVNBLENBQUNoQixTQUFTLEVBQUVpQixNQUFNLEVBQUU7TUFDM0IsSUFBSSxDQUFDUCxTQUFTLENBQUM7UUFDYkYsR0FBRyxFQUNELDRGQUM2QyxvREFDSSxtQ0FBQUMsTUFBQSxDQUNqQixJQUFJLENBQUNQLFNBQVMsQ0FBQ0MsSUFBSSxDQUNqREgsU0FBUyxDQUFDTyxXQUFXLENBQUMsQ0FDeEIsQ0FBQyxNQUFHO1FBQ05JLE1BQU0sV0FBTkEsTUFBTUEsQ0FBQU8sS0FBQSxFQUFtQjtVQUFBLElBQWhCTCxJQUFJLEdBQUFLLEtBQUEsQ0FBSkwsSUFBSTtZQUFFQyxNQUFNLEdBQUFJLEtBQUEsQ0FBTkosTUFBTTtVQUNuQixJQUFNaEIsR0FBRyxHQUFHZ0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDSyxJQUFJLENBQUMsQ0FBQztVQUM1QixJQUFNQyxNQUFNLEdBQUdILE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLENBQUMsQ0FBQ0UsV0FBVyxDQUFDLENBQUM7VUFBQyxJQUFBQyxTQUFBLEdBQUF6RSwwQkFBQSxDQUN6QmdFLElBQUk7WUFBQVUsS0FBQTtVQUFBO1lBQXRCLEtBQUFELFNBQUEsQ0FBQTdELENBQUEsTUFBQThELEtBQUEsR0FBQUQsU0FBQSxDQUFBNUQsQ0FBQSxJQUFBQyxJQUFBLEdBQXdCO2NBQUEsSUFBYjZELEdBQUcsR0FBQUQsS0FBQSxDQUFBM0QsS0FBQTtjQUNaLElBQUk0RCxHQUFHLENBQUMxQixHQUFHLENBQUMsQ0FBQ3FCLElBQUksQ0FBQyxDQUFDLENBQUNFLFdBQVcsQ0FBQyxDQUFDLEtBQUtELE1BQU0sRUFBRTtnQkFDNUMsT0FBTyxJQUFJO2NBQ2I7WUFDRjtVQUFDLFNBQUFLLEdBQUE7WUFBQUgsU0FBQSxDQUFBdkUsQ0FBQSxDQUFBMEUsR0FBQTtVQUFBO1lBQUFILFNBQUEsQ0FBQXpELENBQUE7VUFBQTtVQUNELE9BQU8sS0FBSztRQUNkO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBaUMsR0FBQTtJQUFBbEMsS0FBQSxFQUVELFNBQUE4RCxhQUFhQSxDQUFBLEVBQUc7TUFDZCxJQUFNbEQsSUFBSSxHQUFBYSxhQUFBLENBQUFHLHVCQUFBLDZCQUF1QkcsU0FBUyxFQUFDO01BQzNDLE9BQU8sSUFBSSxDQUFDZ0MsTUFBTSxDQUFDQyxNQUFNLENBQUNDLFVBQVUsQ0FBQ0MsY0FBYyxHQUMvQ3RELElBQUksQ0FBQzZDLFdBQVcsQ0FBQyxDQUFDLEdBQ2xCN0MsSUFBSTtJQUNWO0VBQUM7SUFBQXNCLEdBQUE7SUFBQWxDLEtBQUEsRUFFRCxTQUFBbUUsaUJBQWlCQSxDQUFDL0IsU0FBUyxFQUFFO01BQzNCLElBQU1DLGFBQWEsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FDakNDLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUVMLFNBQVMsQ0FBQyxDQUFDLENBQy9DTyxXQUFXLENBQUMsQ0FBQztNQUNoQixJQUFNeUIsWUFBWSxHQUFHLElBQUksQ0FBQ0MsZUFBZSxHQUFHaEMsYUFBYTtNQUV6RCxJQUFJLENBQUNTLFNBQVMsNEdBQUFELE1BQUEsQ0FFd0RSLGFBQWEseUNBQUFRLE1BQUEsQ0FDNUR1QixZQUFZLHdCQUVsQyxDQUFDO01BRUYsT0FBTyxJQUFJO0lBQ2I7O0lBRUE7RUFBQTtJQUFBbEMsR0FBQTtJQUFBbEMsS0FBQSxFQUNBLFNBQUFzRSxXQUFXQSxDQUFDbEMsU0FBUyxFQUFFbUMsRUFBRSxFQUFFO01BQ3pCLE1BQU0sSUFBSUMsS0FBSyxJQUFBM0IsTUFBQSxDQUNWLElBQUksQ0FBQ2pDLElBQUksK0VBQ2QsQ0FBQztJQUNIO0VBQUM7QUFBQSxFQXRFbUM2RCxvQkFBYztBQXlFcEQsU0FBU2pDLGlCQUFpQkEsQ0FBQ2tDLE1BQU0sRUFBRUMsS0FBSyxFQUFFO0VBQ3hDLE9BQU9ELE1BQU0sTUFBQTdCLE1BQUEsQ0FBTTZCLE1BQU0sT0FBQTdCLE1BQUEsQ0FBSThCLEtBQUssSUFBS0EsS0FBSztBQUM5QztBQUVBL0MsdUJBQXVCLENBQUNMLFNBQVMsQ0FBQ3FELFNBQVMsR0FBRyxJQUFJO0FBQUMsSUFBQUMsUUFBQSxHQUFBQyxPQUFBLGNBRXBDbEQsdUJBQXVCIiwiaWdub3JlTGlzdCI6W119