# Names should be added to this file with this pattern:
#
# For individuals:
#   Name <email address>
#
# For organizations:
#   Organization <fnmatch pattern>
#
# See python fnmatch module documentation for more information.
#
# Please keep the list sorted.

# BEGIN individuals section.
Ajay Panthagani <ajaypanthagani321@gmail.com>
Alexander Stammbach <alexander@stammbach.io>
Alexey Rodionov <fluorescent.hallucinogen@gmail.com>
Ankit Mishra <ankit.mishra131990@gmail.com>
Anna Agoha <annaagoha@gmail.com>
Anthony Xie <anthonyxie64@gmail.com>
Boris Verkhovskiy <boris.verk@gmail.com>
Carl Espe <carl@cpespe.com>
Conner Turner <cturner@zyme.xyz>
Daniel bellfield <dnlbellfield@gmail.com>
Danny Eldridge <me@heardanieljames.com>
Derek Li <the.derekli@gmail.com>
Edward Trist <edwardtrist@gmail.com>
Ergün Erdoğmuş <erdogmusergun@gmail.com>
Eric Rannaud <eric.rannaud@gmail.com>
Feng Lu <lufengd3@gmail.com>
Feng Yu <f3n67u@gmail.com>
Gabriel Luong <gabriel.luong@gmail.com>
Gautham Banasandra <gautham.bangalore@gmail.com>
Han Xu <suyanhanx@gmail.com>
Jacky Hu <flameddd@gmail.com>
Jake Mulhern <mulherje@gmail.com>
Jan Keitel <jan.keitel@gmail.com>
Jeffrey Chen <jeffreyca16@gmail.com>
Jesper van den Ende <jespertheend@gmail.com>
Juba Borgohain <chromiumjuba@gmail.com>
Julian Geppert <spctstr@gmail.com>
Karntino Areros <karntino.c.areros@gmail.com>
Krishnal Ciccolella <ciccolella.krishnal@gmail.com>
Luke Swiderski <luke.swiderski@gmail.com>
Marijn Haverbeke <marijnh@gmail.com>
Michael Brüning <michael.bruning@qt.io>
Michael Rienstra <mrienstra@gmail.com>
Paul Fisher <paul@pfish.zone>
Per-Olov Jernberg <possan@possan.se>
PhistucK <phistuck@gmail.com>
Pradhuman Singh Baid <pradhumansinghbaid@gmail.com>
Rahat Muneeb <irahatmuneeb@gmail.com>
Rahul B S <bsrahul2020@gmail.com>
Rajasekar Murugan <rajasekar89be@gmail.com>
Ross Wollman <ross.wollman@gmail.com>
Serg Kryvonos <sergeikrivonos@gmail.com>
Stephen Tsoi-A-Sue <stsoiasue@gmail.com>
Tony Kostowny <tonykostowny@gmail.com>
Toshiaki Tanaka <zokutyou2@gmail.com>
Varun Varada <varuncvarada@gmail.com>
Will Hernandez <w.hernandez.code@gmail.com>
Yeol Park <peary2@gmail.com>
Yisi(一丝) <yiorsi@gmail.com>
Yoichiro Hibara <hibarayoichiro871@gmail.com>
Yuan Zhuang <joann.yuanzhuang@gmail.com>
# Please DO NOT APPEND here. See comments at the top of the file.
# END individuals section.

# BEGIN organizations section.
Cloudflare, Inc. <*@cloudflare.com>
Facebook, Inc. <*@fb.com>
Google Inc. <*@google.com>
Igalia, S.L. <*@igalia.com>
Intel Corporation <*@intel.com>
Microsoft <*@microsoft.com>
Samsung <*@samsung.com>
The Chromium Authors <*@chromium.org>
The Qt Company <*@qt.io>
# Please DO NOT APPEND here. See comments at the top of the file.
# END organizations section.
