Halloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run ScanHalloween DealsAmazon USOctober picks are moving - compare before checkoutAmazon US: current deals, useful picks and tech finds.See Picks×
FREEDOM251

Freedom251 › Blog › AI-generated code

How to Review AI-Generated Code for Bugs, Security Issues, and Maintainability

By Freedom251 Team · · 13 min read

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Treat AI-generated code as an untrusted draft, not a finished change. Before it is merged or released, define the behavior you expect, run it in an isolated environment, inspect normal and failure paths, test security boundaries, audit dependencies, run automated analysis, and have a qualified human approve the residual risk. A tool can accelerate implementation; it cannot accept responsibility for the result.

Why AI-written code needs a different review posture

Code produced by a chatbot or coding assistant can compile, pass a small example, and still violate an authorization rule, mishandle a boundary value, leak sensitive data, or introduce a dependency that is obsolete or nonexistent. The model is optimizing for a plausible completion of the prompt, not for your system’s complete contract, threat model, operational limits, or long-term design.

As an Amazon Associate I earn from qualifying purchases.

The right question is not “Does this look reasonable?” It is “What behavior is required, what could go wrong, and what evidence shows that this change is safe to keep?” Human accountability remains essential. The OWASP Secure Coding with AI Cheat Sheet states that every AI-assisted change should be reviewed, approved, and attributable to a developer responsible for its security and maintainability.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Preserve the prompt, model or assistant used, generated diff, and subsequent edits so reviewers know the change’s provenance.
  • Review the code in the context of callers, data stores, configuration, deployment, and existing security controls; an isolated snippet rarely reveals its real impact.
  • Demand evidence: tests, static-analysis results, dependency decisions, and a written explanation of unresolved risk.

Start by writing the contract

Do not begin with line-by-line style comments. First describe what the feature must do and what it must never do. This prevents a polished implementation from defining its own requirements.

#1 Best Overall
Sale
TOZO A1 Wireless Earbuds Bluetooth 5.3 Light Weight in Ear Headphones | IPX5 Waterproof,2 Mics for AI Calls,Immersive Premium Sound Bass Headset with Charging Case,32 EQ via App Black
  • [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
  • [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
  • [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
  • [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
  • [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.

Acceptance criteria

  • List supported inputs, output formats, side effects, and the states in which the operation is allowed.
  • Define authentication and authorization rules separately. “The user is logged in” is not the same as “the user may read this particular record.”
  • Specify failure behavior: status codes or error types, retry policy, transaction rollback, user-visible messages, and what gets logged.
  • Record performance expectations such as latency, throughput, memory limits, and maximum payload size.
  • State compatibility requirements for supported language, framework, database, operating-system, and API versions.

Turn the contract into tests

Write tests for the happy path before judging the implementation, then add cases for rejected input, missing resources, duplicate requests, timeouts, partial failure, and permission boundaries. Include examples that distinguish two users or tenants; otherwise an access-control defect can remain invisible while every test passes.

For an API endpoint, the contract should answer: which identity is required, which resource owner is permitted, how malformed JSON is handled, what happens when the downstream service is unavailable, and whether repeating the request is safe. These answers become review checkpoints rather than assumptions inferred from generated code.

Run the generated code in a controlled environment

Execute an AI-generated change only in a disposable branch, container, virtual machine, or other sandbox appropriate to its privileges. Use synthetic or scrubbed data and credentials that can do only what the test requires. Never paste production secrets into a prompt or expose live databases merely to make a generated example work.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Isolation checklist

  • Use a separate branch and a clean working tree so the exact generated diff is reviewable and reversible.
  • Provide least-privilege test credentials; deny administrative, production, and unrelated network access.
  • Restrict outbound connections when testing code that handles files, URLs, plugins, or generated commands. Record any endpoint the program attempts to contact.
  • Use fixtures containing fake tokens, names, and records. Verify that logs, traces, crash reports, and temporary files do not contain real personal or secret data.
  • Set resource limits and timeouts. A loop, query, regular expression, or worker that is harmless on a small fixture may exhaust CPU, memory, connections, or disk at production scale.
  • Capture dependency installation output, build commands, test commands, and runtime warnings so another reviewer can reproduce the result.

What a safe first run should reveal

The first run is for observation, not proof of correctness. Note files read and written, network requests, child processes, environment variables, database migrations, queue messages, and changes to permissions. Unexpected side effects are findings even when the requested feature appears to work.

Review the diff in context for correctness

Read the complete diff, then follow every changed function to its callers and data sources. Generated code often copies a locally sensible pattern that conflicts with a repository convention or with assumptions elsewhere in the system.

Rank #2
Sale
Smart Watch for Men Women Compatible with iPhone Samsung Android Phone 1.69 inch Full Touch Screen IP68 Waterproof Bluetooh Fitness Tracker Heart Rate/Sleep Monitor (Black)
  • 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
  • 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
  • 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
  • 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
  • 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.

Trace normal and failure paths

  • Follow valid input from parsing through validation, business rules, persistence, response construction, and cleanup.
  • Follow invalid input, missing records, stale state, downstream errors, cancellation, and process restart. Confirm that errors are neither swallowed nor converted into misleading success.
  • Check whether a failure after a partial write leaves a transaction, file, lock, job, or cache in an inconsistent state.
  • Verify that resources are released on every path: connections, file handles, goroutines or threads, temporary files, and subscriptions.

Exercise boundary values

Test empty, null, negative, maximum, and just-over-the-limit values. Include Unicode and unusual encodings, long strings, duplicate keys, large collections, daylight-saving transitions, leap days, and timestamps from different time zones. Check integer overflow, floating-point rounding, pagination at the first and last page, and an item deleted between read and update.

Check concurrency, retries, and idempotency

Ask what happens when two requests update the same record, when a worker receives the same message twice, or when a timeout occurs after the server has committed the operation. Generated retry loops can duplicate charges, emails, or jobs unless the operation has an idempotency key or a transactionally safe design. Inspect lock scope, isolation level, race detection, cancellation propagation, and backoff limits.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Verify time, locale, and encoding assumptions

Use explicit time zones and unambiguous storage formats. Confirm that comparisons use instants rather than local display strings, and that daylight-saving changes cannot shorten or extend a security window unexpectedly. Validate encoding at boundaries and ensure normalization does not turn two distinct identifiers into the same key.

Add regression tests for every defect

When review finds a bug, first reproduce it with a failing test, then fix the implementation and keep the test. Add tests for requirements the generated code omitted, not only for the exact example that exposed the problem. A passing suite is meaningful only when it represents the contract and the newly discovered edge cases.

Inspect security boundaries before trusting behavior

Security review must be explicit; a clean build or test run does not establish that an attacker cannot cross a boundary. The OWASP Secure Code Review Cheat Sheet emphasizes manual analysis for business logic and context-specific vulnerabilities that automated tools miss.

Rank #3
Sale
New Bee Guitar Cable 10ft Electric Instrument Bass AMP Cord | 6.35mm Jack, Durable Design, Stage and Home Studio Use, Low Noise Shielded Electric Cord for Bass, Keyboard, Amp, Mixer
  • [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
  • [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
  • [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
  • [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
  • [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by

Identity and authorization

  • Locate where identity is established and where authorization is checked. Ensure every read, write, export, administrative action, and background job enforces the rule, not just the user-facing route.
  • Check object-level authorization with two accounts and two tenants. A user should not gain access by changing an identifier, selecting a different workspace, or replaying a valid request.
  • Verify session expiration, token audience and issuer, algorithm handling, password-reset flows, and protection against privilege escalation. Never accept a role or user ID solely from client input.

Input validation and injection

  • Validate type, length, range, format, and allowed values at the trust boundary; use allowlists where the domain is finite.
  • Use parameterized database queries and safe APIs for shell commands, templates, LDAP, XML, regular expressions, and browser output. Escaping for one context is not safe for another.
  • Review file names and archive extraction for path traversal, symlink escapes, unsafe temporary-file permissions, and unrestricted upload size or type.
  • For URLs supplied by users, restrict schemes, hosts, ports, redirects, and resolved IP ranges. Recheck after DNS resolution to reduce server-side request forgery risk.

Secrets and cryptography

  • Search source, configuration, fixtures, logs, and generated documentation for API keys, private keys, passwords, and tokens. Load secrets from an approved secret store or protected runtime configuration.
  • Confirm that cryptographic operations use a maintained library and a documented protocol, with authenticated encryption, secure randomness, safe key storage, and rotation procedures.
  • Check that sensitive values are redacted from exceptions, metrics, URLs, analytics events, and debug output. Error messages should help operators without giving attackers credentials or internal topology.

Deserialization, files, and process execution

Reject untrusted serialized objects unless the format and types are strictly constrained. Treat archives, images, documents, and plugins as hostile input. If generated code invokes a process, inspect argument construction, environment inheritance, working directory, executable selection, timeouts, and output handling; avoid passing a shell command assembled from user data.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Dependencies and supply chain

AI assistants may suggest outdated versions or package names that do not exist. Confirm every dependency in the package registry, pin or constrain versions according to repository policy, inspect its license and transitive dependencies, and review the lockfile diff. The OWASP AI secure-coding guidance specifically recommends auditing dependencies proposed by AI.

Automate the checks that should be repeatable

Run the same commands locally and in pull-request CI so results are reproducible. The OWASP DevSecOps secure-code-review guidance recommends combining static analysis, software-composition analysis, and secret scanning on pull requests. These checks narrow the search; a clean scan is the beginning of review, not proof that business logic or authorization is correct.

Check Finds well Does not establish Reviewer action
Unit, integration, and property tests Behavioral regressions, contract violations, and repeatable edge cases Untested paths, realistic production load, or complete threat coverage Compare coverage with the contract and add tests for every high-risk branch.
Linting and type checking Invalid constructs, suspicious patterns, and interface mismatches Correct business decisions or safe data flow Fix errors; document intentional exceptions instead of broadly suppressing rules.
SAST Known insecure patterns and some tainted data flows Context-specific authorization and novel logic flaws Trace each high-severity result to source and assess exploitability manually.
SCA and dependency review Known vulnerabilities, version drift, and transitive package changes Malicious new code with no published advisory or whether a dependency is needed Verify package identity, version, provenance, license, and least-privilege use.
Secret scanning Credentials matching known formats or repositories Every secret, especially custom tokens or values transformed before commit Revoke exposed credentials, remove them from history where required, and replace them safely.
Runtime and quality analysis Resource behavior, selected data flows, naming, and design signals All production traffic and semantic correctness Use results to focus review, not to waive human approval.

For repositories using GitHub’s analysis features, its documentation describes deterministic findings and AI-powered findings for issues such as naming and design considerations; see Fixing code quality findings. Treat explanations as review aids and verify the underlying code rather than accepting a suggested fix automatically.

Judge maintainability, not just immediate correctness

Generated code can be functionally correct yet expensive to own. Compare it with the repository’s established patterns and ask whether the next developer can safely change it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
BSIMB 15.6" Digital Family Calendar & Chore Chart, No Subscription Fees
  • Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
  • Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
  • All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
  • Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
  • Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
Dimension Questions to ask Evidence of a healthy change
Naming and cohesion Do names express domain meaning? Does each function have one clear responsibility? Small, focused units whose names match their inputs, outputs, and side effects.
Duplication and complexity Did generation copy similar logic or add deep nesting and hidden state? Shared rules have one source of truth; branches are understandable and measurable.
Error handling Are errors typed, actionable, and preserved across layers? Expected failures are handled deliberately; unexpected failures retain context and reach monitoring.
Tests and documentation Can a maintainer learn the invariant and change it without reverse-engineering the prompt? Tests state behavior, comments explain why, and public interfaces document assumptions.
Observability Can operators detect latency, failure rate, retries, and abuse without logging secrets? Metrics, structured logs, traces, and alerts cover important outcomes with bounded cardinality.
Dependencies and conventions Does the change fit the project’s supported versions, architecture, and deployment model? No unnecessary package, configuration, framework, or abstraction is introduced.

Remove verbose comments that merely restate syntax. Keep comments that explain a security invariant, compatibility constraint, non-obvious algorithm, or deliberate trade-off. If a generated abstraction adds indirection without reducing duplication or risk, simplify it before merge.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Choose review tools by the risk they cover

No single scanner is a substitute for another. Compare options on the dimensions that affect your repository rather than on a headline “AI-powered” label.

Comparison axis What to verify
Vulnerability and language coverage Which languages, frameworks, IaC formats, databases, and dependency ecosystems are analyzed, and how often rules are updated?
False positives and explanations Can a reviewer see the source-to-sink path, confidence, remediation rationale, and a durable way to suppress a verified false positive?
Integration Does it run in pull requests, CI/CD, pre-commit hooks, IDEs, or scheduled scans with status checks that enforce policy?
Semantic depth Does analysis follow data and control flow across files, or only match text patterns? What runtime or framework models are available?
Cost and maintenance What compute, licensing, rule-tuning, triage, and upgrade work will the team own?
Privacy and deployment Is source code retained, used for training, or sent to a third party? Are self-hosted or data-residency options available?

Use a layered pipeline: fast local checks for feedback, comprehensive pull-request analysis for every change, and deeper scheduled or pre-release assessment for the complete system. Keep the configuration versioned so a future reviewer can reproduce which rules were active.

Apply a release gate before merge or deployment

Define the gate in repository policy, not in an informal request for “a quick look.” The OWASP AISVS Appendix C calls for qualified human review of AI-generated code and mandatory security gates throughout the lifecycle.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Identify provenance. Record that assistance was used, the generated commit or diff, and the developer accountable for the final change.
  2. Confirm the contract. Link acceptance criteria and tests to the changed behavior, including authorization and failure cases.
  3. Review the implementation. Have a qualified reviewer trace data flow, concurrency, cleanup, error handling, and security boundaries in context.
  4. Run automated checks. Attach test, lint, type, SAST, SCA, secret-scan, and quality-analysis results. Investigate failures instead of hiding them with blanket exclusions.
  5. Resolve high-impact findings. Fix or formally accept each high-risk bug, vulnerability, dependency concern, and privacy issue before release. A suppression needs an owner, reason, scope, and review date.
  6. Document residual risk and operations. Note assumptions, monitoring, rollback steps, migration order, feature flags, and what would trigger an incident response.
  7. Approve and merge. The accountable human reviewer—not the model and not a green scanner—authorizes the change.

A practical review example: an AI-generated account endpoint

Suppose an assistant creates GET /accounts/{id}. A superficial review might check that it returns a record for a valid ID. A complete review asks the following in order:

  • Does the route require an authenticated identity, and is the account owner or an explicitly permitted administrator checked against the path ID?
  • Are malformed, negative, oversized, or specially encoded IDs rejected before they reach the database?
  • Is the query parameterized, and does it select only fields the caller may see rather than returning password hashes, recovery data, or internal notes?
  • What status is returned for a missing account, an unauthorized account, and a database timeout? Could those responses reveal whether another user’s account exists?
  • Are audit events useful without recording tokens or personal data? Are repeated requests rate-limited and observable?
  • Do tests cover two users, two tenants, deleted records, concurrent updates, and a database failure?

If the endpoint passes those checks, the reviewer still examines the dependency diff, generated SQL, serialization behavior, logging, metrics, and repository conventions. The example illustrates why functional output alone cannot establish authorization or privacy.

Common review failures and how to recover

“It passed the sample test”

Replace the sample with contract tests covering rejected input, permissions, retries, and boundaries. If the requirement is unclear, stop the merge and clarify it rather than guessing.

“The scanner is clean”

Read the changed code manually, especially business rules and data access. Verify that the scanners covered the languages, generated files, dependencies, and configuration actually used. A clean result cannot prove that the wrong user is denied or that a transaction is correct.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

“The model used a popular package”

Check the exact package name and version in the registry and lockfile. Remove a package that is unnecessary, unmaintained, incompatible, or broader than the required capability; then rerun composition and license checks.

“The diff is too large to understand”

Ask for a smaller, single-purpose change. Split mechanical formatting, generated files, migrations, and behavior changes into reviewable commits. Require tests and explanations for each part.

“A reviewer found a vulnerability after release”

Contain the affected feature, revoke or rotate exposed credentials, preserve evidence, patch and test the defect, and add a regression rule or test. Update the prompt, checklist, or pipeline that allowed the issue so the same class of error is less likely to recur.

Team practices that make AI-assisted review dependable

  • Maintain a repository checklist covering authentication, authorization, input validation, injection, secrets, dependencies, logging, and data retention.
  • Require small pull requests with a description of intended behavior, AI assistance used, tests run, and known limitations.
  • Train reviewers to read data-flow and business logic, not only scanner alerts. Rotate qualified reviewers for high-risk areas such as identity, payments, cryptography, and infrastructure.
  • Keep prompts and generated output out of source control when they contain confidential material, but preserve enough provenance to attribute the final change.
  • Measure escaped defects, reopened findings, review time, and false-positive burden. Use those signals to tune rules and training rather than relaxing the gate after a single noisy scan.
  • Reassess model, assistant, dependency, and scanner versions under the same change-management process used for other development tools.

Final pre-merge checklist

  • Requirements, supported inputs, authorization rules, failure behavior, and performance limits are written down.
  • Tests cover normal behavior, boundaries, concurrency, retries, time zones, encoding, and negative permissions.
  • The code ran with synthetic data, least privilege, controlled network access, resource limits, and no production secrets.
  • The diff was traced through callers, storage, configuration, deployment, and cleanup paths.
  • Authentication, authorization, injection, path traversal, SSRF, command execution, cryptography, deserialization, secrets, logs, and sensitive-data handling were checked.
  • Dependencies were verified, versioned, scanned, and justified.
  • Tests, lint, types, SAST, SCA, secret scanning, and quality checks ran in reproducible CI.
  • Maintainability, observability, documentation, and repository conventions were evaluated.
  • High-impact findings are fixed or explicitly accepted with an owner and review date.
  • A qualified human approved the change and is accountable for its security and maintainability.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

AI-generated codecode reviewDevSecOpssecure codingsoftware maintainabilitysoftware security

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.