epstein-files 1.1.5__py3-none-any.whl → 1.2.0__py3-none-any.whl

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.
@@ -2,6 +2,7 @@ import json
2
2
  import re
3
3
  from dataclasses import dataclass, field
4
4
 
5
+ from rich.console import Console
5
6
  from rich.highlighter import RegexHighlighter
6
7
  from rich.text import Text
7
8
 
@@ -11,17 +12,19 @@ from epstein_files.util.constant.urls import ARCHIVE_LINK_COLOR
11
12
  from epstein_files.util.constants import (EMAILER_ID_REGEXES, EPSTEIN_V_ROTHSTEIN_EDWARDS,
12
13
  OSBORNE_LLP, REPLY_REGEX, SENT_FROM_REGEX, VIRGIN_ISLANDS)
13
14
  from epstein_files.util.doc_cfg import *
14
- from epstein_files.util.data import extract_first_name, extract_last_name, without_falsey
15
+ from epstein_files.util.data import without_falsey
16
+ from epstein_files.util.env import args
15
17
  from epstein_files.util.logging import logger
16
18
 
17
19
  CIVIL_ATTORNEY = 'civil attorney'
18
20
  CRIMINAL_DEFENSE_ATTORNEY = 'criminal defense attorney'
19
21
  CRIMINAL_DEFENSE_2008 = f"{CRIMINAL_DEFENSE_ATTORNEY} on 2008 case"
20
- EPSTEIN_LAWYER = 'Epstein lawyer'
21
- EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY = f"{CIVIL_ATTORNEY} working on {EPSTEIN_V_ROTHSTEIN_EDWARDS}"
22
+ EPSTEIN_LAWYER = 'lawyer'
23
+ EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY = f"{CIVIL_ATTORNEY} in {EPSTEIN_V_ROTHSTEIN_EDWARDS}"
22
24
  ESTATE_EXECUTOR = 'estate executor'
23
25
  EPSTEIN_ESTATE_EXECUTOR = f"Epstein {ESTATE_EXECUTOR}"
24
- QUESTION_MARKS_TXT = Text(QUESTION_MARKS, style='dim')
26
+ MIDEAST = 'mideast'
27
+ QUESTION_MARKS_TXT = Text(QUESTION_MARKS, style='grey50')
25
28
  REGEX_STYLE_PREFIX = 'regex'
26
29
  SIMPLE_NAME_REGEX = re.compile(r"^[-\w ]+$", re.IGNORECASE)
27
30
 
@@ -40,6 +43,8 @@ CATEGORY_STYLES = {
40
43
  'letter': 'medium_orchid1'
41
44
  }
42
45
 
46
+ debug_console = Console(color_system='256')
47
+
43
48
 
44
49
  @dataclass(kw_only=True)
45
50
  class BaseHighlight:
@@ -121,13 +126,18 @@ class HighlightedNames(HighlightedText):
121
126
  self._pattern = '|'.join([self._emailer_pattern(e) for e in self.emailers] + self.patterns)
122
127
  self.regex = re.compile(fr"\b({self._match_group_var}({self._pattern})s?)\b", re.IGNORECASE)
123
128
 
124
- def get_info(self, name: str) -> str | None:
125
- """Label and additional info for 'name' if 'name' is in self.emailers."""
126
- info_pieces = [
127
- self.category or ('' if len(self.emailers) == 1 else self.label.replace('_', ' ')),
128
- self.emailers.get(name),
129
- ]
129
+ def category_str(self) -> str:
130
+ if self.category:
131
+ return self.category
132
+ elif len(self.emailers) == 1 and self.label == [k for k in self.emailers.keys()][0]:
133
+ return ''
134
+ else:
135
+ return self.label.replace('_', ' ')
130
136
 
137
+ def info_for(self, name: str, include_category: bool = False) -> str | None:
138
+ """Label and additional info for 'name' if 'name' is in self.emailers."""
139
+ info_pieces = [self.category_str()] if include_category else []
140
+ info_pieces.append(self.emailers.get(name) or '')
131
141
  info_pieces = without_falsey(info_pieces)
132
142
  return ', '.join(info_pieces) if info_pieces else None
133
143
 
@@ -136,28 +146,22 @@ class HighlightedNames(HighlightedText):
136
146
  if not self.should_match_first_last_name:
137
147
  return name
138
148
 
139
- name = remove_question_marks(name)
140
- first_name = extract_first_name(name)
141
- last_name = extract_last_name(name)
142
-
143
149
  if name in EMAILER_ID_REGEXES:
144
- pattern = EMAILER_ID_REGEXES[name].pattern
150
+ name_patterns = [EMAILER_ID_REGEXES[name].pattern]
151
+ else:
152
+ name_patterns = [remove_question_marks(name).replace(' ', r"\s+")]
145
153
 
146
- # Include regex for first and last names
147
- for partial_name in [first_name, last_name]:
148
- if SIMPLE_NAME_REGEX.match(partial_name) and partial_name.lower() not in NAMES_TO_NOT_HIGHLIGHT:
149
- pattern += fr"|{partial_name}"
154
+ if ' ' in name:
155
+ for partial_name in [extract_first_name(name), extract_last_name(name)]:
156
+ if partial_name.lower() not in NAMES_TO_NOT_HIGHLIGHT and SIMPLE_NAME_REGEX.match(partial_name):
157
+ name_patterns.append(partial_name.replace(' ', r"\s+"))
150
158
 
151
- return pattern
152
- elif ' ' not in name:
153
- return name
159
+ pattern = '|'.join(name_patterns)
154
160
 
155
- name_patterns = [
156
- n.replace(' ', r"\s+") for n in [name, first_name, last_name]
157
- if n.lower() not in NAMES_TO_NOT_HIGHLIGHT
158
- ]
161
+ if args.deep_debug:
162
+ debug_console.print(Text('').append(f"{name:25s}", style=self.style).append(f" '{pattern}'", style='dim'))
159
163
 
160
- return '|'.join(name_patterns)
164
+ return pattern
161
165
 
162
166
  def __str__(self) -> str:
163
167
  return super().__str__()
@@ -209,7 +213,7 @@ HIGHLIGHTED_NAMES = [
209
213
  ManualHighlight(
210
214
  label='email_subject',
211
215
  style='light_yellow3',
212
- pattern=r"^(> )?Subject: (?P<email_subject>.*)",
216
+ pattern=r"^(> )?(Classification|Flag|Subject): (?P<email_subject>.*)",
213
217
  ),
214
218
  HighlightedNames(
215
219
  label=ACADEMIA,
@@ -225,12 +229,14 @@ HIGHLIGHTED_NAMES = [
225
229
  MARK_TRAMO: 'professor of neurology at UCLA',
226
230
  'Nancy Dahl': f'wife of {LAWRENCE_KRAUSS}',
227
231
  NEAL_KASSELL: 'professor of neurosurgery at University of Virginia',
232
+ NOAM_CHOMSKY: f"professor of linguistics at MIT",
228
233
  PETER_ATTIA: 'longevity medicine',
229
234
  ROBERT_TRIVERS: 'evolutionary biology',
230
235
  ROGER_SCHANK: 'Teachers College, Columbia University',
236
+ 'Valeria Chomsky': f"wife of {NOAM_CHOMSKY}",
231
237
  },
232
238
  patterns=[
233
- r"Alain Forget",
239
+ r"Bard\s+((Early )?College|High School|Schools)",
234
240
  r"Brotherton",
235
241
  r"Carl\s*Sagan",
236
242
  r"Columbia",
@@ -242,7 +248,6 @@ HIGHLIGHTED_NAMES = [
242
248
  r"Media\s*Lab",
243
249
  r"(Marvin\s*)?Minsky",
244
250
  r"MIT(\s*Media\s*Lab)?",
245
- r"((Noam|Valeria)\s*)?Chomsky",
246
251
  r"Norman\s*Finkelstein",
247
252
  r"Oxford(?! Analytica)",
248
253
  r"Praluent",
@@ -285,6 +290,21 @@ HIGHLIGHTED_NAMES = [
285
290
  r"Zimbabwe(an)?",
286
291
  ],
287
292
  ),
293
+ HighlightedNames(
294
+ label=BILL_GATES,
295
+ style='turquoise4',
296
+ emailers={
297
+ BORIS_NIKOLIC: f'biotech VC partner of {BILL_GATES}, {EPSTEIN_ESTATE_EXECUTOR}',
298
+ },
299
+ patterns=[
300
+ r"BG",
301
+ r"b?g?C3",
302
+ r"(Bill\s*((and|or|&)\s*Melinda\s*)?)?Gates(\s*Foundation)?",
303
+ r"Melinda(\s*Gates)?",
304
+ r"Microsoft",
305
+ r"MSFT",
306
+ ],
307
+ ),
288
308
  HighlightedNames(
289
309
  label='bitcoin',
290
310
  style='orange1 bold',
@@ -303,16 +323,18 @@ HIGHLIGHTED_NAMES = [
303
323
  r"cr[iy]?pto(currenc(y|ies))?",
304
324
  r"Digital\s*Currenc(ies|y)(\s*Initiative)?",
305
325
  r"e-currency",
306
- r"(Gavin )?Andressen",
326
+ r"(Gavin )?Andress?en",
307
327
  r"(Howard\s+)?Lutnic?k",
308
328
  r"Libra",
309
329
  r"Madars",
330
+ r"Mi(chael|ke)\s*Novogratz",
310
331
  r"(Patrick\s*)?Murck",
311
332
  r"(Ross\s*)?Ulbricht",
312
333
  r"Silk\s*Road",
313
334
  r"SpanCash",
314
335
  r"Tether",
315
336
  r"virtual\s*currenc(ies|y)",
337
+ r"Wladimir( van der Laan)?",
316
338
  r"(zero\s+knowledge\s+|zk)pro(of|tocols?)",
317
339
  ],
318
340
  ),
@@ -322,10 +344,10 @@ HIGHLIGHTED_NAMES = [
322
344
  emailers={
323
345
  ALIREZA_ITTIHADIEH: 'CEO Freestream Aircraft Limited',
324
346
  BARBRO_C_EHNBOM: 'Swedish pharmaceuticals, SALSS',
325
- 'David Mitchell': 'president of New York real estate development firm Mitchell Holdings',
347
+ 'David Mitchell': 'Mitchell Holdings New York real estate developer',
326
348
  FRED_HADDAD: "co-founder of Heck's in West Virginia",
327
349
  GERALD_BARTON: "Maryland property developer Landmark Land Company",
328
- GORDON_GETTY: 'heir of oil tycoon J. Paul Getty',
350
+ GORDON_GETTY: 'heir to oil tycoon J. Paul Getty',
329
351
  NICHOLAS_RIBIS: 'Hilton CEO, former president of Trump Organization',
330
352
  'Philip Kafka': 'president of Prince Concepts (and son of Terry Kafka?)',
331
353
  ROBERT_LAWRENCE_KUHN: 'investment banker, China expert',
@@ -392,10 +414,10 @@ HIGHLIGHTED_NAMES = [
392
414
  ],
393
415
  ),
394
416
  HighlightedNames(
395
- label=DEEPAK_CHOPRA,
417
+ label='deepak',
396
418
  style='dark_sea_green4',
397
419
  emailers={
398
- CAROLYN_RANGEL: 'assistant',
420
+ CAROLYN_RANGEL: f"Deepak Chopra's assistant {QUESTION_MARKS}",
399
421
  DEEPAK_CHOPRA: 'woo woo',
400
422
  },
401
423
  ),
@@ -407,6 +429,7 @@ HIGHLIGHTED_NAMES = [
407
429
  },
408
430
  patterns=[
409
431
  r"(Al\s*)?Franken",
432
+ r"Al\s*Gore",
410
433
  r"(Barac?k )?Obama",
411
434
  r"((Bill|Hillart?y)\s*)?Clinton",
412
435
  r"((Chuck|Charles)\s*)?S(ch|hc)umer",
@@ -429,16 +452,18 @@ HIGHLIGHTED_NAMES = [
429
452
  r"(Nancy )?Pelosi",
430
453
  r"Ron\s*Dellums",
431
454
  r"Schumer",
432
- r"(Tim\s*)?Geithner",
455
+ r"(Tim(othy)?\s*)?Geithner",
456
+ r"Tom McMillen",
433
457
  r"Vernon\s*Jordan",
434
458
  ],
435
459
  ),
436
460
  HighlightedNames(
437
- label='Dubin family',
461
+ label='Dubins',
438
462
  style='medium_orchid1',
439
463
  emailers={
440
464
  GLENN_DUBIN: "Highbridge Capital Management, married to Epstein's ex-gf Eva",
441
465
  EVA: "possibly Epstein's ex-girlfriend (?)",
466
+ 'Eva Dubin': f"Epstein's ex-girlfriend now married to {GLENN_DUBIN}",
442
467
  },
443
468
  patterns=[r"((Celina|Eva( Anderss?on)?|Glenn) )?Dubin"],
444
469
  ),
@@ -449,13 +474,15 @@ HIGHLIGHTED_NAMES = [
449
474
  'Alfredo Rodriguez': "Epstein's butler, stole the journal",
450
475
  ERIC_ROTH: 'jet decorator',
451
476
  GWENDOLYN_BECK: 'Epstein fund manager in the 90s',
477
+ JANUSZ_BANASIAK: "Epstein's house manager",
452
478
  JEAN_HUGUEN: 'interior design at Alberto Pinto Cabinet',
453
- LAWRANCE_VISOSKI: 'pilot',
454
- LESLEY_GROFF: 'assistant',
479
+ LAWRANCE_VISOSKI: "Epstein's pilot",
480
+ LESLEY_GROFF: f"Epstein's assistant",
455
481
  'Linda Pinto': 'interior design at Alberto Pinto Cabinet',
456
482
  MERWIN_DELA_CRUZ: None, # HOUSE_OVERSIGHT_032652 Groff says "Jojo and Merwin both requested off Nov. 25 and 26"
457
- NADIA_MARCINKO: 'pilot',
483
+ NADIA_MARCINKO: "Epstein's pilot",
458
484
  'Sean J. Lancaster': 'airplane reseller',
485
+ ZUBAIR_KHAN: 'cybersecurity firm Tranchulas CEO, InsightsPod founder, Islamabad/Dubai',
459
486
  },
460
487
  patterns=[
461
488
  r"Adriana\s*Ross",
@@ -471,7 +498,6 @@ HIGHLIGHTED_NAMES = [
471
498
  'Barry Josephson': 'American film producer, editor FamilySecurityMatters.org',
472
499
  BILL_SIEGEL: 'documentary film producer and director',
473
500
  DAVID_BLAINE: 'famous magician',
474
- HENRY_HOLT: f"{MICHAEL_WOLFF}'s book publisher",
475
501
  'Richard Merkin': 'painter, illustrator and arts educator',
476
502
  STEVEN_PFEIFFER: 'Associate Director at Independent Filmmaker Project (IFP)',
477
503
  },
@@ -500,15 +526,28 @@ HIGHLIGHTED_NAMES = [
500
526
  r"Zach Braff",
501
527
  ],
502
528
  ),
529
+ HighlightedNames(
530
+ label='Epstein',
531
+ style='blue1',
532
+ emailers={
533
+ JEFFREY_EPSTEIN: None,
534
+ MARK_EPSTEIN: 'brother of Jeffrey',
535
+ },
536
+ patterns=[
537
+ r"JEGE",
538
+ r"LSJ",
539
+ ],
540
+ ),
503
541
  HighlightedNames(
504
542
  label=EPSTEIN_LAWYER,
505
543
  style='purple',
506
544
  emailers={
507
545
  'Alan S Halperin': 'partner at Paul, Weiss',
508
- ALAN_DERSHOWITZ: 'Harvard Law School professor and all around (in)famous American lawyer',
546
+ ALAN_DERSHOWITZ: 'Harvard Law School professor',
509
547
  ARDA_BESKARDES: 'NYC immigration attorney allegedly involved in sex-trafficking operations',
510
548
  BENNET_MOSKOWITZ: f'represented the {EPSTEIN_ESTATE_EXECUTOR}s',
511
549
  BRAD_KARP: 'head of the law firm Paul Weiss',
550
+ 'Connie Zaguirre': f"office of {ROBERT_D_CRITTON_JR}",
512
551
  DAVID_SCHOEN: f"{CRIMINAL_DEFENSE_ATTORNEY} after 2019 arrest",
513
552
  DEBBIE_FEIN: EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY,
514
553
  'Erika Kellerhals': 'attorney in St. Thomas',
@@ -523,10 +562,10 @@ HIGHLIGHTED_NAMES = [
523
562
  MICHAEL_MILLER: 'Steptoe LLP partner',
524
563
  REID_WEINGARTEN: 'Steptoe LLP partner',
525
564
  ROBERT_D_CRITTON_JR: CRIMINAL_DEFENSE_ATTORNEY,
526
- 'Robert Gold': 'helped Epstein track down millions belonging to wealthy Spanish families',
565
+ 'Robert Gold': 'helped Epstein track down money belonging to Spanish families',
527
566
  'Roy Black': CRIMINAL_DEFENSE_2008,
528
567
  SCOTT_J_LINK: CRIMINAL_DEFENSE_ATTORNEY,
529
- TONJA_HADDAD_COLEMAN: f'{EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY}, maybe daughter of Fred Haddad?',
568
+ TONJA_HADDAD_COLEMAN: f'{EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY}, relation of Fred Haddad?',
530
569
  },
531
570
  patterns=[
532
571
  r"(Barry (E. )?)?Krischer",
@@ -536,7 +575,7 @@ HIGHLIGHTED_NAMES = [
536
575
  r"(Leon\s*)?Jaworski",
537
576
  r"Michael J. Pike",
538
577
  r"Paul,?\s*Weiss",
539
- r"Steptoe(\s*LLP)?",
578
+ r"Steptoe(\s*& Johnson)?(\s*LLP)?",
540
579
  r"Wein(berg|garten)",
541
580
  ],
542
581
  ),
@@ -554,11 +593,12 @@ HIGHLIGHTED_NAMES = [
554
593
  style='light_sky_blue3',
555
594
  emailers={
556
595
  ANDRZEJ_DUDA: 'former president of Poland',
596
+ "Edward Rod Larsen": f"son of {TERJE_ROD_LARSEN}",
557
597
  'Fabrice Aidan': f'diplomat who worked with {TERJE_ROD_LARSEN}',
558
598
  MIROSLAV_LAJCAK: 'Russia-friendly Slovakian politician, friend of Steve Bannon',
559
599
  PETER_MANDELSON: 'UK politics',
560
600
  TERJE_ROD_LARSEN: 'Norwegian diplomat',
561
- THORBJORN_JAGLAND: 'former prime minister of Norway and head of the Nobel Peace Prize Committee',
601
+ THORBJORN_JAGLAND: 'former prime minister of Norway, Nobel Peace Prize Committee',
562
602
  },
563
603
  patterns=[
564
604
  r"(Angela )?Merk(el|le)",
@@ -583,6 +623,7 @@ HIGHLIGHTED_NAMES = [
583
623
  r"Germany?",
584
624
  r"Gillard",
585
625
  r"Gree(ce|k)",
626
+ r"Ibiza",
586
627
  r"Ital(ian|y)",
587
628
  r"Jacques",
588
629
  r"Kiev",
@@ -601,8 +642,7 @@ HIGHLIGHTED_NAMES = [
601
642
  r"Polish",
602
643
  r"pope",
603
644
  r"(Sebastian )?Kurz",
604
- r"(Vi(c|k)tor\s+)?Orbah?n",
605
- r"Edward Rod Larsen",
645
+ r"Stockholm",
606
646
  r"Strasbourg",
607
647
  r"Strauss[- ]?Kahn",
608
648
  r"Swed(en|ish)(?![-\s]+American Life Scienc)",
@@ -610,6 +650,7 @@ HIGHLIGHTED_NAMES = [
610
650
  r"(Tony\s)?Blair",
611
651
  r"U\.K\.",
612
652
  r"Ukrain(e|ian)",
653
+ r"(Vi(c|k)tor\s+)?Orbah?n",
613
654
  r"Vienna",
614
655
  r"Zug",
615
656
  r"Zurich",
@@ -647,6 +688,7 @@ HIGHLIGHTED_NAMES = [
647
688
  r"B\s*of\s*A",
648
689
  r"Boothbay(\sFund\sManagement)?",
649
690
  r"Chase\s*Bank",
691
+ r"Conrad B",
650
692
  r"Credit\s*Suisse",
651
693
  r"DB",
652
694
  r"Deutsche?\s*(Asset|Bank)",
@@ -658,7 +700,7 @@ HIGHLIGHTED_NAMES = [
658
700
  r"HSBC",
659
701
  r"Invesco",
660
702
  r"(Janet\s*)?Yellen",
661
- r"(Jerome\s*)?Powell(?!M\. Cabot)",
703
+ r"(Jerome\s*)?Powell(?! M\. Cabot)",
662
704
  r"(Jimmy\s*)?Cayne",
663
705
  r"JPMC?",
664
706
  r"j\.?p\.?\s*morgan(\.?com|\s*Chase)?",
@@ -679,11 +721,11 @@ HIGHLIGHTED_NAMES = [
679
721
  ],
680
722
  ),
681
723
  HighlightedNames(
682
- label='friend',
724
+ label=FRIEND,
683
725
  style='tan',
684
726
  emailers={
685
727
  DANGENE_AND_JENNIE_ENTERPRISE: 'founders of the members-only CORE club',
686
- DAVID_STERN: f'emailed Epstein from Moscow, appears to know chairman of {DEUTSCHE_BANK}',
728
+ DAVID_STERN: f'emailed Epstein from Moscow, knows chairman of {DEUTSCHE_BANK} (?)',
687
729
  JONATHAN_FARKAS: "heir to the Alexander's department store fortune",
688
730
  'linkspirit': 'Skype username of someone Epstein communicated with',
689
731
  'Peter Thomas Roth': 'student of Epstein at Dalton, skincare company founder',
@@ -707,7 +749,7 @@ HIGHLIGHTED_NAMES = [
707
749
  LISA_NEW: f'professor of poetry, wife of {LARRY_SUMMERS}, AKA "Elisa New"',
708
750
  'Lisa Randall': 'theoretical physicist',
709
751
  MARTIN_NOWAK: 'professor of mathematics and biology',
710
- MOSHE_HOFFMAN: 'lecturer and research scholar in behavioral and evolutionary economics',
752
+ MOSHE_HOFFMAN: 'behavioral and evolutionary economics',
711
753
  },
712
754
  patterns=[
713
755
  r"Cambridge",
@@ -725,7 +767,6 @@ HIGHLIGHTED_NAMES = [
725
767
  emailers={
726
768
  ANIL_AMBANI: 'chairman of Reliance Group',
727
769
  VINIT_SAHNI: None,
728
- ZUBAIR_KHAN: 'cybersecurity firm Tranchulas CEO, InsightsPod founder, Islamabad/Dubai',
729
770
  },
730
771
  patterns=[
731
772
  r"Abraaj",
@@ -746,7 +787,7 @@ HIGHLIGHTED_NAMES = [
746
787
  label='Israel',
747
788
  style='dodger_blue2',
748
789
  emailers={
749
- EHUD_BARAK: 'former primer minister',
790
+ EHUD_BARAK: 'former prime minister of Israel, Epstein business partner',
750
791
  'Mitchell Bard': 'director of the American-Israeli Cooperative Enterprise (AICE)',
751
792
  'Nili Priell Barak': 'wife of Ehud Barak',
752
793
  },
@@ -784,7 +825,9 @@ HIGHLIGHTED_NAMES = [
784
825
  label=JOURNALIST,
785
826
  style='bright_yellow',
786
827
  emailers={
787
- EDWARD_JAY_EPSTEIN: 'no relation, wrote about the kinds of crimes Epstein was involved in',
828
+ 'Alain Forget': 'author of "How To Get Out Of This World ALIVE"',
829
+ EDWARD_JAY_EPSTEIN: 'no relation, wrote books about spies',
830
+ HENRY_HOLT: f"{MICHAEL_WOLFF}'s book publisher",
788
831
  JAMES_HILL: 'ABC News',
789
832
  JENNIFER_JACQUET: 'Future Science',
790
833
  JOHN_BROCKMAN: 'literary agent and author specializing in scientific literature',
@@ -802,18 +845,22 @@ HIGHLIGHTED_NAMES = [
802
845
  r"Axios",
803
846
  r"BBC",
804
847
  r"Breitbart",
848
+ r"BuzzFeed",
849
+ r"CBS(\s*(4|Corp|News))?"
805
850
  r"Charlie\s*Rose",
806
851
  r"China\s*Daily",
807
852
  r"CNBC",
808
853
  r"CNN(politics?)?",
809
854
  r"Con[cs]hita", r"Sarnoff",
810
855
  r"Daily Business Review",
811
- r"(?<!Virgin[-\s]Islands[-\s])Daily\s*(Beast|Mail|News|Telegraph)",
856
+ r"(?<!Virgin[-\s]Islands[-\s])(The\s*)?Daily\s*(Beast|Mail|News|Telegraph)",
812
857
  r"(David\s*)?(Pecker|Pegg)",
813
858
  r"David\s*Brooks",
814
859
  r"Ed\s*Krassenstein",
815
860
  r"(Emily\s*)?Michot",
816
861
  r"Ezra\s*Klein",
862
+ r"Forbes",
863
+ r"Fortune\s*Magazine",
817
864
  r"Fox\s*News(\.com)?",
818
865
  r"FrontPage Magazine",
819
866
  r"FT",
@@ -831,18 +878,20 @@ HIGHLIGHTED_NAMES = [
831
878
  r"Keith\s*Larsen",
832
879
  r"L\.?A\.?\s*Times",
833
880
  r"Law(360|\.com|fare)",
881
+ r"(Les\s*)?Moonves",
834
882
  r"MarketWatch",
835
883
  r"Miami\s*Herald",
836
884
  r"(Mi(chael|ke)\s*)?Bloomberg",
837
885
  r"(Michele\s*)?Dargan",
838
886
  r"Morning News USA",
839
887
  r"(National\s*)?Enquirer",
840
- r"Newsweek",
888
+ r"News(max|week)",
841
889
  r"NYer",
842
890
  r"Palm\s*Beach\s*(Daily\s*News|Post)",
843
891
  r"PERVERSION\s*OF\s*JUSTICE",
844
892
  r"Politico",
845
893
  r"Pro\s*Publica",
894
+ r"Reuters",
846
895
  r"(Sean\s*)?Hannity",
847
896
  r"Sulzberger",
848
897
  r"SunSentinel",
@@ -902,7 +951,7 @@ HIGHLIGHTED_NAMES = [
902
951
  ],
903
952
  ),
904
953
  HighlightedNames(
905
- label='law enforcement',
954
+ label='government',
906
955
  style='color(24) bold',
907
956
  emailers={
908
957
  ANN_MARIE_VILLAFANA: 'Southern District of Florida (SDFL) U.S. Attorney',
@@ -932,6 +981,7 @@ HIGHLIGHTED_NAMES = [
932
981
  r"FINRA",
933
982
  r"FOIA",
934
983
  r"FTC",
984
+ r"(General\s*)?P(a|e)traeus",
935
985
  r"IRS",
936
986
  r"(James\s*)?Comey",
937
987
  r"Jeff(rey)?\s*Sessions",
@@ -971,6 +1021,7 @@ HIGHLIGHTED_NAMES = [
971
1021
  label=LOBBYIST,
972
1022
  style='light_coral',
973
1023
  emailers={
1024
+ BOB_CROWE: 'partner at Nelson Mullins',
974
1025
  'Joshua Cooper Ramo': 'co-CEO of Henry Kissinger Associates',
975
1026
  KATHERINE_KEATING: 'Daughter of former Australian PM',
976
1027
  MOHAMED_WAHEED_HASSAN: 'former president of the Maldives',
@@ -980,14 +1031,13 @@ HIGHLIGHTED_NAMES = [
980
1031
  'Stanley Rosenberg': 'former President of the Massachusetts Senate',
981
1032
  },
982
1033
  patterns=[
983
- r"[BR]ob Crowe",
984
1034
  r"CSIS",
985
1035
  r"(Kevin\s*)?Rudd",
986
1036
  r"Stanley Rosenberg",
987
1037
  ],
988
1038
  ),
989
1039
  HighlightedNames(
990
- label='mideast',
1040
+ label=MIDEAST,
991
1041
  style='dark_sea_green4',
992
1042
  emailers={
993
1043
  ANAS_ALRASHEED: 'former information minister of Kuwait (???)',
@@ -1071,7 +1121,7 @@ HIGHLIGHTED_NAMES = [
1071
1121
  r"sheikh",
1072
1122
  r"shia",
1073
1123
  r"(Sultan\s*)?Yacoub",
1074
- r"Sultan",
1124
+ r"Sultan(?! Ahmed)",
1075
1125
  r"Syrian?",
1076
1126
  r"(Tarek\s*)?El\s*Sayed",
1077
1127
  r"Tehran",
@@ -1101,21 +1151,22 @@ HIGHLIGHTED_NAMES = [
1101
1151
  patterns=[
1102
1152
  r"\w+@mc2mm.com",
1103
1153
  r"MC2",
1104
- r"model(ed|ing)",
1105
1154
  r"(Nicole\s*)?Junkerman", # Also a venture fund manager now
1155
+ r"Tigrane",
1106
1156
  ],
1107
1157
  ),
1108
1158
  HighlightedNames(
1109
1159
  label=PUBLICIST,
1110
1160
  style='orange_red1',
1111
1161
  emailers={
1112
- AL_SECKEL: 'husband of Isabel Maxwell, Mindshift conference organizer who fell off a cliff',
1113
- 'Barnaby Marsh': 'co-founder of Saint Partners, a philanthropy services company',
1114
- CHRISTINA_GALBRAITH: f"{REPUTATION_MGMT}, worked with Tyler Shears",
1115
- IAN_OSBORNE: f'{OSBORNE_LLP} reputation repairer hired by Epstein in 2011',
1162
+ AL_SECKEL: "Isabel Maxwell's husband, Mindshift conference, fell off a cliff",
1163
+ 'Barnaby Marsh': 'co-founder of philanthropy services company Saint Partners',
1164
+ CHRISTINA_GALBRAITH: f"{EPSTEIN_FOUNDATION} Media/PR, worked with {TYLER_SHEARS}", # Title in 031441
1165
+ IAN_OSBORNE: f'{OSBORNE_LLP} reputation repairer hired in 2011',
1166
+ MATTHEW_HILTZIK: 'crisis PR at Hiltzik Strategies',
1116
1167
  MICHAEL_SITRICK: 'crisis PR',
1117
1168
  'Owen Blicksilver': 'OBPR, Inc.',
1118
- PEGGY_SIEGAL: 'socialite',
1169
+ PEGGY_SIEGAL: 'socialite, movie promoter',
1119
1170
  'R. Couri Hay': None,
1120
1171
  ROSS_GOW: 'Acuity Reputation Management',
1121
1172
  TYLER_SHEARS: f"{REPUTATION_MGMT}, worked on with {CHRISTINA_GALBRAITH}",
@@ -1147,6 +1198,7 @@ HIGHLIGHTED_NAMES = [
1147
1198
  r"(?<!Merwin Dela )Cruz",
1148
1199
  r"Devin\s*Nunes",
1149
1200
  r"(Don\s*)?McGa[hn]n",
1201
+ r"Gary\s*Cohn",
1150
1202
  r"George\s*(H\.?\s*)?(W\.?\s*)?Bush",
1151
1203
  r"(George\s*)?Nader",
1152
1204
  r"GOP",
@@ -1154,7 +1206,7 @@ HIGHLIGHTED_NAMES = [
1154
1206
  r"Kissinger",
1155
1207
  r"Kobach",
1156
1208
  r"Kolfage",
1157
- r"Kudlow",
1209
+ r"(Larry\s*)?Kudlow",
1158
1210
  r"Lewandowski",
1159
1211
  r"(Marco\s)?Rubio",
1160
1212
  r"(Mark\s*)Meadows",
@@ -1192,7 +1244,7 @@ HIGHLIGHTED_NAMES = [
1192
1244
  style='red bold',
1193
1245
  emailers={
1194
1246
  'Dasha Zhukova': 'art collector, daughter of Alexander Zhukov',
1195
- MASHA_DROKOVA: 'silicon valley VC, former Putin Youth',
1247
+ MASHA_DROKOVA: 'silicon valley VC, former Putin Youth member',
1196
1248
  RENATA_BOLOTOVA: 'former aspiring model, now fund manager at New York State Insurance Fund',
1197
1249
  SVETLANA_POZHIDAEVA: "Epstein's Russian assistant who was recommended for a visa by Sergei Belyakov (FSB) and David Blaine",
1198
1250
  },
@@ -1209,7 +1261,7 @@ HIGHLIGHTED_NAMES = [
1209
1261
  r"KGB",
1210
1262
  r"Kislyak",
1211
1263
  r"Kremlin",
1212
- r"Kuznetsova",
1264
+ r"(Anastasia\s*)?Kuznetsova",
1213
1265
  r"Lavrov",
1214
1266
  r"Lukoil",
1215
1267
  r"Moscow",
@@ -1240,6 +1292,7 @@ HIGHLIGHTED_NAMES = [
1240
1292
  r"Cambodian?",
1241
1293
  r"Laos",
1242
1294
  r"Malaysian?",
1295
+ r"Maldives",
1243
1296
  r"Myan?mar",
1244
1297
  r"Philippines",
1245
1298
  r"South\s*Korean?",
@@ -1300,8 +1353,7 @@ HIGHLIGHTED_NAMES = [
1300
1353
  r"(Donald\s+(J\.\s+)?)?Trump(ism|\s*(Org(anization)?|Properties)(\s*LLC)?)?",
1301
1354
  r"Don(ald| *Jr)(?! (B|Rubin))",
1302
1355
  r"Ivank?a",
1303
- r"Jared",
1304
- r"Kushner",
1356
+ r"Jared", r"(?<!Tony )Kushner",
1305
1357
  r"(Madeleine\s*)?Westerhout",
1306
1358
  r"Mar[-\s]*a[-\s]*Lago",
1307
1359
  r"(Marla\s*)?Maples",
@@ -1348,12 +1400,12 @@ HIGHLIGHTED_NAMES = [
1348
1400
  ],
1349
1401
  ),
1350
1402
  HighlightedNames(
1351
- label=VIRGIN_ISLANDS,
1403
+ label='USVI',
1352
1404
  style='sea_green1',
1353
1405
  emailers={
1354
- CECILE_DE_JONGH: 'first lady 2007-2015',
1355
- KENNETH_E_MAPP: 'Governor',
1356
- STACEY_PLASKETT: 'non-voting member of Congress',
1406
+ CECILE_DE_JONGH: 'Virgin Islands first lady 2007-2015',
1407
+ KENNETH_E_MAPP: 'Virgin Islands Governor',
1408
+ STACEY_PLASKETT: 'Virgin Islands non-voting member of Congress',
1357
1409
  },
1358
1410
  patterns=[
1359
1411
  r"Antigua",
@@ -1374,49 +1426,35 @@ HIGHLIGHTED_NAMES = [
1374
1426
  r"(West\s*)?Palm\s*Beach(?!\s*(Daily|Post))",
1375
1427
  ],
1376
1428
  ),
1377
- HighlightedNames(
1378
- label=BILL_GATES,
1379
- style='turquoise4',
1380
- emailers={
1381
- BORIS_NIKOLIC: f'biotech VC partner of {BILL_GATES}, {EPSTEIN_ESTATE_EXECUTOR}',
1382
- },
1383
- patterns=[
1384
- r"BG",
1385
- r"b?g?C3",
1386
- r"(Bill\s*((and|or)\s*Melinda\s*)?)?Gates(\s*Foundation)?",
1387
- r"Melinda(\s*Gates)?",
1388
- r"Microsoft",
1389
- r"MSFT",
1390
- ],
1391
- ),
1429
+
1430
+ # Individuals
1392
1431
  HighlightedNames(
1393
1432
  label=STEVE_BANNON,
1394
1433
  style='color(58)',
1395
- category=POLITICS,
1434
+ category='Republican',
1396
1435
  emailers={
1397
- STEVE_BANNON: "Trump campaign manager, memecoin grifter, convicted criminal",
1436
+ SEAN_BANNON: f"{STEVE_BANNON}'s brother",
1437
+ STEVE_BANNON: "Trump campaign manager, memecoin grifter",
1398
1438
  },
1399
1439
  patterns=[
1400
1440
  r"(American\s*)?Dharma",
1401
1441
  r"Biosphere",
1402
- r"((Steve|Sean)\s*)?Bannon?",
1403
1442
  ],
1404
1443
  ),
1405
1444
  HighlightedNames(
1406
1445
  style='dark_olive_green3',
1407
1446
  category=FINANCE,
1408
- emailers={STEVEN_HOFFENBERG: "Epstein's ponzi scheme partner at Towers Financial, prison for 18 years"},
1447
+ emailers={STEVEN_HOFFENBERG: "Epstein's Towers Financial ponzi scheme partner, prison 18 years"},
1409
1448
  patterns=[r"(steven?\s*)?hoffenberg?w?"],
1410
1449
  ),
1411
- HighlightedNames(emailers={GHISLAINE_MAXWELL: None}, patterns=[r"gmax(1@ellmax.com)?", r"TerraMar"], style='deep_pink3'),
1412
- HighlightedNames(emailers={JABOR_Y: '"an influential man in Qatar"'}, category='mideast', style='spring_green1'),
1413
- HighlightedNames(emailers={JEFFREY_EPSTEIN: None}, patterns=[r"JEGE", r"LSJ", r"Mark (L. )?Epstein"], style='blue1'),
1414
- HighlightedNames(emailers={KATHRYN_RUEMMLER: 'former Obama legal counsel'}, style='magenta2'),
1415
- HighlightedNames(emailers={MELANIE_WALKER: 'doctor'}, style='pale_violet_red1'),
1416
- HighlightedNames(emailers={PAULA: "Epstein's ex-girlfriend who is now in the opera world"}, label='paula', style='pink1'),
1417
- HighlightedNames(emailers={PRINCE_ANDREW: 'British royal family'}, style='dodger_blue1'),
1418
- HighlightedNames(emailers={SOON_YI_PREVIN: 'wife of Woody Allen'}, style='hot_pink'),
1419
- HighlightedNames(emailers={SULTAN_BIN_SULAYEM: 'CEO of DP World, chairman of ports in Dubai'}, style='green1'),
1450
+ HighlightedNames(emailers={GHISLAINE_MAXWELL: None}, patterns=[r"gmax(1@ellmax.com)?", r"(The )?TerraMar Project"], style='deep_pink3', category='Epstein'),
1451
+ HighlightedNames(emailers={JABOR_Y: '"an influential man in Qatar"'}, category=MIDEAST, style='spring_green1'),
1452
+ HighlightedNames(emailers={KATHRYN_RUEMMLER: 'former Obama legal counsel'}, style='magenta2', category=FRIEND),
1453
+ HighlightedNames(emailers={MELANIE_WALKER: f"doctor, friend of {BILL_GATES}"}, style='pale_violet_red1', category=FRIEND),
1454
+ HighlightedNames(emailers={PAULA: "Epstein's ex-girlfriend who is now in the opera world"}, label='paula', style='pink1', category=FRIEND),
1455
+ HighlightedNames(emailers={PRINCE_ANDREW: 'British royal family'}, style='dodger_blue1', category='Europe'),
1456
+ HighlightedNames(emailers={SOON_YI_PREVIN: 'wife of Woody Allen'}, style='hot_pink', category=FRIEND),
1457
+ HighlightedNames(emailers={SULTAN_BIN_SULAYEM: 'CEO of DP World, chairman of ports in Dubai'}, style='green1', category=MIDEAST),
1420
1458
 
1421
1459
  # HighlightedText not HighlightedNames bc of word boundary issue
1422
1460
  HighlightedText(
@@ -1439,7 +1477,7 @@ HIGHLIGHTED_TEXTS = [
1439
1477
  HighlightedText(
1440
1478
  label='header_field',
1441
1479
  style='plum4',
1442
- patterns=[r'^(> )?(Date|From|Sent|To|C[cC]|Importance|Reply-To|Subject|Bee|B[cC]{2}|Attachments):'],
1480
+ patterns=[r'^(> )?(Date|From|Sent|To|C[cC]|Importance|Reply-To|Subject|Bee|B[cC]{2}|Attachments|Flag|Classification):'],
1443
1481
  ),
1444
1482
  HighlightedText(
1445
1483
  label='http_links',
@@ -1495,23 +1533,6 @@ class EpsteinHighlighter(RegexHighlighter):
1495
1533
  highlights = [highlight_group.regex for highlight_group in ALL_HIGHLIGHTS]
1496
1534
 
1497
1535
 
1498
- def get_category_txt_for_name(name: str | None) -> Text | None:
1499
- highlight_group = _get_highlight_group_for_name(name)
1500
-
1501
- if highlight_group and isinstance(highlight_group, HighlightedNames):
1502
- category = highlight_group.category or highlight_group.label
1503
-
1504
- if category != name:
1505
- return styled_category(category)
1506
-
1507
-
1508
- def get_info_for_name(name: str | None) -> str | None:
1509
- highlight_group = _get_highlight_group_for_name(name)
1510
-
1511
- if highlight_group and isinstance(highlight_group, HighlightedNames) and name:
1512
- return highlight_group.get_info(name)
1513
-
1514
-
1515
1536
  def get_style_for_category(category: str) -> str | None:
1516
1537
  if category in CATEGORY_STYLES:
1517
1538
  return CATEGORY_STYLES[category]
@@ -1525,24 +1546,27 @@ def get_style_for_category(category: str) -> str | None:
1525
1546
  return highlight_group.style
1526
1547
 
1527
1548
 
1528
- def get_style_for_name(name: str | None, default_style: str = DEFAULT, allow_bold: bool = True) -> str:
1529
- highlight_group = _get_highlight_group_for_name(name or UNKNOWN)
1549
+ def get_style_for_name(name: str | None, default_style: str = DEFAULT_NAME_STYLE, allow_bold: bool = True) -> str:
1550
+ highlight_group = get_highlight_group_for_name(name or UNKNOWN)
1530
1551
  style = highlight_group.style if highlight_group else default_style
1531
- return style if allow_bold else style.replace('bold', '').strip()
1552
+ style = style if allow_bold else style.replace('bold', '').strip()
1553
+ logger.debug(f"get_style_for_name('{name}', '{default_style}', '{allow_bold}') yielded '{style}'")
1554
+ return style
1532
1555
 
1533
1556
 
1534
1557
  def styled_category(category: str | None) -> Text:
1535
1558
  if not category:
1536
1559
  return QUESTION_MARKS_TXT
1537
1560
 
1538
- return Text(category, get_style_for_category(category) or 'wheat4')
1561
+ category_str = 'resumé' if category == 'resume' else category.lower()
1562
+ return Text(category_str, get_style_for_category(category) or 'wheat4')
1539
1563
 
1540
1564
 
1541
1565
  def styled_name(name: str | None, default_style: str = DEFAULT_NAME_STYLE) -> Text:
1542
1566
  return Text(name or UNKNOWN, style=get_style_for_name(name, default_style=default_style))
1543
1567
 
1544
1568
 
1545
- def _get_highlight_group_for_name(name: str | None) -> HighlightedNames | None:
1569
+ def get_highlight_group_for_name(name: str | None) -> HighlightedNames | None:
1546
1570
  if name is None:
1547
1571
  return None
1548
1572
 
@@ -1555,6 +1579,9 @@ def _print_highlighted_names_repr() -> None:
1555
1579
  for hn in HIGHLIGHTED_NAMES:
1556
1580
  if isinstance(hn, HighlightedNames):
1557
1581
  print(indented(repr(hn)) + ',')
1582
+ print(f"pattern: '{hn.regex.pattern}'")
1558
1583
 
1559
1584
  import sys
1560
1585
  sys.exit()
1586
+
1587
+ #_print_highlighted_names_repr()