From 822709f5770ca523ebe175985773f67a0f47cbaf Mon Sep 17 00:00:00 2001 From: Sven Czarnian Date: Sat, 22 Oct 2022 20:25:55 +0200 Subject: [PATCH] introduce a performance backend --- config/performance.yaml | 4467 +++++++++++++++++ package-lock.json | 595 ++- package.json | 3 + src/app.module.ts | 6 +- src/performance/models/performance.model.ts | 25 + .../models/performanceentry.model.ts | 16 + src/performance/performance.module.ts | 17 + src/performance/performance.service.spec.ts | 18 + src/performance/performance.service.ts | 99 + src/versioning/dto/semanticversion.dto.ts | 25 + src/versioning/versioning.model.ts | 24 + src/versioning/versioning.module.ts | 15 + src/versioning/versioning.service.spec.ts | 18 + src/versioning/versioning.service.ts | 51 + 14 files changed, 5346 insertions(+), 33 deletions(-) create mode 100644 config/performance.yaml create mode 100644 src/performance/models/performance.model.ts create mode 100644 src/performance/models/performanceentry.model.ts create mode 100644 src/performance/performance.module.ts create mode 100644 src/performance/performance.service.spec.ts create mode 100644 src/performance/performance.service.ts create mode 100644 src/versioning/dto/semanticversion.dto.ts create mode 100644 src/versioning/versioning.model.ts create mode 100644 src/versioning/versioning.module.ts create mode 100644 src/versioning/versioning.service.spec.ts create mode 100644 src/versioning/versioning.service.ts diff --git a/config/performance.yaml b/config/performance.yaml new file mode 100644 index 0000000..a00cad2 --- /dev/null +++ b/config/performance.yaml @@ -0,0 +1,4467 @@ +FILEINFO: + createdAt: 20221022 + version: "1.0.0" +M339: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F260: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AC56: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 180 + rodabovefl100: 2000 + speedbelowfl100: 180 + rodbelowfl100: 2000 + speedapproach: 140 +L159: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AC68: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 180 + rodabovefl100: 2000 + speedbelowfl100: 180 + rodbelowfl100: 2000 + speedapproach: 140 +SGUP: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 270 + rodabovefl100: 1000 + speedbelowfl100: 270 + rodbelowfl100: 1430 + speedapproach: 140 +L39: + speedabovefl240: 300 + rodabovefl240: 2300 + speedabovefl100: 250 + rodabovefl100: 5000 + speedbelowfl100: 250 + rodbelowfl100: 5000 + speedapproach: 135 +CONC: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 162 +ALO2: + speedabovefl240: 60 + rodabovefl240: 2000 + speedabovefl100: 60 + rodabovefl100: 2000 + speedbelowfl100: 60 + rodbelowfl100: 800 + speedapproach: 140 +ALO3: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AS32: + speedabovefl240: 130 + rodabovefl240: 2000 + speedabovefl100: 90 + rodabovefl100: 2000 + speedbelowfl100: 90 + rodbelowfl100: 1000 + speedapproach: 40 +AS3B: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AS50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AS55: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AS65: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +N262: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LAMA: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PUMA: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GAZL: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +S601: + speedabovefl240: 250 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 120 +FREL: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +WT9: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +M20P: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AEST: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A109: + speedabovefl240: 130 + rodabovefl240: 2000 + speedabovefl100: 100 + rodabovefl100: 2000 + speedbelowfl100: 100 + rodbelowfl100: 1000 + speedapproach: 40 +A119: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A129: + speedabovefl240: 140 + rodabovefl240: 2000 + speedabovefl100: 100 + rodabovefl100: 2000 + speedbelowfl100: 100 + rodbelowfl100: 2000 + speedapproach: 40 +LYNX: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EH10: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A139: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A149: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A169: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A189: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CKUO: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A30B: + speedabovefl240: 290 + rodabovefl240: 800 + speedabovefl100: 240 + rodabovefl100: 1000 + speedbelowfl100: 240 + rodbelowfl100: 2000 + speedapproach: 131 +A306: + speedabovefl240: 290 + rodabovefl240: 800 + speedabovefl100: 240 + rodabovefl100: 1000 + speedbelowfl100: 240 + rodbelowfl100: 2000 + speedapproach: 131 +A3ST: + speedabovefl240: 290 + rodabovefl240: 500 + speedabovefl100: 240 + rodabovefl100: 1500 + speedbelowfl100: 240 + rodbelowfl100: 1500 + speedapproach: 240 +A310: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1500 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 130 +A318: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 130 +A319: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 130 +A19N: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 210 + rodabovefl100: 1000 + speedbelowfl100: 210 + rodbelowfl100: 3500 + speedapproach: 130 +A320: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 137 +A20N: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 210 + rodabovefl100: 1000 + speedbelowfl100: 210 + rodbelowfl100: 3500 + speedapproach: 137 +A321: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 134 +A21N: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 210 + rodabovefl100: 1000 + speedbelowfl100: 210 + rodbelowfl100: 2500 + speedapproach: 134 +A332: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 140 +A333: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 130 +A342: + speedabovefl240: 290 + rodabovefl240: 700 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 150 +A343: + speedabovefl240: 290 + rodabovefl240: 700 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 150 +A345: + speedabovefl240: 290 + rodabovefl240: 600 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 160 +A346: + speedabovefl240: 290 + rodabovefl240: 800 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 160 +A388: + speedabovefl240: 300 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 138 +A35J: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A358: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A359: + speedabovefl240: 250 + rodabovefl240: 1400 + speedabovefl100: 240 + rodabovefl100: 1500 + speedbelowfl100: 240 + rodbelowfl100: 3000 + speedapproach: 155 +A400: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EC20: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EC30: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EC35: + speedabovefl240: 120 + rodabovefl240: 2000 + speedabovefl100: 90 + rodabovefl100: 2000 + speedbelowfl100: 90 + rodbelowfl100: 1500 + speedapproach: 5 +EC45: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EC55: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EC75: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TIGR: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EC25: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +NH90: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C27J: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +G222: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AMXM: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AN12: + speedabovefl240: 300 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 122 +A124: + speedabovefl240: 290 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A140: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 109 +AN22: + speedabovefl240: 450 + rodabovefl240: 2000 + speedabovefl100: 260 + rodabovefl100: 2000 + speedbelowfl100: 260 + rodbelowfl100: 1670 + speedapproach: 140 +A225: + speedabovefl240: 330 + rodabovefl240: 650 + speedabovefl100: 250 + rodabovefl100: 1500 + speedbelowfl100: 250 + rodbelowfl100: 2200 + speedapproach: 150 +AN24: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1000 + speedapproach: 140 +AN26: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AN30: + speedabovefl240: 270 + rodabovefl240: 2000 + speedabovefl100: 240 + rodabovefl100: 2000 + speedbelowfl100: 240 + rodbelowfl100: 1500 + speedapproach: 140 +AN32: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 240 + rodabovefl100: 2000 + speedbelowfl100: 240 + rodbelowfl100: 1500 + speedapproach: 140 +AN38: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AN70: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AN72: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AT43: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 200 + rodabovefl100: 2000 + speedbelowfl100: 200 + rodbelowfl100: 1500 + speedapproach: 120 +AT45: + speedabovefl240: 230 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 110 +AT46: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 104 +AT72: + speedabovefl240: 260 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 120 +AT73: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 109 +AT75: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AT76: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 113 +VULC: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +RJ85: + speedabovefl240: 250 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 125 +NIM: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE10: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B190: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE20: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 100 +BE23: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE30: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE33: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B350: + speedabovefl240: 280 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 110 +BE36: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B36T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE40: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE55: + speedabovefl240: 180 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 95 +BE56: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE58: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE60: + speedabovefl240: 220 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 95 +BE65: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE70: + speedabovefl240: 160 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 900 + speedapproach: 110 +BE76: + speedabovefl240: 140 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 85 +BE77: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE80: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE9L: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE99: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 110 +BE9T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE24: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +STAR: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B212: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B47G: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B47J: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +HUCO: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B06: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B06T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B222: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B230: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B407: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B412: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B427: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B429: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B430: + speedabovefl240: 130 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1000 + speedapproach: 40 +B505: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SUCO: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BSTP: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +UH1: + speedabovefl240: 110 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1200 + speedapproach: 40 +UH1Y: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +V22: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BER4: + speedabovefl240: 240 + rodabovefl240: 1300 + speedabovefl100: 250 + rodabovefl100: 1500 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 165 +A50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BE12: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BER2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B701: + speedabovefl240: 289 + rodabovefl240: 800 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1640 + speedapproach: 130 +B703: + speedabovefl240: 300 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 140 +B712: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 139 +B721: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B722: + speedabovefl240: 280 + rodabovefl240: 500 + speedabovefl100: 210 + rodabovefl100: 800 + speedbelowfl100: 210 + rodbelowfl100: 3500 + speedapproach: 150 +B38M: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B39M: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B731: + speedabovefl240: 250 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 140 +B732: + speedabovefl240: 250 + rodabovefl240: 500 + speedabovefl100: 210 + rodabovefl100: 800 + speedbelowfl100: 210 + rodbelowfl100: 3500 + speedapproach: 150 +B733: + speedabovefl240: 270 + rodabovefl240: 1000 + speedabovefl100: 220 + rodabovefl100: 800 + speedbelowfl100: 220 + rodbelowfl100: 3500 + speedapproach: 130 +B734: + speedabovefl240: 270 + rodabovefl240: 1000 + speedabovefl100: 230 + rodabovefl100: 1500 + speedbelowfl100: 230 + rodbelowfl100: 3500 + speedapproach: 137 +B735: + speedabovefl240: 270 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 128 +B736: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 130 +B737: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 137 +E737: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B738: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 140 +B739: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 145 +BLCF: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B741: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 150 +B742: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 150 +B743: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 160 +B74D: + speedabovefl240: 300 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 160 +B744: + speedabovefl240: 300 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 160 +B748: + speedabovefl240: 250 + rodabovefl240: 1000 + speedabovefl100: 220 + rodabovefl100: 1500 + speedbelowfl100: 220 + rodbelowfl100: 3000 + speedapproach: 145 +B74S: + speedabovefl240: 290 + rodabovefl240: 1900 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 140 +B74R: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 150 +B752: + speedabovefl240: 270 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 137 +B753: + speedabovefl240: 270 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 143 +B762: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1600 + speedapproach: 135 +B763: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 140 +B764: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 150 +B772: + speedabovefl240: 300 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 136 +B77L: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 210 + rodabovefl100: 1000 + speedbelowfl100: 210 + rodbelowfl100: 3000 + speedapproach: 140 +B773: + speedabovefl240: 300 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 149 +B77W: + speedabovefl240: 300 + rodabovefl240: 1500 + speedabovefl100: 240 + rodabovefl100: 1000 + speedbelowfl100: 240 + rodbelowfl100: 3000 + speedapproach: 149 +B788: + speedabovefl240: 300 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 2600 + speedbelowfl100: 250 + rodbelowfl100: 2800 + speedapproach: 140 +B789: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B52: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C135: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C17: + speedabovefl240: 300 + rodabovefl240: 1000 + speedabovefl100: 230 + rodabovefl100: 1000 + speedbelowfl100: 230 + rodbelowfl100: 3000 + speedapproach: 115 +C97: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 270 + rodabovefl100: 1000 + speedbelowfl100: 270 + rodbelowfl100: 1430 + speedapproach: 140 +H47: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E3TF: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E3CF: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E6: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F15: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F18: + speedabovefl240: 350 + rodabovefl240: 30000 + speedabovefl100: 250 + rodabovefl100: 10000 + speedbelowfl100: 250 + rodbelowfl100: 10000 + speedapproach: 125 +K35E: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +K35R: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +R135: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BCS1: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BCS3: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CL30: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 790 +CL60: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DH8B: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DH8C: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DH8D: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GL5T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GL6T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GL7T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GLEX: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CRJ1: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CRJX: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CRJ2: + speedabovefl240: 250 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 135 +CRJ7: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CRJ9: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +ATLA: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +ATP: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +HAR: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BA11: + speedabovefl240: 350 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 1500 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 137 +B461: + speedabovefl240: 250 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 125 +B462: + speedabovefl240: 250 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 125 +B463: + speedabovefl240: 250 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 125 +HAWK: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +JS31: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 115 +JS32: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 115 +JS41: + speedabovefl240: 280 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 120 +BN2P: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BN2T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TRIS: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BU31: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BU33: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CL2T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C101: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C212: + speedabovefl240: 170 + rodabovefl240: 2000 + speedabovefl100: 170 + rodabovefl100: 2000 + speedbelowfl100: 170 + rodbelowfl100: 800 + speedapproach: 90 +CN35: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C150: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C152: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C162: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C172: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C177: + speedabovefl240: 115 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 500 + speedapproach: 65 +C77R: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C182: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C185: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C205: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C06T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C07T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C207: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C208: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C210: + speedabovefl240: 170 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 500 + speedapproach: 75 +C310: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +T37: + speedabovefl240: 300 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 5000 + speedbelowfl100: 250 + rodbelowfl100: 5000 + speedapproach: 95 +C337: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C340: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C402: + speedabovefl240: 220 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 110 +C404: + speedabovefl240: 170 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 100 +C411: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C414: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C421: + speedabovefl240: 190 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1000 + speedapproach: 95 +C425: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C441: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C500: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C501: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C510: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C525: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C25A: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C550: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C551: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C560: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C56X: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C650: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C750: + speedabovefl240: 320 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 130 +C303: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F406: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C10T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P210: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C82R: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SR20: + speedabovefl240: 140 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1000 + speedapproach: 65 +SR22: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C42: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AC11: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CVLT: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AJET: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 110 + rodabovefl100: 2000 + speedbelowfl100: 110 + rodbelowfl100: 2000 + speedapproach: 92 +ETAR: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +FA10: + speedabovefl240: 250 + rodabovefl240: 1100 + speedabovefl100: 250 + rodabovefl100: 1600 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 110 +FA20: + speedabovefl240: 250 + rodabovefl240: 1500 + speedabovefl100: 220 + rodabovefl100: 1000 + speedbelowfl100: 220 + rodbelowfl100: 3000 + speedapproach: 110 +F2TH: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +FA50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +FA7X: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F900: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 4000 + speedapproach: 110 +MIR2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 140 + rodabovefl100: 2000 + speedbelowfl100: 140 + rodbelowfl100: 2000 + speedapproach: 140 +MRF1: + speedabovefl240: 400 + rodabovefl240: 15000 + speedabovefl100: 250 + rodabovefl100: 20000 + speedbelowfl100: 250 + rodbelowfl100: 10000 + speedapproach: 145 +RFAL: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 120 + rodabovefl100: 2000 + speedbelowfl100: 120 + rodbelowfl100: 2000 + speedapproach: 120 +DH8A: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DHC2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DH2T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DHC3: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DH3T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DHC5: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DHC6: + speedabovefl240: 160 + rodabovefl240: 2000 + speedabovefl100: 130 + rodabovefl100: 2000 + speedbelowfl100: 130 + rodbelowfl100: 1000 + speedapproach: 70 +DHC7: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +RVAL: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DG1T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DA36: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DA50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DV20: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DIMO: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DA42: + speedabovefl240: 170 + rodabovefl240: 2000 + speedabovefl100: 120 + rodabovefl100: 2000 + speedbelowfl100: 120 + rodbelowfl100: 1500 + speedapproach: 75 +DC3: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DC85: + speedabovefl240: 290 + rodabovefl240: 800 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 137 +DC86: + speedabovefl240: 290 + rodabovefl240: 800 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 140 +DC87: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 145 +DC91: + speedabovefl240: 250 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2300 + speedapproach: 132 +DC92: + speedabovefl240: 290 + rodabovefl240: 1300 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 127 +DC93: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 127 +DC94: + speedabovefl240: 250 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2300 + speedapproach: 131 +DC95: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 130 +EA50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TUCA: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E110: + speedabovefl240: 220 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 100 +E120: + speedabovefl240: 290 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 120 +E275: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E290: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E295: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E35L: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E545: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E550: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E170: + speedabovefl240: 300 + rodabovefl240: 1600 + speedabovefl100: 250 + rodabovefl100: 2300 + speedbelowfl100: 250 + rodbelowfl100: 2600 + speedapproach: 124 +E75L: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E75S: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E190: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 230 + rodabovefl100: 2000 + speedbelowfl100: 230 + rodbelowfl100: 2500 + speedapproach: 127 +E195: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E135: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E145: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E45X: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E50P: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E55P: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E121: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EUFI: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +E500: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A10: + speedabovefl240: 300 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 5000 + speedbelowfl100: 250 + rodbelowfl100: 5000 + speedapproach: 140 +D228: + speedabovefl240: 180 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 85 +D328: + speedabovefl240: 280 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 110 +J328: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AS02: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AS2T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F27: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F28: + speedabovefl240: 250 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 125 +F100: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F50: + speedabovefl240: 220 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 120 +F70: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +FOUG: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DINO: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ28: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ31: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 131 + rodabovefl100: 2000 + speedbelowfl100: 131 + rodbelowfl100: 2000 + speedapproach: 131 +LJ35: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ55: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 4000 + speedapproach: 140 +F111: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F16: + speedabovefl240: 350 + rodabovefl240: 10000 + speedabovefl100: 250 + rodabovefl100: 10000 + speedbelowfl100: 250 + rodbelowfl100: 10000 + speedapproach: 150 +G109: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +G115: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +A6: + speedabovefl240: 350 + rodabovefl240: 10000 + speedabovefl100: 250 + rodabovefl100: 5000 + speedbelowfl100: 250 + rodbelowfl100: 5000 + speedapproach: 110 +G73T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GLF2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +G159: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AC95: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GLF6: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GLF3: + speedabovefl240: 300 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 135 +GLF4: + speedabovefl240: 300 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 140 +GLF5: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +G280: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +JS20: + speedabovefl240: 220 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 105 +A748: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +HUNT: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +ALH: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +HDJT: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +H500: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +H64: + speedabovefl240: 145 + rodabovefl240: 2000 + speedabovefl100: 100 + rodabovefl100: 2000 + speedbelowfl100: 100 + rodbelowfl100: 2500 + speedapproach: 40 +JCOM: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +WW24: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +ASTR: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +GALX: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +IL18: + speedabovefl240: 320 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1000 + speedapproach: 130 +IL38: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +IL62: + speedabovefl240: 290 + rodabovefl240: 500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 145 +IL76: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 130 + rodabovefl100: 2000 + speedbelowfl100: 130 + rodbelowfl100: 2000 + speedapproach: 130 +IL86: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2500 + speedapproach: 150 +IL96: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 140 + rodabovefl100: 2000 + speedbelowfl100: 140 + rodbelowfl100: 2000 + speedapproach: 140 +A002: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +D150: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MJ2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +KMAX: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +H2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +KA32: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +KA50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +KA52: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +OH1: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +T411: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LA4: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LA25: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EVOP: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +EVOT: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LNC2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LNC4: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LNCE: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LNP4: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LNT4: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SNGY: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ23: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ24: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ25: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ45: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ40: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +LJ60: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 139 + rodabovefl100: 2000 + speedbelowfl100: 139 + rodbelowfl100: 2000 + speedapproach: 139 +L410: + speedabovefl240: 200 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 85 +L610: + speedabovefl240: 220 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 100 +C130: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 150 + rodabovefl100: 2000 + speedbelowfl100: 150 + rodbelowfl100: 1500 + speedapproach: 130 +C141: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C5: + speedabovefl240: 300 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 135 +L188: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F104: + speedabovefl240: 360 + rodabovefl240: 25000 + speedabovefl100: 250 + rodabovefl100: 35000 + speedbelowfl100: 250 + rodbelowfl100: 15000 + speedapproach: 180 +F117: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F14: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +L29B: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C30J: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F22: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P3: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +L101: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +BK17: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B105: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DC10: + speedabovefl240: 300 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 149 +F4: + speedabovefl240: 350 + rodabovefl240: 3000 + speedabovefl100: 250 + rodabovefl100: 10000 + speedbelowfl100: 250 + rodbelowfl100: 10000 + speedapproach: 175 +MD10: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MD11: + speedabovefl240: 300 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 150 +MD81: + speedabovefl240: 250 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2300 + speedapproach: 125 +MD82: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1500 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 130 +MD83: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1500 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 144 +MD87: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 140 +MD88: + speedabovefl240: 250 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 2300 + speedapproach: 130 +MD90: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 1000 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 138 +M18T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MG21: + speedabovefl240: 350 + rodabovefl240: 3000 + speedabovefl100: 250 + rodabovefl100: 10000 + speedbelowfl100: 250 + rodbelowfl100: 10000 + speedapproach: 175 +MG23: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MG29: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MG31: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MI8: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MI26: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MI38: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MU2: + speedabovefl240: 270 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 110 +CP20: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CP23: + speedabovefl240: 130 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 500 + speedapproach: 60 +M101: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +M17: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +M55: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AC50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AC6L: + speedabovefl240: 180 + rodabovefl240: 2000 + speedabovefl100: 180 + rodabovefl100: 2000 + speedbelowfl100: 180 + rodbelowfl100: 1000 + speedapproach: 140 +AC80: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AC90: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +T6: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +T38: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +F5: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TOR: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P66P: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P66T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P180: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 120 +P808: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CP30: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CP75: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CP80: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PC6T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PC12: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PC21: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PC24: + speedabovefl240: 250 + rodabovefl240: 2015 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PC7: + speedabovefl240: 230 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 90 +PC9: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA27: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P28A: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PAY1: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PAY2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 104 + rodabovefl100: 2000 + speedbelowfl100: 104 + rodbelowfl100: 2000 + speedapproach: 104 +PAY3: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 109 + rodabovefl100: 2000 + speedbelowfl100: 109 + rodbelowfl100: 2000 + speedapproach: 109 +PAY4: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA18: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA23: + speedabovefl240: 160 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 85 +P28B: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P28R: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P28T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA31: + speedabovefl240: 200 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 90 +P32R: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P32T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA34: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA38: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA46: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P46T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA47: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA32: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +PA44: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AN2: + speedabovefl240: 180 + rodabovefl240: 2000 + speedabovefl100: 180 + rodabovefl100: 2000 + speedbelowfl100: 180 + rodbelowfl100: 1000 + speedapproach: 140 +AN28: + speedabovefl240: 170 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 90 +M18: + speedabovefl240: 100 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 500 + speedapproach: 80 +PZ04: + speedabovefl240: 80 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 500 + speedapproach: 50 +PRM1: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +H25C: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +H25B: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +DR40: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +R100: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +R22: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +R44: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +B1: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SBR1: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SBR2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SS2: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SB05: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SB20: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SF34: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SB39: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SB37: + speedabovefl240: 350 + rodabovefl240: 20000 + speedabovefl100: 250 + rodabovefl100: 10000 + speedbelowfl100: 250 + rodbelowfl100: 10000 + speedapproach: 120 +SF25: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +AS25: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 97 +JAGR: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SH33: + speedabovefl240: 180 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 100 +SC7: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SH36: + speedabovefl240: 180 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 800 + speedapproach: 100 +H53S: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +S61: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +S61R: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +S76: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +S92: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +H53: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +H60: + speedabovefl240: 150 + rodabovefl240: 2000 + speedabovefl100: 70 + rodabovefl100: 2000 + speedbelowfl100: 70 + rodbelowfl100: 1000 + speedapproach: 50 +RALL: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TRIN: + speedabovefl240: 180 + rodabovefl240: 2000 + speedabovefl100: 180 + rodabovefl100: 2000 + speedbelowfl100: 180 + rodbelowfl100: 1000 + speedapproach: 140 +TAMP: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TB30: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TB31: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TBM7: + speedabovefl240: 240 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 80 +TBM8: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TOBA: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SU17: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SU24: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SU25: + speedabovefl240: 300 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 7000 + speedbelowfl100: 250 + rodbelowfl100: 5000 + speedapproach: 170 +SU27: + speedabovefl240: 350 + rodabovefl240: 15000 + speedabovefl100: 250 + rodabovefl100: 20000 + speedbelowfl100: 250 + rodbelowfl100: 9000 + speedapproach: 140 +SU80: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SU95: + speedabovefl240: 280 + rodabovefl240: 1500 + speedabovefl100: 210 + rodabovefl100: 1500 + speedbelowfl100: 210 + rodbelowfl100: 2800 + speedapproach: 210 +SW2: + speedabovefl240: 180 + rodabovefl240: 2000 + speedabovefl100: 130 + rodabovefl100: 2000 + speedbelowfl100: 130 + rodbelowfl100: 1500 + speedapproach: 115 +SW3: + speedabovefl240: 260 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 1500 + speedapproach: 120 +SW4: + speedabovefl240: 200 + rodabovefl240: 2000 + speedabovefl100: 140 + rodabovefl100: 2000 + speedbelowfl100: 140 + rodbelowfl100: 1000 + speedapproach: 115 +SJ30: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +SX30: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +C160: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +T134: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +T154: + speedabovefl240: 290 + rodabovefl240: 1500 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 130 +T160: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +T204: + speedabovefl240: 290 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 140 +T22M: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +TU95: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +VC10: + speedabovefl240: 300 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3000 + speedapproach: 150 +VISC: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +P68: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +MA60: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +YK40: + speedabovefl240: 200 + rodabovefl240: 2000 + speedabovefl100: 200 + rodabovefl100: 2000 + speedbelowfl100: 200 + rodbelowfl100: 2500 + speedapproach: 120 +YK42: + speedabovefl240: 270 + rodabovefl240: 1000 + speedabovefl100: 250 + rodabovefl100: 800 + speedbelowfl100: 250 + rodbelowfl100: 3500 + speedapproach: 130 +CH10: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CH15: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CH18: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CH30: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CH50: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CH20: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CH2T: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 +CH25: + speedabovefl240: 250 + rodabovefl240: 2000 + speedabovefl100: 250 + rodabovefl100: 2000 + speedbelowfl100: 250 + rodbelowfl100: 2000 + speedapproach: 140 diff --git a/package-lock.json b/package-lock.json index beaf8da..8f6c87f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,9 @@ "@nestjs/core": "^9.0.0", "@nestjs/mongoose": "^9.2.0", "@nestjs/platform-express": "^9.0.0", + "@nestjs/swagger": "^6.1.2", + "class-transformer": "^0.5.1", + "class-validator": "^0.13.2", "helmet": "^6.0.0", "js-yaml": "^4.1.0", "mongoose": "^6.6.7", @@ -1428,6 +1431,25 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, "node_modules/@nestjs/cli": { "version": "9.1.4", "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.4.tgz", @@ -1571,6 +1593,25 @@ } } }, + "node_modules/@nestjs/mapped-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.1.0.tgz", + "integrity": "sha512-+2kSly4P1QI+9eGt+/uGyPdEG1hVz7nbpqPHWZVYgoqz8eOHljpXPag+UCVRw9zo2XCu4sgNUIGe8Uk0+OvUQg==", + "peerDependencies": { + "@nestjs/common": "^7.0.8 || ^8.0.0 || ^9.0.0", + "class-transformer": "^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0", + "class-validator": "^0.11.1 || ^0.12.0 || ^0.13.0", + "reflect-metadata": "^0.1.12" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/mongoose": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-9.2.0.tgz", @@ -1699,6 +1740,29 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/@nestjs/swagger": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-6.1.2.tgz", + "integrity": "sha512-RU1DeTDyuN/lRXKFWaf7I9LYF34/ale3IIGeY3romAcXL/N9W0+50Ek3ou+Ajd5FqpLqzt7saYhnaQegVuU4UQ==", + "dependencies": { + "@nestjs/mapped-types": "1.1.0", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "4.14.0" + }, + "peerDependencies": { + "@fastify/static": "^6.0.0", + "@nestjs/common": "^9.0.0", + "@nestjs/core": "^9.0.0", + "reflect-metadata": "^0.1.12" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + } + } + }, "node_modules/@nestjs/testing": { "version": "9.1.5", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.1.5.tgz", @@ -2460,6 +2524,11 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2511,6 +2580,17 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", @@ -2584,7 +2664,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2621,6 +2700,36 @@ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -3088,6 +3197,14 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -3109,6 +3226,20 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "node_modules/class-validator": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", + "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "dependencies": { + "libphonenumber-js": "^1.9.43", + "validator": "^13.7.0" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -3212,6 +3343,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3263,6 +3402,11 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -3418,6 +3562,11 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", @@ -3443,6 +3592,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3546,8 +3703,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -4355,6 +4511,17 @@ "node": ">=12" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -4385,6 +4552,25 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4551,6 +4737,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/helmet": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/helmet/-/helmet-6.0.0.tgz", @@ -4589,6 +4780,18 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -4818,7 +5021,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -5915,6 +6117,11 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.14.tgz", + "integrity": "sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==" + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -5998,7 +6205,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6034,7 +6240,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -6049,7 +6254,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -6194,6 +6398,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -6361,6 +6588,11 @@ "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", "dev": true }, + "node_modules/node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -6401,6 +6633,20 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6422,6 +6668,17 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7266,7 +7523,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -7341,6 +7597,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -7405,8 +7666,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sisteransi": { "version": "1.0.5", @@ -7561,7 +7821,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7575,7 +7834,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7696,6 +7954,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-ui-dist": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.14.0.tgz", + "integrity": "sha512-TBzhheU15s+o54Cgk9qxuYcZMiqSm/SkvKnapoGHOF66kz0Y5aGjpzj5BT/vpBbn6rTPJ9tUYXQxuDWfsjiGMw==" + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -7714,6 +7977,33 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -8260,6 +8550,14 @@ "node": ">=10.12.0" } }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -8393,6 +8691,14 @@ "node": ">= 8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", @@ -8519,8 +8825,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", @@ -9652,6 +9957,22 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + } + }, "@nestjs/cli": { "version": "9.1.4", "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.4.tgz", @@ -9732,6 +10053,12 @@ "uuid": "9.0.0" } }, + "@nestjs/mapped-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.1.0.tgz", + "integrity": "sha512-+2kSly4P1QI+9eGt+/uGyPdEG1hVz7nbpqPHWZVYgoqz8eOHljpXPag+UCVRw9zo2XCu4sgNUIGe8Uk0+OvUQg==", + "requires": {} + }, "@nestjs/mongoose": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-9.2.0.tgz", @@ -9828,6 +10155,18 @@ } } }, + "@nestjs/swagger": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-6.1.2.tgz", + "integrity": "sha512-RU1DeTDyuN/lRXKFWaf7I9LYF34/ale3IIGeY3romAcXL/N9W0+50Ek3ou+Ajd5FqpLqzt7saYhnaQegVuU4UQ==", + "requires": { + "@nestjs/mapped-types": "1.1.0", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "4.14.0" + } + }, "@nestjs/testing": { "version": "9.1.5", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.1.5.tgz", @@ -10462,6 +10801,11 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -10497,6 +10841,14 @@ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, "ajv": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", @@ -10544,8 +10896,7 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -10570,6 +10921,32 @@ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -10908,6 +11285,11 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -10926,6 +11308,20 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "class-validator": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", + "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "requires": { + "libphonenumber-js": "^1.9.43", + "validator": "^13.7.0" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -10999,6 +11395,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -11041,6 +11442,11 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -11161,6 +11567,11 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", @@ -11176,6 +11587,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -11252,8 +11668,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -11875,6 +12290,14 @@ "universalify": "^2.0.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, "fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -11898,6 +12321,22 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -12013,6 +12452,11 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "helmet": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/helmet/-/helmet-6.0.0.tgz", @@ -12042,6 +12486,15 @@ "toidentifier": "1.0.1" } }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -12204,8 +12657,7 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", @@ -13036,6 +13488,11 @@ "type-check": "~0.4.0" } }, + "libphonenumber-js": { + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.14.tgz", + "integrity": "sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==" + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -13100,7 +13557,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -13124,7 +13580,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "requires": { "semver": "^6.0.0" }, @@ -13132,8 +13587,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -13241,6 +13695,23 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -13376,6 +13847,11 @@ "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", "dev": true }, + "node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" + }, "node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -13405,6 +13881,14 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -13420,6 +13904,17 @@ "path-key": "^3.0.0" } }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14010,7 +14505,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -14077,6 +14571,11 @@ "send": "0.18.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -14126,8 +14625,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sisteransi": { "version": "1.0.5", @@ -14256,7 +14754,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14267,7 +14764,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -14350,6 +14846,11 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "swagger-ui-dist": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.14.0.tgz", + "integrity": "sha512-TBzhheU15s+o54Cgk9qxuYcZMiqSm/SkvKnapoGHOF66kz0Y5aGjpzj5BT/vpBbn6rTPJ9tUYXQxuDWfsjiGMw==" + }, "symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -14362,6 +14863,26 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -14724,6 +15245,11 @@ "convert-source-map": "^1.6.0" } }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -14824,6 +15350,14 @@ "isexe": "^2.0.0" } }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", @@ -14913,8 +15447,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", diff --git a/package.json b/package.json index 150960c..3cbfe95 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,9 @@ "@nestjs/core": "^9.0.0", "@nestjs/mongoose": "^9.2.0", "@nestjs/platform-express": "^9.0.0", + "@nestjs/swagger": "^6.1.2", + "class-transformer": "^0.5.1", + "class-validator": "^0.13.2", "helmet": "^6.0.0", "js-yaml": "^4.1.0", "mongoose": "^6.6.7", diff --git a/src/app.module.ts b/src/app.module.ts index 408e8ff..3ad2139 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -2,6 +2,8 @@ import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { MongooseModule } from '@nestjs/mongoose'; import Configuration from './config/configuration'; +import { VersioningModule } from './versioning/versioning.module'; +import { PerformanceModule } from './performance/performance.module'; @Module({ imports: [ @@ -20,8 +22,8 @@ import Configuration from './config/configuration'; )}`, }), }), + VersioningModule, + PerformanceModule, ], - controllers: [], - providers: [], }) export class AppModule {} diff --git a/src/performance/models/performance.model.ts b/src/performance/models/performance.model.ts new file mode 100644 index 0000000..fab07e6 --- /dev/null +++ b/src/performance/models/performance.model.ts @@ -0,0 +1,25 @@ +import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; +import { PerformanceEntry } from './performanceentry.model'; + +export type PerformanceDocument = Performance & Document; + +@Schema() +export class Performance { + @Prop({ required: true }) + icaoCode: string; + + @Prop({ required: true, type: PerformanceEntry }) + aboveFL240: PerformanceEntry; + + @Prop({ required: true, type: PerformanceEntry }) + aboveFL100: PerformanceEntry; + + @Prop({ required: true, type: PerformanceEntry }) + belowFL100: PerformanceEntry; + + @Prop({ required: true }) + minimalApproachSpeed: number; +} + +export const PerformanceSchema = SchemaFactory.createForClass(Performance); diff --git a/src/performance/models/performanceentry.model.ts b/src/performance/models/performanceentry.model.ts new file mode 100644 index 0000000..6f1b9a0 --- /dev/null +++ b/src/performance/models/performanceentry.model.ts @@ -0,0 +1,16 @@ +import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; + +export type PerformanceEntryDocument = PerformanceEntry & Document; + +@Schema() +export class PerformanceEntry { + @Prop({ required: true }) + speed: number; + + @Prop({ required: true }) + rateOfDescend: number; +} + +export const PerformanceEntrySchema = + SchemaFactory.createForClass(PerformanceEntry); diff --git a/src/performance/performance.module.ts b/src/performance/performance.module.ts new file mode 100644 index 0000000..58d94a9 --- /dev/null +++ b/src/performance/performance.module.ts @@ -0,0 +1,17 @@ +import { Module } from '@nestjs/common'; +import { MongooseModule } from '@nestjs/mongoose'; +import { PerformanceSchema } from './models/performance.model'; +import { PerformanceService } from './performance.service'; +import { VersioningModule } from '../versioning/versioning.module'; + +@Module({ + imports: [ + MongooseModule.forFeature([ + { name: 'performance', schema: PerformanceSchema }, + ]), + VersioningModule, + ], + providers: [PerformanceService], + exports: [MongooseModule, PerformanceService], +}) +export class PerformanceModule {} diff --git a/src/performance/performance.service.spec.ts b/src/performance/performance.service.spec.ts new file mode 100644 index 0000000..c7b2cfb --- /dev/null +++ b/src/performance/performance.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { PerformanceService } from './performance.service'; + +describe('PerformanceService', () => { + let service: PerformanceService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [PerformanceService], + }).compile(); + + service = module.get(PerformanceService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/performance/performance.service.ts b/src/performance/performance.service.ts new file mode 100644 index 0000000..628f2cf --- /dev/null +++ b/src/performance/performance.service.ts @@ -0,0 +1,99 @@ +import { Injectable } from '@nestjs/common'; +import { InjectModel } from '@nestjs/mongoose'; +import { readFileSync } from 'fs'; +import * as yaml from 'js-yaml'; +import { Model } from 'mongoose'; +import { join } from 'path'; +import { SemanticVersionDto } from 'src/versioning/dto/semanticversion.dto'; +import { VersioningService } from '../versioning/versioning.service'; +import { PerformanceDocument } from './models/performance.model'; + +const COMPONENT_NAME = 'performance'; + +@Injectable() +export class PerformanceService { + private static readPerformanceFile(): Record { + return yaml.load( + readFileSync(join(process.cwd(), 'config/performance.yaml'), 'utf8'), + ) as Record; + } + + private async updatePerformanceData( + performanceData: Record, + version: SemanticVersionDto, + ): Promise { + return this.performanceModel.deleteMany({}).then(async () => { + for (const key in performanceData) { + if (key !== 'FILEINFO') { + await this.performanceModel.create({ + icaoCode: key, + aboveFL240: { + speed: performanceData[key]['speedabovefl240'], + rateOfDescend: performanceData[key]['rodabovefl240'], + }, + aboveFL100: { + speed: performanceData[key]['speedabovefl100'], + rateOfDescend: performanceData[key]['rodabovefl100'], + }, + belowFL100: { + speed: performanceData[key]['speedbelowfl100'], + rateOfDescend: performanceData[key]['rodbelowfl100'], + }, + minimalApproachSpeed: performanceData[key]['speedapproach'], + }); + } + } + + await this.versioningService.updateComponent( + COMPONENT_NAME, + performanceData['FILEINFO']['createdAt'], + version, + ); + + return true; + }); + } + + private async validateAndUpdatePerformanceData(): Promise { + // read the performance file and validate the version length + const data = PerformanceService.readPerformanceFile(); + const versionParts = (data['FILEINFO']['version'] as string).split('.'); + if (versionParts.length !== 3) return false; + + // create the fileversion + const fileversion: SemanticVersionDto = { + main: parseInt(versionParts[0]), + major: parseInt(versionParts[1]), + minor: parseInt(versionParts[2]), + }; + + return this.versioningService + .findComponent(COMPONENT_NAME) + .then((resp) => { + if ( + resp === null || + VersioningService.newerVersion( + { + main: resp.versionMain, + major: resp.versionMajor, + minor: resp.versionMinor, + }, + fileversion, + ) + ) { + return this.updatePerformanceData(data, fileversion); + } + + return false; + }) + .catch(() => this.updatePerformanceData(data, fileversion)); + } + + constructor( + @InjectModel(COMPONENT_NAME) + private readonly performanceModel: Model, + private readonly versioningService: VersioningService, + ) { + this.validateAndUpdatePerformanceData(); + } +} diff --git a/src/versioning/dto/semanticversion.dto.ts b/src/versioning/dto/semanticversion.dto.ts new file mode 100644 index 0000000..38062c8 --- /dev/null +++ b/src/versioning/dto/semanticversion.dto.ts @@ -0,0 +1,25 @@ +import { IsNotEmpty } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; + +export class SemanticVersionDto { + @IsNotEmpty() + @ApiProperty({ + description: 'The main version to describe downwards compatibility issues', + example: 1, + }) + main: number; + + @IsNotEmpty() + @ApiProperty({ + description: 'The major version to describe upwards compatibility issues', + example: 1, + }) + major: number; + + @IsNotEmpty() + @ApiProperty({ + description: 'The minor version to describe API stable changes', + example: 1, + }) + minor: number; +} diff --git a/src/versioning/versioning.model.ts b/src/versioning/versioning.model.ts new file mode 100644 index 0000000..5ab9925 --- /dev/null +++ b/src/versioning/versioning.model.ts @@ -0,0 +1,24 @@ +import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; + +export type VersioningDocument = Versioning & Document; + +@Schema() +export class Versioning { + @Prop({ required: true }) + componentName: string; + + @Prop({ required: true }) + createdAt: string; + + @Prop({ required: true }) + versionMain: number; + + @Prop({ required: true }) + versionMajor: number; + + @Prop({ required: true }) + versionMinor: number; +} + +export const VersioningSchema = SchemaFactory.createForClass(Versioning); diff --git a/src/versioning/versioning.module.ts b/src/versioning/versioning.module.ts new file mode 100644 index 0000000..672f126 --- /dev/null +++ b/src/versioning/versioning.module.ts @@ -0,0 +1,15 @@ +import { Module } from '@nestjs/common'; +import { MongooseModule } from '@nestjs/mongoose'; +import { VersioningSchema } from './versioning.model'; +import { VersioningService } from './versioning.service'; + +@Module({ + imports: [ + MongooseModule.forFeature([ + { name: 'versioning', schema: VersioningSchema }, + ]), + ], + providers: [VersioningService], + exports: [MongooseModule, VersioningService], +}) +export class VersioningModule {} diff --git a/src/versioning/versioning.service.spec.ts b/src/versioning/versioning.service.spec.ts new file mode 100644 index 0000000..c599620 --- /dev/null +++ b/src/versioning/versioning.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { VersioningService } from './versioning.service'; + +describe('VersioningService', () => { + let service: VersioningService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [VersioningService], + }).compile(); + + service = module.get(VersioningService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/versioning/versioning.service.ts b/src/versioning/versioning.service.ts new file mode 100644 index 0000000..febab21 --- /dev/null +++ b/src/versioning/versioning.service.ts @@ -0,0 +1,51 @@ +import { Injectable } from '@nestjs/common'; +import { InjectModel } from '@nestjs/mongoose'; +import { Model } from 'mongoose'; +import { SemanticVersionDto } from './dto/semanticversion.dto'; +import { Versioning, VersioningDocument } from './versioning.model'; + +@Injectable() +export class VersioningService { + constructor( + @InjectModel('versioning') + private readonly versioningModel: Model, + ) {} + + async findComponent(name: string): Promise { + return this.versioningModel.findOne({ componentName: name }); + } + + async updateComponent( + name: string, + createdAt: string, + version: SemanticVersionDto, + ): Promise { + return this.versioningModel.deleteOne({ componentName: name }).then(() => { + this.versioningModel.create({ + componentName: name, + createdAt, + versionMain: version.main, + versionMajor: version.major, + versionMinor: version.minor, + }); + }); + } + + static newerVersion( + reference: SemanticVersionDto, + version: SemanticVersionDto, + ): boolean { + // check special cases for the main part + if (reference.main < version.main) return true; + if (reference.main > version.main) return false; + + // main versions are equal + // check the special cases for the major part + if (reference.major < version.major) return true; + if (reference.major > version.major) return false; + + // major versions are equal + // check if the minor versions increased + return reference.minor < version.minor; + } +}