import type { Brand } from "effect/Brand"; import * as DateTime from "effect/DateTime"; import type { Input } from "effect/Duration"; import * as Effect from "effect/Effect"; import * as Option from "effect/Option"; import * as Schema from "effect/Schema"; import type { Scope } from "effect/Scope"; import * as VariantSchema from "effect/unstable/schema/VariantSchema"; import { SqlClient } from "effect/unstable/sql/SqlClient"; import { type DbSystem } from "../../otel.js"; declare const Class: (identifier: string) => (fields: Fields & VariantSchema.Struct.Validate, annotations?: Schema.Annotations.Declaration>]> | undefined) => [Self] extends [never] ? "Missing `Self` generic - use `class Self extends Class()({ ... })`" : VariantSchema.Class>> & { readonly insert: Schema.Struct extends infer T ? { [K in keyof T]: T[K]; } : never>; readonly json: Schema.Struct extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>; readonly jsonCreate: Schema.Struct extends infer T_2 ? { [K in keyof T_2]: T_2[K]; } : never>; readonly jsonUpdate: Schema.Struct extends infer T_3 ? { [K in keyof T_3]: T_3[K]; } : never>; readonly select: Schema.Struct extends infer T_4 ? { [K in keyof T_4]: T_4[K]; } : never>; readonly update: Schema.Struct extends infer T_5 ? { [K in keyof T_5]: T_5[K]; } : never>; }, Field: >(config: A & { readonly [K in Exclude]: never; }) => VariantSchema.Field, FieldExcept: >(keys: Keys) => (schema: S) => VariantSchema.Field<{ readonly [K in Exclude<"insert", Keys[number]> | Exclude<"json", Keys[number]> | Exclude<"jsonCreate", Keys[number]> | Exclude<"jsonUpdate", Keys[number]> | Exclude<"select", Keys[number]> | Exclude<"update", Keys[number]>]: S; }>, FieldOnly: >(keys: Keys) => (schema: S) => VariantSchema.Field<{ readonly [K in Keys[number]]: S; }>, Struct: (fields: A & VariantSchema.Struct.Validate) => VariantSchema.Struct, Union: >>(members: Members) => VariantSchema.Union & VariantSchema.Union.Variants, extract: { (variant: V): >(self: A) => VariantSchema.Extract; >(self: A, variant: V): VariantSchema.Extract; }, fieldEvolve: { | Schema.Top, const Mapping extends (Self extends VariantSchema.Field ? { readonly [K in keyof S]?: (variant: S[K]) => Schema.Top; } : { readonly [K in "insert" | "json" | "jsonCreate" | "jsonUpdate" | "select" | "update"]?: (variant: Self) => Schema.Top; })>(f: Mapping): (self: Self) => VariantSchema.Field ? { readonly [K in keyof S]: K extends keyof Mapping ? Mapping[K] extends (arg: any) => any ? ReturnType : S[K] : S[K]; } : { readonly insert: "insert" extends infer T ? T extends "insert" ? T extends keyof Mapping ? Mapping[T] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly json: "json" extends infer T_1 ? T_1 extends "json" ? T_1 extends keyof Mapping ? Mapping[T_1] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly jsonCreate: "jsonCreate" extends infer T_2 ? T_2 extends "jsonCreate" ? T_2 extends keyof Mapping ? Mapping[T_2] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly jsonUpdate: "jsonUpdate" extends infer T_3 ? T_3 extends "jsonUpdate" ? T_3 extends keyof Mapping ? Mapping[T_3] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly select: "select" extends infer T_4 ? T_4 extends "select" ? T_4 extends keyof Mapping ? Mapping[T_4] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly update: "update" extends infer T_5 ? T_5 extends "update" ? T_5 extends keyof Mapping ? Mapping[T_5] extends (arg: any) => any ? ReturnType : Self : Self : never : never; }>; | Schema.Top, const Mapping_1 extends (Self extends VariantSchema.Field ? { readonly [K in keyof S]?: (variant: S[K]) => Schema.Top; } : { readonly [K in "insert" | "json" | "jsonCreate" | "jsonUpdate" | "select" | "update"]?: (variant: Self) => Schema.Top; })>(self: Self, f: Mapping_1): VariantSchema.Field ? { readonly [K in keyof S]: K extends keyof Mapping_1 ? Mapping_1[K] extends (arg: any) => any ? ReturnType : S[K] : S[K]; } : { readonly insert: "insert" extends infer T ? T extends "insert" ? T extends keyof Mapping_1 ? Mapping_1[T] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly json: "json" extends infer T_1 ? T_1 extends "json" ? T_1 extends keyof Mapping_1 ? Mapping_1[T_1] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly jsonCreate: "jsonCreate" extends infer T_2 ? T_2 extends "jsonCreate" ? T_2 extends keyof Mapping_1 ? Mapping_1[T_2] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly jsonUpdate: "jsonUpdate" extends infer T_3 ? T_3 extends "jsonUpdate" ? T_3 extends keyof Mapping_1 ? Mapping_1[T_3] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly select: "select" extends infer T_4 ? T_4 extends "select" ? T_4 extends keyof Mapping_1 ? Mapping_1[T_4] extends (arg: any) => any ? ReturnType : Self : Self : never : never; readonly update: "update" extends infer T_5 ? T_5 extends "update" ? T_5 extends keyof Mapping_1 ? Mapping_1[T_5] extends (arg: any) => any ? ReturnType : Self : Self : never : never; }>; }; /** * @since 1.0.0 * @category models */ export type Any = Schema.Top & { readonly fields: Schema.Struct.Fields; readonly insert: Schema.Top; readonly update: Schema.Top; readonly json: Schema.Top; readonly jsonCreate: Schema.Top; readonly jsonUpdate: Schema.Top; }; /** * @since 1.0.0 * @category models */ export type VariantsDatabase = "select" | "insert" | "update"; /** * @since 1.0.0 * @category models */ export type VariantsJson = "json" | "jsonCreate" | "jsonUpdate"; export { /** * A base class used for creating domain model schemas. * * It supports common variants for database and JSON apis. * * @since 1.0.0 * @category constructors * @example * import * as Schema from "effect/Schema" * import { Model } from "effect/unstable/schema" * * export const GroupId = Schema.Number.pipe(Schema.brand("GroupId")) * * export class Group extends Model.Class("Group")({ * id: Model.Generated(GroupId), * name: Schema.String, * createdAt: Model.DateTimeInsertFromDate, * updatedAt: Model.DateTimeUpdateFromDate * }) {} * * // schema used for selects * Group * * // schema used for inserts * Group.insert * * // schema used for updates * Group.update * * // schema used for json api * Group.json * Group.jsonCreate * Group.jsonUpdate * * // you can also turn them into classes * class GroupJson extends Schema.Class("GroupJson")(Group.json) { * get upperName() { * return this.name.toUpperCase() * } * } */ Class, /** * @since 1.0.0 * @category extraction */ extract, /** * @since 1.0.0 * @category fields */ Field, /** * @since 1.0.0 * @category fields */ fieldEvolve, /** * @since 1.0.0 * @category fields */ FieldExcept, /** * @since 1.0.0 * @category fields */ FieldOnly, /** * @since 1.0.0 * @category constructors */ Struct, /** * @since 1.0.0 * @category constructors */ Union }; /** * @since 1.0.0 * @category fields */ export declare const fields: >(self: A) => A[typeof VariantSchema.TypeId]; /** * @since 1.0.0 * @category overrideable */ export declare const Override: (value: A) => A & Brand<"Override">; /** * @since 1.0.0 * @category generated */ export interface Generated extends VariantSchema.Field<{ readonly select: S; readonly update: S; readonly json: S; }> { } /** * A field that represents a column that is generated by the database. * * It is available for selection and update, but not for insertion. * * @since 1.0.0 * @category generated */ export declare const Generated: (schema: S) => Generated; /** * @since 1.0.0 * @category generated */ export interface GeneratedByApp extends VariantSchema.Field<{ readonly select: S; readonly insert: S; readonly update: S; readonly json: S; }> { } /** * A field that represents a column that is generated by the application. * * It is required by the database, but not by the JSON variants. * * @since 1.0.0 * @category generated */ export declare const GeneratedByApp: (schema: S) => GeneratedByApp; /** * @since 1.0.0 * @category sensitive */ export interface Sensitive extends VariantSchema.Field<{ readonly select: S; readonly insert: S; readonly update: S; }> { } /** * A field that represents a sensitive value that should not be exposed in the * JSON variants. * * @since 1.0.0 * @category sensitive */ export declare const Sensitive: (schema: S) => Sensitive; /** * @since 1.0.0 * @category optional */ export interface optionalOption extends Schema.decodeTo>, Schema.optionalKey>> { } /** * @since 1.0.0 * @category optional */ export declare const optionalOption: (schema: S) => optionalOption; /** * Convert a field to one that is optional for all variants. * * For the database variants, it will accept `null`able values. * For the JSON variants, it will also accept missing keys. * * @since 1.0.0 * @category optional */ export interface FieldOption extends VariantSchema.Field<{ readonly select: Schema.OptionFromNullOr; readonly insert: Schema.OptionFromNullOr; readonly update: Schema.OptionFromNullOr; readonly json: optionalOption; readonly jsonCreate: optionalOption; readonly jsonUpdate: optionalOption; }> { } /** * Convert a field to one that is optional for all variants. * * For the database variants, it will accept `null`able values. * For the JSON variants, it will also accept missing keys. * * @since 1.0.0 * @category optional */ export declare const FieldOption: | Schema.Top>(self: Field) => Field extends Schema.Top ? FieldOption : Field extends VariantSchema.Field ? VariantSchema.Field<{ readonly [K in keyof S]: S[K] extends Schema.Top ? K extends VariantsDatabase ? Schema.OptionFromNullOr : optionalOption : never; }> : never; /** * @since 1.0.0 * @category date & time */ export interface Date extends Schema.decodeTo, Schema.String> { } /** * A schema for a `DateTime.Utc` that is serialized as a date string in the * format `YYYY-MM-DD`. * * @since 1.0.0 * @category date & time */ export declare const Date: Date; /** * @since 1.0.0 * @category date & time */ export declare const DateWithNow: VariantSchema.Overrideable; /** * @since 1.0.0 * @category date & time */ export declare const DateTimeWithNow: VariantSchema.Overrideable; /** * @since 1.0.0 * @category date & time */ export declare const DateTimeFromDateWithNow: VariantSchema.Overrideable; /** * @since 1.0.0 * @category date & time */ export declare const DateTimeFromNumberWithNow: VariantSchema.Overrideable; /** * @since 1.0.0 * @category date & time */ export interface DateTimeInsert extends VariantSchema.Field<{ readonly select: Schema.DateTimeUtcFromString; readonly insert: VariantSchema.Overrideable; readonly json: Schema.DateTimeUtcFromString; }> { } /** * A field that represents a date-time value that is inserted as the current * `DateTime.Utc`. It is serialized as a string for the database. * * It is omitted from updates and is available for selection. * * @since 1.0.0 * @category date & time */ export declare const DateTimeInsert: DateTimeInsert; /** * @since 1.0.0 * @category date & time */ export interface DateTimeInsertFromDate extends VariantSchema.Field<{ readonly select: Schema.DateTimeUtcFromDate; readonly insert: VariantSchema.Overrideable; readonly json: Schema.DateTimeUtcFromString; }> { } /** * A field that represents a date-time value that is inserted as the current * `DateTime.Utc`. It is serialized as a `Date` for the database. * * It is omitted from updates and is available for selection. * * @since 1.0.0 * @category date & time */ export declare const DateTimeInsertFromDate: DateTimeInsertFromDate; /** * @since 1.0.0 * @category date & time */ export interface DateTimeInsertFromNumber extends VariantSchema.Field<{ readonly select: Schema.DateTimeUtcFromMillis; readonly insert: VariantSchema.Overrideable; readonly json: Schema.DateTimeUtcFromMillis; }> { } /** * A field that represents a date-time value that is inserted as the current * `DateTime.Utc`. It is serialized as a `number`. * * It is omitted from updates and is available for selection. * * @since 1.0.0 * @category date & time */ export declare const DateTimeInsertFromNumber: DateTimeInsertFromNumber; /** * @since 1.0.0 * @category date & time */ export interface DateTimeUpdate extends VariantSchema.Field<{ readonly select: Schema.DateTimeUtcFromString; readonly insert: VariantSchema.Overrideable; readonly update: VariantSchema.Overrideable; readonly json: Schema.DateTimeUtcFromString; }> { } /** * A field that represents a date-time value that is updated as the current * `DateTime.Utc`. It is serialized as a string for the database. * * It is set to the current `DateTime.Utc` on updates and inserts and is * available for selection. * * @since 1.0.0 * @category date & time */ export declare const DateTimeUpdate: DateTimeUpdate; /** * @since 1.0.0 * @category date & time */ export interface DateTimeUpdateFromDate extends VariantSchema.Field<{ readonly select: Schema.DateTimeUtcFromDate; readonly insert: VariantSchema.Overrideable; readonly update: VariantSchema.Overrideable; readonly json: Schema.DateTimeUtcFromString; }> { } /** * A field that represents a date-time value that is updated as the current * `DateTime.Utc`. It is serialized as a `Date` for the database. * * It is set to the current `DateTime.Utc` on updates and inserts and is * available for selection. * * @since 1.0.0 * @category date & time */ export declare const DateTimeUpdateFromDate: DateTimeUpdateFromDate; /** * @since 1.0.0 * @category date & time */ export interface DateTimeUpdateFromNumber extends VariantSchema.Field<{ readonly select: Schema.DateTimeUtcFromMillis; readonly insert: VariantSchema.Overrideable; readonly update: VariantSchema.Overrideable; readonly json: Schema.DateTimeUtcFromMillis; }> { } /** * A field that represents a date-time value that is updated as the current * `DateTime.Utc`. It is serialized as a `number`. * * It is set to the current `DateTime.Utc` on updates and inserts and is * available for selection. * * @since 1.0.0 * @category date & time */ export declare const DateTimeUpdateFromNumber: DateTimeUpdateFromNumber; /** * @since 1.0.0 * @category json */ export interface JsonFromString extends VariantSchema.Field<{ readonly select: Schema.fromJsonString>; readonly insert: Schema.fromJsonString>; readonly update: Schema.fromJsonString>; readonly json: S; readonly jsonCreate: S; readonly jsonUpdate: S; }> { } /** * A field that represents a JSON value stored as text in the database. * * The "json" variants will use the object schema directly. * * @since 1.0.0 * @category json */ export declare const JsonFromString: (schema: S) => JsonFromString; /** * Create a simple CRUD repository from a model. * * @since 1.0.0 * @category repository */ export declare const makeRepository: (Model: S, options: { readonly tableName: string; readonly spanPrefix: string; readonly idColumn: Id; readonly versionColumn?: string | undefined; readonly dbSystem?: DbSystem | undefined; }) => Effect.Effect<{ readonly insert: (insert: S["insert"]["Type"]) => Effect.Effect; readonly insertVoid: (insert: S["insert"]["Type"]) => Effect.Effect; readonly update: (update: S["update"]["Type"]) => Effect.Effect; readonly updateVoid: (update: S["update"]["Type"]) => Effect.Effect; readonly findById: (id: S["fields"][Id]["Type"]) => Effect.Effect, Schema.SchemaError, S["DecodingServices"] | S["fields"][Id]["EncodingServices"]>; readonly delete: (id: S["fields"][Id]["Type"]) => Effect.Effect; }, never, SqlClient>; /** * Create some simple data loaders from a model. * * @since 1.0.0 * @category repository */ export declare const makeDataLoaders: (Model: S, options: { readonly tableName: string; readonly spanPrefix: string; readonly idColumn: Id; readonly window: Input; readonly maxBatchSize?: number | undefined; readonly dbSystem?: DbSystem | undefined; }) => Effect.Effect<{ readonly insert: (insert: S["insert"]["Type"]) => Effect.Effect; readonly insertVoid: (insert: S["insert"]["Type"]) => Effect.Effect; readonly findById: (id: S["fields"][Id]["Type"]) => Effect.Effect; readonly delete: (id: S["fields"][Id]["Type"]) => Effect.Effect; }, never, SqlClient | Scope>; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZGFwdGVycy9TUUwvTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFFdkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFHdkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFHdkMsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sS0FBSyxhQUFhLE1BQU0sc0NBQXNDLENBQUE7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBR3pELE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBYyxNQUFNLGVBQWUsQ0FBQTtBQUV6RCxRQUFBLE1BQ0UsS0FBSzs7Ozs7OztHQUNMLEtBQUssMFJBQ0wsV0FBVyw4WkFDWCxTQUFTLDJOQUNULE1BQU0saU1BQ04sS0FBSyxxT0FDTCxPQUFPOzs7R0FDUCxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7OztDQUlYLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUc7SUFDN0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUNyQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUE7SUFDM0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFBO0lBQzNCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQTtJQUN6QixRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUE7SUFDL0IsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFBO0NBQ2hDLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUE7QUFFN0Q7OztHQUdHO0FBQ0gsTUFBTSxNQUFNLFlBQVksR0FBRyxNQUFNLEdBQUcsWUFBWSxHQUFHLFlBQVksQ0FBQTtBQUUvRCxPQUFPO0FBQ0w7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7QUFDSCxLQUFLO0FBQ0w7OztHQUdHO0FBQ0gsT0FBTztBQUNQOzs7R0FHRztBQUNILEtBQUs7QUFDTDs7O0dBR0c7QUFDSCxXQUFXO0FBQ1g7OztHQUdHO0FBQ0gsV0FBVztBQUNYOzs7R0FHRztBQUNILFNBQVM7QUFDVDs7O0dBR0c7QUFDSCxNQUFNO0FBQ047OztHQUdHO0FBQ0gsS0FBSyxFQUNOLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxlQUFPLE1BQU0sTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUM5RSxDQUFBO0FBRXRCOzs7R0FHRztBQUNILGVBQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBMEIsQ0FBQTtBQUV0Rjs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsU0FBUyxDQUFDLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxDQUFFLFNBQy9DLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDbEIsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7Q0FDakIsQ0FBQztDQUNGO0FBRUY7Ozs7Ozs7R0FPRztBQUNILGVBQU8sTUFBTSxTQUFTLEdBQUksQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLFVBQ3BDLENBQUMsS0FDUixTQUFTLENBQUMsQ0FBQyxDQUtWLENBQUE7QUFFSjs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsY0FBYyxDQUFDLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxDQUFFLFNBQ3BELGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDbEIsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7Q0FDakIsQ0FBQztDQUNGO0FBRUY7Ozs7Ozs7R0FPRztBQUNILGVBQU8sTUFBTSxjQUFjLEdBQUksQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLFVBQ3pDLENBQUMsS0FDUixjQUFjLENBQUMsQ0FBQyxDQU1mLENBQUE7QUFFSjs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsU0FBUyxDQUFDLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxDQUFFLFNBQy9DLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7Q0FDbkIsQ0FBQztDQUNGO0FBRUY7Ozs7OztHQU1HO0FBQ0gsZUFBTyxNQUFNLFNBQVMsR0FBSSxDQUFDLFNBQVMsTUFBTSxDQUFDLEdBQUcsVUFDcEMsQ0FBQyxLQUNSLFNBQVMsQ0FBQyxDQUFDLENBS1YsQ0FBQTtBQUVKOzs7R0FHRztBQUNILE1BQU0sV0FBVyxjQUFjLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLENBQ2xELFNBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM5RjtBQUVGOzs7R0FHRztBQUNILGVBQU8sTUFBTSxjQUFjLEdBQUksQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFHLGNBQWMsQ0FBQyxDQUFDLENBUzlFLENBQUE7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sV0FBVyxXQUFXLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLENBQUUsU0FDakQsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNsQixRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzQyxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQyxRQUFRLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0QyxRQUFRLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUN2QyxDQUFDO0NBQ0Y7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILGVBQU8sTUFBTSxXQUFXLEVBQUUsQ0FBQyxLQUFLLFNBQVMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUM1RSxJQUFJLEVBQUUsS0FBSyxLQUNSLEtBQUssU0FBUyxNQUFNLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FDOUMsS0FBSyxTQUFTLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUM5RDtJQUNFLFFBQVEsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDekcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUNwQixLQUFLO0NBQ1YsQ0FDRixHQUNELEtBT08sQ0FBQTtBQUVYOzs7R0FHRztBQUNILE1BQU0sV0FBVyxJQUFLLFNBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQUc7QUFFaEc7Ozs7OztHQU1HO0FBQ0gsZUFBTyxNQUFNLElBQUksRUFBRSxJQUtsQixDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsZUFBTyxNQUFNLFdBQVcsa0NBRXRCLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxlQUFPLE1BQU0sZUFBZSwwREFFMUIsQ0FBQTtBQUVGOzs7R0FHRztBQUNILGVBQU8sTUFBTSx1QkFBdUIsd0RBRWxDLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxlQUFPLE1BQU0seUJBQXlCLDBEQUVwQyxDQUFBO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxXQUFXLGNBQWUsU0FDOUIsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNsQixRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQTtJQUM3QyxRQUFRLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDekUsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMscUJBQXFCLENBQUE7Q0FDNUMsQ0FBQztDQUNGO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxlQUFPLE1BQU0sY0FBYyxFQUFFLGNBSTNCLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsc0JBQXVCLFNBQ3RDLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUE7SUFDM0MsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3ZFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLHFCQUFxQixDQUFBO0NBQzVDLENBQUM7Q0FDRjtBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsZUFBTyxNQUFNLHNCQUFzQixFQUFFLHNCQUluQyxDQUFBO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxXQUFXLHdCQUF5QixTQUN4QyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ2xCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLHFCQUFxQixDQUFBO0lBQzdDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUN6RSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQTtDQUM1QyxDQUFDO0NBQ0Y7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILGVBQU8sTUFBTSx3QkFBd0IsRUFBRSx3QkFJckMsQ0FBQTtBQUVGOzs7R0FHRztBQUNILE1BQU0sV0FBVyxjQUFlLFNBQzlCLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMscUJBQXFCLENBQUE7SUFDN0MsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBQ3pFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUN6RSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQTtDQUM1QyxDQUFDO0NBQ0Y7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxlQUFPLE1BQU0sY0FBYyxFQUFFLGNBSzNCLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsc0JBQXVCLFNBQ3RDLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUE7SUFDM0MsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3ZFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUN2RSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQTtDQUM1QyxDQUFDO0NBQ0Y7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxlQUFPLE1BQU0sc0JBQXNCLEVBQUUsc0JBS25DLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsd0JBQXlCLFNBQ3hDLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMscUJBQXFCLENBQUE7SUFDN0MsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBQ3pFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUN6RSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQTtDQUM1QyxDQUFDO0NBQ0Y7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxlQUFPLE1BQU0sd0JBQXdCLEVBQUUsd0JBS3JDLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsY0FBYyxDQUFDLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxDQUFFLFNBQ3BELGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsY0FBYyxDQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQ25GLENBQUE7SUFDRCxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FDbkYsQ0FBQTtJQUNELFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUNuRixDQUFBO0lBQ0QsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7SUFDaEIsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7SUFDdEIsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7Q0FDdkIsQ0FBQztDQUNGO0FBRUY7Ozs7Ozs7R0FPRztBQUNILGVBQU8sTUFBTSxjQUFjLEdBQUksQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLFVBQ3pDLENBQUMsS0FDUixjQUFjLENBQUMsQ0FBQyxDQVVsQixDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxlQUFPLE1BQU0sY0FBYyxHQUN6QixDQUFDLFNBQVMsR0FBRyxFQUNiLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsU0FDekUsQ0FBQyxXQUFXO0lBQ25CLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFBO0lBQzFCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFBO0lBQzNCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFBO0lBQ3JCLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFBO0lBQzNDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEdBQUcsU0FBUyxDQUFBO0NBQ3pDLEtBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDZjtJQUNFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FDZixNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7SUFDMUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUNuQixNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7SUFDN0UsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUNmLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtJQUMxRyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQ25CLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtJQUM3RSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQ2pCLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQ2hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxXQUFXLEVBQ2xCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUM1RCxDQUFBO0lBQ0QsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUNmLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtDQUNsRixFQUNELEtBQUssRUFDTCxTQUFTLENBaUpQLENBQUE7QUFFSjs7Ozs7R0FLRztBQUNILGVBQU8sTUFBTSxlQUFlLEdBQzFCLENBQUMsU0FBUyxHQUFHLEVBQ2IsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUV6RSxDQUFDLFdBQ0M7SUFDUCxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQTtJQUMxQixRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQTtJQUMzQixRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQTtJQUNyQixRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQTtJQUN0QixRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQTtJQUMxQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxHQUFHLFNBQVMsQ0FBQTtDQUN6QyxLQUNBLE1BQU0sQ0FBQyxNQUFNLENBQ2Q7SUFDRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQ2YsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FDeEIsTUFBTSxDQUFDLE1BQU0sQ0FDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUNULE1BQU0sQ0FBQyxXQUFXLEVBQ2xCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUN4RCxDQUFBO0lBQ0QsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUNuQixNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7SUFDN0UsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUNqQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUN4QixNQUFNLENBQUMsTUFBTSxDQUNoQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQ1QsTUFBTSxDQUFDLFdBQVcsRUFDbEIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzVELENBQUE7SUFDRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBO0NBQ2xGLEVBQ0QsS0FBSyxFQUNMLFNBQVMsR0FBRyxLQUFLLENBbUhmLENBQUEifQ==