diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-02 12:12:54 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-02 12:12:54 +0000 |
| commit | 70fe8a0b5c4858090a75d7e4be7e2adef9e51c92 (patch) | |
| tree | 9c712ca73e52e26603f440142e9b2a2fb8d231d2 /db/schema/S_ERP/s_erp.ts | |
| parent | 3cc0b07f39c0e8dcbd8962865557dd4d9e323d0f (diff) | |
(임수민) S-ERP 테이블 2개 추가, INSERT 로직을 UPDATE 로 변경, 복합 pk 로직 추가
Diffstat (limited to 'db/schema/S_ERP/s_erp.ts')
| -rw-r--r-- | db/schema/S_ERP/s_erp.ts | 227 |
1 files changed, 153 insertions, 74 deletions
diff --git a/db/schema/S_ERP/s_erp.ts b/db/schema/S_ERP/s_erp.ts index 1b24f0e7..5a9ca36c 100644 --- a/db/schema/S_ERP/s_erp.ts +++ b/db/schema/S_ERP/s_erp.ts @@ -1,11 +1,11 @@ -import { serial, varchar, timestamp, text, boolean, numeric, decimal, integer, real } from "drizzle-orm/pg-core";
+import { serial, varchar, timestamp, text, boolean, numeric, decimal, integer, real, bigint, uniqueIndex } from "drizzle-orm/pg-core";
import { pgSchema } from "drizzle-orm/pg-core";
export const sErpSchema = pgSchema("S-ERP");
export const tbSAPEquipInfo = sErpSchema.table("TB_SAP_EquipInfo", {
id: serial().primaryKey(),
- Equipment: varchar({ length: 20 }),
+ Equipment: varchar({ length: 20 }), // pk
Description: varchar({ length: 100 }),
EquipCategory: varchar({ length: 2 }),
SystemStatus: varchar({ length: 10 }),
@@ -63,12 +63,15 @@ export const tbSAPEquipInfo = sErpSchema.table("TB_SAP_EquipInfo", { FinancialManagementArea: varchar({ length: 10 }),
CommitmentItem: varchar({ length: 20 }),
SysStatus: varchar({ length: 1 }),
-});
+}, (table) => ({
+ // Equipment 컬럼에 UNIQUE 인덱스 추가
+ uniqueEquipment: uniqueIndex("unique_equipment").on(table.Equipment),
+}));
export const tbSAPOrder = sErpSchema.table("TB_SAP_Order", {
id: serial().primaryKey(),
BreakdownIndicator: varchar({ length: 50 }),
- Order: varchar({ length: 50 }),
+ Order: varchar({ length: 50 }), // pk
OrderType: varchar({ length: 50 }),
OrderDescription: varchar({ length: 150 }),
MainWorkCenterDesc: varchar({ length: 100 }),
@@ -99,21 +102,24 @@ export const tbSAPOrder = sErpSchema.table("TB_SAP_Order", { BasicStartTime: varchar({ length: 50 }),
ActualStartDate: varchar({ length: 50 }),
ActualFinishTime: varchar({ length: 50 }),
- PlanCost: integer(),
- ActualCost: integer(),
- SettlementCost: integer(),
- Balance: integer(),
+ PlanCost: bigint({ mode: 'number' }),
+ ActualCost: bigint({ mode: 'number' }),
+ SettlementCost: bigint({ mode: 'number' }),
+ Balance: bigint({ mode: 'number' }),
Currency: varchar({ length: 50 }),
EquiCategory: varchar({ length: 50 }),
ObjectType: varchar({ length: 50 }),
ABCOmdocatior: varchar({ length: 50 }),
EWRNo: varchar({ length: 50 }),
-});
+}, (table) => ({
+ // Order 컬럼에 UNIQUE 인덱스 추가
+ uniqueOrder: uniqueIndex("unique_order").on(table.Order),
+}));
export const tbSAPOrderConfirm = sErpSchema.table("TB_SAP_OrderConfirm", {
id: serial().primaryKey(),
- Confirmation: varchar({ length: 50 }),
- Count: varchar({ length: 50 }),
+ Confirmation: varchar({ length: 50 }), // pk
+ Count: varchar({ length: 50 }), // pk
Order: varchar({ length: 50 }),
OpAc: varchar({ length: 50 }),
OperationText: varchar({ length: 200 }),
@@ -132,12 +138,15 @@ export const tbSAPOrderConfirm = sErpSchema.table("TB_SAP_OrderConfirm", { INGRP: varchar({ length: 50 }),
GRWRK: varchar({ length: 50 }),
AUART: varchar({ length: 50 }),
-});
+}, (table) => ({
+ // Confirmation, Count 복합 PK에 UNIQUE 인덱스 추가
+ uniqueConfirmationCount: uniqueIndex("unique_confirmation_count").on(table.Confirmation, table.Count),
+}));
export const tbSAPOrderNotice = sErpSchema.table("TB_SAP_OrderNotice", {
id: serial().primaryKey(),
Status: varchar({ length: 50 }),
- Notification: integer(),
+ Notification: bigint({ mode: 'number' }), // pk
Type: varchar({ length: 50 }),
Description: varchar({ length: 64 }),
PlanningPlant: varchar({ length: 50 }),
@@ -146,7 +155,7 @@ export const tbSAPOrderNotice = sErpSchema.table("TB_SAP_OrderNotice", { WorkCenter: varchar({ length: 50 }),
NameOfWorkCenter: varchar({ length: 50 }),
FunctionalLocation: varchar({ length: 50 }),
- Equipment: integer(),
+ Equipment: bigint({ mode: 'number' }),
TagNumber: varchar({ length: 50 }),
EquipmentDesc: varchar({ length: 50 }),
PlantSection: varchar({ length: 50 }),
@@ -157,18 +166,18 @@ export const tbSAPOrderNotice = sErpSchema.table("TB_SAP_OrderNotice", { Createdby: varchar({ length: 50 }),
SystemStatus: varchar({ length: 50 }),
UserStatus: varchar({ length: 50 }),
- Order: integer(),
+ Order: bigint({ mode: 'number' }),
Requester: varchar({ length: 50 }),
RequesterName: varchar({ length: 50 }),
CodeGroup: varchar({ length: 50 }),
- Code: integer(),
+ Code: bigint({ mode: 'number' }),
CodeDescription: varchar({ length: 50 }),
BreakdownIndicator: varchar({ length: 50 }),
Priority: varchar({ length: 50 }),
PriorityDesc: varchar({ length: 50 }),
NotifcatnType: varchar({ length: 50 }),
Name1: varchar({ length: 50 }),
- WorkCenterInt: integer(),
+ WorkCenterInt: bigint({ mode: 'number' }),
ObjectNumber: varchar({ length: 50 }),
CHAR05: varchar({ length: 50 }),
Link: varchar({ length: 50 }),
@@ -189,15 +198,18 @@ export const tbSAPOrderNotice = sErpSchema.table("TB_SAP_OrderNotice", { MalfunctionEnd: varchar({ length: 50 }),
EndTime: varchar({ length: 50 }),
BreakdownDuration: real(), // float4 타입을 real로 변환
-});
+}, (table) => ({
+ // Notification 컬럼에 UNIQUE 인덱스 추가
+ uniqueNotification: uniqueIndex("unique_notification").on(table.Notification),
+}));
export const tbSAPOrderBreakdown = sErpSchema.table("TB_SAP_OrderBreakdown", {
id: serial().primaryKey(),
- Order: integer(),
+ Order: bigint({ mode: 'number' }), // pk
OrderType: varchar({ length: 50 }),
FunctionalLocation: varchar({ length: 50 }),
FLDesc: varchar({ length: 50 }),
- Equipment: integer(),
+ Equipment: bigint({ mode: 'number' }),
EquipmentDesc: varchar({ length: 50 }),
ABCIndicator: varchar({ length: 50 }),
MainWorkCenter: varchar({ length: 50 }),
@@ -222,52 +234,58 @@ export const tbSAPOrderBreakdown = sErpSchema.table("TB_SAP_OrderBreakdown", { EndTime: varchar({ length: 50 }),
BreakdownDuration: real(), // float4 타입을 real로 변환
Plant: varchar({ length: 50 }),
- Notification: integer(),
+ Notification: bigint({ mode: 'number' }),
ObjectNumber: varchar({ length: 50 }),
OrderDesc: varchar({ length: 64 }),
PlantSectionDesc: varchar({ length: 50 }),
TagNumber: varchar({ length: 50 }),
-});
+}, (table) => ({
+ // Order 컬럼에 UNIQUE 인덱스 추가
+ uniqueOrder: uniqueIndex("unique_order_breakdown").on(table.Order),
+}));
export const tbSAPMainternanceBOM = sErpSchema.table("TB_SAP_MainternanceBOM", {
id: serial().primaryKey(),
- Date: varchar({ length: 50 }),
- Order: integer(),
+ Date: varchar({ length: 50 }), // pk
+ Order: bigint({ mode: 'number' }), // pk
Description: varchar({ length: 50 }),
FuncLocation: varchar({ length: 50 }),
Description_1: varchar({ length: 50 }),
WorkCenter: varchar({ length: 50 }),
ObjectType: varchar({ length: 50 }),
- Equipment: integer(),
+ Equipment: bigint({ mode: 'number' }),
Discription: varchar({ length: 50 }),
TagNumber: varchar({ length: 50 }),
ICT: varchar({ length: 50 }),
- Component: varchar({ length: 50 }),
- Quantity: integer(),
+ Component: varchar({ length: 50 }), // pk
+ Quantity: bigint({ mode: 'number' }),
Unit: varchar({ length: 50 }),
Description_2: varchar({ length: 50 }),
- Specification: varchar({ length: 50 }),
- GEWRK: integer(),
+ Specification: varchar({ length: 200 }),
+ GEWRK: bigint({ mode: 'number' }),
STLNR: varchar({ length: 50 }),
STLAL: varchar({ length: 50 }),
WERKS: varchar({ length: 50 }),
TPLNR_T: varchar({ length: 50 }),
- EQUNR_T: integer(),
-});
+ EQUNR_T: bigint({ mode: 'number' }),
+}, (table) => ({
+ // Date, Order, Component 복합 PK에 UNIQUE 인덱스 추가
+ uniqueDateOrderComponent: uniqueIndex("unique_date_order_component").on(table.Date, table.Order, table.Component),
+}));
export const tbSAPMaterialRepair = sErpSchema.table("TB_SAP_MaterialRepair", {
id: serial().primaryKey(),
BreakdownIndicator: varchar({ length: 50 }),
- Order: integer(),
+ Order: bigint({ mode: 'number' }), // pk
OrderType: varchar({ length: 50 }),
OrderDescription: varchar({ length: 50 }),
MainWorkCenterDescription: varchar({ length: 50 }),
FunctionalLocation: varchar({ length: 50 }),
- Equipment: integer(),
+ Equipment: bigint({ mode: 'number' }),
EquipmentDescription: varchar({ length: 50 }),
EquipmentSortField: varchar({ length: 50 }),
TagNumber: varchar({ length: 50 }),
- Notification: integer(),
+ Notification: bigint({ mode: 'number' }),
Priority: varchar({ length: 50 }),
PriorityDesc: varchar({ length: 50 }),
PlantSection: varchar({ length: 50 }),
@@ -298,41 +316,47 @@ export const tbSAPMaterialRepair = sErpSchema.table("TB_SAP_MaterialRepair", { SettlementCost: varchar({ length: 50 }),
Balance: varchar({ length: 50 }),
Currency: varchar({ length: 50 }),
- EquiCategory: integer(),
+ EquiCategory: bigint({ mode: 'number' }),
ObjectType: varchar({ length: 50 }),
ABCIndicatior: varchar({ length: 50 }),
EWRNo: varchar({ length: 50 }),
-});
+}, (table) => ({
+ // Order 컬럼에 UNIQUE 인덱스 추가
+ uniqueOrderRepair: uniqueIndex("unique_order_repair").on(table.Order),
+}));
export const tbSAPMaterialInfo = sErpSchema.table("TB_SAP_MaterialInfo", {
id: serial().primaryKey(),
- Plnt: varchar({ length: 50 }),
- Material: varchar({ length: 50 }),
- Sloc: varchar({ length: 50 }),
+ Plnt: varchar({ length: 50 }), // pk
+ Material: varchar({ length: 50 }), // pk
+ Sloc: varchar({ length: 50 }), // pk
Bin: varchar({ length: 50 }),
MatlGroup: varchar({ length: 50 }),
MaterialDescription: varchar({ length: 500 }),
MaterialName: varchar({ length: 500 }),
Specification: varchar({ length: 500 }),
- Unrestr: integer(),
- QualInsp: integer(),
- Blocked: integer(),
+ Unrestr: bigint({ mode: 'number' }),
+ QualInsp: bigint({ mode: 'number' }),
+ Blocked: bigint({ mode: 'number' }),
Bun: varchar({ length: 50 }),
Warehouse: varchar({ length: 50 }),
Message: varchar({ length: 500 }),
-});
+}, (table) => ({
+ // Plnt, Material, Sloc 복합 PK에 UNIQUE 인덱스 추가
+ uniquePlntMaterialSloc: uniqueIndex("unique_plnt_material_sloc").on(table.Plnt, table.Material, table.Sloc),
+}));
export const tbSAPMaterialStock = sErpSchema.table("TB_SAP_MaterialStock", {
id: serial().primaryKey(),
WBS: varchar({ length: 50 }),
OldProjec: varchar({ length: 50 }),
- Material: varchar({ length: 50 }),
+ Material: varchar({ length: 50 }), // pk
MaterialD: varchar({ length: 50 }),
Specificat: varchar({ length: 50 }),
MRPType: varchar({ length: 50 }),
- Batch: varchar({ length: 50 }),
+ Batch: varchar({ length: 50 }), // pk
Amount: varchar({ length: 50 }),
- StorageLo: varchar({ length: 50 }),
+ StorageLo: varchar({ length: 50 }), // pk
StorageLo_1: varchar({ length: 50 }),
StorageBin: varchar({ length: 50 }),
Warehouse: varchar({ length: 50 }),
@@ -341,11 +365,11 @@ export const tbSAPMaterialStock = sErpSchema.table("TB_SAP_MaterialStock", { TNo: varchar({ length: 50 }),
BOXNo: varchar({ length: 50 }),
MaterialT: varchar({ length: 50 }),
- Unrestrict: integer(),
- QIStock: integer(),
- BlockedSt: integer(),
+ Unrestrict: bigint({ mode: 'number' }),
+ QIStock: bigint({ mode: 'number' }),
+ BlockedSt: bigint({ mode: 'number' }),
REMARK: varchar({ length: 50 }),
- TotalStoc: integer(),
+ TotalStoc: bigint({ mode: 'number' }),
Unit: varchar({ length: 50 }),
MAP: varchar({ length: 50 }),
NetWeight: real(), // float4 타입을 real로 변환
@@ -361,22 +385,25 @@ export const tbSAPMaterialStock = sErpSchema.table("TB_SAP_MaterialStock", { ValveFitt: varchar({ length: 50 }),
BLNo: varchar({ length: 50 }),
TAGNO: varchar({ length: 50 }),
-});
+}, (table) => ({
+ // Material, Batch, StorageLo 복합 PK에 UNIQUE 인덱스 추가
+ uniqueMaterialBatchStorage: uniqueIndex("unique_material_batch_storage").on(table.Material, table.Batch, table.StorageLo),
+}));
export const tbSAPMaterialRelease = sErpSchema.table("TB_SAP_MaterialRelease", {
id: serial().primaryKey(),
- PostingGIdate: varchar({ length: 50 }),
- Plant: varchar({ length: 50 }),
- StorageLoc: varchar({ length: 50 }),
+ PostingGIdate: varchar({ length: 50 }), // pk
+ Plant: varchar({ length: 50 }), // pk
+ StorageLoc: varchar({ length: 50 }), // pk
StockWBS: varchar({ length: 50 }),
InputWBS: varchar({ length: 50 }),
Material: varchar({ length: 50 }),
OldMaterialNumber: varchar({ length: 50 }),
MaterialDesc: varchar({ length: 50 }),
- Spec: varchar({ length: 64 }),
+ Spec: varchar({ length: 100 }),
Batch: varchar({ length: 50 }),
MovementType: varchar({ length: 50 }),
- Quantity: integer(),
+ Quantity: bigint({ mode: 'number' }),
BUn: varchar({ length: 50 }),
GoodsRecipinet: varchar({ length: 50 }), // Goods Recipinet(Ship-To Party)
NetWeight: real(), // float4 타입을 real로 변환
@@ -385,33 +412,36 @@ export const tbSAPMaterialRelease = sErpSchema.table("TB_SAP_MaterialRelease", { Amount: varchar({ length: 50 }),
Currency: varchar({ length: 50 }),
MvtTypeTxt: varchar({ length: 50 }),
- MaterialDocument: integer(),
- DocumentYear: integer(),
+ MaterialDocument: bigint({ mode: 'number' }), // pk
+ DocumentYear: bigint({ mode: 'number' }), // pk
S: varchar({ length: 50 }),
MatName: varchar({ length: 50 }),
MatGroupDesc: varchar({ length: 50 }),
InputProject: varchar({ length: 50 }),
HeaderText: varchar({ length: 50 }),
-});
+}, (table) => ({
+ // PostingGIdate, Plant, StorageLoc, MaterialDocument, DocumentYear 복합 PK에 UNIQUE 인덱스 추가
+ uniqueReleaseComposite: uniqueIndex("unique_release_composite").on(table.PostingGIdate, table.Plant, table.StorageLoc, table.MaterialDocument, table.DocumentYear),
+}));
export const tbSAPMaterialReceiving = sErpSchema.table("TB_SAP_MaterialReceiving", {
id: serial().primaryKey(),
- PostingGRDate: varchar({ length: 50 }),
- Plant: varchar({ length: 50 }),
- StorageLoc: varchar({ length: 50 }),
+ PostingGRDate: varchar({ length: 50 }), // pk
+ Plant: varchar({ length: 50 }), // pk
+ StorageLoc: varchar({ length: 50 }), // pk
StockWBS: varchar({ length: 50 }),
InputWBS: varchar({ length: 50 }),
Material: varchar({ length: 50 }),
OldMaterialNumber: varchar({ length: 50 }),
MaterialDesc: varchar({ length: 50 }),
- Spec: varchar({ length: 50 }),
+ Spec: varchar({ length: 100 }),
Batch: varchar({ length: 50 }),
MovementType: varchar({ length: 50 }),
- Quantity: integer(),
+ Quantity: bigint({ mode: 'number' }),
BUn: varchar({ length: 50 }),
GoodsRecipinet: varchar({ length: 50 }), // Goods Recipinet(Ship-To Party)
PO: varchar({ length: 50 }),
- POItem: integer(),
+ POItem: bigint({ mode: 'number' }),
Vendor: varchar({ length: 50 }),
VendorName: varchar({ length: 50 }),
NetWeight: real(), // float4 타입을 real로 변환
@@ -420,19 +450,22 @@ export const tbSAPMaterialReceiving = sErpSchema.table("TB_SAP_MaterialReceiving Amount: varchar({ length: 50 }),
Currency: varchar({ length: 50 }),
MvtTypeTxt: varchar({ length: 50 }),
- MatDoc: integer(),
- Year: integer(),
+ MatDoc: bigint({ mode: 'number' }), // pk
+ Year: bigint({ mode: 'number' }), // pk
S: varchar({ length: 50 }),
MatName: varchar({ length: 50 }),
MatGroupDesc: varchar({ length: 50 }),
InputProject: varchar({ length: 50 }),
HeaderText: varchar({ length: 50 }),
-});
+}, (table) => ({
+ // PostingGRDate, Plant, StorageLoc, MatDoc, Year 복합 PK에 UNIQUE 인덱스 추가
+ uniqueReceivingComposite: uniqueIndex("unique_receiving_composite").on(table.PostingGRDate, table.Plant, table.StorageLoc, table.MatDoc, table.Year),
+}));
export const tbSAPMaterialPurchase = sErpSchema.table("TB_SAP_MaterialPurchase", {
id: serial().primaryKey(),
Status: varchar({ length: 50 }),
- Notification: integer(),
+ Notification: bigint({ mode: 'number' }),
Type: varchar({ length: 50 }),
Description: varchar({ length: 64 }),
PlanningPlant: varchar({ length: 50 }),
@@ -441,7 +474,7 @@ export const tbSAPMaterialPurchase = sErpSchema.table("TB_SAP_MaterialPurchase", WorkCenter: varchar({ length: 50 }),
NameOfWorkCenter: varchar({ length: 50 }),
FunctionalLocation: varchar({ length: 50 }),
- Equipment: integer(),
+ Equipment: bigint({ mode: 'number' }),
TagNumber: varchar({ length: 50 }),
EquipmentDesc: varchar({ length: 50 }),
PlantSection: varchar({ length: 50 }),
@@ -452,18 +485,18 @@ export const tbSAPMaterialPurchase = sErpSchema.table("TB_SAP_MaterialPurchase", CreatedBy: varchar({ length: 50 }),
SystemStatus: varchar({ length: 50 }),
UserStatus: varchar({ length: 50 }),
- Order: integer(),
+ Order: bigint({ mode: 'number' }),
Requester: varchar({ length: 50 }),
RequesterName: varchar({ length: 50 }),
CodeGroup: varchar({ length: 50 }),
- Code: integer(),
+ Code: bigint({ mode: 'number' }),
CodeDescription: varchar({ length: 50 }),
BreakdownIndicator: varchar({ length: 50 }),
Priority: varchar({ length: 50 }),
PriorityDesc: varchar({ length: 50 }),
NotifcatnType: varchar({ length: 50 }),
Name1: varchar({ length: 50 }),
- WorkCenterInt: integer(),
+ WorkCenterInt: bigint({ mode: 'number' }),
ObjectNumber: varchar({ length: 50 }),
CHAR05: varchar({ length: 50 }),
Link: varchar({ length: 50 }),
@@ -484,4 +517,50 @@ export const tbSAPMaterialPurchase = sErpSchema.table("TB_SAP_MaterialPurchase", MalfunctionEnd: varchar({ length: 50 }),
EndTime: varchar({ length: 50 }),
BreakdownDuration: real(), // float4 타입을 real로 변환
-});
\ No newline at end of file +});
+
+export const technicalGuidanceInvestment = sErpSchema.table("Technical_Guidance_Investment", {
+ id: serial().primaryKey(),
+ FUMNR: varchar({ length: 10 }), // pk
+ FUMIT: bigint({ mode: 'number' }), // pk
+ DESCR: varchar({ length: 50 }),
+ FU_APPDATE: varchar({ length: 8 }),
+ COST_INVEST: varchar({ length: 15 })
+}, (table) => ({
+ // FUMNR, FUMIT 복합 PK에 UNIQUE 인덱스 추가
+ uniqueFumnrFumit: uniqueIndex("unique_fumnr_fumit").on(table.FUMNR, table.FUMIT),
+}));
+
+export const technicalGuidanceOrder = sErpSchema.table("Technical_Guidance_Order", {
+ id: serial().primaryKey(),
+ AUFNR: varchar({ length: 12 }), // pk (Order)
+ VORNR: varchar({ length: 4 }), // pk (Operation)
+ ORD_ERDAT: varchar({ length: 50 }),
+ FUMNR: varchar({ length: 10 }),
+ FUMIT: bigint({ mode: 'number' }),
+ DESCR: varchar({ length: 50 }),
+ FU_APPDATE: varchar({ length: 50 }),
+ BANFN: varchar({ length: 10 }),
+ BNFPO: bigint({ mode: 'number' }),
+ BADAT: varchar({ length: 50 }),
+ EBELN: varchar({ length: 10 }),
+ EBELP: bigint({ mode: 'number' }),
+ PO_ERDAT: varchar({ length: 50 }),
+ AUART: varchar({ length: 4 }),
+ STTXT: varchar({ length: 40 }),
+ EQUNR: varchar({ length: 18 }),
+ KTEXT: varchar({ length: 20 }),
+ INGRP: varchar({ length: 3 }),
+ INNAM: varchar({ length: 18 }),
+ CON_STEP: varchar({ length: 20 }),
+ CON_DESC: varchar({ length: 40 }),
+ CON_CO: varchar({ length: 30 }),
+ COST_INVEST: varchar({ length: 15 }),
+ COST_ORD: varchar({ length: 13 }),
+ COST_PR: varchar({ length: 13 }),
+ COST_PO: varchar({ length: 13 }),
+ COST_IV: varchar({ length: 13 }),
+}, (table) => ({
+ // AUFNR, VORNR 복합 PK에 UNIQUE 인덱스 추가
+ uniqueAufnrVornr: uniqueIndex("unique_aufnr_vornr").on(table.AUFNR, table.VORNR),
+}));
\ No newline at end of file |
