UNPKG

geolite

Version:

A lightweight geo data toolkit with countries, states, cities, timezones, currencies, and dialing codes. Works with Prisma and SQLite.

14,621 lines 540 kB
/**
 * Client
**/

import * as runtime from './runtime/library.js';
import $Types = runtime.Types // general types
import $Public = runtime.Types.Public
import $Utils = runtime.Types.Utils
import $Extensions = runtime.Types.Extensions
import $Result = runtime.Types.Result

export type PrismaPromise<T> = $Public.PrismaPromise<T>


/**
 * Model Country
 * 
 */
export type Country = $Result.DefaultSelection<Prisma.$CountryPayload>
/**
 * Model State
 * 
 */
export type State = $Result.DefaultSelection<Prisma.$StatePayload>
/**
 * Model City
 * 
 */
export type City = $Result.DefaultSelection<Prisma.$CityPayload>
/**
 * Model Timezone
 * 
 */
export type Timezone = $Result.DefaultSelection<Prisma.$TimezonePayload>
/**
 * Model CountryTimezone
 * 
 */
export type CountryTimezone = $Result.DefaultSelection<Prisma.$CountryTimezonePayload>
/**
 * Model StateTimezone
 * 
 */
export type StateTimezone = $Result.DefaultSelection<Prisma.$StateTimezonePayload>
/**
 * Model Currency
 * 
 */
export type Currency = $Result.DefaultSelection<Prisma.$CurrencyPayload>
/**
 * Model DialingCode
 * 
 */
export type DialingCode = $Result.DefaultSelection<Prisma.$DialingCodePayload>

/**
 * ##  Prisma Client ʲˢ
 *
 * Type-safe database client for TypeScript & Node.js
 * @example
 * ```
 * const prisma = new PrismaClient()
 * // Fetch zero or more Countries
 * const countries = await prisma.country.findMany()
 * ```
 *
 *
 * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
 */
export class PrismaClient<
  ClientOptions extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,
  U = 'log' extends keyof ClientOptions ? ClientOptions['log'] extends Array<Prisma.LogLevel | Prisma.LogDefinition> ? Prisma.GetEvents<ClientOptions['log']> : never : never,
  ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs
> {
  [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['other'] }

    /**
   * ##  Prisma Client ʲˢ
   *
   * Type-safe database client for TypeScript & Node.js
   * @example
   * ```
   * const prisma = new PrismaClient()
   * // Fetch zero or more Countries
   * const countries = await prisma.country.findMany()
   * ```
   *
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
   */

  constructor(optionsArg ?: Prisma.Subset<ClientOptions, Prisma.PrismaClientOptions>);
  $on<V extends U>(eventType: V, callback: (event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent) => void): PrismaClient;

  /**
   * Connect with the database
   */
  $connect(): $Utils.JsPromise<void>;

  /**
   * Disconnect from the database
   */
  $disconnect(): $Utils.JsPromise<void>;

  /**
   * Add a middleware
   * @deprecated since 4.16.0. For new code, prefer client extensions instead.
   * @see https://pris.ly/d/extensions
   */
  $use(cb: Prisma.Middleware): void

/**
   * Executes a prepared raw query and returns the number of affected rows.
   * @example
   * ```
   * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`
   * ```
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $executeRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<number>;

  /**
   * Executes a raw query and returns the number of affected rows.
   * Susceptible to SQL injections, see documentation.
   * @example
   * ```
   * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com')
   * ```
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $executeRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<number>;

  /**
   * Performs a prepared raw query and returns the `SELECT` data.
   * @example
   * ```
   * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`
   * ```
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $queryRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<T>;

  /**
   * Performs a raw query and returns the `SELECT` data.
   * Susceptible to SQL injections, see documentation.
   * @example
   * ```
   * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com')
   * ```
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $queryRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<T>;


  /**
   * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole.
   * @example
   * ```
   * const [george, bob, alice] = await prisma.$transaction([
   *   prisma.user.create({ data: { name: 'George' } }),
   *   prisma.user.create({ data: { name: 'Bob' } }),
   *   prisma.user.create({ data: { name: 'Alice' } }),
   * ])
   * ```
   * 
   * Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions).
   */
  $transaction<P extends Prisma.PrismaPromise<any>[]>(arg: [...P], options?: { isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise<runtime.Types.Utils.UnwrapTuple<P>>

  $transaction<R>(fn: (prisma: Omit<PrismaClient, runtime.ITXClientDenyList>) => $Utils.JsPromise<R>, options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise<R>


  $extends: $Extensions.ExtendsHook<"extends", Prisma.TypeMapCb<ClientOptions>, ExtArgs, $Utils.Call<Prisma.TypeMapCb<ClientOptions>, {
    extArgs: ExtArgs
  }>>

      /**
   * `prisma.country`: Exposes CRUD operations for the **Country** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Countries
    * const countries = await prisma.country.findMany()
    * ```
    */
  get country(): Prisma.CountryDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.state`: Exposes CRUD operations for the **State** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more States
    * const states = await prisma.state.findMany()
    * ```
    */
  get state(): Prisma.StateDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.city`: Exposes CRUD operations for the **City** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Cities
    * const cities = await prisma.city.findMany()
    * ```
    */
  get city(): Prisma.CityDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.timezone`: Exposes CRUD operations for the **Timezone** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Timezones
    * const timezones = await prisma.timezone.findMany()
    * ```
    */
  get timezone(): Prisma.TimezoneDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.countryTimezone`: Exposes CRUD operations for the **CountryTimezone** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more CountryTimezones
    * const countryTimezones = await prisma.countryTimezone.findMany()
    * ```
    */
  get countryTimezone(): Prisma.CountryTimezoneDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.stateTimezone`: Exposes CRUD operations for the **StateTimezone** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more StateTimezones
    * const stateTimezones = await prisma.stateTimezone.findMany()
    * ```
    */
  get stateTimezone(): Prisma.StateTimezoneDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.currency`: Exposes CRUD operations for the **Currency** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Currencies
    * const currencies = await prisma.currency.findMany()
    * ```
    */
  get currency(): Prisma.CurrencyDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.dialingCode`: Exposes CRUD operations for the **DialingCode** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more DialingCodes
    * const dialingCodes = await prisma.dialingCode.findMany()
    * ```
    */
  get dialingCode(): Prisma.DialingCodeDelegate<ExtArgs, ClientOptions>;
}

export namespace Prisma {
  export import DMMF = runtime.DMMF

  export type PrismaPromise<T> = $Public.PrismaPromise<T>

  /**
   * Validator
   */
  export import validator = runtime.Public.validator

  /**
   * Prisma Errors
   */
  export import PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError
  export import PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError
  export import PrismaClientRustPanicError = runtime.PrismaClientRustPanicError
  export import PrismaClientInitializationError = runtime.PrismaClientInitializationError
  export import PrismaClientValidationError = runtime.PrismaClientValidationError

  /**
   * Re-export of sql-template-tag
   */
  export import sql = runtime.sqltag
  export import empty = runtime.empty
  export import join = runtime.join
  export import raw = runtime.raw
  export import Sql = runtime.Sql



  /**
   * Decimal.js
   */
  export import Decimal = runtime.Decimal

  export type DecimalJsLike = runtime.DecimalJsLike

  /**
   * Metrics
   */
  export type Metrics = runtime.Metrics
  export type Metric<T> = runtime.Metric<T>
  export type MetricHistogram = runtime.MetricHistogram
  export type MetricHistogramBucket = runtime.MetricHistogramBucket

  /**
  * Extensions
  */
  export import Extension = $Extensions.UserArgs
  export import getExtensionContext = runtime.Extensions.getExtensionContext
  export import Args = $Public.Args
  export import Payload = $Public.Payload
  export import Result = $Public.Result
  export import Exact = $Public.Exact

  /**
   * Prisma Client JS version: 6.10.1
   * Query Engine version: 9b628578b3b7cae625e8c927178f15a170e74a9c
   */
  export type PrismaVersion = {
    client: string
  }

  export const prismaVersion: PrismaVersion

  /**
   * Utility Types
   */


  export import JsonObject = runtime.JsonObject
  export import JsonArray = runtime.JsonArray
  export import JsonValue = runtime.JsonValue
  export import InputJsonObject = runtime.InputJsonObject
  export import InputJsonArray = runtime.InputJsonArray
  export import InputJsonValue = runtime.InputJsonValue

  /**
   * Types of the values used to represent different kinds of `null` values when working with JSON fields.
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  namespace NullTypes {
    /**
    * Type of `Prisma.DbNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.DbNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class DbNull {
      private DbNull: never
      private constructor()
    }

    /**
    * Type of `Prisma.JsonNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.JsonNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class JsonNull {
      private JsonNull: never
      private constructor()
    }

    /**
    * Type of `Prisma.AnyNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.AnyNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class AnyNull {
      private AnyNull: never
      private constructor()
    }
  }

  /**
   * Helper for filtering JSON entries that have `null` on the database (empty on the db)
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  export const DbNull: NullTypes.DbNull

  /**
   * Helper for filtering JSON entries that have JSON `null` values (not empty on the db)
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  export const JsonNull: NullTypes.JsonNull

  /**
   * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  export const AnyNull: NullTypes.AnyNull

  type SelectAndInclude = {
    select: any
    include: any
  }

  type SelectAndOmit = {
    select: any
    omit: any
  }

  /**
   * Get the type of the value, that the Promise holds.
   */
  export type PromiseType<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? U : T;

  /**
   * Get the return type of a function which returns a Promise.
   */
  export type PromiseReturnType<T extends (...args: any) => $Utils.JsPromise<any>> = PromiseType<ReturnType<T>>

  /**
   * From T, pick a set of properties whose keys are in the union K
   */
  type Prisma__Pick<T, K extends keyof T> = {
      [P in K]: T[P];
  };


  export type Enumerable<T> = T | Array<T>;

  export type RequiredKeys<T> = {
    [K in keyof T]-?: {} extends Prisma__Pick<T, K> ? never : K
  }[keyof T]

  export type TruthyKeys<T> = keyof {
    [K in keyof T as T[K] extends false | undefined | null ? never : K]: K
  }

  export type TrueKeys<T> = TruthyKeys<Prisma__Pick<T, RequiredKeys<T>>>

  /**
   * Subset
   * @desc From `T` pick properties that exist in `U`. Simple version of Intersection
   */
  export type Subset<T, U> = {
    [key in keyof T]: key extends keyof U ? T[key] : never;
  };

  /**
   * SelectSubset
   * @desc From `T` pick properties that exist in `U`. Simple version of Intersection.
   * Additionally, it validates, if both select and include are present. If the case, it errors.
   */
  export type SelectSubset<T, U> = {
    [key in keyof T]: key extends keyof U ? T[key] : never
  } &
    (T extends SelectAndInclude
      ? 'Please either choose `select` or `include`.'
      : T extends SelectAndOmit
        ? 'Please either choose `select` or `omit`.'
        : {})

  /**
   * Subset + Intersection
   * @desc From `T` pick properties that exist in `U` and intersect `K`
   */
  export type SubsetIntersection<T, U, K> = {
    [key in keyof T]: key extends keyof U ? T[key] : never
  } &
    K

  type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };

  /**
   * XOR is needed to have a real mutually exclusive union type
   * https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types
   */
  type XOR<T, U> =
    T extends object ?
    U extends object ?
      (Without<T, U> & U) | (Without<U, T> & T)
    : U : T


  /**
   * Is T a Record?
   */
  type IsObject<T extends any> = T extends Array<any>
  ? False
  : T extends Date
  ? False
  : T extends Uint8Array
  ? False
  : T extends BigInt
  ? False
  : T extends object
  ? True
  : False


  /**
   * If it's T[], return T
   */
  export type UnEnumerate<T extends unknown> = T extends Array<infer U> ? U : T

  /**
   * From ts-toolbelt
   */

  type __Either<O extends object, K extends Key> = Omit<O, K> &
    {
      // Merge all but K
      [P in K]: Prisma__Pick<O, P & keyof O> // With K possibilities
    }[K]

  type EitherStrict<O extends object, K extends Key> = Strict<__Either<O, K>>

  type EitherLoose<O extends object, K extends Key> = ComputeRaw<__Either<O, K>>

  type _Either<
    O extends object,
    K extends Key,
    strict extends Boolean
  > = {
    1: EitherStrict<O, K>
    0: EitherLoose<O, K>
  }[strict]

  type Either<
    O extends object,
    K extends Key,
    strict extends Boolean = 1
  > = O extends unknown ? _Either<O, K, strict> : never

  export type Union = any

  type PatchUndefined<O extends object, O1 extends object> = {
    [K in keyof O]: O[K] extends undefined ? At<O1, K> : O[K]
  } & {}

  /** Helper Types for "Merge" **/
  export type IntersectOf<U extends Union> = (
    U extends unknown ? (k: U) => void : never
  ) extends (k: infer I) => void
    ? I
    : never

  export type Overwrite<O extends object, O1 extends object> = {
      [K in keyof O]: K extends keyof O1 ? O1[K] : O[K];
  } & {};

  type _Merge<U extends object> = IntersectOf<Overwrite<U, {
      [K in keyof U]-?: At<U, K>;
  }>>;

  type Key = string | number | symbol;
  type AtBasic<O extends object, K extends Key> = K extends keyof O ? O[K] : never;
  type AtStrict<O extends object, K extends Key> = O[K & keyof O];
  type AtLoose<O extends object, K extends Key> = O extends unknown ? AtStrict<O, K> : never;
  export type At<O extends object, K extends Key, strict extends Boolean = 1> = {
      1: AtStrict<O, K>;
      0: AtLoose<O, K>;
  }[strict];

  export type ComputeRaw<A extends any> = A extends Function ? A : {
    [K in keyof A]: A[K];
  } & {};

  export type OptionalFlat<O> = {
    [K in keyof O]?: O[K];
  } & {};

  type _Record<K extends keyof any, T> = {
    [P in K]: T;
  };

  // cause typescript not to expand types and preserve names
  type NoExpand<T> = T extends unknown ? T : never;

  // this type assumes the passed object is entirely optional
  type AtLeast<O extends object, K extends string> = NoExpand<
    O extends unknown
    ? | (K extends keyof O ? { [P in K]: O[P] } & O : O)
      | {[P in keyof O as P extends K ? P : never]-?: O[P]} & O
    : never>;

  type _Strict<U, _U = U> = U extends unknown ? U & OptionalFlat<_Record<Exclude<Keys<_U>, keyof U>, never>> : never;

  export type Strict<U extends object> = ComputeRaw<_Strict<U>>;
  /** End Helper Types for "Merge" **/

  export type Merge<U extends object> = ComputeRaw<_Merge<Strict<U>>>;

  /**
  A [[Boolean]]
  */
  export type Boolean = True | False

  // /**
  // 1
  // */
  export type True = 1

  /**
  0
  */
  export type False = 0

  export type Not<B extends Boolean> = {
    0: 1
    1: 0
  }[B]

  export type Extends<A1 extends any, A2 extends any> = [A1] extends [never]
    ? 0 // anything `never` is false
    : A1 extends A2
    ? 1
    : 0

  export type Has<U extends Union, U1 extends Union> = Not<
    Extends<Exclude<U1, U>, U1>
  >

  export type Or<B1 extends Boolean, B2 extends Boolean> = {
    0: {
      0: 0
      1: 1
    }
    1: {
      0: 1
      1: 1
    }
  }[B1][B2]

  export type Keys<U extends Union> = U extends unknown ? keyof U : never

  type Cast<A, B> = A extends B ? A : B;

  export const type: unique symbol;



  /**
   * Used by group by
   */

  export type GetScalarType<T, O> = O extends object ? {
    [P in keyof T]: P extends keyof O
      ? O[P]
      : never
  } : never

  type FieldPaths<
    T,
    U = Omit<T, '_avg' | '_sum' | '_count' | '_min' | '_max'>
  > = IsObject<T> extends True ? U : T

  type GetHavingFields<T> = {
    [K in keyof T]: Or<
      Or<Extends<'OR', K>, Extends<'AND', K>>,
      Extends<'NOT', K>
    > extends True
      ? // infer is only needed to not hit TS limit
        // based on the brilliant idea of Pierre-Antoine Mills
        // https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437
        T[K] extends infer TK
        ? GetHavingFields<UnEnumerate<TK> extends object ? Merge<UnEnumerate<TK>> : never>
        : never
      : {} extends FieldPaths<T[K]>
      ? never
      : K
  }[keyof T]

  /**
   * Convert tuple to union
   */
  type _TupleToUnion<T> = T extends (infer E)[] ? E : never
  type TupleToUnion<K extends readonly any[]> = _TupleToUnion<K>
  type MaybeTupleToUnion<T> = T extends any[] ? TupleToUnion<T> : T

  /**
   * Like `Pick`, but additionally can also accept an array of keys
   */
  type PickEnumerable<T, K extends Enumerable<keyof T> | keyof T> = Prisma__Pick<T, MaybeTupleToUnion<K>>

  /**
   * Exclude all keys with underscores
   */
  type ExcludeUnderscoreKeys<T extends string> = T extends `_${string}` ? never : T


  export type FieldRef<Model, FieldType> = runtime.FieldRef<Model, FieldType>

  type FieldRefInputType<Model, FieldType> = Model extends never ? never : FieldRef<Model, FieldType>


  export const ModelName: {
    Country: 'Country',
    State: 'State',
    City: 'City',
    Timezone: 'Timezone',
    CountryTimezone: 'CountryTimezone',
    StateTimezone: 'StateTimezone',
    Currency: 'Currency',
    DialingCode: 'DialingCode'
  };

  export type ModelName = (typeof ModelName)[keyof typeof ModelName]


  export type Datasources = {
    db?: Datasource
  }

  interface TypeMapCb<ClientOptions = {}> extends $Utils.Fn<{extArgs: $Extensions.InternalArgs }, $Utils.Record<string, any>> {
    returns: Prisma.TypeMap<this['params']['extArgs'], ClientOptions extends { omit: infer OmitOptions } ? OmitOptions : {}>
  }

  export type TypeMap<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> = {
    globalOmitOptions: {
      omit: GlobalOmitOptions
    }
    meta: {
      modelProps: "country" | "state" | "city" | "timezone" | "countryTimezone" | "stateTimezone" | "currency" | "dialingCode"
      txIsolationLevel: Prisma.TransactionIsolationLevel
    }
    model: {
      Country: {
        payload: Prisma.$CountryPayload<ExtArgs>
        fields: Prisma.CountryFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CountryFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CountryFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          findFirst: {
            args: Prisma.CountryFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CountryFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          findMany: {
            args: Prisma.CountryFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>[]
          }
          create: {
            args: Prisma.CountryCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          createMany: {
            args: Prisma.CountryCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.CountryCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>[]
          }
          delete: {
            args: Prisma.CountryDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          update: {
            args: Prisma.CountryUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          deleteMany: {
            args: Prisma.CountryDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CountryUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.CountryUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>[]
          }
          upsert: {
            args: Prisma.CountryUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          aggregate: {
            args: Prisma.CountryAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCountry>
          }
          groupBy: {
            args: Prisma.CountryGroupByArgs<ExtArgs>
            result: $Utils.Optional<CountryGroupByOutputType>[]
          }
          count: {
            args: Prisma.CountryCountArgs<ExtArgs>
            result: $Utils.Optional<CountryCountAggregateOutputType> | number
          }
        }
      }
      State: {
        payload: Prisma.$StatePayload<ExtArgs>
        fields: Prisma.StateFieldRefs
        operations: {
          findUnique: {
            args: Prisma.StateFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.StateFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          findFirst: {
            args: Prisma.StateFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.StateFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          findMany: {
            args: Prisma.StateFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>[]
          }
          create: {
            args: Prisma.StateCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          createMany: {
            args: Prisma.StateCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.StateCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>[]
          }
          delete: {
            args: Prisma.StateDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          update: {
            args: Prisma.StateUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          deleteMany: {
            args: Prisma.StateDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.StateUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.StateUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>[]
          }
          upsert: {
            args: Prisma.StateUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          aggregate: {
            args: Prisma.StateAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateState>
          }
          groupBy: {
            args: Prisma.StateGroupByArgs<ExtArgs>
            result: $Utils.Optional<StateGroupByOutputType>[]
          }
          count: {
            args: Prisma.StateCountArgs<ExtArgs>
            result: $Utils.Optional<StateCountAggregateOutputType> | number
          }
        }
      }
      City: {
        payload: Prisma.$CityPayload<ExtArgs>
        fields: Prisma.CityFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CityFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CityFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          findFirst: {
            args: Prisma.CityFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CityFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          findMany: {
            args: Prisma.CityFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>[]
          }
          create: {
            args: Prisma.CityCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          createMany: {
            args: Prisma.CityCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.CityCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>[]
          }
          delete: {
            args: Prisma.CityDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          update: {
            args: Prisma.CityUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          deleteMany: {
            args: Prisma.CityDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CityUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.CityUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>[]
          }
          upsert: {
            args: Prisma.CityUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          aggregate: {
            args: Prisma.CityAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCity>
          }
          groupBy: {
            args: Prisma.CityGroupByArgs<ExtArgs>
            result: $Utils.Optional<CityGroupByOutputType>[]
          }
          count: {
            args: Prisma.CityCountArgs<ExtArgs>
            result: $Utils.Optional<CityCountAggregateOutputType> | number
          }
        }
      }
      Timezone: {
        payload: Prisma.$TimezonePayload<ExtArgs>
        fields: Prisma.TimezoneFieldRefs
        operations: {
          findUnique: {
            args: Prisma.TimezoneFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.TimezoneFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>
          }
          findFirst: {
            args: Prisma.TimezoneFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.TimezoneFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>
          }
          findMany: {
            args: Prisma.TimezoneFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>[]
          }
          create: {
            args: Prisma.TimezoneCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>
          }
          createMany: {
            args: Prisma.TimezoneCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.TimezoneCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>[]
          }
          delete: {
            args: Prisma.TimezoneDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>
          }
          update: {
            args: Prisma.TimezoneUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>
          }
          deleteMany: {
            args: Prisma.TimezoneDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.TimezoneUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.TimezoneUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>[]
          }
          upsert: {
            args: Prisma.TimezoneUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TimezonePayload>
          }
          aggregate: {
            args: Prisma.TimezoneAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateTimezone>
          }
          groupBy: {
            args: Prisma.TimezoneGroupByArgs<ExtArgs>
            result: $Utils.Optional<TimezoneGroupByOutputType>[]
          }
          count: {
            args: Prisma.TimezoneCountArgs<ExtArgs>
            result: $Utils.Optional<TimezoneCountAggregateOutputType> | number
          }
        }
      }
      CountryTimezone: {
        payload: Prisma.$CountryTimezonePayload<ExtArgs>
        fields: Prisma.CountryTimezoneFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CountryTimezoneFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CountryTimezoneFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>
          }
          findFirst: {
            args: Prisma.CountryTimezoneFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CountryTimezoneFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>
          }
          findMany: {
            args: Prisma.CountryTimezoneFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>[]
          }
          create: {
            args: Prisma.CountryTimezoneCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>
          }
          createMany: {
            args: Prisma.CountryTimezoneCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.CountryTimezoneCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>[]
          }
          delete: {
            args: Prisma.CountryTimezoneDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>
          }
          update: {
            args: Prisma.CountryTimezoneUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>
          }
          deleteMany: {
            args: Prisma.CountryTimezoneDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CountryTimezoneUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.CountryTimezoneUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>[]
          }
          upsert: {
            args: Prisma.CountryTimezoneUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryTimezonePayload>
          }
          aggregate: {
            args: Prisma.CountryTimezoneAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCountryTimezone>
          }
          groupBy: {
            args: Prisma.CountryTimezoneGroupByArgs<ExtArgs>
            result: $Utils.Optional<CountryTimezoneGroupByOutputType>[]
          }
          count: {
            args: Prisma.CountryTimezoneCountArgs<ExtArgs>
            result: $Utils.Optional<CountryTimezoneCountAggregateOutputType> | number
          }
        }
      }
      StateTimezone: {
        payload: Prisma.$StateTimezonePayload<ExtArgs>
        fields: Prisma.StateTimezoneFieldRefs
        operations: {
          findUnique: {
            args: Prisma.StateTimezoneFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.StateTimezoneFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>
          }
          findFirst: {
            args: Prisma.StateTimezoneFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.StateTimezoneFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>
          }
          findMany: {
            args: Prisma.StateTimezoneFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>[]
          }
          create: {
            args: Prisma.StateTimezoneCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>
          }
          createMany: {
            args: Prisma.StateTimezoneCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.StateTimezoneCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>[]
          }
          delete: {
            args: Prisma.StateTimezoneDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>
          }
          update: {
            args: Prisma.StateTimezoneUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>
          }
          deleteMany: {
            args: Prisma.StateTimezoneDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.StateTimezoneUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.StateTimezoneUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>[]
          }
          upsert: {
            args: Prisma.StateTimezoneUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StateTimezonePayload>
          }
          aggregate: {
            args: Prisma.StateTimezoneAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateStateTimezone>
          }
          groupBy: {
            args: Prisma.StateTimezoneGroupByArgs<ExtArgs>
            result: $Utils.Optional<StateTimezoneGroupByOutputType>[]
          }
          count: {
            args: Prisma.StateTimezoneCountArgs<ExtArgs>
            result: $Utils.Optional<StateTimezoneCountAggregateOutputType> | number
          }
        }
      }
      Currency: {
        payload: Prisma.$CurrencyPayload<ExtArgs>
        fields: Prisma.CurrencyFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CurrencyFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CurrencyFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>
          }
          findFirst: {
            args: Prisma.CurrencyFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CurrencyFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>
          }
          findMany: {
            args: Prisma.CurrencyFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>[]
          }
          create: {
            args: Prisma.CurrencyCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>
          }
          createMany: {
            args: Prisma.CurrencyCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.CurrencyCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>[]
          }
          delete: {
            args: Prisma.CurrencyDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>
          }
          update: {
            args: Prisma.CurrencyUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>
          }
          deleteMany: {
            args: Prisma.CurrencyDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CurrencyUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.CurrencyUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>[]
          }
          upsert: {
            args: Prisma.CurrencyUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CurrencyPayload>
          }
          aggregate: {
            args: Prisma.CurrencyAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCurrency>
          }
          groupBy: {
            args: Prisma.CurrencyGroupByArgs<ExtArgs>
            result: $Utils.Optional<CurrencyGroupByOutputType>[]
          }
          count: {
            args: Prisma.CurrencyCountArgs<ExtArgs>
            result: $Utils.Optional<CurrencyCountAggregateOutputType> | number
          }
        }
      }
      DialingCode: {
        payload: Prisma.$DialingCodePayload<ExtArgs>
        fields: Prisma.DialingCodeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.DialingCodeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.DialingCodeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>
          }
          findFirst: {
            args: Prisma.DialingCodeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.DialingCodeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>
          }
          findMany: {
            args: Prisma.DialingCodeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>[]
          }
          create: {
            args: Prisma.DialingCodeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>
          }
          createMany: {
            args: Prisma.DialingCodeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.DialingCodeCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>[]
          }
          delete: {
            args: Prisma.DialingCodeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>
          }
          update: {
            args: Prisma.DialingCodeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>
          }
          deleteMany: {
            args: Prisma.DialingCodeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.DialingCodeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.DialingCodeUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>[]
          }
          upsert: {
            args: Prisma.DialingCodeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$DialingCodePayload>
          }
          aggregate: {
            args: Prisma.DialingCodeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateDialingCode>
          }
          groupBy: {
            args: Prisma.DialingCodeGroupByArgs<ExtArgs>
            result: $Utils.Optional<DialingCodeGroupByOutputType>[]
          }
          count: {
            args: Prisma.DialingCodeCountArgs<ExtArgs>
            result: $Utils.Optional<DialingCodeCountAggregateOutputType> | number
          }
        }
      }
    }
  } & {
    other: {
      payload: any
      operations: {
        $executeRaw: {
          args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]],
          result: any
        }
        $executeRawUnsafe: {
          args: [query: string, ...values: any[]],
          result: any
        }
        $queryRaw: {
          args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]],
          result: any
        }
        $queryRawUnsafe: {
          args: [query: string, ...values: any[]],
          result: any
        }
      }
    }
  }
  export const defineExtension: $Extensions.ExtendsHook<"define", Prisma.TypeMapCb, $Extensions.DefaultArgs>
  export type DefaultPrismaClient = PrismaClient
  export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'
  export interface PrismaClientOptions {
    /**
     * Overwrites the datasource url from your schema.prisma file
     */
    datasources?: Datasources
    /**
     * Overwrites the datasource url from your schema.prisma file
     */
    datasourceUrl?: string
    /**
     * @default "colorless"
     */
    errorFormat?: ErrorFormat
    /**
     * @example
     * ```
     * // Defaults to stdout
     * log: ['query', 'info', 'warn', 'error']
     * 
     * // Emit as events
     * log: [
     *   { emit: 'stdout', level: 'query' },
     *   { emit: 'stdout', level: 'info' },
     *   { emit: 'stdout', level: 'warn' }
     *   { emit: 'stdout', level: 'error' }
     * ]
     * ```
     * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/logging#the-log-option).
     */
    log?: (LogLevel | LogDefinition)[]
    /**
     * The default values for transactionOptions
     * maxWait ?= 2000
     * timeout ?= 5000
     */
    transactionOptions?: {
      maxWait?: number
      timeout?: number
      isolationLevel?: Prisma.TransactionIsolationLevel
    }
    /**
     * Global configuration for omitting model fields by default.
     * 
     * @example
     * ```
     * const prisma = new PrismaClient({
     *   omit: {
     *     user: {
     *       password: true
     *     }
     *   }
     * })
     * ```
     */
    omit?: Prisma.GlobalOmitConfig
  }
  export type GlobalOmitConfig = {
    country?: CountryOmit
    state?: StateOmit
    city?: CityOmit
    timezone?: TimezoneOmit
    countryTimezone?: CountryTimezoneOmit
    stateTimezone?: StateTimezoneOmit
    currency?: CurrencyOmit
    dialingCode?: DialingCodeOmit
  }

  /* Types for Logging */
  export type LogLevel = 'info' | 'query' | 'warn' | 'error'
  export type LogDefinition = {
    level: LogLevel
    emit: 'stdout' | 'event'
  }

  export type GetLogType<T extends LogLevel | LogDefinition> = T extends LogDefinition ? T['emit'] extends 'event' ? T['level'] : never : never
  export type GetEvents<T extends any> = T extends Array<LogLevel | LogDefinition> ?
    GetLogType<T[0]> | GetLogType<T[1]> | GetLogType<T[2]> | GetLogType<T[3]>
    : never

  export type QueryEvent = {
    timestamp: Date
    query: string
    params: string
    duration: number
    target: string
  }

  export type LogEvent = {
    timestamp: Date
    message: string
    target: string
  }
  /* End Types for Logging */


  export type PrismaAction =
    | 'findUnique'
    | 'findUniqueOrThrow'
    | 'findMany'
    | 'findFirst'
    | 'findFirstOrThrow'
    | 'create'
    | 'createMany'
    | 'createManyAndReturn'
    | 'update'
    | 'updateMany'
    | 'updateManyAndReturn'
    | 'upsert'
    | 'delete'
    | 'deleteMany'
    | 'executeRaw'
    | 'queryRaw'
    | 'aggregate'
    | 'count'
    | 'runCommandRaw'
    | 'findRaw'
    | 'groupBy'

  /**
   * These options are being passed into the middleware as "params"
   */
  export type MiddlewareParams = {
    model?: ModelName
    action: PrismaAction
    args: any
    dataPath: string[]
    runInTransaction: boolean
  }

  /**
   * The `T` type makes sure, that the `return proceed` is not forgotten in the middleware implementation
   */
  export type Middleware<T = any> = (
    params: MiddlewareParams,
    next: (params: MiddlewareParams) => $Utils.JsPromise<T>,
  ) => $Utils.JsPromise<T>

  // tested in getLogLevel.test.ts
  export function getLogLevel(log: Array<LogLevel | LogDefinition>): LogLevel | undefined;

  /**
   * `PrismaClient` proxy available in interactive transactions.
   */
  export type TransactionClient = Omit<Prisma.DefaultPrismaClient, runtime.ITXClientDenyList>

  export type Datasource = {
    url?: string
  }

  /**
   * Count Types
   */


  /**
   * Count Type CountryCountOutputType
   */

  export type CountryCountOutputType = {
    phoneCodes: number
    timezones: number
    states: number
    cities: number
  }

  export type CountryCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    phoneCodes?: boolean | CountryCountOutputTypeCountPhoneCodesArgs
    timezones?: boolean | CountryCountOutputTypeCountTimezonesArgs
    states?: boolean | CountryCountOutputTypeCountStatesArgs
    cities?: boolean | CountryCountOutputTypeCountCitiesArgs
  }

  // Custom InputTypes
  /**
   * CountryCountOutputType without action
   */
  export type CountryCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryCountOutputType
     */
    select?: CountryCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * CountryCountOutputType without action
   */
  export type CountryCountOutputTypeCountPhoneCodesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: DialingCodeWhereInput
  }

  /**
   * CountryCountOutputType without action
   */
  export type CountryCountOutputTypeCountTimezonesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CountryTimezoneWhereInput
  }

  /**
   * CountryCountOutputType without action
   */
  export type CountryCountOutputTypeCountStatesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateWhereInput
  }

  /**
   * CountryCountOutputType without action
   */
  export type CountryCountOutputTypeCountCitiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CityWhereInput
  }


  /**
   * Count Type StateCountOutputType
   */

  export type StateCountOutputType = {
    cities: number
    timezones: number
  }

  export type StateCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    cities?: boolean | StateCountOutputTypeCountCitiesArgs
    timezones?: boolean | StateCountOutputTypeCountTimezonesArgs
  }

  // Custom InputTypes
  /**
   * StateCountOutputType without action
   */
  export type StateCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateCountOutputType
     */
    select?: StateCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * StateCountOutputType without action
   */
  export type StateCountOutputTypeCountCitiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CityWhereInput
  }

  /**
   * StateCountOutputType without action
   */
  export type StateCountOutputTypeCountTimezonesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateTimezoneWhereInput
  }


  /**
   * Count Type TimezoneCountOutputType
   */

  export type TimezoneCountOutputType = {
    cities: number
    stateTimezones: number
    countryTimezones: number
  }

  export type TimezoneCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    cities?: boolean | TimezoneCountOutputTypeCountCitiesArgs
    stateTimezones?: boolean | TimezoneCountOutputTypeCountStateTimezonesArgs
    countryTimezones?: boolean | TimezoneCountOutputTypeCountCountryTimezonesArgs
  }

  // Custom InputTypes
  /**
   * TimezoneCountOutputType without action
   */
  export type TimezoneCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TimezoneCountOutputType
     */
    select?: TimezoneCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * TimezoneCountOutputType without action
   */
  export type TimezoneCountOutputTypeCountCitiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CityWhereInput
  }

  /**
   * TimezoneCountOutputType without action
   */
  export type TimezoneCountOutputTypeCountStateTimezonesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateTimezoneWhereInput
  }

  /**
   * TimezoneCountOutputType without action
   */
  export type TimezoneCountOutputTypeCountCountryTimezonesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CountryTimezoneWhereInput
  }


  /**
   * Count Type CurrencyCountOutputType
   */

  export type CurrencyCountOutputType = {
    countries: number
    states: number
  }

  export type CurrencyCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    countries?: boolean | CurrencyCountOutputTypeCountCountriesArgs
    states?: boolean | CurrencyCountOutputTypeCountStatesArgs
  }

  // Custom InputTypes
  /**
   * CurrencyCountOutputType without action
   */
  export type CurrencyCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CurrencyCountOutputType
     */
    select?: CurrencyCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * CurrencyCountOutputType without action
   */
  export type CurrencyCountOutputTypeCountCountriesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CountryWhereInput
  }

  /**
   * CurrencyCountOutputType without action
   */
  export type CurrencyCountOutputTypeCountStatesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateWhereInput
  }


  /**
   * Count Type DialingCodeCountOutputType
   */

  export type DialingCodeCountOutputType = {
    states: number
  }

  export type DialingCodeCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    states?: boolean | DialingCodeCountOutputTypeCountStatesArgs
  }

  // Custom InputTypes
  /**
   * DialingCodeCountOutputType without action
   */
  export type DialingCodeCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCodeCountOutputType
     */
    select?: DialingCodeCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * DialingCodeCountOutputType without action
   */
  export type DialingCodeCountOutputTypeCountStatesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateWhereInput
  }


  /**
   * Models
   */

  /**
   * Model Country
   */

  export type AggregateCountry = {
    _count: CountryCountAggregateOutputType | null
    _min: CountryMinAggregateOutputType | null
    _max: CountryMaxAggregateOutputType | null
  }

  export type CountryMinAggregateOutputType = {
    code: string | null
    iso3: string | null
    name: string | null
    flagEmoji: string | null
    currencyCode: string | null
  }

  export type CountryMaxAggregateOutputType = {
    code: string | null
    iso3: string | null
    name: string | null
    flagEmoji: string | null
    currencyCode: string | null
  }

  export type CountryCountAggregateOutputType = {
    code: number
    iso3: number
    name: number
    flagEmoji: number
    currencyCode: number
    _all: number
  }


  export type CountryMinAggregateInputType = {
    code?: true
    iso3?: true
    name?: true
    flagEmoji?: true
    currencyCode?: true
  }

  export type CountryMaxAggregateInputType = {
    code?: true
    iso3?: true
    name?: true
    flagEmoji?: true
    currencyCode?: true
  }

  export type CountryCountAggregateInputType = {
    code?: true
    iso3?: true
    name?: true
    flagEmoji?: true
    currencyCode?: true
    _all?: true
  }

  export type CountryAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Country to aggregate.
     */
    where?: CountryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Countries to fetch.
     */
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CountryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Countries from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Countries.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Countries
    **/
    _count?: true | CountryCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CountryMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CountryMaxAggregateInputType
  }

  export type GetCountryAggregateType<T extends CountryAggregateArgs> = {
        [P in keyof T & keyof AggregateCountry]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCountry[P]>
      : GetScalarType<T[P], AggregateCountry[P]>
  }




  export type CountryGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CountryWhereInput
    orderBy?: CountryOrderByWithAggregationInput | CountryOrderByWithAggregationInput[]
    by: CountryScalarFieldEnum[] | CountryScalarFieldEnum
    having?: CountryScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CountryCountAggregateInputType | true
    _min?: CountryMinAggregateInputType
    _max?: CountryMaxAggregateInputType
  }

  export type CountryGroupByOutputType = {
    code: string
    iso3: string
    name: string
    flagEmoji: string | null
    currencyCode: string | null
    _count: CountryCountAggregateOutputType | null
    _min: CountryMinAggregateOutputType | null
    _max: CountryMaxAggregateOutputType | null
  }

  type GetCountryGroupByPayload<T extends CountryGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CountryGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CountryGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CountryGroupByOutputType[P]>
            : GetScalarType<T[P], CountryGroupByOutputType[P]>
        }
      >
    >


  export type CountrySelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    iso3?: boolean
    name?: boolean
    flagEmoji?: boolean
    currencyCode?: boolean
    currency?: boolean | Country$currencyArgs<ExtArgs>
    phoneCodes?: boolean | Country$phoneCodesArgs<ExtArgs>
    timezones?: boolean | Country$timezonesArgs<ExtArgs>
    states?: boolean | Country$statesArgs<ExtArgs>
    cities?: boolean | Country$citiesArgs<ExtArgs>
    _count?: boolean | CountryCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["country"]>

  export type CountrySelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    iso3?: boolean
    name?: boolean
    flagEmoji?: boolean
    currencyCode?: boolean
    currency?: boolean | Country$currencyArgs<ExtArgs>
  }, ExtArgs["result"]["country"]>

  export type CountrySelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    iso3?: boolean
    name?: boolean
    flagEmoji?: boolean
    currencyCode?: boolean
    currency?: boolean | Country$currencyArgs<ExtArgs>
  }, ExtArgs["result"]["country"]>

  export type CountrySelectScalar = {
    code?: boolean
    iso3?: boolean
    name?: boolean
    flagEmoji?: boolean
    currencyCode?: boolean
  }

  export type CountryOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"code" | "iso3" | "name" | "flagEmoji" | "currencyCode", ExtArgs["result"]["country"]>
  export type CountryInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    currency?: boolean | Country$currencyArgs<ExtArgs>
    phoneCodes?: boolean | Country$phoneCodesArgs<ExtArgs>
    timezones?: boolean | Country$timezonesArgs<ExtArgs>
    states?: boolean | Country$statesArgs<ExtArgs>
    cities?: boolean | Country$citiesArgs<ExtArgs>
    _count?: boolean | CountryCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type CountryIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    currency?: boolean | Country$currencyArgs<ExtArgs>
  }
  export type CountryIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    currency?: boolean | Country$currencyArgs<ExtArgs>
  }

  export type $CountryPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Country"
    objects: {
      currency: Prisma.$CurrencyPayload<ExtArgs> | null
      phoneCodes: Prisma.$DialingCodePayload<ExtArgs>[]
      timezones: Prisma.$CountryTimezonePayload<ExtArgs>[]
      states: Prisma.$StatePayload<ExtArgs>[]
      cities: Prisma.$CityPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      code: string
      iso3: string
      name: string
      flagEmoji: string | null
      currencyCode: string | null
    }, ExtArgs["result"]["country"]>
    composites: {}
  }

  type CountryGetPayload<S extends boolean | null | undefined | CountryDefaultArgs> = $Result.GetResult<Prisma.$CountryPayload, S>

  type CountryCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CountryFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CountryCountAggregateInputType | true
    }

  export interface CountryDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Country'], meta: { name: 'Country' } }
    /**
     * Find zero or one Country that matches the filter.
     * @param {CountryFindUniqueArgs} args - Arguments to find a Country
     * @example
     * // Get one Country
     * const country = await prisma.country.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CountryFindUniqueArgs>(args: SelectSubset<T, CountryFindUniqueArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Country that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CountryFindUniqueOrThrowArgs} args - Arguments to find a Country
     * @example
     * // Get one Country
     * const country = await prisma.country.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CountryFindUniqueOrThrowArgs>(args: SelectSubset<T, CountryFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Country that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryFindFirstArgs} args - Arguments to find a Country
     * @example
     * // Get one Country
     * const country = await prisma.country.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CountryFindFirstArgs>(args?: SelectSubset<T, CountryFindFirstArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Country that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryFindFirstOrThrowArgs} args - Arguments to find a Country
     * @example
     * // Get one Country
     * const country = await prisma.country.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CountryFindFirstOrThrowArgs>(args?: SelectSubset<T, CountryFindFirstOrThrowArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Countries that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Countries
     * const countries = await prisma.country.findMany()
     * 
     * // Get first 10 Countries
     * const countries = await prisma.country.findMany({ take: 10 })
     * 
     * // Only select the `code`
     * const countryWithCodeOnly = await prisma.country.findMany({ select: { code: true } })
     * 
     */
    findMany<T extends CountryFindManyArgs>(args?: SelectSubset<T, CountryFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Country.
     * @param {CountryCreateArgs} args - Arguments to create a Country.
     * @example
     * // Create one Country
     * const Country = await prisma.country.create({
     *   data: {
     *     // ... data to create a Country
     *   }
     * })
     * 
     */
    create<T extends CountryCreateArgs>(args: SelectSubset<T, CountryCreateArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Countries.
     * @param {CountryCreateManyArgs} args - Arguments to create many Countries.
     * @example
     * // Create many Countries
     * const country = await prisma.country.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CountryCreateManyArgs>(args?: SelectSubset<T, CountryCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many Countries and returns the data saved in the database.
     * @param {CountryCreateManyAndReturnArgs} args - Arguments to create many Countries.
     * @example
     * // Create many Countries
     * const country = await prisma.country.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Countries and only return the `code`
     * const countryWithCodeOnly = await prisma.country.createManyAndReturn({
     *   select: { code: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends CountryCreateManyAndReturnArgs>(args?: SelectSubset<T, CountryCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a Country.
     * @param {CountryDeleteArgs} args - Arguments to delete one Country.
     * @example
     * // Delete one Country
     * const Country = await prisma.country.delete({
     *   where: {
     *     // ... filter to delete one Country
     *   }
     * })
     * 
     */
    delete<T extends CountryDeleteArgs>(args: SelectSubset<T, CountryDeleteArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Country.
     * @param {CountryUpdateArgs} args - Arguments to update one Country.
     * @example
     * // Update one Country
     * const country = await prisma.country.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CountryUpdateArgs>(args: SelectSubset<T, CountryUpdateArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Countries.
     * @param {CountryDeleteManyArgs} args - Arguments to filter Countries to delete.
     * @example
     * // Delete a few Countries
     * const { count } = await prisma.country.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CountryDeleteManyArgs>(args?: SelectSubset<T, CountryDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Countries.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Countries
     * const country = await prisma.country.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CountryUpdateManyArgs>(args: SelectSubset<T, CountryUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Countries and returns the data updated in the database.
     * @param {CountryUpdateManyAndReturnArgs} args - Arguments to update many Countries.
     * @example
     * // Update many Countries
     * const country = await prisma.country.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Countries and only return the `code`
     * const countryWithCodeOnly = await prisma.country.updateManyAndReturn({
     *   select: { code: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends CountryUpdateManyAndReturnArgs>(args: SelectSubset<T, CountryUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one Country.
     * @param {CountryUpsertArgs} args - Arguments to update or create a Country.
     * @example
     * // Update or create a Country
     * const country = await prisma.country.upsert({
     *   create: {
     *     // ... data to create a Country
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Country we want to update
     *   }
     * })
     */
    upsert<T extends CountryUpsertArgs>(args: SelectSubset<T, CountryUpsertArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Countries.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryCountArgs} args - Arguments to filter Countries to count.
     * @example
     * // Count the number of Countries
     * const count = await prisma.country.count({
     *   where: {
     *     // ... the filter for the Countries we want to count
     *   }
     * })
    **/
    count<T extends CountryCountArgs>(
      args?: Subset<T, CountryCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CountryCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Country.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CountryAggregateArgs>(args: Subset<T, CountryAggregateArgs>): Prisma.PrismaPromise<GetCountryAggregateType<T>>

    /**
     * Group by Country.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CountryGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CountryGroupByArgs['orderBy'] }
        : { orderBy?: CountryGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CountryGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCountryGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Country model
   */
  readonly fields: CountryFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Country.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CountryClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    currency<T extends Country$currencyArgs<ExtArgs> = {}>(args?: Subset<T, Country$currencyArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    phoneCodes<T extends Country$phoneCodesArgs<ExtArgs> = {}>(args?: Subset<T, Country$phoneCodesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    timezones<T extends Country$timezonesArgs<ExtArgs> = {}>(args?: Subset<T, Country$timezonesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    states<T extends Country$statesArgs<ExtArgs> = {}>(args?: Subset<T, Country$statesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    cities<T extends Country$citiesArgs<ExtArgs> = {}>(args?: Subset<T, Country$citiesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Country model
   */
  interface CountryFieldRefs {
    readonly code: FieldRef<"Country", 'String'>
    readonly iso3: FieldRef<"Country", 'String'>
    readonly name: FieldRef<"Country", 'String'>
    readonly flagEmoji: FieldRef<"Country", 'String'>
    readonly currencyCode: FieldRef<"Country", 'String'>
  }
    

  // Custom InputTypes
  /**
   * Country findUnique
   */
  export type CountryFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Country to fetch.
     */
    where: CountryWhereUniqueInput
  }

  /**
   * Country findUniqueOrThrow
   */
  export type CountryFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Country to fetch.
     */
    where: CountryWhereUniqueInput
  }

  /**
   * Country findFirst
   */
  export type CountryFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Country to fetch.
     */
    where?: CountryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Countries to fetch.
     */
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Countries.
     */
    cursor?: CountryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Countries from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Countries.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Countries.
     */
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Country findFirstOrThrow
   */
  export type CountryFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Country to fetch.
     */
    where?: CountryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Countries to fetch.
     */
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Countries.
     */
    cursor?: CountryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Countries from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Countries.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Countries.
     */
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Country findMany
   */
  export type CountryFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Countries to fetch.
     */
    where?: CountryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Countries to fetch.
     */
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Countries.
     */
    cursor?: CountryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Countries from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Countries.
     */
    skip?: number
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Country create
   */
  export type CountryCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * The data needed to create a Country.
     */
    data: XOR<CountryCreateInput, CountryUncheckedCreateInput>
  }

  /**
   * Country createMany
   */
  export type CountryCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Countries.
     */
    data: CountryCreateManyInput | CountryCreateManyInput[]
  }

  /**
   * Country createManyAndReturn
   */
  export type CountryCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * The data used to create many Countries.
     */
    data: CountryCreateManyInput | CountryCreateManyInput[]
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * Country update
   */
  export type CountryUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * The data needed to update a Country.
     */
    data: XOR<CountryUpdateInput, CountryUncheckedUpdateInput>
    /**
     * Choose, which Country to update.
     */
    where: CountryWhereUniqueInput
  }

  /**
   * Country updateMany
   */
  export type CountryUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Countries.
     */
    data: XOR<CountryUpdateManyMutationInput, CountryUncheckedUpdateManyInput>
    /**
     * Filter which Countries to update
     */
    where?: CountryWhereInput
    /**
     * Limit how many Countries to update.
     */
    limit?: number
  }

  /**
   * Country updateManyAndReturn
   */
  export type CountryUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * The data used to update Countries.
     */
    data: XOR<CountryUpdateManyMutationInput, CountryUncheckedUpdateManyInput>
    /**
     * Filter which Countries to update
     */
    where?: CountryWhereInput
    /**
     * Limit how many Countries to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * Country upsert
   */
  export type CountryUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * The filter to search for the Country to update in case it exists.
     */
    where: CountryWhereUniqueInput
    /**
     * In case the Country found by the `where` argument doesn't exist, create a new Country with this data.
     */
    create: XOR<CountryCreateInput, CountryUncheckedCreateInput>
    /**
     * In case the Country was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CountryUpdateInput, CountryUncheckedUpdateInput>
  }

  /**
   * Country delete
   */
  export type CountryDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter which Country to delete.
     */
    where: CountryWhereUniqueInput
  }

  /**
   * Country deleteMany
   */
  export type CountryDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Countries to delete
     */
    where?: CountryWhereInput
    /**
     * Limit how many Countries to delete.
     */
    limit?: number
  }

  /**
   * Country.currency
   */
  export type Country$currencyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    where?: CurrencyWhereInput
  }

  /**
   * Country.phoneCodes
   */
  export type Country$phoneCodesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    where?: DialingCodeWhereInput
    orderBy?: DialingCodeOrderByWithRelationInput | DialingCodeOrderByWithRelationInput[]
    cursor?: DialingCodeWhereUniqueInput
    take?: number
    skip?: number
    distinct?: DialingCodeScalarFieldEnum | DialingCodeScalarFieldEnum[]
  }

  /**
   * Country.timezones
   */
  export type Country$timezonesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    where?: CountryTimezoneWhereInput
    orderBy?: CountryTimezoneOrderByWithRelationInput | CountryTimezoneOrderByWithRelationInput[]
    cursor?: CountryTimezoneWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CountryTimezoneScalarFieldEnum | CountryTimezoneScalarFieldEnum[]
  }

  /**
   * Country.states
   */
  export type Country$statesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    where?: StateWhereInput
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    cursor?: StateWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * Country.cities
   */
  export type Country$citiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    where?: CityWhereInput
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    cursor?: CityWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * Country without action
   */
  export type CountryDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
  }


  /**
   * Model State
   */

  export type AggregateState = {
    _count: StateCountAggregateOutputType | null
    _avg: StateAvgAggregateOutputType | null
    _sum: StateSumAggregateOutputType | null
    _min: StateMinAggregateOutputType | null
    _max: StateMaxAggregateOutputType | null
  }

  export type StateAvgAggregateOutputType = {
    id: number | null
  }

  export type StateSumAggregateOutputType = {
    id: number | null
  }

  export type StateMinAggregateOutputType = {
    id: number | null
    name: string | null
    iso2: string | null
    iso3: string | null
    flagEmoji: string | null
    countryCode: string | null
    currencyCode: string | null
    phoneCode: string | null
  }

  export type StateMaxAggregateOutputType = {
    id: number | null
    name: string | null
    iso2: string | null
    iso3: string | null
    flagEmoji: string | null
    countryCode: string | null
    currencyCode: string | null
    phoneCode: string | null
  }

  export type StateCountAggregateOutputType = {
    id: number
    name: number
    iso2: number
    iso3: number
    flagEmoji: number
    countryCode: number
    currencyCode: number
    phoneCode: number
    _all: number
  }


  export type StateAvgAggregateInputType = {
    id?: true
  }

  export type StateSumAggregateInputType = {
    id?: true
  }

  export type StateMinAggregateInputType = {
    id?: true
    name?: true
    iso2?: true
    iso3?: true
    flagEmoji?: true
    countryCode?: true
    currencyCode?: true
    phoneCode?: true
  }

  export type StateMaxAggregateInputType = {
    id?: true
    name?: true
    iso2?: true
    iso3?: true
    flagEmoji?: true
    countryCode?: true
    currencyCode?: true
    phoneCode?: true
  }

  export type StateCountAggregateInputType = {
    id?: true
    name?: true
    iso2?: true
    iso3?: true
    flagEmoji?: true
    countryCode?: true
    currencyCode?: true
    phoneCode?: true
    _all?: true
  }

  export type StateAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which State to aggregate.
     */
    where?: StateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of States to fetch.
     */
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: StateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` States from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` States.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned States
    **/
    _count?: true | StateCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: StateAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: StateSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: StateMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: StateMaxAggregateInputType
  }

  export type GetStateAggregateType<T extends StateAggregateArgs> = {
        [P in keyof T & keyof AggregateState]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateState[P]>
      : GetScalarType<T[P], AggregateState[P]>
  }




  export type StateGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateWhereInput
    orderBy?: StateOrderByWithAggregationInput | StateOrderByWithAggregationInput[]
    by: StateScalarFieldEnum[] | StateScalarFieldEnum
    having?: StateScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: StateCountAggregateInputType | true
    _avg?: StateAvgAggregateInputType
    _sum?: StateSumAggregateInputType
    _min?: StateMinAggregateInputType
    _max?: StateMaxAggregateInputType
  }

  export type StateGroupByOutputType = {
    id: number
    name: string
    iso2: string | null
    iso3: string | null
    flagEmoji: string | null
    countryCode: string
    currencyCode: string | null
    phoneCode: string | null
    _count: StateCountAggregateOutputType | null
    _avg: StateAvgAggregateOutputType | null
    _sum: StateSumAggregateOutputType | null
    _min: StateMinAggregateOutputType | null
    _max: StateMaxAggregateOutputType | null
  }

  type GetStateGroupByPayload<T extends StateGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<StateGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof StateGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], StateGroupByOutputType[P]>
            : GetScalarType<T[P], StateGroupByOutputType[P]>
        }
      >
    >


  export type StateSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    iso2?: boolean
    iso3?: boolean
    flagEmoji?: boolean
    countryCode?: boolean
    currencyCode?: boolean
    phoneCode?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
    cities?: boolean | State$citiesArgs<ExtArgs>
    currency?: boolean | State$currencyArgs<ExtArgs>
    dialingCode?: boolean | State$dialingCodeArgs<ExtArgs>
    timezones?: boolean | State$timezonesArgs<ExtArgs>
    _count?: boolean | StateCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["state"]>

  export type StateSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    iso2?: boolean
    iso3?: boolean
    flagEmoji?: boolean
    countryCode?: boolean
    currencyCode?: boolean
    phoneCode?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
    currency?: boolean | State$currencyArgs<ExtArgs>
    dialingCode?: boolean | State$dialingCodeArgs<ExtArgs>
  }, ExtArgs["result"]["state"]>

  export type StateSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    iso2?: boolean
    iso3?: boolean
    flagEmoji?: boolean
    countryCode?: boolean
    currencyCode?: boolean
    phoneCode?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
    currency?: boolean | State$currencyArgs<ExtArgs>
    dialingCode?: boolean | State$dialingCodeArgs<ExtArgs>
  }, ExtArgs["result"]["state"]>

  export type StateSelectScalar = {
    id?: boolean
    name?: boolean
    iso2?: boolean
    iso3?: boolean
    flagEmoji?: boolean
    countryCode?: boolean
    currencyCode?: boolean
    phoneCode?: boolean
  }

  export type StateOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "iso2" | "iso3" | "flagEmoji" | "countryCode" | "currencyCode" | "phoneCode", ExtArgs["result"]["state"]>
  export type StateInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
    cities?: boolean | State$citiesArgs<ExtArgs>
    currency?: boolean | State$currencyArgs<ExtArgs>
    dialingCode?: boolean | State$dialingCodeArgs<ExtArgs>
    timezones?: boolean | State$timezonesArgs<ExtArgs>
    _count?: boolean | StateCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type StateIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
    currency?: boolean | State$currencyArgs<ExtArgs>
    dialingCode?: boolean | State$dialingCodeArgs<ExtArgs>
  }
  export type StateIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
    currency?: boolean | State$currencyArgs<ExtArgs>
    dialingCode?: boolean | State$dialingCodeArgs<ExtArgs>
  }

  export type $StatePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "State"
    objects: {
      country: Prisma.$CountryPayload<ExtArgs>
      cities: Prisma.$CityPayload<ExtArgs>[]
      currency: Prisma.$CurrencyPayload<ExtArgs> | null
      dialingCode: Prisma.$DialingCodePayload<ExtArgs> | null
      timezones: Prisma.$StateTimezonePayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      iso2: string | null
      iso3: string | null
      flagEmoji: string | null
      countryCode: string
      currencyCode: string | null
      phoneCode: string | null
    }, ExtArgs["result"]["state"]>
    composites: {}
  }

  type StateGetPayload<S extends boolean | null | undefined | StateDefaultArgs> = $Result.GetResult<Prisma.$StatePayload, S>

  type StateCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<StateFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: StateCountAggregateInputType | true
    }

  export interface StateDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['State'], meta: { name: 'State' } }
    /**
     * Find zero or one State that matches the filter.
     * @param {StateFindUniqueArgs} args - Arguments to find a State
     * @example
     * // Get one State
     * const state = await prisma.state.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends StateFindUniqueArgs>(args: SelectSubset<T, StateFindUniqueArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one State that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {StateFindUniqueOrThrowArgs} args - Arguments to find a State
     * @example
     * // Get one State
     * const state = await prisma.state.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends StateFindUniqueOrThrowArgs>(args: SelectSubset<T, StateFindUniqueOrThrowArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first State that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateFindFirstArgs} args - Arguments to find a State
     * @example
     * // Get one State
     * const state = await prisma.state.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends StateFindFirstArgs>(args?: SelectSubset<T, StateFindFirstArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first State that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateFindFirstOrThrowArgs} args - Arguments to find a State
     * @example
     * // Get one State
     * const state = await prisma.state.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends StateFindFirstOrThrowArgs>(args?: SelectSubset<T, StateFindFirstOrThrowArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more States that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all States
     * const states = await prisma.state.findMany()
     * 
     * // Get first 10 States
     * const states = await prisma.state.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const stateWithIdOnly = await prisma.state.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends StateFindManyArgs>(args?: SelectSubset<T, StateFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a State.
     * @param {StateCreateArgs} args - Arguments to create a State.
     * @example
     * // Create one State
     * const State = await prisma.state.create({
     *   data: {
     *     // ... data to create a State
     *   }
     * })
     * 
     */
    create<T extends StateCreateArgs>(args: SelectSubset<T, StateCreateArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many States.
     * @param {StateCreateManyArgs} args - Arguments to create many States.
     * @example
     * // Create many States
     * const state = await prisma.state.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends StateCreateManyArgs>(args?: SelectSubset<T, StateCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many States and returns the data saved in the database.
     * @param {StateCreateManyAndReturnArgs} args - Arguments to create many States.
     * @example
     * // Create many States
     * const state = await prisma.state.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many States and only return the `id`
     * const stateWithIdOnly = await prisma.state.createManyAndReturn({
     *   select: { id: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends StateCreateManyAndReturnArgs>(args?: SelectSubset<T, StateCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a State.
     * @param {StateDeleteArgs} args - Arguments to delete one State.
     * @example
     * // Delete one State
     * const State = await prisma.state.delete({
     *   where: {
     *     // ... filter to delete one State
     *   }
     * })
     * 
     */
    delete<T extends StateDeleteArgs>(args: SelectSubset<T, StateDeleteArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one State.
     * @param {StateUpdateArgs} args - Arguments to update one State.
     * @example
     * // Update one State
     * const state = await prisma.state.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends StateUpdateArgs>(args: SelectSubset<T, StateUpdateArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more States.
     * @param {StateDeleteManyArgs} args - Arguments to filter States to delete.
     * @example
     * // Delete a few States
     * const { count } = await prisma.state.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends StateDeleteManyArgs>(args?: SelectSubset<T, StateDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more States.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many States
     * const state = await prisma.state.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends StateUpdateManyArgs>(args: SelectSubset<T, StateUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more States and returns the data updated in the database.
     * @param {StateUpdateManyAndReturnArgs} args - Arguments to update many States.
     * @example
     * // Update many States
     * const state = await prisma.state.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more States and only return the `id`
     * const stateWithIdOnly = await prisma.state.updateManyAndReturn({
     *   select: { id: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends StateUpdateManyAndReturnArgs>(args: SelectSubset<T, StateUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one State.
     * @param {StateUpsertArgs} args - Arguments to update or create a State.
     * @example
     * // Update or create a State
     * const state = await prisma.state.upsert({
     *   create: {
     *     // ... data to create a State
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the State we want to update
     *   }
     * })
     */
    upsert<T extends StateUpsertArgs>(args: SelectSubset<T, StateUpsertArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of States.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateCountArgs} args - Arguments to filter States to count.
     * @example
     * // Count the number of States
     * const count = await prisma.state.count({
     *   where: {
     *     // ... the filter for the States we want to count
     *   }
     * })
    **/
    count<T extends StateCountArgs>(
      args?: Subset<T, StateCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], StateCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a State.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends StateAggregateArgs>(args: Subset<T, StateAggregateArgs>): Prisma.PrismaPromise<GetStateAggregateType<T>>

    /**
     * Group by State.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends StateGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: StateGroupByArgs['orderBy'] }
        : { orderBy?: StateGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, StateGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetStateGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the State model
   */
  readonly fields: StateFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for State.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__StateClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    country<T extends CountryDefaultArgs<ExtArgs> = {}>(args?: Subset<T, CountryDefaultArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    cities<T extends State$citiesArgs<ExtArgs> = {}>(args?: Subset<T, State$citiesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    currency<T extends State$currencyArgs<ExtArgs> = {}>(args?: Subset<T, State$currencyArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    dialingCode<T extends State$dialingCodeArgs<ExtArgs> = {}>(args?: Subset<T, State$dialingCodeArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    timezones<T extends State$timezonesArgs<ExtArgs> = {}>(args?: Subset<T, State$timezonesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the State model
   */
  interface StateFieldRefs {
    readonly id: FieldRef<"State", 'Int'>
    readonly name: FieldRef<"State", 'String'>
    readonly iso2: FieldRef<"State", 'String'>
    readonly iso3: FieldRef<"State", 'String'>
    readonly flagEmoji: FieldRef<"State", 'String'>
    readonly countryCode: FieldRef<"State", 'String'>
    readonly currencyCode: FieldRef<"State", 'String'>
    readonly phoneCode: FieldRef<"State", 'String'>
  }
    

  // Custom InputTypes
  /**
   * State findUnique
   */
  export type StateFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which State to fetch.
     */
    where: StateWhereUniqueInput
  }

  /**
   * State findUniqueOrThrow
   */
  export type StateFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which State to fetch.
     */
    where: StateWhereUniqueInput
  }

  /**
   * State findFirst
   */
  export type StateFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which State to fetch.
     */
    where?: StateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of States to fetch.
     */
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for States.
     */
    cursor?: StateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` States from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` States.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of States.
     */
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * State findFirstOrThrow
   */
  export type StateFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which State to fetch.
     */
    where?: StateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of States to fetch.
     */
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for States.
     */
    cursor?: StateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` States from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` States.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of States.
     */
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * State findMany
   */
  export type StateFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which States to fetch.
     */
    where?: StateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of States to fetch.
     */
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing States.
     */
    cursor?: StateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` States from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` States.
     */
    skip?: number
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * State create
   */
  export type StateCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * The data needed to create a State.
     */
    data: XOR<StateCreateInput, StateUncheckedCreateInput>
  }

  /**
   * State createMany
   */
  export type StateCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many States.
     */
    data: StateCreateManyInput | StateCreateManyInput[]
  }

  /**
   * State createManyAndReturn
   */
  export type StateCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * The data used to create many States.
     */
    data: StateCreateManyInput | StateCreateManyInput[]
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * State update
   */
  export type StateUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * The data needed to update a State.
     */
    data: XOR<StateUpdateInput, StateUncheckedUpdateInput>
    /**
     * Choose, which State to update.
     */
    where: StateWhereUniqueInput
  }

  /**
   * State updateMany
   */
  export type StateUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update States.
     */
    data: XOR<StateUpdateManyMutationInput, StateUncheckedUpdateManyInput>
    /**
     * Filter which States to update
     */
    where?: StateWhereInput
    /**
     * Limit how many States to update.
     */
    limit?: number
  }

  /**
   * State updateManyAndReturn
   */
  export type StateUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * The data used to update States.
     */
    data: XOR<StateUpdateManyMutationInput, StateUncheckedUpdateManyInput>
    /**
     * Filter which States to update
     */
    where?: StateWhereInput
    /**
     * Limit how many States to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * State upsert
   */
  export type StateUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * The filter to search for the State to update in case it exists.
     */
    where: StateWhereUniqueInput
    /**
     * In case the State found by the `where` argument doesn't exist, create a new State with this data.
     */
    create: XOR<StateCreateInput, StateUncheckedCreateInput>
    /**
     * In case the State was found with the provided `where` argument, update it with this data.
     */
    update: XOR<StateUpdateInput, StateUncheckedUpdateInput>
  }

  /**
   * State delete
   */
  export type StateDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter which State to delete.
     */
    where: StateWhereUniqueInput
  }

  /**
   * State deleteMany
   */
  export type StateDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which States to delete
     */
    where?: StateWhereInput
    /**
     * Limit how many States to delete.
     */
    limit?: number
  }

  /**
   * State.cities
   */
  export type State$citiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    where?: CityWhereInput
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    cursor?: CityWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * State.currency
   */
  export type State$currencyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    where?: CurrencyWhereInput
  }

  /**
   * State.dialingCode
   */
  export type State$dialingCodeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    where?: DialingCodeWhereInput
  }

  /**
   * State.timezones
   */
  export type State$timezonesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    where?: StateTimezoneWhereInput
    orderBy?: StateTimezoneOrderByWithRelationInput | StateTimezoneOrderByWithRelationInput[]
    cursor?: StateTimezoneWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StateTimezoneScalarFieldEnum | StateTimezoneScalarFieldEnum[]
  }

  /**
   * State without action
   */
  export type StateDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
  }


  /**
   * Model City
   */

  export type AggregateCity = {
    _count: CityCountAggregateOutputType | null
    _avg: CityAvgAggregateOutputType | null
    _sum: CitySumAggregateOutputType | null
    _min: CityMinAggregateOutputType | null
    _max: CityMaxAggregateOutputType | null
  }

  export type CityAvgAggregateOutputType = {
    id: number | null
    stateId: number | null
  }

  export type CitySumAggregateOutputType = {
    id: number | null
    stateId: number | null
  }

  export type CityMinAggregateOutputType = {
    id: number | null
    name: string | null
    stateId: number | null
    countryCode: string | null
    timezoneId: string | null
  }

  export type CityMaxAggregateOutputType = {
    id: number | null
    name: string | null
    stateId: number | null
    countryCode: string | null
    timezoneId: string | null
  }

  export type CityCountAggregateOutputType = {
    id: number
    name: number
    stateId: number
    countryCode: number
    timezoneId: number
    _all: number
  }


  export type CityAvgAggregateInputType = {
    id?: true
    stateId?: true
  }

  export type CitySumAggregateInputType = {
    id?: true
    stateId?: true
  }

  export type CityMinAggregateInputType = {
    id?: true
    name?: true
    stateId?: true
    countryCode?: true
    timezoneId?: true
  }

  export type CityMaxAggregateInputType = {
    id?: true
    name?: true
    stateId?: true
    countryCode?: true
    timezoneId?: true
  }

  export type CityCountAggregateInputType = {
    id?: true
    name?: true
    stateId?: true
    countryCode?: true
    timezoneId?: true
    _all?: true
  }

  export type CityAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which City to aggregate.
     */
    where?: CityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Cities to fetch.
     */
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Cities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Cities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Cities
    **/
    _count?: true | CityCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: CityAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: CitySumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CityMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CityMaxAggregateInputType
  }

  export type GetCityAggregateType<T extends CityAggregateArgs> = {
        [P in keyof T & keyof AggregateCity]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCity[P]>
      : GetScalarType<T[P], AggregateCity[P]>
  }




  export type CityGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CityWhereInput
    orderBy?: CityOrderByWithAggregationInput | CityOrderByWithAggregationInput[]
    by: CityScalarFieldEnum[] | CityScalarFieldEnum
    having?: CityScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CityCountAggregateInputType | true
    _avg?: CityAvgAggregateInputType
    _sum?: CitySumAggregateInputType
    _min?: CityMinAggregateInputType
    _max?: CityMaxAggregateInputType
  }

  export type CityGroupByOutputType = {
    id: number
    name: string
    stateId: number | null
    countryCode: string
    timezoneId: string | null
    _count: CityCountAggregateOutputType | null
    _avg: CityAvgAggregateOutputType | null
    _sum: CitySumAggregateOutputType | null
    _min: CityMinAggregateOutputType | null
    _max: CityMaxAggregateOutputType | null
  }

  type GetCityGroupByPayload<T extends CityGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CityGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CityGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CityGroupByOutputType[P]>
            : GetScalarType<T[P], CityGroupByOutputType[P]>
        }
      >
    >


  export type CitySelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    stateId?: boolean
    countryCode?: boolean
    timezoneId?: boolean
    state?: boolean | City$stateArgs<ExtArgs>
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | City$timezoneArgs<ExtArgs>
  }, ExtArgs["result"]["city"]>

  export type CitySelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    stateId?: boolean
    countryCode?: boolean
    timezoneId?: boolean
    state?: boolean | City$stateArgs<ExtArgs>
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | City$timezoneArgs<ExtArgs>
  }, ExtArgs["result"]["city"]>

  export type CitySelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    stateId?: boolean
    countryCode?: boolean
    timezoneId?: boolean
    state?: boolean | City$stateArgs<ExtArgs>
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | City$timezoneArgs<ExtArgs>
  }, ExtArgs["result"]["city"]>

  export type CitySelectScalar = {
    id?: boolean
    name?: boolean
    stateId?: boolean
    countryCode?: boolean
    timezoneId?: boolean
  }

  export type CityOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "stateId" | "countryCode" | "timezoneId", ExtArgs["result"]["city"]>
  export type CityInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    state?: boolean | City$stateArgs<ExtArgs>
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | City$timezoneArgs<ExtArgs>
  }
  export type CityIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    state?: boolean | City$stateArgs<ExtArgs>
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | City$timezoneArgs<ExtArgs>
  }
  export type CityIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    state?: boolean | City$stateArgs<ExtArgs>
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | City$timezoneArgs<ExtArgs>
  }

  export type $CityPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "City"
    objects: {
      state: Prisma.$StatePayload<ExtArgs> | null
      country: Prisma.$CountryPayload<ExtArgs>
      timezone: Prisma.$TimezonePayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      stateId: number | null
      countryCode: string
      timezoneId: string | null
    }, ExtArgs["result"]["city"]>
    composites: {}
  }

  type CityGetPayload<S extends boolean | null | undefined | CityDefaultArgs> = $Result.GetResult<Prisma.$CityPayload, S>

  type CityCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CityFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CityCountAggregateInputType | true
    }

  export interface CityDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['City'], meta: { name: 'City' } }
    /**
     * Find zero or one City that matches the filter.
     * @param {CityFindUniqueArgs} args - Arguments to find a City
     * @example
     * // Get one City
     * const city = await prisma.city.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CityFindUniqueArgs>(args: SelectSubset<T, CityFindUniqueArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one City that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CityFindUniqueOrThrowArgs} args - Arguments to find a City
     * @example
     * // Get one City
     * const city = await prisma.city.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CityFindUniqueOrThrowArgs>(args: SelectSubset<T, CityFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first City that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityFindFirstArgs} args - Arguments to find a City
     * @example
     * // Get one City
     * const city = await prisma.city.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CityFindFirstArgs>(args?: SelectSubset<T, CityFindFirstArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first City that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityFindFirstOrThrowArgs} args - Arguments to find a City
     * @example
     * // Get one City
     * const city = await prisma.city.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CityFindFirstOrThrowArgs>(args?: SelectSubset<T, CityFindFirstOrThrowArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Cities that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Cities
     * const cities = await prisma.city.findMany()
     * 
     * // Get first 10 Cities
     * const cities = await prisma.city.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const cityWithIdOnly = await prisma.city.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends CityFindManyArgs>(args?: SelectSubset<T, CityFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a City.
     * @param {CityCreateArgs} args - Arguments to create a City.
     * @example
     * // Create one City
     * const City = await prisma.city.create({
     *   data: {
     *     // ... data to create a City
     *   }
     * })
     * 
     */
    create<T extends CityCreateArgs>(args: SelectSubset<T, CityCreateArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Cities.
     * @param {CityCreateManyArgs} args - Arguments to create many Cities.
     * @example
     * // Create many Cities
     * const city = await prisma.city.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CityCreateManyArgs>(args?: SelectSubset<T, CityCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many Cities and returns the data saved in the database.
     * @param {CityCreateManyAndReturnArgs} args - Arguments to create many Cities.
     * @example
     * // Create many Cities
     * const city = await prisma.city.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Cities and only return the `id`
     * const cityWithIdOnly = await prisma.city.createManyAndReturn({
     *   select: { id: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends CityCreateManyAndReturnArgs>(args?: SelectSubset<T, CityCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a City.
     * @param {CityDeleteArgs} args - Arguments to delete one City.
     * @example
     * // Delete one City
     * const City = await prisma.city.delete({
     *   where: {
     *     // ... filter to delete one City
     *   }
     * })
     * 
     */
    delete<T extends CityDeleteArgs>(args: SelectSubset<T, CityDeleteArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one City.
     * @param {CityUpdateArgs} args - Arguments to update one City.
     * @example
     * // Update one City
     * const city = await prisma.city.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CityUpdateArgs>(args: SelectSubset<T, CityUpdateArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Cities.
     * @param {CityDeleteManyArgs} args - Arguments to filter Cities to delete.
     * @example
     * // Delete a few Cities
     * const { count } = await prisma.city.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CityDeleteManyArgs>(args?: SelectSubset<T, CityDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Cities.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Cities
     * const city = await prisma.city.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CityUpdateManyArgs>(args: SelectSubset<T, CityUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Cities and returns the data updated in the database.
     * @param {CityUpdateManyAndReturnArgs} args - Arguments to update many Cities.
     * @example
     * // Update many Cities
     * const city = await prisma.city.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Cities and only return the `id`
     * const cityWithIdOnly = await prisma.city.updateManyAndReturn({
     *   select: { id: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends CityUpdateManyAndReturnArgs>(args: SelectSubset<T, CityUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one City.
     * @param {CityUpsertArgs} args - Arguments to update or create a City.
     * @example
     * // Update or create a City
     * const city = await prisma.city.upsert({
     *   create: {
     *     // ... data to create a City
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the City we want to update
     *   }
     * })
     */
    upsert<T extends CityUpsertArgs>(args: SelectSubset<T, CityUpsertArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Cities.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityCountArgs} args - Arguments to filter Cities to count.
     * @example
     * // Count the number of Cities
     * const count = await prisma.city.count({
     *   where: {
     *     // ... the filter for the Cities we want to count
     *   }
     * })
    **/
    count<T extends CityCountArgs>(
      args?: Subset<T, CityCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CityCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a City.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CityAggregateArgs>(args: Subset<T, CityAggregateArgs>): Prisma.PrismaPromise<GetCityAggregateType<T>>

    /**
     * Group by City.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CityGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CityGroupByArgs['orderBy'] }
        : { orderBy?: CityGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CityGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCityGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the City model
   */
  readonly fields: CityFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for City.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CityClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    state<T extends City$stateArgs<ExtArgs> = {}>(args?: Subset<T, City$stateArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    country<T extends CountryDefaultArgs<ExtArgs> = {}>(args?: Subset<T, CountryDefaultArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    timezone<T extends City$timezoneArgs<ExtArgs> = {}>(args?: Subset<T, City$timezoneArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the City model
   */
  interface CityFieldRefs {
    readonly id: FieldRef<"City", 'Int'>
    readonly name: FieldRef<"City", 'String'>
    readonly stateId: FieldRef<"City", 'Int'>
    readonly countryCode: FieldRef<"City", 'String'>
    readonly timezoneId: FieldRef<"City", 'String'>
  }
    

  // Custom InputTypes
  /**
   * City findUnique
   */
  export type CityFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which City to fetch.
     */
    where: CityWhereUniqueInput
  }

  /**
   * City findUniqueOrThrow
   */
  export type CityFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which City to fetch.
     */
    where: CityWhereUniqueInput
  }

  /**
   * City findFirst
   */
  export type CityFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which City to fetch.
     */
    where?: CityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Cities to fetch.
     */
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Cities.
     */
    cursor?: CityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Cities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Cities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Cities.
     */
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * City findFirstOrThrow
   */
  export type CityFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which City to fetch.
     */
    where?: CityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Cities to fetch.
     */
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Cities.
     */
    cursor?: CityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Cities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Cities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Cities.
     */
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * City findMany
   */
  export type CityFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which Cities to fetch.
     */
    where?: CityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Cities to fetch.
     */
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Cities.
     */
    cursor?: CityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Cities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Cities.
     */
    skip?: number
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * City create
   */
  export type CityCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * The data needed to create a City.
     */
    data: XOR<CityCreateInput, CityUncheckedCreateInput>
  }

  /**
   * City createMany
   */
  export type CityCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Cities.
     */
    data: CityCreateManyInput | CityCreateManyInput[]
  }

  /**
   * City createManyAndReturn
   */
  export type CityCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * The data used to create many Cities.
     */
    data: CityCreateManyInput | CityCreateManyInput[]
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * City update
   */
  export type CityUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * The data needed to update a City.
     */
    data: XOR<CityUpdateInput, CityUncheckedUpdateInput>
    /**
     * Choose, which City to update.
     */
    where: CityWhereUniqueInput
  }

  /**
   * City updateMany
   */
  export type CityUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Cities.
     */
    data: XOR<CityUpdateManyMutationInput, CityUncheckedUpdateManyInput>
    /**
     * Filter which Cities to update
     */
    where?: CityWhereInput
    /**
     * Limit how many Cities to update.
     */
    limit?: number
  }

  /**
   * City updateManyAndReturn
   */
  export type CityUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * The data used to update Cities.
     */
    data: XOR<CityUpdateManyMutationInput, CityUncheckedUpdateManyInput>
    /**
     * Filter which Cities to update
     */
    where?: CityWhereInput
    /**
     * Limit how many Cities to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * City upsert
   */
  export type CityUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * The filter to search for the City to update in case it exists.
     */
    where: CityWhereUniqueInput
    /**
     * In case the City found by the `where` argument doesn't exist, create a new City with this data.
     */
    create: XOR<CityCreateInput, CityUncheckedCreateInput>
    /**
     * In case the City was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CityUpdateInput, CityUncheckedUpdateInput>
  }

  /**
   * City delete
   */
  export type CityDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter which City to delete.
     */
    where: CityWhereUniqueInput
  }

  /**
   * City deleteMany
   */
  export type CityDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Cities to delete
     */
    where?: CityWhereInput
    /**
     * Limit how many Cities to delete.
     */
    limit?: number
  }

  /**
   * City.state
   */
  export type City$stateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    where?: StateWhereInput
  }

  /**
   * City.timezone
   */
  export type City$timezoneArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    where?: TimezoneWhereInput
  }

  /**
   * City without action
   */
  export type CityDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
  }


  /**
   * Model Timezone
   */

  export type AggregateTimezone = {
    _count: TimezoneCountAggregateOutputType | null
    _avg: TimezoneAvgAggregateOutputType | null
    _sum: TimezoneSumAggregateOutputType | null
    _min: TimezoneMinAggregateOutputType | null
    _max: TimezoneMaxAggregateOutputType | null
  }

  export type TimezoneAvgAggregateOutputType = {
    offsetMinutes: number | null
  }

  export type TimezoneSumAggregateOutputType = {
    offsetMinutes: number | null
  }

  export type TimezoneMinAggregateOutputType = {
    name: string | null
    offset: string | null
    offsetMinutes: number | null
  }

  export type TimezoneMaxAggregateOutputType = {
    name: string | null
    offset: string | null
    offsetMinutes: number | null
  }

  export type TimezoneCountAggregateOutputType = {
    name: number
    offset: number
    offsetMinutes: number
    _all: number
  }


  export type TimezoneAvgAggregateInputType = {
    offsetMinutes?: true
  }

  export type TimezoneSumAggregateInputType = {
    offsetMinutes?: true
  }

  export type TimezoneMinAggregateInputType = {
    name?: true
    offset?: true
    offsetMinutes?: true
  }

  export type TimezoneMaxAggregateInputType = {
    name?: true
    offset?: true
    offsetMinutes?: true
  }

  export type TimezoneCountAggregateInputType = {
    name?: true
    offset?: true
    offsetMinutes?: true
    _all?: true
  }

  export type TimezoneAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Timezone to aggregate.
     */
    where?: TimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Timezones to fetch.
     */
    orderBy?: TimezoneOrderByWithRelationInput | TimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: TimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Timezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Timezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Timezones
    **/
    _count?: true | TimezoneCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: TimezoneAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: TimezoneSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: TimezoneMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: TimezoneMaxAggregateInputType
  }

  export type GetTimezoneAggregateType<T extends TimezoneAggregateArgs> = {
        [P in keyof T & keyof AggregateTimezone]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateTimezone[P]>
      : GetScalarType<T[P], AggregateTimezone[P]>
  }




  export type TimezoneGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: TimezoneWhereInput
    orderBy?: TimezoneOrderByWithAggregationInput | TimezoneOrderByWithAggregationInput[]
    by: TimezoneScalarFieldEnum[] | TimezoneScalarFieldEnum
    having?: TimezoneScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: TimezoneCountAggregateInputType | true
    _avg?: TimezoneAvgAggregateInputType
    _sum?: TimezoneSumAggregateInputType
    _min?: TimezoneMinAggregateInputType
    _max?: TimezoneMaxAggregateInputType
  }

  export type TimezoneGroupByOutputType = {
    name: string
    offset: string
    offsetMinutes: number
    _count: TimezoneCountAggregateOutputType | null
    _avg: TimezoneAvgAggregateOutputType | null
    _sum: TimezoneSumAggregateOutputType | null
    _min: TimezoneMinAggregateOutputType | null
    _max: TimezoneMaxAggregateOutputType | null
  }

  type GetTimezoneGroupByPayload<T extends TimezoneGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<TimezoneGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof TimezoneGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], TimezoneGroupByOutputType[P]>
            : GetScalarType<T[P], TimezoneGroupByOutputType[P]>
        }
      >
    >


  export type TimezoneSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    name?: boolean
    offset?: boolean
    offsetMinutes?: boolean
    cities?: boolean | Timezone$citiesArgs<ExtArgs>
    stateTimezones?: boolean | Timezone$stateTimezonesArgs<ExtArgs>
    countryTimezones?: boolean | Timezone$countryTimezonesArgs<ExtArgs>
    _count?: boolean | TimezoneCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["timezone"]>

  export type TimezoneSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    name?: boolean
    offset?: boolean
    offsetMinutes?: boolean
  }, ExtArgs["result"]["timezone"]>

  export type TimezoneSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    name?: boolean
    offset?: boolean
    offsetMinutes?: boolean
  }, ExtArgs["result"]["timezone"]>

  export type TimezoneSelectScalar = {
    name?: boolean
    offset?: boolean
    offsetMinutes?: boolean
  }

  export type TimezoneOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"name" | "offset" | "offsetMinutes", ExtArgs["result"]["timezone"]>
  export type TimezoneInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    cities?: boolean | Timezone$citiesArgs<ExtArgs>
    stateTimezones?: boolean | Timezone$stateTimezonesArgs<ExtArgs>
    countryTimezones?: boolean | Timezone$countryTimezonesArgs<ExtArgs>
    _count?: boolean | TimezoneCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type TimezoneIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}
  export type TimezoneIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}

  export type $TimezonePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Timezone"
    objects: {
      cities: Prisma.$CityPayload<ExtArgs>[]
      stateTimezones: Prisma.$StateTimezonePayload<ExtArgs>[]
      countryTimezones: Prisma.$CountryTimezonePayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      name: string
      offset: string
      offsetMinutes: number
    }, ExtArgs["result"]["timezone"]>
    composites: {}
  }

  type TimezoneGetPayload<S extends boolean | null | undefined | TimezoneDefaultArgs> = $Result.GetResult<Prisma.$TimezonePayload, S>

  type TimezoneCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<TimezoneFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: TimezoneCountAggregateInputType | true
    }

  export interface TimezoneDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Timezone'], meta: { name: 'Timezone' } }
    /**
     * Find zero or one Timezone that matches the filter.
     * @param {TimezoneFindUniqueArgs} args - Arguments to find a Timezone
     * @example
     * // Get one Timezone
     * const timezone = await prisma.timezone.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends TimezoneFindUniqueArgs>(args: SelectSubset<T, TimezoneFindUniqueArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Timezone that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {TimezoneFindUniqueOrThrowArgs} args - Arguments to find a Timezone
     * @example
     * // Get one Timezone
     * const timezone = await prisma.timezone.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends TimezoneFindUniqueOrThrowArgs>(args: SelectSubset<T, TimezoneFindUniqueOrThrowArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Timezone that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TimezoneFindFirstArgs} args - Arguments to find a Timezone
     * @example
     * // Get one Timezone
     * const timezone = await prisma.timezone.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends TimezoneFindFirstArgs>(args?: SelectSubset<T, TimezoneFindFirstArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Timezone that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TimezoneFindFirstOrThrowArgs} args - Arguments to find a Timezone
     * @example
     * // Get one Timezone
     * const timezone = await prisma.timezone.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends TimezoneFindFirstOrThrowArgs>(args?: SelectSubset<T, TimezoneFindFirstOrThrowArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Timezones that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TimezoneFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Timezones
     * const timezones = await prisma.timezone.findMany()
     * 
     * // Get first 10 Timezones
     * const timezones = await prisma.timezone.findMany({ take: 10 })
     * 
     * // Only select the `name`
     * const timezoneWithNameOnly = await prisma.timezone.findMany({ select: { name: true } })
     * 
     */
    findMany<T extends TimezoneFindManyArgs>(args?: SelectSubset<T, TimezoneFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Timezone.
     * @param {TimezoneCreateArgs} args - Arguments to create a Timezone.
     * @example
     * // Create one Timezone
     * const Timezone = await prisma.timezone.create({
     *   data: {
     *     // ... data to create a Timezone
     *   }
     * })
     * 
     */
    create<T extends TimezoneCreateArgs>(args: SelectSubset<T, TimezoneCreateArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Timezones.
     * @param {TimezoneCreateManyArgs} args - Arguments to create many Timezones.
     * @example
     * // Create many Timezones
     * const timezone = await prisma.timezone.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends TimezoneCreateManyArgs>(args?: SelectSubset<T, TimezoneCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many Timezones and returns the data saved in the database.
     * @param {TimezoneCreateManyAndReturnArgs} args - Arguments to create many Timezones.
     * @example
     * // Create many Timezones
     * const timezone = await prisma.timezone.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Timezones and only return the `name`
     * const timezoneWithNameOnly = await prisma.timezone.createManyAndReturn({
     *   select: { name: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends TimezoneCreateManyAndReturnArgs>(args?: SelectSubset<T, TimezoneCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a Timezone.
     * @param {TimezoneDeleteArgs} args - Arguments to delete one Timezone.
     * @example
     * // Delete one Timezone
     * const Timezone = await prisma.timezone.delete({
     *   where: {
     *     // ... filter to delete one Timezone
     *   }
     * })
     * 
     */
    delete<T extends TimezoneDeleteArgs>(args: SelectSubset<T, TimezoneDeleteArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Timezone.
     * @param {TimezoneUpdateArgs} args - Arguments to update one Timezone.
     * @example
     * // Update one Timezone
     * const timezone = await prisma.timezone.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends TimezoneUpdateArgs>(args: SelectSubset<T, TimezoneUpdateArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Timezones.
     * @param {TimezoneDeleteManyArgs} args - Arguments to filter Timezones to delete.
     * @example
     * // Delete a few Timezones
     * const { count } = await prisma.timezone.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends TimezoneDeleteManyArgs>(args?: SelectSubset<T, TimezoneDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Timezones.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TimezoneUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Timezones
     * const timezone = await prisma.timezone.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends TimezoneUpdateManyArgs>(args: SelectSubset<T, TimezoneUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Timezones and returns the data updated in the database.
     * @param {TimezoneUpdateManyAndReturnArgs} args - Arguments to update many Timezones.
     * @example
     * // Update many Timezones
     * const timezone = await prisma.timezone.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Timezones and only return the `name`
     * const timezoneWithNameOnly = await prisma.timezone.updateManyAndReturn({
     *   select: { name: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends TimezoneUpdateManyAndReturnArgs>(args: SelectSubset<T, TimezoneUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one Timezone.
     * @param {TimezoneUpsertArgs} args - Arguments to update or create a Timezone.
     * @example
     * // Update or create a Timezone
     * const timezone = await prisma.timezone.upsert({
     *   create: {
     *     // ... data to create a Timezone
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Timezone we want to update
     *   }
     * })
     */
    upsert<T extends TimezoneUpsertArgs>(args: SelectSubset<T, TimezoneUpsertArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Timezones.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TimezoneCountArgs} args - Arguments to filter Timezones to count.
     * @example
     * // Count the number of Timezones
     * const count = await prisma.timezone.count({
     *   where: {
     *     // ... the filter for the Timezones we want to count
     *   }
     * })
    **/
    count<T extends TimezoneCountArgs>(
      args?: Subset<T, TimezoneCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], TimezoneCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Timezone.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TimezoneAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends TimezoneAggregateArgs>(args: Subset<T, TimezoneAggregateArgs>): Prisma.PrismaPromise<GetTimezoneAggregateType<T>>

    /**
     * Group by Timezone.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TimezoneGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends TimezoneGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: TimezoneGroupByArgs['orderBy'] }
        : { orderBy?: TimezoneGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, TimezoneGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetTimezoneGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Timezone model
   */
  readonly fields: TimezoneFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Timezone.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__TimezoneClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    cities<T extends Timezone$citiesArgs<ExtArgs> = {}>(args?: Subset<T, Timezone$citiesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    stateTimezones<T extends Timezone$stateTimezonesArgs<ExtArgs> = {}>(args?: Subset<T, Timezone$stateTimezonesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    countryTimezones<T extends Timezone$countryTimezonesArgs<ExtArgs> = {}>(args?: Subset<T, Timezone$countryTimezonesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Timezone model
   */
  interface TimezoneFieldRefs {
    readonly name: FieldRef<"Timezone", 'String'>
    readonly offset: FieldRef<"Timezone", 'String'>
    readonly offsetMinutes: FieldRef<"Timezone", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * Timezone findUnique
   */
  export type TimezoneFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * Filter, which Timezone to fetch.
     */
    where: TimezoneWhereUniqueInput
  }

  /**
   * Timezone findUniqueOrThrow
   */
  export type TimezoneFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * Filter, which Timezone to fetch.
     */
    where: TimezoneWhereUniqueInput
  }

  /**
   * Timezone findFirst
   */
  export type TimezoneFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * Filter, which Timezone to fetch.
     */
    where?: TimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Timezones to fetch.
     */
    orderBy?: TimezoneOrderByWithRelationInput | TimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Timezones.
     */
    cursor?: TimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Timezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Timezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Timezones.
     */
    distinct?: TimezoneScalarFieldEnum | TimezoneScalarFieldEnum[]
  }

  /**
   * Timezone findFirstOrThrow
   */
  export type TimezoneFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * Filter, which Timezone to fetch.
     */
    where?: TimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Timezones to fetch.
     */
    orderBy?: TimezoneOrderByWithRelationInput | TimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Timezones.
     */
    cursor?: TimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Timezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Timezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Timezones.
     */
    distinct?: TimezoneScalarFieldEnum | TimezoneScalarFieldEnum[]
  }

  /**
   * Timezone findMany
   */
  export type TimezoneFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * Filter, which Timezones to fetch.
     */
    where?: TimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Timezones to fetch.
     */
    orderBy?: TimezoneOrderByWithRelationInput | TimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Timezones.
     */
    cursor?: TimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Timezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Timezones.
     */
    skip?: number
    distinct?: TimezoneScalarFieldEnum | TimezoneScalarFieldEnum[]
  }

  /**
   * Timezone create
   */
  export type TimezoneCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * The data needed to create a Timezone.
     */
    data: XOR<TimezoneCreateInput, TimezoneUncheckedCreateInput>
  }

  /**
   * Timezone createMany
   */
  export type TimezoneCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Timezones.
     */
    data: TimezoneCreateManyInput | TimezoneCreateManyInput[]
  }

  /**
   * Timezone createManyAndReturn
   */
  export type TimezoneCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * The data used to create many Timezones.
     */
    data: TimezoneCreateManyInput | TimezoneCreateManyInput[]
  }

  /**
   * Timezone update
   */
  export type TimezoneUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * The data needed to update a Timezone.
     */
    data: XOR<TimezoneUpdateInput, TimezoneUncheckedUpdateInput>
    /**
     * Choose, which Timezone to update.
     */
    where: TimezoneWhereUniqueInput
  }

  /**
   * Timezone updateMany
   */
  export type TimezoneUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Timezones.
     */
    data: XOR<TimezoneUpdateManyMutationInput, TimezoneUncheckedUpdateManyInput>
    /**
     * Filter which Timezones to update
     */
    where?: TimezoneWhereInput
    /**
     * Limit how many Timezones to update.
     */
    limit?: number
  }

  /**
   * Timezone updateManyAndReturn
   */
  export type TimezoneUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * The data used to update Timezones.
     */
    data: XOR<TimezoneUpdateManyMutationInput, TimezoneUncheckedUpdateManyInput>
    /**
     * Filter which Timezones to update
     */
    where?: TimezoneWhereInput
    /**
     * Limit how many Timezones to update.
     */
    limit?: number
  }

  /**
   * Timezone upsert
   */
  export type TimezoneUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * The filter to search for the Timezone to update in case it exists.
     */
    where: TimezoneWhereUniqueInput
    /**
     * In case the Timezone found by the `where` argument doesn't exist, create a new Timezone with this data.
     */
    create: XOR<TimezoneCreateInput, TimezoneUncheckedCreateInput>
    /**
     * In case the Timezone was found with the provided `where` argument, update it with this data.
     */
    update: XOR<TimezoneUpdateInput, TimezoneUncheckedUpdateInput>
  }

  /**
   * Timezone delete
   */
  export type TimezoneDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
    /**
     * Filter which Timezone to delete.
     */
    where: TimezoneWhereUniqueInput
  }

  /**
   * Timezone deleteMany
   */
  export type TimezoneDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Timezones to delete
     */
    where?: TimezoneWhereInput
    /**
     * Limit how many Timezones to delete.
     */
    limit?: number
  }

  /**
   * Timezone.cities
   */
  export type Timezone$citiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    where?: CityWhereInput
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    cursor?: CityWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * Timezone.stateTimezones
   */
  export type Timezone$stateTimezonesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    where?: StateTimezoneWhereInput
    orderBy?: StateTimezoneOrderByWithRelationInput | StateTimezoneOrderByWithRelationInput[]
    cursor?: StateTimezoneWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StateTimezoneScalarFieldEnum | StateTimezoneScalarFieldEnum[]
  }

  /**
   * Timezone.countryTimezones
   */
  export type Timezone$countryTimezonesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    where?: CountryTimezoneWhereInput
    orderBy?: CountryTimezoneOrderByWithRelationInput | CountryTimezoneOrderByWithRelationInput[]
    cursor?: CountryTimezoneWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CountryTimezoneScalarFieldEnum | CountryTimezoneScalarFieldEnum[]
  }

  /**
   * Timezone without action
   */
  export type TimezoneDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Timezone
     */
    select?: TimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Timezone
     */
    omit?: TimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TimezoneInclude<ExtArgs> | null
  }


  /**
   * Model CountryTimezone
   */

  export type AggregateCountryTimezone = {
    _count: CountryTimezoneCountAggregateOutputType | null
    _min: CountryTimezoneMinAggregateOutputType | null
    _max: CountryTimezoneMaxAggregateOutputType | null
  }

  export type CountryTimezoneMinAggregateOutputType = {
    countryCode: string | null
    timezoneId: string | null
  }

  export type CountryTimezoneMaxAggregateOutputType = {
    countryCode: string | null
    timezoneId: string | null
  }

  export type CountryTimezoneCountAggregateOutputType = {
    countryCode: number
    timezoneId: number
    _all: number
  }


  export type CountryTimezoneMinAggregateInputType = {
    countryCode?: true
    timezoneId?: true
  }

  export type CountryTimezoneMaxAggregateInputType = {
    countryCode?: true
    timezoneId?: true
  }

  export type CountryTimezoneCountAggregateInputType = {
    countryCode?: true
    timezoneId?: true
    _all?: true
  }

  export type CountryTimezoneAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which CountryTimezone to aggregate.
     */
    where?: CountryTimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CountryTimezones to fetch.
     */
    orderBy?: CountryTimezoneOrderByWithRelationInput | CountryTimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CountryTimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CountryTimezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CountryTimezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned CountryTimezones
    **/
    _count?: true | CountryTimezoneCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CountryTimezoneMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CountryTimezoneMaxAggregateInputType
  }

  export type GetCountryTimezoneAggregateType<T extends CountryTimezoneAggregateArgs> = {
        [P in keyof T & keyof AggregateCountryTimezone]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCountryTimezone[P]>
      : GetScalarType<T[P], AggregateCountryTimezone[P]>
  }




  export type CountryTimezoneGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CountryTimezoneWhereInput
    orderBy?: CountryTimezoneOrderByWithAggregationInput | CountryTimezoneOrderByWithAggregationInput[]
    by: CountryTimezoneScalarFieldEnum[] | CountryTimezoneScalarFieldEnum
    having?: CountryTimezoneScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CountryTimezoneCountAggregateInputType | true
    _min?: CountryTimezoneMinAggregateInputType
    _max?: CountryTimezoneMaxAggregateInputType
  }

  export type CountryTimezoneGroupByOutputType = {
    countryCode: string
    timezoneId: string
    _count: CountryTimezoneCountAggregateOutputType | null
    _min: CountryTimezoneMinAggregateOutputType | null
    _max: CountryTimezoneMaxAggregateOutputType | null
  }

  type GetCountryTimezoneGroupByPayload<T extends CountryTimezoneGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CountryTimezoneGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CountryTimezoneGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CountryTimezoneGroupByOutputType[P]>
            : GetScalarType<T[P], CountryTimezoneGroupByOutputType[P]>
        }
      >
    >


  export type CountryTimezoneSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    countryCode?: boolean
    timezoneId?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["countryTimezone"]>

  export type CountryTimezoneSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    countryCode?: boolean
    timezoneId?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["countryTimezone"]>

  export type CountryTimezoneSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    countryCode?: boolean
    timezoneId?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["countryTimezone"]>

  export type CountryTimezoneSelectScalar = {
    countryCode?: boolean
    timezoneId?: boolean
  }

  export type CountryTimezoneOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"countryCode" | "timezoneId", ExtArgs["result"]["countryTimezone"]>
  export type CountryTimezoneInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }
  export type CountryTimezoneIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }
  export type CountryTimezoneIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }

  export type $CountryTimezonePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "CountryTimezone"
    objects: {
      country: Prisma.$CountryPayload<ExtArgs>
      timezone: Prisma.$TimezonePayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      countryCode: string
      timezoneId: string
    }, ExtArgs["result"]["countryTimezone"]>
    composites: {}
  }

  type CountryTimezoneGetPayload<S extends boolean | null | undefined | CountryTimezoneDefaultArgs> = $Result.GetResult<Prisma.$CountryTimezonePayload, S>

  type CountryTimezoneCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CountryTimezoneFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CountryTimezoneCountAggregateInputType | true
    }

  export interface CountryTimezoneDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['CountryTimezone'], meta: { name: 'CountryTimezone' } }
    /**
     * Find zero or one CountryTimezone that matches the filter.
     * @param {CountryTimezoneFindUniqueArgs} args - Arguments to find a CountryTimezone
     * @example
     * // Get one CountryTimezone
     * const countryTimezone = await prisma.countryTimezone.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CountryTimezoneFindUniqueArgs>(args: SelectSubset<T, CountryTimezoneFindUniqueArgs<ExtArgs>>): Prisma__CountryTimezoneClient<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one CountryTimezone that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CountryTimezoneFindUniqueOrThrowArgs} args - Arguments to find a CountryTimezone
     * @example
     * // Get one CountryTimezone
     * const countryTimezone = await prisma.countryTimezone.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CountryTimezoneFindUniqueOrThrowArgs>(args: SelectSubset<T, CountryTimezoneFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CountryTimezoneClient<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first CountryTimezone that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryTimezoneFindFirstArgs} args - Arguments to find a CountryTimezone
     * @example
     * // Get one CountryTimezone
     * const countryTimezone = await prisma.countryTimezone.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CountryTimezoneFindFirstArgs>(args?: SelectSubset<T, CountryTimezoneFindFirstArgs<ExtArgs>>): Prisma__CountryTimezoneClient<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first CountryTimezone that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryTimezoneFindFirstOrThrowArgs} args - Arguments to find a CountryTimezone
     * @example
     * // Get one CountryTimezone
     * const countryTimezone = await prisma.countryTimezone.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CountryTimezoneFindFirstOrThrowArgs>(args?: SelectSubset<T, CountryTimezoneFindFirstOrThrowArgs<ExtArgs>>): Prisma__CountryTimezoneClient<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more CountryTimezones that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryTimezoneFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all CountryTimezones
     * const countryTimezones = await prisma.countryTimezone.findMany()
     * 
     * // Get first 10 CountryTimezones
     * const countryTimezones = await prisma.countryTimezone.findMany({ take: 10 })
     * 
     * // Only select the `countryCode`
     * const countryTimezoneWithCountryCodeOnly = await prisma.countryTimezone.findMany({ select: { countryCode: true } })
     * 
     */
    findMany<T extends CountryTimezoneFindManyArgs>(args?: SelectSubset<T, CountryTimezoneFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a CountryTimezone.
     * @param {CountryTimezoneCreateArgs} args - Arguments to create a CountryTimezone.
     * @example
     * // Create one CountryTimezone
     * const CountryTimezone = await prisma.countryTimezone.create({
     *   data: {
     *     // ... data to create a CountryTimezone
     *   }
     * })
     * 
     */
    create<T extends CountryTimezoneCreateArgs>(args: SelectSubset<T, CountryTimezoneCreateArgs<ExtArgs>>): Prisma__CountryTimezoneClient<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many CountryTimezones.
     * @param {CountryTimezoneCreateManyArgs} args - Arguments to create many CountryTimezones.
     * @example
     * // Create many CountryTimezones
     * const countryTimezone = await prisma.countryTimezone.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CountryTimezoneCreateManyArgs>(args?: SelectSubset<T, CountryTimezoneCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many CountryTimezones and returns the data saved in the database.
     * @param {CountryTimezoneCreateManyAndReturnArgs} args - Arguments to create many CountryTimezones.
     * @example
     * // Create many CountryTimezones
     * const countryTimezone = await prisma.countryTimezone.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many CountryTimezones and only return the `countryCode`
     * const countryTimezoneWithCountryCodeOnly = await prisma.countryTimezone.createManyAndReturn({
     *   select: { countryCode: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends CountryTimezoneCreateManyAndReturnArgs>(args?: SelectSubset<T, CountryTimezoneCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a CountryTimezone.
     * @param {CountryTimezoneDeleteArgs} args - Arguments to delete one CountryTimezone.
     * @example
     * // Delete one CountryTimezone
     * const CountryTimezone = await prisma.countryTimezone.delete({
     *   where: {
     *     // ... filter to delete one CountryTimezone
     *   }
     * })
     * 
     */
    delete<T extends CountryTimezoneDeleteArgs>(args: SelectSubset<T, CountryTimezoneDeleteArgs<ExtArgs>>): Prisma__CountryTimezoneClient<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one CountryTimezone.
     * @param {CountryTimezoneUpdateArgs} args - Arguments to update one CountryTimezone.
     * @example
     * // Update one CountryTimezone
     * const countryTimezone = await prisma.countryTimezone.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CountryTimezoneUpdateArgs>(args: SelectSubset<T, CountryTimezoneUpdateArgs<ExtArgs>>): Prisma__CountryTimezoneClient<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more CountryTimezones.
     * @param {CountryTimezoneDeleteManyArgs} args - Arguments to filter CountryTimezones to delete.
     * @example
     * // Delete a few CountryTimezones
     * const { count } = await prisma.countryTimezone.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CountryTimezoneDeleteManyArgs>(args?: SelectSubset<T, CountryTimezoneDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more CountryTimezones.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryTimezoneUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many CountryTimezones
     * const countryTimezone = await prisma.countryTimezone.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CountryTimezoneUpdateManyArgs>(args: SelectSubset<T, CountryTimezoneUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more CountryTimezones and returns the data updated in the database.
     * @param {CountryTimezoneUpdateManyAndReturnArgs} args - Arguments to update many CountryTimezones.
     * @example
     * // Update many CountryTimezones
     * const countryTimezone = await prisma.countryTimezone.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more CountryTimezones and only return the `countryCode`
     * const countryTimezoneWithCountryCodeOnly = await prisma.countryTimezone.updateManyAndReturn({
     *   select: { countryCode: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends CountryTimezoneUpdateManyAndReturnArgs>(args: SelectSubset<T, CountryTimezoneUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one CountryTimezone.
     * @param {CountryTimezoneUpsertArgs} args - Arguments to update or create a CountryTimezone.
     * @example
     * // Update or create a CountryTimezone
     * const countryTimezone = await prisma.countryTimezone.upsert({
     *   create: {
     *     // ... data to create a CountryTimezone
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the CountryTimezone we want to update
     *   }
     * })
     */
    upsert<T extends CountryTimezoneUpsertArgs>(args: SelectSubset<T, CountryTimezoneUpsertArgs<ExtArgs>>): Prisma__CountryTimezoneClient<$Result.GetResult<Prisma.$CountryTimezonePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of CountryTimezones.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryTimezoneCountArgs} args - Arguments to filter CountryTimezones to count.
     * @example
     * // Count the number of CountryTimezones
     * const count = await prisma.countryTimezone.count({
     *   where: {
     *     // ... the filter for the CountryTimezones we want to count
     *   }
     * })
    **/
    count<T extends CountryTimezoneCountArgs>(
      args?: Subset<T, CountryTimezoneCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CountryTimezoneCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a CountryTimezone.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryTimezoneAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CountryTimezoneAggregateArgs>(args: Subset<T, CountryTimezoneAggregateArgs>): Prisma.PrismaPromise<GetCountryTimezoneAggregateType<T>>

    /**
     * Group by CountryTimezone.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryTimezoneGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CountryTimezoneGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CountryTimezoneGroupByArgs['orderBy'] }
        : { orderBy?: CountryTimezoneGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CountryTimezoneGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCountryTimezoneGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the CountryTimezone model
   */
  readonly fields: CountryTimezoneFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for CountryTimezone.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CountryTimezoneClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    country<T extends CountryDefaultArgs<ExtArgs> = {}>(args?: Subset<T, CountryDefaultArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    timezone<T extends TimezoneDefaultArgs<ExtArgs> = {}>(args?: Subset<T, TimezoneDefaultArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the CountryTimezone model
   */
  interface CountryTimezoneFieldRefs {
    readonly countryCode: FieldRef<"CountryTimezone", 'String'>
    readonly timezoneId: FieldRef<"CountryTimezone", 'String'>
  }
    

  // Custom InputTypes
  /**
   * CountryTimezone findUnique
   */
  export type CountryTimezoneFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which CountryTimezone to fetch.
     */
    where: CountryTimezoneWhereUniqueInput
  }

  /**
   * CountryTimezone findUniqueOrThrow
   */
  export type CountryTimezoneFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which CountryTimezone to fetch.
     */
    where: CountryTimezoneWhereUniqueInput
  }

  /**
   * CountryTimezone findFirst
   */
  export type CountryTimezoneFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which CountryTimezone to fetch.
     */
    where?: CountryTimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CountryTimezones to fetch.
     */
    orderBy?: CountryTimezoneOrderByWithRelationInput | CountryTimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for CountryTimezones.
     */
    cursor?: CountryTimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CountryTimezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CountryTimezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of CountryTimezones.
     */
    distinct?: CountryTimezoneScalarFieldEnum | CountryTimezoneScalarFieldEnum[]
  }

  /**
   * CountryTimezone findFirstOrThrow
   */
  export type CountryTimezoneFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which CountryTimezone to fetch.
     */
    where?: CountryTimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CountryTimezones to fetch.
     */
    orderBy?: CountryTimezoneOrderByWithRelationInput | CountryTimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for CountryTimezones.
     */
    cursor?: CountryTimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CountryTimezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CountryTimezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of CountryTimezones.
     */
    distinct?: CountryTimezoneScalarFieldEnum | CountryTimezoneScalarFieldEnum[]
  }

  /**
   * CountryTimezone findMany
   */
  export type CountryTimezoneFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which CountryTimezones to fetch.
     */
    where?: CountryTimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CountryTimezones to fetch.
     */
    orderBy?: CountryTimezoneOrderByWithRelationInput | CountryTimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing CountryTimezones.
     */
    cursor?: CountryTimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CountryTimezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CountryTimezones.
     */
    skip?: number
    distinct?: CountryTimezoneScalarFieldEnum | CountryTimezoneScalarFieldEnum[]
  }

  /**
   * CountryTimezone create
   */
  export type CountryTimezoneCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * The data needed to create a CountryTimezone.
     */
    data: XOR<CountryTimezoneCreateInput, CountryTimezoneUncheckedCreateInput>
  }

  /**
   * CountryTimezone createMany
   */
  export type CountryTimezoneCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many CountryTimezones.
     */
    data: CountryTimezoneCreateManyInput | CountryTimezoneCreateManyInput[]
  }

  /**
   * CountryTimezone createManyAndReturn
   */
  export type CountryTimezoneCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * The data used to create many CountryTimezones.
     */
    data: CountryTimezoneCreateManyInput | CountryTimezoneCreateManyInput[]
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * CountryTimezone update
   */
  export type CountryTimezoneUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * The data needed to update a CountryTimezone.
     */
    data: XOR<CountryTimezoneUpdateInput, CountryTimezoneUncheckedUpdateInput>
    /**
     * Choose, which CountryTimezone to update.
     */
    where: CountryTimezoneWhereUniqueInput
  }

  /**
   * CountryTimezone updateMany
   */
  export type CountryTimezoneUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update CountryTimezones.
     */
    data: XOR<CountryTimezoneUpdateManyMutationInput, CountryTimezoneUncheckedUpdateManyInput>
    /**
     * Filter which CountryTimezones to update
     */
    where?: CountryTimezoneWhereInput
    /**
     * Limit how many CountryTimezones to update.
     */
    limit?: number
  }

  /**
   * CountryTimezone updateManyAndReturn
   */
  export type CountryTimezoneUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * The data used to update CountryTimezones.
     */
    data: XOR<CountryTimezoneUpdateManyMutationInput, CountryTimezoneUncheckedUpdateManyInput>
    /**
     * Filter which CountryTimezones to update
     */
    where?: CountryTimezoneWhereInput
    /**
     * Limit how many CountryTimezones to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * CountryTimezone upsert
   */
  export type CountryTimezoneUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * The filter to search for the CountryTimezone to update in case it exists.
     */
    where: CountryTimezoneWhereUniqueInput
    /**
     * In case the CountryTimezone found by the `where` argument doesn't exist, create a new CountryTimezone with this data.
     */
    create: XOR<CountryTimezoneCreateInput, CountryTimezoneUncheckedCreateInput>
    /**
     * In case the CountryTimezone was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CountryTimezoneUpdateInput, CountryTimezoneUncheckedUpdateInput>
  }

  /**
   * CountryTimezone delete
   */
  export type CountryTimezoneDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
    /**
     * Filter which CountryTimezone to delete.
     */
    where: CountryTimezoneWhereUniqueInput
  }

  /**
   * CountryTimezone deleteMany
   */
  export type CountryTimezoneDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which CountryTimezones to delete
     */
    where?: CountryTimezoneWhereInput
    /**
     * Limit how many CountryTimezones to delete.
     */
    limit?: number
  }

  /**
   * CountryTimezone without action
   */
  export type CountryTimezoneDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryTimezone
     */
    select?: CountryTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CountryTimezone
     */
    omit?: CountryTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryTimezoneInclude<ExtArgs> | null
  }


  /**
   * Model StateTimezone
   */

  export type AggregateStateTimezone = {
    _count: StateTimezoneCountAggregateOutputType | null
    _avg: StateTimezoneAvgAggregateOutputType | null
    _sum: StateTimezoneSumAggregateOutputType | null
    _min: StateTimezoneMinAggregateOutputType | null
    _max: StateTimezoneMaxAggregateOutputType | null
  }

  export type StateTimezoneAvgAggregateOutputType = {
    stateId: number | null
  }

  export type StateTimezoneSumAggregateOutputType = {
    stateId: number | null
  }

  export type StateTimezoneMinAggregateOutputType = {
    stateId: number | null
    timezoneId: string | null
  }

  export type StateTimezoneMaxAggregateOutputType = {
    stateId: number | null
    timezoneId: string | null
  }

  export type StateTimezoneCountAggregateOutputType = {
    stateId: number
    timezoneId: number
    _all: number
  }


  export type StateTimezoneAvgAggregateInputType = {
    stateId?: true
  }

  export type StateTimezoneSumAggregateInputType = {
    stateId?: true
  }

  export type StateTimezoneMinAggregateInputType = {
    stateId?: true
    timezoneId?: true
  }

  export type StateTimezoneMaxAggregateInputType = {
    stateId?: true
    timezoneId?: true
  }

  export type StateTimezoneCountAggregateInputType = {
    stateId?: true
    timezoneId?: true
    _all?: true
  }

  export type StateTimezoneAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StateTimezone to aggregate.
     */
    where?: StateTimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StateTimezones to fetch.
     */
    orderBy?: StateTimezoneOrderByWithRelationInput | StateTimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: StateTimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StateTimezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StateTimezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned StateTimezones
    **/
    _count?: true | StateTimezoneCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: StateTimezoneAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: StateTimezoneSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: StateTimezoneMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: StateTimezoneMaxAggregateInputType
  }

  export type GetStateTimezoneAggregateType<T extends StateTimezoneAggregateArgs> = {
        [P in keyof T & keyof AggregateStateTimezone]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateStateTimezone[P]>
      : GetScalarType<T[P], AggregateStateTimezone[P]>
  }




  export type StateTimezoneGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateTimezoneWhereInput
    orderBy?: StateTimezoneOrderByWithAggregationInput | StateTimezoneOrderByWithAggregationInput[]
    by: StateTimezoneScalarFieldEnum[] | StateTimezoneScalarFieldEnum
    having?: StateTimezoneScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: StateTimezoneCountAggregateInputType | true
    _avg?: StateTimezoneAvgAggregateInputType
    _sum?: StateTimezoneSumAggregateInputType
    _min?: StateTimezoneMinAggregateInputType
    _max?: StateTimezoneMaxAggregateInputType
  }

  export type StateTimezoneGroupByOutputType = {
    stateId: number
    timezoneId: string
    _count: StateTimezoneCountAggregateOutputType | null
    _avg: StateTimezoneAvgAggregateOutputType | null
    _sum: StateTimezoneSumAggregateOutputType | null
    _min: StateTimezoneMinAggregateOutputType | null
    _max: StateTimezoneMaxAggregateOutputType | null
  }

  type GetStateTimezoneGroupByPayload<T extends StateTimezoneGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<StateTimezoneGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof StateTimezoneGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], StateTimezoneGroupByOutputType[P]>
            : GetScalarType<T[P], StateTimezoneGroupByOutputType[P]>
        }
      >
    >


  export type StateTimezoneSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    stateId?: boolean
    timezoneId?: boolean
    state?: boolean | StateDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["stateTimezone"]>

  export type StateTimezoneSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    stateId?: boolean
    timezoneId?: boolean
    state?: boolean | StateDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["stateTimezone"]>

  export type StateTimezoneSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    stateId?: boolean
    timezoneId?: boolean
    state?: boolean | StateDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["stateTimezone"]>

  export type StateTimezoneSelectScalar = {
    stateId?: boolean
    timezoneId?: boolean
  }

  export type StateTimezoneOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"stateId" | "timezoneId", ExtArgs["result"]["stateTimezone"]>
  export type StateTimezoneInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    state?: boolean | StateDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }
  export type StateTimezoneIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    state?: boolean | StateDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }
  export type StateTimezoneIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    state?: boolean | StateDefaultArgs<ExtArgs>
    timezone?: boolean | TimezoneDefaultArgs<ExtArgs>
  }

  export type $StateTimezonePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "StateTimezone"
    objects: {
      state: Prisma.$StatePayload<ExtArgs>
      timezone: Prisma.$TimezonePayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      stateId: number
      timezoneId: string
    }, ExtArgs["result"]["stateTimezone"]>
    composites: {}
  }

  type StateTimezoneGetPayload<S extends boolean | null | undefined | StateTimezoneDefaultArgs> = $Result.GetResult<Prisma.$StateTimezonePayload, S>

  type StateTimezoneCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<StateTimezoneFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: StateTimezoneCountAggregateInputType | true
    }

  export interface StateTimezoneDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['StateTimezone'], meta: { name: 'StateTimezone' } }
    /**
     * Find zero or one StateTimezone that matches the filter.
     * @param {StateTimezoneFindUniqueArgs} args - Arguments to find a StateTimezone
     * @example
     * // Get one StateTimezone
     * const stateTimezone = await prisma.stateTimezone.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends StateTimezoneFindUniqueArgs>(args: SelectSubset<T, StateTimezoneFindUniqueArgs<ExtArgs>>): Prisma__StateTimezoneClient<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one StateTimezone that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {StateTimezoneFindUniqueOrThrowArgs} args - Arguments to find a StateTimezone
     * @example
     * // Get one StateTimezone
     * const stateTimezone = await prisma.stateTimezone.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends StateTimezoneFindUniqueOrThrowArgs>(args: SelectSubset<T, StateTimezoneFindUniqueOrThrowArgs<ExtArgs>>): Prisma__StateTimezoneClient<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StateTimezone that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateTimezoneFindFirstArgs} args - Arguments to find a StateTimezone
     * @example
     * // Get one StateTimezone
     * const stateTimezone = await prisma.stateTimezone.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends StateTimezoneFindFirstArgs>(args?: SelectSubset<T, StateTimezoneFindFirstArgs<ExtArgs>>): Prisma__StateTimezoneClient<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StateTimezone that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateTimezoneFindFirstOrThrowArgs} args - Arguments to find a StateTimezone
     * @example
     * // Get one StateTimezone
     * const stateTimezone = await prisma.stateTimezone.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends StateTimezoneFindFirstOrThrowArgs>(args?: SelectSubset<T, StateTimezoneFindFirstOrThrowArgs<ExtArgs>>): Prisma__StateTimezoneClient<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more StateTimezones that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateTimezoneFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all StateTimezones
     * const stateTimezones = await prisma.stateTimezone.findMany()
     * 
     * // Get first 10 StateTimezones
     * const stateTimezones = await prisma.stateTimezone.findMany({ take: 10 })
     * 
     * // Only select the `stateId`
     * const stateTimezoneWithStateIdOnly = await prisma.stateTimezone.findMany({ select: { stateId: true } })
     * 
     */
    findMany<T extends StateTimezoneFindManyArgs>(args?: SelectSubset<T, StateTimezoneFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a StateTimezone.
     * @param {StateTimezoneCreateArgs} args - Arguments to create a StateTimezone.
     * @example
     * // Create one StateTimezone
     * const StateTimezone = await prisma.stateTimezone.create({
     *   data: {
     *     // ... data to create a StateTimezone
     *   }
     * })
     * 
     */
    create<T extends StateTimezoneCreateArgs>(args: SelectSubset<T, StateTimezoneCreateArgs<ExtArgs>>): Prisma__StateTimezoneClient<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many StateTimezones.
     * @param {StateTimezoneCreateManyArgs} args - Arguments to create many StateTimezones.
     * @example
     * // Create many StateTimezones
     * const stateTimezone = await prisma.stateTimezone.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends StateTimezoneCreateManyArgs>(args?: SelectSubset<T, StateTimezoneCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many StateTimezones and returns the data saved in the database.
     * @param {StateTimezoneCreateManyAndReturnArgs} args - Arguments to create many StateTimezones.
     * @example
     * // Create many StateTimezones
     * const stateTimezone = await prisma.stateTimezone.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many StateTimezones and only return the `stateId`
     * const stateTimezoneWithStateIdOnly = await prisma.stateTimezone.createManyAndReturn({
     *   select: { stateId: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends StateTimezoneCreateManyAndReturnArgs>(args?: SelectSubset<T, StateTimezoneCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a StateTimezone.
     * @param {StateTimezoneDeleteArgs} args - Arguments to delete one StateTimezone.
     * @example
     * // Delete one StateTimezone
     * const StateTimezone = await prisma.stateTimezone.delete({
     *   where: {
     *     // ... filter to delete one StateTimezone
     *   }
     * })
     * 
     */
    delete<T extends StateTimezoneDeleteArgs>(args: SelectSubset<T, StateTimezoneDeleteArgs<ExtArgs>>): Prisma__StateTimezoneClient<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one StateTimezone.
     * @param {StateTimezoneUpdateArgs} args - Arguments to update one StateTimezone.
     * @example
     * // Update one StateTimezone
     * const stateTimezone = await prisma.stateTimezone.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends StateTimezoneUpdateArgs>(args: SelectSubset<T, StateTimezoneUpdateArgs<ExtArgs>>): Prisma__StateTimezoneClient<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more StateTimezones.
     * @param {StateTimezoneDeleteManyArgs} args - Arguments to filter StateTimezones to delete.
     * @example
     * // Delete a few StateTimezones
     * const { count } = await prisma.stateTimezone.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends StateTimezoneDeleteManyArgs>(args?: SelectSubset<T, StateTimezoneDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more StateTimezones.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateTimezoneUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many StateTimezones
     * const stateTimezone = await prisma.stateTimezone.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends StateTimezoneUpdateManyArgs>(args: SelectSubset<T, StateTimezoneUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more StateTimezones and returns the data updated in the database.
     * @param {StateTimezoneUpdateManyAndReturnArgs} args - Arguments to update many StateTimezones.
     * @example
     * // Update many StateTimezones
     * const stateTimezone = await prisma.stateTimezone.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more StateTimezones and only return the `stateId`
     * const stateTimezoneWithStateIdOnly = await prisma.stateTimezone.updateManyAndReturn({
     *   select: { stateId: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends StateTimezoneUpdateManyAndReturnArgs>(args: SelectSubset<T, StateTimezoneUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one StateTimezone.
     * @param {StateTimezoneUpsertArgs} args - Arguments to update or create a StateTimezone.
     * @example
     * // Update or create a StateTimezone
     * const stateTimezone = await prisma.stateTimezone.upsert({
     *   create: {
     *     // ... data to create a StateTimezone
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the StateTimezone we want to update
     *   }
     * })
     */
    upsert<T extends StateTimezoneUpsertArgs>(args: SelectSubset<T, StateTimezoneUpsertArgs<ExtArgs>>): Prisma__StateTimezoneClient<$Result.GetResult<Prisma.$StateTimezonePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of StateTimezones.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateTimezoneCountArgs} args - Arguments to filter StateTimezones to count.
     * @example
     * // Count the number of StateTimezones
     * const count = await prisma.stateTimezone.count({
     *   where: {
     *     // ... the filter for the StateTimezones we want to count
     *   }
     * })
    **/
    count<T extends StateTimezoneCountArgs>(
      args?: Subset<T, StateTimezoneCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], StateTimezoneCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a StateTimezone.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateTimezoneAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends StateTimezoneAggregateArgs>(args: Subset<T, StateTimezoneAggregateArgs>): Prisma.PrismaPromise<GetStateTimezoneAggregateType<T>>

    /**
     * Group by StateTimezone.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateTimezoneGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends StateTimezoneGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: StateTimezoneGroupByArgs['orderBy'] }
        : { orderBy?: StateTimezoneGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, StateTimezoneGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetStateTimezoneGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the StateTimezone model
   */
  readonly fields: StateTimezoneFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for StateTimezone.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__StateTimezoneClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    state<T extends StateDefaultArgs<ExtArgs> = {}>(args?: Subset<T, StateDefaultArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    timezone<T extends TimezoneDefaultArgs<ExtArgs> = {}>(args?: Subset<T, TimezoneDefaultArgs<ExtArgs>>): Prisma__TimezoneClient<$Result.GetResult<Prisma.$TimezonePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the StateTimezone model
   */
  interface StateTimezoneFieldRefs {
    readonly stateId: FieldRef<"StateTimezone", 'Int'>
    readonly timezoneId: FieldRef<"StateTimezone", 'String'>
  }
    

  // Custom InputTypes
  /**
   * StateTimezone findUnique
   */
  export type StateTimezoneFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which StateTimezone to fetch.
     */
    where: StateTimezoneWhereUniqueInput
  }

  /**
   * StateTimezone findUniqueOrThrow
   */
  export type StateTimezoneFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which StateTimezone to fetch.
     */
    where: StateTimezoneWhereUniqueInput
  }

  /**
   * StateTimezone findFirst
   */
  export type StateTimezoneFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which StateTimezone to fetch.
     */
    where?: StateTimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StateTimezones to fetch.
     */
    orderBy?: StateTimezoneOrderByWithRelationInput | StateTimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StateTimezones.
     */
    cursor?: StateTimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StateTimezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StateTimezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StateTimezones.
     */
    distinct?: StateTimezoneScalarFieldEnum | StateTimezoneScalarFieldEnum[]
  }

  /**
   * StateTimezone findFirstOrThrow
   */
  export type StateTimezoneFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which StateTimezone to fetch.
     */
    where?: StateTimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StateTimezones to fetch.
     */
    orderBy?: StateTimezoneOrderByWithRelationInput | StateTimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StateTimezones.
     */
    cursor?: StateTimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StateTimezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StateTimezones.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StateTimezones.
     */
    distinct?: StateTimezoneScalarFieldEnum | StateTimezoneScalarFieldEnum[]
  }

  /**
   * StateTimezone findMany
   */
  export type StateTimezoneFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * Filter, which StateTimezones to fetch.
     */
    where?: StateTimezoneWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StateTimezones to fetch.
     */
    orderBy?: StateTimezoneOrderByWithRelationInput | StateTimezoneOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing StateTimezones.
     */
    cursor?: StateTimezoneWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StateTimezones from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StateTimezones.
     */
    skip?: number
    distinct?: StateTimezoneScalarFieldEnum | StateTimezoneScalarFieldEnum[]
  }

  /**
   * StateTimezone create
   */
  export type StateTimezoneCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * The data needed to create a StateTimezone.
     */
    data: XOR<StateTimezoneCreateInput, StateTimezoneUncheckedCreateInput>
  }

  /**
   * StateTimezone createMany
   */
  export type StateTimezoneCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many StateTimezones.
     */
    data: StateTimezoneCreateManyInput | StateTimezoneCreateManyInput[]
  }

  /**
   * StateTimezone createManyAndReturn
   */
  export type StateTimezoneCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * The data used to create many StateTimezones.
     */
    data: StateTimezoneCreateManyInput | StateTimezoneCreateManyInput[]
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * StateTimezone update
   */
  export type StateTimezoneUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * The data needed to update a StateTimezone.
     */
    data: XOR<StateTimezoneUpdateInput, StateTimezoneUncheckedUpdateInput>
    /**
     * Choose, which StateTimezone to update.
     */
    where: StateTimezoneWhereUniqueInput
  }

  /**
   * StateTimezone updateMany
   */
  export type StateTimezoneUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update StateTimezones.
     */
    data: XOR<StateTimezoneUpdateManyMutationInput, StateTimezoneUncheckedUpdateManyInput>
    /**
     * Filter which StateTimezones to update
     */
    where?: StateTimezoneWhereInput
    /**
     * Limit how many StateTimezones to update.
     */
    limit?: number
  }

  /**
   * StateTimezone updateManyAndReturn
   */
  export type StateTimezoneUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * The data used to update StateTimezones.
     */
    data: XOR<StateTimezoneUpdateManyMutationInput, StateTimezoneUncheckedUpdateManyInput>
    /**
     * Filter which StateTimezones to update
     */
    where?: StateTimezoneWhereInput
    /**
     * Limit how many StateTimezones to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * StateTimezone upsert
   */
  export type StateTimezoneUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * The filter to search for the StateTimezone to update in case it exists.
     */
    where: StateTimezoneWhereUniqueInput
    /**
     * In case the StateTimezone found by the `where` argument doesn't exist, create a new StateTimezone with this data.
     */
    create: XOR<StateTimezoneCreateInput, StateTimezoneUncheckedCreateInput>
    /**
     * In case the StateTimezone was found with the provided `where` argument, update it with this data.
     */
    update: XOR<StateTimezoneUpdateInput, StateTimezoneUncheckedUpdateInput>
  }

  /**
   * StateTimezone delete
   */
  export type StateTimezoneDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
    /**
     * Filter which StateTimezone to delete.
     */
    where: StateTimezoneWhereUniqueInput
  }

  /**
   * StateTimezone deleteMany
   */
  export type StateTimezoneDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StateTimezones to delete
     */
    where?: StateTimezoneWhereInput
    /**
     * Limit how many StateTimezones to delete.
     */
    limit?: number
  }

  /**
   * StateTimezone without action
   */
  export type StateTimezoneDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateTimezone
     */
    select?: StateTimezoneSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StateTimezone
     */
    omit?: StateTimezoneOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateTimezoneInclude<ExtArgs> | null
  }


  /**
   * Model Currency
   */

  export type AggregateCurrency = {
    _count: CurrencyCountAggregateOutputType | null
    _avg: CurrencyAvgAggregateOutputType | null
    _sum: CurrencySumAggregateOutputType | null
    _min: CurrencyMinAggregateOutputType | null
    _max: CurrencyMaxAggregateOutputType | null
  }

  export type CurrencyAvgAggregateOutputType = {
    decimalPlaces: number | null
  }

  export type CurrencySumAggregateOutputType = {
    decimalPlaces: number | null
  }

  export type CurrencyMinAggregateOutputType = {
    code: string | null
    name: string | null
    symbol: string | null
    decimalPlaces: number | null
  }

  export type CurrencyMaxAggregateOutputType = {
    code: string | null
    name: string | null
    symbol: string | null
    decimalPlaces: number | null
  }

  export type CurrencyCountAggregateOutputType = {
    code: number
    name: number
    symbol: number
    decimalPlaces: number
    _all: number
  }


  export type CurrencyAvgAggregateInputType = {
    decimalPlaces?: true
  }

  export type CurrencySumAggregateInputType = {
    decimalPlaces?: true
  }

  export type CurrencyMinAggregateInputType = {
    code?: true
    name?: true
    symbol?: true
    decimalPlaces?: true
  }

  export type CurrencyMaxAggregateInputType = {
    code?: true
    name?: true
    symbol?: true
    decimalPlaces?: true
  }

  export type CurrencyCountAggregateInputType = {
    code?: true
    name?: true
    symbol?: true
    decimalPlaces?: true
    _all?: true
  }

  export type CurrencyAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Currency to aggregate.
     */
    where?: CurrencyWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Currencies to fetch.
     */
    orderBy?: CurrencyOrderByWithRelationInput | CurrencyOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CurrencyWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Currencies from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Currencies.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Currencies
    **/
    _count?: true | CurrencyCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: CurrencyAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: CurrencySumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CurrencyMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CurrencyMaxAggregateInputType
  }

  export type GetCurrencyAggregateType<T extends CurrencyAggregateArgs> = {
        [P in keyof T & keyof AggregateCurrency]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCurrency[P]>
      : GetScalarType<T[P], AggregateCurrency[P]>
  }




  export type CurrencyGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CurrencyWhereInput
    orderBy?: CurrencyOrderByWithAggregationInput | CurrencyOrderByWithAggregationInput[]
    by: CurrencyScalarFieldEnum[] | CurrencyScalarFieldEnum
    having?: CurrencyScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CurrencyCountAggregateInputType | true
    _avg?: CurrencyAvgAggregateInputType
    _sum?: CurrencySumAggregateInputType
    _min?: CurrencyMinAggregateInputType
    _max?: CurrencyMaxAggregateInputType
  }

  export type CurrencyGroupByOutputType = {
    code: string
    name: string
    symbol: string
    decimalPlaces: number
    _count: CurrencyCountAggregateOutputType | null
    _avg: CurrencyAvgAggregateOutputType | null
    _sum: CurrencySumAggregateOutputType | null
    _min: CurrencyMinAggregateOutputType | null
    _max: CurrencyMaxAggregateOutputType | null
  }

  type GetCurrencyGroupByPayload<T extends CurrencyGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CurrencyGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CurrencyGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CurrencyGroupByOutputType[P]>
            : GetScalarType<T[P], CurrencyGroupByOutputType[P]>
        }
      >
    >


  export type CurrencySelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    name?: boolean
    symbol?: boolean
    decimalPlaces?: boolean
    countries?: boolean | Currency$countriesArgs<ExtArgs>
    states?: boolean | Currency$statesArgs<ExtArgs>
    _count?: boolean | CurrencyCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["currency"]>

  export type CurrencySelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    name?: boolean
    symbol?: boolean
    decimalPlaces?: boolean
  }, ExtArgs["result"]["currency"]>

  export type CurrencySelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    name?: boolean
    symbol?: boolean
    decimalPlaces?: boolean
  }, ExtArgs["result"]["currency"]>

  export type CurrencySelectScalar = {
    code?: boolean
    name?: boolean
    symbol?: boolean
    decimalPlaces?: boolean
  }

  export type CurrencyOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"code" | "name" | "symbol" | "decimalPlaces", ExtArgs["result"]["currency"]>
  export type CurrencyInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    countries?: boolean | Currency$countriesArgs<ExtArgs>
    states?: boolean | Currency$statesArgs<ExtArgs>
    _count?: boolean | CurrencyCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type CurrencyIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}
  export type CurrencyIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}

  export type $CurrencyPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Currency"
    objects: {
      countries: Prisma.$CountryPayload<ExtArgs>[]
      states: Prisma.$StatePayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      code: string
      name: string
      symbol: string
      decimalPlaces: number
    }, ExtArgs["result"]["currency"]>
    composites: {}
  }

  type CurrencyGetPayload<S extends boolean | null | undefined | CurrencyDefaultArgs> = $Result.GetResult<Prisma.$CurrencyPayload, S>

  type CurrencyCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CurrencyFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CurrencyCountAggregateInputType | true
    }

  export interface CurrencyDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Currency'], meta: { name: 'Currency' } }
    /**
     * Find zero or one Currency that matches the filter.
     * @param {CurrencyFindUniqueArgs} args - Arguments to find a Currency
     * @example
     * // Get one Currency
     * const currency = await prisma.currency.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CurrencyFindUniqueArgs>(args: SelectSubset<T, CurrencyFindUniqueArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Currency that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CurrencyFindUniqueOrThrowArgs} args - Arguments to find a Currency
     * @example
     * // Get one Currency
     * const currency = await prisma.currency.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CurrencyFindUniqueOrThrowArgs>(args: SelectSubset<T, CurrencyFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Currency that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CurrencyFindFirstArgs} args - Arguments to find a Currency
     * @example
     * // Get one Currency
     * const currency = await prisma.currency.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CurrencyFindFirstArgs>(args?: SelectSubset<T, CurrencyFindFirstArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Currency that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CurrencyFindFirstOrThrowArgs} args - Arguments to find a Currency
     * @example
     * // Get one Currency
     * const currency = await prisma.currency.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CurrencyFindFirstOrThrowArgs>(args?: SelectSubset<T, CurrencyFindFirstOrThrowArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Currencies that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CurrencyFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Currencies
     * const currencies = await prisma.currency.findMany()
     * 
     * // Get first 10 Currencies
     * const currencies = await prisma.currency.findMany({ take: 10 })
     * 
     * // Only select the `code`
     * const currencyWithCodeOnly = await prisma.currency.findMany({ select: { code: true } })
     * 
     */
    findMany<T extends CurrencyFindManyArgs>(args?: SelectSubset<T, CurrencyFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Currency.
     * @param {CurrencyCreateArgs} args - Arguments to create a Currency.
     * @example
     * // Create one Currency
     * const Currency = await prisma.currency.create({
     *   data: {
     *     // ... data to create a Currency
     *   }
     * })
     * 
     */
    create<T extends CurrencyCreateArgs>(args: SelectSubset<T, CurrencyCreateArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Currencies.
     * @param {CurrencyCreateManyArgs} args - Arguments to create many Currencies.
     * @example
     * // Create many Currencies
     * const currency = await prisma.currency.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CurrencyCreateManyArgs>(args?: SelectSubset<T, CurrencyCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many Currencies and returns the data saved in the database.
     * @param {CurrencyCreateManyAndReturnArgs} args - Arguments to create many Currencies.
     * @example
     * // Create many Currencies
     * const currency = await prisma.currency.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Currencies and only return the `code`
     * const currencyWithCodeOnly = await prisma.currency.createManyAndReturn({
     *   select: { code: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends CurrencyCreateManyAndReturnArgs>(args?: SelectSubset<T, CurrencyCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a Currency.
     * @param {CurrencyDeleteArgs} args - Arguments to delete one Currency.
     * @example
     * // Delete one Currency
     * const Currency = await prisma.currency.delete({
     *   where: {
     *     // ... filter to delete one Currency
     *   }
     * })
     * 
     */
    delete<T extends CurrencyDeleteArgs>(args: SelectSubset<T, CurrencyDeleteArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Currency.
     * @param {CurrencyUpdateArgs} args - Arguments to update one Currency.
     * @example
     * // Update one Currency
     * const currency = await prisma.currency.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CurrencyUpdateArgs>(args: SelectSubset<T, CurrencyUpdateArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Currencies.
     * @param {CurrencyDeleteManyArgs} args - Arguments to filter Currencies to delete.
     * @example
     * // Delete a few Currencies
     * const { count } = await prisma.currency.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CurrencyDeleteManyArgs>(args?: SelectSubset<T, CurrencyDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Currencies.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CurrencyUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Currencies
     * const currency = await prisma.currency.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CurrencyUpdateManyArgs>(args: SelectSubset<T, CurrencyUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Currencies and returns the data updated in the database.
     * @param {CurrencyUpdateManyAndReturnArgs} args - Arguments to update many Currencies.
     * @example
     * // Update many Currencies
     * const currency = await prisma.currency.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Currencies and only return the `code`
     * const currencyWithCodeOnly = await prisma.currency.updateManyAndReturn({
     *   select: { code: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends CurrencyUpdateManyAndReturnArgs>(args: SelectSubset<T, CurrencyUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one Currency.
     * @param {CurrencyUpsertArgs} args - Arguments to update or create a Currency.
     * @example
     * // Update or create a Currency
     * const currency = await prisma.currency.upsert({
     *   create: {
     *     // ... data to create a Currency
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Currency we want to update
     *   }
     * })
     */
    upsert<T extends CurrencyUpsertArgs>(args: SelectSubset<T, CurrencyUpsertArgs<ExtArgs>>): Prisma__CurrencyClient<$Result.GetResult<Prisma.$CurrencyPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Currencies.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CurrencyCountArgs} args - Arguments to filter Currencies to count.
     * @example
     * // Count the number of Currencies
     * const count = await prisma.currency.count({
     *   where: {
     *     // ... the filter for the Currencies we want to count
     *   }
     * })
    **/
    count<T extends CurrencyCountArgs>(
      args?: Subset<T, CurrencyCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CurrencyCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Currency.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CurrencyAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CurrencyAggregateArgs>(args: Subset<T, CurrencyAggregateArgs>): Prisma.PrismaPromise<GetCurrencyAggregateType<T>>

    /**
     * Group by Currency.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CurrencyGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CurrencyGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CurrencyGroupByArgs['orderBy'] }
        : { orderBy?: CurrencyGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CurrencyGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCurrencyGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Currency model
   */
  readonly fields: CurrencyFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Currency.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CurrencyClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    countries<T extends Currency$countriesArgs<ExtArgs> = {}>(args?: Subset<T, Currency$countriesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    states<T extends Currency$statesArgs<ExtArgs> = {}>(args?: Subset<T, Currency$statesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Currency model
   */
  interface CurrencyFieldRefs {
    readonly code: FieldRef<"Currency", 'String'>
    readonly name: FieldRef<"Currency", 'String'>
    readonly symbol: FieldRef<"Currency", 'String'>
    readonly decimalPlaces: FieldRef<"Currency", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * Currency findUnique
   */
  export type CurrencyFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * Filter, which Currency to fetch.
     */
    where: CurrencyWhereUniqueInput
  }

  /**
   * Currency findUniqueOrThrow
   */
  export type CurrencyFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * Filter, which Currency to fetch.
     */
    where: CurrencyWhereUniqueInput
  }

  /**
   * Currency findFirst
   */
  export type CurrencyFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * Filter, which Currency to fetch.
     */
    where?: CurrencyWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Currencies to fetch.
     */
    orderBy?: CurrencyOrderByWithRelationInput | CurrencyOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Currencies.
     */
    cursor?: CurrencyWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Currencies from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Currencies.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Currencies.
     */
    distinct?: CurrencyScalarFieldEnum | CurrencyScalarFieldEnum[]
  }

  /**
   * Currency findFirstOrThrow
   */
  export type CurrencyFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * Filter, which Currency to fetch.
     */
    where?: CurrencyWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Currencies to fetch.
     */
    orderBy?: CurrencyOrderByWithRelationInput | CurrencyOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Currencies.
     */
    cursor?: CurrencyWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Currencies from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Currencies.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Currencies.
     */
    distinct?: CurrencyScalarFieldEnum | CurrencyScalarFieldEnum[]
  }

  /**
   * Currency findMany
   */
  export type CurrencyFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * Filter, which Currencies to fetch.
     */
    where?: CurrencyWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Currencies to fetch.
     */
    orderBy?: CurrencyOrderByWithRelationInput | CurrencyOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Currencies.
     */
    cursor?: CurrencyWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Currencies from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Currencies.
     */
    skip?: number
    distinct?: CurrencyScalarFieldEnum | CurrencyScalarFieldEnum[]
  }

  /**
   * Currency create
   */
  export type CurrencyCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * The data needed to create a Currency.
     */
    data: XOR<CurrencyCreateInput, CurrencyUncheckedCreateInput>
  }

  /**
   * Currency createMany
   */
  export type CurrencyCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Currencies.
     */
    data: CurrencyCreateManyInput | CurrencyCreateManyInput[]
  }

  /**
   * Currency createManyAndReturn
   */
  export type CurrencyCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * The data used to create many Currencies.
     */
    data: CurrencyCreateManyInput | CurrencyCreateManyInput[]
  }

  /**
   * Currency update
   */
  export type CurrencyUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * The data needed to update a Currency.
     */
    data: XOR<CurrencyUpdateInput, CurrencyUncheckedUpdateInput>
    /**
     * Choose, which Currency to update.
     */
    where: CurrencyWhereUniqueInput
  }

  /**
   * Currency updateMany
   */
  export type CurrencyUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Currencies.
     */
    data: XOR<CurrencyUpdateManyMutationInput, CurrencyUncheckedUpdateManyInput>
    /**
     * Filter which Currencies to update
     */
    where?: CurrencyWhereInput
    /**
     * Limit how many Currencies to update.
     */
    limit?: number
  }

  /**
   * Currency updateManyAndReturn
   */
  export type CurrencyUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * The data used to update Currencies.
     */
    data: XOR<CurrencyUpdateManyMutationInput, CurrencyUncheckedUpdateManyInput>
    /**
     * Filter which Currencies to update
     */
    where?: CurrencyWhereInput
    /**
     * Limit how many Currencies to update.
     */
    limit?: number
  }

  /**
   * Currency upsert
   */
  export type CurrencyUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * The filter to search for the Currency to update in case it exists.
     */
    where: CurrencyWhereUniqueInput
    /**
     * In case the Currency found by the `where` argument doesn't exist, create a new Currency with this data.
     */
    create: XOR<CurrencyCreateInput, CurrencyUncheckedCreateInput>
    /**
     * In case the Currency was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CurrencyUpdateInput, CurrencyUncheckedUpdateInput>
  }

  /**
   * Currency delete
   */
  export type CurrencyDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
    /**
     * Filter which Currency to delete.
     */
    where: CurrencyWhereUniqueInput
  }

  /**
   * Currency deleteMany
   */
  export type CurrencyDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Currencies to delete
     */
    where?: CurrencyWhereInput
    /**
     * Limit how many Currencies to delete.
     */
    limit?: number
  }

  /**
   * Currency.countries
   */
  export type Currency$countriesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    where?: CountryWhereInput
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    cursor?: CountryWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Currency.states
   */
  export type Currency$statesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    where?: StateWhereInput
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    cursor?: StateWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * Currency without action
   */
  export type CurrencyDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Currency
     */
    select?: CurrencySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Currency
     */
    omit?: CurrencyOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CurrencyInclude<ExtArgs> | null
  }


  /**
   * Model DialingCode
   */

  export type AggregateDialingCode = {
    _count: DialingCodeCountAggregateOutputType | null
    _min: DialingCodeMinAggregateOutputType | null
    _max: DialingCodeMaxAggregateOutputType | null
  }

  export type DialingCodeMinAggregateOutputType = {
    code: string | null
    root: string | null
    suffix: string | null
    example: string | null
    countryCode: string | null
  }

  export type DialingCodeMaxAggregateOutputType = {
    code: string | null
    root: string | null
    suffix: string | null
    example: string | null
    countryCode: string | null
  }

  export type DialingCodeCountAggregateOutputType = {
    code: number
    root: number
    suffix: number
    example: number
    countryCode: number
    _all: number
  }


  export type DialingCodeMinAggregateInputType = {
    code?: true
    root?: true
    suffix?: true
    example?: true
    countryCode?: true
  }

  export type DialingCodeMaxAggregateInputType = {
    code?: true
    root?: true
    suffix?: true
    example?: true
    countryCode?: true
  }

  export type DialingCodeCountAggregateInputType = {
    code?: true
    root?: true
    suffix?: true
    example?: true
    countryCode?: true
    _all?: true
  }

  export type DialingCodeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which DialingCode to aggregate.
     */
    where?: DialingCodeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of DialingCodes to fetch.
     */
    orderBy?: DialingCodeOrderByWithRelationInput | DialingCodeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: DialingCodeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` DialingCodes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` DialingCodes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned DialingCodes
    **/
    _count?: true | DialingCodeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: DialingCodeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: DialingCodeMaxAggregateInputType
  }

  export type GetDialingCodeAggregateType<T extends DialingCodeAggregateArgs> = {
        [P in keyof T & keyof AggregateDialingCode]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateDialingCode[P]>
      : GetScalarType<T[P], AggregateDialingCode[P]>
  }




  export type DialingCodeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: DialingCodeWhereInput
    orderBy?: DialingCodeOrderByWithAggregationInput | DialingCodeOrderByWithAggregationInput[]
    by: DialingCodeScalarFieldEnum[] | DialingCodeScalarFieldEnum
    having?: DialingCodeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: DialingCodeCountAggregateInputType | true
    _min?: DialingCodeMinAggregateInputType
    _max?: DialingCodeMaxAggregateInputType
  }

  export type DialingCodeGroupByOutputType = {
    code: string
    root: string
    suffix: string
    example: string | null
    countryCode: string
    _count: DialingCodeCountAggregateOutputType | null
    _min: DialingCodeMinAggregateOutputType | null
    _max: DialingCodeMaxAggregateOutputType | null
  }

  type GetDialingCodeGroupByPayload<T extends DialingCodeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<DialingCodeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof DialingCodeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], DialingCodeGroupByOutputType[P]>
            : GetScalarType<T[P], DialingCodeGroupByOutputType[P]>
        }
      >
    >


  export type DialingCodeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    root?: boolean
    suffix?: boolean
    example?: boolean
    countryCode?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
    states?: boolean | DialingCode$statesArgs<ExtArgs>
    _count?: boolean | DialingCodeCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["dialingCode"]>

  export type DialingCodeSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    root?: boolean
    suffix?: boolean
    example?: boolean
    countryCode?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["dialingCode"]>

  export type DialingCodeSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    code?: boolean
    root?: boolean
    suffix?: boolean
    example?: boolean
    countryCode?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["dialingCode"]>

  export type DialingCodeSelectScalar = {
    code?: boolean
    root?: boolean
    suffix?: boolean
    example?: boolean
    countryCode?: boolean
  }

  export type DialingCodeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"code" | "root" | "suffix" | "example" | "countryCode", ExtArgs["result"]["dialingCode"]>
  export type DialingCodeInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
    states?: boolean | DialingCode$statesArgs<ExtArgs>
    _count?: boolean | DialingCodeCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type DialingCodeIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
  }
  export type DialingCodeIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
  }

  export type $DialingCodePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "DialingCode"
    objects: {
      country: Prisma.$CountryPayload<ExtArgs>
      states: Prisma.$StatePayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      code: string
      root: string
      suffix: string
      example: string | null
      countryCode: string
    }, ExtArgs["result"]["dialingCode"]>
    composites: {}
  }

  type DialingCodeGetPayload<S extends boolean | null | undefined | DialingCodeDefaultArgs> = $Result.GetResult<Prisma.$DialingCodePayload, S>

  type DialingCodeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<DialingCodeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: DialingCodeCountAggregateInputType | true
    }

  export interface DialingCodeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['DialingCode'], meta: { name: 'DialingCode' } }
    /**
     * Find zero or one DialingCode that matches the filter.
     * @param {DialingCodeFindUniqueArgs} args - Arguments to find a DialingCode
     * @example
     * // Get one DialingCode
     * const dialingCode = await prisma.dialingCode.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends DialingCodeFindUniqueArgs>(args: SelectSubset<T, DialingCodeFindUniqueArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one DialingCode that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {DialingCodeFindUniqueOrThrowArgs} args - Arguments to find a DialingCode
     * @example
     * // Get one DialingCode
     * const dialingCode = await prisma.dialingCode.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends DialingCodeFindUniqueOrThrowArgs>(args: SelectSubset<T, DialingCodeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first DialingCode that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {DialingCodeFindFirstArgs} args - Arguments to find a DialingCode
     * @example
     * // Get one DialingCode
     * const dialingCode = await prisma.dialingCode.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends DialingCodeFindFirstArgs>(args?: SelectSubset<T, DialingCodeFindFirstArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first DialingCode that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {DialingCodeFindFirstOrThrowArgs} args - Arguments to find a DialingCode
     * @example
     * // Get one DialingCode
     * const dialingCode = await prisma.dialingCode.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends DialingCodeFindFirstOrThrowArgs>(args?: SelectSubset<T, DialingCodeFindFirstOrThrowArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more DialingCodes that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {DialingCodeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all DialingCodes
     * const dialingCodes = await prisma.dialingCode.findMany()
     * 
     * // Get first 10 DialingCodes
     * const dialingCodes = await prisma.dialingCode.findMany({ take: 10 })
     * 
     * // Only select the `code`
     * const dialingCodeWithCodeOnly = await prisma.dialingCode.findMany({ select: { code: true } })
     * 
     */
    findMany<T extends DialingCodeFindManyArgs>(args?: SelectSubset<T, DialingCodeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a DialingCode.
     * @param {DialingCodeCreateArgs} args - Arguments to create a DialingCode.
     * @example
     * // Create one DialingCode
     * const DialingCode = await prisma.dialingCode.create({
     *   data: {
     *     // ... data to create a DialingCode
     *   }
     * })
     * 
     */
    create<T extends DialingCodeCreateArgs>(args: SelectSubset<T, DialingCodeCreateArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many DialingCodes.
     * @param {DialingCodeCreateManyArgs} args - Arguments to create many DialingCodes.
     * @example
     * // Create many DialingCodes
     * const dialingCode = await prisma.dialingCode.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends DialingCodeCreateManyArgs>(args?: SelectSubset<T, DialingCodeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many DialingCodes and returns the data saved in the database.
     * @param {DialingCodeCreateManyAndReturnArgs} args - Arguments to create many DialingCodes.
     * @example
     * // Create many DialingCodes
     * const dialingCode = await prisma.dialingCode.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many DialingCodes and only return the `code`
     * const dialingCodeWithCodeOnly = await prisma.dialingCode.createManyAndReturn({
     *   select: { code: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends DialingCodeCreateManyAndReturnArgs>(args?: SelectSubset<T, DialingCodeCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a DialingCode.
     * @param {DialingCodeDeleteArgs} args - Arguments to delete one DialingCode.
     * @example
     * // Delete one DialingCode
     * const DialingCode = await prisma.dialingCode.delete({
     *   where: {
     *     // ... filter to delete one DialingCode
     *   }
     * })
     * 
     */
    delete<T extends DialingCodeDeleteArgs>(args: SelectSubset<T, DialingCodeDeleteArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one DialingCode.
     * @param {DialingCodeUpdateArgs} args - Arguments to update one DialingCode.
     * @example
     * // Update one DialingCode
     * const dialingCode = await prisma.dialingCode.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends DialingCodeUpdateArgs>(args: SelectSubset<T, DialingCodeUpdateArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more DialingCodes.
     * @param {DialingCodeDeleteManyArgs} args - Arguments to filter DialingCodes to delete.
     * @example
     * // Delete a few DialingCodes
     * const { count } = await prisma.dialingCode.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends DialingCodeDeleteManyArgs>(args?: SelectSubset<T, DialingCodeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more DialingCodes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {DialingCodeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many DialingCodes
     * const dialingCode = await prisma.dialingCode.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends DialingCodeUpdateManyArgs>(args: SelectSubset<T, DialingCodeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more DialingCodes and returns the data updated in the database.
     * @param {DialingCodeUpdateManyAndReturnArgs} args - Arguments to update many DialingCodes.
     * @example
     * // Update many DialingCodes
     * const dialingCode = await prisma.dialingCode.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more DialingCodes and only return the `code`
     * const dialingCodeWithCodeOnly = await prisma.dialingCode.updateManyAndReturn({
     *   select: { code: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends DialingCodeUpdateManyAndReturnArgs>(args: SelectSubset<T, DialingCodeUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one DialingCode.
     * @param {DialingCodeUpsertArgs} args - Arguments to update or create a DialingCode.
     * @example
     * // Update or create a DialingCode
     * const dialingCode = await prisma.dialingCode.upsert({
     *   create: {
     *     // ... data to create a DialingCode
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the DialingCode we want to update
     *   }
     * })
     */
    upsert<T extends DialingCodeUpsertArgs>(args: SelectSubset<T, DialingCodeUpsertArgs<ExtArgs>>): Prisma__DialingCodeClient<$Result.GetResult<Prisma.$DialingCodePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of DialingCodes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {DialingCodeCountArgs} args - Arguments to filter DialingCodes to count.
     * @example
     * // Count the number of DialingCodes
     * const count = await prisma.dialingCode.count({
     *   where: {
     *     // ... the filter for the DialingCodes we want to count
     *   }
     * })
    **/
    count<T extends DialingCodeCountArgs>(
      args?: Subset<T, DialingCodeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], DialingCodeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a DialingCode.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {DialingCodeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends DialingCodeAggregateArgs>(args: Subset<T, DialingCodeAggregateArgs>): Prisma.PrismaPromise<GetDialingCodeAggregateType<T>>

    /**
     * Group by DialingCode.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {DialingCodeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends DialingCodeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: DialingCodeGroupByArgs['orderBy'] }
        : { orderBy?: DialingCodeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, DialingCodeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetDialingCodeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the DialingCode model
   */
  readonly fields: DialingCodeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for DialingCode.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__DialingCodeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    country<T extends CountryDefaultArgs<ExtArgs> = {}>(args?: Subset<T, CountryDefaultArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    states<T extends DialingCode$statesArgs<ExtArgs> = {}>(args?: Subset<T, DialingCode$statesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the DialingCode model
   */
  interface DialingCodeFieldRefs {
    readonly code: FieldRef<"DialingCode", 'String'>
    readonly root: FieldRef<"DialingCode", 'String'>
    readonly suffix: FieldRef<"DialingCode", 'String'>
    readonly example: FieldRef<"DialingCode", 'String'>
    readonly countryCode: FieldRef<"DialingCode", 'String'>
  }
    

  // Custom InputTypes
  /**
   * DialingCode findUnique
   */
  export type DialingCodeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * Filter, which DialingCode to fetch.
     */
    where: DialingCodeWhereUniqueInput
  }

  /**
   * DialingCode findUniqueOrThrow
   */
  export type DialingCodeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * Filter, which DialingCode to fetch.
     */
    where: DialingCodeWhereUniqueInput
  }

  /**
   * DialingCode findFirst
   */
  export type DialingCodeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * Filter, which DialingCode to fetch.
     */
    where?: DialingCodeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of DialingCodes to fetch.
     */
    orderBy?: DialingCodeOrderByWithRelationInput | DialingCodeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for DialingCodes.
     */
    cursor?: DialingCodeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` DialingCodes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` DialingCodes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of DialingCodes.
     */
    distinct?: DialingCodeScalarFieldEnum | DialingCodeScalarFieldEnum[]
  }

  /**
   * DialingCode findFirstOrThrow
   */
  export type DialingCodeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * Filter, which DialingCode to fetch.
     */
    where?: DialingCodeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of DialingCodes to fetch.
     */
    orderBy?: DialingCodeOrderByWithRelationInput | DialingCodeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for DialingCodes.
     */
    cursor?: DialingCodeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` DialingCodes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` DialingCodes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of DialingCodes.
     */
    distinct?: DialingCodeScalarFieldEnum | DialingCodeScalarFieldEnum[]
  }

  /**
   * DialingCode findMany
   */
  export type DialingCodeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * Filter, which DialingCodes to fetch.
     */
    where?: DialingCodeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of DialingCodes to fetch.
     */
    orderBy?: DialingCodeOrderByWithRelationInput | DialingCodeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing DialingCodes.
     */
    cursor?: DialingCodeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` DialingCodes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` DialingCodes.
     */
    skip?: number
    distinct?: DialingCodeScalarFieldEnum | DialingCodeScalarFieldEnum[]
  }

  /**
   * DialingCode create
   */
  export type DialingCodeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * The data needed to create a DialingCode.
     */
    data: XOR<DialingCodeCreateInput, DialingCodeUncheckedCreateInput>
  }

  /**
   * DialingCode createMany
   */
  export type DialingCodeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many DialingCodes.
     */
    data: DialingCodeCreateManyInput | DialingCodeCreateManyInput[]
  }

  /**
   * DialingCode createManyAndReturn
   */
  export type DialingCodeCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * The data used to create many DialingCodes.
     */
    data: DialingCodeCreateManyInput | DialingCodeCreateManyInput[]
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * DialingCode update
   */
  export type DialingCodeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * The data needed to update a DialingCode.
     */
    data: XOR<DialingCodeUpdateInput, DialingCodeUncheckedUpdateInput>
    /**
     * Choose, which DialingCode to update.
     */
    where: DialingCodeWhereUniqueInput
  }

  /**
   * DialingCode updateMany
   */
  export type DialingCodeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update DialingCodes.
     */
    data: XOR<DialingCodeUpdateManyMutationInput, DialingCodeUncheckedUpdateManyInput>
    /**
     * Filter which DialingCodes to update
     */
    where?: DialingCodeWhereInput
    /**
     * Limit how many DialingCodes to update.
     */
    limit?: number
  }

  /**
   * DialingCode updateManyAndReturn
   */
  export type DialingCodeUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * The data used to update DialingCodes.
     */
    data: XOR<DialingCodeUpdateManyMutationInput, DialingCodeUncheckedUpdateManyInput>
    /**
     * Filter which DialingCodes to update
     */
    where?: DialingCodeWhereInput
    /**
     * Limit how many DialingCodes to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * DialingCode upsert
   */
  export type DialingCodeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * The filter to search for the DialingCode to update in case it exists.
     */
    where: DialingCodeWhereUniqueInput
    /**
     * In case the DialingCode found by the `where` argument doesn't exist, create a new DialingCode with this data.
     */
    create: XOR<DialingCodeCreateInput, DialingCodeUncheckedCreateInput>
    /**
     * In case the DialingCode was found with the provided `where` argument, update it with this data.
     */
    update: XOR<DialingCodeUpdateInput, DialingCodeUncheckedUpdateInput>
  }

  /**
   * DialingCode delete
   */
  export type DialingCodeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
    /**
     * Filter which DialingCode to delete.
     */
    where: DialingCodeWhereUniqueInput
  }

  /**
   * DialingCode deleteMany
   */
  export type DialingCodeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which DialingCodes to delete
     */
    where?: DialingCodeWhereInput
    /**
     * Limit how many DialingCodes to delete.
     */
    limit?: number
  }

  /**
   * DialingCode.states
   */
  export type DialingCode$statesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    where?: StateWhereInput
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    cursor?: StateWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * DialingCode without action
   */
  export type DialingCodeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the DialingCode
     */
    select?: DialingCodeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the DialingCode
     */
    omit?: DialingCodeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: DialingCodeInclude<ExtArgs> | null
  }


  /**
   * Enums
   */

  export const TransactionIsolationLevel: {
    Serializable: 'Serializable'
  };

  export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]


  export const CountryScalarFieldEnum: {
    code: 'code',
    iso3: 'iso3',
    name: 'name',
    flagEmoji: 'flagEmoji',
    currencyCode: 'currencyCode'
  };

  export type CountryScalarFieldEnum = (typeof CountryScalarFieldEnum)[keyof typeof CountryScalarFieldEnum]


  export const StateScalarFieldEnum: {
    id: 'id',
    name: 'name',
    iso2: 'iso2',
    iso3: 'iso3',
    flagEmoji: 'flagEmoji',
    countryCode: 'countryCode',
    currencyCode: 'currencyCode',
    phoneCode: 'phoneCode'
  };

  export type StateScalarFieldEnum = (typeof StateScalarFieldEnum)[keyof typeof StateScalarFieldEnum]


  export const CityScalarFieldEnum: {
    id: 'id',
    name: 'name',
    stateId: 'stateId',
    countryCode: 'countryCode',
    timezoneId: 'timezoneId'
  };

  export type CityScalarFieldEnum = (typeof CityScalarFieldEnum)[keyof typeof CityScalarFieldEnum]


  export const TimezoneScalarFieldEnum: {
    name: 'name',
    offset: 'offset',
    offsetMinutes: 'offsetMinutes'
  };

  export type TimezoneScalarFieldEnum = (typeof TimezoneScalarFieldEnum)[keyof typeof TimezoneScalarFieldEnum]


  export const CountryTimezoneScalarFieldEnum: {
    countryCode: 'countryCode',
    timezoneId: 'timezoneId'
  };

  export type CountryTimezoneScalarFieldEnum = (typeof CountryTimezoneScalarFieldEnum)[keyof typeof CountryTimezoneScalarFieldEnum]


  export const StateTimezoneScalarFieldEnum: {
    stateId: 'stateId',
    timezoneId: 'timezoneId'
  };

  export type StateTimezoneScalarFieldEnum = (typeof StateTimezoneScalarFieldEnum)[keyof typeof StateTimezoneScalarFieldEnum]


  export const CurrencyScalarFieldEnum: {
    code: 'code',
    name: 'name',
    symbol: 'symbol',
    decimalPlaces: 'decimalPlaces'
  };

  export type CurrencyScalarFieldEnum = (typeof CurrencyScalarFieldEnum)[keyof typeof CurrencyScalarFieldEnum]


  export const DialingCodeScalarFieldEnum: {
    code: 'code',
    root: 'root',
    suffix: 'suffix',
    example: 'example',
    countryCode: 'countryCode'
  };

  export type DialingCodeScalarFieldEnum = (typeof DialingCodeScalarFieldEnum)[keyof typeof DialingCodeScalarFieldEnum]


  export const SortOrder: {
    asc: 'asc',
    desc: 'desc'
  };

  export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]


  export const NullsOrder: {
    first: 'first',
    last: 'last'
  };

  export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]


  /**
   * Field references
   */


  /**
   * Reference to a field of type 'String'
   */
  export type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String'>
    


  /**
   * Reference to a field of type 'Int'
   */
  export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int'>
    


  /**
   * Reference to a field of type 'Float'
   */
  export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float'>
    
  /**
   * Deep Input Types
   */


  export type CountryWhereInput = {
    AND?: CountryWhereInput | CountryWhereInput[]
    OR?: CountryWhereInput[]
    NOT?: CountryWhereInput | CountryWhereInput[]
    code?: StringFilter<"Country"> | string
    iso3?: StringFilter<"Country"> | string
    name?: StringFilter<"Country"> | string
    flagEmoji?: StringNullableFilter<"Country"> | string | null
    currencyCode?: StringNullableFilter<"Country"> | string | null
    currency?: XOR<CurrencyNullableScalarRelationFilter, CurrencyWhereInput> | null
    phoneCodes?: DialingCodeListRelationFilter
    timezones?: CountryTimezoneListRelationFilter
    states?: StateListRelationFilter
    cities?: CityListRelationFilter
  }

  export type CountryOrderByWithRelationInput = {
    code?: SortOrder
    iso3?: SortOrder
    name?: SortOrder
    flagEmoji?: SortOrderInput | SortOrder
    currencyCode?: SortOrderInput | SortOrder
    currency?: CurrencyOrderByWithRelationInput
    phoneCodes?: DialingCodeOrderByRelationAggregateInput
    timezones?: CountryTimezoneOrderByRelationAggregateInput
    states?: StateOrderByRelationAggregateInput
    cities?: CityOrderByRelationAggregateInput
  }

  export type CountryWhereUniqueInput = Prisma.AtLeast<{
    code?: string
    iso3?: string
    AND?: CountryWhereInput | CountryWhereInput[]
    OR?: CountryWhereInput[]
    NOT?: CountryWhereInput | CountryWhereInput[]
    name?: StringFilter<"Country"> | string
    flagEmoji?: StringNullableFilter<"Country"> | string | null
    currencyCode?: StringNullableFilter<"Country"> | string | null
    currency?: XOR<CurrencyNullableScalarRelationFilter, CurrencyWhereInput> | null
    phoneCodes?: DialingCodeListRelationFilter
    timezones?: CountryTimezoneListRelationFilter
    states?: StateListRelationFilter
    cities?: CityListRelationFilter
  }, "code" | "iso3">

  export type CountryOrderByWithAggregationInput = {
    code?: SortOrder
    iso3?: SortOrder
    name?: SortOrder
    flagEmoji?: SortOrderInput | SortOrder
    currencyCode?: SortOrderInput | SortOrder
    _count?: CountryCountOrderByAggregateInput
    _max?: CountryMaxOrderByAggregateInput
    _min?: CountryMinOrderByAggregateInput
  }

  export type CountryScalarWhereWithAggregatesInput = {
    AND?: CountryScalarWhereWithAggregatesInput | CountryScalarWhereWithAggregatesInput[]
    OR?: CountryScalarWhereWithAggregatesInput[]
    NOT?: CountryScalarWhereWithAggregatesInput | CountryScalarWhereWithAggregatesInput[]
    code?: StringWithAggregatesFilter<"Country"> | string
    iso3?: StringWithAggregatesFilter<"Country"> | string
    name?: StringWithAggregatesFilter<"Country"> | string
    flagEmoji?: StringNullableWithAggregatesFilter<"Country"> | string | null
    currencyCode?: StringNullableWithAggregatesFilter<"Country"> | string | null
  }

  export type StateWhereInput = {
    AND?: StateWhereInput | StateWhereInput[]
    OR?: StateWhereInput[]
    NOT?: StateWhereInput | StateWhereInput[]
    id?: IntFilter<"State"> | number
    name?: StringFilter<"State"> | string
    iso2?: StringNullableFilter<"State"> | string | null
    iso3?: StringNullableFilter<"State"> | string | null
    flagEmoji?: StringNullableFilter<"State"> | string | null
    countryCode?: StringFilter<"State"> | string
    currencyCode?: StringNullableFilter<"State"> | string | null
    phoneCode?: StringNullableFilter<"State"> | string | null
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    cities?: CityListRelationFilter
    currency?: XOR<CurrencyNullableScalarRelationFilter, CurrencyWhereInput> | null
    dialingCode?: XOR<DialingCodeNullableScalarRelationFilter, DialingCodeWhereInput> | null
    timezones?: StateTimezoneListRelationFilter
  }

  export type StateOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    iso2?: SortOrderInput | SortOrder
    iso3?: SortOrderInput | SortOrder
    flagEmoji?: SortOrderInput | SortOrder
    countryCode?: SortOrder
    currencyCode?: SortOrderInput | SortOrder
    phoneCode?: SortOrderInput | SortOrder
    country?: CountryOrderByWithRelationInput
    cities?: CityOrderByRelationAggregateInput
    currency?: CurrencyOrderByWithRelationInput
    dialingCode?: DialingCodeOrderByWithRelationInput
    timezones?: StateTimezoneOrderByRelationAggregateInput
  }

  export type StateWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name_countryCode?: StateNameCountryCodeCompoundUniqueInput
    AND?: StateWhereInput | StateWhereInput[]
    OR?: StateWhereInput[]
    NOT?: StateWhereInput | StateWhereInput[]
    name?: StringFilter<"State"> | string
    iso2?: StringNullableFilter<"State"> | string | null
    iso3?: StringNullableFilter<"State"> | string | null
    flagEmoji?: StringNullableFilter<"State"> | string | null
    countryCode?: StringFilter<"State"> | string
    currencyCode?: StringNullableFilter<"State"> | string | null
    phoneCode?: StringNullableFilter<"State"> | string | null
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    cities?: CityListRelationFilter
    currency?: XOR<CurrencyNullableScalarRelationFilter, CurrencyWhereInput> | null
    dialingCode?: XOR<DialingCodeNullableScalarRelationFilter, DialingCodeWhereInput> | null
    timezones?: StateTimezoneListRelationFilter
  }, "id" | "name_countryCode">

  export type StateOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    iso2?: SortOrderInput | SortOrder
    iso3?: SortOrderInput | SortOrder
    flagEmoji?: SortOrderInput | SortOrder
    countryCode?: SortOrder
    currencyCode?: SortOrderInput | SortOrder
    phoneCode?: SortOrderInput | SortOrder
    _count?: StateCountOrderByAggregateInput
    _avg?: StateAvgOrderByAggregateInput
    _max?: StateMaxOrderByAggregateInput
    _min?: StateMinOrderByAggregateInput
    _sum?: StateSumOrderByAggregateInput
  }

  export type StateScalarWhereWithAggregatesInput = {
    AND?: StateScalarWhereWithAggregatesInput | StateScalarWhereWithAggregatesInput[]
    OR?: StateScalarWhereWithAggregatesInput[]
    NOT?: StateScalarWhereWithAggregatesInput | StateScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"State"> | number
    name?: StringWithAggregatesFilter<"State"> | string
    iso2?: StringNullableWithAggregatesFilter<"State"> | string | null
    iso3?: StringNullableWithAggregatesFilter<"State"> | string | null
    flagEmoji?: StringNullableWithAggregatesFilter<"State"> | string | null
    countryCode?: StringWithAggregatesFilter<"State"> | string
    currencyCode?: StringNullableWithAggregatesFilter<"State"> | string | null
    phoneCode?: StringNullableWithAggregatesFilter<"State"> | string | null
  }

  export type CityWhereInput = {
    AND?: CityWhereInput | CityWhereInput[]
    OR?: CityWhereInput[]
    NOT?: CityWhereInput | CityWhereInput[]
    id?: IntFilter<"City"> | number
    name?: StringFilter<"City"> | string
    stateId?: IntNullableFilter<"City"> | number | null
    countryCode?: StringFilter<"City"> | string
    timezoneId?: StringNullableFilter<"City"> | string | null
    state?: XOR<StateNullableScalarRelationFilter, StateWhereInput> | null
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    timezone?: XOR<TimezoneNullableScalarRelationFilter, TimezoneWhereInput> | null
  }

  export type CityOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    stateId?: SortOrderInput | SortOrder
    countryCode?: SortOrder
    timezoneId?: SortOrderInput | SortOrder
    state?: StateOrderByWithRelationInput
    country?: CountryOrderByWithRelationInput
    timezone?: TimezoneOrderByWithRelationInput
  }

  export type CityWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name_countryCode_stateId?: CityNameCountryCodeStateIdCompoundUniqueInput
    AND?: CityWhereInput | CityWhereInput[]
    OR?: CityWhereInput[]
    NOT?: CityWhereInput | CityWhereInput[]
    name?: StringFilter<"City"> | string
    stateId?: IntNullableFilter<"City"> | number | null
    countryCode?: StringFilter<"City"> | string
    timezoneId?: StringNullableFilter<"City"> | string | null
    state?: XOR<StateNullableScalarRelationFilter, StateWhereInput> | null
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    timezone?: XOR<TimezoneNullableScalarRelationFilter, TimezoneWhereInput> | null
  }, "id" | "name_countryCode_stateId">

  export type CityOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    stateId?: SortOrderInput | SortOrder
    countryCode?: SortOrder
    timezoneId?: SortOrderInput | SortOrder
    _count?: CityCountOrderByAggregateInput
    _avg?: CityAvgOrderByAggregateInput
    _max?: CityMaxOrderByAggregateInput
    _min?: CityMinOrderByAggregateInput
    _sum?: CitySumOrderByAggregateInput
  }

  export type CityScalarWhereWithAggregatesInput = {
    AND?: CityScalarWhereWithAggregatesInput | CityScalarWhereWithAggregatesInput[]
    OR?: CityScalarWhereWithAggregatesInput[]
    NOT?: CityScalarWhereWithAggregatesInput | CityScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"City"> | number
    name?: StringWithAggregatesFilter<"City"> | string
    stateId?: IntNullableWithAggregatesFilter<"City"> | number | null
    countryCode?: StringWithAggregatesFilter<"City"> | string
    timezoneId?: StringNullableWithAggregatesFilter<"City"> | string | null
  }

  export type TimezoneWhereInput = {
    AND?: TimezoneWhereInput | TimezoneWhereInput[]
    OR?: TimezoneWhereInput[]
    NOT?: TimezoneWhereInput | TimezoneWhereInput[]
    name?: StringFilter<"Timezone"> | string
    offset?: StringFilter<"Timezone"> | string
    offsetMinutes?: IntFilter<"Timezone"> | number
    cities?: CityListRelationFilter
    stateTimezones?: StateTimezoneListRelationFilter
    countryTimezones?: CountryTimezoneListRelationFilter
  }

  export type TimezoneOrderByWithRelationInput = {
    name?: SortOrder
    offset?: SortOrder
    offsetMinutes?: SortOrder
    cities?: CityOrderByRelationAggregateInput
    stateTimezones?: StateTimezoneOrderByRelationAggregateInput
    countryTimezones?: CountryTimezoneOrderByRelationAggregateInput
  }

  export type TimezoneWhereUniqueInput = Prisma.AtLeast<{
    name?: string
    AND?: TimezoneWhereInput | TimezoneWhereInput[]
    OR?: TimezoneWhereInput[]
    NOT?: TimezoneWhereInput | TimezoneWhereInput[]
    offset?: StringFilter<"Timezone"> | string
    offsetMinutes?: IntFilter<"Timezone"> | number
    cities?: CityListRelationFilter
    stateTimezones?: StateTimezoneListRelationFilter
    countryTimezones?: CountryTimezoneListRelationFilter
  }, "name">

  export type TimezoneOrderByWithAggregationInput = {
    name?: SortOrder
    offset?: SortOrder
    offsetMinutes?: SortOrder
    _count?: TimezoneCountOrderByAggregateInput
    _avg?: TimezoneAvgOrderByAggregateInput
    _max?: TimezoneMaxOrderByAggregateInput
    _min?: TimezoneMinOrderByAggregateInput
    _sum?: TimezoneSumOrderByAggregateInput
  }

  export type TimezoneScalarWhereWithAggregatesInput = {
    AND?: TimezoneScalarWhereWithAggregatesInput | TimezoneScalarWhereWithAggregatesInput[]
    OR?: TimezoneScalarWhereWithAggregatesInput[]
    NOT?: TimezoneScalarWhereWithAggregatesInput | TimezoneScalarWhereWithAggregatesInput[]
    name?: StringWithAggregatesFilter<"Timezone"> | string
    offset?: StringWithAggregatesFilter<"Timezone"> | string
    offsetMinutes?: IntWithAggregatesFilter<"Timezone"> | number
  }

  export type CountryTimezoneWhereInput = {
    AND?: CountryTimezoneWhereInput | CountryTimezoneWhereInput[]
    OR?: CountryTimezoneWhereInput[]
    NOT?: CountryTimezoneWhereInput | CountryTimezoneWhereInput[]
    countryCode?: StringFilter<"CountryTimezone"> | string
    timezoneId?: StringFilter<"CountryTimezone"> | string
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    timezone?: XOR<TimezoneScalarRelationFilter, TimezoneWhereInput>
  }

  export type CountryTimezoneOrderByWithRelationInput = {
    countryCode?: SortOrder
    timezoneId?: SortOrder
    country?: CountryOrderByWithRelationInput
    timezone?: TimezoneOrderByWithRelationInput
  }

  export type CountryTimezoneWhereUniqueInput = Prisma.AtLeast<{
    countryCode_timezoneId?: CountryTimezoneCountryCodeTimezoneIdCompoundUniqueInput
    AND?: CountryTimezoneWhereInput | CountryTimezoneWhereInput[]
    OR?: CountryTimezoneWhereInput[]
    NOT?: CountryTimezoneWhereInput | CountryTimezoneWhereInput[]
    countryCode?: StringFilter<"CountryTimezone"> | string
    timezoneId?: StringFilter<"CountryTimezone"> | string
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    timezone?: XOR<TimezoneScalarRelationFilter, TimezoneWhereInput>
  }, "countryCode_timezoneId">

  export type CountryTimezoneOrderByWithAggregationInput = {
    countryCode?: SortOrder
    timezoneId?: SortOrder
    _count?: CountryTimezoneCountOrderByAggregateInput
    _max?: CountryTimezoneMaxOrderByAggregateInput
    _min?: CountryTimezoneMinOrderByAggregateInput
  }

  export type CountryTimezoneScalarWhereWithAggregatesInput = {
    AND?: CountryTimezoneScalarWhereWithAggregatesInput | CountryTimezoneScalarWhereWithAggregatesInput[]
    OR?: CountryTimezoneScalarWhereWithAggregatesInput[]
    NOT?: CountryTimezoneScalarWhereWithAggregatesInput | CountryTimezoneScalarWhereWithAggregatesInput[]
    countryCode?: StringWithAggregatesFilter<"CountryTimezone"> | string
    timezoneId?: StringWithAggregatesFilter<"CountryTimezone"> | string
  }

  export type StateTimezoneWhereInput = {
    AND?: StateTimezoneWhereInput | StateTimezoneWhereInput[]
    OR?: StateTimezoneWhereInput[]
    NOT?: StateTimezoneWhereInput | StateTimezoneWhereInput[]
    stateId?: IntFilter<"StateTimezone"> | number
    timezoneId?: StringFilter<"StateTimezone"> | string
    state?: XOR<StateScalarRelationFilter, StateWhereInput>
    timezone?: XOR<TimezoneScalarRelationFilter, TimezoneWhereInput>
  }

  export type StateTimezoneOrderByWithRelationInput = {
    stateId?: SortOrder
    timezoneId?: SortOrder
    state?: StateOrderByWithRelationInput
    timezone?: TimezoneOrderByWithRelationInput
  }

  export type StateTimezoneWhereUniqueInput = Prisma.AtLeast<{
    stateId_timezoneId?: StateTimezoneStateIdTimezoneIdCompoundUniqueInput
    AND?: StateTimezoneWhereInput | StateTimezoneWhereInput[]
    OR?: StateTimezoneWhereInput[]
    NOT?: StateTimezoneWhereInput | StateTimezoneWhereInput[]
    stateId?: IntFilter<"StateTimezone"> | number
    timezoneId?: StringFilter<"StateTimezone"> | string
    state?: XOR<StateScalarRelationFilter, StateWhereInput>
    timezone?: XOR<TimezoneScalarRelationFilter, TimezoneWhereInput>
  }, "stateId_timezoneId">

  export type StateTimezoneOrderByWithAggregationInput = {
    stateId?: SortOrder
    timezoneId?: SortOrder
    _count?: StateTimezoneCountOrderByAggregateInput
    _avg?: StateTimezoneAvgOrderByAggregateInput
    _max?: StateTimezoneMaxOrderByAggregateInput
    _min?: StateTimezoneMinOrderByAggregateInput
    _sum?: StateTimezoneSumOrderByAggregateInput
  }

  export type StateTimezoneScalarWhereWithAggregatesInput = {
    AND?: StateTimezoneScalarWhereWithAggregatesInput | StateTimezoneScalarWhereWithAggregatesInput[]
    OR?: StateTimezoneScalarWhereWithAggregatesInput[]
    NOT?: StateTimezoneScalarWhereWithAggregatesInput | StateTimezoneScalarWhereWithAggregatesInput[]
    stateId?: IntWithAggregatesFilter<"StateTimezone"> | number
    timezoneId?: StringWithAggregatesFilter<"StateTimezone"> | string
  }

  export type CurrencyWhereInput = {
    AND?: CurrencyWhereInput | CurrencyWhereInput[]
    OR?: CurrencyWhereInput[]
    NOT?: CurrencyWhereInput | CurrencyWhereInput[]
    code?: StringFilter<"Currency"> | string
    name?: StringFilter<"Currency"> | string
    symbol?: StringFilter<"Currency"> | string
    decimalPlaces?: IntFilter<"Currency"> | number
    countries?: CountryListRelationFilter
    states?: StateListRelationFilter
  }

  export type CurrencyOrderByWithRelationInput = {
    code?: SortOrder
    name?: SortOrder
    symbol?: SortOrder
    decimalPlaces?: SortOrder
    countries?: CountryOrderByRelationAggregateInput
    states?: StateOrderByRelationAggregateInput
  }

  export type CurrencyWhereUniqueInput = Prisma.AtLeast<{
    code?: string
    AND?: CurrencyWhereInput | CurrencyWhereInput[]
    OR?: CurrencyWhereInput[]
    NOT?: CurrencyWhereInput | CurrencyWhereInput[]
    name?: StringFilter<"Currency"> | string
    symbol?: StringFilter<"Currency"> | string
    decimalPlaces?: IntFilter<"Currency"> | number
    countries?: CountryListRelationFilter
    states?: StateListRelationFilter
  }, "code">

  export type CurrencyOrderByWithAggregationInput = {
    code?: SortOrder
    name?: SortOrder
    symbol?: SortOrder
    decimalPlaces?: SortOrder
    _count?: CurrencyCountOrderByAggregateInput
    _avg?: CurrencyAvgOrderByAggregateInput
    _max?: CurrencyMaxOrderByAggregateInput
    _min?: CurrencyMinOrderByAggregateInput
    _sum?: CurrencySumOrderByAggregateInput
  }

  export type CurrencyScalarWhereWithAggregatesInput = {
    AND?: CurrencyScalarWhereWithAggregatesInput | CurrencyScalarWhereWithAggregatesInput[]
    OR?: CurrencyScalarWhereWithAggregatesInput[]
    NOT?: CurrencyScalarWhereWithAggregatesInput | CurrencyScalarWhereWithAggregatesInput[]
    code?: StringWithAggregatesFilter<"Currency"> | string
    name?: StringWithAggregatesFilter<"Currency"> | string
    symbol?: StringWithAggregatesFilter<"Currency"> | string
    decimalPlaces?: IntWithAggregatesFilter<"Currency"> | number
  }

  export type DialingCodeWhereInput = {
    AND?: DialingCodeWhereInput | DialingCodeWhereInput[]
    OR?: DialingCodeWhereInput[]
    NOT?: DialingCodeWhereInput | DialingCodeWhereInput[]
    code?: StringFilter<"DialingCode"> | string
    root?: StringFilter<"DialingCode"> | string
    suffix?: StringFilter<"DialingCode"> | string
    example?: StringNullableFilter<"DialingCode"> | string | null
    countryCode?: StringFilter<"DialingCode"> | string
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    states?: StateListRelationFilter
  }

  export type DialingCodeOrderByWithRelationInput = {
    code?: SortOrder
    root?: SortOrder
    suffix?: SortOrder
    example?: SortOrderInput | SortOrder
    countryCode?: SortOrder
    country?: CountryOrderByWithRelationInput
    states?: StateOrderByRelationAggregateInput
  }

  export type DialingCodeWhereUniqueInput = Prisma.AtLeast<{
    code?: string
    root_suffix?: DialingCodeRootSuffixCompoundUniqueInput
    AND?: DialingCodeWhereInput | DialingCodeWhereInput[]
    OR?: DialingCodeWhereInput[]
    NOT?: DialingCodeWhereInput | DialingCodeWhereInput[]
    root?: StringFilter<"DialingCode"> | string
    suffix?: StringFilter<"DialingCode"> | string
    example?: StringNullableFilter<"DialingCode"> | string | null
    countryCode?: StringFilter<"DialingCode"> | string
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    states?: StateListRelationFilter
  }, "code" | "root_suffix">

  export type DialingCodeOrderByWithAggregationInput = {
    code?: SortOrder
    root?: SortOrder
    suffix?: SortOrder
    example?: SortOrderInput | SortOrder
    countryCode?: SortOrder
    _count?: DialingCodeCountOrderByAggregateInput
    _max?: DialingCodeMaxOrderByAggregateInput
    _min?: DialingCodeMinOrderByAggregateInput
  }

  export type DialingCodeScalarWhereWithAggregatesInput = {
    AND?: DialingCodeScalarWhereWithAggregatesInput | DialingCodeScalarWhereWithAggregatesInput[]
    OR?: DialingCodeScalarWhereWithAggregatesInput[]
    NOT?: DialingCodeScalarWhereWithAggregatesInput | DialingCodeScalarWhereWithAggregatesInput[]
    code?: StringWithAggregatesFilter<"DialingCode"> | string
    root?: StringWithAggregatesFilter<"DialingCode"> | string
    suffix?: StringWithAggregatesFilter<"DialingCode"> | string
    example?: StringNullableWithAggregatesFilter<"DialingCode"> | string | null
    countryCode?: StringWithAggregatesFilter<"DialingCode"> | string
  }

  export type CountryCreateInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currency?: CurrencyCreateNestedOneWithoutCountriesInput
    phoneCodes?: DialingCodeCreateNestedManyWithoutCountryInput
    timezones?: CountryTimezoneCreateNestedManyWithoutCountryInput
    states?: StateCreateNestedManyWithoutCountryInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currencyCode?: string | null
    phoneCodes?: DialingCodeUncheckedCreateNestedManyWithoutCountryInput
    timezones?: CountryTimezoneUncheckedCreateNestedManyWithoutCountryInput
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryUpdateInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: CurrencyUpdateOneWithoutCountriesNestedInput
    phoneCodes?: DialingCodeUpdateManyWithoutCountryNestedInput
    timezones?: CountryTimezoneUpdateManyWithoutCountryNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCodes?: DialingCodeUncheckedUpdateManyWithoutCountryNestedInput
    timezones?: CountryTimezoneUncheckedUpdateManyWithoutCountryNestedInput
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type CountryCreateManyInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currencyCode?: string | null
  }

  export type CountryUpdateManyMutationInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type CountryUncheckedUpdateManyInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type StateCreateInput = {
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    country: CountryCreateNestedOneWithoutStatesInput
    cities?: CityCreateNestedManyWithoutStateInput
    currency?: CurrencyCreateNestedOneWithoutStatesInput
    dialingCode?: DialingCodeCreateNestedOneWithoutStatesInput
    timezones?: StateTimezoneCreateNestedManyWithoutStateInput
  }

  export type StateUncheckedCreateInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    countryCode: string
    currencyCode?: string | null
    phoneCode?: string | null
    cities?: CityUncheckedCreateNestedManyWithoutStateInput
    timezones?: StateTimezoneUncheckedCreateNestedManyWithoutStateInput
  }

  export type StateUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    country?: CountryUpdateOneRequiredWithoutStatesNestedInput
    cities?: CityUpdateManyWithoutStateNestedInput
    currency?: CurrencyUpdateOneWithoutStatesNestedInput
    dialingCode?: DialingCodeUpdateOneWithoutStatesNestedInput
    timezones?: StateTimezoneUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCode?: NullableStringFieldUpdateOperationsInput | string | null
    cities?: CityUncheckedUpdateManyWithoutStateNestedInput
    timezones?: StateTimezoneUncheckedUpdateManyWithoutStateNestedInput
  }

  export type StateCreateManyInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    countryCode: string
    currencyCode?: string | null
    phoneCode?: string | null
  }

  export type StateUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type StateUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCode?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type CityCreateInput = {
    name: string
    state?: StateCreateNestedOneWithoutCitiesInput
    country: CountryCreateNestedOneWithoutCitiesInput
    timezone?: TimezoneCreateNestedOneWithoutCitiesInput
  }

  export type CityUncheckedCreateInput = {
    id?: number
    name: string
    stateId?: number | null
    countryCode: string
    timezoneId?: string | null
  }

  export type CityUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    state?: StateUpdateOneWithoutCitiesNestedInput
    country?: CountryUpdateOneRequiredWithoutCitiesNestedInput
    timezone?: TimezoneUpdateOneWithoutCitiesNestedInput
  }

  export type CityUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    stateId?: NullableIntFieldUpdateOperationsInput | number | null
    countryCode?: StringFieldUpdateOperationsInput | string
    timezoneId?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type CityCreateManyInput = {
    id?: number
    name: string
    stateId?: number | null
    countryCode: string
    timezoneId?: string | null
  }

  export type CityUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
  }

  export type CityUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    stateId?: NullableIntFieldUpdateOperationsInput | number | null
    countryCode?: StringFieldUpdateOperationsInput | string
    timezoneId?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type TimezoneCreateInput = {
    name: string
    offset: string
    offsetMinutes: number
    cities?: CityCreateNestedManyWithoutTimezoneInput
    stateTimezones?: StateTimezoneCreateNestedManyWithoutTimezoneInput
    countryTimezones?: CountryTimezoneCreateNestedManyWithoutTimezoneInput
  }

  export type TimezoneUncheckedCreateInput = {
    name: string
    offset: string
    offsetMinutes: number
    cities?: CityUncheckedCreateNestedManyWithoutTimezoneInput
    stateTimezones?: StateTimezoneUncheckedCreateNestedManyWithoutTimezoneInput
    countryTimezones?: CountryTimezoneUncheckedCreateNestedManyWithoutTimezoneInput
  }

  export type TimezoneUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
    cities?: CityUpdateManyWithoutTimezoneNestedInput
    stateTimezones?: StateTimezoneUpdateManyWithoutTimezoneNestedInput
    countryTimezones?: CountryTimezoneUpdateManyWithoutTimezoneNestedInput
  }

  export type TimezoneUncheckedUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
    cities?: CityUncheckedUpdateManyWithoutTimezoneNestedInput
    stateTimezones?: StateTimezoneUncheckedUpdateManyWithoutTimezoneNestedInput
    countryTimezones?: CountryTimezoneUncheckedUpdateManyWithoutTimezoneNestedInput
  }

  export type TimezoneCreateManyInput = {
    name: string
    offset: string
    offsetMinutes: number
  }

  export type TimezoneUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
  }

  export type TimezoneUncheckedUpdateManyInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
  }

  export type CountryTimezoneCreateInput = {
    country: CountryCreateNestedOneWithoutTimezonesInput
    timezone: TimezoneCreateNestedOneWithoutCountryTimezonesInput
  }

  export type CountryTimezoneUncheckedCreateInput = {
    countryCode: string
    timezoneId: string
  }

  export type CountryTimezoneUpdateInput = {
    country?: CountryUpdateOneRequiredWithoutTimezonesNestedInput
    timezone?: TimezoneUpdateOneRequiredWithoutCountryTimezonesNestedInput
  }

  export type CountryTimezoneUncheckedUpdateInput = {
    countryCode?: StringFieldUpdateOperationsInput | string
    timezoneId?: StringFieldUpdateOperationsInput | string
  }

  export type CountryTimezoneCreateManyInput = {
    countryCode: string
    timezoneId: string
  }

  export type CountryTimezoneUpdateManyMutationInput = {

  }

  export type CountryTimezoneUncheckedUpdateManyInput = {
    countryCode?: StringFieldUpdateOperationsInput | string
    timezoneId?: StringFieldUpdateOperationsInput | string
  }

  export type StateTimezoneCreateInput = {
    state: StateCreateNestedOneWithoutTimezonesInput
    timezone: TimezoneCreateNestedOneWithoutStateTimezonesInput
  }

  export type StateTimezoneUncheckedCreateInput = {
    stateId: number
    timezoneId: string
  }

  export type StateTimezoneUpdateInput = {
    state?: StateUpdateOneRequiredWithoutTimezonesNestedInput
    timezone?: TimezoneUpdateOneRequiredWithoutStateTimezonesNestedInput
  }

  export type StateTimezoneUncheckedUpdateInput = {
    stateId?: IntFieldUpdateOperationsInput | number
    timezoneId?: StringFieldUpdateOperationsInput | string
  }

  export type StateTimezoneCreateManyInput = {
    stateId: number
    timezoneId: string
  }

  export type StateTimezoneUpdateManyMutationInput = {

  }

  export type StateTimezoneUncheckedUpdateManyInput = {
    stateId?: IntFieldUpdateOperationsInput | number
    timezoneId?: StringFieldUpdateOperationsInput | string
  }

  export type CurrencyCreateInput = {
    code: string
    name: string
    symbol: string
    decimalPlaces?: number
    countries?: CountryCreateNestedManyWithoutCurrencyInput
    states?: StateCreateNestedManyWithoutCurrencyInput
  }

  export type CurrencyUncheckedCreateInput = {
    code: string
    name: string
    symbol: string
    decimalPlaces?: number
    countries?: CountryUncheckedCreateNestedManyWithoutCurrencyInput
    states?: StateUncheckedCreateNestedManyWithoutCurrencyInput
  }

  export type CurrencyUpdateInput = {
    code?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    symbol?: StringFieldUpdateOperationsInput | string
    decimalPlaces?: IntFieldUpdateOperationsInput | number
    countries?: CountryUpdateManyWithoutCurrencyNestedInput
    states?: StateUpdateManyWithoutCurrencyNestedInput
  }

  export type CurrencyUncheckedUpdateInput = {
    code?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    symbol?: StringFieldUpdateOperationsInput | string
    decimalPlaces?: IntFieldUpdateOperationsInput | number
    countries?: CountryUncheckedUpdateManyWithoutCurrencyNestedInput
    states?: StateUncheckedUpdateManyWithoutCurrencyNestedInput
  }

  export type CurrencyCreateManyInput = {
    code: string
    name: string
    symbol: string
    decimalPlaces?: number
  }

  export type CurrencyUpdateManyMutationInput = {
    code?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    symbol?: StringFieldUpdateOperationsInput | string
    decimalPlaces?: IntFieldUpdateOperationsInput | number
  }

  export type CurrencyUncheckedUpdateManyInput = {
    code?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    symbol?: StringFieldUpdateOperationsInput | string
    decimalPlaces?: IntFieldUpdateOperationsInput | number
  }

  export type DialingCodeCreateInput = {
    code: string
    root: string
    suffix: string
    example?: string | null
    country: CountryCreateNestedOneWithoutPhoneCodesInput
    states?: StateCreateNestedManyWithoutDialingCodeInput
  }

  export type DialingCodeUncheckedCreateInput = {
    code: string
    root: string
    suffix: string
    example?: string | null
    countryCode: string
    states?: StateUncheckedCreateNestedManyWithoutDialingCodeInput
  }

  export type DialingCodeUpdateInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
    country?: CountryUpdateOneRequiredWithoutPhoneCodesNestedInput
    states?: StateUpdateManyWithoutDialingCodeNestedInput
  }

  export type DialingCodeUncheckedUpdateInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    states?: StateUncheckedUpdateManyWithoutDialingCodeNestedInput
  }

  export type DialingCodeCreateManyInput = {
    code: string
    root: string
    suffix: string
    example?: string | null
    countryCode: string
  }

  export type DialingCodeUpdateManyMutationInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type DialingCodeUncheckedUpdateManyInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
  }

  export type StringFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[]
    notIn?: string[]
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringFilter<$PrismaModel> | string
  }

  export type StringNullableFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | null
    notIn?: string[] | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringNullableFilter<$PrismaModel> | string | null
  }

  export type CurrencyNullableScalarRelationFilter = {
    is?: CurrencyWhereInput | null
    isNot?: CurrencyWhereInput | null
  }

  export type DialingCodeListRelationFilter = {
    every?: DialingCodeWhereInput
    some?: DialingCodeWhereInput
    none?: DialingCodeWhereInput
  }

  export type CountryTimezoneListRelationFilter = {
    every?: CountryTimezoneWhereInput
    some?: CountryTimezoneWhereInput
    none?: CountryTimezoneWhereInput
  }

  export type StateListRelationFilter = {
    every?: StateWhereInput
    some?: StateWhereInput
    none?: StateWhereInput
  }

  export type CityListRelationFilter = {
    every?: CityWhereInput
    some?: CityWhereInput
    none?: CityWhereInput
  }

  export type SortOrderInput = {
    sort: SortOrder
    nulls?: NullsOrder
  }

  export type DialingCodeOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type CountryTimezoneOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type StateOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type CityOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type CountryCountOrderByAggregateInput = {
    code?: SortOrder
    iso3?: SortOrder
    name?: SortOrder
    flagEmoji?: SortOrder
    currencyCode?: SortOrder
  }

  export type CountryMaxOrderByAggregateInput = {
    code?: SortOrder
    iso3?: SortOrder
    name?: SortOrder
    flagEmoji?: SortOrder
    currencyCode?: SortOrder
  }

  export type CountryMinOrderByAggregateInput = {
    code?: SortOrder
    iso3?: SortOrder
    name?: SortOrder
    flagEmoji?: SortOrder
    currencyCode?: SortOrder
  }

  export type StringWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[]
    notIn?: string[]
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringWithAggregatesFilter<$PrismaModel> | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedStringFilter<$PrismaModel>
    _max?: NestedStringFilter<$PrismaModel>
  }

  export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | null
    notIn?: string[] | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedStringNullableFilter<$PrismaModel>
    _max?: NestedStringNullableFilter<$PrismaModel>
  }

  export type IntFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntFilter<$PrismaModel> | number
  }

  export type CountryScalarRelationFilter = {
    is?: CountryWhereInput
    isNot?: CountryWhereInput
  }

  export type DialingCodeNullableScalarRelationFilter = {
    is?: DialingCodeWhereInput | null
    isNot?: DialingCodeWhereInput | null
  }

  export type StateTimezoneListRelationFilter = {
    every?: StateTimezoneWhereInput
    some?: StateTimezoneWhereInput
    none?: StateTimezoneWhereInput
  }

  export type StateTimezoneOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type StateNameCountryCodeCompoundUniqueInput = {
    name: string
    countryCode: string
  }

  export type StateCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    iso2?: SortOrder
    iso3?: SortOrder
    flagEmoji?: SortOrder
    countryCode?: SortOrder
    currencyCode?: SortOrder
    phoneCode?: SortOrder
  }

  export type StateAvgOrderByAggregateInput = {
    id?: SortOrder
  }

  export type StateMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    iso2?: SortOrder
    iso3?: SortOrder
    flagEmoji?: SortOrder
    countryCode?: SortOrder
    currencyCode?: SortOrder
    phoneCode?: SortOrder
  }

  export type StateMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    iso2?: SortOrder
    iso3?: SortOrder
    flagEmoji?: SortOrder
    countryCode?: SortOrder
    currencyCode?: SortOrder
    phoneCode?: SortOrder
  }

  export type StateSumOrderByAggregateInput = {
    id?: SortOrder
  }

  export type IntWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedIntFilter<$PrismaModel>
    _min?: NestedIntFilter<$PrismaModel>
    _max?: NestedIntFilter<$PrismaModel>
  }

  export type IntNullableFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableFilter<$PrismaModel> | number | null
  }

  export type StateNullableScalarRelationFilter = {
    is?: StateWhereInput | null
    isNot?: StateWhereInput | null
  }

  export type TimezoneNullableScalarRelationFilter = {
    is?: TimezoneWhereInput | null
    isNot?: TimezoneWhereInput | null
  }

  export type CityNameCountryCodeStateIdCompoundUniqueInput = {
    name: string
    countryCode: string
    stateId: number
  }

  export type CityCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    stateId?: SortOrder
    countryCode?: SortOrder
    timezoneId?: SortOrder
  }

  export type CityAvgOrderByAggregateInput = {
    id?: SortOrder
    stateId?: SortOrder
  }

  export type CityMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    stateId?: SortOrder
    countryCode?: SortOrder
    timezoneId?: SortOrder
  }

  export type CityMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    stateId?: SortOrder
    countryCode?: SortOrder
    timezoneId?: SortOrder
  }

  export type CitySumOrderByAggregateInput = {
    id?: SortOrder
    stateId?: SortOrder
  }

  export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedIntNullableFilter<$PrismaModel>
    _max?: NestedIntNullableFilter<$PrismaModel>
  }

  export type TimezoneCountOrderByAggregateInput = {
    name?: SortOrder
    offset?: SortOrder
    offsetMinutes?: SortOrder
  }

  export type TimezoneAvgOrderByAggregateInput = {
    offsetMinutes?: SortOrder
  }

  export type TimezoneMaxOrderByAggregateInput = {
    name?: SortOrder
    offset?: SortOrder
    offsetMinutes?: SortOrder
  }

  export type TimezoneMinOrderByAggregateInput = {
    name?: SortOrder
    offset?: SortOrder
    offsetMinutes?: SortOrder
  }

  export type TimezoneSumOrderByAggregateInput = {
    offsetMinutes?: SortOrder
  }

  export type TimezoneScalarRelationFilter = {
    is?: TimezoneWhereInput
    isNot?: TimezoneWhereInput
  }

  export type CountryTimezoneCountryCodeTimezoneIdCompoundUniqueInput = {
    countryCode: string
    timezoneId: string
  }

  export type CountryTimezoneCountOrderByAggregateInput = {
    countryCode?: SortOrder
    timezoneId?: SortOrder
  }

  export type CountryTimezoneMaxOrderByAggregateInput = {
    countryCode?: SortOrder
    timezoneId?: SortOrder
  }

  export type CountryTimezoneMinOrderByAggregateInput = {
    countryCode?: SortOrder
    timezoneId?: SortOrder
  }

  export type StateScalarRelationFilter = {
    is?: StateWhereInput
    isNot?: StateWhereInput
  }

  export type StateTimezoneStateIdTimezoneIdCompoundUniqueInput = {
    stateId: number
    timezoneId: string
  }

  export type StateTimezoneCountOrderByAggregateInput = {
    stateId?: SortOrder
    timezoneId?: SortOrder
  }

  export type StateTimezoneAvgOrderByAggregateInput = {
    stateId?: SortOrder
  }

  export type StateTimezoneMaxOrderByAggregateInput = {
    stateId?: SortOrder
    timezoneId?: SortOrder
  }

  export type StateTimezoneMinOrderByAggregateInput = {
    stateId?: SortOrder
    timezoneId?: SortOrder
  }

  export type StateTimezoneSumOrderByAggregateInput = {
    stateId?: SortOrder
  }

  export type CountryListRelationFilter = {
    every?: CountryWhereInput
    some?: CountryWhereInput
    none?: CountryWhereInput
  }

  export type CountryOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type CurrencyCountOrderByAggregateInput = {
    code?: SortOrder
    name?: SortOrder
    symbol?: SortOrder
    decimalPlaces?: SortOrder
  }

  export type CurrencyAvgOrderByAggregateInput = {
    decimalPlaces?: SortOrder
  }

  export type CurrencyMaxOrderByAggregateInput = {
    code?: SortOrder
    name?: SortOrder
    symbol?: SortOrder
    decimalPlaces?: SortOrder
  }

  export type CurrencyMinOrderByAggregateInput = {
    code?: SortOrder
    name?: SortOrder
    symbol?: SortOrder
    decimalPlaces?: SortOrder
  }

  export type CurrencySumOrderByAggregateInput = {
    decimalPlaces?: SortOrder
  }

  export type DialingCodeRootSuffixCompoundUniqueInput = {
    root: string
    suffix: string
  }

  export type DialingCodeCountOrderByAggregateInput = {
    code?: SortOrder
    root?: SortOrder
    suffix?: SortOrder
    example?: SortOrder
    countryCode?: SortOrder
  }

  export type DialingCodeMaxOrderByAggregateInput = {
    code?: SortOrder
    root?: SortOrder
    suffix?: SortOrder
    example?: SortOrder
    countryCode?: SortOrder
  }

  export type DialingCodeMinOrderByAggregateInput = {
    code?: SortOrder
    root?: SortOrder
    suffix?: SortOrder
    example?: SortOrder
    countryCode?: SortOrder
  }

  export type CurrencyCreateNestedOneWithoutCountriesInput = {
    create?: XOR<CurrencyCreateWithoutCountriesInput, CurrencyUncheckedCreateWithoutCountriesInput>
    connectOrCreate?: CurrencyCreateOrConnectWithoutCountriesInput
    connect?: CurrencyWhereUniqueInput
  }

  export type DialingCodeCreateNestedManyWithoutCountryInput = {
    create?: XOR<DialingCodeCreateWithoutCountryInput, DialingCodeUncheckedCreateWithoutCountryInput> | DialingCodeCreateWithoutCountryInput[] | DialingCodeUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: DialingCodeCreateOrConnectWithoutCountryInput | DialingCodeCreateOrConnectWithoutCountryInput[]
    createMany?: DialingCodeCreateManyCountryInputEnvelope
    connect?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
  }

  export type CountryTimezoneCreateNestedManyWithoutCountryInput = {
    create?: XOR<CountryTimezoneCreateWithoutCountryInput, CountryTimezoneUncheckedCreateWithoutCountryInput> | CountryTimezoneCreateWithoutCountryInput[] | CountryTimezoneUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CountryTimezoneCreateOrConnectWithoutCountryInput | CountryTimezoneCreateOrConnectWithoutCountryInput[]
    createMany?: CountryTimezoneCreateManyCountryInputEnvelope
    connect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
  }

  export type StateCreateNestedManyWithoutCountryInput = {
    create?: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput> | StateCreateWithoutCountryInput[] | StateUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCountryInput | StateCreateOrConnectWithoutCountryInput[]
    createMany?: StateCreateManyCountryInputEnvelope
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
  }

  export type CityCreateNestedManyWithoutCountryInput = {
    create?: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput> | CityCreateWithoutCountryInput[] | CityUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CityCreateOrConnectWithoutCountryInput | CityCreateOrConnectWithoutCountryInput[]
    createMany?: CityCreateManyCountryInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type DialingCodeUncheckedCreateNestedManyWithoutCountryInput = {
    create?: XOR<DialingCodeCreateWithoutCountryInput, DialingCodeUncheckedCreateWithoutCountryInput> | DialingCodeCreateWithoutCountryInput[] | DialingCodeUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: DialingCodeCreateOrConnectWithoutCountryInput | DialingCodeCreateOrConnectWithoutCountryInput[]
    createMany?: DialingCodeCreateManyCountryInputEnvelope
    connect?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
  }

  export type CountryTimezoneUncheckedCreateNestedManyWithoutCountryInput = {
    create?: XOR<CountryTimezoneCreateWithoutCountryInput, CountryTimezoneUncheckedCreateWithoutCountryInput> | CountryTimezoneCreateWithoutCountryInput[] | CountryTimezoneUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CountryTimezoneCreateOrConnectWithoutCountryInput | CountryTimezoneCreateOrConnectWithoutCountryInput[]
    createMany?: CountryTimezoneCreateManyCountryInputEnvelope
    connect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
  }

  export type StateUncheckedCreateNestedManyWithoutCountryInput = {
    create?: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput> | StateCreateWithoutCountryInput[] | StateUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCountryInput | StateCreateOrConnectWithoutCountryInput[]
    createMany?: StateCreateManyCountryInputEnvelope
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
  }

  export type CityUncheckedCreateNestedManyWithoutCountryInput = {
    create?: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput> | CityCreateWithoutCountryInput[] | CityUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CityCreateOrConnectWithoutCountryInput | CityCreateOrConnectWithoutCountryInput[]
    createMany?: CityCreateManyCountryInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type StringFieldUpdateOperationsInput = {
    set?: string
  }

  export type NullableStringFieldUpdateOperationsInput = {
    set?: string | null
  }

  export type CurrencyUpdateOneWithoutCountriesNestedInput = {
    create?: XOR<CurrencyCreateWithoutCountriesInput, CurrencyUncheckedCreateWithoutCountriesInput>
    connectOrCreate?: CurrencyCreateOrConnectWithoutCountriesInput
    upsert?: CurrencyUpsertWithoutCountriesInput
    disconnect?: CurrencyWhereInput | boolean
    delete?: CurrencyWhereInput | boolean
    connect?: CurrencyWhereUniqueInput
    update?: XOR<XOR<CurrencyUpdateToOneWithWhereWithoutCountriesInput, CurrencyUpdateWithoutCountriesInput>, CurrencyUncheckedUpdateWithoutCountriesInput>
  }

  export type DialingCodeUpdateManyWithoutCountryNestedInput = {
    create?: XOR<DialingCodeCreateWithoutCountryInput, DialingCodeUncheckedCreateWithoutCountryInput> | DialingCodeCreateWithoutCountryInput[] | DialingCodeUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: DialingCodeCreateOrConnectWithoutCountryInput | DialingCodeCreateOrConnectWithoutCountryInput[]
    upsert?: DialingCodeUpsertWithWhereUniqueWithoutCountryInput | DialingCodeUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: DialingCodeCreateManyCountryInputEnvelope
    set?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
    disconnect?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
    delete?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
    connect?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
    update?: DialingCodeUpdateWithWhereUniqueWithoutCountryInput | DialingCodeUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: DialingCodeUpdateManyWithWhereWithoutCountryInput | DialingCodeUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: DialingCodeScalarWhereInput | DialingCodeScalarWhereInput[]
  }

  export type CountryTimezoneUpdateManyWithoutCountryNestedInput = {
    create?: XOR<CountryTimezoneCreateWithoutCountryInput, CountryTimezoneUncheckedCreateWithoutCountryInput> | CountryTimezoneCreateWithoutCountryInput[] | CountryTimezoneUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CountryTimezoneCreateOrConnectWithoutCountryInput | CountryTimezoneCreateOrConnectWithoutCountryInput[]
    upsert?: CountryTimezoneUpsertWithWhereUniqueWithoutCountryInput | CountryTimezoneUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: CountryTimezoneCreateManyCountryInputEnvelope
    set?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    disconnect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    delete?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    connect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    update?: CountryTimezoneUpdateWithWhereUniqueWithoutCountryInput | CountryTimezoneUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: CountryTimezoneUpdateManyWithWhereWithoutCountryInput | CountryTimezoneUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: CountryTimezoneScalarWhereInput | CountryTimezoneScalarWhereInput[]
  }

  export type StateUpdateManyWithoutCountryNestedInput = {
    create?: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput> | StateCreateWithoutCountryInput[] | StateUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCountryInput | StateCreateOrConnectWithoutCountryInput[]
    upsert?: StateUpsertWithWhereUniqueWithoutCountryInput | StateUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: StateCreateManyCountryInputEnvelope
    set?: StateWhereUniqueInput | StateWhereUniqueInput[]
    disconnect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    delete?: StateWhereUniqueInput | StateWhereUniqueInput[]
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    update?: StateUpdateWithWhereUniqueWithoutCountryInput | StateUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: StateUpdateManyWithWhereWithoutCountryInput | StateUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: StateScalarWhereInput | StateScalarWhereInput[]
  }

  export type CityUpdateManyWithoutCountryNestedInput = {
    create?: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput> | CityCreateWithoutCountryInput[] | CityUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CityCreateOrConnectWithoutCountryInput | CityCreateOrConnectWithoutCountryInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutCountryInput | CityUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: CityCreateManyCountryInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutCountryInput | CityUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: CityUpdateManyWithWhereWithoutCountryInput | CityUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type DialingCodeUncheckedUpdateManyWithoutCountryNestedInput = {
    create?: XOR<DialingCodeCreateWithoutCountryInput, DialingCodeUncheckedCreateWithoutCountryInput> | DialingCodeCreateWithoutCountryInput[] | DialingCodeUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: DialingCodeCreateOrConnectWithoutCountryInput | DialingCodeCreateOrConnectWithoutCountryInput[]
    upsert?: DialingCodeUpsertWithWhereUniqueWithoutCountryInput | DialingCodeUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: DialingCodeCreateManyCountryInputEnvelope
    set?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
    disconnect?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
    delete?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
    connect?: DialingCodeWhereUniqueInput | DialingCodeWhereUniqueInput[]
    update?: DialingCodeUpdateWithWhereUniqueWithoutCountryInput | DialingCodeUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: DialingCodeUpdateManyWithWhereWithoutCountryInput | DialingCodeUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: DialingCodeScalarWhereInput | DialingCodeScalarWhereInput[]
  }

  export type CountryTimezoneUncheckedUpdateManyWithoutCountryNestedInput = {
    create?: XOR<CountryTimezoneCreateWithoutCountryInput, CountryTimezoneUncheckedCreateWithoutCountryInput> | CountryTimezoneCreateWithoutCountryInput[] | CountryTimezoneUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CountryTimezoneCreateOrConnectWithoutCountryInput | CountryTimezoneCreateOrConnectWithoutCountryInput[]
    upsert?: CountryTimezoneUpsertWithWhereUniqueWithoutCountryInput | CountryTimezoneUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: CountryTimezoneCreateManyCountryInputEnvelope
    set?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    disconnect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    delete?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    connect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    update?: CountryTimezoneUpdateWithWhereUniqueWithoutCountryInput | CountryTimezoneUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: CountryTimezoneUpdateManyWithWhereWithoutCountryInput | CountryTimezoneUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: CountryTimezoneScalarWhereInput | CountryTimezoneScalarWhereInput[]
  }

  export type StateUncheckedUpdateManyWithoutCountryNestedInput = {
    create?: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput> | StateCreateWithoutCountryInput[] | StateUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCountryInput | StateCreateOrConnectWithoutCountryInput[]
    upsert?: StateUpsertWithWhereUniqueWithoutCountryInput | StateUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: StateCreateManyCountryInputEnvelope
    set?: StateWhereUniqueInput | StateWhereUniqueInput[]
    disconnect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    delete?: StateWhereUniqueInput | StateWhereUniqueInput[]
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    update?: StateUpdateWithWhereUniqueWithoutCountryInput | StateUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: StateUpdateManyWithWhereWithoutCountryInput | StateUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: StateScalarWhereInput | StateScalarWhereInput[]
  }

  export type CityUncheckedUpdateManyWithoutCountryNestedInput = {
    create?: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput> | CityCreateWithoutCountryInput[] | CityUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CityCreateOrConnectWithoutCountryInput | CityCreateOrConnectWithoutCountryInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutCountryInput | CityUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: CityCreateManyCountryInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutCountryInput | CityUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: CityUpdateManyWithWhereWithoutCountryInput | CityUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type CountryCreateNestedOneWithoutStatesInput = {
    create?: XOR<CountryCreateWithoutStatesInput, CountryUncheckedCreateWithoutStatesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutStatesInput
    connect?: CountryWhereUniqueInput
  }

  export type CityCreateNestedManyWithoutStateInput = {
    create?: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput> | CityCreateWithoutStateInput[] | CityUncheckedCreateWithoutStateInput[]
    connectOrCreate?: CityCreateOrConnectWithoutStateInput | CityCreateOrConnectWithoutStateInput[]
    createMany?: CityCreateManyStateInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type CurrencyCreateNestedOneWithoutStatesInput = {
    create?: XOR<CurrencyCreateWithoutStatesInput, CurrencyUncheckedCreateWithoutStatesInput>
    connectOrCreate?: CurrencyCreateOrConnectWithoutStatesInput
    connect?: CurrencyWhereUniqueInput
  }

  export type DialingCodeCreateNestedOneWithoutStatesInput = {
    create?: XOR<DialingCodeCreateWithoutStatesInput, DialingCodeUncheckedCreateWithoutStatesInput>
    connectOrCreate?: DialingCodeCreateOrConnectWithoutStatesInput
    connect?: DialingCodeWhereUniqueInput
  }

  export type StateTimezoneCreateNestedManyWithoutStateInput = {
    create?: XOR<StateTimezoneCreateWithoutStateInput, StateTimezoneUncheckedCreateWithoutStateInput> | StateTimezoneCreateWithoutStateInput[] | StateTimezoneUncheckedCreateWithoutStateInput[]
    connectOrCreate?: StateTimezoneCreateOrConnectWithoutStateInput | StateTimezoneCreateOrConnectWithoutStateInput[]
    createMany?: StateTimezoneCreateManyStateInputEnvelope
    connect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
  }

  export type CityUncheckedCreateNestedManyWithoutStateInput = {
    create?: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput> | CityCreateWithoutStateInput[] | CityUncheckedCreateWithoutStateInput[]
    connectOrCreate?: CityCreateOrConnectWithoutStateInput | CityCreateOrConnectWithoutStateInput[]
    createMany?: CityCreateManyStateInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type StateTimezoneUncheckedCreateNestedManyWithoutStateInput = {
    create?: XOR<StateTimezoneCreateWithoutStateInput, StateTimezoneUncheckedCreateWithoutStateInput> | StateTimezoneCreateWithoutStateInput[] | StateTimezoneUncheckedCreateWithoutStateInput[]
    connectOrCreate?: StateTimezoneCreateOrConnectWithoutStateInput | StateTimezoneCreateOrConnectWithoutStateInput[]
    createMany?: StateTimezoneCreateManyStateInputEnvelope
    connect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
  }

  export type CountryUpdateOneRequiredWithoutStatesNestedInput = {
    create?: XOR<CountryCreateWithoutStatesInput, CountryUncheckedCreateWithoutStatesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutStatesInput
    upsert?: CountryUpsertWithoutStatesInput
    connect?: CountryWhereUniqueInput
    update?: XOR<XOR<CountryUpdateToOneWithWhereWithoutStatesInput, CountryUpdateWithoutStatesInput>, CountryUncheckedUpdateWithoutStatesInput>
  }

  export type CityUpdateManyWithoutStateNestedInput = {
    create?: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput> | CityCreateWithoutStateInput[] | CityUncheckedCreateWithoutStateInput[]
    connectOrCreate?: CityCreateOrConnectWithoutStateInput | CityCreateOrConnectWithoutStateInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutStateInput | CityUpsertWithWhereUniqueWithoutStateInput[]
    createMany?: CityCreateManyStateInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutStateInput | CityUpdateWithWhereUniqueWithoutStateInput[]
    updateMany?: CityUpdateManyWithWhereWithoutStateInput | CityUpdateManyWithWhereWithoutStateInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type CurrencyUpdateOneWithoutStatesNestedInput = {
    create?: XOR<CurrencyCreateWithoutStatesInput, CurrencyUncheckedCreateWithoutStatesInput>
    connectOrCreate?: CurrencyCreateOrConnectWithoutStatesInput
    upsert?: CurrencyUpsertWithoutStatesInput
    disconnect?: CurrencyWhereInput | boolean
    delete?: CurrencyWhereInput | boolean
    connect?: CurrencyWhereUniqueInput
    update?: XOR<XOR<CurrencyUpdateToOneWithWhereWithoutStatesInput, CurrencyUpdateWithoutStatesInput>, CurrencyUncheckedUpdateWithoutStatesInput>
  }

  export type DialingCodeUpdateOneWithoutStatesNestedInput = {
    create?: XOR<DialingCodeCreateWithoutStatesInput, DialingCodeUncheckedCreateWithoutStatesInput>
    connectOrCreate?: DialingCodeCreateOrConnectWithoutStatesInput
    upsert?: DialingCodeUpsertWithoutStatesInput
    disconnect?: DialingCodeWhereInput | boolean
    delete?: DialingCodeWhereInput | boolean
    connect?: DialingCodeWhereUniqueInput
    update?: XOR<XOR<DialingCodeUpdateToOneWithWhereWithoutStatesInput, DialingCodeUpdateWithoutStatesInput>, DialingCodeUncheckedUpdateWithoutStatesInput>
  }

  export type StateTimezoneUpdateManyWithoutStateNestedInput = {
    create?: XOR<StateTimezoneCreateWithoutStateInput, StateTimezoneUncheckedCreateWithoutStateInput> | StateTimezoneCreateWithoutStateInput[] | StateTimezoneUncheckedCreateWithoutStateInput[]
    connectOrCreate?: StateTimezoneCreateOrConnectWithoutStateInput | StateTimezoneCreateOrConnectWithoutStateInput[]
    upsert?: StateTimezoneUpsertWithWhereUniqueWithoutStateInput | StateTimezoneUpsertWithWhereUniqueWithoutStateInput[]
    createMany?: StateTimezoneCreateManyStateInputEnvelope
    set?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    disconnect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    delete?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    connect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    update?: StateTimezoneUpdateWithWhereUniqueWithoutStateInput | StateTimezoneUpdateWithWhereUniqueWithoutStateInput[]
    updateMany?: StateTimezoneUpdateManyWithWhereWithoutStateInput | StateTimezoneUpdateManyWithWhereWithoutStateInput[]
    deleteMany?: StateTimezoneScalarWhereInput | StateTimezoneScalarWhereInput[]
  }

  export type IntFieldUpdateOperationsInput = {
    set?: number
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type CityUncheckedUpdateManyWithoutStateNestedInput = {
    create?: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput> | CityCreateWithoutStateInput[] | CityUncheckedCreateWithoutStateInput[]
    connectOrCreate?: CityCreateOrConnectWithoutStateInput | CityCreateOrConnectWithoutStateInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutStateInput | CityUpsertWithWhereUniqueWithoutStateInput[]
    createMany?: CityCreateManyStateInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutStateInput | CityUpdateWithWhereUniqueWithoutStateInput[]
    updateMany?: CityUpdateManyWithWhereWithoutStateInput | CityUpdateManyWithWhereWithoutStateInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type StateTimezoneUncheckedUpdateManyWithoutStateNestedInput = {
    create?: XOR<StateTimezoneCreateWithoutStateInput, StateTimezoneUncheckedCreateWithoutStateInput> | StateTimezoneCreateWithoutStateInput[] | StateTimezoneUncheckedCreateWithoutStateInput[]
    connectOrCreate?: StateTimezoneCreateOrConnectWithoutStateInput | StateTimezoneCreateOrConnectWithoutStateInput[]
    upsert?: StateTimezoneUpsertWithWhereUniqueWithoutStateInput | StateTimezoneUpsertWithWhereUniqueWithoutStateInput[]
    createMany?: StateTimezoneCreateManyStateInputEnvelope
    set?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    disconnect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    delete?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    connect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    update?: StateTimezoneUpdateWithWhereUniqueWithoutStateInput | StateTimezoneUpdateWithWhereUniqueWithoutStateInput[]
    updateMany?: StateTimezoneUpdateManyWithWhereWithoutStateInput | StateTimezoneUpdateManyWithWhereWithoutStateInput[]
    deleteMany?: StateTimezoneScalarWhereInput | StateTimezoneScalarWhereInput[]
  }

  export type StateCreateNestedOneWithoutCitiesInput = {
    create?: XOR<StateCreateWithoutCitiesInput, StateUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: StateCreateOrConnectWithoutCitiesInput
    connect?: StateWhereUniqueInput
  }

  export type CountryCreateNestedOneWithoutCitiesInput = {
    create?: XOR<CountryCreateWithoutCitiesInput, CountryUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutCitiesInput
    connect?: CountryWhereUniqueInput
  }

  export type TimezoneCreateNestedOneWithoutCitiesInput = {
    create?: XOR<TimezoneCreateWithoutCitiesInput, TimezoneUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: TimezoneCreateOrConnectWithoutCitiesInput
    connect?: TimezoneWhereUniqueInput
  }

  export type StateUpdateOneWithoutCitiesNestedInput = {
    create?: XOR<StateCreateWithoutCitiesInput, StateUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: StateCreateOrConnectWithoutCitiesInput
    upsert?: StateUpsertWithoutCitiesInput
    disconnect?: StateWhereInput | boolean
    delete?: StateWhereInput | boolean
    connect?: StateWhereUniqueInput
    update?: XOR<XOR<StateUpdateToOneWithWhereWithoutCitiesInput, StateUpdateWithoutCitiesInput>, StateUncheckedUpdateWithoutCitiesInput>
  }

  export type CountryUpdateOneRequiredWithoutCitiesNestedInput = {
    create?: XOR<CountryCreateWithoutCitiesInput, CountryUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutCitiesInput
    upsert?: CountryUpsertWithoutCitiesInput
    connect?: CountryWhereUniqueInput
    update?: XOR<XOR<CountryUpdateToOneWithWhereWithoutCitiesInput, CountryUpdateWithoutCitiesInput>, CountryUncheckedUpdateWithoutCitiesInput>
  }

  export type TimezoneUpdateOneWithoutCitiesNestedInput = {
    create?: XOR<TimezoneCreateWithoutCitiesInput, TimezoneUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: TimezoneCreateOrConnectWithoutCitiesInput
    upsert?: TimezoneUpsertWithoutCitiesInput
    disconnect?: TimezoneWhereInput | boolean
    delete?: TimezoneWhereInput | boolean
    connect?: TimezoneWhereUniqueInput
    update?: XOR<XOR<TimezoneUpdateToOneWithWhereWithoutCitiesInput, TimezoneUpdateWithoutCitiesInput>, TimezoneUncheckedUpdateWithoutCitiesInput>
  }

  export type NullableIntFieldUpdateOperationsInput = {
    set?: number | null
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type CityCreateNestedManyWithoutTimezoneInput = {
    create?: XOR<CityCreateWithoutTimezoneInput, CityUncheckedCreateWithoutTimezoneInput> | CityCreateWithoutTimezoneInput[] | CityUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: CityCreateOrConnectWithoutTimezoneInput | CityCreateOrConnectWithoutTimezoneInput[]
    createMany?: CityCreateManyTimezoneInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type StateTimezoneCreateNestedManyWithoutTimezoneInput = {
    create?: XOR<StateTimezoneCreateWithoutTimezoneInput, StateTimezoneUncheckedCreateWithoutTimezoneInput> | StateTimezoneCreateWithoutTimezoneInput[] | StateTimezoneUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: StateTimezoneCreateOrConnectWithoutTimezoneInput | StateTimezoneCreateOrConnectWithoutTimezoneInput[]
    createMany?: StateTimezoneCreateManyTimezoneInputEnvelope
    connect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
  }

  export type CountryTimezoneCreateNestedManyWithoutTimezoneInput = {
    create?: XOR<CountryTimezoneCreateWithoutTimezoneInput, CountryTimezoneUncheckedCreateWithoutTimezoneInput> | CountryTimezoneCreateWithoutTimezoneInput[] | CountryTimezoneUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: CountryTimezoneCreateOrConnectWithoutTimezoneInput | CountryTimezoneCreateOrConnectWithoutTimezoneInput[]
    createMany?: CountryTimezoneCreateManyTimezoneInputEnvelope
    connect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
  }

  export type CityUncheckedCreateNestedManyWithoutTimezoneInput = {
    create?: XOR<CityCreateWithoutTimezoneInput, CityUncheckedCreateWithoutTimezoneInput> | CityCreateWithoutTimezoneInput[] | CityUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: CityCreateOrConnectWithoutTimezoneInput | CityCreateOrConnectWithoutTimezoneInput[]
    createMany?: CityCreateManyTimezoneInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type StateTimezoneUncheckedCreateNestedManyWithoutTimezoneInput = {
    create?: XOR<StateTimezoneCreateWithoutTimezoneInput, StateTimezoneUncheckedCreateWithoutTimezoneInput> | StateTimezoneCreateWithoutTimezoneInput[] | StateTimezoneUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: StateTimezoneCreateOrConnectWithoutTimezoneInput | StateTimezoneCreateOrConnectWithoutTimezoneInput[]
    createMany?: StateTimezoneCreateManyTimezoneInputEnvelope
    connect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
  }

  export type CountryTimezoneUncheckedCreateNestedManyWithoutTimezoneInput = {
    create?: XOR<CountryTimezoneCreateWithoutTimezoneInput, CountryTimezoneUncheckedCreateWithoutTimezoneInput> | CountryTimezoneCreateWithoutTimezoneInput[] | CountryTimezoneUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: CountryTimezoneCreateOrConnectWithoutTimezoneInput | CountryTimezoneCreateOrConnectWithoutTimezoneInput[]
    createMany?: CountryTimezoneCreateManyTimezoneInputEnvelope
    connect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
  }

  export type CityUpdateManyWithoutTimezoneNestedInput = {
    create?: XOR<CityCreateWithoutTimezoneInput, CityUncheckedCreateWithoutTimezoneInput> | CityCreateWithoutTimezoneInput[] | CityUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: CityCreateOrConnectWithoutTimezoneInput | CityCreateOrConnectWithoutTimezoneInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutTimezoneInput | CityUpsertWithWhereUniqueWithoutTimezoneInput[]
    createMany?: CityCreateManyTimezoneInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutTimezoneInput | CityUpdateWithWhereUniqueWithoutTimezoneInput[]
    updateMany?: CityUpdateManyWithWhereWithoutTimezoneInput | CityUpdateManyWithWhereWithoutTimezoneInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type StateTimezoneUpdateManyWithoutTimezoneNestedInput = {
    create?: XOR<StateTimezoneCreateWithoutTimezoneInput, StateTimezoneUncheckedCreateWithoutTimezoneInput> | StateTimezoneCreateWithoutTimezoneInput[] | StateTimezoneUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: StateTimezoneCreateOrConnectWithoutTimezoneInput | StateTimezoneCreateOrConnectWithoutTimezoneInput[]
    upsert?: StateTimezoneUpsertWithWhereUniqueWithoutTimezoneInput | StateTimezoneUpsertWithWhereUniqueWithoutTimezoneInput[]
    createMany?: StateTimezoneCreateManyTimezoneInputEnvelope
    set?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    disconnect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    delete?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    connect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    update?: StateTimezoneUpdateWithWhereUniqueWithoutTimezoneInput | StateTimezoneUpdateWithWhereUniqueWithoutTimezoneInput[]
    updateMany?: StateTimezoneUpdateManyWithWhereWithoutTimezoneInput | StateTimezoneUpdateManyWithWhereWithoutTimezoneInput[]
    deleteMany?: StateTimezoneScalarWhereInput | StateTimezoneScalarWhereInput[]
  }

  export type CountryTimezoneUpdateManyWithoutTimezoneNestedInput = {
    create?: XOR<CountryTimezoneCreateWithoutTimezoneInput, CountryTimezoneUncheckedCreateWithoutTimezoneInput> | CountryTimezoneCreateWithoutTimezoneInput[] | CountryTimezoneUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: CountryTimezoneCreateOrConnectWithoutTimezoneInput | CountryTimezoneCreateOrConnectWithoutTimezoneInput[]
    upsert?: CountryTimezoneUpsertWithWhereUniqueWithoutTimezoneInput | CountryTimezoneUpsertWithWhereUniqueWithoutTimezoneInput[]
    createMany?: CountryTimezoneCreateManyTimezoneInputEnvelope
    set?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    disconnect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    delete?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    connect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    update?: CountryTimezoneUpdateWithWhereUniqueWithoutTimezoneInput | CountryTimezoneUpdateWithWhereUniqueWithoutTimezoneInput[]
    updateMany?: CountryTimezoneUpdateManyWithWhereWithoutTimezoneInput | CountryTimezoneUpdateManyWithWhereWithoutTimezoneInput[]
    deleteMany?: CountryTimezoneScalarWhereInput | CountryTimezoneScalarWhereInput[]
  }

  export type CityUncheckedUpdateManyWithoutTimezoneNestedInput = {
    create?: XOR<CityCreateWithoutTimezoneInput, CityUncheckedCreateWithoutTimezoneInput> | CityCreateWithoutTimezoneInput[] | CityUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: CityCreateOrConnectWithoutTimezoneInput | CityCreateOrConnectWithoutTimezoneInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutTimezoneInput | CityUpsertWithWhereUniqueWithoutTimezoneInput[]
    createMany?: CityCreateManyTimezoneInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutTimezoneInput | CityUpdateWithWhereUniqueWithoutTimezoneInput[]
    updateMany?: CityUpdateManyWithWhereWithoutTimezoneInput | CityUpdateManyWithWhereWithoutTimezoneInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type StateTimezoneUncheckedUpdateManyWithoutTimezoneNestedInput = {
    create?: XOR<StateTimezoneCreateWithoutTimezoneInput, StateTimezoneUncheckedCreateWithoutTimezoneInput> | StateTimezoneCreateWithoutTimezoneInput[] | StateTimezoneUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: StateTimezoneCreateOrConnectWithoutTimezoneInput | StateTimezoneCreateOrConnectWithoutTimezoneInput[]
    upsert?: StateTimezoneUpsertWithWhereUniqueWithoutTimezoneInput | StateTimezoneUpsertWithWhereUniqueWithoutTimezoneInput[]
    createMany?: StateTimezoneCreateManyTimezoneInputEnvelope
    set?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    disconnect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    delete?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    connect?: StateTimezoneWhereUniqueInput | StateTimezoneWhereUniqueInput[]
    update?: StateTimezoneUpdateWithWhereUniqueWithoutTimezoneInput | StateTimezoneUpdateWithWhereUniqueWithoutTimezoneInput[]
    updateMany?: StateTimezoneUpdateManyWithWhereWithoutTimezoneInput | StateTimezoneUpdateManyWithWhereWithoutTimezoneInput[]
    deleteMany?: StateTimezoneScalarWhereInput | StateTimezoneScalarWhereInput[]
  }

  export type CountryTimezoneUncheckedUpdateManyWithoutTimezoneNestedInput = {
    create?: XOR<CountryTimezoneCreateWithoutTimezoneInput, CountryTimezoneUncheckedCreateWithoutTimezoneInput> | CountryTimezoneCreateWithoutTimezoneInput[] | CountryTimezoneUncheckedCreateWithoutTimezoneInput[]
    connectOrCreate?: CountryTimezoneCreateOrConnectWithoutTimezoneInput | CountryTimezoneCreateOrConnectWithoutTimezoneInput[]
    upsert?: CountryTimezoneUpsertWithWhereUniqueWithoutTimezoneInput | CountryTimezoneUpsertWithWhereUniqueWithoutTimezoneInput[]
    createMany?: CountryTimezoneCreateManyTimezoneInputEnvelope
    set?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    disconnect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    delete?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    connect?: CountryTimezoneWhereUniqueInput | CountryTimezoneWhereUniqueInput[]
    update?: CountryTimezoneUpdateWithWhereUniqueWithoutTimezoneInput | CountryTimezoneUpdateWithWhereUniqueWithoutTimezoneInput[]
    updateMany?: CountryTimezoneUpdateManyWithWhereWithoutTimezoneInput | CountryTimezoneUpdateManyWithWhereWithoutTimezoneInput[]
    deleteMany?: CountryTimezoneScalarWhereInput | CountryTimezoneScalarWhereInput[]
  }

  export type CountryCreateNestedOneWithoutTimezonesInput = {
    create?: XOR<CountryCreateWithoutTimezonesInput, CountryUncheckedCreateWithoutTimezonesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutTimezonesInput
    connect?: CountryWhereUniqueInput
  }

  export type TimezoneCreateNestedOneWithoutCountryTimezonesInput = {
    create?: XOR<TimezoneCreateWithoutCountryTimezonesInput, TimezoneUncheckedCreateWithoutCountryTimezonesInput>
    connectOrCreate?: TimezoneCreateOrConnectWithoutCountryTimezonesInput
    connect?: TimezoneWhereUniqueInput
  }

  export type CountryUpdateOneRequiredWithoutTimezonesNestedInput = {
    create?: XOR<CountryCreateWithoutTimezonesInput, CountryUncheckedCreateWithoutTimezonesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutTimezonesInput
    upsert?: CountryUpsertWithoutTimezonesInput
    connect?: CountryWhereUniqueInput
    update?: XOR<XOR<CountryUpdateToOneWithWhereWithoutTimezonesInput, CountryUpdateWithoutTimezonesInput>, CountryUncheckedUpdateWithoutTimezonesInput>
  }

  export type TimezoneUpdateOneRequiredWithoutCountryTimezonesNestedInput = {
    create?: XOR<TimezoneCreateWithoutCountryTimezonesInput, TimezoneUncheckedCreateWithoutCountryTimezonesInput>
    connectOrCreate?: TimezoneCreateOrConnectWithoutCountryTimezonesInput
    upsert?: TimezoneUpsertWithoutCountryTimezonesInput
    connect?: TimezoneWhereUniqueInput
    update?: XOR<XOR<TimezoneUpdateToOneWithWhereWithoutCountryTimezonesInput, TimezoneUpdateWithoutCountryTimezonesInput>, TimezoneUncheckedUpdateWithoutCountryTimezonesInput>
  }

  export type StateCreateNestedOneWithoutTimezonesInput = {
    create?: XOR<StateCreateWithoutTimezonesInput, StateUncheckedCreateWithoutTimezonesInput>
    connectOrCreate?: StateCreateOrConnectWithoutTimezonesInput
    connect?: StateWhereUniqueInput
  }

  export type TimezoneCreateNestedOneWithoutStateTimezonesInput = {
    create?: XOR<TimezoneCreateWithoutStateTimezonesInput, TimezoneUncheckedCreateWithoutStateTimezonesInput>
    connectOrCreate?: TimezoneCreateOrConnectWithoutStateTimezonesInput
    connect?: TimezoneWhereUniqueInput
  }

  export type StateUpdateOneRequiredWithoutTimezonesNestedInput = {
    create?: XOR<StateCreateWithoutTimezonesInput, StateUncheckedCreateWithoutTimezonesInput>
    connectOrCreate?: StateCreateOrConnectWithoutTimezonesInput
    upsert?: StateUpsertWithoutTimezonesInput
    connect?: StateWhereUniqueInput
    update?: XOR<XOR<StateUpdateToOneWithWhereWithoutTimezonesInput, StateUpdateWithoutTimezonesInput>, StateUncheckedUpdateWithoutTimezonesInput>
  }

  export type TimezoneUpdateOneRequiredWithoutStateTimezonesNestedInput = {
    create?: XOR<TimezoneCreateWithoutStateTimezonesInput, TimezoneUncheckedCreateWithoutStateTimezonesInput>
    connectOrCreate?: TimezoneCreateOrConnectWithoutStateTimezonesInput
    upsert?: TimezoneUpsertWithoutStateTimezonesInput
    connect?: TimezoneWhereUniqueInput
    update?: XOR<XOR<TimezoneUpdateToOneWithWhereWithoutStateTimezonesInput, TimezoneUpdateWithoutStateTimezonesInput>, TimezoneUncheckedUpdateWithoutStateTimezonesInput>
  }

  export type CountryCreateNestedManyWithoutCurrencyInput = {
    create?: XOR<CountryCreateWithoutCurrencyInput, CountryUncheckedCreateWithoutCurrencyInput> | CountryCreateWithoutCurrencyInput[] | CountryUncheckedCreateWithoutCurrencyInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutCurrencyInput | CountryCreateOrConnectWithoutCurrencyInput[]
    createMany?: CountryCreateManyCurrencyInputEnvelope
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
  }

  export type StateCreateNestedManyWithoutCurrencyInput = {
    create?: XOR<StateCreateWithoutCurrencyInput, StateUncheckedCreateWithoutCurrencyInput> | StateCreateWithoutCurrencyInput[] | StateUncheckedCreateWithoutCurrencyInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCurrencyInput | StateCreateOrConnectWithoutCurrencyInput[]
    createMany?: StateCreateManyCurrencyInputEnvelope
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
  }

  export type CountryUncheckedCreateNestedManyWithoutCurrencyInput = {
    create?: XOR<CountryCreateWithoutCurrencyInput, CountryUncheckedCreateWithoutCurrencyInput> | CountryCreateWithoutCurrencyInput[] | CountryUncheckedCreateWithoutCurrencyInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutCurrencyInput | CountryCreateOrConnectWithoutCurrencyInput[]
    createMany?: CountryCreateManyCurrencyInputEnvelope
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
  }

  export type StateUncheckedCreateNestedManyWithoutCurrencyInput = {
    create?: XOR<StateCreateWithoutCurrencyInput, StateUncheckedCreateWithoutCurrencyInput> | StateCreateWithoutCurrencyInput[] | StateUncheckedCreateWithoutCurrencyInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCurrencyInput | StateCreateOrConnectWithoutCurrencyInput[]
    createMany?: StateCreateManyCurrencyInputEnvelope
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
  }

  export type CountryUpdateManyWithoutCurrencyNestedInput = {
    create?: XOR<CountryCreateWithoutCurrencyInput, CountryUncheckedCreateWithoutCurrencyInput> | CountryCreateWithoutCurrencyInput[] | CountryUncheckedCreateWithoutCurrencyInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutCurrencyInput | CountryCreateOrConnectWithoutCurrencyInput[]
    upsert?: CountryUpsertWithWhereUniqueWithoutCurrencyInput | CountryUpsertWithWhereUniqueWithoutCurrencyInput[]
    createMany?: CountryCreateManyCurrencyInputEnvelope
    set?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    disconnect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    delete?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    update?: CountryUpdateWithWhereUniqueWithoutCurrencyInput | CountryUpdateWithWhereUniqueWithoutCurrencyInput[]
    updateMany?: CountryUpdateManyWithWhereWithoutCurrencyInput | CountryUpdateManyWithWhereWithoutCurrencyInput[]
    deleteMany?: CountryScalarWhereInput | CountryScalarWhereInput[]
  }

  export type StateUpdateManyWithoutCurrencyNestedInput = {
    create?: XOR<StateCreateWithoutCurrencyInput, StateUncheckedCreateWithoutCurrencyInput> | StateCreateWithoutCurrencyInput[] | StateUncheckedCreateWithoutCurrencyInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCurrencyInput | StateCreateOrConnectWithoutCurrencyInput[]
    upsert?: StateUpsertWithWhereUniqueWithoutCurrencyInput | StateUpsertWithWhereUniqueWithoutCurrencyInput[]
    createMany?: StateCreateManyCurrencyInputEnvelope
    set?: StateWhereUniqueInput | StateWhereUniqueInput[]
    disconnect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    delete?: StateWhereUniqueInput | StateWhereUniqueInput[]
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    update?: StateUpdateWithWhereUniqueWithoutCurrencyInput | StateUpdateWithWhereUniqueWithoutCurrencyInput[]
    updateMany?: StateUpdateManyWithWhereWithoutCurrencyInput | StateUpdateManyWithWhereWithoutCurrencyInput[]
    deleteMany?: StateScalarWhereInput | StateScalarWhereInput[]
  }

  export type CountryUncheckedUpdateManyWithoutCurrencyNestedInput = {
    create?: XOR<CountryCreateWithoutCurrencyInput, CountryUncheckedCreateWithoutCurrencyInput> | CountryCreateWithoutCurrencyInput[] | CountryUncheckedCreateWithoutCurrencyInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutCurrencyInput | CountryCreateOrConnectWithoutCurrencyInput[]
    upsert?: CountryUpsertWithWhereUniqueWithoutCurrencyInput | CountryUpsertWithWhereUniqueWithoutCurrencyInput[]
    createMany?: CountryCreateManyCurrencyInputEnvelope
    set?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    disconnect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    delete?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    update?: CountryUpdateWithWhereUniqueWithoutCurrencyInput | CountryUpdateWithWhereUniqueWithoutCurrencyInput[]
    updateMany?: CountryUpdateManyWithWhereWithoutCurrencyInput | CountryUpdateManyWithWhereWithoutCurrencyInput[]
    deleteMany?: CountryScalarWhereInput | CountryScalarWhereInput[]
  }

  export type StateUncheckedUpdateManyWithoutCurrencyNestedInput = {
    create?: XOR<StateCreateWithoutCurrencyInput, StateUncheckedCreateWithoutCurrencyInput> | StateCreateWithoutCurrencyInput[] | StateUncheckedCreateWithoutCurrencyInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCurrencyInput | StateCreateOrConnectWithoutCurrencyInput[]
    upsert?: StateUpsertWithWhereUniqueWithoutCurrencyInput | StateUpsertWithWhereUniqueWithoutCurrencyInput[]
    createMany?: StateCreateManyCurrencyInputEnvelope
    set?: StateWhereUniqueInput | StateWhereUniqueInput[]
    disconnect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    delete?: StateWhereUniqueInput | StateWhereUniqueInput[]
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    update?: StateUpdateWithWhereUniqueWithoutCurrencyInput | StateUpdateWithWhereUniqueWithoutCurrencyInput[]
    updateMany?: StateUpdateManyWithWhereWithoutCurrencyInput | StateUpdateManyWithWhereWithoutCurrencyInput[]
    deleteMany?: StateScalarWhereInput | StateScalarWhereInput[]
  }

  export type CountryCreateNestedOneWithoutPhoneCodesInput = {
    create?: XOR<CountryCreateWithoutPhoneCodesInput, CountryUncheckedCreateWithoutPhoneCodesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutPhoneCodesInput
    connect?: CountryWhereUniqueInput
  }

  export type StateCreateNestedManyWithoutDialingCodeInput = {
    create?: XOR<StateCreateWithoutDialingCodeInput, StateUncheckedCreateWithoutDialingCodeInput> | StateCreateWithoutDialingCodeInput[] | StateUncheckedCreateWithoutDialingCodeInput[]
    connectOrCreate?: StateCreateOrConnectWithoutDialingCodeInput | StateCreateOrConnectWithoutDialingCodeInput[]
    createMany?: StateCreateManyDialingCodeInputEnvelope
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
  }

  export type StateUncheckedCreateNestedManyWithoutDialingCodeInput = {
    create?: XOR<StateCreateWithoutDialingCodeInput, StateUncheckedCreateWithoutDialingCodeInput> | StateCreateWithoutDialingCodeInput[] | StateUncheckedCreateWithoutDialingCodeInput[]
    connectOrCreate?: StateCreateOrConnectWithoutDialingCodeInput | StateCreateOrConnectWithoutDialingCodeInput[]
    createMany?: StateCreateManyDialingCodeInputEnvelope
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
  }

  export type CountryUpdateOneRequiredWithoutPhoneCodesNestedInput = {
    create?: XOR<CountryCreateWithoutPhoneCodesInput, CountryUncheckedCreateWithoutPhoneCodesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutPhoneCodesInput
    upsert?: CountryUpsertWithoutPhoneCodesInput
    connect?: CountryWhereUniqueInput
    update?: XOR<XOR<CountryUpdateToOneWithWhereWithoutPhoneCodesInput, CountryUpdateWithoutPhoneCodesInput>, CountryUncheckedUpdateWithoutPhoneCodesInput>
  }

  export type StateUpdateManyWithoutDialingCodeNestedInput = {
    create?: XOR<StateCreateWithoutDialingCodeInput, StateUncheckedCreateWithoutDialingCodeInput> | StateCreateWithoutDialingCodeInput[] | StateUncheckedCreateWithoutDialingCodeInput[]
    connectOrCreate?: StateCreateOrConnectWithoutDialingCodeInput | StateCreateOrConnectWithoutDialingCodeInput[]
    upsert?: StateUpsertWithWhereUniqueWithoutDialingCodeInput | StateUpsertWithWhereUniqueWithoutDialingCodeInput[]
    createMany?: StateCreateManyDialingCodeInputEnvelope
    set?: StateWhereUniqueInput | StateWhereUniqueInput[]
    disconnect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    delete?: StateWhereUniqueInput | StateWhereUniqueInput[]
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    update?: StateUpdateWithWhereUniqueWithoutDialingCodeInput | StateUpdateWithWhereUniqueWithoutDialingCodeInput[]
    updateMany?: StateUpdateManyWithWhereWithoutDialingCodeInput | StateUpdateManyWithWhereWithoutDialingCodeInput[]
    deleteMany?: StateScalarWhereInput | StateScalarWhereInput[]
  }

  export type StateUncheckedUpdateManyWithoutDialingCodeNestedInput = {
    create?: XOR<StateCreateWithoutDialingCodeInput, StateUncheckedCreateWithoutDialingCodeInput> | StateCreateWithoutDialingCodeInput[] | StateUncheckedCreateWithoutDialingCodeInput[]
    connectOrCreate?: StateCreateOrConnectWithoutDialingCodeInput | StateCreateOrConnectWithoutDialingCodeInput[]
    upsert?: StateUpsertWithWhereUniqueWithoutDialingCodeInput | StateUpsertWithWhereUniqueWithoutDialingCodeInput[]
    createMany?: StateCreateManyDialingCodeInputEnvelope
    set?: StateWhereUniqueInput | StateWhereUniqueInput[]
    disconnect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    delete?: StateWhereUniqueInput | StateWhereUniqueInput[]
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    update?: StateUpdateWithWhereUniqueWithoutDialingCodeInput | StateUpdateWithWhereUniqueWithoutDialingCodeInput[]
    updateMany?: StateUpdateManyWithWhereWithoutDialingCodeInput | StateUpdateManyWithWhereWithoutDialingCodeInput[]
    deleteMany?: StateScalarWhereInput | StateScalarWhereInput[]
  }

  export type NestedStringFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[]
    notIn?: string[]
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringFilter<$PrismaModel> | string
  }

  export type NestedStringNullableFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | null
    notIn?: string[] | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringNullableFilter<$PrismaModel> | string | null
  }

  export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[]
    notIn?: string[]
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringWithAggregatesFilter<$PrismaModel> | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedStringFilter<$PrismaModel>
    _max?: NestedStringFilter<$PrismaModel>
  }

  export type NestedIntFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntFilter<$PrismaModel> | number
  }

  export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | null
    notIn?: string[] | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedStringNullableFilter<$PrismaModel>
    _max?: NestedStringNullableFilter<$PrismaModel>
  }

  export type NestedIntNullableFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableFilter<$PrismaModel> | number | null
  }

  export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedIntFilter<$PrismaModel>
    _min?: NestedIntFilter<$PrismaModel>
    _max?: NestedIntFilter<$PrismaModel>
  }

  export type NestedFloatFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatFilter<$PrismaModel> | number
  }

  export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedIntNullableFilter<$PrismaModel>
    _max?: NestedIntNullableFilter<$PrismaModel>
  }

  export type NestedFloatNullableFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableFilter<$PrismaModel> | number | null
  }

  export type CurrencyCreateWithoutCountriesInput = {
    code: string
    name: string
    symbol: string
    decimalPlaces?: number
    states?: StateCreateNestedManyWithoutCurrencyInput
  }

  export type CurrencyUncheckedCreateWithoutCountriesInput = {
    code: string
    name: string
    symbol: string
    decimalPlaces?: number
    states?: StateUncheckedCreateNestedManyWithoutCurrencyInput
  }

  export type CurrencyCreateOrConnectWithoutCountriesInput = {
    where: CurrencyWhereUniqueInput
    create: XOR<CurrencyCreateWithoutCountriesInput, CurrencyUncheckedCreateWithoutCountriesInput>
  }

  export type DialingCodeCreateWithoutCountryInput = {
    code: string
    root: string
    suffix: string
    example?: string | null
    states?: StateCreateNestedManyWithoutDialingCodeInput
  }

  export type DialingCodeUncheckedCreateWithoutCountryInput = {
    code: string
    root: string
    suffix: string
    example?: string | null
    states?: StateUncheckedCreateNestedManyWithoutDialingCodeInput
  }

  export type DialingCodeCreateOrConnectWithoutCountryInput = {
    where: DialingCodeWhereUniqueInput
    create: XOR<DialingCodeCreateWithoutCountryInput, DialingCodeUncheckedCreateWithoutCountryInput>
  }

  export type DialingCodeCreateManyCountryInputEnvelope = {
    data: DialingCodeCreateManyCountryInput | DialingCodeCreateManyCountryInput[]
  }

  export type CountryTimezoneCreateWithoutCountryInput = {
    timezone: TimezoneCreateNestedOneWithoutCountryTimezonesInput
  }

  export type CountryTimezoneUncheckedCreateWithoutCountryInput = {
    timezoneId: string
  }

  export type CountryTimezoneCreateOrConnectWithoutCountryInput = {
    where: CountryTimezoneWhereUniqueInput
    create: XOR<CountryTimezoneCreateWithoutCountryInput, CountryTimezoneUncheckedCreateWithoutCountryInput>
  }

  export type CountryTimezoneCreateManyCountryInputEnvelope = {
    data: CountryTimezoneCreateManyCountryInput | CountryTimezoneCreateManyCountryInput[]
  }

  export type StateCreateWithoutCountryInput = {
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    cities?: CityCreateNestedManyWithoutStateInput
    currency?: CurrencyCreateNestedOneWithoutStatesInput
    dialingCode?: DialingCodeCreateNestedOneWithoutStatesInput
    timezones?: StateTimezoneCreateNestedManyWithoutStateInput
  }

  export type StateUncheckedCreateWithoutCountryInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    currencyCode?: string | null
    phoneCode?: string | null
    cities?: CityUncheckedCreateNestedManyWithoutStateInput
    timezones?: StateTimezoneUncheckedCreateNestedManyWithoutStateInput
  }

  export type StateCreateOrConnectWithoutCountryInput = {
    where: StateWhereUniqueInput
    create: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput>
  }

  export type StateCreateManyCountryInputEnvelope = {
    data: StateCreateManyCountryInput | StateCreateManyCountryInput[]
  }

  export type CityCreateWithoutCountryInput = {
    name: string
    state?: StateCreateNestedOneWithoutCitiesInput
    timezone?: TimezoneCreateNestedOneWithoutCitiesInput
  }

  export type CityUncheckedCreateWithoutCountryInput = {
    id?: number
    name: string
    stateId?: number | null
    timezoneId?: string | null
  }

  export type CityCreateOrConnectWithoutCountryInput = {
    where: CityWhereUniqueInput
    create: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput>
  }

  export type CityCreateManyCountryInputEnvelope = {
    data: CityCreateManyCountryInput | CityCreateManyCountryInput[]
  }

  export type CurrencyUpsertWithoutCountriesInput = {
    update: XOR<CurrencyUpdateWithoutCountriesInput, CurrencyUncheckedUpdateWithoutCountriesInput>
    create: XOR<CurrencyCreateWithoutCountriesInput, CurrencyUncheckedCreateWithoutCountriesInput>
    where?: CurrencyWhereInput
  }

  export type CurrencyUpdateToOneWithWhereWithoutCountriesInput = {
    where?: CurrencyWhereInput
    data: XOR<CurrencyUpdateWithoutCountriesInput, CurrencyUncheckedUpdateWithoutCountriesInput>
  }

  export type CurrencyUpdateWithoutCountriesInput = {
    code?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    symbol?: StringFieldUpdateOperationsInput | string
    decimalPlaces?: IntFieldUpdateOperationsInput | number
    states?: StateUpdateManyWithoutCurrencyNestedInput
  }

  export type CurrencyUncheckedUpdateWithoutCountriesInput = {
    code?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    symbol?: StringFieldUpdateOperationsInput | string
    decimalPlaces?: IntFieldUpdateOperationsInput | number
    states?: StateUncheckedUpdateManyWithoutCurrencyNestedInput
  }

  export type DialingCodeUpsertWithWhereUniqueWithoutCountryInput = {
    where: DialingCodeWhereUniqueInput
    update: XOR<DialingCodeUpdateWithoutCountryInput, DialingCodeUncheckedUpdateWithoutCountryInput>
    create: XOR<DialingCodeCreateWithoutCountryInput, DialingCodeUncheckedCreateWithoutCountryInput>
  }

  export type DialingCodeUpdateWithWhereUniqueWithoutCountryInput = {
    where: DialingCodeWhereUniqueInput
    data: XOR<DialingCodeUpdateWithoutCountryInput, DialingCodeUncheckedUpdateWithoutCountryInput>
  }

  export type DialingCodeUpdateManyWithWhereWithoutCountryInput = {
    where: DialingCodeScalarWhereInput
    data: XOR<DialingCodeUpdateManyMutationInput, DialingCodeUncheckedUpdateManyWithoutCountryInput>
  }

  export type DialingCodeScalarWhereInput = {
    AND?: DialingCodeScalarWhereInput | DialingCodeScalarWhereInput[]
    OR?: DialingCodeScalarWhereInput[]
    NOT?: DialingCodeScalarWhereInput | DialingCodeScalarWhereInput[]
    code?: StringFilter<"DialingCode"> | string
    root?: StringFilter<"DialingCode"> | string
    suffix?: StringFilter<"DialingCode"> | string
    example?: StringNullableFilter<"DialingCode"> | string | null
    countryCode?: StringFilter<"DialingCode"> | string
  }

  export type CountryTimezoneUpsertWithWhereUniqueWithoutCountryInput = {
    where: CountryTimezoneWhereUniqueInput
    update: XOR<CountryTimezoneUpdateWithoutCountryInput, CountryTimezoneUncheckedUpdateWithoutCountryInput>
    create: XOR<CountryTimezoneCreateWithoutCountryInput, CountryTimezoneUncheckedCreateWithoutCountryInput>
  }

  export type CountryTimezoneUpdateWithWhereUniqueWithoutCountryInput = {
    where: CountryTimezoneWhereUniqueInput
    data: XOR<CountryTimezoneUpdateWithoutCountryInput, CountryTimezoneUncheckedUpdateWithoutCountryInput>
  }

  export type CountryTimezoneUpdateManyWithWhereWithoutCountryInput = {
    where: CountryTimezoneScalarWhereInput
    data: XOR<CountryTimezoneUpdateManyMutationInput, CountryTimezoneUncheckedUpdateManyWithoutCountryInput>
  }

  export type CountryTimezoneScalarWhereInput = {
    AND?: CountryTimezoneScalarWhereInput | CountryTimezoneScalarWhereInput[]
    OR?: CountryTimezoneScalarWhereInput[]
    NOT?: CountryTimezoneScalarWhereInput | CountryTimezoneScalarWhereInput[]
    countryCode?: StringFilter<"CountryTimezone"> | string
    timezoneId?: StringFilter<"CountryTimezone"> | string
  }

  export type StateUpsertWithWhereUniqueWithoutCountryInput = {
    where: StateWhereUniqueInput
    update: XOR<StateUpdateWithoutCountryInput, StateUncheckedUpdateWithoutCountryInput>
    create: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput>
  }

  export type StateUpdateWithWhereUniqueWithoutCountryInput = {
    where: StateWhereUniqueInput
    data: XOR<StateUpdateWithoutCountryInput, StateUncheckedUpdateWithoutCountryInput>
  }

  export type StateUpdateManyWithWhereWithoutCountryInput = {
    where: StateScalarWhereInput
    data: XOR<StateUpdateManyMutationInput, StateUncheckedUpdateManyWithoutCountryInput>
  }

  export type StateScalarWhereInput = {
    AND?: StateScalarWhereInput | StateScalarWhereInput[]
    OR?: StateScalarWhereInput[]
    NOT?: StateScalarWhereInput | StateScalarWhereInput[]
    id?: IntFilter<"State"> | number
    name?: StringFilter<"State"> | string
    iso2?: StringNullableFilter<"State"> | string | null
    iso3?: StringNullableFilter<"State"> | string | null
    flagEmoji?: StringNullableFilter<"State"> | string | null
    countryCode?: StringFilter<"State"> | string
    currencyCode?: StringNullableFilter<"State"> | string | null
    phoneCode?: StringNullableFilter<"State"> | string | null
  }

  export type CityUpsertWithWhereUniqueWithoutCountryInput = {
    where: CityWhereUniqueInput
    update: XOR<CityUpdateWithoutCountryInput, CityUncheckedUpdateWithoutCountryInput>
    create: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput>
  }

  export type CityUpdateWithWhereUniqueWithoutCountryInput = {
    where: CityWhereUniqueInput
    data: XOR<CityUpdateWithoutCountryInput, CityUncheckedUpdateWithoutCountryInput>
  }

  export type CityUpdateManyWithWhereWithoutCountryInput = {
    where: CityScalarWhereInput
    data: XOR<CityUpdateManyMutationInput, CityUncheckedUpdateManyWithoutCountryInput>
  }

  export type CityScalarWhereInput = {
    AND?: CityScalarWhereInput | CityScalarWhereInput[]
    OR?: CityScalarWhereInput[]
    NOT?: CityScalarWhereInput | CityScalarWhereInput[]
    id?: IntFilter<"City"> | number
    name?: StringFilter<"City"> | string
    stateId?: IntNullableFilter<"City"> | number | null
    countryCode?: StringFilter<"City"> | string
    timezoneId?: StringNullableFilter<"City"> | string | null
  }

  export type CountryCreateWithoutStatesInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currency?: CurrencyCreateNestedOneWithoutCountriesInput
    phoneCodes?: DialingCodeCreateNestedManyWithoutCountryInput
    timezones?: CountryTimezoneCreateNestedManyWithoutCountryInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutStatesInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currencyCode?: string | null
    phoneCodes?: DialingCodeUncheckedCreateNestedManyWithoutCountryInput
    timezones?: CountryTimezoneUncheckedCreateNestedManyWithoutCountryInput
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutStatesInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutStatesInput, CountryUncheckedCreateWithoutStatesInput>
  }

  export type CityCreateWithoutStateInput = {
    name: string
    country: CountryCreateNestedOneWithoutCitiesInput
    timezone?: TimezoneCreateNestedOneWithoutCitiesInput
  }

  export type CityUncheckedCreateWithoutStateInput = {
    id?: number
    name: string
    countryCode: string
    timezoneId?: string | null
  }

  export type CityCreateOrConnectWithoutStateInput = {
    where: CityWhereUniqueInput
    create: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput>
  }

  export type CityCreateManyStateInputEnvelope = {
    data: CityCreateManyStateInput | CityCreateManyStateInput[]
  }

  export type CurrencyCreateWithoutStatesInput = {
    code: string
    name: string
    symbol: string
    decimalPlaces?: number
    countries?: CountryCreateNestedManyWithoutCurrencyInput
  }

  export type CurrencyUncheckedCreateWithoutStatesInput = {
    code: string
    name: string
    symbol: string
    decimalPlaces?: number
    countries?: CountryUncheckedCreateNestedManyWithoutCurrencyInput
  }

  export type CurrencyCreateOrConnectWithoutStatesInput = {
    where: CurrencyWhereUniqueInput
    create: XOR<CurrencyCreateWithoutStatesInput, CurrencyUncheckedCreateWithoutStatesInput>
  }

  export type DialingCodeCreateWithoutStatesInput = {
    code: string
    root: string
    suffix: string
    example?: string | null
    country: CountryCreateNestedOneWithoutPhoneCodesInput
  }

  export type DialingCodeUncheckedCreateWithoutStatesInput = {
    code: string
    root: string
    suffix: string
    example?: string | null
    countryCode: string
  }

  export type DialingCodeCreateOrConnectWithoutStatesInput = {
    where: DialingCodeWhereUniqueInput
    create: XOR<DialingCodeCreateWithoutStatesInput, DialingCodeUncheckedCreateWithoutStatesInput>
  }

  export type StateTimezoneCreateWithoutStateInput = {
    timezone: TimezoneCreateNestedOneWithoutStateTimezonesInput
  }

  export type StateTimezoneUncheckedCreateWithoutStateInput = {
    timezoneId: string
  }

  export type StateTimezoneCreateOrConnectWithoutStateInput = {
    where: StateTimezoneWhereUniqueInput
    create: XOR<StateTimezoneCreateWithoutStateInput, StateTimezoneUncheckedCreateWithoutStateInput>
  }

  export type StateTimezoneCreateManyStateInputEnvelope = {
    data: StateTimezoneCreateManyStateInput | StateTimezoneCreateManyStateInput[]
  }

  export type CountryUpsertWithoutStatesInput = {
    update: XOR<CountryUpdateWithoutStatesInput, CountryUncheckedUpdateWithoutStatesInput>
    create: XOR<CountryCreateWithoutStatesInput, CountryUncheckedCreateWithoutStatesInput>
    where?: CountryWhereInput
  }

  export type CountryUpdateToOneWithWhereWithoutStatesInput = {
    where?: CountryWhereInput
    data: XOR<CountryUpdateWithoutStatesInput, CountryUncheckedUpdateWithoutStatesInput>
  }

  export type CountryUpdateWithoutStatesInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: CurrencyUpdateOneWithoutCountriesNestedInput
    phoneCodes?: DialingCodeUpdateManyWithoutCountryNestedInput
    timezones?: CountryTimezoneUpdateManyWithoutCountryNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutStatesInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCodes?: DialingCodeUncheckedUpdateManyWithoutCountryNestedInput
    timezones?: CountryTimezoneUncheckedUpdateManyWithoutCountryNestedInput
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type CityUpsertWithWhereUniqueWithoutStateInput = {
    where: CityWhereUniqueInput
    update: XOR<CityUpdateWithoutStateInput, CityUncheckedUpdateWithoutStateInput>
    create: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput>
  }

  export type CityUpdateWithWhereUniqueWithoutStateInput = {
    where: CityWhereUniqueInput
    data: XOR<CityUpdateWithoutStateInput, CityUncheckedUpdateWithoutStateInput>
  }

  export type CityUpdateManyWithWhereWithoutStateInput = {
    where: CityScalarWhereInput
    data: XOR<CityUpdateManyMutationInput, CityUncheckedUpdateManyWithoutStateInput>
  }

  export type CurrencyUpsertWithoutStatesInput = {
    update: XOR<CurrencyUpdateWithoutStatesInput, CurrencyUncheckedUpdateWithoutStatesInput>
    create: XOR<CurrencyCreateWithoutStatesInput, CurrencyUncheckedCreateWithoutStatesInput>
    where?: CurrencyWhereInput
  }

  export type CurrencyUpdateToOneWithWhereWithoutStatesInput = {
    where?: CurrencyWhereInput
    data: XOR<CurrencyUpdateWithoutStatesInput, CurrencyUncheckedUpdateWithoutStatesInput>
  }

  export type CurrencyUpdateWithoutStatesInput = {
    code?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    symbol?: StringFieldUpdateOperationsInput | string
    decimalPlaces?: IntFieldUpdateOperationsInput | number
    countries?: CountryUpdateManyWithoutCurrencyNestedInput
  }

  export type CurrencyUncheckedUpdateWithoutStatesInput = {
    code?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    symbol?: StringFieldUpdateOperationsInput | string
    decimalPlaces?: IntFieldUpdateOperationsInput | number
    countries?: CountryUncheckedUpdateManyWithoutCurrencyNestedInput
  }

  export type DialingCodeUpsertWithoutStatesInput = {
    update: XOR<DialingCodeUpdateWithoutStatesInput, DialingCodeUncheckedUpdateWithoutStatesInput>
    create: XOR<DialingCodeCreateWithoutStatesInput, DialingCodeUncheckedCreateWithoutStatesInput>
    where?: DialingCodeWhereInput
  }

  export type DialingCodeUpdateToOneWithWhereWithoutStatesInput = {
    where?: DialingCodeWhereInput
    data: XOR<DialingCodeUpdateWithoutStatesInput, DialingCodeUncheckedUpdateWithoutStatesInput>
  }

  export type DialingCodeUpdateWithoutStatesInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
    country?: CountryUpdateOneRequiredWithoutPhoneCodesNestedInput
  }

  export type DialingCodeUncheckedUpdateWithoutStatesInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
  }

  export type StateTimezoneUpsertWithWhereUniqueWithoutStateInput = {
    where: StateTimezoneWhereUniqueInput
    update: XOR<StateTimezoneUpdateWithoutStateInput, StateTimezoneUncheckedUpdateWithoutStateInput>
    create: XOR<StateTimezoneCreateWithoutStateInput, StateTimezoneUncheckedCreateWithoutStateInput>
  }

  export type StateTimezoneUpdateWithWhereUniqueWithoutStateInput = {
    where: StateTimezoneWhereUniqueInput
    data: XOR<StateTimezoneUpdateWithoutStateInput, StateTimezoneUncheckedUpdateWithoutStateInput>
  }

  export type StateTimezoneUpdateManyWithWhereWithoutStateInput = {
    where: StateTimezoneScalarWhereInput
    data: XOR<StateTimezoneUpdateManyMutationInput, StateTimezoneUncheckedUpdateManyWithoutStateInput>
  }

  export type StateTimezoneScalarWhereInput = {
    AND?: StateTimezoneScalarWhereInput | StateTimezoneScalarWhereInput[]
    OR?: StateTimezoneScalarWhereInput[]
    NOT?: StateTimezoneScalarWhereInput | StateTimezoneScalarWhereInput[]
    stateId?: IntFilter<"StateTimezone"> | number
    timezoneId?: StringFilter<"StateTimezone"> | string
  }

  export type StateCreateWithoutCitiesInput = {
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    country: CountryCreateNestedOneWithoutStatesInput
    currency?: CurrencyCreateNestedOneWithoutStatesInput
    dialingCode?: DialingCodeCreateNestedOneWithoutStatesInput
    timezones?: StateTimezoneCreateNestedManyWithoutStateInput
  }

  export type StateUncheckedCreateWithoutCitiesInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    countryCode: string
    currencyCode?: string | null
    phoneCode?: string | null
    timezones?: StateTimezoneUncheckedCreateNestedManyWithoutStateInput
  }

  export type StateCreateOrConnectWithoutCitiesInput = {
    where: StateWhereUniqueInput
    create: XOR<StateCreateWithoutCitiesInput, StateUncheckedCreateWithoutCitiesInput>
  }

  export type CountryCreateWithoutCitiesInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currency?: CurrencyCreateNestedOneWithoutCountriesInput
    phoneCodes?: DialingCodeCreateNestedManyWithoutCountryInput
    timezones?: CountryTimezoneCreateNestedManyWithoutCountryInput
    states?: StateCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutCitiesInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currencyCode?: string | null
    phoneCodes?: DialingCodeUncheckedCreateNestedManyWithoutCountryInput
    timezones?: CountryTimezoneUncheckedCreateNestedManyWithoutCountryInput
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutCitiesInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutCitiesInput, CountryUncheckedCreateWithoutCitiesInput>
  }

  export type TimezoneCreateWithoutCitiesInput = {
    name: string
    offset: string
    offsetMinutes: number
    stateTimezones?: StateTimezoneCreateNestedManyWithoutTimezoneInput
    countryTimezones?: CountryTimezoneCreateNestedManyWithoutTimezoneInput
  }

  export type TimezoneUncheckedCreateWithoutCitiesInput = {
    name: string
    offset: string
    offsetMinutes: number
    stateTimezones?: StateTimezoneUncheckedCreateNestedManyWithoutTimezoneInput
    countryTimezones?: CountryTimezoneUncheckedCreateNestedManyWithoutTimezoneInput
  }

  export type TimezoneCreateOrConnectWithoutCitiesInput = {
    where: TimezoneWhereUniqueInput
    create: XOR<TimezoneCreateWithoutCitiesInput, TimezoneUncheckedCreateWithoutCitiesInput>
  }

  export type StateUpsertWithoutCitiesInput = {
    update: XOR<StateUpdateWithoutCitiesInput, StateUncheckedUpdateWithoutCitiesInput>
    create: XOR<StateCreateWithoutCitiesInput, StateUncheckedCreateWithoutCitiesInput>
    where?: StateWhereInput
  }

  export type StateUpdateToOneWithWhereWithoutCitiesInput = {
    where?: StateWhereInput
    data: XOR<StateUpdateWithoutCitiesInput, StateUncheckedUpdateWithoutCitiesInput>
  }

  export type StateUpdateWithoutCitiesInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    country?: CountryUpdateOneRequiredWithoutStatesNestedInput
    currency?: CurrencyUpdateOneWithoutStatesNestedInput
    dialingCode?: DialingCodeUpdateOneWithoutStatesNestedInput
    timezones?: StateTimezoneUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateWithoutCitiesInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCode?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: StateTimezoneUncheckedUpdateManyWithoutStateNestedInput
  }

  export type CountryUpsertWithoutCitiesInput = {
    update: XOR<CountryUpdateWithoutCitiesInput, CountryUncheckedUpdateWithoutCitiesInput>
    create: XOR<CountryCreateWithoutCitiesInput, CountryUncheckedCreateWithoutCitiesInput>
    where?: CountryWhereInput
  }

  export type CountryUpdateToOneWithWhereWithoutCitiesInput = {
    where?: CountryWhereInput
    data: XOR<CountryUpdateWithoutCitiesInput, CountryUncheckedUpdateWithoutCitiesInput>
  }

  export type CountryUpdateWithoutCitiesInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: CurrencyUpdateOneWithoutCountriesNestedInput
    phoneCodes?: DialingCodeUpdateManyWithoutCountryNestedInput
    timezones?: CountryTimezoneUpdateManyWithoutCountryNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutCitiesInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCodes?: DialingCodeUncheckedUpdateManyWithoutCountryNestedInput
    timezones?: CountryTimezoneUncheckedUpdateManyWithoutCountryNestedInput
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type TimezoneUpsertWithoutCitiesInput = {
    update: XOR<TimezoneUpdateWithoutCitiesInput, TimezoneUncheckedUpdateWithoutCitiesInput>
    create: XOR<TimezoneCreateWithoutCitiesInput, TimezoneUncheckedCreateWithoutCitiesInput>
    where?: TimezoneWhereInput
  }

  export type TimezoneUpdateToOneWithWhereWithoutCitiesInput = {
    where?: TimezoneWhereInput
    data: XOR<TimezoneUpdateWithoutCitiesInput, TimezoneUncheckedUpdateWithoutCitiesInput>
  }

  export type TimezoneUpdateWithoutCitiesInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
    stateTimezones?: StateTimezoneUpdateManyWithoutTimezoneNestedInput
    countryTimezones?: CountryTimezoneUpdateManyWithoutTimezoneNestedInput
  }

  export type TimezoneUncheckedUpdateWithoutCitiesInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
    stateTimezones?: StateTimezoneUncheckedUpdateManyWithoutTimezoneNestedInput
    countryTimezones?: CountryTimezoneUncheckedUpdateManyWithoutTimezoneNestedInput
  }

  export type CityCreateWithoutTimezoneInput = {
    name: string
    state?: StateCreateNestedOneWithoutCitiesInput
    country: CountryCreateNestedOneWithoutCitiesInput
  }

  export type CityUncheckedCreateWithoutTimezoneInput = {
    id?: number
    name: string
    stateId?: number | null
    countryCode: string
  }

  export type CityCreateOrConnectWithoutTimezoneInput = {
    where: CityWhereUniqueInput
    create: XOR<CityCreateWithoutTimezoneInput, CityUncheckedCreateWithoutTimezoneInput>
  }

  export type CityCreateManyTimezoneInputEnvelope = {
    data: CityCreateManyTimezoneInput | CityCreateManyTimezoneInput[]
  }

  export type StateTimezoneCreateWithoutTimezoneInput = {
    state: StateCreateNestedOneWithoutTimezonesInput
  }

  export type StateTimezoneUncheckedCreateWithoutTimezoneInput = {
    stateId: number
  }

  export type StateTimezoneCreateOrConnectWithoutTimezoneInput = {
    where: StateTimezoneWhereUniqueInput
    create: XOR<StateTimezoneCreateWithoutTimezoneInput, StateTimezoneUncheckedCreateWithoutTimezoneInput>
  }

  export type StateTimezoneCreateManyTimezoneInputEnvelope = {
    data: StateTimezoneCreateManyTimezoneInput | StateTimezoneCreateManyTimezoneInput[]
  }

  export type CountryTimezoneCreateWithoutTimezoneInput = {
    country: CountryCreateNestedOneWithoutTimezonesInput
  }

  export type CountryTimezoneUncheckedCreateWithoutTimezoneInput = {
    countryCode: string
  }

  export type CountryTimezoneCreateOrConnectWithoutTimezoneInput = {
    where: CountryTimezoneWhereUniqueInput
    create: XOR<CountryTimezoneCreateWithoutTimezoneInput, CountryTimezoneUncheckedCreateWithoutTimezoneInput>
  }

  export type CountryTimezoneCreateManyTimezoneInputEnvelope = {
    data: CountryTimezoneCreateManyTimezoneInput | CountryTimezoneCreateManyTimezoneInput[]
  }

  export type CityUpsertWithWhereUniqueWithoutTimezoneInput = {
    where: CityWhereUniqueInput
    update: XOR<CityUpdateWithoutTimezoneInput, CityUncheckedUpdateWithoutTimezoneInput>
    create: XOR<CityCreateWithoutTimezoneInput, CityUncheckedCreateWithoutTimezoneInput>
  }

  export type CityUpdateWithWhereUniqueWithoutTimezoneInput = {
    where: CityWhereUniqueInput
    data: XOR<CityUpdateWithoutTimezoneInput, CityUncheckedUpdateWithoutTimezoneInput>
  }

  export type CityUpdateManyWithWhereWithoutTimezoneInput = {
    where: CityScalarWhereInput
    data: XOR<CityUpdateManyMutationInput, CityUncheckedUpdateManyWithoutTimezoneInput>
  }

  export type StateTimezoneUpsertWithWhereUniqueWithoutTimezoneInput = {
    where: StateTimezoneWhereUniqueInput
    update: XOR<StateTimezoneUpdateWithoutTimezoneInput, StateTimezoneUncheckedUpdateWithoutTimezoneInput>
    create: XOR<StateTimezoneCreateWithoutTimezoneInput, StateTimezoneUncheckedCreateWithoutTimezoneInput>
  }

  export type StateTimezoneUpdateWithWhereUniqueWithoutTimezoneInput = {
    where: StateTimezoneWhereUniqueInput
    data: XOR<StateTimezoneUpdateWithoutTimezoneInput, StateTimezoneUncheckedUpdateWithoutTimezoneInput>
  }

  export type StateTimezoneUpdateManyWithWhereWithoutTimezoneInput = {
    where: StateTimezoneScalarWhereInput
    data: XOR<StateTimezoneUpdateManyMutationInput, StateTimezoneUncheckedUpdateManyWithoutTimezoneInput>
  }

  export type CountryTimezoneUpsertWithWhereUniqueWithoutTimezoneInput = {
    where: CountryTimezoneWhereUniqueInput
    update: XOR<CountryTimezoneUpdateWithoutTimezoneInput, CountryTimezoneUncheckedUpdateWithoutTimezoneInput>
    create: XOR<CountryTimezoneCreateWithoutTimezoneInput, CountryTimezoneUncheckedCreateWithoutTimezoneInput>
  }

  export type CountryTimezoneUpdateWithWhereUniqueWithoutTimezoneInput = {
    where: CountryTimezoneWhereUniqueInput
    data: XOR<CountryTimezoneUpdateWithoutTimezoneInput, CountryTimezoneUncheckedUpdateWithoutTimezoneInput>
  }

  export type CountryTimezoneUpdateManyWithWhereWithoutTimezoneInput = {
    where: CountryTimezoneScalarWhereInput
    data: XOR<CountryTimezoneUpdateManyMutationInput, CountryTimezoneUncheckedUpdateManyWithoutTimezoneInput>
  }

  export type CountryCreateWithoutTimezonesInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currency?: CurrencyCreateNestedOneWithoutCountriesInput
    phoneCodes?: DialingCodeCreateNestedManyWithoutCountryInput
    states?: StateCreateNestedManyWithoutCountryInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutTimezonesInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currencyCode?: string | null
    phoneCodes?: DialingCodeUncheckedCreateNestedManyWithoutCountryInput
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutTimezonesInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutTimezonesInput, CountryUncheckedCreateWithoutTimezonesInput>
  }

  export type TimezoneCreateWithoutCountryTimezonesInput = {
    name: string
    offset: string
    offsetMinutes: number
    cities?: CityCreateNestedManyWithoutTimezoneInput
    stateTimezones?: StateTimezoneCreateNestedManyWithoutTimezoneInput
  }

  export type TimezoneUncheckedCreateWithoutCountryTimezonesInput = {
    name: string
    offset: string
    offsetMinutes: number
    cities?: CityUncheckedCreateNestedManyWithoutTimezoneInput
    stateTimezones?: StateTimezoneUncheckedCreateNestedManyWithoutTimezoneInput
  }

  export type TimezoneCreateOrConnectWithoutCountryTimezonesInput = {
    where: TimezoneWhereUniqueInput
    create: XOR<TimezoneCreateWithoutCountryTimezonesInput, TimezoneUncheckedCreateWithoutCountryTimezonesInput>
  }

  export type CountryUpsertWithoutTimezonesInput = {
    update: XOR<CountryUpdateWithoutTimezonesInput, CountryUncheckedUpdateWithoutTimezonesInput>
    create: XOR<CountryCreateWithoutTimezonesInput, CountryUncheckedCreateWithoutTimezonesInput>
    where?: CountryWhereInput
  }

  export type CountryUpdateToOneWithWhereWithoutTimezonesInput = {
    where?: CountryWhereInput
    data: XOR<CountryUpdateWithoutTimezonesInput, CountryUncheckedUpdateWithoutTimezonesInput>
  }

  export type CountryUpdateWithoutTimezonesInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: CurrencyUpdateOneWithoutCountriesNestedInput
    phoneCodes?: DialingCodeUpdateManyWithoutCountryNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutTimezonesInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCodes?: DialingCodeUncheckedUpdateManyWithoutCountryNestedInput
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type TimezoneUpsertWithoutCountryTimezonesInput = {
    update: XOR<TimezoneUpdateWithoutCountryTimezonesInput, TimezoneUncheckedUpdateWithoutCountryTimezonesInput>
    create: XOR<TimezoneCreateWithoutCountryTimezonesInput, TimezoneUncheckedCreateWithoutCountryTimezonesInput>
    where?: TimezoneWhereInput
  }

  export type TimezoneUpdateToOneWithWhereWithoutCountryTimezonesInput = {
    where?: TimezoneWhereInput
    data: XOR<TimezoneUpdateWithoutCountryTimezonesInput, TimezoneUncheckedUpdateWithoutCountryTimezonesInput>
  }

  export type TimezoneUpdateWithoutCountryTimezonesInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
    cities?: CityUpdateManyWithoutTimezoneNestedInput
    stateTimezones?: StateTimezoneUpdateManyWithoutTimezoneNestedInput
  }

  export type TimezoneUncheckedUpdateWithoutCountryTimezonesInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
    cities?: CityUncheckedUpdateManyWithoutTimezoneNestedInput
    stateTimezones?: StateTimezoneUncheckedUpdateManyWithoutTimezoneNestedInput
  }

  export type StateCreateWithoutTimezonesInput = {
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    country: CountryCreateNestedOneWithoutStatesInput
    cities?: CityCreateNestedManyWithoutStateInput
    currency?: CurrencyCreateNestedOneWithoutStatesInput
    dialingCode?: DialingCodeCreateNestedOneWithoutStatesInput
  }

  export type StateUncheckedCreateWithoutTimezonesInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    countryCode: string
    currencyCode?: string | null
    phoneCode?: string | null
    cities?: CityUncheckedCreateNestedManyWithoutStateInput
  }

  export type StateCreateOrConnectWithoutTimezonesInput = {
    where: StateWhereUniqueInput
    create: XOR<StateCreateWithoutTimezonesInput, StateUncheckedCreateWithoutTimezonesInput>
  }

  export type TimezoneCreateWithoutStateTimezonesInput = {
    name: string
    offset: string
    offsetMinutes: number
    cities?: CityCreateNestedManyWithoutTimezoneInput
    countryTimezones?: CountryTimezoneCreateNestedManyWithoutTimezoneInput
  }

  export type TimezoneUncheckedCreateWithoutStateTimezonesInput = {
    name: string
    offset: string
    offsetMinutes: number
    cities?: CityUncheckedCreateNestedManyWithoutTimezoneInput
    countryTimezones?: CountryTimezoneUncheckedCreateNestedManyWithoutTimezoneInput
  }

  export type TimezoneCreateOrConnectWithoutStateTimezonesInput = {
    where: TimezoneWhereUniqueInput
    create: XOR<TimezoneCreateWithoutStateTimezonesInput, TimezoneUncheckedCreateWithoutStateTimezonesInput>
  }

  export type StateUpsertWithoutTimezonesInput = {
    update: XOR<StateUpdateWithoutTimezonesInput, StateUncheckedUpdateWithoutTimezonesInput>
    create: XOR<StateCreateWithoutTimezonesInput, StateUncheckedCreateWithoutTimezonesInput>
    where?: StateWhereInput
  }

  export type StateUpdateToOneWithWhereWithoutTimezonesInput = {
    where?: StateWhereInput
    data: XOR<StateUpdateWithoutTimezonesInput, StateUncheckedUpdateWithoutTimezonesInput>
  }

  export type StateUpdateWithoutTimezonesInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    country?: CountryUpdateOneRequiredWithoutStatesNestedInput
    cities?: CityUpdateManyWithoutStateNestedInput
    currency?: CurrencyUpdateOneWithoutStatesNestedInput
    dialingCode?: DialingCodeUpdateOneWithoutStatesNestedInput
  }

  export type StateUncheckedUpdateWithoutTimezonesInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCode?: NullableStringFieldUpdateOperationsInput | string | null
    cities?: CityUncheckedUpdateManyWithoutStateNestedInput
  }

  export type TimezoneUpsertWithoutStateTimezonesInput = {
    update: XOR<TimezoneUpdateWithoutStateTimezonesInput, TimezoneUncheckedUpdateWithoutStateTimezonesInput>
    create: XOR<TimezoneCreateWithoutStateTimezonesInput, TimezoneUncheckedCreateWithoutStateTimezonesInput>
    where?: TimezoneWhereInput
  }

  export type TimezoneUpdateToOneWithWhereWithoutStateTimezonesInput = {
    where?: TimezoneWhereInput
    data: XOR<TimezoneUpdateWithoutStateTimezonesInput, TimezoneUncheckedUpdateWithoutStateTimezonesInput>
  }

  export type TimezoneUpdateWithoutStateTimezonesInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
    cities?: CityUpdateManyWithoutTimezoneNestedInput
    countryTimezones?: CountryTimezoneUpdateManyWithoutTimezoneNestedInput
  }

  export type TimezoneUncheckedUpdateWithoutStateTimezonesInput = {
    name?: StringFieldUpdateOperationsInput | string
    offset?: StringFieldUpdateOperationsInput | string
    offsetMinutes?: IntFieldUpdateOperationsInput | number
    cities?: CityUncheckedUpdateManyWithoutTimezoneNestedInput
    countryTimezones?: CountryTimezoneUncheckedUpdateManyWithoutTimezoneNestedInput
  }

  export type CountryCreateWithoutCurrencyInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    phoneCodes?: DialingCodeCreateNestedManyWithoutCountryInput
    timezones?: CountryTimezoneCreateNestedManyWithoutCountryInput
    states?: StateCreateNestedManyWithoutCountryInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutCurrencyInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    phoneCodes?: DialingCodeUncheckedCreateNestedManyWithoutCountryInput
    timezones?: CountryTimezoneUncheckedCreateNestedManyWithoutCountryInput
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutCurrencyInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutCurrencyInput, CountryUncheckedCreateWithoutCurrencyInput>
  }

  export type CountryCreateManyCurrencyInputEnvelope = {
    data: CountryCreateManyCurrencyInput | CountryCreateManyCurrencyInput[]
  }

  export type StateCreateWithoutCurrencyInput = {
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    country: CountryCreateNestedOneWithoutStatesInput
    cities?: CityCreateNestedManyWithoutStateInput
    dialingCode?: DialingCodeCreateNestedOneWithoutStatesInput
    timezones?: StateTimezoneCreateNestedManyWithoutStateInput
  }

  export type StateUncheckedCreateWithoutCurrencyInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    countryCode: string
    phoneCode?: string | null
    cities?: CityUncheckedCreateNestedManyWithoutStateInput
    timezones?: StateTimezoneUncheckedCreateNestedManyWithoutStateInput
  }

  export type StateCreateOrConnectWithoutCurrencyInput = {
    where: StateWhereUniqueInput
    create: XOR<StateCreateWithoutCurrencyInput, StateUncheckedCreateWithoutCurrencyInput>
  }

  export type StateCreateManyCurrencyInputEnvelope = {
    data: StateCreateManyCurrencyInput | StateCreateManyCurrencyInput[]
  }

  export type CountryUpsertWithWhereUniqueWithoutCurrencyInput = {
    where: CountryWhereUniqueInput
    update: XOR<CountryUpdateWithoutCurrencyInput, CountryUncheckedUpdateWithoutCurrencyInput>
    create: XOR<CountryCreateWithoutCurrencyInput, CountryUncheckedCreateWithoutCurrencyInput>
  }

  export type CountryUpdateWithWhereUniqueWithoutCurrencyInput = {
    where: CountryWhereUniqueInput
    data: XOR<CountryUpdateWithoutCurrencyInput, CountryUncheckedUpdateWithoutCurrencyInput>
  }

  export type CountryUpdateManyWithWhereWithoutCurrencyInput = {
    where: CountryScalarWhereInput
    data: XOR<CountryUpdateManyMutationInput, CountryUncheckedUpdateManyWithoutCurrencyInput>
  }

  export type CountryScalarWhereInput = {
    AND?: CountryScalarWhereInput | CountryScalarWhereInput[]
    OR?: CountryScalarWhereInput[]
    NOT?: CountryScalarWhereInput | CountryScalarWhereInput[]
    code?: StringFilter<"Country"> | string
    iso3?: StringFilter<"Country"> | string
    name?: StringFilter<"Country"> | string
    flagEmoji?: StringNullableFilter<"Country"> | string | null
    currencyCode?: StringNullableFilter<"Country"> | string | null
  }

  export type StateUpsertWithWhereUniqueWithoutCurrencyInput = {
    where: StateWhereUniqueInput
    update: XOR<StateUpdateWithoutCurrencyInput, StateUncheckedUpdateWithoutCurrencyInput>
    create: XOR<StateCreateWithoutCurrencyInput, StateUncheckedCreateWithoutCurrencyInput>
  }

  export type StateUpdateWithWhereUniqueWithoutCurrencyInput = {
    where: StateWhereUniqueInput
    data: XOR<StateUpdateWithoutCurrencyInput, StateUncheckedUpdateWithoutCurrencyInput>
  }

  export type StateUpdateManyWithWhereWithoutCurrencyInput = {
    where: StateScalarWhereInput
    data: XOR<StateUpdateManyMutationInput, StateUncheckedUpdateManyWithoutCurrencyInput>
  }

  export type CountryCreateWithoutPhoneCodesInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currency?: CurrencyCreateNestedOneWithoutCountriesInput
    timezones?: CountryTimezoneCreateNestedManyWithoutCountryInput
    states?: StateCreateNestedManyWithoutCountryInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutPhoneCodesInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
    currencyCode?: string | null
    timezones?: CountryTimezoneUncheckedCreateNestedManyWithoutCountryInput
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutPhoneCodesInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutPhoneCodesInput, CountryUncheckedCreateWithoutPhoneCodesInput>
  }

  export type StateCreateWithoutDialingCodeInput = {
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    country: CountryCreateNestedOneWithoutStatesInput
    cities?: CityCreateNestedManyWithoutStateInput
    currency?: CurrencyCreateNestedOneWithoutStatesInput
    timezones?: StateTimezoneCreateNestedManyWithoutStateInput
  }

  export type StateUncheckedCreateWithoutDialingCodeInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    countryCode: string
    currencyCode?: string | null
    cities?: CityUncheckedCreateNestedManyWithoutStateInput
    timezones?: StateTimezoneUncheckedCreateNestedManyWithoutStateInput
  }

  export type StateCreateOrConnectWithoutDialingCodeInput = {
    where: StateWhereUniqueInput
    create: XOR<StateCreateWithoutDialingCodeInput, StateUncheckedCreateWithoutDialingCodeInput>
  }

  export type StateCreateManyDialingCodeInputEnvelope = {
    data: StateCreateManyDialingCodeInput | StateCreateManyDialingCodeInput[]
  }

  export type CountryUpsertWithoutPhoneCodesInput = {
    update: XOR<CountryUpdateWithoutPhoneCodesInput, CountryUncheckedUpdateWithoutPhoneCodesInput>
    create: XOR<CountryCreateWithoutPhoneCodesInput, CountryUncheckedCreateWithoutPhoneCodesInput>
    where?: CountryWhereInput
  }

  export type CountryUpdateToOneWithWhereWithoutPhoneCodesInput = {
    where?: CountryWhereInput
    data: XOR<CountryUpdateWithoutPhoneCodesInput, CountryUncheckedUpdateWithoutPhoneCodesInput>
  }

  export type CountryUpdateWithoutPhoneCodesInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: CurrencyUpdateOneWithoutCountriesNestedInput
    timezones?: CountryTimezoneUpdateManyWithoutCountryNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutPhoneCodesInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: CountryTimezoneUncheckedUpdateManyWithoutCountryNestedInput
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type StateUpsertWithWhereUniqueWithoutDialingCodeInput = {
    where: StateWhereUniqueInput
    update: XOR<StateUpdateWithoutDialingCodeInput, StateUncheckedUpdateWithoutDialingCodeInput>
    create: XOR<StateCreateWithoutDialingCodeInput, StateUncheckedCreateWithoutDialingCodeInput>
  }

  export type StateUpdateWithWhereUniqueWithoutDialingCodeInput = {
    where: StateWhereUniqueInput
    data: XOR<StateUpdateWithoutDialingCodeInput, StateUncheckedUpdateWithoutDialingCodeInput>
  }

  export type StateUpdateManyWithWhereWithoutDialingCodeInput = {
    where: StateScalarWhereInput
    data: XOR<StateUpdateManyMutationInput, StateUncheckedUpdateManyWithoutDialingCodeInput>
  }

  export type DialingCodeCreateManyCountryInput = {
    code: string
    root: string
    suffix: string
    example?: string | null
  }

  export type CountryTimezoneCreateManyCountryInput = {
    timezoneId: string
  }

  export type StateCreateManyCountryInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    currencyCode?: string | null
    phoneCode?: string | null
  }

  export type CityCreateManyCountryInput = {
    id?: number
    name: string
    stateId?: number | null
    timezoneId?: string | null
  }

  export type DialingCodeUpdateWithoutCountryInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
    states?: StateUpdateManyWithoutDialingCodeNestedInput
  }

  export type DialingCodeUncheckedUpdateWithoutCountryInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
    states?: StateUncheckedUpdateManyWithoutDialingCodeNestedInput
  }

  export type DialingCodeUncheckedUpdateManyWithoutCountryInput = {
    code?: StringFieldUpdateOperationsInput | string
    root?: StringFieldUpdateOperationsInput | string
    suffix?: StringFieldUpdateOperationsInput | string
    example?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type CountryTimezoneUpdateWithoutCountryInput = {
    timezone?: TimezoneUpdateOneRequiredWithoutCountryTimezonesNestedInput
  }

  export type CountryTimezoneUncheckedUpdateWithoutCountryInput = {
    timezoneId?: StringFieldUpdateOperationsInput | string
  }

  export type CountryTimezoneUncheckedUpdateManyWithoutCountryInput = {
    timezoneId?: StringFieldUpdateOperationsInput | string
  }

  export type StateUpdateWithoutCountryInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    cities?: CityUpdateManyWithoutStateNestedInput
    currency?: CurrencyUpdateOneWithoutStatesNestedInput
    dialingCode?: DialingCodeUpdateOneWithoutStatesNestedInput
    timezones?: StateTimezoneUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateWithoutCountryInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCode?: NullableStringFieldUpdateOperationsInput | string | null
    cities?: CityUncheckedUpdateManyWithoutStateNestedInput
    timezones?: StateTimezoneUncheckedUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateManyWithoutCountryInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCode?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type CityUpdateWithoutCountryInput = {
    name?: StringFieldUpdateOperationsInput | string
    state?: StateUpdateOneWithoutCitiesNestedInput
    timezone?: TimezoneUpdateOneWithoutCitiesNestedInput
  }

  export type CityUncheckedUpdateWithoutCountryInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    stateId?: NullableIntFieldUpdateOperationsInput | number | null
    timezoneId?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type CityUncheckedUpdateManyWithoutCountryInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    stateId?: NullableIntFieldUpdateOperationsInput | number | null
    timezoneId?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type CityCreateManyStateInput = {
    id?: number
    name: string
    countryCode: string
    timezoneId?: string | null
  }

  export type StateTimezoneCreateManyStateInput = {
    timezoneId: string
  }

  export type CityUpdateWithoutStateInput = {
    name?: StringFieldUpdateOperationsInput | string
    country?: CountryUpdateOneRequiredWithoutCitiesNestedInput
    timezone?: TimezoneUpdateOneWithoutCitiesNestedInput
  }

  export type CityUncheckedUpdateWithoutStateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    countryCode?: StringFieldUpdateOperationsInput | string
    timezoneId?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type CityUncheckedUpdateManyWithoutStateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    countryCode?: StringFieldUpdateOperationsInput | string
    timezoneId?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type StateTimezoneUpdateWithoutStateInput = {
    timezone?: TimezoneUpdateOneRequiredWithoutStateTimezonesNestedInput
  }

  export type StateTimezoneUncheckedUpdateWithoutStateInput = {
    timezoneId?: StringFieldUpdateOperationsInput | string
  }

  export type StateTimezoneUncheckedUpdateManyWithoutStateInput = {
    timezoneId?: StringFieldUpdateOperationsInput | string
  }

  export type CityCreateManyTimezoneInput = {
    id?: number
    name: string
    stateId?: number | null
    countryCode: string
  }

  export type StateTimezoneCreateManyTimezoneInput = {
    stateId: number
  }

  export type CountryTimezoneCreateManyTimezoneInput = {
    countryCode: string
  }

  export type CityUpdateWithoutTimezoneInput = {
    name?: StringFieldUpdateOperationsInput | string
    state?: StateUpdateOneWithoutCitiesNestedInput
    country?: CountryUpdateOneRequiredWithoutCitiesNestedInput
  }

  export type CityUncheckedUpdateWithoutTimezoneInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    stateId?: NullableIntFieldUpdateOperationsInput | number | null
    countryCode?: StringFieldUpdateOperationsInput | string
  }

  export type CityUncheckedUpdateManyWithoutTimezoneInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    stateId?: NullableIntFieldUpdateOperationsInput | number | null
    countryCode?: StringFieldUpdateOperationsInput | string
  }

  export type StateTimezoneUpdateWithoutTimezoneInput = {
    state?: StateUpdateOneRequiredWithoutTimezonesNestedInput
  }

  export type StateTimezoneUncheckedUpdateWithoutTimezoneInput = {
    stateId?: IntFieldUpdateOperationsInput | number
  }

  export type StateTimezoneUncheckedUpdateManyWithoutTimezoneInput = {
    stateId?: IntFieldUpdateOperationsInput | number
  }

  export type CountryTimezoneUpdateWithoutTimezoneInput = {
    country?: CountryUpdateOneRequiredWithoutTimezonesNestedInput
  }

  export type CountryTimezoneUncheckedUpdateWithoutTimezoneInput = {
    countryCode?: StringFieldUpdateOperationsInput | string
  }

  export type CountryTimezoneUncheckedUpdateManyWithoutTimezoneInput = {
    countryCode?: StringFieldUpdateOperationsInput | string
  }

  export type CountryCreateManyCurrencyInput = {
    code: string
    iso3: string
    name: string
    flagEmoji?: string | null
  }

  export type StateCreateManyCurrencyInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    countryCode: string
    phoneCode?: string | null
  }

  export type CountryUpdateWithoutCurrencyInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCodes?: DialingCodeUpdateManyWithoutCountryNestedInput
    timezones?: CountryTimezoneUpdateManyWithoutCountryNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutCurrencyInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    phoneCodes?: DialingCodeUncheckedUpdateManyWithoutCountryNestedInput
    timezones?: CountryTimezoneUncheckedUpdateManyWithoutCountryNestedInput
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateManyWithoutCurrencyInput = {
    code?: StringFieldUpdateOperationsInput | string
    iso3?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type StateUpdateWithoutCurrencyInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    country?: CountryUpdateOneRequiredWithoutStatesNestedInput
    cities?: CityUpdateManyWithoutStateNestedInput
    dialingCode?: DialingCodeUpdateOneWithoutStatesNestedInput
    timezones?: StateTimezoneUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateWithoutCurrencyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    phoneCode?: NullableStringFieldUpdateOperationsInput | string | null
    cities?: CityUncheckedUpdateManyWithoutStateNestedInput
    timezones?: StateTimezoneUncheckedUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateManyWithoutCurrencyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    phoneCode?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type StateCreateManyDialingCodeInput = {
    id?: number
    name: string
    iso2?: string | null
    iso3?: string | null
    flagEmoji?: string | null
    countryCode: string
    currencyCode?: string | null
  }

  export type StateUpdateWithoutDialingCodeInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    country?: CountryUpdateOneRequiredWithoutStatesNestedInput
    cities?: CityUpdateManyWithoutStateNestedInput
    currency?: CurrencyUpdateOneWithoutStatesNestedInput
    timezones?: StateTimezoneUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateWithoutDialingCodeInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
    cities?: CityUncheckedUpdateManyWithoutStateNestedInput
    timezones?: StateTimezoneUncheckedUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateManyWithoutDialingCodeInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    flagEmoji?: NullableStringFieldUpdateOperationsInput | string | null
    countryCode?: StringFieldUpdateOperationsInput | string
    currencyCode?: NullableStringFieldUpdateOperationsInput | string | null
  }



  /**
   * Batch Payload for updateMany & deleteMany & createMany
   */

  export type BatchPayload = {
    count: number
  }

  /**
   * DMMF
   */
  export const dmmf: runtime.BaseDMMF
}