Feature-rich ORM for modern Node.js and TypeScript, it supports PostgreSQL (with JSON and JSONB support), MySQL, MariaDB, SQLite, MS SQL Server, Snowflake, Oracle DB, DB2 and DB2 for IBM i.
This report summarizes scanner evidence for sequelize/sequelize, a TypeScript project with 30,346 GitHub stars. SynthScan examined 186,147 lines of code across 913 source files, recording 153 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 1.0 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 93 finding(s).
Are imports declared and package/API names verified? 60 finding(s).
Are wrappers, guards, and repeated structures necessary? 67 finding(s).
Which changes need focused human review? 153 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 153 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/test/unit/utils/undot.test.ts | 342 | 'profile.addresses[0].street': '123 Main St', | CODE |
| LOW | packages/core/test/unit/utils/undot.test.ts | 356 | { street: '123 Main St', city: 'NYC' }, | CODE |
| LOW | …es/core/test/integration/associations/has-many.test.js | 1390 | username: 'John Doe', | CODE |
| LOW | …kages/core/test/integration/data-types/methods.test.ts | 103 | await project.addStakeholder(user2, { through: { key: 'dummy-value' } }); | CODE |
| LOW | …/core/test/integration/include/findAndCountAll.test.js | 60 | { name: 'Jane Doe', fk: 1 }, | CODE |
| LOW | …/core/test/integration/include/findAndCountAll.test.js | 61 | { name: 'John Doe', fk: 4 }, | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 283 | await vars.User.create({ name: 'John Doe', age: 21 }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 292 | await User.update({ age: 22 }, { where: { name: 'John Doe' }, transaction }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 298 | const johnDoe = await User.findOne({ where: { name: 'John Doe' }, transaction }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 307 | expect(users[0].name).to.equal('John Doe'); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 314 | await User.create({ name: 'Jane Doe', age: 21 }, { transaction }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 346 | await User.update({ age: 22 }, { where: { name: 'John Doe' }, transaction: t1 }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 350 | const johnDoe = await User.findOne({ where: { name: 'John Doe' }, transaction }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 357 | const johnDoe = await User.findOne({ where: { name: 'John Doe' } }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 373 | await User.update({ age: 22 }, { where: { name: 'John Doe' }, transaction: t1 }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 377 | const johnDoe = await User.findOne({ where: { name: 'John Doe' }, transaction }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 384 | const johnDoe = await User.findOne({ where: { name: 'John Doe' } }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 400 | const johnDoe = await User.findOne({ where: { name: 'John Doe' }, transaction: t1 }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 402 | expect(johnDoe.name).to.equal('John Doe'); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 408 | await User.update({ age: 22 }, { where: { name: 'John Doe' }, transaction }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 412 | const johnDoe1 = await User.findOne({ where: { name: 'John Doe' }, transaction: t1 }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 414 | expect(johnDoe1.name).to.equal('John Doe'); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 452 | expect(users[0].name).to.equal('John Doe'); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 458 | await User.create({ name: 'Jane Doe', age: 21 }, { transaction }); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 464 | expect(users2[0].name).to.equal('John Doe'); | CODE |
| LOW⚡ | …es/core/test/integration/sequelize/transaction.test.ts | 466 | expect(users2[1].name).to.equal('Jane Doe'); | CODE |
| LOW | …es/core/test/integration/sequelize/transaction.test.ts | 329 | await User.create({ name: 'Jane Doe', age: 21 }); // Create a User outside of the transaction | CODE |
| LOW | …es/core/test/integration/sequelize/transaction.test.ts | 435 | await User.create({ name: 'Jane Doe', age: 21 }); // Create a User outside of the transaction | CODE |
| LOW | …es/core/test/integration/sequelize/transaction.test.ts | 488 | User.update({ age: 25 }, { where: { name: 'John Doe' } }).then(() => { | CODE |
| LOW | …ges/core/test/integration/dialects/mariadb/dao.test.js | 90 | email: 'foo@bar.com', | CODE |
| LOW | …ges/core/test/integration/dialects/mariadb/dao.test.js | 104 | email: 'foo@bar.com', | CODE |
| LOW | …ges/core/test/integration/dialects/mariadb/dao.test.js | 118 | const user0 = await User.create({ username: 'user', email: 'foo@bar.com', location: point }); | CODE |
| LOW | …e/test/integration/dialects/sqlite/dao-factory.test.js | 78 | name: 'John Doe', | CODE |
| LOW | …e/test/integration/dialects/sqlite/dao-factory.test.js | 96 | name: 'John Doe', | CODE |
| LOW | …e/test/integration/dialects/sqlite/dao-factory.test.js | 114 | name: 'John Doe', | CODE |
| LOW⚡ | …es/core/test/integration/dialects/postgres/dao.test.js | 548 | email: ['foo@bar.com', 'bar@baz.com'], | CODE |
| LOW⚡ | …es/core/test/integration/dialects/postgres/dao.test.js | 551 | expect(oldUser.email).to.contain.members(['foo@bar.com', 'bar@baz.com']); | CODE |
| LOW⚡ | …es/core/test/integration/dialects/postgres/dao.test.js | 557 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 611 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 631 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 644 | const data = { username: 'user', email: ['foo@bar.com'], settings: { test: '"value"' } }; | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 655 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 671 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 712 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 791 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 826 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 852 | const data = { username: 'user', email: ['foo@bar.com'], course_period }; | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 872 | const data = { username: 'user', email: ['foo@bar.com'], holidays }; | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 887 | await User.create({ username: 'user1', email: ['foo@bar.com'], course_period: periods[0] }); | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 912 | const user0 = await this.User.create({ username: 'user', email: ['foo@bar.com'] }); | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 929 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 941 | email: ['foo@bar.com'], | CODE |
| LOW | …es/core/test/integration/dialects/postgres/dao.test.js | 955 | const user0 = await User.create({ username: 'user', email: ['foo@bar.com'], location: point }); | CODE |
| LOW | packages/core/test/integration/model/upsert.test.js | 122 | await User.upsert({ name: 'John Doe' }); | CODE |
| LOW | packages/core/test/integration/model/create.test.js | 1156 | await User.create({ name: 'John Doe' }); | CODE |
| LOW | packages/core/test/integration/model/create.test.js | 1276 | const user = await User.create({ name: 'John Doe', options }); | CODE |
| LOW | packages/core/src/model.d.ts | 3330 | * @Default('John Doe') | COMMENT |
| LOW | packages/core/src/decorators/legacy/attribute.ts | 212 | * @Default('John Doe') | COMMENT |
| LOW | packages/cli/static/skeletons/seed.ts | 9 | * name: 'John Doe', | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/test/support.ts | 529 | function replaceGenericIdentifierQuotes(sql: string, dialect: AbstractDialect): string { | CODE |
| LOW | packages/core/test/support.ts | 709 | export function setIsIntegrationTestSuite(value: boolean): void { | CODE |
| LOW | packages/core/test/unit/utils/sql.test.ts | 1102 | function supportsNonStandardConformingStrings() { | CODE |
| LOW | packages/core/test/unit/utils/sql.test.ts | 1108 | function getNonStandardConfirmingStringDialect() { | CODE |
| LOW | packages/core/test/unit/sql/where.test.ts | 178 | function testSequelizeValueMethods( | CODE |
| LOW | packages/core/test/unit/sql/where.test.ts | 2832 | function describeAdjacentRangeSuite( | CODE |
| LOW | packages/core/test/integration/model.test.js | 1355 | function definePostReferencingMissingTable(context) { | CODE |
| LOW | packages/core/test/integration/json.test.ts | 89 | before(async function checkOracleVersionForJSONSupport(this: Mocha.Context) { | CODE |
| LOW | packages/core/test/integration/support.ts | 92 | export function destroySequelizeAfterTest(sequelizeInstance: Sequelize): void { | CODE |
| LOW | packages/core/test/integration/support.ts | 359 | export async function isOracleJSONConstraintsSupported(): Promise<boolean> { | CODE |
| LOW | …es/core/test/integration/data-types/data-types.test.ts | 1700 | before(async function checkOracleVersionForJSONSupport(this: Mocha.Context) { | CODE |
| LOW | …ges/core/test/integration/data-types/geography.test.ts | 14 | async function createUserModelWithGeography(type?: GeoJsonType, srid?: number) { | CODE |
| LOW | …ages/core/test/integration/data-types/geometry.test.ts | 20 | async function createUserModelWithGeometry(type?: GeoJsonType) { | CODE |
| LOW | packages/core/src/sql-string.ts | 7 | export function getTextDataTypeForDialect(dialect: AbstractDialect): AbstractDataType<any> { | CODE |
| LOW | packages/core/src/geo-json.ts | 149 | export function assertIsGeoJsonLineString(value: unknown): asserts value is GeoJsonLineString { | CODE |
| LOW | packages/core/src/geo-json.ts | 199 | export function assertIsGeoJsonMultiPoint(value: unknown): asserts value is GeoJsonMultiPoint { | CODE |
| LOW | packages/core/src/geo-json.ts | 220 | export function assertIsGeoJsonMultiLineString( | CODE |
| LOW | packages/core/src/geo-json.ts | 251 | export function assertIsGeoJsonMultiPolygon(value: unknown): asserts value is GeoJsonMultiPolygon { | CODE |
| LOW | packages/core/src/geo-json.ts | 288 | export function assertIsGeoJsonGeometryCollection( | CODE |
| LOW | packages/core/src/model-internals.ts | 208 | export function getPrimaryKeyValueOrThrow(instance: Model, attributeName: string): unknown { | CODE |
| LOW | packages/core/src/transaction.ts | 603 | export function normalizeTransactionOptions( | CODE |
| LOW | packages/core/src/transaction.ts | 628 | export function assertTransactionIsCompatibleWithOptions( | CODE |
| LOW | packages/core/src/transaction.ts | 660 | function assertSupportedTransactionOptions( | CODE |
| LOW | …l-internals/get-belongs-to-associations-with-target.ts | 9 | export function getBelongsToAssociationsWithTarget(target: ModelStatic): BelongsToAssociation[] { | CODE |
| LOW | packages/core/src/associations/helpers.ts | 145 | function getAssociationsIncompatibilityStatus( | CODE |
| LOW | packages/core/src/associations/helpers.ts | 168 | export function assertAssociationModelIsDefined(model: ModelStatic<any>): void { | CODE |
| LOW | packages/core/src/decorators/legacy/decorator-utils.ts | 100 | export function throwMustBeStaticProperty( | CODE |
| LOW | packages/core/src/decorators/legacy/decorator-utils.ts | 120 | export function throwMustBeInstanceProperty( | CODE |
| LOW | …ages/core/src/decorators/legacy/built-in-attributes.ts | 12 | function createBuiltInAttributeDecorator( | CODE |
| LOW | packages/core/src/decorators/legacy/associations.ts | 126 | export function initDecoratedAssociations(source: ModelStatic, sequelize: Sequelize): void { | CODE |
| LOW | packages/core/src/decorators/shared/model.ts | 67 | export function registerModelAttributeOptions( | CODE |
| LOW | packages/core/src/decorators/shared/model.ts | 177 | function getRegisteredModelOptions(model: ModelStatic): ModelOptions { | CODE |
| LOW | packages/core/src/decorators/shared/model.ts | 201 | function getRegisteredAttributeOptions(model: ModelStatic): RegisteredAttributeOptions { | CODE |
| LOW | packages/core/src/utils/sql.ts | 28 | function mapBindParametersAndReplacements( | CODE |
| LOW | packages/core/src/utils/sql.ts | 290 | function escapeValueWithBackCompat( | CODE |
| LOW | packages/core/src/utils/sql.ts | 380 | export function createUnspecifiedOrderedBindCollector(token = '?'): BindCollector { | CODE |
| LOW | packages/core/src/utils/sql.ts | 402 | export function createSpecifiedOrderedBindCollector(prefix = '$'): BindCollector { | CODE |
| LOW | packages/core/src/utils/sql.ts | 427 | export function createNamedParamBindCollector(parameterPrefix: string): BindCollector { | CODE |
| LOW | packages/core/src/utils/sql.ts | 514 | export function formatMySqlStyleLimitOffset( | CODE |
| LOW | packages/core/src/utils/attribute-syntax.ts | 174 | function parseAttributeSyntaxInternal( | CODE |
| LOW | packages/core/src/utils/attribute-syntax.ts | 268 | function parseJsonPropertyKeyInternal(code: string): ParsedJsonPropertyKey { | CODE |
| LOW | packages/core/src/utils/format.ts | 121 | export function removeNullishValuesFromHash( | CODE |
| LOW | packages/core/src/utils/check.ts | 80 | function getEnumerablePropertyValue(obj: object, propertyName: string): unknown { | CODE |
| LOW | packages/core/src/utils/check.ts | 142 | export function buildInvalidOptionReceivedError( | CODE |
| LOW | packages/core/src/utils/undot.ts | 253 | export function transformRowWithPrecompiled( | CODE |
| LOW | …ore/src/abstract-dialect/query-generator-typescript.ts | 85 | export function normalizeAttributeToSqlColumn(column: AttributeToSqlInput): AttributeToSqlColumn { | CODE |
| LOW | packages/core/src/abstract-dialect/data-types-utils.ts | 61 | export function dataTypeClassOrInstanceToInstance(Type: DataTypeClassOrInstance): DataTypeInstance { | CODE |
| LOW | packages/core/src/abstract-dialect/data-types-utils.ts | 115 | export function attributeTypeToDataTypeId(type: AbstractDataType<any> | string): string { | CODE |
| LOW | packages/core/src/abstract-dialect/query.ts | 145 | function getAttributeNameFromColumn(model: ModelStatic, columnOrAttribute: string): string { | CODE |
| LOW | packages/core/src/abstract-dialect/query.ts | 233 | function buildHashAttributeRowKeys( | CODE |
| LOW | packages/mariadb/src/connection-manager.ts | 23 | function ignoreErrorUntilInitialized() {} | CODE |
| LOW | packages/mariadb/src/_internal/data-types-db.ts | 12 | export function registerMariaDbDbDataTypeParsers(dialect: MariaDbDialect) { | CODE |
| LOW | …ckages/utils/src/common/parsers/parse-finite-number.ts | 7 | function parseFiniteNumberInternal(value: string | bigint): number | null { | CODE |
| LOW | …/src/common/comparators/localized-string-comparator.ts | 12 | export function localizedStringComparator( | CODE |
| LOW | packages/cli/src/api/get-umzug.ts | 40 | async function getUniversalUmzugMigrations(): Promise<Array<RunnableMigration<UmzugContext>>> { | CODE |
| LOW | packages/postgres/src/connection-manager.ts | 25 | function ignoreErrorUntilInitialized() {} | CODE |
| LOW | packages/postgres/src/_internal/data-types-db.ts | 16 | export function registerPostgresDbDataTypeParsers(dialect: PostgresDialect) { | CODE |
| LOW | packages/postgres/src/_internal/data-types-overrides.ts | 18 | function removeUnsupportedIntegerOptions( | CODE |
| LOW | packages/sqlite3/src/_internal/data-types-overrides.ts | 6 | function removeUnsupportedIntegerOptions( | CODE |
| LOW | packages/sqlite3/src/_internal/data-types-overrides.ts | 18 | function removeUnsupportedDecimalNumberOptions( | CODE |
| 7 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/test/unit/associations/has-many.test.ts | 161 | // TODO: remove this eslint-disable once we drop support for TypeScript <= 5.3 | COMMENT |
| LOW | packages/core/test/unit/decorators/associations.test.ts | 41 | expect(Profile.associations.user1.foreignKey).to.eq('userId'); | COMMENT |
| LOW | packages/core/test/unit/sql/literal.test.ts | 61 | }); | COMMENT |
| LOW | …kages/core/test/integration/hooks/associations.test.js | 81 | COMMENT | |
| LOW | …kages/core/test/integration/hooks/associations.test.js | 101 | // this.Projects.hasOne(this.Tasks, { foreignKey: { onDelete: 'CASCADE' }, hooks: true }); | COMMENT |
| LOW | …kages/core/test/integration/hooks/associations.test.js | 121 | // expect(beforeProject).to.have.been.calledOnce; | COMMENT |
| LOW | …kages/core/test/integration/hooks/associations.test.js | 141 | // | COMMENT |
| LOW | …kages/core/test/integration/hooks/associations.test.js | 281 | // }); | COMMENT |
| LOW | …kages/core/test/integration/hooks/associations.test.js | 301 | // this.Projects.afterCreate(afterProject); | COMMENT |
| LOW | …kages/core/test/integration/hooks/associations.test.js | 321 | // this.Projects.beforeCreate(async () => { | COMMENT |
| LOW | …kages/core/test/integration/hooks/associations.test.js | 341 | // | COMMENT |
| LOW | packages/core/test/integration/model/findOne.test.js | 321 | COMMENT | |
| LOW | packages/core/src/model-repository.ts | 201 | throw new Error( | COMMENT |
| LOW | packages/postgres/src/_internal/data-types-db.ts | 81 | COMMENT | |
| LOW | packages/sqlite3/src/query-generator.js | 81 | // if (typeof indexName !== 'string') { | COMMENT |
| LOW | .github/workflows/ci.yml | 321 | - name: Integration Tests | COMMENT |
| LOW | .github/workflows/ci.yml | 341 | # cache: yarn | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | packages/core/test/integration/sequelize/query.test.js | 495 | ).to.eventually.be.rejected.and.not.be.an.instanceOf(DatabaseError); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/core/src/abstract-dialect/query-interface-internal.ts | 103 | * Returns whether {@link AbstractQueryInterface#changeColumn} needs to add a unique key to the column, as requested b | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/src/sequelize-typescript.ts | 1013 | * If you really want to use the manual solution, don't forget to commit or rollback your transaction once you are don | COMMENT |
| LOW | packages/core/src/model.js | 160 | * @param {symbol} secret Secret used to ensure Model.build is used instead of new Model(). Don't forget to pass it u | COMMENT |
| LOW | …ore/src/abstract-dialect/query-interface-typescript.ts | 767 | * Don't forget to turn them back on, use {@link withoutForeignKeyChecks} to do this automatically. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/src/model-repository.ts | 112 | // TODO: implement once updateMany is implemented - https://github.com/sequelize/sequelize/issues/4501 | COMMENT |
| LOW | packages/core/src/model-repository.ts | 299 | // TODO: implement once bulkUpdate is implemented | COMMENT |
| LOW | packages/core/src/model-repository.ts | 304 | // TODO: implement once bulkUpdate is implemented | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …kages/mssql/src/query-generator-typescript.internal.ts | 462 | // definitions. Can be made more robust to support the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/authors.yml | 30 | - uses: gr2m/create-or-update-pull-request-action@b65137ca591da0b9f43bad7b24df13050ea45d1b # Create a PR or update | CODE |