// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ignore_for_file: use_raw_strings

// COMMON PATTERNS

const String kIndent = r'^((?:[-;@#<!.\\"/* ]*(?:REM[-;@#<!.\\"/* ]*)?[-;@#<!.\"/*]+)?)( *)';

final RegExp stripDecorations = RegExp(
  r'^((?:(?:[-;@#<!.\\"/* ]*(?:REM[-;@#<!.\\"/* ]*)?[-;@#<!.\"/*]+)?)(?:(?: |\t)*))(.*?)[ */]*$',
  multiLine: true,
  caseSensitive: false
);

final RegExp newlinePattern = RegExp(r'\r\n?');

final RegExp beginLicenseBlock = RegExp(
  r'^([#;/* ]*) (?:\*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*[ */]*'
                r'|@APPLE_LICENSE_HEADER_START@)$'
);

final RegExp endLicenseBlock = RegExp(
  r'^([#;/* ]*) (?:\*\*\*\*\* END LICENSE BLOCK \*\*\*\*\*[ */]*'
                r'|@APPLE_LICENSE_HEADER_END@)$'
);

final RegExp nonSpace = RegExp('[^ ]');
final RegExp trailingComma = RegExp(r',[ */]*$');
final RegExp trailingColon = RegExp(r':(?: |\*|/|\n|=|-)*$');
final RegExp copyrightMentionPattern = RegExp(r'©| \(c\) (?!{)|copy\s*right\b|copy\s*left', caseSensitive: false);
final RegExp licenseMentionPattern = RegExp(r'license|warrant[iy]', caseSensitive: false);
final RegExp copyrightMentionOkPattern = RegExp(
  // if a (multiline) block matches this, we ignore it even if it matches copyrightMentionPattern/licenseMentionPattern
  r'(?:These are covered by the following copyright:'
     r'|^((?:[-;#<!.\\"/* ]*(?:REM[-;#<!.\\"/* ]*)?[-;#<!.\"/*]+)?)((?: |\t)*)COPYRIGHT: *\r?\n'
     r'|copyright.*\\n"' // clearly part of a string
     r'|\$YEAR' // clearly part of a template string
     r'|LICENSE BLOCK' // MPL license block header/footer
     r'|2117.+COPYRIGHT' // probably U+2117 mention...
     r'|// The copyright below was added in 2009, but I see no record'
     r'|This ICU code derived from:'
     r'|the contents of which are also included in zip.h' // seen in minizip's unzip.c, but the upshot of the crazy license situation there is that we don't have to do anything
     r'|hold font names, copyright info, notices, etc' // seen in a comment in freetype's src/include/ftsnames.h
     r'|' // the following is from android_tools/ndk/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
     r'^ \* This implementation uses an idea from the SGI STL \(using a @a header node\n'
     r'^ \*    which is needed for efficient iteration\)\. Following is the SGI STL\n'
     r'^ \*    copyright\.\n'
  r')',
  caseSensitive: false, multiLine: true);
final RegExp halfCopyrightPattern = RegExp(r'^(?:Copyright(?: \(c\))? [-0-9, ]+(?: by)?|Written [0-9]+)[ */]*$', caseSensitive: false);
final RegExp authorPattern = RegExp(r'Copyright .+(The .+ Authors)\. +All rights reserved\.', caseSensitive: false);

// copyright blocks start with the first line matching this
final List<RegExp> copyrightStatementLeadingPatterns = <RegExp>[
  RegExp(r'^ *(?:Portions(?: are)? )?Copyright .+$', caseSensitive: false),
  RegExp(r'^.*All rights? reserved\.$', caseSensitive: false),
  RegExp(r'^ *\(C\) .+$', caseSensitive: false),
  RegExp(r'^:copyright: .+$', caseSensitive: false),
  RegExp(r'[-_a-zA-Z0-9()]+ function provided freely by .+'),
  RegExp(r'^.+ optimized code \(C\) COPYRIGHT .+$', caseSensitive: false),
  RegExp(r'©'),

  // TODO(ianh): I wish there was a way around including the next few lines so many times in the output:
  RegExp(r"^This file (?:is|was) part of the Independent JPEG Group's software[:.]$"),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code$'),
  RegExp(r'^relevant to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code relevant$'),
  RegExp(r'^to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code and$'),
  RegExp(r'^information relevant to libjpeg-turbo\.$'),
];

// copyright blocks end with the last line that matches this, rest is considered license
final List<RegExp> copyrightStatementPatterns = <RegExp>[
  RegExp(r'^ *(?:Portions(?: created by the Initial Developer)?(?: are)? )?Copyright .+$', caseSensitive: false),
  RegExp(r'^\(Version [-0-9.:, ]+ Copyright .+\)$', caseSensitive: false),
  RegExp(r'^.*(?:All )?rights? reserved\.$', caseSensitive: false),
  RegExp(r'^ *\(C\) .+$', caseSensitive: false),
  RegExp(r'^:copyright: .+$', caseSensitive: false),
  RegExp(r'^ *[0-9][0-9][0-9][0-9].+ [<(].+@.+[)>]$'),
  RegExp(r'^                   [^ ].* [<(].+@.+[)>]$'), // that's exactly the number of spaces to line up with the X if "Copyright (c) 2011 X" is on the previous line
  RegExp(r'^ *and .+$', caseSensitive: false),
  RegExp(r'^ *others\.?$', caseSensitive: false),
  RegExp(r'^for more details\.$', caseSensitive: false),
  RegExp(r'^ *For more info read ([^ ]+)$', caseSensitive: false),
  RegExp(r'^(?:Google )?Author\(?s?\)?: .+', caseSensitive: false),
  RegExp(r'^Written by .+', caseSensitive: false),
  RegExp(r'^Originally written by .+', caseSensitive: false),
  RegExp(r'^Based on$', caseSensitive: false),
  RegExp(r"^based on (?:code in )?['`][^'`]+['`]$", caseSensitive: false),
  RegExp(r'^Based on .+, written by .+, [0-9]+\.$', caseSensitive: false),
  RegExp(r'^(?:Based on the )?x86 SIMD extension for IJG JPEG library(?: - version [0-9.]+|,)?$'),
  RegExp(r'^This software originally derived from .+\.$'),
  RegExp(r'^Derived from [a-z._/]+$'),
  RegExp(r'^Derived from .+, which was$'),
  RegExp(r'^ *This is part of .+, a .+ library\.$'),
  RegExp(r'^This file is part of [^ ]+\.$'),
  RegExp(r'^(?:Modification )?[Dd]eveloped [-0-9]+ by .+\.$', caseSensitive: false),
  RegExp(r'^Modified .+[:.]$', caseSensitive: false),
  RegExp(r'^(?:[^ ]+ )?Modifications:$', caseSensitive: false),
  RegExp(r'^ *Modifications for', caseSensitive: false),
  RegExp(r'^ *Modifications of', caseSensitive: false),
  RegExp(r'^Last changed in .+$', caseSensitive: false),
  RegExp(r'[-_a-zA-Z0-9()]+ function provided freely by .+'), // TODO(ianh): file a bug on analyzer about what happens if you omit this comma
  RegExp(r'^.+ optimized code \(C\) COPYRIGHT .+$', caseSensitive: false),
  RegExp(r'^\(Royal Institute of Technology, Stockholm, Sweden\)\.$'),
  RegExp(r'^\(?https?://[^ ]+$\)?'),

  RegExp(r'^The Original Code is Mozilla Communicator client code, released$'),
  RegExp(r'^March 31, 1998.$'), // mozilla first release date

  RegExp(r'^The Elliptic Curve Public-Key Crypto Library \(ECC Code\) included$'),
  RegExp(r'^herein is developed by SUN MICROSYSTEMS, INC\., and is contributed$'),
  RegExp(r'^to the OpenSSL project\.$'),

  RegExp(r'^This code is derived from software contributed to The NetBSD Foundation$'),
  RegExp(r'^by (?:Atsushi Onoe|Dieter Baron|Klaus Klein|Luke Mewburn|Thomas Klausner|,| |and)*\.$'),

  RegExp(r'^FT_Raccess_Get_HeaderInfo\(\) and raccess_guess_darwin_hfsplus\(\) are$'),
  RegExp(r'^derived from ftobjs\.c\.$'),

  // TODO(ianh): I wish there was a way around including the next few lines so many times in the output:
  RegExp(r"^This file (?:is|was) part of the Independent JPEG Group's software[:.]$"),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code$'),
  RegExp(r'^relevant to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code relevant$'),
  RegExp(r'^to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code and$'),
  RegExp(r'^information relevant to libjpeg-turbo\.$'),

  RegExp(r'^All or some portions of this file are derived from material licensed$'),
  RegExp(r'^to the University of California by American Telephone and Telegraph$'),
  RegExp(r'^Co\. or Unix System Laboratories, Inc\. and are reproduced herein with$'),
  RegExp(r'^the permission of UNIX System Laboratories, Inc.$'),

  RegExp(r'^This software was developed by the Computer Systems Engineering group$'),
  RegExp(r'^at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and$'),
  RegExp(r'^contributed to Berkeley\.$'),

  RegExp(r'^This code is derived from software contributed to Berkeley by$'),
  RegExp(r'^Ralph Campbell\. +This file is derived from the MIPS RISC$'),
  RegExp(r'^Architecture book by Gerry Kane\.$'),

  RegExp(r'^All advertising materials mentioning features or use of this software$'),
  RegExp(r'^must display the following acknowledgement:$'),
  RegExp(r'^This product includes software developed by the University of$'),
  RegExp(r'^California, Lawrence Berkeley Laboratory\.$'),

  RegExp(r'^ *Condition of use and distribution are the same than zlib :$'),
  RegExp(r'^The MIT License:$'),

  RegExp(r'^$'), // TODO(ianh): file an issue on what happens if you omit the close quote

];

// patterns that indicate we're running into another license
final List<RegExp> licenseFragments = <RegExp>[
  RegExp(r'"as is" without express or implied warranty\.'),
  RegExp(r'version of this file under any of the LGPL, the MPL or the GPL\.'),
  RegExp(r'SUCH DAMAGE\.'),
  RegExp(r'found in the LICENSE file'),
  RegExp(r'<http://www\.gnu\.org/licenses/>'),
  RegExp(r'License & terms of use'),
];

const String _linebreak      = r' *(?:(?:\*/ *|[*#])?(?:\r?\n\1 *(?:\*/ *)?)*\r?\n\1\2 *)?';
const String _linebreakLoose = r' *(?:(?:\*/ *|[*#])?\r?\n(?:-|;|#|<|!|/|\*| |REM)*)*';

// LICENSE RECOGNIZERS

final RegExp lrApache = RegExp(r'^(?: |\r|\n)*Apache License\b');
final RegExp lrMPL = RegExp(r'^(?: |\r|\n)*Mozilla Public License Version 2\.0\n');
final RegExp lrGPL = RegExp(r'^(?: |\r|\n)*GNU GENERAL PUBLIC LICENSE\n');
final RegExp lrAPSL = RegExp(r'^APPLE PUBLIC SOURCE LICENSE Version 2\.0 +- +August 6, 2003');
final RegExp lrMIT = RegExp(r'Permission(?: |\n)+is(?: |\n)+hereby(?: |\n)+granted,(?: |\n)+free(?: |\n)+of(?: |\n)+charge,(?: |\n)+to(?: |\n)+any(?: |\n)+person(?: |\n)+obtaining(?: |\n)+a(?: |\n)+copy(?: |\n)+of(?: |\n)+this(?: |\n)+software(?: |\n)+and(?: |\n)+associated(?: |\n)+documentation(?: |\n)+files(?: |\n)+\(the(?: |\n)+"Software"\),(?: |\n)+to(?: |\n)+deal(?: |\n)+in(?: |\n)+the(?: |\n)+Software(?: |\n)+without(?: |\n)+restriction,(?: |\n)+including(?: |\n)+without(?: |\n)+limitation(?: |\n)+the(?: |\n)+rights(?: |\n)+to(?: |\n)+use,(?: |\n)+copy,(?: |\n)+modify,(?: |\n)+merge,(?: |\n)+publish,(?: |\n)+distribute,(?: |\n)+sublicense,(?: |\n)+and/or(?: |\n)+sell(?: |\n)+copies(?: |\n)+of(?: |\n)+the(?: |\n)+Software,(?: |\n)+and(?: |\n)+to(?: |\n)+permit(?: |\n)+persons(?: |\n)+to(?: |\n)+whom(?: |\n)+the(?: |\n)+Software(?: |\n)+is(?: |\n)+furnished(?: |\n)+to(?: |\n)+do(?: |\n)+so,(?: |\n)+subject(?: |\n)+to(?: |\n)+the(?: |\n)+following(?: |\n)+conditions:');
final RegExp lrOpenSSL = RegExp(r'Copyright \(c\) 1998-2011 The OpenSSL Project\.  All rights reserved\.(.|\n)*Original SSLeay License');
final RegExp lrBSD = RegExp(r'Redistribution(?: |\n)+and(?: |\n)+use(?: |\n)+in(?: |\n)+source(?: |\n)+and(?: |\n)+binary(?: |\n)+forms(?:(?: |\n)+of(?: |\n)+the(?: |\n)+software(?: |\n)+as(?: |\n)+well(?: |\n)+as(?: |\n)+documentation)?,(?: |\n)+with(?: |\n)+or(?: |\n)+without(?: |\n)+modification,(?: |\n)+are(?: |\n)+permitted(?: |\n)+provided(?: |\n)+that(?: |\n)+the(?: |\n)+following(?: |\n)+conditions(?: |\n)+are(?: |\n)+met:');
final RegExp lrZlib = RegExp(r'Permission(?: |\n)+is(?: |\n)+granted(?: |\n)+to(?: |\n)+anyone(?: |\n)+to(?: |\n)+use(?: |\n)+this(?: |\n)+software(?: |\n)+for(?: |\n)+any(?: |\n)+purpose,(?: |\n)+including(?: |\n)+commercial(?: |\n)+applications,(?: |\n)+and(?: |\n)+to(?: |\n)+alter(?: |\n)+it(?: |\n)+and(?: |\n)+redistribute(?: |\n)+it(?: |\n)+freely,(?: |\n)+subject(?: |\n)+to(?: |\n)+the(?: |\n)+following(?: |\n)+restrictions:');
final RegExp lrPNG = RegExp(r'This code is released under the libpng license\.');
final RegExp lrBison = RegExp(r'This special exception was added by the Free Software Foundation in *\n *version 2.2 of Bison.');


// "NO COPYRIGHT" STATEMENTS

final List<RegExp> csNoCopyrights = <RegExp>[

  // used with _tryNone
  // groups are ignored

  // Seen in Expat files
  RegExp(
    r'^// No copyright notice; this file based on autogenerated header',
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in Android NDK
  RegExp(
    r'^[/* ]*This header was automatically generated from a Linux kernel header\n'
    r'^[/* ]*of the same name, to make information necessary for userspace to\n'
    r'^[/* ]*call into the kernel available to libc.  It contains only constants,\n'
    r'^[/* ]*structures, and macros generated from the original header, and thus,\n'
    r'^[/* ]*contains no copyrightable information.',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'These constants were taken from version 3 of the DWARF standard, *\n'
    r'^\1\2which is Copyright \(c\) 2005 Free Standards Group, and *\n'
    r'^\1\2Copyright \(c\) 1992, 1993 UNIX International, Inc\. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // Freetype
  RegExp(
    kIndent +
    (r'This is a dummy file, used to please the build system\. It is never included by the auto-fitter sources\.'.replaceAll(' ', _linebreak)),
    multiLine: true,
    caseSensitive: false
  ),

  // Freetype
  RegExp(
    kIndent +
    (
      r'This software was written by Alexander Peslyak in 2001\. No copyright is '
      r'claimed, and the software is hereby placed in the public domain\. In case '
      r'this attempt to disclaim copyright and place the software in the public '
      r'domain is deemed null and void, then the software is Copyright \(c\) 2001 '
      r'Alexander Peslyak and it is hereby released to the general public under the '
      r'following terms: Redistribution and use in source and binary forms, with or '
      r"without modification, are permitted\. There\'s ABSOLUTELY NO WARRANTY, "
      r'express or implied\.(?: \(This is a heavily cut-down "BSD license"\.\))?'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

];


// ATTRIBUTION STATEMENTS

final List<RegExp> csAttribution = <RegExp>[

  // used with _tryAttribution
  // group 1 is the prefix, group 2 is the attribution

  // Seen in musl in Android SDK
  RegExp(
    r'^([/* ]*)This code was written by (.+) in [0-9]+; no copyright is claimed\.\n'
    r'^\1This code is in the public domain\. +Attribution is appreciated but\n'
    r'^\1unnecessary\.',
    multiLine: true,
    caseSensitive: false
  ),

];


// REFERENCES TO OTHER FILES

class LicenseFileReferencePattern {
  LicenseFileReferencePattern({
    this.firstPrefixIndex,
    this.indentPrefixIndex,
    this.copyrightIndex,
    this.authorIndex,
    this.fileIndex,
    this.pattern,
    this.needsCopyright = true
  });
  final int firstPrefixIndex;
  final int indentPrefixIndex;
  final int copyrightIndex;
  final int authorIndex;
  final int fileIndex;
  final bool needsCopyright;
  final RegExp pattern;
}

final List<LicenseFileReferencePattern> csReferencesByFilename = <LicenseFileReferencePattern>[

  // used with _tryReferenceByFilename

  // libpng files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: true,
    pattern: RegExp(
      kIndent +
      r'This code is released under the libpng license. For conditions of distribution and use, see the disclaimer and license in (png.h)\b'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false
    ),
  ),

  // typical of much Google-written code
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'Use of this source(?: code)? is governed by a BS?D-style license that can be found in the '.replaceAll(' ', _linebreak) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Chromium's zlib extensions.
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      // The " \* " is needed to ensure that both copyright lines start with
      // the comment decoration in the captured match, otherwise it won't be
      // stripped from the second line when generating output.
      r'((?: \* Copyright \(C\) 2017 ARM, Inc.\n)?'
      r'Copyright .+(The .+ Authors)\. +All rights reserved\.)\n'
      r'Use of this source code is governed by a BSD-style license that can be\n'
      r'found in the Chromium source repository ([^ ]+) file.'.replaceAll(r'\n', _linebreakLoose),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Mojo code
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      r'(Copyright .+(the .+ authors)\. +All rights reserved.) +' +
      r'Use of this source(?: code)? is governed by a BS?D-style license that can be found in the '.replaceAll(' ', _linebreak) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ANGLE .json files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      r'(Copyright .+(The .+ Authors)\. +All rights reserved.)", *\n'
      r'^\1\2Use of this source code is governed by a BSD-style license that can be", *\n'
      r'^\1\2found in the ([^ ]+) file.",',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // typical of Dart-derived files
  LicenseFileReferencePattern(
    firstPrefixIndex: 2,
    indentPrefixIndex: 3,
    copyrightIndex: 1,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      r'(' + kIndent +
      r'Copyright .+(the .+ authors)\[?\. '
      r'Please see the AUTHORS file for details. All rights (?:re|solve)served\.) '
      r'Use of this source(?: code)? is governed by a BS?D-style license '
      r'that can be found in the '.replaceAll(' ', _linebreakLoose) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libjpeg-turbo
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'For conditions of distribution and use, see (?:the accompanying|copyright notice in)? ([-_.a-zA-Z0-9]+)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Expat files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'See the file ([^ ]+) for copying permission\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Expat files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This is free software. You are permitted to copy, distribute, or modify *\n'
      r'^\1\2it under the terms of the MIT/X license \(contained in the ([^ ]+) file *\n'
      r'^\1\2with this distribution\.\)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in FreeType software
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This file (?:is part of the FreeType project, and )?may only be used,? '
      r'modified,? and distributed under the terms of the FreeType project '
      r'license, (LICENSE\.TXT). By continuing to use, modify, or distribute this '
      r'file you indicate that you have read the license and understand and '
      r'accept it fully\.'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in FreeType cff software from Adobe
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This software, and all works of authorship, whether in source or '
      r'object code form as indicated by the copyright notice\(s\) included '
      r'herein \(collectively, the "Work"\) is made available, and may only be '
      r'used, modified, and distributed under the FreeType Project License, '
      r'(LICENSE\.TXT)\. Additionally, subject to the terms and conditions of the '
      r'FreeType Project License, each contributor to the Work hereby grants '
      r'to any individual or legal entity exercising permissions granted by '
      r'the FreeType Project License and this section \(hereafter, "You" or '
      r'"Your"\) a perpetual, worldwide, non-exclusive, no-charge, '
      r'royalty-free, irrevocable \(except as stated in this section\) patent '
      r'license to make, have made, use, offer to sell, sell, import, and '
      r'otherwise transfer the Work, where such license applies only to those '
      r'patent claims licensable by such contributor that are necessarily '
      r'infringed by their contribution\(s\) alone or by combination of their '
      r'contribution\(s\) with the Work to which such contribution\(s\) was '
      r'submitted\. If You institute patent litigation against any entity '
      r'\(including a cross-claim or counterclaim in a lawsuit\) alleging that '
      r'the Work or a contribution incorporated within the Work constitutes '
      r'direct or contributory patent infringement, then any patent licenses '
      r'granted to You under this License for that Work shall terminate as of '
      r'the date such litigation is filed\. '
      r'By using, modifying, or distributing the Work you indicate that you '
      r'have read and understood the terms and conditions of the '
      r'FreeType Project License as well as those provided in this section, '
      r'and you accept them fully\.'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Jinja files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r':license: [A-Z0-9]+, see (.+) for more details\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in modp_b64
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'Released under [^ ]+ license\. +See ([^ ]+) for details\.$',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libxml files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'(?:Copy: )?See ([A-Z0-9]+) for the status of this software\.?',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libxml files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'// This file is dual licensed under the MIT and the University of Illinois Open *\n'
      r'^\1\2// Source Licenses. See (LICENSE\.TXT) for details\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // BoringSSL
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: true,
    pattern: RegExp(
      kIndent +
      r'Licensed under the OpenSSL license \(the "License"\)\. You may not use '
      r'this file except in compliance with the License\. You can obtain a copy '
      r'in the file (LICENSE) in the source distribution or at '
      r'https://www\.openssl\.org/source/license\.html'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Fuchsia SDK files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'Copyright .+\. All rights reserved\. '
      r'This is a GENERATED file, see //zircon/.+/abigen\. '
      r'The license governing this file can be found in the (LICENSE) file\.'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Fuchsia SDK files.
  // TODO(chinmaygarde): This is a broken license file that is being patched
  // upstream. Remove this once DX-1477 is patched.
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'Use of this source code is governed by a BSD-style license that can be '
      r'Copyright .+\. All rights reserved\. '
      r'found in the (LICENSE) file\.'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

];


// INDIRECT REFERENCES TO OTHER FILES

final List<RegExp> csReferencesByType = <RegExp>[

  // used with _tryReferenceByType
  // groups 1 and 2 are the prefix, group 3 is the license type

  // Seen in Jinja files, markupsafe files
  RegExp(
    kIndent + r':license: ([A-Z0-9]+)',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'This software is made available under the terms of the (ICU) License -- ICU 1\.\8\.1 and later\.'.replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    (
      r'(?:@APPLE_LICENSE_HEADER_START@)? '
      r'This file contains Original Code and/or Modifications of Original Code '
      r'as defined in and that are subject to the (Apple Public Source License) '
      r"Version (2\.0) \(the 'License'\)\. You may not use this file except in "
      r'compliance with the License\. Please obtain a copy of the License at '
      r'(http://www\.opensource\.apple\.com/apsl/) and read it before using this '
      r'file\. '
      r'The Original Code and all software distributed under the License are '
      r"distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER "
      r'EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, '
      r'INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT\. '
      r'Please see the License for the specific language governing rights and '
      r'limitations under the License\.'
      r'(?:@APPLE_LICENSE_HEADER_END@)? '
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

];

final List<RegExp> csReferencesByTypeNoCopyright = <RegExp>[

  // used with _tryReferenceByType
  // groups 1 and 2 are the prefix, group 3 is the license type

  RegExp(
    kIndent +
    r'Written by Andy Polyakov <appro@openssl\.org> for the OpenSSL '
    r'project\. The module is, however, dual licensed under (OpenSSL) and '
    r'CRYPTOGAMS licenses depending on where you obtain it\. For further '
    r'details see http://www\.openssl\.org/~appro/cryptogams/\. '
    r'Permission to use under GPL terms is granted\.'.replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

];

class MultipleVersionedLicenseReferencePattern {
  MultipleVersionedLicenseReferencePattern({
    this.firstPrefixIndex,
    this.indentPrefixIndex,
    this.licenseIndices,
    this.versionIndicies,
    this.checkLocalFirst = true,
    this.pattern
  });

  final int firstPrefixIndex;
  final int indentPrefixIndex;
  final List<int> licenseIndices;
  final bool checkLocalFirst;
  final Map<int, int> versionIndicies;
  final RegExp pattern;
}

final List<MultipleVersionedLicenseReferencePattern> csReferencesByUrl = <MultipleVersionedLicenseReferencePattern>[

  // used with _tryReferenceByUrl

  // SPDX
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent + r'SPDX-License-Identifier: (.*)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // AFL
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    versionIndicies: const <int, int>{ 3:4 },
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent + r'Licensed under the (Academic Free License) version (3\.0)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Eclipse
  // Seen in auto-generated Java code in the Dart repository.
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      r'^(?:[-;#<!.\\"/* ]*[-;#<!.\"/*]+)?( *)Licensed under the Eclipse Public License v1\.0 \(the "License"\); you may not use this file except *\n'
      r'^\1\2in compliance with the License\. +You may obtain a copy of the License at *\n'
      r'^\1\2 *\n'
      r'^\1\2 *(http://www\.eclipse\.org/legal/epl-v10\.html) *\n'
      r'^\1\2 *\n'
      r'^\1\2Unless required by applicable law or agreed to in writing, software distributed under the License *\n'
      r'^\1\2is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express *\n'
      r'^\1\2or implied\. +See the License for the specific language governing permissions and limitations under *\n'
      r'^\1\2the License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Apache reference.
  // Seen in Android code.
  // TODO(ianh): For this license we only need to include the text once, not once per copyright
  // TODO(ianh): For this license we must also include all the NOTICE text (see section 4d)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Licensed under the Apache License, Version 2\.0 \(the "License"\); *\n'
      r'^\1\2you may not use this file except in compliance with the License\. *\n'
      r'^\1\2You may obtain a copy of the License at *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2 *(https?://www\.apache\.org/licenses/LICENSE-2\.0) *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2 *Unless required by applicable law or agreed to in writing, software *\n'
      r'^\1\2 *distributed under the License is distributed on an "AS IS" BASIS, *\n'
      r'^\1\2 *WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\. *\n'
      r'^\1\2 *See the License for the specific language governing permissions and *\n'
      r'^\1\2 *limitations under the License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // BSD
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Use of this source code is governed by a BS?D-style *\n'
      r'^\1\2license that can be found in the LICENSE file or at *\n'
      r'^\1\2(https://developers.google.com/open-source/licenses/bsd)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MIT
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      (
       r'Use of this source code is governed by a MIT-style '
       r'license that can be found in the LICENSE file or at '
       r'(https://opensource.org/licenses/MIT)'
       .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MIT
  // the crazy s/./->/ thing is someone being over-eager with search-and-replace in rapidjson
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Licensed under the MIT License \(the "License"\); you may not use this file except *\n'
      r'^\1\2in compliance with the License(?:\.|->) You may obtain a copy of the License at *\n'
      r'^\1\n'
      r'^\1\2(http://opensource(?:\.|->)org/licenses/MIT) *\n'
      r'^\1\n'
      r'^\1\2Unless required by applicable law or agreed to in writing, software distributed *\n'
      r'^\1\2under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR *\n'
      r'^\1\2CONDITIONS OF ANY KIND, either express or implied(?:\.|->) See the License for the *\n'
      r'^\1\2specific language governing permissions and limitations under the License(?:\.|->)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Observatory (polymer)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'This code may only be used under the BSD style license found at (http://polymer.github.io/LICENSE.txt)$',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ashmem
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    versionIndicies: const <int, int>{3:4},
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'This file is dual licensed. +It may be redistributed and/or modified *\n'
      r'^\1\2under the terms of the (Apache) (2\.0) License OR version 2 of the GNU *\n'
      r'^\1\2General Public License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndicies: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute _?_?it and/or modify _?_?it under the terms *\n'
      r'^\1\2of the GNU General Public License as published by the Free Software *\n'
      r'^\1\2Foundation; either version (3), or \(at your option\) any later *\n'
      r'^\1\2version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that _?_?it will be useful, but *\n'
      r'^\1\2WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n'
      r'^\1\2General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception, alternative wrapping
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndicies: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute it and/or modify it under the *\n'
      r'^\1\2terms of the GNU General Public License as published by the *\n'
      r'^\1\2Free Software Foundation; either version (3), or \(at your option\) *\n'
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the(?:, 2009)? Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception, alternative footer without exception filename
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[6, 4],
    versionIndicies: const <int, int>{6:3, 4:5},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute it and/or modify it under the *\n'
      r'^\1\2terms of the GNU General Public License as published by the *\n'
      r'^\1\2Free Software Foundation; either version (3), or \(at your option\) *\n' // group 3 is the version of the gpl
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the (GCC Runtime Library Exception), version *\n' // group 4 is the "file name" of the exception (it's missing in this version, so we use this as a hook to later, see the url mappings)
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n' // group 5 is the version of the exception
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License along *\n'
      r'^\1\2with this library; see the file (COPYING3)\. +If not see *\n' // group 6 is the gpl file name
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GCC GPL+Exception
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndicies: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of GCC. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is free software; you can redistribute it and/or modify it under *\n'
      r'^\1\2the terms of the GNU General Public License as published by the Free *\n'
      r'^\1\2Software Foundation; either version (3), or \(at your option\) any later *\n'
      r'^\1\2version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is distributed in the hope that it will be useful, but WITHOUT ANY *\n'
      r'^\1\2WARRANTY; without even the implied warranty of MERCHANTABILITY or *\n'
      r'^\1\2FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU General Public License *\n'
      r'^\1\2for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GCC GPL+Exception, alternative line wrapping
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndicies: const <int, int>{ 5:3, 6:4 },
    pattern: RegExp(
      kIndent +
      r'This file is part of GCC. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is free software; you can redistribute it and/or modify *\n'
      r'^\1\2it under the terms of the GNU General Public License as published by *\n'
      r'^\1\2the Free Software Foundation; either version (3), or \(at your option\) *\n'
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // LGPL 2.1
  // some engine code
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndicies: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Library General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n?'
       r'\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n?'
       r'\1\2Library General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU Library General Public License *\n'
      r'^\1\2(?:along|aint) with this library; see the file (COPYING\.LI(?:B|other\.m_))\.?  If not, write to *\n'
      r'^\1\2the Free Software Foundation, Inc\., (?:51 Franklin Street, Fifth Floor|59 Temple Place - Suite 330), *\n'
      r'^\1\2Boston, MA 0211[01]-130[17], US(?:A\.|m_)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // AFL/LGPL
  // xdg_mime
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndicies: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'Licensed under the Academic Free License version 2.0 *\n'
      r'^\1\2Or under the following terms: *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Lesser General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\.\t? +See the GNU *\n'
      r'^\1\2Lesser General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the (GNU Lesser) General Public *\n'
      r'^\1\2License along with this library; if not, write to the *\n'
      r'^\1\2Free Software Foundation, Inc\., 59 Temple Place - Suite 330, *\n'
      r'^\1\2Boston, MA 0211[01]-1307, USA\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MPL
  // root_certificates
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndicies: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This Source Code Form is subject to the terms of the Mozilla Public *\n'
      r'^\1\2License, v\. (2.0)\. +If a copy of the MPL was not distributed with this *\n'
      r'^\1\2file, You can obtain one at (http://mozilla\.org/MPL/2\.0/)\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MPL/GPL/LGPL
  // engine
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3], // 5 is lgpl, which we're actively not selecting
    versionIndicies: const <int, int>{ 3:4 }, // 5:6 for lgpl
    pattern: RegExp(
      kIndent +
      r'(?:Version: [GMPL/012. ]+ *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2)?The contents of this file are subject to the (Mozilla Public License) Version *\n'
      r'^\1\2(1\.1) \(the "License"\); you may not use this file except in compliance with *\n'
      r'^\1\2the License\. +You may obtain a copy of the License at *\n'
      r'^\1\2http://www\.mozilla\.org/MPL/ *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Software distributed under the License is distributed on an "AS IS" basis, *\n'
      r'^\1\2WITHOUT WARRANTY OF ANY KIND, either express or implied\. +See the License *\n'
      r'^\1\2for the specific language governing rights and limitations under the *\n'
      r'^\1\2License\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2The Original Code is .+?(?:released\n'
      r'^\1\2March 31, 1998\.)?\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2The Initial Developer of the Original Code is *\n'
      r'^\1\2.+\n'
      r'^\1\2Portions created by the Initial Developer are Copyright \(C\) [0-9]+ *\n'
      r'^\1\2the Initial Developer\. +All Rights Reserved\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Contributor\(s\): *\n'
      r'(?:\1\2  .+\n)*'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2'
      +
      (
        r'Alternatively, the contents of this file may be used under the terms of '
        r'either (?:of )?the GNU General Public License Version 2 or later \(the "GPL"\), '
        r'or the (GNU Lesser) General Public License Version (2\.1) or later \(the '
        r'"LGPL"\), in which case the provisions of the GPL or the LGPL are '
        r'applicable instead of those above\. If you wish to allow use of your '
        r'version of this file only under the terms of either the GPL or the LGPL, '
        r'and not to allow others to use your version of this file under the terms '
        r'of the MPL, indicate your decision by deleting the provisions above and '
        r'replace them with the notice and other provisions required by the GPL or '
        r'the LGPL\. If you do not delete the provisions above, a recipient may use '
        r'your version of this file under the terms of any one of the MPL, the GPL or '
        r'the LGPL\.'
        .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // LGPL/MPL/GPL
  // engine
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndicies: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Lesser General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2\.1) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n'
      r'^\1\2Lesser General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the (GNU Lesser) General Public *\n'
      r'^\1\2License along with this library; if not, write to the Free Software *\n'
      r'^\1\2Foundation, Inc\., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 +USA *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Alternatively, the contents of this file may be used under the terms *\n'
      r'^\1\2of either the Mozilla Public License Version 1\.1, found at *\n'
      r'^\1\2http://www\.mozilla\.org/MPL/ \(the "MPL"\) or the GNU General Public *\n'
      r'^\1\2License Version 2\.0, found at http://www\.fsf\.org/copyleft/gpl\.html *\n'
      r'^\1\2\(the "GPL"\), in which case the provisions of the MPL or the GPL are *\n'
      r'^\1\2applicable instead of those above\. +If you wish to allow use of your *\n'
      r'^\1\2version of this file only under the terms of one of those two *\n'
      r'^\1\2licenses \(the MPL or the GPL\) and not to allow others to use your *\n'
      r'^\1\2version of this file under the LGPL, indicate your decision by *\n'
      r'^\1\2deletingthe provisions above and replace them with the notice and *\n'
      r'^\1\2other provisions required by the MPL or the GPL, as the case may be\. *\n'
      r'^\1\2If you do not delete the provisions above, a recipient may use your *\n'
      r'^\1\2version of this file under any of the LGPL, the MPL or the GPL\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'(?:©|Copyright (©|\(C\))) 20.. and later: Unicode, Inc. and others.[ *]*\n'
      r'^\1\2License & terms of use: (http://www.unicode.org/copyright.html)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'(?:Copyright ©) 20..-20.. Unicode, Inc. and others. All rights reserved. '
      r'Distributed under the Terms of Use in (http://www.unicode.org/copyright.html)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Copyright \(C\) 2016 and later: Unicode, Inc. and others. License & terms of use: (http://www.unicode.org/copyright.html) *\n',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'© 2016 and later: Unicode, Inc. and others. *\n'
      r'^ *License & terms of use: (http://www.unicode.org/copyright.html)#License *\n'
      r'^ *\n'
      r'^ *Copyright \(c\) 2000 IBM, Inc. and Others. *\n',
      multiLine: true,
      caseSensitive: false,
    )
  ),
];


// INLINE LICENSES

final List<RegExp> csLicenses = <RegExp>[

  // used with _tryInline, with needsCopyright: true (will only match if preceded by a copyright notice)
  // should have two groups, prefixes 1 and 2

  // BoringSSL
  RegExp(
    kIndent +
    r'Redistribution and use in source and binary forms, with or without *\n'
    r'^\1\2modification, are permitted provided that the following conditions *\n'
    r'^\1\2are met: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of source code must retain the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions in binary form must reproduce the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer in *\n'
    r'^\1\2 *the documentation and/or other materials provided with the *\n'
    r'^\1\2 *distribution\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)All advertising materials mentioning features or use of this *\n'
    r'^\1\2 *software must display the following acknowledgment: *\n'
    r'^\1\2 *"This product includes software developed by the OpenSSL Project *\n'
    r'^\1\2 *for use in the OpenSSL Toolkit\. \(http://www\.OpenSSL\.org/\)" *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *\n'
    r'^\1\2 *endorse or promote products derived from this software without *\n'
    r'^\1\2 *prior written permission\. +For written permission, please contact *\n'
    r'^\1\2 *[^@ ]+@OpenSSL\.org\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Products derived from this software may not be called "OpenSSL" *\n'
    r'^\1\2 *nor may "OpenSSL" appear in their names without prior written *\n'
    r'^\1\2 *permission of the OpenSSL Project\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of any form whatsoever must retain the following *\n'
    r'^\1\2 *acknowledgment: *\n'
    r'^\1\2 *"This product includes software developed by the OpenSSL Project *\n'
    r'^\1\2 *for use in the OpenSSL Toolkit \(http://www\.OpenSSL\.org/\)" *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY *\n"
    r'^\1\2EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *\n'
    r'^\1\2IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR *\n'
    r'^\1\2PURPOSE ARE DISCLAIMED\. +IN NO EVENT SHALL THE OpenSSL PROJECT OR *\n'
    r'^\1\2ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *\n'
    r'^\1\2SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES \(INCLUDING, BUT *\n'
    r'^\1\2NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *\n'
    r'^\1\2LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\) *\n'
    r'^\1\2HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, *\n'
    r'^\1\2STRICT LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\) *\n'
    r'^\1\2ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED *\n'
    r'^\1\2OF THE POSSIBILITY OF SUCH DAMAGE\.',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'(?:This package is an SSL implementation written *\n'
    r'^\1\2by Eric Young \(eay@cryptsoft\.com\)\. *\n'
    r'^\1\2The implementation was written so as to conform with Netscapes SSL\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2This library is free for commercial and non-commercial use as long as *\n'
    r'^\1\2the following conditions are aheared to\. +The following conditions *\n'
    r'^\1\2apply to all code found in this distribution, be it the RC4, RSA, *\n'
    r'^\1\2lhash, DES, etc\., code; not just the SSL code\. +The SSL documentation *\n'
    r'^\1\2included with this distribution is covered by the same copyright terms *\n'
    r'^\1\2except that the holder is Tim Hudson \(tjh@cryptsoft\.com\)\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r"^\1\2Copyright remains Eric Young's, and as such any Copyright notices in *\n"
    r'^\1\2the code are not to be removed\. *\n'
    r'^\1\2If this package is used in a product, Eric Young should be given attribution *\n'
    r'^\1\2as the author of the parts of the library used\. *\n'
    r'^\1\2This can be in the form of a textual message at program startup or *\n'
    r'^\1\2in documentation \(online or textual\) provided with the package\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2)?Redistribution and use in source and binary forms, with or without *\n'
    r'^\1\2modification, are permitted provided that the following conditions *\n'
    r'^\1\2are met: *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of source code must retain the copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions in binary form must reproduce the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer in the *\n'
    r'^\1\2 *documentation and/or other materials provided with the distribution\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)All advertising materials mentioning features or use of this software *\n'
    r'^\1\2 *must display the following acknowledgement: *\n'
    r'^\1\2 *"This product includes cryptographic software written by *\n'
    r'^\1\2 *Eric Young \(eay@cryptsoft\.com\)" *\n'
    r"^\1\2 *The word 'cryptographic' can be left out if the rouines from the library *\n" // TODO(ianh): File a bug on the number of analyzer errors you get if you replace the " characters on this line with '
    r'^\1\2 *being used are not cryptographic related :-\)\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)If you include any Windows specific code \(or a derivative thereof\) fromg? *\n'
    r'^\1\2 *the apps directory \(application code\) you must include an acknowledgement: *\n'
    r'^\1\2 *"This product includes software written by Tim Hudson \(tjh@cryptsoft\.com\)" *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND *\n"
    r'^\1\2ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *\n'
    r'^\1\2IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE *\n'
    r'^\1\2ARE DISCLAIMED\. +IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE *\n'
    r'^\1\2FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL *\n'
    r'^\1\2DAMAGES \(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS *\n'
    r'^\1\2OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\) *\n'
    r'^\1\2HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT *\n'
    r'^\1\2LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\) ARISING IN ANY WAY *\n'
    r'^\1\2OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *\n'
    r'^\1\2SUCH DAMAGE\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2The licence and distribution terms for any publically available version or *\n'
    r'^\1\2derivative of this code cannot be changed\. +i\.e\. +this code cannot simply be *\n'
    r'^\1\2copied and put under another distribution licence *\n'
    r'^\1\2\[including the GNU Public Licence\.\]',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    (
      r'License to copy and use this software is granted provided that it '
      r'is identified as the "RSA Data Security, Inc\. MD5 Message-Digest '
      r'Algorithm" in all material mentioning or referencing this software '
      r'or this function\. '
      r'License is also granted to make and use derivative works provided '
      r'that such works are identified as "derived from the RSA Data '
      r'Security, Inc\. MD5 Message-Digest Algorithm" in all material '
      r'mentioning or referencing the derived work\. '
      r'RSA Data Security, Inc\. makes no representations concerning either '
      r'the merchantability of this software or the suitability of this '
      r'software for any particular purpose\. It is provided "as is" '
      r'without express or implied warranty of any kind\. '
      r'These notices must be retained in any copies of any part of this '
      r'documentation and/or software\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false,
  ),

  // BSD-DERIVED LICENSES

  RegExp(
    kIndent +

    // Some files in ANGLE prefix the license with a description of the license.
    r'(?:BSD 2-Clause License \(http://www.opensource.org/licenses/bsd-license.php\))?' +
    _linebreak +

    (
      'Redistribution and use in source and binary forms, with or without '
      'modification, are permitted provided that the following conditions are met:'
      .replaceAll(' ', _linebreak)
    )
    +

    // the conditions:
    r'(?:' +

    // indented blank lines
    _linebreak +

    // truly blank lines
    r'|[\r\n]+' +

    // ad clause - ucb
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'All advertising materials mentioning features or use of this software '
      'must display the following acknowledgement: This product includes software '
      'developed by the University of California, Berkeley and its contributors\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // ad clause - netbsd
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'All advertising materials mentioning features or use of this software '
      'must display the following acknowledgement: This product includes software '
      'developed by the NetBSD Foundation, Inc\\. and its contributors\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // ack clause
    r'|(?:[-*1-9.)/ ]*)' +
    (
      r'The origin of this software must not be misrepresented; you must not claim '
      r'that you wrote the original software\. If you use this software in a product, '
      r'an acknowledgment in the product documentation would be appreciated but is '
      r'not required\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      r'Altered source versions must be plainly marked as such, and must not be '
      r'misrepresented as being the original software\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // no ad clauses
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Neither my name, .+, nor the names of any other contributors to the code '
      'use may not be used to endorse or promote products derived from this '
      'software without specific prior written permission\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'The name of the author may not be used to endorse or promote products '
      'derived from this software without specific prior written permission\\.?'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Neither the name of .+ nor the names of its contributors may be used '
      'to endorse or promote products derived from this software without '
      'specific prior written permission\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // notice clauses
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions of source code must retain the above copyright notice, '
      'this list of conditions and the following disclaimer\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions in binary form must reproduce the above copyright notice, '
      'this list of conditions and the following disclaimer in the documentation '
      'and/or other materials provided with the distribution\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions in binary form must reproduce the above copyright notice, '
      'this list of conditions and the following disclaimer\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // end of conditions
    r')*'
    +

    // disclaimers
    (
      'THIS SOFTWARE IS PROVIDED (?:BY .+(?: .+)? )?["“`]+AS IS["”\']+,? AND ANY EXPRESS OR IMPLIED '
      'WARRANTIES,(?::tabnew)? INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF '
      'MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED\\. IN NO EVENT '
      'SHALL .+(?: .+)? BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR '
      'CONSEQUENTIAL DAMAGES \\(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS '
      'OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\\) HOWEVER CAUSED '
      'AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \\(INCLUDING '
      'NEGLIGENCE OR OTHERWISE\\) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF '
      'ADVISED OF THE POSSIBILITY OF SUCH DAMAGE\\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false,
  ),


  // THREE-CLAUSE LICENSES
  // licenses in this section are sorted first by the length of the last line, in words,
  // and then by the length of the bulletted clauses, in total lines.

  // Seen in libjpeg-turbo
  // TODO(ianh): Mark License as not needing to be shown
  RegExp(
    kIndent +
    r"This software is provided 'as-is', without any express or implied *\n"
    r'^\1\2warranty\. +In no event will the authors be held liable for any damages *\n'
    r'^\1\2arising from the use of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission is granted to anyone to use this software for any purpose, *\n'
    r'^\1\2including commercial applications, and to alter it and redistribute it *\n'
    r'^\1\2freely, subject to the following restrictions: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The origin of this software must not be misrepresented; you must not *\n'
    r'^\1\2 *claim that you wrote the original software\. +If you use this software *\n'
    r'^\1\2 *in a product, an acknowledgment in the product documentation would be *\n'
    r'^\1\2 *appreciated but is not required\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Altered source versions must be plainly marked as such, and must not be *\n'
    r'^\1\2 *misrepresented as being the original software\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)This notice may not be removed or altered from any source distribution\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW
  RegExp(
    kIndent +
    r"This software is provided 'as-is', without any express or implied *\n"
    r'^\1\2warranty\. +In no event will the authors be held liable for any damages *\n'
    r'^\1\2arising from the use of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission is granted to anyone to use this software for any purpose, *\n'
    r'^\1\2including commercial applications, and to alter it and redistribute it *\n'
    r'^\1\2freely, subject to the following restrictions: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The origin of this software must not be misrepresented; you must not *\n'
    r'^\1\2 *claim that you wrote the original software\. +If you use this software *\n'
    r'^\1\2 *in a product, an acknowledgment in the product documentation would *\n'
    r'^\1\2 *be appreciated but is not required\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Altered source versions must be plainly marked as such, and must not *\n'
    r'^\1\2 *be misrepresented as being the original software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)This notice may not be removed or altered from any source *\n'
    r'^\1\2 *distribution\.',
    multiLine: true,
    caseSensitive: false
  ),


  // MIT-DERIVED LICENSES

  // Seen in Mesa, among others.
  // A version with "// -------" between sections seen in ffx_spd.
  RegExp(
    kIndent +
    (
      r'Permission is hereby granted, free of charge, to any person obtaining '
      r'a copy of this software and(?: /or)? associated documentation files \(the "(?:Software|Materials) "\), '
      r'to deal in the (?:Software|Materials) without restriction, including without limitation '
      r'the rights to use, copy, modify, merge, publish, distribute, sub license, '
      r'and/or sell copies of the (?:Software|Materials), and to permit persons to whom the '
      r'(?:Software|Materials) (?:is|are) furnished to do so, subject to the following conditions:'
      .replaceAll(' ', _linebreak)
    )
    +
    r'(?:'
    +
    (
      r'(?:(?:\1\2?(?: *| -*))? *\r?\n)*'

      +

      r'|'

      r'\1\2 '
      r'The above copyright notice and this permission notice'
      r'(?: \(including the next paragraph\))? '
      r'shall be included in all copies or substantial portions '
      r'of the (?:Software|Materials)\.'

      r'|'

      r'\1\2 '
      r'In addition, the following condition applies:'

      r'|'

      r'\1\2 '
      r'All redistributions must retain an intact copy of this copyright notice and disclaimer\.'

      r'|'

      r'\1\2 '
      r'THE (?:SOFTWARE|MATERIALS) (?:IS|ARE) PROVIDED "AS -? IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS '
      r'OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE AND NON-?INFRINGEMENT\. IN NO EVENT SHALL '
      r'.+(?: .+)? BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER '
      r'IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN '
      r'CONNECTION WITH THE (?:SOFTWARE|MATERIALS) OR THE USE OR OTHER DEALINGS IN THE (?:SOFTWARE|MATERIALS)\.'

      r'|'

      r'\1\2 '
      r'THE (?:SOFTWARE|MATERIALS) (?:IS|ARE) PROVIDED "AS -? IS" AND WITHOUT WARRANTY OF ANY KIND, '
      r'EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY '
      r'OR FITNESS FOR A PARTICULAR PURPOSE\.'

      r'|'

      r'\1\2 '
      r'IN NO EVENT SHALL .+ BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL '
      r'DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, '
      r'WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING '
      r'OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE\.'

      .replaceAll(' ', _linebreak)
    )
    +
    r')*',
    multiLine: true,
    caseSensitive: false
  ),

  // BISON LICENSE
  // Seen in some ANGLE source. The usage falls under the "special exception" clause.
  RegExp(
    kIndent +
    r'This program is free software: you can redistribute it and/or modify\n'
    r'^(?:\1\2)?it under the terms of the GNU General Public License as published by\n'
    r'^(?:\1\2)?the Free Software Foundation, either version 3 of the License, or\n'
    r'^(?:\1\2)?\(at your option\) any later version.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?This program is distributed in the hope that it will be useful,\n'
    r'^(?:\1\2)?but WITHOUT ANY WARRANTY; without even the implied warranty of\n'
    r'^(?:\1\2)?MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n'
    r'^(?:\1\2)?GNU General Public License for more details.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?You should have received a copy of the GNU General Public License\n'
    r'^(?:\1\2)?along with this program.  If not, see <http://www.gnu.org/licenses/>.  \*/\n'
    r'^(?:\1\2)?\n*' +
    kIndent +
    r'As a special exception, you may create a larger work that contains\n'
    r'^(?:\1\2)?part or all of the Bison parser skeleton and distribute that work\n'
    r"^(?:\1\2)?under terms of your choice, so long as that work isn't itself a\n"
    r'^(?:\1\2)?parser generator using the skeleton or a modified version thereof\n'
    r'^(?:\1\2)?as a parser skeleton.  Alternatively, if you modify or redistribute\n'
    r'^(?:\1\2)?the parser skeleton itself, you may \(at your option\) remove this\n'
    r'^(?:\1\2)?special exception, which will cause the skeleton and the resulting\n'
    r'^(?:\1\2)?Bison output files to be licensed under the GNU General Public\n'
    r'^(?:\1\2)?License without this special exception.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?This special exception was added by the Free Software Foundation in\n'
    r'^(?:\1\2)?version 2.2 of Bison.  \*/\n',
    multiLine: true,
    caseSensitive: false
  ),

  // OTHER BRIEF LICENSES

  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^(?:\1\2)?purpose with or without fee is hereby granted, provided that the above *\n'
    r'^(?:\1\2)?copyright notice and this permission notice appear in all copies(?:, and that *\n'
    r'^(?:\1\2)?the name of .+ not be used in advertising or *\n'
    r'^(?:\1\2)?publicity pertaining to distribution of the document or software without *\n'
    r'^(?:\1\2)?specific, written prior permission)?\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^(?:\1\2)?THE SOFTWARE IS PROVIDED "AS IS" AND .+ DISCLAIMS ALL(?: WARRANTIES)? *\n'
    r'^(?:\1\2)?(?:WARRANTIES )?WITH REGARD TO THIS SOFTWARE,? INCLUDING ALL IMPLIED WARRANTIES(?: OF)? *\n'
    r'^(?:\1\2)?(?:OF )?MERCHANTABILITY AND FITNESS\. +IN NO EVENT SHALL .+(?: BE LIABLE FOR)? *\n'
    r'^(?:\1\2)?(?:.+ BE LIABLE FOR )?ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL(?: DAMAGES OR ANY DAMAGES)? *\n'
    r'^(?:\1\2)?(?:DAMAGES OR ANY DAMAGES )?WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR(?: PROFITS, WHETHER IN AN)? *\n'
    r'^(?:\1\2)?(?:PROFITS, WHETHER IN AN )?ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS(?: ACTION, ARISING OUT OF)? *\n'
    r'^(?:\1\2)?(?:ACTION, ARISING OUT OF )?OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS(?: SOFTWARE)?(?: *\n'
    r'^(?:\1\2)?SOFTWARE)?\.',
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in the NDK
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and/or distribute this software for any *\n'
    r'^\1\2purpose with or without fee is hereby granted, provided that the above *\n'
    r'^\1\2copyright notice and this permission notice appear in all copies\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE SOFTWARE IS PROVIDED "AS IS" AND .+ DISCLAIMS ALL WARRANTIES(?: WITH)? *\n'
    r'^\1\2(?:WITH )?REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF(?: MERCHANTABILITY)? *\n'
    r'^\1\2(?:MERCHANTABILITY )?AND FITNESS\. +IN NO EVENT SHALL .+ BE LIABLE FOR(?: ANY(?: SPECIAL, DIRECT,)?)? *\n'
    r'^\1\2(?:(?:ANY )?SPECIAL, DIRECT, )?INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES(?: WHATSOEVER RESULTING FROM)? *\n'
    r'^\1\2(?:WHATSOEVER RESULTING FROM )?LOSS OF USE, DATA OR PROFITS, WHETHER IN AN(?: ACTION(?: OF CONTRACT, NEGLIGENCE)?)? *\n'
    r'^\1\2(?:(?:ACTION )?OF CONTRACT, NEGLIGENCE )?OR OTHER TORTIOUS ACTION, ARISING OUT OF(?: OR IN(?: CONNECTION WITH THE USE OR)?)? *\n'
    r'^\1\2(?:(?:OR IN )?CONNECTION WITH THE USE OR )?PERFORMANCE OF THIS SOFTWARE\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^\1\2purpose with or without fee is hereby granted, provided that the above *\n'
    r'^\1\2copyright notice and this permission notice appear in all copies\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED *\n"
    r'^\1\2WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF *\n'
    r'^\1\2MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE\. +THE AUTHORS AND *\n'
    r'^\1\2CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW, base
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^\1\2purpose without fee is hereby granted, provided that this entire notice *\n'
    r'^\1\2is included in all copies of any software which is or includes a copy *\n'
    r'^\1\2or modification of this software and in all copies of the supporting *\n'
    r'^\1\2documentation for such software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED *\n'
    r'^\1\2WARRANTY\. +IN PARTICULAR, NEITHER THE AUTHOR NOR .+ MAKES ANY *\n'
    r'^\1\2REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY *\n'
    r'^\1\2OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE\.',
    multiLine: true,
    caseSensitive: false
  ),

  // harfbuzz
  RegExp(
    kIndent +
    r'Permission is hereby granted, without written agreement and without *\n'
    r'^\1\2license or royalty fees, to use, copy, modify, and distribute this *\n'
    r'^\1\2software and its documentation for any purpose, provided that the *\n'
    r'^\1\2above copyright notice and the following two paragraphs appear in *\n'
    r'^\1\2all copies of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR *\n'
    r'^\1\2DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES *\n'
    r'^\1\2ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN *\n'
    r'^\1\2IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH *\n'
    r'^\1\2DAMAGE\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, *\n'
    r'^\1\2BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND *\n'
    r'^\1\2FITNESS FOR A PARTICULAR PURPOSE\. +THE SOFTWARE PROVIDED HEREUNDER IS *\n'
    r'^\1\2ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO *\n'
    r'^\1\2PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS\. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // NDK
  RegExp(
    kIndent +
    r'Permission to use, copy, modify and distribute this software and *\n'
    r'^\1\2its documentation is hereby granted, provided that both the copyright *\n'
    r'^\1\2notice and this permission notice appear in all copies of the *\n'
    r'^\1\2software, derivative works or modified versions, and any portions *\n'
    r'^\1\2thereof, and that both notices appear in supporting documentation. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" *\n'
    r'^\1\2CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND *\n'
    r'^\1\2FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Carnegie Mellon requests users of this software to return to *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2 Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU *\n'
    r'^\1\2 School of Computer Science *\n'
    r'^\1\2 Carnegie Mellon University *\n'
    r'^\1\2 Pittsburgh PA 15213-3890 *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2any improvements or extensions that they make and grant Carnegie the *\n'
    r'^\1\2rights to redistribute these changes. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in Android NDK gnu-libstdc++
  RegExp(
    kIndent +
    (
      r'Permission to use, copy, modify, (?:distribute and sell|sell, and distribute) this software '
      r'(?:and its documentation for any purpose )?is hereby granted without fee, '
      r'provided that the above copyright notice appears? in all copies,? and '
      r'that both that copyright notice and this permission notice appear '
      r'in supporting documentation\. '
      r'(?:.+'
        r'|Hewlett-Packard Company'
        r'|Silicon Graphics'
        r'|None of the above authors, nor IBM Haifa Research Laboratories,'
      r') makes? (?:no|any) '
      r'representations? about the suitability of this software for any '
      r'(?:purpose\. It is provi)?ded "as is" without express or implied warranty\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in Android NDK
  RegExp(
    kIndent +
    r'Developed at (?:SunPro|SunSoft), a Sun Microsystems, Inc. business. *\n'
    r'^\1\2Permission to use, copy, modify, and distribute this *\n'
    r'^\1\2software is freely granted, provided that this notice *\n'
    r'^\1\2is preserved.',
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in Android NDK (stlport)
  RegExp(
    kIndent +
    r'This material is provided "as is", with absolutely no warranty expressed *\n'
    r'^\1\2or implied\. +Any use is at your own risk\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission to use or copy this software for any purpose is hereby granted *\n'
    r'^\1\2without fee, provided the above notices are retained on all copies\. *\n'
    r'^\1\2Permission to modify the code and to distribute modified code is granted, *\n'
    r'^\1\2provided the above notices are retained, and a notice that the code was *\n'
    r'^\1\2modified is included with the above copyright notice\.',
    multiLine: true,
    caseSensitive: false
  ),

  // freetype2.
  RegExp(
    kIndent +
    (
      r'Permission to use, copy, modify, distribute, and sell this software and its '
      r'documentation for any purpose is hereby granted without fee, provided that '
      r'the above copyright notice appear in all copies and that both that '
      r'copyright notice and this permission notice appear in supporting '
      r'documentation\. '
      r'The above copyright notice and this permission notice shall be included in '
      r'all copies or substantial portions of the Software\. '
      r'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR '
      r'IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\.  IN NO EVENT SHALL THE '
      r'OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN '
      r'AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN '
      r'CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\. '
      r'Except as contained in this notice, the name of The Open Group shall not be '
      r'used in advertising or otherwise to promote the sale, use or other dealings '
      r'in this Software without prior written authorization from The Open Group\. '
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

  // TODO(ianh): File a bug on what happens if you replace the // with a #
  // ICU
  RegExp(
    kIndent +
    r'This file is provided as-is by Unicode, Inc\. \(The Unicode Consortium\)\. '
    r'No claims are made as to fitness for any particular purpose\. No '
    r'warranties of any kind are expressed or implied\. The recipient '
    r'agrees to determine applicability of information provided\. If this '
    r'file has been provided on optical media by Unicode, Inc\., the sole '
    r'remedy for any claim will be exchange of defective media within 90 '
    r'days of receipt\. '
    r'Unicode, Inc\. hereby grants the right to freely use the information '
    r'supplied in this file in the creation of products supporting the '
    r'Unicode Standard, and to make copies of this file in any form for '
    r'internal or external distribution as long as this notice remains '
    r'attached\.'
    .replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

  // OpenSSL
  RegExp(
    kIndent +
    r'The portions of the attached software \("Contribution"\) is developed by *\n'
    r'^\1\2Nokia Corporation and is licensed pursuant to the OpenSSL open source *\n'
    r'^\1\2license\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2The Contribution, originally written by Mika Kousa and Pasi Eronen of *\n'
    r'^\1\2Nokia Corporation, consists of the "PSK" \(Pre-Shared Key\) ciphersuites *\n'
    r'^\1\2support \(see RFC 4279\) to OpenSSL\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2No patent licenses or other rights except those expressly stated in *\n'
    r'^\1\2the OpenSSL open source license shall be deemed granted or received *\n'
    r'^\1\2expressly, by implication, estoppel, or otherwise\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2No assurances are provided by Nokia that the Contribution does not *\n'
    r'^\1\2infringe the patent or other intellectual property rights of any third *\n'
    r'^\1\2party or that the license provides you with all the necessary rights *\n'
    r'^\1\2to make use of the Contribution\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND\. IN *\n'
    r'^\1\2ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA *\n'
    r'^\1\2SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY *\n'
    r'^\1\2OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR *\n'
    r'^\1\2OTHERWISE\.',
    multiLine: true,
    caseSensitive: false
  ),

];

final List<RegExp> csNotices = <RegExp>[

  // used with _tryInline, with needsCopyright: false
  // should have two groups, prefixes 1 and 2

  RegExp(
    kIndent +
    r'The Graphics Interchange Format\(c\) is the copyright property of CompuServe *\n'
    r'^\1\2Incorporated\. +Only CompuServe Incorporated is authorized to define, redefine, *\n'
    r'^\1\2enhance, alter, modify or change in any way the definition of the format\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2CompuServe Incorporated hereby grants a limited, non-exclusive, royalty-free *\n'
    r'^\1\2license for the use of the Graphics Interchange Format\(sm\) in computer *\n'
    r'^\1\2software; computer software utilizing GIF\(sm\) must acknowledge ownership of the *\n'
    r'^\1\2Graphics Interchange Format and its Service Mark by CompuServe Incorporated, in *\n'
    r'^\1\2User and Technical Documentation\. +Computer software utilizing GIF, which is *\n'
    r'^\1\2distributed or may be distributed without User or Technical Documentation must *\n'
    r'^\1\2display to the screen or printer a message acknowledging ownership of the *\n'
    r'^\1\2Graphics Interchange Format and the Service Mark by CompuServe Incorporated; in *\n'
    r'^\1\2this case, the acknowledgement may be displayed in an opening screen or leading *\n'
    r'^\1\2banner, or a closing screen or trailing banner\. +A message such as the following *\n'
    r'^\1\2may be used: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2 *"The Graphics Interchange Format\(c\) is the Copyright property of *\n'
    r'^\1\2 *CompuServe Incorporated\. +GIF\(sm\) is a Service Mark property of *\n'
    r'^\1\2 *CompuServe Incorporated\." *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // NSPR
  // (Showing the entire block instead of the LGPL for this file is based
  // on advice specifically regarding the prtime.cc file.)
  RegExp(
    r'()()/\* Portions are Copyright \(C\) 2011 Google Inc \*/\n'
    r'/\* \*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*\n'
    r' \* Version: MPL 1\.1/GPL 2\.0/LGPL 2\.1\n'
    r' \*\n'
    r' \* The contents of this file are subject to the Mozilla Public License Version\n'
    r' \* 1\.1 \(the "License"\); you may not use this file except in compliance with\n'
    r' \* the License\. +You may obtain a copy of the License at\n'
    r' \* http://www\.mozilla\.org/MPL/\n'
    r' \*\n'
    r' \* Software distributed under the License is distributed on an "AS IS" basis,\n'
    r' \* WITHOUT WARRANTY OF ANY KIND, either express or implied\. +See the License\n'
    r' \* for the specific language governing rights and limitations under the\n'
    r' \* License\.\n'
    r' \*\n'
    r' \* The Original Code is the Netscape Portable Runtime \(NSPR\)\.\n'
    r' \*\n'
    r' \* The Initial Developer of the Original Code is\n'
    r' \* Netscape Communications Corporation\.\n'
    r' \* Portions created by the Initial Developer are Copyright \(C\) 1998-2000\n'
    r' \* the Initial Developer\. +All Rights Reserved\.\n'
    r' \*\n'
    r' \* Contributor\(s\):\n'
    r' \*\n'
    r' \* Alternatively, the contents of this file may be used under the terms of\n'
    r' \* either the GNU General Public License Version 2 or later \(the "GPL"\), or\n'
    r' \* the GNU Lesser General Public License Version 2\.1 or later \(the "LGPL"\),\n'
    r' \* in which case the provisions of the GPL or the LGPL are applicable instead\n'
    r' \* of those above\. +If you wish to allow use of your version of this file only\n'
    r' \* under the terms of either the GPL or the LGPL, and not to allow others to\n'
    r' \* use your version of this file under the terms of the MPL, indicate your\n'
    r' \* decision by deleting the provisions above and replace them with the notice\n'
    r' \* and other provisions required by the GPL or the LGPL\. +If you do not delete\n'
    r' \* the provisions above, a recipient may use your version of this file under\n'
    r' \* the terms of any one of the MPL, the GPL or the LGPL\.\n'
    r' \*\n'
    r' \* \*\*\*\*\* END LICENSE BLOCK \*\*\*\*\* \*/\n'
  ),

  // Advice for this was "text verbatim".
  RegExp(
    kIndent +
    r'Copyright \(c\) 2015-2016 Khronos Group\. This work is licensed under a\n'
    r'\1\2Creative Commons Attribution 4\.0 International License; see\n'
    r'\1\2http://creativecommons\.org/licenses/by/4\.0/',
    multiLine: true,
    caseSensitive: false,
  ),

  // by analogy to the above one
  // seen in jsr305
  RegExp(
    kIndent +
    r'Copyright .+\n'
    r'\1\2Released under the Creative Commons Attribution License\n'
    r'\1\2 *\(?http://creativecommons\.org/licenses/by/2\.5/?\)?\n'
    r'\1\2Official home: .+',
    multiLine: true,
    caseSensitive: false,
  ),

  // Advice for this was "Just display its text as a politeness. Nothing else required".
  RegExp(
    r'()()/\* mdXhl\.c \* ----------------------------------------------------------------------------\n'
    r' \* "THE BEER-WARE LICENSE" \(Revision 42\):\n'
    r' \* <phk@FreeBSD\.org> wrote this file\. +As long as you retain this notice you\n'
    r' \* can do whatever you want with this stuff\. If we meet some day, and you think\n'
    r' \* this stuff is worth it, you can buy me a beer in return\. +Poul-Henning Kamp\n'
    r' \* ----------------------------------------------------------------------------\n'
    r' \* libjpeg-turbo Modifications:\n'
    r' \* Copyright \(C\) 2016, D\. R\. Commander\.?\n'
    r' \* Modifications are under the same license as the original code \(see above\)\n'
    r' \* ----------------------------------------------------------------------------'
  ),
];


// FALLBACK PATTERNS

final List<RegExp> csFallbacks = <RegExp>[

  // used with _tryNone
  // groups are ignored

];


// FORWARD REFERENCE

class ForwardReferencePattern {
  ForwardReferencePattern({ this.firstPrefixIndex, this.indentPrefixIndex, this.pattern, this.targetPattern });
  final int firstPrefixIndex;
  final int indentPrefixIndex;
  final RegExp pattern;
  final RegExp targetPattern;
}

final List<ForwardReferencePattern> csForwardReferenceLicenses = <ForwardReferencePattern>[

  // used with _tryForwardReferencePattern

  // OpenSSL (in Dart third_party)
  ForwardReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    pattern: RegExp(
      kIndent + r'(?:'
      +
      (
        r'Portions of the attached software \("Contribution"\) are developed by .+ and are contributed to the OpenSSL project\.'
        .replaceAll(' ', _linebreak)
      )
      +
      r'|'
      +
      (
        r'The .+ included herein is developed by .+, and is contributed to the OpenSSL project\.'
        .replaceAll(' ', _linebreak)
      )
      +
      r'|'
      r'(?:\1? *\n)+'
      r')*'
      r'\1\2 *'
      +
      (
        r'The .+ is licensed pursuant to the OpenSSL open source license provided (?:below|above)\.'
        .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    ),
    targetPattern: RegExp('Redistribution and use in source and binary forms(?:.|\n)+OpenSSL')
  ),

  // libevent
  ForwardReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    pattern: RegExp(
      kIndent + r'Use is subject to license terms\.$',
      multiLine: true,
      caseSensitive: false,
    ),
    targetPattern: RegExp('Redistribution and use in source and binary forms(?:.|\n)+SUN MICROSYSTEMS')
  ),

];
