@postalsys/otp-detect 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,282 @@
1
+ // Words that tell a one-time code apart from every other number in an email. The lists are hand
2
+ // written and multilingual; the model learns how much each class matters from how close it is to
3
+ // a candidate. Adding a language means adding phrases here, not retraining on its mail.
4
+ function compile(phrases) {
5
+ return new RegExp(phrases.map(p => `(?:${p})`).join('|'), 'giu');
6
+ }
7
+ /** Phrases that name a one-time code */
8
+ export const STRONG = compile([
9
+ // English
10
+ 'verification code',
11
+ 'verify code',
12
+ 'validation code',
13
+ 'security code',
14
+ 'confirmation code',
15
+ 'one[- ]time (?:pass(?:code|word)|code|pin|password|key)',
16
+ '\\botp\\b',
17
+ 'pass ?code',
18
+ 'log ?in code',
19
+ 'sign[- ]?in code',
20
+ 'access code',
21
+ 'authentication code',
22
+ 'auth code',
23
+ '\\b2fa\\b',
24
+ 'two[- ]factor',
25
+ '2-step',
26
+ 'two[- ]step',
27
+ 'temporary (?:code|password|pin)',
28
+ 'single[- ]use code',
29
+ 'guard code',
30
+ 'magic code',
31
+ 'activation code',
32
+ 'reset code',
33
+ 'recovery code',
34
+ 'device code',
35
+ 'approval code',
36
+ 'your code(?: is)?',
37
+ 'code to (?:sign|log|verify|confirm|continue|complete)',
38
+ 'enter (?:this|the following|the) code',
39
+ // Estonian
40
+ 'kinnituskood',
41
+ 'turvakood',
42
+ 'ühekordne (?:kood|parool|salasõna)',
43
+ 'sisselogimiskood',
44
+ 'kontrollkood',
45
+ 'autentimiskood',
46
+ 'verifitseerimiskood',
47
+ 'aktiveerimiskood',
48
+ 'sinu kood',
49
+ 'teie kood',
50
+ // German
51
+ 'bestätigungscode',
52
+ 'sicherheitscode',
53
+ 'einmal-?(?:code|passwort|kennwort)',
54
+ 'verifizierungscode',
55
+ 'anmeldecode',
56
+ 'ihr code',
57
+ 'zugangscode',
58
+ 'prüfcode',
59
+ // French, Spanish, Portuguese, Italian
60
+ 'code de (?:vérification|confirmation|sécurité|connexion|validation)',
61
+ 'code à usage unique',
62
+ 'votre code',
63
+ 'código de (?:verificación|verificação|seguridad|segurança|confirmación|confirmação|acceso|acesso)',
64
+ 'tu código',
65
+ 'seu código',
66
+ 'codice (?:di verifica|di sicurezza|di accesso|di conferma|otp)',
67
+ // Dutch, Nordic, Finnish
68
+ 'verificatiecode',
69
+ 'beveiligingscode',
70
+ 'inlogcode',
71
+ 'bevestigingscode',
72
+ 'verifieringskod',
73
+ 'engångskod',
74
+ 'säkerhetskod',
75
+ 'bekræftelseskode',
76
+ 'sikkerhedskode',
77
+ 'engangskode',
78
+ 'bekreftelseskode',
79
+ 'vahvistuskoodi',
80
+ 'turvakoodi',
81
+ 'kertakäyttöinen',
82
+ // Baltic, Polish, Czech
83
+ 'verifikācijas kods',
84
+ 'apstiprinājuma kods',
85
+ 'drošības kods',
86
+ 'patvirtinimo kodas',
87
+ 'saugos kodas',
88
+ 'kod weryfikacyjny',
89
+ 'kod potwierdzający',
90
+ 'kod jednorazowy',
91
+ 'ověřovací kód',
92
+ 'bezpečnostní kód',
93
+ // Russian, Ukrainian
94
+ 'код подтверждения',
95
+ 'проверочный код',
96
+ 'код для входа',
97
+ 'одноразов\\p{L}* (?:код|пароль)',
98
+ 'код безопасности',
99
+ 'ваш код',
100
+ 'код підтвердження',
101
+ // CJK, Turkish
102
+ '验证码',
103
+ '驗證碼',
104
+ '認証コード',
105
+ '確認コード',
106
+ 'ワンタイム',
107
+ '인증번호',
108
+ '인증 코드',
109
+ 'doğrulama kodu',
110
+ 'güvenlik kodu'
111
+ ]);
112
+ /** Generic words for a code or secret, weaker evidence on their own */
113
+ export const WEAK = compile([
114
+ '\\bcodes?\\b',
115
+ '\\bkood\\b',
116
+ '\\bpin\\b',
117
+ '\\bpassword\\b',
118
+ '\\bparool\\b',
119
+ '\\bsalasõna\\b',
120
+ '\\btoken\\b',
121
+ '\\bkods\\b',
122
+ '\\bkodas\\b',
123
+ '\\bkode\\b',
124
+ '\\bkod\\b',
125
+ '\\bkoodi\\b',
126
+ '\\bcodice\\b',
127
+ '\\bcódigo\\b',
128
+ // \b only knows ASCII word characters
129
+ '(?<!\\p{L})код(?!\\p{L})',
130
+ 'コード',
131
+ '码',
132
+ '碼',
133
+ 'kontrollsõna'
134
+ ]);
135
+ /** How a one-time code is introduced or limited: instructions, expiry, warnings */
136
+ export const CUE = compile([
137
+ '\\benter\\b',
138
+ '\\btype\\b',
139
+ '\\bpaste\\b',
140
+ 'expires?',
141
+ 'valid (?:for|until)',
142
+ '\\bminutes?\\b',
143
+ '\\bmins?\\b',
144
+ "(?:do not|don't|never) share",
145
+ "(?:did not|didn't) (?:request|try|attempt)",
146
+ 'ignore this (?:e-?mail|message)',
147
+ 'sisesta',
148
+ 'kehtib',
149
+ 'kehtiv',
150
+ 'minuti',
151
+ 'ära jaga',
152
+ 'eingeben',
153
+ 'gültig',
154
+ 'minuten',
155
+ 'nicht weiter',
156
+ 'ingres[ae]',
157
+ 'introduce',
158
+ 'válido',
159
+ 'minutos',
160
+ 'saisissez',
161
+ 'valable',
162
+ 'введите',
163
+ 'действител',
164
+ 'минут',
165
+ '分钟',
166
+ '有效'
167
+ ]);
168
+ /** Words that introduce the other kinds of numbers an email is full of */
169
+ export const NEGATIVE = compile([
170
+ '\\border\\b',
171
+ 'invoice',
172
+ 'receipt',
173
+ 'tracking',
174
+ 'shipment',
175
+ 'parcel',
176
+ 'package',
177
+ '\\bphone\\b',
178
+ '\\btel\\b',
179
+ '\\bfax\\b',
180
+ '\\bmobile\\b',
181
+ '\\bref(?:erence)?\\b',
182
+ 'customer',
183
+ 'account (?:no|number)',
184
+ 'booking',
185
+ 'reservation',
186
+ 'ticket',
187
+ 'promo',
188
+ 'discount',
189
+ 'coupon',
190
+ 'voucher',
191
+ 'gift',
192
+ '\\bzip\\b',
193
+ 'postal',
194
+ 'price',
195
+ '\\btotal\\b',
196
+ 'amount',
197
+ '\\biban\\b',
198
+ '\\bvat\\b',
199
+ 'license',
200
+ 'serial',
201
+ '\\bid\\b',
202
+ 'member',
203
+ 'transaction',
204
+ 'tellimus',
205
+ '\\barve\\b',
206
+ 'viitenumber',
207
+ 'telefon',
208
+ 'pakk',
209
+ 'pakiautomaat',
210
+ 'kupong',
211
+ 'sooduskood',
212
+ '\\bsumma\\b',
213
+ 'kokku',
214
+ '\\bhind\\b',
215
+ 'registrikood',
216
+ 'isikukood',
217
+ 'bestellung',
218
+ 'rechnung',
219
+ 'sendungsnummer',
220
+ 'kundennummer',
221
+ 'gutschein',
222
+ 'pedido',
223
+ 'factura',
224
+ 'commande',
225
+ 'facture',
226
+ 'заказ',
227
+ 'счет'
228
+ ]);
229
+ /** Codes that are handed out but prove nothing: promotions, referrals, invitations, gifts */
230
+ export const PROMO = compile([
231
+ 'promo',
232
+ 'discount',
233
+ 'coupon',
234
+ 'voucher',
235
+ 'referral',
236
+ '\\brefer\\b',
237
+ 'invite',
238
+ 'invitation',
239
+ '\\bgift\\b',
240
+ 'redeem',
241
+ '\\boffer\\b',
242
+ '\\bsale\\b',
243
+ '\\d+ ?% off',
244
+ '\\bfree\\b',
245
+ '\\bsave\\b',
246
+ 'share (?:your|this) code',
247
+ 'friends?',
248
+ '\\bvip\\b',
249
+ 'checkout',
250
+ 'sooduskood',
251
+ 'soodus',
252
+ 'allahindlus',
253
+ 'kinkekaart',
254
+ 'kupong',
255
+ 'tasuta',
256
+ 'gutschein',
257
+ 'rabatt',
258
+ 'empfehl',
259
+ 'descuento',
260
+ 'cupón',
261
+ 'réduction',
262
+ 'parrainage',
263
+ 'скидк',
264
+ 'промокод',
265
+ '优惠'
266
+ ]);
267
+ /** Start and end offsets of every match, sorted by start */
268
+ export function findAll(re, text) {
269
+ const out = [];
270
+ re.lastIndex = 0;
271
+ for (let m = re.exec(text); m; m = re.exec(text)) {
272
+ out.push({ start: m.index, end: m.index + m[0].length });
273
+ if (m[0].length === 0) {
274
+ re.lastIndex++;
275
+ }
276
+ }
277
+ return out;
278
+ }
279
+ export function matches(re, text) {
280
+ re.lastIndex = 0;
281
+ return re.test(text);
282
+ }
@@ -0,0 +1,2 @@
1
+ import type { Model } from './model.js';
2
+ export declare const MODEL: Model;
@@ -0,0 +1 @@
1
+ export const MODEL = { "version": "1", "featureNames": ["len", "digits", "upper", "lower", "isDigits", "isUpperAlpha", "isMixedCase", "kindGrouped", "kindSpaced", "kindDashedPart", "hasDash", "leadingZero", "distinctRatio", "trivialSequence", "looksYear", "colonBefore", "hashBefore", "currencyNear", "plusOrParenBefore", "digitNearby", "percentAfter", "strongBefore", "strongAfter", "weakBefore", "weakAfter", "cueBefore", "cueAfter", "negBefore", "negAfter", "strongInLine", "weakInLine", "negInLine", "strongRank", "lineLen", "aloneOnLine", "blockLen", "aloneInBlock", "fontSize", "fontRatio", "isLargestFont", "bold", "letterSpacing", "link", "heading", "mono", "hidden", "quoted", "relPosition", "fromHtml", "occurrences", "inOtherDoc", "inSubject", "subjectStrong", "subjectWeak", "subjectNeg", "docStrong", "docCue", "docLen", "candidates", "distinctCodes", "candidateIndex", "promoBefore", "promoAfter", "promoInLine", "docPromo", "subjectPromo", "vowelRatio", "longestLetterRun", "caseChanges"], "trees": [{ "feature": [36, 21, 24, 57, 58, 37], "threshold": [1.0000000180025095e-35, 34.50000000000001, 38.50000000000001, 7.135289099297014, 12.500000000000002, 15.875000000000002], "left": [1, -1, 3, -2, 5, -5], "right": [4, 2, -4, -3, -7, -6], "leaves": [3.8882785241515254, 0.7450066803648863, -5.441726646764886, -5.411048231323532, -3.9141191158872726, 5.01409297957159, -3.840143317873001] }, { "feature": [26, 66, 4, 21, 60, 34], "threshold": [126.50000000000001, 0.23303167420814483, 1.0000000180025095e-35, 34.50000000000001, 1.5000000000000002, 1.0000000180025095e-35], "left": [1, -1, 3, 4, -3, -5], "right": [2, -2, -7, 5, -4, -6], "leaves": [0.1126007182736782, -0.12421089923237993, -0.1984394335237441, -1.5731304755560664, -0.06372182184129996, -0.42017673070320705, -0.02206959856470396] }, { "feature": [1, 27, 15, 47, 24, 33], "threshold": [5.500000000000001, 999.5000000000001, 1.0000000180025095e-35, 0.9650398775634544, 999.5000000000001, 18.500000000000004], "left": [-1, -2, 3, -3, -5, -6], "right": [1, 2, 4, -4, 5, -7], "leaves": [-0.07759967722810494, -0.06941017101129604, 0.05458438762122539, 1.19156752970599, 0.18372429232440352, 2.4911293337044587, 0.024162786766842886] }, { "feature": [1, 0, 15, 59, 24, 33], "threshold": [5.500000000000001, 7.500000000000001, 1.0000000180025095e-35, 11.500000000000002, 61.50000000000001, 7.500000000000001], "left": [-1, 2, -2, 4, -3, -5], "right": [1, -7, 3, 5, -4, -6], "leaves": [-0.07504114626038838, 0.06751516585398959, 0.05001106412315731, 0.6047162107474564, 1.312434218931232, -0.1021531598035458, -0.09137615054500225] }, { "feature": [66, 36, 58, 21, 24, 37], "threshold": [0.23303167420814483, 1.0000000180025095e-35, 12.500000000000002, 99.50000000000001, 6.500000000000001, 15.875000000000002], "left": [-1, -2, 3, -3, -4, -5], "right": [1, 2, -7, 4, 5, -6], "leaves": [0.007892574376598205, -0.08732521964832854, 0.03833037795008976, 0.004166289829066903, -0.03987093062623498, -3.501125334526686, -0.009934098411525642] }, { "feature": [1, 0, 27, 24, 23, 62], "threshold": [5.500000000000001, 7.500000000000001, 999.5000000000001, 45.50000000000001, 1.5000000000000002, 493.50000000000006], "left": [-1, 2, -2, -3, -4, -5], "right": [1, -7, 3, 4, 5, -6], "leaves": [-0.06872355731753936, -0.06599071768579139, 0.08167518243047872, 2.6357770014731283, 1.6662534866490082, 0.19739571524460686, -0.09737872390589672] }, { "feature": [26, 66, 1, 32, 0, 24], "threshold": [126.50000000000001, 0.23303167420814483, 5.500000000000001, 1.0000000180025095e-35, 7.500000000000001, 61.50000000000001], "left": [1, -1, -3, 4, 5, -4], "right": [2, -2, 3, -7, -6, -5], "leaves": [0.10299837183336742, -0.10710978889126244, -0.08213993606622053, 0.05944244665049382, 0.40219890890858934, -0.2014740452083119, -0.05497681315633671] }, { "feature": [26, 66, 1, 32, 0, 47], "threshold": [126.50000000000001, 0.23303167420814483, 5.500000000000001, 1.0000000180025095e-35, 7.500000000000001, 0.8764291360082893], "left": [1, -1, -3, 4, -4, -5], "right": [2, -2, 3, -7, 5, -6], "leaves": [0.10160997285571788, -0.09372831225017127, -0.07821833269440398, 0.18019265884749647, -0.08567835979205224, -1.368924016442686, -0.05604101310649145] }, { "feature": [26, 66, 35, 37, 59, 4], "threshold": [112.50000000000001, 0.23303167420814483, 7.500000000000001, 14.833333333333334, 1.5000000000000002, 1.0000000180025095e-35], "left": [1, 2, 3, -1, 5, -5], "right": [4, -4, -3, -2, -7, -6], "leaves": [1.2240462320244645, 0.19485874696993366, 0.06963043138873647, -0.08743760672871598, -0.11487373646697524, 0.17786871543080954, -0.06252483446910619] }, { "feature": [1, 26, 66, 0, 25, 27], "threshold": [5.500000000000001, 62.50000000000001, 0.09307359307359309, 6.500000000000001, 36.50000000000001, 999.5000000000001], "left": [1, 2, 3, -1, -2, -6], "right": [5, -5, -4, 4, -3, -7], "leaves": [0.09920686100319741, 2.2055647928668556, 0.5744343502079821, -0.04923772113614876, -0.07500973391927501, -0.07640657396807307, 0.08190482742172149] }, { "feature": [26, 66, 15, 57, 58, 24], "threshold": [126.50000000000001, 0.23303167420814483, 1.0000000180025095e-35, 7.03922194562531, 12.500000000000002, 1.5000000000000002], "left": [1, -1, -3, 4, -4, -5], "right": [2, -2, 3, -7, 5, -6], "leaves": [0.10189554924360399, -0.07817335522007458, -0.06720260976787838, 0.09671661572530338, 2.311134435707112, 0.2548018106991937, -0.08047615818714456] }, { "feature": [1, 32, 2, 27, 15, 47], "threshold": [5.500000000000001, 3.5000000000000004, 1.0000000180025095e-35, 63.50000000000001, 1.0000000180025095e-35, 0.021647121341401235], "left": [-1, 2, 3, -2, 5, -3], "right": [1, -7, -6, 4, -5, -4], "leaves": [-0.06154257674100843, -0.12434733173764233, 0.35144791990997937, 0.054350758304896954, 0.1934966198566453, -0.24226422743098383, -0.062436387441639554] }, { "feature": [1, 23, 64, 27, 4, 7], "threshold": [5.500000000000001, 3.5000000000000004, 1.0000000180025095e-35, 999.5000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, -1, -4, -5, -6], "right": [3, -3, -2, 4, 5, -7], "leaves": [0.09965296023925137, -0.14972566214187402, -0.06840951217525097, -0.07285545089362043, -0.1134311771839358, 0.12880730943877391, -0.006609826494015588] }, { "feature": [1, 26, 66, 0, 26, 0], "threshold": [5.500000000000001, 64.50000000000001, 0.09307359307359309, 4.500000000000001, 49.50000000000001, 7.500000000000001], "left": [1, 2, 3, -1, -2, -6], "right": [5, -5, -4, 4, -3, -7], "leaves": [0.028412839988885052, 0.2175500793131116, 1.1043248730438133, -0.02692760458849532, -0.0780118670868647, 0.07523651987557553, -0.0655533135320026] }, { "feature": [1, 26, 66, 0, 0, 27], "threshold": [5.500000000000001, 64.50000000000001, 0.09307359307359309, 4.500000000000001, 7.500000000000001, 999.5000000000001], "left": [1, 2, 3, -1, 5, -5], "right": [4, -4, -3, -2, -7, -6], "leaves": [-0.0064563479783610435, 0.31431776572782494, -0.03717117089491167, -0.07277272171412301, -0.056573765881990715, 0.0959178323592945, -0.0780911624958964] }, { "feature": [26, 59, 24, 21, 21, 36], "threshold": [126.50000000000001, 1.5000000000000002, 8.500000000000002, 34.50000000000001, 161.50000000000003, 1.0000000180025095e-35], "left": [-1, -2, -3, -4, -5, -6], "right": [1, 2, 3, 4, 5, -7], "leaves": [0.066404928582682, 0.08204884163723153, 0.029032661150688418, -0.1999408304251821, 0.0994336785862256, -0.04871236469035129, -0.1962238472924949] }, { "feature": [23, 47, 32, 66, 28, 21], "threshold": [3.5000000000000004, 0.5373804904526719, 1.0000000180025095e-35, 0.22649572649572652, 1.5000000000000002, 32.50000000000001], "left": [1, -1, 3, 4, -3, -6], "right": [2, -2, 5, -5, -4, -7], "leaves": [0.08960577022513644, -0.20318676203570957, -0.9558776484781432, 0.05395194124094868, -0.07925934461384149, -0.32741340640579747, -0.056026457674541376] }, { "feature": [1, 23, 32, 4, 7, 0], "threshold": [5.500000000000001, 5.500000000000001, 3.5000000000000004, 1.0000000180025095e-35, 1.0000000180025095e-35, 6.500000000000001], "left": [1, -1, 3, -3, -4, -5], "right": [2, -2, -7, 4, 5, -6], "leaves": [0.037756191332697336, -0.06442776877331292, -0.14195536202038458, 0.11608449981302177, 0.05844737352004832, -0.19326875490821552, -0.06225072348651393] }, { "feature": [26, 66, 26, 47, 59, 15], "threshold": [64.50000000000001, 0.23303167420814483, 59.50000000000001, 0.24283756819256988, 10.500000000000002, 1.0000000180025095e-35], "left": [1, 2, -1, 4, -2, -6], "right": [5, -5, 3, -4, -3, -7], "leaves": [0.09219292790873983, 1.3651090301810682, -0.040223510564347, 0.020860732572945597, -0.06284893358533923, -0.059200871293507144, 0.04186470687175297] }, { "feature": [1, 26, 60, 27, 4, 7], "threshold": [5.500000000000001, 64.50000000000001, 2.5000000000000004, 999.5000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, -1, -4, -5, -6], "right": [3, -3, -2, 4, 5, -7], "leaves": [0.08908618688260965, -0.09180719761503389, -0.06213908814259531, -0.07114465622907888, -0.11386310944885634, 0.10876154656321105, -0.011057817987156961] }, { "feature": [32, 66, 46, 47, 12, 57], "threshold": [1.0000000180025095e-35, 0.19375000000000003, 1.0000000180025095e-35, 0.23951243972043904, 0.8377192982456142, 7.135289099297014], "left": [1, 2, -1, 4, 5, -4], "right": [3, -3, -2, -7, -6, -5], "leaves": [0.07434953764932464, -0.22832215229334377, -0.06057078378685696, 0.1179606873710729, -0.06344751544559568, -0.05976394564244935, -0.0837462086079242] }, { "feature": [1, 68, 0, 19, 33, 59], "threshold": [5.500000000000001, 1.5000000000000002, 6.500000000000001, 1.0000000180025095e-35, 7.500000000000001, 1.5000000000000002], "left": [1, -1, 3, -3, -5, -6], "right": [2, -2, 4, -4, 5, -7], "leaves": [-0.057623953372950766, 0.06585226759705046, 0.10278825782275168, -0.08889737742421501, -1.1334521458844797, 0.0951416294428382, -0.0770824372436653] }, { "feature": [57, 47, 19, 58, 33, 15], "threshold": [7.03922194562531, 0.27963990580994635, 1.0000000180025095e-35, 12.500000000000002, 8.500000000000002, 1.0000000180025095e-35], "left": [1, 2, 3, -1, -2, -5], "right": [-7, 5, -4, 4, -3, -6], "leaves": [0.05358684852052689, 0.3129165349477694, -0.06862743021099345, -0.10764930120372439, -0.090686647058134, 0.05506341438509954, -0.0676155809323791] }, { "feature": [57, 19, 66, 28, 33, 58], "threshold": [7.03922194562531, 1.0000000180025095e-35, 0.19375000000000003, 1.5000000000000002, 6.500000000000001, 12.500000000000002], "left": [1, 2, 3, -1, 5, -5], "right": [4, -4, -3, -2, -7, -6], "leaves": [-0.6558076502547069, 0.07664822186949886, -0.04235159436577181, -0.09992037852414926, -0.08768447167185009, 0.15528007285850096, -0.07781255708569702] }, { "feature": [15, 26, 60, 10, 27, 1], "threshold": [1.0000000180025095e-35, 124.50000000000001, 2.5000000000000004, 1.0000000180025095e-35, 63.50000000000001, 7.500000000000001], "left": [1, 2, -1, 4, -4, -5], "right": [3, -3, -2, -7, 5, -6], "leaves": [0.06979067358715776, -0.07345337225638991, -0.06097075708454647, -0.11202665588836563, 0.08267576214814058, 0.30926312478829376, -0.16890759712017112] }, { "feature": [1, 47, 57, 32, 2, 19], "threshold": [5.500000000000001, 0.27963990580994635, 7.161233954801744, 3.5000000000000004, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, -1, 4, 5, -4], "right": [3, -3, -2, -7, -6, -5], "leaves": [0.01751149054225924, -0.08993164338177552, -0.07935919273340909, 0.08390145728011433, -0.12076453116283524, -0.14990374762734607, -0.06487124965039141] }, { "feature": [57, 47, 15, 33, 37, 47], "threshold": [7.03922194562531, 0.4117764591662804, 1.0000000180025095e-35, 27.500000000000004, 12.733333333333336, 0.9650398775634544], "left": [1, 2, 3, 4, -1, -6], "right": [5, -5, -4, -3, -2, -7], "leaves": [0.23424769764559913, -0.06962727561898344, 0.052979979511953726, 0.10259306278664454, -0.0852862607604364, -0.07719535636836007, 0.06717025249828514] }, { "feature": [32, 66, 19, 46, 27, 28], "threshold": [2.5000000000000004, 0.19375000000000003, 1.0000000180025095e-35, 1.0000000180025095e-35, 7.500000000000001, 1.5000000000000002], "left": [1, 2, 3, 4, -1, -2], "right": [-7, -6, -5, -4, 5, -3], "leaves": [-0.4401506421727761, -0.3758183879022651, 0.07538137191230561, -0.1581801691142029, -0.0992274062347659, -0.04969484506649975, -0.0647374136030192] }, { "feature": [23, 33, 58, 37, 60, 21], "threshold": [3.5000000000000004, 6.500000000000001, 12.500000000000002, 14.533333333333335, 1.0000000180025095e-35, 34.50000000000001], "left": [-1, 2, 3, -2, -5, -6], "right": [1, 4, -4, -3, 5, -7], "leaves": [0.05598885169780791, 0.27996623696971656, -0.060326811092347145, 0.1502300064690269, 0.006085497044623135, -0.1521251857669204, -0.059272076679060585] }, { "feature": [57, 19, 4, 10, 22, 28], "threshold": [7.161233954801744, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 228.50000000000003, 113.50000000000001], "left": [1, 2, 3, -1, -3, -4], "right": [-7, -6, 4, -2, 5, -5], "leaves": [0.009755584619502334, -0.0989623852058285, 0.16081577553581394, -0.18608749117098838, 0.061516845253612375, -0.09018447332247613, -0.0661020929621987] }, { "feature": [47, 66, 59, 32, 36, 66], "threshold": [0.27963990580994635, 0.3141447368421053, 14.500000000000002, 1.0000000180025095e-35, 1.0000000180025095e-35, 0.23303167420814483], "left": [1, 2, -1, -4, -5, -6], "right": [3, -3, -2, 4, 5, -7], "leaves": [0.057566742055772224, -0.08922362761585802, -0.0718201135134225, 0.0025675715080955897, -0.06399606110381506, -0.6641985465710717, -0.07472484295731903] }, { "feature": [32, 26, 66, 24, 27, 4], "threshold": [2.5000000000000004, 126.50000000000001, 0.24500000000000002, 40.50000000000001, 999.5000000000001, 1.0000000180025095e-35], "left": [1, 2, 3, -1, -4, -5], "right": [-7, 4, -3, -2, 5, -6], "leaves": [0.06925558463778991, 0.2137127688678084, -0.03750020012524384, -0.08550688737620811, -0.03261772015167017, 0.05035648150280532, -0.06566432146815211] }, { "feature": [15, 26, 51, 10, 61, 27], "threshold": [1.0000000180025095e-35, 124.50000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35, 195.50000000000003, 7.500000000000001], "left": [1, -1, -2, 4, -4, -5], "right": [3, 2, -3, -7, 5, -6], "leaves": [0.0348318647136811, -0.06250760222801012, 0.029205535223966496, -0.17085542391073005, -0.35258062116254785, 0.09103282765558078, -0.12541961566659515] }, { "feature": [26, 60, 62, 1, 32, 27], "threshold": [126.50000000000001, 2.5000000000000004, 274.50000000000006, 7.500000000000001, 1.0000000180025095e-35, 999.5000000000001], "left": [1, 2, -1, -2, 5, -5], "right": [4, -4, 3, -3, -7, -6], "leaves": [-0.16178169643699583, 0.07365961942357419, 0.41729421143182654, -0.05540119835640085, -0.11290407177450262, 0.019315831017100053, -0.062051040721758516] }, { "feature": [15, 23, 47, 10, 61, 27], "threshold": [1.0000000180025095e-35, 2.5000000000000004, 0.9650398775634544, 1.0000000180025095e-35, 195.50000000000003, 9.500000000000002], "left": [1, -1, -2, 4, -4, -5], "right": [3, 2, -3, -7, 5, -6], "leaves": [0.04971293792383504, -0.055037359265942144, 0.08040938623863597, -0.17502033264530406, -0.310966212902868, 0.08475456540884609, -0.12092114683511633] }, { "feature": [57, 47, 66, 9, 28, 15], "threshold": [7.105375788875558, 0.30607496322475586, 0.23303167420814483, 1.0000000180025095e-35, 41.50000000000001, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -5], "right": [-7, 5, -4, -3, -2, -6], "leaves": [-0.13894014550925401, 0.07956602460949719, -0.09305231683695038, -0.03819325573873313, -0.08448649177060641, 0.02010627320468523, -0.06502538663804693] }, { "feature": [15, 26, 27, 2, 33, 46], "threshold": [1.0000000180025095e-35, 109.50000000000001, 52.50000000000001, 1.0000000180025095e-35, 16.500000000000004, 1.0000000180025095e-35], "left": [1, -1, 3, 4, -3, -6], "right": [2, -2, 5, -5, -4, -7], "leaves": [0.03646603338626971, -0.04541071789008581, -0.7134351168486657, -0.06743561102627137, -0.00966088050960154, 0.07832994223873896, -0.10855121601142415] }, { "feature": [66, 19, 10, 0, 47, 51], "threshold": [0.3141447368421053, 1.0000000180025095e-35, 1.0000000180025095e-35, 4.500000000000001, 0.5124871214906269, 1.0000000180025095e-35], "left": [1, 2, 3, -1, -2, -3], "right": [-7, -6, -5, 4, 5, -4], "leaves": [-0.05816458193741963, 0.06973115674450324, -0.13801828704146232, 0.12883470421473942, -0.08797945240948381, -0.07696676473216843, -0.0708019613547252] }, { "feature": [23, 29, 35, 58, 55, 60], "threshold": [5.500000000000001, 1.0000000180025095e-35, 6.500000000000001, 12.500000000000002, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, -1, 3, 4, -3, -6], "right": [2, -2, 5, -5, -4, -7], "leaves": [0.07382658334349206, -0.08658457800458431, -0.12582766762506523, 0.062195951787542406, 0.13084689351938403, -0.001482902207272549, -0.0642180994247988] }, { "feature": [57, 47, 66, 19, 15, 47], "threshold": [7.161233954801744, 0.25068184579375535, 0.3141447368421053, 1.0000000180025095e-35, 1.0000000180025095e-35, 0.9650398775634544], "left": [1, 2, 3, -1, -4, -6], "right": [5, 4, -3, -2, -5, -7], "leaves": [0.07302991129780508, -0.08858871101188741, -0.06467915066931458, -0.0682005130940633, 0.030761229751698017, -0.08240237651428452, 0.08449121727504949] }, { "feature": [23, 47, 62, 15, 32, 24], "threshold": [3.5000000000000004, 0.4864079431259541, 331.50000000000006, 1.0000000180025095e-35, 1.0000000180025095e-35, 8.500000000000002], "left": [1, 2, -1, -2, -5, -6], "right": [4, -4, 3, -3, 5, -7], "leaves": [-0.11336560310558484, 0.05842325855657724, 0.19103881742630577, -0.08402468915436682, 0.006863914086355049, 0.018684146204621617, -0.07647328502080415] }, { "feature": [57, 19, 66, 26, 57, 58], "threshold": [7.161233954801744, 1.0000000180025095e-35, 0.3141447368421053, 276.50000000000006, 9.271764540198037, 2.5000000000000004], "left": [1, 2, 3, -1, 5, -5], "right": [4, -4, -3, -2, -7, -6], "leaves": [0.08378018192501155, 0.013795851941120419, -0.047547565902073034, -0.08191104532402872, 0.05009566988297302, -0.10367547427283873, 0.023465232331418378] }, { "feature": [57, 47, 66, 19, 33, 58], "threshold": [7.03922194562531, 0.4037047092129378, 0.23303167420814483, 1.0000000180025095e-35, 6.500000000000001, 13.500000000000002], "left": [1, 2, 3, -1, 5, -5], "right": [4, -4, -3, -2, -7, -6], "leaves": [0.0656492668450338, -0.08493843452031948, -0.027917204223487303, -0.048963497870196784, -0.07139438006470125, 0.10050876334132833, -0.07413836530892778] }, { "feature": [0, 66, 46, 28, 68, 19], "threshold": [4.500000000000001, 0.14835164835164838, 1.0000000180025095e-35, 115.50000000000001, 4.500000000000001, 1.0000000180025095e-35], "left": [-1, 2, 3, 4, -2, -4], "right": [1, -7, -6, 5, -3, -5], "leaves": [-0.07356890051494584, -0.10939003510128767, 0.5815499681354473, 0.05868816667603678, -0.07308907695906829, -0.1267715671853657, -0.03594803349816887] }, { "feature": [23, 47, 59, 47, 57, 57], "threshold": [5.500000000000001, 0.5124871214906269, 1.5000000000000002, 0.27196057539271273, 7.161233954801744, 6.296187660686791], "left": [1, 2, -1, 4, 5, -4], "right": [3, -3, -2, -7, -6, -5], "leaves": [0.22511381423080723, 0.04735054437787416, -0.08778891888186119, -0.09725624721870497, 0.03768093581750734, -0.09374461457341503, -0.05686695331465043] }, { "feature": [32, 61, 19, 4, 27, 27], "threshold": [2.5000000000000004, 195.50000000000003, 1.0000000180025095e-35, 1.0000000180025095e-35, 52.50000000000001, 74.50000000000001], "left": [1, -1, 3, -2, -3, -4], "right": [-7, 2, -6, 4, 5, -5], "leaves": [-0.1090648866956703, -0.0030489127685156734, -0.18541370946973912, 0.4995514893967301, 0.05774412332316734, -0.07750126687032634, -0.05531697681641162] }, { "feature": [32, 64, 23, 60, 47, 28], "threshold": [2.5000000000000004, 1.5000000000000002, 45.50000000000001, 2.5000000000000004, 0.8471308669361834, 110.50000000000001], "left": [1, 2, 3, 4, -1, -4], "right": [-7, -6, 5, -3, -2, -5], "leaves": [0.06806864963022285, -0.11078271927964552, -0.08819895556866013, -0.1385804985266982, 0.005941411845186218, -0.08090394083380606, -0.06252418952468115] }, { "feature": [23, 47, 33, 58, 23, 47], "threshold": [5.500000000000001, 0.5338739559273793, 6.500000000000001, 12.500000000000002, 81.50000000000001, 0.23951243972043904], "left": [1, -1, 3, 4, -3, -6], "right": [2, -2, 5, -5, -4, -7], "leaves": [0.06568127894032198, -0.07758947523211458, 0.06397532795170702, -0.10844654083571292, 0.12135916926637214, -0.003620467935606857, -0.07068435590599902] }, { "feature": [57, 47, 47, 66, 19, 52], "threshold": [7.03922194562531, 0.5124871214906269, 0.5052812090510405, 0.4058823529411765, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -4], "right": [-7, -6, 5, -3, -2, -5], "leaves": [0.045920202141232415, -0.08439436636944257, -0.07825147352897294, -0.10285072985232331, 1.5397512455492057, -0.06553726215881982, -0.04883285008204764] }, { "feature": [64, 26, 32, 10, 66, 47], "threshold": [1.5000000000000002, 64.50000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35, 0.32738095238095244, 0.2144298424894112], "left": [1, -1, 3, 4, -2, -5], "right": [-7, 2, 5, -4, -3, -6], "leaves": [0.054625349928682926, 0.042088716208020835, -0.05557295525778616, -0.0853820835383351, 0.01738711235003938, -0.08279623261999174, -0.0750420324199465] }, { "feature": [0, 0, 27, 12, 10, 25], "threshold": [4.500000000000001, 6.500000000000001, 999.5000000000001, 0.9722222222222223, 1.0000000180025095e-35, 30.500000000000004], "left": [-1, 2, -2, -3, 5, -5], "right": [1, 4, 3, -4, -7, -6], "leaves": [-0.0665084641348372, -0.06773756865558639, 0.08213061523231961, 0.008707273660892237, 0.0959946494141683, -0.018721755428611882, -0.10657264877227242] }, { "feature": [57, 47, 66, 57, 55, 35], "threshold": [7.105375788875558, 0.29496235798369014, 0.3141447368421053, 6.419179932041678, 1.0000000180025095e-35, 14.500000000000002], "left": [1, 2, 3, -1, -5, -6], "right": [4, -4, -3, -2, 5, -7], "leaves": [-0.029658402777855215, 0.06613938086192943, -0.054887359012201244, -0.035191086732012294, -0.10403897389913977, 0.07011248530698093, -0.08220283050064135] }, { "feature": [57, 19, 66, 9, 12, 51], "threshold": [7.161233954801744, 1.0000000180025095e-35, 0.3141447368421053, 1.0000000180025095e-35, 0.6545092838196288, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -6], "right": [5, -5, -4, -3, -2, -7], "leaves": [-0.034769132376311934, 0.05170309773951951, -0.1275930130690831, -0.03606290362693752, -0.07573350554261978, -0.07462776404992119, 0.03403231831955719] }, { "feature": [57, 19, 66, 28, 57, 1], "threshold": [7.03922194562531, 1.0000000180025095e-35, 0.05322128851540617, 110.50000000000001, 9.271764540198037, 9.500000000000002], "left": [1, 2, 3, -1, -5, -6], "right": [4, -4, -3, -2, 5, -7], "leaves": [-0.09504765167242704, 0.05062269544677253, -0.015815146931323926, -0.07685364081523244, -0.06357540506585602, 0.028287884261936704, 0.6888178237585757] }, { "feature": [57, 15, 47, 11, 52, 47], "threshold": [7.161233954801744, 1.0000000180025095e-35, 0.30961640019262465, 1.0000000180025095e-35, 1.0000000180025095e-35, 0.9650398775634544], "left": [1, 2, -1, -2, -3, -6], "right": [5, -5, 3, 4, -4, -7], "leaves": [0.011349881486716678, -0.08328587309548648, -0.027329006235067163, 0.969334788309737, 0.05026709941096626, -0.07602320631614587, 0.062308122946342595] }, { "feature": [23, 61, 57, 57, 37, 60], "threshold": [3.5000000000000004, 195.50000000000003, 6.967438170207934, 6.419179932041678, 23.500000000000004, 42.50000000000001], "left": [1, -1, 3, 4, -3, -6], "right": [2, -2, 5, -5, -4, -7], "leaves": [-0.14244126246838626, 0.05351334719214337, -0.05266916699418466, 0.13407678598362777, 0.02810706952543965, -0.06980786255543044, 0.028913785393939795] }, { "feature": [64, 55, 23, 60, 50, 47], "threshold": [1.5000000000000002, 3.5000000000000004, 39.50000000000001, 5.500000000000001, 1.0000000180025095e-35, 0.23951243972043904], "left": [1, 2, 3, -1, -3, -4], "right": [-7, -6, 4, -2, 5, -5], "leaves": [0.055469763253896, -0.11327740638923132, -0.08187789161189149, 0.04119525926653576, -0.024940808664212215, -0.09526546992234847, -0.07143534675530075] }, { "feature": [57, 47, 47, 66, 9, 33], "threshold": [7.03922194562531, 0.5124871214906269, 0.508992752659849, 0.4058823529411765, 1.0000000180025095e-35, 6.500000000000001], "left": [1, 2, 3, 4, -1, -6], "right": [5, -5, -4, -3, -2, -7], "leaves": [0.03956807444885137, -0.09972576631374164, -0.06917864353285014, 0.6013487727699807, -0.053814039324909316, 0.021388009432454967, -0.0728623998830814] }, { "feature": [23, 47, 66, 49, 33, 57], "threshold": [5.500000000000001, 0.6038371738184855, 0.42481203007518803, 1.5000000000000002, 6.500000000000001, 7.001700788236549], "left": [1, 2, -1, 4, -4, -5], "right": [3, -3, -2, -7, 5, -6], "leaves": [0.0686946256282421, -0.12929476078452024, -0.07938701656938218, 0.04498027561682979, 0.0001475499709575572, -0.09208712032736553, -0.07225324382479294] }, { "feature": [15, 33, 55, 52, 34, 21], "threshold": [1.0000000180025095e-35, 54.50000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 999.5000000000001], "left": [1, 2, 3, -1, -3, -5], "right": [-7, 5, 4, -2, -4, -6], "leaves": [-0.09503388672800524, 0.13005073987929114, -0.053063949879391364, 0.05488906711471919, -0.07131577148837163, 0.04970456938855771, 0.03487702413773731] }, { "feature": [64, 55, 23, 0, 25, 55], "threshold": [1.0000000180025095e-35, 2.5000000000000004, 45.50000000000001, 7.500000000000001, 1.5000000000000002, 1.0000000180025095e-35], "left": [1, 2, -1, -2, -3, -6], "right": [5, -5, 3, 4, -4, -7], "leaves": [0.053249888779517945, 0.013630269275928414, 0.1953349324300138, -0.08257861174242109, -0.07637313905400941, -0.10429988067454306, -0.00023158996788614434] }, { "feature": [15, 1, 34, 59, 0, 10], "threshold": [1.0000000180025095e-35, 6.500000000000001, 1.0000000180025095e-35, 2.5000000000000004, 9.500000000000002, 1.0000000180025095e-35], "left": [1, -1, -2, 4, -3, -6], "right": [5, 2, 3, -5, -4, -7], "leaves": [-0.010106092588314512, -0.03713753330182889, -1.1984440810482242, -0.15947634307949568, -0.2045739735480087, 0.052296210006934456, -0.09644683317707477] }, { "feature": [10, 0, 66, 23, 27, 45], "threshold": [1.0000000180025095e-35, 4.500000000000001, 0.3141447368421053, 45.50000000000001, 999.5000000000001, 1.0000000180025095e-35], "left": [1, -1, 3, -2, -3, -6], "right": [5, 2, -5, 4, -4, -7], "leaves": [-0.05311426716632466, 0.05599251302302858, -0.08245232549422932, 0.02130470072708186, -0.037958469998957224, -0.09021871522466902, 0.17112828078149034] }, { "feature": [12, 0, 0, 47, 7, 15], "threshold": [0.8834841628959277, 4.500000000000001, 6.500000000000001, 0.6582909176466526, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, -1, -2, 4, 5, -3], "right": [-7, 2, 3, -6, -5, -4], "leaves": [-0.07584541412866314, 0.060307611986366055, -0.017699900370715612, 0.05493119582806558, -0.15699034823938407, -0.13153852298782437, -0.03810805012388767] }, { "feature": [26, 55, 34, 24, 67, 59], "threshold": [126.50000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35, 23.500000000000004, 2.5000000000000004, 2.5000000000000004], "left": [-1, 2, -2, -3, 5, -4], "right": [1, -7, 3, 4, -6, -5], "leaves": [0.034507825426108814, -0.013189784448939302, 0.06933212369794571, -0.6790145576677014, -0.22294408012848838, -0.07737648259326883, 0.011902762897310005] }, { "feature": [32, 10, 19, 61, 5, 27], "threshold": [2.5000000000000004, 1.0000000180025095e-35, 1.0000000180025095e-35, 195.50000000000003, 1.0000000180025095e-35, 7.500000000000001], "left": [1, 2, 3, -1, 5, -2], "right": [-7, -6, -5, 4, -4, -3], "leaves": [-0.09478256812757979, -0.20218133485057166, 0.04276519984532389, -0.03274652320844565, -0.0789625285274857, -0.05782750185282422, -0.05022540642342263] }, { "feature": [15, 47, 33, 54, 57, 51], "threshold": [1.0000000180025095e-35, 0.30607496322475586, 53.50000000000001, 1.0000000180025095e-35, 6.81728322602456, 1.0000000180025095e-35], "left": [1, 2, -1, -2, -3, -5], "right": [-7, 5, 3, 4, -4, -6], "leaves": [-0.03157612050895064, 0.03231808708089197, 1.5560974450343865, -0.03467696293975677, -0.08657997985774707, 0.05354465026677829, 0.0330842901159684] }, { "feature": [15, 52, 57, 66, 32, 10], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 6.296187660686791, 0.14835164835164838, 3.5000000000000004, 1.0000000180025095e-35], "left": [1, 2, -1, 4, -2, -6], "right": [5, -5, 3, -4, -3, -7], "leaves": [-0.10517037547887996, 0.021154515950978878, -0.0733594346640324, -0.0599980394755254, 0.0360259424693523, 0.04633868830837027, -0.09219395158752443] }, { "feature": [15, 26, 60, 33, 33, 27], "threshold": [1.0000000180025095e-35, 124.50000000000001, 42.50000000000001, 55.50000000000001, 56.50000000000001, 74.50000000000001], "left": [1, -1, 3, -2, 5, -3], "right": [-7, 2, -6, 4, -5, -4], "leaves": [0.02321531121347347, -0.06994697466218618, 1.1819292015641143, -0.04962833229388027, -0.002175621036887025, 0.045098848750256604, 0.02987214764496751] }, { "feature": [59, 47, 28, 28, 32, 59], "threshold": [14.500000000000002, 0.24283756819256988, 123.50000000000001, 457.50000000000006, 1.0000000180025095e-35, 1.5000000000000002], "left": [1, 2, -1, -2, -4, -5], "right": [-7, 4, 3, -3, 5, -6], "leaves": [-0.09291398763646469, 0.072795495317846, 0.008661260648291137, 0.009035617660385667, 0.08596519858154417, -0.07636226086027509, -0.07176505439979447] }, { "feature": [59, 55, 23, 58, 33, 21], "threshold": [13.500000000000002, 3.5000000000000004, 45.50000000000001, 12.500000000000002, 16.500000000000004, 182.50000000000003], "left": [1, 2, -1, 4, 5, -2], "right": [-7, -6, 3, -5, -4, -3], "leaves": [0.03804568803322876, 0.05055398319431177, -0.11413303635983213, 0.0073067955245285495, 0.06409246196471674, -0.08265654562241598, -0.07073080061727573] }, { "feature": [0, 12, 23, 57, 27, 0], "threshold": [4.500000000000001, 0.8834841628959277, 39.50000000000001, 9.812303809611791, 999.5000000000001, 6.500000000000001], "left": [-1, 2, 3, -2, -4, -5], "right": [1, -7, 4, -3, 5, -6], "leaves": [-0.05582559123377578, 0.05699464854011621, 0.46896520838667394, -0.07787418152186226, 0.056342954081400526, -0.02296108247481258, -0.023897077798335824] }, { "feature": [49, 55, 61, 9, 23, 0], "threshold": [1.5000000000000002, 3.5000000000000004, 195.50000000000003, 1.0000000180025095e-35, 93.50000000000001, 6.500000000000001], "left": [1, 2, -1, 4, -2, -3], "right": [-7, -6, 3, -5, 5, -4], "leaves": [-0.08291968100671238, 0.04458154941877826, 0.024809625069370844, -0.03981139320377084, -0.09087404330421725, -0.1090526448148258, -0.057269959550708294] }, { "feature": [59, 46, 19, 55, 61, 23], "threshold": [14.500000000000002, 1.0000000180025095e-35, 1.0000000180025095e-35, 3.5000000000000004, 195.50000000000003, 93.50000000000001], "left": [1, 2, 3, 4, -1, -2], "right": [-7, -6, -5, -4, 5, -3], "leaves": [-0.08725002739092548, 0.0534759072590318, 0.004114837100077459, -0.07783612194842134, -0.07282099987836714, -0.0773189394227663, -0.07287535695577706] }, { "feature": [46, 19, 66, 62, 26, 27], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 0.13961038961038963, 317.50000000000006, 126.50000000000001, 52.50000000000001], "left": [1, 2, 3, -1, -2, -3], "right": [-7, -6, -5, 4, 5, -4], "leaves": [-0.14729851722022202, 0.0712275519172924, -0.1408661658107286, 0.02504293655821277, -0.017892258964425874, -0.07136841791588693, -0.07925457708048012] }, { "feature": [32, 62, 46, 23, 57, 33], "threshold": [2.5000000000000004, 327.50000000000006, 1.0000000180025095e-35, 5.500000000000001, 6.419179932041678, 16.500000000000004], "left": [1, -1, 3, -2, 5, -3], "right": [-7, 2, -6, 4, -5, -4], "leaves": [-0.0719427852101284, 0.06211648508483878, -0.10334265080530798, -0.004711031316259633, 0.017624773693475447, -0.08079384039750687, -0.045509671371461] }, { "feature": [58, 24, 47, 57, 3, 38], "threshold": [2.5000000000000004, 190.50000000000003, 0.25068184579375535, 9.271764540198037, 1.0000000180025095e-35, 0.87749999364217], "left": [-1, 2, -2, 4, -4, -5], "right": [1, 3, -3, -7, 5, -6], "leaves": [0.035951518613654046, 0.033663485469067715, -0.03913341275086358, -0.0924545718049318, 0.6829594201457868, -0.0002812781361827625, 0.05548556957181098] }, { "feature": [0, 0, 27, 12, 7, 57], "threshold": [4.500000000000001, 6.500000000000001, 999.5000000000001, 0.9722222222222223, 1.0000000180025095e-35, 9.871506542196514], "left": [-1, 2, -2, -3, 5, -5], "right": [1, 4, 3, -4, -7, -6], "leaves": [-0.04988847571610649, -0.06600116839113528, 0.06950307512277255, 0.0021431050698827478, -0.009275860391855463, 0.2673312901128792, -0.13729474271120465] }, { "feature": [15, 11, 51, 59, 10, 27], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.5000000000000002, 1.0000000180025095e-35, 60.50000000000001], "left": [1, 2, -1, -3, 5, -5], "right": [4, 3, -2, -4, -7, -6], "leaves": [-0.0293267348637877, 0.02357009758822315, 0.2196267391201222, -0.009776432769460174, -0.05588235488434215, 0.051083208087329246, -0.07645954716530373] }, { "feature": [52, 24, 33, 26, 21, 0], "threshold": [1.0000000180025095e-35, 8.500000000000002, 8.500000000000002, 64.50000000000001, 610.5000000000001, 4.500000000000001], "left": [1, 2, -1, -3, -4, -6], "right": [5, 3, -2, 4, -5, -7], "leaves": [0.08835462960332964, -0.002309198318695629, 0.021062746871190086, 0.006377355369319946, -0.05569894759994525, -0.08252233830832223, 0.061580266925690345] }, { "feature": [26, 66, 15, 1, 26, 56], "threshold": [126.50000000000001, 0.4058823529411765, 1.0000000180025095e-35, 6.500000000000001, 947.5000000000001, 1.0000000180025095e-35], "left": [1, -1, 3, -3, -5, -6], "right": [2, -2, 4, -4, 5, -7], "leaves": [0.046388602879980645, -0.07798918912222857, -0.021852521873335536, -0.11211862318901718, -0.11501203450781415, 0.002608345263892824, 0.08579050358560697] }, { "feature": [52, 10, 25, 38, 24, 21], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 40.50000000000001, 0.8944444444444445, 8.500000000000002, 999.5000000000001], "left": [1, 2, 3, -1, -3, -6], "right": [5, -5, 4, -2, -4, -7], "leaves": [0.5938612254075671, 0.05037038166713245, 0.03762250545085841, -0.020149231924894914, -0.08129796189316701, -0.010871598198222797, 0.08221002701479856] }, { "feature": [64, 57, 33, 59, 58, 60], "threshold": [1.5000000000000002, 6.419179932041678, 16.500000000000004, 14.500000000000002, 12.500000000000002, 2.5000000000000004], "left": [1, 2, -1, 4, 5, -3], "right": [-7, 3, -2, -6, -5, -4], "leaves": [-0.09944568008797554, 0.0007164452621137613, 0.02680811757782351, -0.07260192707092808, 0.07131271175808708, -0.06769503829064254, -0.05441304648892101] }, { "feature": [49, 9, 66, 10, 23, 45], "threshold": [2.5000000000000004, 1.0000000180025095e-35, 0.3100961538461539, 1.0000000180025095e-35, 93.50000000000001, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -3], "right": [-7, -6, -5, 5, -2, -4], "leaves": [0.05189537778512531, 0.006938755716952421, -0.07544655968697805, 0.25930258655204574, -0.032101785028283245, -0.0867860139618547, -0.07563369390273555] }, { "feature": [10, 66, 47, 55, 33, 1], "threshold": [1.0000000180025095e-35, 0.4058823529411765, 0.24283756819256988, 1.0000000180025095e-35, 10.500000000000002, 5.500000000000001], "left": [1, 2, -1, 4, -2, -4], "right": [-7, -6, 3, 5, -3, -5], "leaves": [0.029350259389578616, -0.16898537001361838, -0.01756266009353016, -0.033081279420054226, 0.05947296493543816, -0.056799681723559405, -0.06013490380814605] }, { "feature": [64, 32, 14, 28, 33, 59], "threshold": [1.5000000000000002, 2.5000000000000004, 1.0000000180025095e-35, 163.50000000000003, 5.500000000000001, 10.500000000000002], "left": [1, 2, -1, 4, 5, -3], "right": [-7, 3, -2, -6, -5, -4], "leaves": [0.013486395824183376, -0.16899140837793417, -0.02322195932573283, 0.671857113600131, 0.0038466039850289777, -0.0813452579582698, -0.06831908150594053] }, { "feature": [48, 58, 60, 35, 55, 28], "threshold": [1.0000000180025095e-35, 12.500000000000002, 1.0000000180025095e-35, 16.500000000000004, 1.0000000180025095e-35, 7.500000000000001], "left": [1, -1, 3, 4, -3, -6], "right": [2, -2, 5, -5, -4, -7], "leaves": [0.0008359118183885639, 0.05544449109750395, -0.11675160798843914, 0.04852640813978659, 0.035810467100568864, 0.061420853221025085, -0.07752374560653895] }, { "feature": [57, 47, 66, 9, 66, 38], "threshold": [7.161233954801744, 0.5124871214906269, 0.3827838827838828, 1.0000000180025095e-35, 0.37171052631578955, 0.87749999364217], "left": [1, 2, 3, -1, -4, -5], "right": [-7, 4, -3, -2, 5, -6], "leaves": [0.03351208922720209, -0.08830339435241298, -0.04829904774511976, -0.07845601619101454, 0.4460830561646332, 0.014831889680627623, -0.04301323801642515] }, { "feature": [9, 64, 46, 55, 55, 1], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 3.5000000000000004, 1.0000000180025095e-35, 5.500000000000001], "left": [1, 2, 3, -1, -4, -5], "right": [-7, 4, -3, -2, 5, -6], "leaves": [0.024047135856928987, -0.0573654642125323, -0.06659646227259486, -0.09870198758710964, -0.030934023217574158, 0.07804821380194604, -0.08288274787921102] }, { "feature": [9, 61, 23, 57, 57, 51], "threshold": [1.0000000180025095e-35, 443.50000000000006, 93.50000000000001, 6.967438170207934, 6.296187660686791, 1.0000000180025095e-35], "left": [1, -1, -2, 4, -3, -5], "right": [-7, 2, 3, 5, -4, -6], "leaves": [-0.06759788937028686, 0.030592231035054714, -0.05102559110024171, 0.027832941107270755, -0.08529418786001304, 0.03848683938757119, -0.08829800026294352] }, { "feature": [52, 38, 66, 46, 19, 10], "threshold": [1.0000000180025095e-35, 1.1266025641025643, 0.3141447368421053, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, 3, 4, 5, -1], "right": [-7, -6, -5, -4, -3, -2], "leaves": [0.030897888137432612, -0.04095208057557345, -0.07441738152668152, -0.06780278608965011, -0.05356976224716972, -0.05206916971281847, 0.03991282999408732] }, { "feature": [12, 12, 23, 58, 54, 23], "threshold": [0.8834841628959277, 0.7947368421052633, 39.50000000000001, 5.500000000000001, 1.0000000180025095e-35, 999.5000000000001], "left": [1, -1, -2, 4, -4, -5], "right": [3, 2, -3, -7, 5, -6], "leaves": [-0.014087124487114312, 0.07300943013823186, 0.010904804785875183, -0.0009730598821152428, 0.010262338731257039, 0.5188597587295609, -0.054835418457913766] }, { "feature": [49, 19, 26, 33, 21, 52], "threshold": [2.5000000000000004, 1.0000000180025095e-35, 5.500000000000001, 55.50000000000001, 620.5000000000001, 1.0000000180025095e-35], "left": [1, 2, -1, 4, -2, -3], "right": [-7, -6, 3, -5, 5, -4], "leaves": [-0.1405904601566253, 0.0353158222463973, -0.038742279295380405, 0.06858090184668807, 0.03741000460827131, -0.06649488460427866, -0.07825648205540103] }, { "feature": [32, 55, 61, 23, 27, 57], "threshold": [3.5000000000000004, 3.5000000000000004, 195.50000000000003, 87.50000000000001, 68.50000000000001, 6.296187660686791], "left": [1, 2, -1, -2, -3, -4], "right": [-7, -6, 3, 4, 5, -5], "leaves": [-0.06902913071692428, 0.03610220234078403, -0.09675526471384938, -0.04708745283818383, 0.02089450485014023, -0.07756204909647653, -0.052435010097056846] }, { "feature": [14, 52, 29, 21, 35, 15], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 620.5000000000001, 55.50000000000001, 1.0000000180025095e-35], "left": [1, 2, 3, -1, 5, -2], "right": [-7, -6, -5, 4, -4, -3], "leaves": [0.045967856403360936, -0.07518665889014611, 0.004803871252856732, 0.04557463882158971, -0.054050439485158, 0.043760138341142854, -0.1206332396768644] }, { "feature": [32, 14, 35, 33, 55, 58], "threshold": [3.5000000000000004, 1.0000000180025095e-35, 166.50000000000003, 55.50000000000001, 1.0000000180025095e-35, 12.500000000000002], "left": [1, 2, 3, 4, 5, -1], "right": [-7, -6, -5, -4, -3, -2], "leaves": [-0.039114862982121745, 0.06579078543891773, 0.028139248930771188, 0.040691255989449955, -0.07364078704832985, -0.13163146506070744, -0.05770864852414012] }, { "feature": [57, 12, 9, 42, 11, 48], "threshold": [7.03922194562531, 0.5325630252100841, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, -1, 3, 4, -2, -6], "right": [5, 2, -5, -4, -3, -7], "leaves": [-0.08948146344773808, 0.021783001203715666, 0.11387136399515672, -0.05261155627941301, -0.09506850939623498, -0.0016308513471954432, -0.07516663468084787] }, { "feature": [0, 53, 57, 33, 27, 0], "threshold": [4.500000000000001, 1.0000000180025095e-35, 6.296187660686791, 16.500000000000004, 999.5000000000001, 9.500000000000002], "left": [-1, 2, 3, -2, 5, -4], "right": [1, -7, 4, -3, -6, -5], "leaves": [-0.0500949500423156, -0.13762082753555668, -0.0035290459473739204, -0.0693316460630025, 0.04315479554857195, 0.010919273471591679, 0.03381520304629908] }, { "feature": [58, 23, 24, 12, 47, 12], "threshold": [4.500000000000001, 84.50000000000001, 324.50000000000006, 0.8834841628959277, 0.7495435010441408, 0.8248081841432225], "left": [1, -1, 3, -3, -5, -6], "right": [2, -2, 4, -4, 5, -7], "leaves": [0.055196885981097954, -0.004829737366762017, 0.03191643014482319, -0.037050501235214105, -0.08898089491537428, -0.07475748889750983, 0.06894473079582351] }, { "feature": [10, 15, 57, 47, 57, 51], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 6.419179932041678, 0.27196057539271273, 7.161233954801744, 1.0000000180025095e-35], "left": [1, 2, -1, 4, -2, -4], "right": [-7, -6, 3, 5, -3, -5], "leaves": [-0.06458430443322809, 0.0364769409463944, -0.07235896493079294, -0.07030708298201536, 0.045037709866336456, 0.03112876568679676, -0.053060625549637114] }, { "feature": [58, 35, 55, 24, 21, 34], "threshold": [12.500000000000002, 16.500000000000004, 1.0000000180025095e-35, 40.50000000000001, 157.50000000000003, 1.0000000180025095e-35], "left": [1, 2, -1, -3, -4, -6], "right": [5, 3, -2, 4, -5, -7], "leaves": [-0.10196299248374392, 0.014563367740959421, -0.022173823737993772, -0.019213522037624484, 0.06448090371923221, -0.05427150568757449, 0.09249739500515237] }, { "feature": [58, 47, 11, 24, 12, 47], "threshold": [2.5000000000000004, 0.5124871214906269, 1.0000000180025095e-35, 324.50000000000006, 0.8834841628959277, 0.4309396630117687], "left": [1, 2, -1, 4, -4, -6], "right": [3, -3, -2, 5, -5, -7], "leaves": [0.030415832664251366, 0.1421953305666756, -0.04512855086988114, 0.026582077069844442, -0.02045362058991064, -0.08966257354060747, -0.005920365103800521] }, { "feature": [9, 46, 14, 0, 28, 23], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 6.500000000000001, 115.50000000000001, 3.5000000000000004], "left": [1, 2, 3, 4, -1, -3], "right": [-7, -6, -5, 5, -2, -4], "leaves": [-0.06133936161642926, 0.03779760947401344, 0.042537632770396544, -0.02409193650401112, -0.1172209753692443, -0.056335478202277134, -0.08681753361234489] }, { "feature": [14, 46, 66, 9, 42, 33], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 0.3141447368421053, 1.0000000180025095e-35, 1.0000000180025095e-35, 55.50000000000001], "left": [1, 2, 3, 4, 5, -1], "right": [-7, -6, -5, -4, -3, -2], "leaves": [0.008836226693646223, 0.05187267426040579, -0.05288446183070955, -0.09124602032810668, -0.03306556972149471, -0.06764776800919906, -0.12051370686119178] }, { "feature": [15, 0, 1, 12, 26, 23], "threshold": [1.0000000180025095e-35, 6.500000000000001, 5.500000000000001, 0.9722222222222223, 62.50000000000001, 93.50000000000001], "left": [1, 2, -1, -2, -4, -6], "right": [5, 4, 3, -3, -5, -7], "leaves": [-0.011774472900873769, 0.06862659568959252, -0.02994874278947455, 0.019140236367831947, -0.06115525364343886, 0.0485346140078491, -0.006835584895300566] }, { "feature": [62, 47, 55, 35, 36, 58], "threshold": [327.50000000000006, 0.24283756819256988, 1.0000000180025095e-35, 8.500000000000002, 1.0000000180025095e-35, 4.500000000000001], "left": [-1, -2, 3, -3, 5, -5], "right": [1, 2, 4, -4, -7, -6], "leaves": [-0.07070311896947015, 0.020661322460881253, -0.1405004528653316, -0.03506847916076633, 0.03148502783113843, -0.08021545410872127, 0.06558697285123676] }, { "feature": [55, 55, 34, 24, 24, 0], "threshold": [3.5000000000000004, 1.0000000180025095e-35, 1.0000000180025095e-35, 999.5000000000001, 23.500000000000004, 4.500000000000001], "left": [1, 2, 3, -1, -3, -5], "right": [-7, 5, 4, -2, -4, -6], "leaves": [-0.013480191268380166, 0.07089867415302513, 0.03886468876825905, -0.10908083217389056, -0.06650766283257736, 0.03252560671955649, -0.06718412171077058] }, { "feature": [59, 58, 60, 12, 35, 36], "threshold": [14.500000000000002, 12.500000000000002, 2.5000000000000004, 0.5325630252100841, 16.500000000000004, 1.0000000180025095e-35], "left": [1, 2, 3, -1, -2, -5], "right": [-7, 5, -4, 4, -3, -6], "leaves": [-0.07493191627265132, -0.016599908701146672, 0.022892863003842287, -0.0588994260522637, -0.04887823321049961, 0.09215812658310148, -0.06667503642665142] }, { "feature": [12, 35, 61, 23, 12, 33], "threshold": [0.4083333333333334, 159.50000000000003, 62.50000000000001, 93.50000000000001, 0.8834841628959277, 55.50000000000001], "left": [-1, 2, -2, 4, -3, -5], "right": [1, -7, 3, 5, -4, -6], "leaves": [-0.15962302621889218, -0.08740994001254436, 0.048677444299414036, -0.012242413567248683, -0.019591815404827195, 0.03810780873828973, -0.06515782609644717] }, { "feature": [19, 49, 26, 26, 11, 55], "threshold": [1.0000000180025095e-35, 2.5000000000000004, 5.500000000000001, 126.50000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, -1, -2, 5, -3], "right": [-7, -6, 3, 4, -5, -4], "leaves": [-0.11474440310173309, 0.034469349318738636, -0.028356529962227657, 0.020410842525437862, 0.07377329618146526, -0.07089309755406023, -0.06800327695563832] }, { "feature": [47, 58, 24, 28, 55, 0], "threshold": [0.6038371738184855, 2.5000000000000004, 92.50000000000001, 526.5000000000001, 1.0000000180025095e-35, 9.500000000000002], "left": [1, -1, 3, -2, -4, -5], "right": [-7, 2, 4, -3, 5, -6], "leaves": [0.03780645814501629, 0.03933230710961168, -0.014405212367459267, -0.08046600300114908, -0.0407070278769489, 0.06164314124213691, -0.044577513339340236] }, { "feature": [64, 27, 42, 28, 59, 33], "threshold": [1.5000000000000002, 63.50000000000001, 1.0000000180025095e-35, 457.50000000000006, 1.5000000000000002, 12.500000000000002], "left": [1, -1, 3, -2, 5, -3], "right": [-7, 2, -6, 4, -5, -4], "leaves": [-0.06835827066171522, 0.03906642940374225, -0.11020431333675124, 0.056818277441995024, -0.017127501201193666, -0.07050975214138015, -0.06538985468118423] }, { "feature": [9, 10, 42, 35, 32, 58], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 161.50000000000003, 3.5000000000000004, 4.500000000000001], "left": [1, 2, 3, 4, -1, -5], "right": [-7, 5, -4, -3, -2, -6], "leaves": [0.02213487292610965, -0.04511543494233926, -0.06645090592148875, -0.05854339120063077, 0.045048228543074664, -0.07674246782400643, -0.08975286471986178] }, { "feature": [57, 9, 12, 67, 62, 57], "threshold": [7.03922194562531, 1.0000000180025095e-35, 0.5325630252100841, 5.500000000000001, 304.50000000000006, 9.271764540198037], "left": [1, 2, -1, 4, -2, -6], "right": [5, -5, 3, -4, -3, -7], "leaves": [-0.07966963201932967, -0.09048488790340564, 0.02668418078238683, -0.026871233947548395, -0.0991713400495589, -0.04951706897210091, 0.05266350578734801] }, { "feature": [23, 12, 60, 26, 25, 27], "threshold": [93.50000000000001, 0.8834841628959277, 2.5000000000000004, 323.50000000000006, 1.5000000000000002, 67.50000000000001], "left": [1, -1, 3, -2, -5, -6], "right": [4, 2, -4, -3, 5, -7], "leaves": [0.03953325499234203, 0.05464489815296412, -0.03234532653837679, -0.08578794124422769, 0.07873032484721898, -0.09689241259466351, -0.014972512017867779] }, { "feature": [42, 9, 66, 52, 13, 14], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 0.4058823529411765, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -3], "right": [-7, -6, -5, 5, -2, -4], "leaves": [0.007141370326914734, -0.2367368821292397, 0.055715897385933334, -0.12297981050302176, -0.03936494769553142, -0.08753439627501902, -0.08009876292050049] }, { "feature": [28, 57, 38, 57, 27, 47], "threshold": [462.50000000000006, 6.419179932041678, 1.7032967032967035, 7.135289099297014, 60.50000000000001, 0.29496235798369014], "left": [1, 2, -1, 4, -3, -4], "right": [-7, 3, -2, -6, 5, -5], "leaves": [-0.09048348099484718, 0.06578592356697555, -0.04222522789055253, 0.0709019950947611, -0.008793192775898786, -0.034408231387613376, -0.009479599302392061] }, { "feature": [15, 0, 28, 14, 25, 10], "threshold": [1.0000000180025095e-35, 6.500000000000001, 110.50000000000001, 1.0000000180025095e-35, 28.500000000000004, 1.0000000180025095e-35], "left": [1, 2, -1, -2, -4, -6], "right": [5, 4, 3, -3, -5, -7], "leaves": [-0.07869704851690029, 0.016560729107616138, -0.11341919318620775, 0.042477494697748544, -0.04563888348615808, 0.029600263290242557, -0.057459179052595656] }, { "feature": [15, 1, 1, 12, 35, 23], "threshold": [1.0000000180025095e-35, 6.500000000000001, 5.500000000000001, 0.8377192982456142, 40.50000000000001, 93.50000000000001], "left": [1, 2, -1, -2, -4, -6], "right": [5, 4, 3, -3, -5, -7], "leaves": [-0.013519216542103089, 0.05508147548736619, -0.029265308445149598, -0.11183939830224006, 0.003270242341114968, 0.04115387423371933, -0.005244589097793544] }, { "feature": [14, 9, 52, 57, 37, 29], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 6.147398776793273, 14.833333333333334, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -3], "right": [-7, -6, -5, 5, -2, -4], "leaves": [0.031443881083886495, -0.07800456763892513, 0.012499396125520099, -0.037489528000531895, 0.039261837540296635, -0.09076526859585714, -0.11808928008538828] }, { "feature": [46, 14, 61, 57, 33, 35], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 195.50000000000003, 6.296187660686791, 16.500000000000004, 123.50000000000001], "left": [1, 2, -1, 4, -2, -4], "right": [-7, -6, 3, 5, -3, -5], "leaves": [-0.06940331849061372, -0.06984777201667962, 0.009414912410569534, 0.025661129591390965, -0.05602432655627248, -0.11788910414946539, -0.06105961643100756] }, { "feature": [49, 58, 35, 55, 66, 36], "threshold": [2.5000000000000004, 12.500000000000002, 16.500000000000004, 1.0000000180025095e-35, 0.21825396825396828, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -5], "right": [-7, 5, -4, -3, -2, -6], "leaves": [-0.12724175815826047, -0.000659206869847199, 0.03260894169160319, 0.015104372439595313, -0.05459648197981629, 0.08608620693732068, -0.07627702402498333] }, { "feature": [62, 46, 14, 9, 25, 27], "threshold": [327.50000000000006, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 69.50000000000001, 63.50000000000001], "left": [-1, 2, 3, 4, -2, -3], "right": [1, -7, -6, -5, 5, -4], "leaves": [-0.061879843304516374, 0.04756770259055218, -0.09150443152821426, 0.009728993800252994, -0.08456729178379908, -0.10927551460549184, -0.06325658191789256] }, { "feature": [14, 26, 55, 57, 47, 47], "threshold": [1.0000000180025095e-35, 64.50000000000001, 1.0000000180025095e-35, 7.001700788236549, 0.4117764591662804, 0.12906138031019368], "left": [1, -1, 3, 4, 5, -2], "right": [-7, 2, -6, -5, -4, -3], "leaves": [0.03145886767258915, -0.08001494115306818, 0.018851882582057167, -0.06534273169889672, -0.0780113494610091, 0.014776569015480995, -0.10675741279132263] }, { "feature": [9, 13, 66, 67, 33, 38], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 0.3141447368421053, 4.500000000000001, 16.500000000000004, 0.87749999364217], "left": [1, 2, 3, 4, -1, -4], "right": [-7, -6, 5, -3, -2, -5], "leaves": [-0.027078750462218845, 0.017088199891279167, 0.047626600192345186, 0.15956246867868093, -0.038553376703612585, -0.20864439326116557, -0.08795329473069186] }, { "feature": [49, 13, 35, 9, 42, 22], "threshold": [2.5000000000000004, 1.0000000180025095e-35, 161.50000000000003, 1.0000000180025095e-35, 1.0000000180025095e-35, 6.500000000000001], "left": [1, 2, 3, 4, -1, -2], "right": [-7, -6, -5, -4, 5, -3], "leaves": [0.014837370132048406, 0.05092543087505652, -0.07990853772307745, -0.08327792432472753, -0.06328086000674465, -0.20735734948228474, -0.07270068652349597] }, { "feature": [55, 34, 24, 58, 34, 21], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 40.50000000000001, 12.500000000000002, 1.0000000180025095e-35, 157.50000000000003], "left": [1, 2, -1, -3, 5, -5], "right": [4, 3, -2, -4, -7, -6], "leaves": [-0.033224390304262226, 0.04468500899346907, -0.09113776392544064, 0.05238326693927506, -0.03143733545969222, 0.04173889481965213, 0.05385542095392282] }, { "feature": [59, 58, 33, 55, 1, 34], "threshold": [14.500000000000002, 12.500000000000002, 16.500000000000004, 1.0000000180025095e-35, 2.5000000000000004, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -5], "right": [-7, 5, -4, -3, -2, -6], "leaves": [0.0026274086783854393, -0.11051813123791945, 0.01881161590849171, 0.010055788153827006, -0.04156074283086191, 0.0773296402267146, -0.06504443333369106] }, { "feature": [32, 42, 14, 9, 13, 10], "threshold": [4.500000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, 3, 4, 5, -1], "right": [-7, -6, -5, -4, -3, -2], "leaves": [0.01675267813636488, -0.02349349915982406, -0.1830864849091512, -0.0910286567643599, -0.10732895814140675, -0.06314725064986922, -0.06850437950257614] }, { "feature": [67, 27, 55, 27, 0, 61], "threshold": [5.500000000000001, 70.50000000000001, 2.5000000000000004, 74.50000000000001, 4.500000000000001, 999.5000000000001], "left": [1, 2, -1, -3, -4, -5], "right": [-7, 3, -2, 4, 5, -6], "leaves": [-0.0822272572649995, 0.07640440173834358, 0.18901374080181887, -0.03637420833932884, -0.05844509824911026, 0.02085475033605435, -0.037275674082427476] }, { "feature": [35, 55, 55, 64, 47, 47], "threshold": [125.50000000000001, 3.5000000000000004, 1.0000000180025095e-35, 1.0000000180025095e-35, 0.5124871214906269, 0.12906138031019368], "left": [1, 2, 3, 4, 5, -1], "right": [-7, -6, -5, -4, -3, -2], "leaves": [-0.04571156877493729, 0.029050035500697863, -0.07829377561806272, -0.08497512626320299, 0.028045487745783016, -0.05912671947487998, -0.05590395336633959] }, { "feature": [10, 66, 47, 57, 57, 55], "threshold": [1.0000000180025095e-35, 0.4058823529411765, 0.23951243972043904, 6.296187660686791, 7.161233954801744, 1.0000000180025095e-35], "left": [1, 2, 3, -1, -2, -4], "right": [-7, -6, 5, 4, -3, -5], "leaves": [-0.05160103027523836, 0.04222203821684735, -0.053195320666260926, -0.041121342183618056, 0.015723592934015693, -0.04981619708243759, -0.046992330033840686] }, { "feature": [9, 49, 42, 35, 33, 55], "threshold": [1.0000000180025095e-35, 2.5000000000000004, 1.0000000180025095e-35, 159.50000000000003, 53.50000000000001, 1.0000000180025095e-35], "left": [1, 2, 3, 4, 5, -1], "right": [-7, -6, -5, -4, -3, -2], "leaves": [-0.0154501290132098, 0.029721787770179378, 0.03708147616721745, -0.05770009187234951, -0.046521347666724146, -0.0719114886238703, -0.08580786993581256] }, { "feature": [57, 42, 47, 62, 14, 33], "threshold": [7.03922194562531, 1.0000000180025095e-35, 0.5850957756315562, 304.50000000000006, 1.0000000180025095e-35, 6.500000000000001], "left": [1, 2, 3, -1, -2, -6], "right": [5, -5, -4, 4, -3, -7], "leaves": [-0.06664914401595291, 0.0241356880476245, -0.11918300307519757, -0.040790598772934075, -0.06049410063809876, 0.015314676583334767, -0.04749691579299725] }, { "feature": [12, 23, 58, 40, 36, 28], "threshold": [0.8834841628959277, 23.500000000000004, 12.500000000000002, 1.0000000180025095e-35, 1.0000000180025095e-35, 120.50000000000001], "left": [1, -1, 3, -2, -4, -5], "right": [-7, 2, 4, -3, 5, -6], "leaves": [0.0406373586225821, -0.032783640533714506, 0.019602294774955564, -0.02904857802523969, 0.28384949531395853, 0.06687142118070664, -0.019453124973373512] }, { "feature": [10, 61, 15, 23, 56, 58], "threshold": [1.0000000180025095e-35, 62.50000000000001, 1.0000000180025095e-35, 45.50000000000001, 1.0000000180025095e-35, 4.500000000000001], "left": [1, -1, -2, 4, -3, -6], "right": [5, 2, 3, -5, -4, -7], "leaves": [-0.07694014306201134, -0.002421346994752963, 0.005231518232340576, 0.0816504750096529, -0.001169253069803018, 0.03392039281650711, -0.07863006825637558] }, { "feature": [14, 9, 10, 66, 55, 45], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 1.0000000180025095e-35, 0.32738095238095244, 1.0000000180025095e-35, 1.0000000180025095e-35], "left": [1, 2, 3, 4, -1, -4], "right": [-7, -6, 5, -3, -2, -5], "leaves": [0.0031893007703319813, 0.03726020719400596, -0.02115586563484951, -0.04725531779778508, 0.09001771752926704, -0.0820011438539232, -0.10162192627900823] }, { "feature": [26, 26, 55, 34, 24, 36], "threshold": [64.50000000000001, 5.500000000000001, 1.0000000180025095e-35, 1.0000000180025095e-35, 23.500000000000004, 1.0000000180025095e-35], "left": [1, -1, 3, -3, -4, -6], "right": [2, -2, 5, 4, -5, -7], "leaves": [-0.08157565173065187, 0.03455025180710313, -0.005858010307961508, 0.014426343083271988, -0.09789162932855798, -0.013067441079941811, 0.04465510127426936] }, { "feature": [9, 49, 57, 33, 2, 35], "threshold": [1.0000000180025095e-35, 2.5000000000000004, 6.296187660686791, 16.500000000000004, 4.500000000000001, 123.50000000000001], "left": [1, 2, 3, 4, -1, -4], "right": [-7, -6, 5, -3, -2, -5], "leaves": [-0.11329482945837457, 0.030411710486775895, 0.005387419135029038, 0.0144149513467305, -0.05216698365198278, -0.0742721626773674, -0.08759083016792224] }, { "feature": [28, 57, 57, 32, 0, 12], "threshold": [462.50000000000006, 6.419179932041678, 7.383678802485448, 1.0000000180025095e-35, 4.500000000000001, 0.4083333333333334], "left": [1, -1, -2, 4, -4, -5], "right": [3, 2, -3, -7, 5, -6], "leaves": [-0.07002838674700158, 0.03562805478050178, -0.05901713572470202, -0.0612075492594481, -0.14067440423815633, 0.01655208739865644, -0.047662192424586025] }, { "feature": [66, 46, 14, 27, 2, 27], "threshold": [0.3141447368421053, 1.0000000180025095e-35, 1.0000000180025095e-35, 72.50000000000001, 3.5000000000000004, 74.50000000000001], "left": [1, 2, 3, 4, -1, -3], "right": [-7, -6, -5, 5, -2, -4], "leaves": [-0.07627123816114995, 0.036998060599740965, 0.1688356475258014, 0.015141686531811882, -0.09914401105977448, -0.06326242089750996, -0.03182045784390515] }, { "feature": [46, 19, 26, 62, 2, 42], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 4.500000000000001, 327.50000000000006, 11.500000000000002, 1.0000000180025095e-35], "left": [1, 2, -1, 4, -2, -4], "right": [-7, -6, 3, 5, -3, -5], "leaves": [-0.10475980546495292, -0.0840031822455835, 0.06428039694321162, 0.019471146421181598, -0.042074494831860605, -0.06107099567989054, -0.057546423848175376] }, { "feature": [12, 12, 35, 24, 21, 1], "threshold": [0.8480769230769232, 0.7947368421052633, 9.500000000000002, 158.50000000000003, 93.50000000000001, 4.500000000000001], "left": [1, 2, 3, -1, -2, -4], "right": [-7, -6, 5, 4, -3, -5], "leaves": [0.027985996100476886, 0.03371667787741838, -0.1201665066346072, -0.04003491406387395, 0.01996668828259592, 0.04038666358707231, -0.02017698932275724] }, { "feature": [9, 52, 26, 67, 15, 33], "threshold": [1.0000000180025095e-35, 1.0000000180025095e-35, 64.50000000000001, 5.500000000000001, 1.0000000180025095e-35, 55.50000000000001], "left": [1, 2, 3, -1, 5, -3], "right": [-7, -6, 4, -2, -5, -4], "leaves": [0.03798005640914713, -0.04940179994762936, -0.046066443826429056, 0.010127330973295847, 0.007825660578946615, 0.029540911889766104, -0.08561632510216087] }, { "feature": [58, 12, 24, 25, 12, 51], "threshold": [4.500000000000001, 0.5536398467432951, 6.500000000000001, 40.50000000000001, 0.8429276315789475, 1.0000000180025095e-35], "left": [1, -1, -3, 4, -4, -6], "right": [2, -2, 3, 5, -5, -7], "leaves": [-0.08528982960089036, 0.020121263809007098, 0.032599563569687136, 0.08389298234048637, -0.07409586635058009, -0.046277668666205585, 0.01378724102508585] }, { "feature": [46, 59, 59, 60, 62, 37], "threshold": [1.0000000180025095e-35, 14.500000000000002, 12.500000000000002, 1.5000000000000002, 304.50000000000006, 16.350000000000005], "left": [1, 2, 3, 4, -1, -4], "right": [-7, -6, 5, -3, -2, -5], "leaves": [-0.09686697496679637, 0.015405749427248556, -0.026310810483662767, 0.08102040815408745, -0.09804290082738205, -0.06512374673817813, -0.062419120750044715] }, { "feature": [28, 57, 37, 57, 11, 57], "threshold": [462.50000000000006, 6.419179932041678, 23.500000000000004, 7.203777406559518, 1.0000000180025095e-35, 9.271764540198037], "left": [1, 2, -1, -3, 5, -5], "right": [4, 3, -2, -4, -7, -6], "leaves": [-0.0882688679934193, 0.054474550363935184, 0.03807157406245843, -0.03334293615015833, -0.01722744414339304, 0.055412857707391766, 0.05696934366149919] }, { "feature": [42, 58, 58, 58, 12, 34], "threshold": [1.0000000180025095e-35, 2.5000000000000004, 12.500000000000002, 8.500000000000002, 0.6545092838196288, 1.0000000180025095e-35], "left": [1, -1, 3, 4, -2, -5], "right": [-7, 2, 5, -4, -3, -6], "leaves": [0.02391593533583382, -0.06613027274666343, 0.007359411815788529, -0.05393854443258535, -0.04526035529697225, 0.07720150028618408, -0.05060128573916797] }, { "feature": [57, 42, 47, 55, 35, 47], "threshold": [7.400315047266914, 1.0000000180025095e-35, 0.24283756819256988, 1.0000000180025095e-35, 17.500000000000004, 0.9650398775634544], "left": [1, 2, -1, 4, -2, -6], "right": [5, -5, 3, -4, -3, -7], "leaves": [0.02104709813965308, -0.088076091768379, 0.00028024169830852215, 0.022309832665463977, -0.07367911858910085, -0.06882098430739454, 0.040254800471556] }, { "feature": [59, 28, 57, 11, 37, 34], "threshold": [14.500000000000002, 462.50000000000006, 6.419179932041678, 1.0000000180025095e-35, 14.200000000000001, 1.0000000180025095e-35], "left": [1, 2, -1, 4, 5, -3], "right": [-7, 3, -2, -6, -5, -4], "leaves": [-0.06304635255360541, 0.03000497319563819, -0.004209177447556743, 0.11778061348878804, -0.0207285525603815, 0.05091140277990587, -0.0675593029538627] }], "threshold": 0.97 };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * One tree in flat arrays. Internal node i compares feature[i] with threshold[i]: values less
3
+ * than or equal go left. A child index >= 0 is another internal node, a negative index c is the
4
+ * leaf ~c (that is -c - 1) in `leaves`.
5
+ */
6
+ export type Tree = {
7
+ feature: number[];
8
+ threshold: number[];
9
+ left: number[];
10
+ right: number[];
11
+ leaves: number[];
12
+ };
13
+ export type Model = {
14
+ version: string;
15
+ featureNames: readonly string[];
16
+ trees: Tree[];
17
+ /** Default decision threshold on the probability, picked on held-out data */
18
+ threshold: number;
19
+ };
20
+ export declare function checkModel(model: Model): void;
21
+ /** Probability that the candidate is the one-time code */
22
+ export declare function predict(model: Model, row: number[]): number;
@@ -0,0 +1,30 @@
1
+ // Evaluates the gradient boosted trees exported by training/train.py.
2
+ import { FEATURE_NAMES } from './features.js';
3
+ export function checkModel(model) {
4
+ const names = model.featureNames;
5
+ if (names.length !== FEATURE_NAMES.length || names.some((n, i) => n !== FEATURE_NAMES[i])) {
6
+ throw new Error('The model was trained on a different feature list than this version computes');
7
+ }
8
+ }
9
+ function evalTree(tree, row) {
10
+ if (tree.feature.length === 0) {
11
+ return tree.leaves[0] ?? 0;
12
+ }
13
+ let node = 0;
14
+ for (;;) {
15
+ const value = row[tree.feature[node]];
16
+ const next = value <= tree.threshold[node] ? tree.left[node] : tree.right[node];
17
+ if (next < 0) {
18
+ return tree.leaves[-next - 1];
19
+ }
20
+ node = next;
21
+ }
22
+ }
23
+ /** Probability that the candidate is the one-time code */
24
+ export function predict(model, row) {
25
+ let sum = 0;
26
+ for (const tree of model.trees) {
27
+ sum += evalTree(tree, row);
28
+ }
29
+ return 1 / (1 + Math.exp(-sum));
30
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
package/package.json CHANGED
@@ -1,6 +1,67 @@
1
1
  {
2
- "name": "@postalsys/otp-detect",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
2
+ "name": "@postalsys/otp-detect",
3
+ "version": "0.1.0",
4
+ "description": "Detect one-time codes (OTP) in email messages",
5
+ "author": "Postal Systems OÜ",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "./dist/cjs/index.js",
9
+ "module": "./dist/esm/index.js",
10
+ "types": "./dist/cjs/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/esm/index.js",
14
+ "require": "./dist/cjs/index.js"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "scripts": {
22
+ "build": "node scripts/build.js",
23
+ "typecheck": "tsc -p tsconfig.json",
24
+ "pretest": "npm run build",
25
+ "test": "node --import tsx --test $(find test -name '*.test.ts')",
26
+ "pretest:coverage": "npm run build",
27
+ "test:coverage": "c8 node --import tsx --test $(find test -name '*.test.ts')",
28
+ "lint": "npm run typecheck && eslint .",
29
+ "lint:fix": "eslint . --fix",
30
+ "format": "prettier --write .",
31
+ "format:check": "prettier --check .",
32
+ "dump-features": "node --import tsx scripts/dump-features.ts",
33
+ "update": "rm -rf node_modules package-lock.json && ncu -u && npm install",
34
+ "prepare": "npm run build"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "20.19.43",
38
+ "c8": "12.0.0",
39
+ "eslint": "10.14.0",
40
+ "eslint-config-prettier": "10.1.8",
41
+ "globals": "17.14.0",
42
+ "postal-mime": "4.2.1",
43
+ "prettier": "3.9.10",
44
+ "tsx": "4.23.15",
45
+ "typescript": "6.0.3",
46
+ "typescript-eslint": "8.72.1"
47
+ },
48
+ "engines": {
49
+ "node": ">=20.0.0"
50
+ },
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "git+https://github.com/postalsys/otp-detect.git"
54
+ },
55
+ "keywords": [
56
+ "email",
57
+ "otp",
58
+ "one-time-password",
59
+ "verification-code",
60
+ "2fa",
61
+ "machine-learning"
62
+ ],
63
+ "homepage": "https://github.com/postalsys/otp-detect#readme",
64
+ "bugs": {
65
+ "url": "https://github.com/postalsys/otp-detect/issues"
66
+ }
67
+ }