ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- usr/share/man/man1/pcretest.1000064400000070612152342605160012013 0ustar00.TH PCRETEST 1 .SH NAME pcretest - a program for testing Perl-compatible regular expressions. .SH SYNOPSIS .rs .sp .B pcretest "[options] [source] [destination]" .sp \fBpcretest\fP was written as a test program for the PCRE regular expression library itself, but it can also be used for experimenting with regular expressions. This document describes the features of the test program; for details of the regular expressions themselves, see the .\" HREF \fBpcrepattern\fP .\" documentation. For details of the PCRE library function calls and their options, see the .\" HREF \fBpcreapi\fP .\" documentation. . . .SH OPTIONS .rs .TP 10 \fB-b\fP Behave as if each regex has the \fB/B\fP (show bytecode) modifier; the internal form is output after compilation. .TP 10 \fB-C\fP Output the version number of the PCRE library, and all available information about the optional features that are included, and then exit. .TP 10 \fB-d\fP Behave as if each regex has the \fB/D\fP (debug) modifier; the internal form and information about the compiled pattern is output after compilation; \fB-d\fP is equivalent to \fB-b -i\fP. .TP 10 \fB-dfa\fP Behave as if each data line contains the \eD escape sequence; this causes the alternative matching function, \fBpcre_dfa_exec()\fP, to be used instead of the standard \fBpcre_exec()\fP function (more detail is given below). .TP 10 \fB-help\fP Output a brief summary these options and then exit. .TP 10 \fB-i\fP Behave as if each regex has the \fB/I\fP modifier; information about the compiled pattern is given after compilation. .TP 10 \fB-M\fP Behave as if each data line contains the \eM escape sequence; this causes PCRE to discover the minimum MATCH_LIMIT and MATCH_LIMIT_RECURSION settings by calling \fBpcre_exec()\fP repeatedly with different limits. .TP 10 \fB-m\fP Output the size of each compiled pattern after it has been compiled. This is equivalent to adding \fB/M\fP to each regular expression. For compatibility with earlier versions of pcretest, \fB-s\fP is a synonym for \fB-m\fP. .TP 10 \fB-o\fP \fIosize\fP Set the number of elements in the output vector that is used when calling \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP to be \fIosize\fP. The default value is 45, which is enough for 14 capturing subexpressions for \fBpcre_exec()\fP or 22 different matches for \fBpcre_dfa_exec()\fP. The vector size can be changed for individual matching calls by including \eO in the data line (see below). .TP 10 \fB-p\fP Behave as if each regex has the \fB/P\fP modifier; the POSIX wrapper API is used to call PCRE. None of the other options has any effect when \fB-p\fP is set. .TP 10 \fB-q\fP Do not output the version number of \fBpcretest\fP at the start of execution. .TP 10 \fB-S\fP \fIsize\fP On Unix-like systems, set the size of the runtime stack to \fIsize\fP megabytes. .TP 10 \fB-t\fP Run each compile, study, and match many times with a timer, and output resulting time per compile or match (in milliseconds). Do not set \fB-m\fP with \fB-t\fP, because you will then get the size output a zillion times, and the timing will be distorted. You can control the number of iterations that are used for timing by following \fB-t\fP with a number (as a separate item on the command line). For example, "-t 1000" would iterate 1000 times. The default is to iterate 500000 times. .TP 10 \fB-tm\fP This is like \fB-t\fP except that it times only the matching phase, not the compile or study phases. . . .SH DESCRIPTION .rs .sp If \fBpcretest\fP is given two filename arguments, it reads from the first and writes to the second. If it is given only one filename argument, it reads from that file and writes to stdout. Otherwise, it reads from stdin and writes to stdout, and prompts for each line of input, using "re>" to prompt for regular expressions, and "data>" to prompt for data lines. .P When \fBpcretest\fP is built, a configuration option can specify that it should be linked with the \fBlibreadline\fP library. When this is done, if the input is from a terminal, it is read using the \fBreadline()\fP function. This provides line-editing and history facilities. The output from the \fB-help\fP option states whether or not \fBreadline()\fP will be used. .P The program handles any number of sets of input on a single input file. Each set starts with a regular expression, and continues with any number of data lines to be matched against the pattern. .P Each data line is matched separately and independently. If you want to do multi-line matches, you have to use the \en escape sequence (or \er or \er\en, etc., depending on the newline setting) in a single line of input to encode the newline sequences. There is no limit on the length of data lines; the input buffer is automatically extended if it is too small. .P An empty line signals the end of the data lines, at which point a new regular expression is read. The regular expressions are given enclosed in any non-alphanumeric delimiters other than backslash, for example: .sp /(a|bc)x+yz/ .sp White space before the initial delimiter is ignored. A regular expression may be continued over several input lines, in which case the newline characters are included within it. It is possible to include the delimiter within the pattern by escaping it, for example .sp /abc\e/def/ .sp If you do so, the escape and the delimiter form part of the pattern, but since delimiters are always non-alphanumeric, this does not affect its interpretation. If the terminating delimiter is immediately followed by a backslash, for example, .sp /abc/\e .sp then a backslash is added to the end of the pattern. This is done to provide a way of testing the error condition that arises if a pattern finishes with a backslash, because .sp /abc\e/ .sp is interpreted as the first line of a pattern that starts with "abc/", causing pcretest to read the next line as a continuation of the regular expression. . . .SH "PATTERN MODIFIERS" .rs .sp A pattern may be followed by any number of modifiers, which are mostly single characters. Following Perl usage, these are referred to below as, for example, "the \fB/i\fP modifier", even though the delimiter of the pattern need not always be a slash, and no slash is used when writing modifiers. Whitespace may appear between the final pattern delimiter and the first modifier, and between the modifiers themselves. .P The \fB/i\fP, \fB/m\fP, \fB/s\fP, and \fB/x\fP modifiers set the PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, or PCRE_EXTENDED options, respectively, when \fBpcre_compile()\fP is called. These four modifier letters have the same effect as they do in Perl. For example: .sp /caseless/i .sp The following table shows additional modifiers for setting PCRE options that do not correspond to anything in Perl: .sp \fB/A\fP PCRE_ANCHORED \fB/C\fP PCRE_AUTO_CALLOUT \fB/E\fP PCRE_DOLLAR_ENDONLY \fB/f\fP PCRE_FIRSTLINE \fB/J\fP PCRE_DUPNAMES \fB/N\fP PCRE_NO_AUTO_CAPTURE \fB/U\fP PCRE_UNGREEDY \fB/X\fP PCRE_EXTRA \fB/\fP PCRE_JAVASCRIPT_COMPAT \fB/\fP PCRE_NEWLINE_CR \fB/\fP PCRE_NEWLINE_LF \fB/\fP PCRE_NEWLINE_CRLF \fB/\fP PCRE_NEWLINE_ANYCRLF \fB/\fP PCRE_NEWLINE_ANY \fB/\fP PCRE_BSR_ANYCRLF \fB/\fP PCRE_BSR_UNICODE .sp Those specifying line ending sequences are literal strings as shown, but the letters can be in either case. This example sets multiline matching with CRLF as the line ending sequence: .sp /^abc/m .sp Details of the meanings of these PCRE options are given in the .\" HREF \fBpcreapi\fP .\" documentation. . . .SS "Finding all matches in a string" .rs .sp Searching for all possible matches within each subject string can be requested by the \fB/g\fP or \fB/G\fP modifier. After finding a match, PCRE is called again to search the remainder of the subject string. The difference between \fB/g\fP and \fB/G\fP is that the former uses the \fIstartoffset\fP argument to \fBpcre_exec()\fP to start searching at a new point within the entire string (which is in effect what Perl does), whereas the latter passes over a shortened substring. This makes a difference to the matching process if the pattern begins with a lookbehind assertion (including \eb or \eB). .P If any call to \fBpcre_exec()\fP in a \fB/g\fP or \fB/G\fP sequence matches an empty string, the next call is done with the PCRE_NOTEMPTY_ATSTART and PCRE_ANCHORED flags set in order to search for another, non-empty, match at the same point. If this second match fails, the start offset is advanced by one character, and the normal match is retried. This imitates the way Perl handles such cases when using the \fB/g\fP modifier or the \fBsplit()\fP function. . . .SS "Other modifiers" .rs .sp There are yet more modifiers for controlling the way \fBpcretest\fP operates. .P The \fB/+\fP modifier requests that as well as outputting the substring that matched the entire pattern, pcretest should in addition output the remainder of the subject string. This is useful for tests where the subject contains multiple copies of the same substring. .P The \fB/B\fP modifier is a debugging feature. It requests that \fBpcretest\fP output a representation of the compiled byte code after compilation. Normally this information contains length and offset values; however, if \fB/Z\fP is also present, this data is replaced by spaces. This is a special feature for use in the automatic test scripts; it ensures that the same output is generated for different internal link sizes. .P The \fB/L\fP modifier must be followed directly by the name of a locale, for example, .sp /pattern/Lfr_FR .sp For this reason, it must be the last modifier. The given locale is set, \fBpcre_maketables()\fP is called to build a set of character tables for the locale, and this is then passed to \fBpcre_compile()\fP when compiling the regular expression. Without an \fB/L\fP modifier, NULL is passed as the tables pointer; that is, \fB/L\fP applies only to the expression on which it appears. .P The \fB/I\fP modifier requests that \fBpcretest\fP output information about the compiled pattern (whether it is anchored, has a fixed first character, and so on). It does this by calling \fBpcre_fullinfo()\fP after compiling a pattern. If the pattern is studied, the results of that are also output. .P The \fB/D\fP modifier is a PCRE debugging feature, and is equivalent to \fB/BI\fP, that is, both the \fB/B\fP and the \fB/I\fP modifiers. .P The \fB/F\fP modifier causes \fBpcretest\fP to flip the byte order of the fields in the compiled pattern that contain 2-byte and 4-byte numbers. This facility is for testing the feature in PCRE that allows it to execute patterns that were compiled on a host with a different endianness. This feature is not available when the POSIX interface to PCRE is being used, that is, when the \fB/P\fP pattern modifier is specified. See also the section about saving and reloading compiled patterns below. .P The \fB/S\fP modifier causes \fBpcre_study()\fP to be called after the expression has been compiled, and the results used when the expression is matched. .P The \fB/M\fP modifier causes the size of memory block used to hold the compiled pattern to be output. .P The \fB/P\fP modifier causes \fBpcretest\fP to call PCRE via the POSIX wrapper API rather than its native API. When this is done, all other modifiers except \fB/i\fP, \fB/m\fP, and \fB/+\fP are ignored. REG_ICASE is set if \fB/i\fP is present, and REG_NEWLINE is set if \fB/m\fP is present. The wrapper functions force PCRE_DOLLAR_ENDONLY always, and PCRE_DOTALL unless REG_NEWLINE is set. .P The \fB/8\fP modifier causes \fBpcretest\fP to call PCRE with the PCRE_UTF8 option set. This turns on support for UTF-8 character handling in PCRE, provided that it was compiled with this support enabled. This modifier also causes any non-printing characters in output strings to be printed using the \ex{hh...} notation if they are valid UTF-8 sequences. .P If the \fB/?\fP modifier is used with \fB/8\fP, it causes \fBpcretest\fP to call \fBpcre_compile()\fP with the PCRE_NO_UTF8_CHECK option, to suppress the checking of the string for UTF-8 validity. . . .SH "DATA LINES" .rs .sp Before each data line is passed to \fBpcre_exec()\fP, leading and trailing whitespace is removed, and it is then scanned for \e escapes. Some of these are pretty esoteric features, intended for checking out some of the more complicated features of PCRE. If you are just testing "ordinary" regular expressions, you probably don't need any of these. The following escapes are recognized: .sp \ea alarm (BEL, \ex07) \eb backspace (\ex08) \ee escape (\ex27) \ef formfeed (\ex0c) \en newline (\ex0a) .\" JOIN \eqdd set the PCRE_MATCH_LIMIT limit to dd (any number of digits) \er carriage return (\ex0d) \et tab (\ex09) \ev vertical tab (\ex0b) \ennn octal character (up to 3 octal digits) \exhh hexadecimal character (up to 2 hex digits) .\" JOIN \ex{hh...} hexadecimal character, any number of digits in UTF-8 mode .\" JOIN \eA pass the PCRE_ANCHORED option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \eB pass the PCRE_NOTBOL option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \eCdd call pcre_copy_substring() for substring dd after a successful match (number less than 32) .\" JOIN \eCname call pcre_copy_named_substring() for substring "name" after a successful match (name termin- ated by next non alphanumeric character) .\" JOIN \eC+ show the current captured substrings at callout time \eC- do not supply a callout function .\" JOIN \eC!n return 1 instead of 0 when callout number n is reached .\" JOIN \eC!n!m return 1 instead of 0 when callout number n is reached for the nth time .\" JOIN \eC*n pass the number n (may be negative) as callout data; this is used as the callout return value \eD use the \fBpcre_dfa_exec()\fP match function \eF only shortest match for \fBpcre_dfa_exec()\fP .\" JOIN \eGdd call pcre_get_substring() for substring dd after a successful match (number less than 32) .\" JOIN \eGname call pcre_get_named_substring() for substring "name" after a successful match (name termin- ated by next non-alphanumeric character) .\" JOIN \eL call pcre_get_substringlist() after a successful match .\" JOIN \eM discover the minimum MATCH_LIMIT and MATCH_LIMIT_RECURSION settings .\" JOIN \eN pass the PCRE_NOTEMPTY option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP; if used twice, pass the PCRE_NOTEMPTY_ATSTART option .\" JOIN \eOdd set the size of the output vector passed to \fBpcre_exec()\fP to dd (any number of digits) .\" JOIN \eP pass the PCRE_PARTIAL_SOFT option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP; if used twice, pass the PCRE_PARTIAL_HARD option .\" JOIN \eQdd set the PCRE_MATCH_LIMIT_RECURSION limit to dd (any number of digits) \eR pass the PCRE_DFA_RESTART option to \fBpcre_dfa_exec()\fP \eS output details of memory get/free calls during matching .\" JOIN \eY pass the PCRE_NO_START_OPTIMIZE option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \eZ pass the PCRE_NOTEOL option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \e? pass the PCRE_NO_UTF8_CHECK option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP \e>dd start the match at offset dd (any number of digits); .\" JOIN this sets the \fIstartoffset\fP argument for \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \e pass the PCRE_NEWLINE_CR option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \e pass the PCRE_NEWLINE_LF option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \e pass the PCRE_NEWLINE_CRLF option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \e pass the PCRE_NEWLINE_ANYCRLF option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .\" JOIN \e pass the PCRE_NEWLINE_ANY option to \fBpcre_exec()\fP or \fBpcre_dfa_exec()\fP .sp The escapes that specify line ending sequences are literal strings, exactly as shown. No more than one newline setting should be present in any data line. .P A backslash followed by anything else just escapes the anything else. If the very last character is a backslash, it is ignored. This gives a way of passing an empty line as data, since a real empty line terminates the data input. .P If \eM is present, \fBpcretest\fP calls \fBpcre_exec()\fP several times, with different values in the \fImatch_limit\fP and \fImatch_limit_recursion\fP fields of the \fBpcre_extra\fP data structure, until it finds the minimum numbers for each parameter that allow \fBpcre_exec()\fP to complete. The \fImatch_limit\fP number is a measure of the amount of backtracking that takes place, and checking it out can be instructive. For most simple matches, the number is quite small, but for patterns with very large numbers of matching possibilities, it can become large very quickly with increasing length of subject string. The \fImatch_limit_recursion\fP number is a measure of how much stack (or, if PCRE is compiled with NO_RECURSE, how much heap) memory is needed to complete the match attempt. .P When \eO is used, the value specified may be higher or lower than the size set by the \fB-O\fP command line option (or defaulted to 45); \eO applies only to the call of \fBpcre_exec()\fP for the line in which it appears. .P If the \fB/P\fP modifier was present on the pattern, causing the POSIX wrapper API to be used, the only option-setting sequences that have any effect are \eB and \eZ, causing REG_NOTBOL and REG_NOTEOL, respectively, to be passed to \fBregexec()\fP. .P The use of \ex{hh...} to represent UTF-8 characters is not dependent on the use of the \fB/8\fP modifier on the pattern. It is recognized always. There may be any number of hexadecimal digits inside the braces. The result is from one to six bytes, encoded according to the original UTF-8 rules of RFC 2279. This allows for values in the range 0 to 0x7FFFFFFF. Note that not all of those are valid Unicode code points, or indeed valid UTF-8 characters according to the later rules in RFC 3629. . . .SH "THE ALTERNATIVE MATCHING FUNCTION" .rs .sp By default, \fBpcretest\fP uses the standard PCRE matching function, \fBpcre_exec()\fP to match each data line. From release 6.0, PCRE supports an alternative matching function, \fBpcre_dfa_test()\fP, which operates in a different way, and has some restrictions. The differences between the two functions are described in the .\" HREF \fBpcrematching\fP .\" documentation. .P If a data line contains the \eD escape sequence, or if the command line contains the \fB-dfa\fP option, the alternative matching function is called. This function finds all possible matches at a given point. If, however, the \eF escape sequence is present in the data line, it stops after the first match is found. This is always the shortest possible match. . . .SH "DEFAULT OUTPUT FROM PCRETEST" .rs .sp This section describes the output when the normal matching function, \fBpcre_exec()\fP, is being used. .P When a match succeeds, pcretest outputs the list of captured substrings that \fBpcre_exec()\fP returns, starting with number 0 for the string that matched the whole pattern. Otherwise, it outputs "No match" when the return is PCRE_ERROR_NOMATCH, and "Partial match:" followed by the partially matching substring when \fBpcre_exec()\fP returns PCRE_ERROR_PARTIAL. For any other returns, it outputs the PCRE negative error number. Here is an example of an interactive \fBpcretest\fP run. .sp $ pcretest PCRE version 7.0 30-Nov-2006 .sp re> /^abc(\ed+)/ data> abc123 0: abc123 1: 123 data> xyz No match .sp Note that unset capturing substrings that are not followed by one that is set are not returned by \fBpcre_exec()\fP, and are not shown by \fBpcretest\fP. In the following example, there are two capturing substrings, but when the first data line is matched, the second, unset substring is not shown. An "internal" unset substring is shown as "", as for the second data line. .sp re> /(a)|(b)/ data> a 0: a 1: a data> b 0: b 1: 2: b .sp If the strings contain any non-printing characters, they are output as \e0x escapes, or as \ex{...} escapes if the \fB/8\fP modifier was present on the pattern. See below for the definition of non-printing characters. If the pattern has the \fB/+\fP modifier, the output for substring 0 is followed by the the rest of the subject string, identified by "0+" like this: .sp re> /cat/+ data> cataract 0: cat 0+ aract .sp If the pattern has the \fB/g\fP or \fB/G\fP modifier, the results of successive matching attempts are output in sequence, like this: .sp re> /\eBi(\ew\ew)/g data> Mississippi 0: iss 1: ss 0: iss 1: ss 0: ipp 1: pp .sp "No match" is output only if the first match attempt fails. .P If any of the sequences \fB\eC\fP, \fB\eG\fP, or \fB\eL\fP are present in a data line that is successfully matched, the substrings extracted by the convenience functions are output with C, G, or L after the string number instead of a colon. This is in addition to the normal full list. The string length (that is, the return from the extraction function) is given in parentheses after each string for \fB\eC\fP and \fB\eG\fP. .P Note that whereas patterns can be continued over several lines (a plain ">" prompt is used for continuations), data lines may not. However newlines can be included in data by means of the \en escape (or \er, \er\en, etc., depending on the newline sequence setting). . . . .SH "OUTPUT FROM THE ALTERNATIVE MATCHING FUNCTION" .rs .sp When the alternative matching function, \fBpcre_dfa_exec()\fP, is used (by means of the \eD escape sequence or the \fB-dfa\fP command line option), the output consists of a list of all the matches that start at the first point in the subject where there is at least one match. For example: .sp re> /(tang|tangerine|tan)/ data> yellow tangerine\eD 0: tangerine 1: tang 2: tan .sp (Using the normal matching function on this data finds only "tang".) The longest matching string is always given first (and numbered zero). After a PCRE_ERROR_PARTIAL return, the output is "Partial match:", followed by the partially matching substring. .P If \fB/g\fP is present on the pattern, the search for further matches resumes at the end of the longest match. For example: .sp re> /(tang|tangerine|tan)/g data> yellow tangerine and tangy sultana\eD 0: tangerine 1: tang 2: tan 0: tang 1: tan 0: tan .sp Since the matching function does not support substring capture, the escape sequences that are concerned with captured substrings are not relevant. . . .SH "RESTARTING AFTER A PARTIAL MATCH" .rs .sp When the alternative matching function has given the PCRE_ERROR_PARTIAL return, indicating that the subject partially matched the pattern, you can restart the match with additional subject data by means of the \eR escape sequence. For example: .sp re> /^\ed?\ed(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\ed\ed$/ data> 23ja\eP\eD Partial match: 23ja data> n05\eR\eD 0: n05 .sp For further information about partial matching, see the .\" HREF \fBpcrepartial\fP .\" documentation. . . .SH CALLOUTS .rs .sp If the pattern contains any callout requests, \fBpcretest\fP's callout function is called during matching. This works with both matching functions. By default, the called function displays the callout number, the start and current positions in the text at the callout time, and the next pattern item to be tested. For example, the output .sp --->pqrabcdef 0 ^ ^ \ed .sp indicates that callout number 0 occurred for a match attempt starting at the fourth character of the subject string, when the pointer was at the seventh character of the data, and when the next pattern item was \ed. Just one circumflex is output if the start and current positions are the same. .P Callouts numbered 255 are assumed to be automatic callouts, inserted as a result of the \fB/C\fP pattern modifier. In this case, instead of showing the callout number, the offset in the pattern, preceded by a plus, is output. For example: .sp re> /\ed?[A-E]\e*/C data> E* --->E* +0 ^ \ed? +3 ^ [A-E] +8 ^^ \e* +10 ^ ^ 0: E* .sp The callout function in \fBpcretest\fP returns zero (carry on matching) by default, but you can use a \eC item in a data line (as described above) to change this. .P Inserting callouts can be helpful when using \fBpcretest\fP to check complicated regular expressions. For further information about callouts, see the .\" HREF \fBpcrecallout\fP .\" documentation. . . . .SH "NON-PRINTING CHARACTERS" .rs .sp When \fBpcretest\fP is outputting text in the compiled version of a pattern, bytes other than 32-126 are always treated as non-printing characters are are therefore shown as hex escapes. .P When \fBpcretest\fP is outputting text that is a matched part of a subject string, it behaves in the same way, unless a different locale has been set for the pattern (using the \fB/L\fP modifier). In this case, the \fBisprint()\fP function to distinguish printing and non-printing characters. . . . .SH "SAVING AND RELOADING COMPILED PATTERNS" .rs .sp The facilities described in this section are not available when the POSIX inteface to PCRE is being used, that is, when the \fB/P\fP pattern modifier is specified. .P When the POSIX interface is not in use, you can cause \fBpcretest\fP to write a compiled pattern to a file, by following the modifiers with > and a file name. For example: .sp /pattern/im >/some/file .sp See the .\" HREF \fBpcreprecompile\fP .\" documentation for a discussion about saving and re-using compiled patterns. .P The data that is written is binary. The first eight bytes are the length of the compiled pattern data followed by the length of the optional study data, each written as four bytes in big-endian order (most significant byte first). If there is no study data (either the pattern was not studied, or studying did not return any data), the second length is zero. The lengths are followed by an exact copy of the compiled pattern. If there is additional study data, this follows immediately after the compiled pattern. After writing the file, \fBpcretest\fP expects to read a new pattern. .P A saved pattern can be reloaded into \fBpcretest\fP by specifing < and a file name instead of a pattern. The name of the file must not contain a < character, as otherwise \fBpcretest\fP will interpret the line as a pattern delimited by < characters. For example: .sp re> \fP. When there is more than one pattern (specified by the use of \fB-e\fP and/or \fB-f\fP), each pattern is applied to each line in the order in which they are defined, except that all the \fB-e\fP patterns are tried before the \fB-f\fP patterns. .P By default, as soon as one pattern matches (or fails to match when \fB-v\fP is used), no further patterns are considered. However, if \fB--colour\fP (or \fB--color\fP) is used to colour the matching substrings, or if \fB--only-matching\fP, \fB--file-offsets\fP, or \fB--line-offsets\fP is used to output only the part of the line that matched (either shown literally, or as an offset), scanning resumes immediately following the match, so that further matches on the same line can be found. If there are multiple patterns, they are all tried on the remainder of the line, but patterns that follow the one that matched are not tried on the earlier part of the line. .P This is the same behaviour as GNU grep, but it does mean that the order in which multiple patterns are specified can affect the output when one of the above options is used. .P Patterns that can match an empty string are accepted, but empty string matches are never recognized. An example is the pattern "(super)?(man)?", in which all components are optional. This pattern finds all occurrences of both "super" and "man"; the output differs from matching with "super|man" when only the matching substrings are being shown. .P If the \fBLC_ALL\fP or \fBLC_CTYPE\fP environment variable is set, \fBpcregrep\fP uses the value to set a locale when calling the PCRE library. The \fB--locale\fP option can be used to override this. . .SH "SUPPORT FOR COMPRESSED FILES" .rs .sp It is possible to compile \fBpcregrep\fP so that it uses \fBlibz\fP or \fBlibbz2\fP to read files whose names end in \fB.gz\fP or \fB.bz2\fP, respectively. You can find out whether your binary has support for one or both of these file types by running it with the \fB--help\fP option. If the appropriate support is not present, files are treated as plain text. The standard input is always so treated. . .SH OPTIONS .rs .sp The order in which some of the options appear can affect the output. For example, both the \fB-h\fP and \fB-l\fP options affect the printing of file names. Whichever comes later in the command line will be the one that takes effect. .TP 10 \fB--\fP This terminate the list of options. It is useful if the next item on the command line starts with a hyphen but is not an option. This allows for the processing of patterns and filenames that start with hyphens. .TP \fB-A\fP \fInumber\fP, \fB--after-context=\fP\fInumber\fP Output \fInumber\fP lines of context after each matching line. If filenames and/or line numbers are being output, a hyphen separator is used instead of a colon for the context lines. A line containing "--" is output between each group of lines, unless they are in fact contiguous in the input file. The value of \fInumber\fP is expected to be relatively small. However, \fBpcregrep\fP guarantees to have up to 8K of following text available for context output. .TP \fB-B\fP \fInumber\fP, \fB--before-context=\fP\fInumber\fP Output \fInumber\fP lines of context before each matching line. If filenames and/or line numbers are being output, a hyphen separator is used instead of a colon for the context lines. A line containing "--" is output between each group of lines, unless they are in fact contiguous in the input file. The value of \fInumber\fP is expected to be relatively small. However, \fBpcregrep\fP guarantees to have up to 8K of preceding text available for context output. .TP \fB-C\fP \fInumber\fP, \fB--context=\fP\fInumber\fP Output \fInumber\fP lines of context both before and after each matching line. This is equivalent to setting both \fB-A\fP and \fB-B\fP to the same value. .TP \fB-c\fP, \fB--count\fP Do not output individual lines from the files that are being scanned; instead output the number of lines that would otherwise have been shown. If no lines are selected, the number zero is output. If several files are are being scanned, a count is output for each of them. However, if the \fB--files-with-matches\fP option is also used, only those files whose counts are greater than zero are listed. When \fB-c\fP is used, the \fB-A\fP, \fB-B\fP, and \fB-C\fP options are ignored. .TP \fB--colour\fP, \fB--color\fP If this option is given without any data, it is equivalent to "--colour=auto". If data is required, it must be given in the same shell item, separated by an equals sign. .TP \fB--colour=\fP\fIvalue\fP, \fB--color=\fP\fIvalue\fP This option specifies under what circumstances the parts of a line that matched a pattern should be coloured in the output. By default, the output is not coloured. The value (which is optional, see above) may be "never", "always", or "auto". In the latter case, colouring happens only if the standard output is connected to a terminal. More resources are used when colouring is enabled, because \fBpcregrep\fP has to search for all possible matches in a line, not just one, in order to colour them all. The colour that is used can be specified by setting the environment variable PCREGREP_COLOUR or PCREGREP_COLOR. The value of this variable should be a string of two numbers, separated by a semicolon. They are copied directly into the control string for setting colour on a terminal, so it is your responsibility to ensure that they make sense. If neither of the environment variables is set, the default is "1;31", which gives red. .TP \fB-D\fP \fIaction\fP, \fB--devices=\fP\fIaction\fP If an input path is not a regular file or a directory, "action" specifies how it is to be processed. Valid values are "read" (the default) or "skip" (silently skip the path). .TP \fB-d\fP \fIaction\fP, \fB--directories=\fP\fIaction\fP If an input path is a directory, "action" specifies how it is to be processed. Valid values are "read" (the default), "recurse" (equivalent to the \fB-r\fP option), or "skip" (silently skip the path). In the default case, directories are read as if they were ordinary files. In some operating systems the effect of reading a directory like this is an immediate end-of-file. .TP \fB-e\fP \fIpattern\fP, \fB--regex=\fP\fIpattern\fP, \fB--regexp=\fP\fIpattern\fP Specify a pattern to be matched. This option can be used multiple times in order to specify several patterns. It can also be used as a way of specifying a single pattern that starts with a hyphen. When \fB-e\fP is used, no argument pattern is taken from the command line; all arguments are treated as file names. There is an overall maximum of 100 patterns. They are applied to each line in the order in which they are defined until one matches (or fails to match if \fB-v\fP is used). If \fB-f\fP is used with \fB-e\fP, the command line patterns are matched first, followed by the patterns from the file, independent of the order in which these options are specified. Note that multiple use of \fB-e\fP is not the same as a single pattern with alternatives. For example, X|Y finds the first character in a line that is X or Y, whereas if the two patterns are given separately, \fBpcregrep\fP finds X if it is present, even if it follows Y in the line. It finds Y only if there is no X in the line. This really matters only if you are using \fB-o\fP to show the part(s) of the line that matched. .TP \fB--exclude\fP=\fIpattern\fP When \fBpcregrep\fP is searching the files in a directory as a consequence of the \fB-r\fP (recursive search) option, any regular files whose names match the pattern are excluded. Subdirectories are not excluded by this option; they are searched recursively, subject to the \fB--exclude_dir\fP and \fB--include_dir\fP options. The pattern is a PCRE regular expression, and is matched against the final component of the file name (not the entire path). If a file name matches both \fB--include\fP and \fB--exclude\fP, it is excluded. There is no short form for this option. .TP \fB--exclude_dir\fP=\fIpattern\fP When \fBpcregrep\fP is searching the contents of a directory as a consequence of the \fB-r\fP (recursive search) option, any subdirectories whose names match the pattern are excluded. (Note that the \fP--exclude\fP option does not affect subdirectories.) The pattern is a PCRE regular expression, and is matched against the final component of the name (not the entire path). If a subdirectory name matches both \fB--include_dir\fP and \fB--exclude_dir\fP, it is excluded. There is no short form for this option. .TP \fB-F\fP, \fB--fixed-strings\fP Interpret each pattern as a list of fixed strings, separated by newlines, instead of as a regular expression. The \fB-w\fP (match as a word) and \fB-x\fP (match whole line) options can be used with \fB-F\fP. They apply to each of the fixed strings. A line is selected if any of the fixed strings are found in it (subject to \fB-w\fP or \fB-x\fP, if present). .TP \fB-f\fP \fIfilename\fP, \fB--file=\fP\fIfilename\fP Read a number of patterns from the file, one per line, and match them against each line of input. A data line is output if any of the patterns match it. The filename can be given as "-" to refer to the standard input. When \fB-f\fP is used, patterns specified on the command line using \fB-e\fP may also be present; they are tested before the file's patterns. However, no other pattern is taken from the command line; all arguments are treated as file names. There is an overall maximum of 100 patterns. Trailing white space is removed from each line, and blank lines are ignored. An empty file contains no patterns and therefore matches nothing. See also the comments about multiple patterns versus a single pattern with alternatives in the description of \fB-e\fP above. .TP \fB--file-offsets\fP Instead of showing lines or parts of lines that match, show each match as an offset from the start of the file and a length, separated by a comma. In this mode, no context is shown. That is, the \fB-A\fP, \fB-B\fP, and \fB-C\fP options are ignored. If there is more than one match in a line, each of them is shown separately. This option is mutually exclusive with \fB--line-offsets\fP and \fB--only-matching\fP. .TP \fB-H\fP, \fB--with-filename\fP Force the inclusion of the filename at the start of output lines when searching a single file. By default, the filename is not shown in this case. For matching lines, the filename is followed by a colon; for context lines, a hyphen separator is used. If a line number is also being output, it follows the file name. .TP \fB-h\fP, \fB--no-filename\fP Suppress the output filenames when searching multiple files. By default, filenames are shown when multiple files are searched. For matching lines, the filename is followed by a colon; for context lines, a hyphen separator is used. If a line number is also being output, it follows the file name. .TP \fB--help\fP Output a help message, giving brief details of the command options and file type support, and then exit. .TP \fB-i\fP, \fB--ignore-case\fP Ignore upper/lower case distinctions during comparisons. .TP \fB--include\fP=\fIpattern\fP When \fBpcregrep\fP is searching the files in a directory as a consequence of the \fB-r\fP (recursive search) option, only those regular files whose names match the pattern are included. Subdirectories are always included and searched recursively, subject to the \fP--include_dir\fP and \fB--exclude_dir\fP options. The pattern is a PCRE regular expression, and is matched against the final component of the file name (not the entire path). If a file name matches both \fB--include\fP and \fB--exclude\fP, it is excluded. There is no short form for this option. .TP \fB--include_dir\fP=\fIpattern\fP When \fBpcregrep\fP is searching the contents of a directory as a consequence of the \fB-r\fP (recursive search) option, only those subdirectories whose names match the pattern are included. (Note that the \fB--include\fP option does not affect subdirectories.) The pattern is a PCRE regular expression, and is matched against the final component of the name (not the entire path). If a subdirectory name matches both \fB--include_dir\fP and \fB--exclude_dir\fP, it is excluded. There is no short form for this option. .TP \fB-L\fP, \fB--files-without-match\fP Instead of outputting lines from the files, just output the names of the files that do not contain any lines that would have been output. Each file name is output once, on a separate line. .TP \fB-l\fP, \fB--files-with-matches\fP Instead of outputting lines from the files, just output the names of the files containing lines that would have been output. Each file name is output once, on a separate line. Searching normally stops as soon as a matching line is found in a file. However, if the \fB-c\fP (count) option is also used, matching continues in order to obtain the correct count, and those files that have at least one match are listed along with their counts. Using this option with \fB-c\fP is a way of suppressing the listing of files with no matches. .TP \fB--label\fP=\fIname\fP This option supplies a name to be used for the standard input when file names are being output. If not supplied, "(standard input)" is used. There is no short form for this option. .TP \fB--line-offsets\fP Instead of showing lines or parts of lines that match, show each match as a line number, the offset from the start of the line, and a length. The line number is terminated by a colon (as usual; see the \fB-n\fP option), and the offset and length are separated by a comma. In this mode, no context is shown. That is, the \fB-A\fP, \fB-B\fP, and \fB-C\fP options are ignored. If there is more than one match in a line, each of them is shown separately. This option is mutually exclusive with \fB--file-offsets\fP and \fB--only-matching\fP. .TP \fB--locale\fP=\fIlocale-name\fP This option specifies a locale to be used for pattern matching. It overrides the value in the \fBLC_ALL\fP or \fBLC_CTYPE\fP environment variables. If no locale is specified, the PCRE library's default (usually the "C" locale) is used. There is no short form for this option. .TP \fB-M\fP, \fB--multiline\fP Allow patterns to match more than one line. When this option is given, patterns may usefully contain literal newline characters and internal occurrences of ^ and $ characters. The output for any one match may consist of more than one line. When this option is set, the PCRE library is called in "multiline" mode. There is a limit to the number of lines that can be matched, imposed by the way that \fBpcregrep\fP buffers the input file as it scans it. However, \fBpcregrep\fP ensures that at least 8K characters or the rest of the document (whichever is the shorter) are available for forward matching, and similarly the previous 8K characters (or all the previous characters, if fewer than 8K) are guaranteed to be available for lookbehind assertions. .TP \fB-N\fP \fInewline-type\fP, \fB--newline=\fP\fInewline-type\fP The PCRE library supports five different conventions for indicating the ends of lines. They are the single-character sequences CR (carriage return) and LF (linefeed), the two-character sequence CRLF, an "anycrlf" convention, which recognizes any of the preceding three types, and an "any" convention, in which any Unicode line ending sequence is assumed to end a line. The Unicode sequences are the three just mentioned, plus VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS (paragraph separator, U+2029). .sp When the PCRE library is built, a default line-ending sequence is specified. This is normally the standard sequence for the operating system. Unless otherwise specified by this option, \fBpcregrep\fP uses the library's default. The possible values for this option are CR, LF, CRLF, ANYCRLF, or ANY. This makes it possible to use \fBpcregrep\fP on files that have come from other environments without having to modify their line endings. If the data that is being scanned does not agree with the convention set by this option, \fBpcregrep\fP may behave in strange ways. .TP \fB-n\fP, \fB--line-number\fP Precede each output line by its line number in the file, followed by a colon for matching lines or a hyphen for context lines. If the filename is also being output, it precedes the line number. This option is forced if \fB--line-offsets\fP is used. .TP \fB-o\fP, \fB--only-matching\fP Show only the part of the line that matched a pattern. In this mode, no context is shown. That is, the \fB-A\fP, \fB-B\fP, and \fB-C\fP options are ignored. If there is more than one match in a line, each of them is shown separately. If \fB-o\fP is combined with \fB-v\fP (invert the sense of the match to find non-matching lines), no output is generated, but the return code is set appropriately. This option is mutually exclusive with \fB--file-offsets\fP and \fB--line-offsets\fP. .TP \fB-q\fP, \fB--quiet\fP Work quietly, that is, display nothing except error messages. The exit status indicates whether or not any matches were found. .TP \fB-r\fP, \fB--recursive\fP If any given path is a directory, recursively scan the files it contains, taking note of any \fB--include\fP and \fB--exclude\fP settings. By default, a directory is read as a normal file; in some operating systems this gives an immediate end-of-file. This option is a shorthand for setting the \fB-d\fP option to "recurse". .TP \fB-s\fP, \fB--no-messages\fP Suppress error messages about non-existent or unreadable files. Such files are quietly skipped. However, the return code is still 2, even if matches were found in other files. .TP \fB-u\fP, \fB--utf-8\fP Operate in UTF-8 mode. This option is available only if PCRE has been compiled with UTF-8 support. Both patterns and subject lines must be valid strings of UTF-8 characters. .TP \fB-V\fP, \fB--version\fP Write the version numbers of \fBpcregrep\fP and the PCRE library that is being used to the standard error stream. .TP \fB-v\fP, \fB--invert-match\fP Invert the sense of the match, so that lines which do \fInot\fP match any of the patterns are the ones that are found. .TP \fB-w\fP, \fB--word-regex\fP, \fB--word-regexp\fP Force the patterns to match only whole words. This is equivalent to having \eb at the start and end of the pattern. .TP \fB-x\fP, \fB--line-regex\fP, \fB--line-regexp\fP Force the patterns to be anchored (each must start matching at the beginning of a line) and in addition, require them to match entire lines. This is equivalent to having ^ and $ characters at the start and end of each alternative branch in every pattern. . . .SH "ENVIRONMENT VARIABLES" .rs .sp The environment variables \fBLC_ALL\fP and \fBLC_CTYPE\fP are examined, in that order, for a locale. The first one that is set is used. This can be overridden by the \fB--locale\fP option. If no locale is set, the PCRE library's default (usually the "C" locale) is used. . . .SH "NEWLINES" .rs .sp The \fB-N\fP (\fB--newline\fP) option allows \fBpcregrep\fP to scan files with different newline conventions from the default. However, the setting of this option does not affect the way in which \fBpcregrep\fP writes information to the standard error and output streams. It uses the string "\en" in C \fBprintf()\fP calls to indicate newlines, relying on the C I/O library to convert this to an appropriate sequence if the output is sent to a file. . . .SH "OPTIONS COMPATIBILITY" .rs .sp The majority of short and long forms of \fBpcregrep\fP's options are the same as in the GNU \fBgrep\fP program. Any long option of the form \fB--xxx-regexp\fP (GNU terminology) is also available as \fB--xxx-regex\fP (PCRE terminology). However, the \fB--locale\fP, \fB-M\fP, \fB--multiline\fP, \fB-u\fP, and \fB--utf-8\fP options are specific to \fBpcregrep\fP. If both the \fB-c\fP and \fB-l\fP options are given, GNU grep lists only file names, without counts, but \fBpcregrep\fP gives the counts. . . .SH "OPTIONS WITH DATA" .rs .sp There are four different ways in which an option with data can be specified. If a short form option is used, the data may follow immediately, or in the next command line item. For example: .sp -f/some/file -f /some/file .sp If a long form option is used, the data may appear in the same command line item, separated by an equals character, or (with one exception) it may appear in the next command line item. For example: .sp --file=/some/file --file /some/file .sp Note, however, that if you want to supply a file name beginning with ~ as data in a shell command, and have the shell expand ~ to a home directory, you must separate the file name from the option, because the shell does not treat ~ specially unless it is at the start of an item. .P The exception to the above is the \fB--colour\fP (or \fB--color\fP) option, for which the data is optional. If this option does have data, it must be given in the first form, using an equals character. Otherwise it will be assumed that it has no data. . . .SH "MATCHING ERRORS" .rs .sp It is possible to supply a regular expression that takes a very long time to fail to match certain lines. Such patterns normally involve nested indefinite repeats, for example: (a+)*\ed when matched against a line of a's with no final digit. The PCRE matching function has a resource limit that causes it to abort in these circumstances. If this happens, \fBpcregrep\fP outputs an error message and the line that caused the problem to the standard error stream. If there are more than 20 such errors, \fBpcregrep\fP gives up. . . .SH DIAGNOSTICS .rs .sp Exit status is 0 if any matches were found, 1 if no matches were found, and 2 for syntax errors and non-existent or inacessible files (even if matches were found in other files) or too many matching errors. Using the \fB-s\fP option to suppress error messages about inaccessble files does not affect the return code. . . .SH "SEE ALSO" .rs .sp \fBpcrepattern\fP(3), \fBpcretest\fP(1). . . .SH AUTHOR .rs .sp .nf Philip Hazel University Computing Service Cambridge CB2 3QH, England. .fi . . .SH REVISION .rs .sp .nf Last updated: 13 September 2009 Copyright (c) 1997-2009 University of Cambridge. .fi usr/share/man/man1/pcre-config.1000064400000003555152342605160012360 0ustar00.TH PCRE-CONFIG 1 .SH NAME pcre-config - program to return PCRE configuration .SH SYNOPSIS .rs .sp .B pcre-config [--prefix] [--exec-prefix] [--version] [--libs] .ti +5n .B [--libs-posix] [--cflags] [--cflags-posix] . . .SH DESCRIPTION .rs .sp \fBpcre-config\fP returns the configuration of the installed PCRE libraries and the options required to compile a program to use them. . . .SH OPTIONS .rs .TP 10 \fB--prefix\fP Writes the directory prefix used in the PCRE installation for architecture independent files (\fI/usr\fP on many systems, \fI/usr/local\fP on some systems) to the standard output. .TP 10 \fB--exec-prefix\fP Writes the directory prefix used in the PCRE installation for architecture dependent files (normally the same as \fB--prefix\fP) to the standard output. .TP 10 \fB--version\fP Writes the version number of the installed PCRE libraries to the standard output. .TP 10 \fB--libs\fP Writes to the standard output the command line options required to link with PCRE (\fB-lpcre\fP on many systems). .TP 10 \fB--libs-posix\fP Writes to the standard output the command line options required to link with the PCRE posix emulation library (\fB-lpcreposix\fP \fB-lpcre\fP on many systems). .TP 10 \fB--cflags\fP Writes to the standard output the command line options required to compile files that use PCRE (this may include some \fB-I\fP options, but is blank on many systems). .TP 10 \fB--cflags-posix\fP Writes to the standard output the command line options required to compile files that use the PCRE posix emulation library (this may include some \fB-I\fP options, but is blank on many systems). . . .SH "SEE ALSO" .rs .sp \fBpcre(3)\fP . . .SH AUTHOR .rs .sp This manual page was originally written by Mark Baker for the Debian GNU/Linux system. It has been slightly revised as a generic PCRE man page. . . .SH REVISION .rs .sp .nf Last updated: 18 April 2007 .fi usr/share/doc/alt-pcre802/NEWS000064400000043674152342605160011706 0ustar00News about PCRE releases ------------------------ Release 8.02 19-Mar-2010 ------------------------ Another bug-fix release. Release 8.01 19-Jan-2010 ------------------------ This is a bug-fix release. Several bugs in the code itself and some bugs and infelicities in the build system have been fixed. Release 8.00 19-Oct-09 ---------------------- Bugs have been fixed in the library and in pcregrep. There are also some enhancements. Restrictions on patterns used for partial matching have been removed, extra information is given for partial matches, the partial matching process has been improved, and an option to make a partial match override a full match is available. The "study" process has been enhanced by finding a lower bound matching length. Groups with duplicate numbers may now have duplicated names without the use of PCRE_DUPNAMES. However, they may not have different names. The documentation has been revised to reflect these changes. The version number has been expanded to 3 digits as it is clear that the rate of change is not slowing down. Release 7.9 11-Apr-09 --------------------- Mostly bugfixes and tidies with just a couple of minor functional additions. Release 7.8 05-Sep-08 --------------------- More bug fixes, plus a performance improvement in Unicode character property lookup. Release 7.7 07-May-08 --------------------- This is once again mainly a bug-fix release, but there are a couple of new features. Release 7.6 28-Jan-08 --------------------- The main reason for having this release so soon after 7.5 is because it fixes a potential buffer overflow problem in pcre_compile() when run in UTF-8 mode. In addition, the CMake configuration files have been brought up to date. Release 7.5 10-Jan-08 --------------------- This is mainly a bug-fix release. However the ability to link pcregrep with libz or libbz2 and the ability to link pcretest with libreadline have been added. Also the --line-offsets and --file-offsets options were added to pcregrep. Release 7.4 21-Sep-07 --------------------- The only change of specification is the addition of options to control whether \R matches any Unicode line ending (the default) or just CR, LF, and CRLF. Otherwise, the changes are bug fixes and a refactoring to reduce the number of relocations needed in a shared library. There have also been some documentation updates, in particular, some more information about using CMake to build PCRE has been added to the NON-UNIX-USE file. Release 7.3 28-Aug-07 --------------------- Most changes are bug fixes. Some that are not: 1. There is some support for Perl 5.10's experimental "backtracking control verbs" such as (*PRUNE). 2. UTF-8 checking is now as per RFC 3629 instead of RFC 2279; this is more restrictive in the strings it accepts. 3. Checking for potential integer overflow has been made more dynamic, and as a consequence there is no longer a hard limit on the size of a subpattern that has a limited repeat count. 4. When CRLF is a valid line-ending sequence, pcre_exec() and pcre_dfa_exec() no longer advance by two characters instead of one when an unanchored match fails at CRLF if there are explicit CR or LF matches within the pattern. This gets rid of some anomalous effects that previously occurred. 5. Some PCRE-specific settings for varying the newline options at the start of a pattern have been added. Release 7.2 19-Jun-07 --------------------- WARNING: saved patterns that were compiled by earlier versions of PCRE must be recompiled for use with 7.2 (necessitated by the addition of \K, \h, \H, \v, and \V). Correction to the notes for 7.1: the note about shared libraries for Windows is wrong. Previously, three libraries were built, but each could function independently. For example, the pcreposix library also included all the functions from the basic pcre library. The change is that the three libraries are no longer independent. They are like the Unix libraries. To use the pcreposix functions, for example, you need to link with both the pcreposix and the basic pcre library. Some more features from Perl 5.10 have been added: (?-n) and (?+n) relative references for recursion and subroutines. (?(-n) and (?(+n) relative references as conditions. \k{name} and \g{name} are synonyms for \k. \K to reset the start of the matched string; for example, (foo)\Kbar matches bar preceded by foo, but only sets bar as the matched string. (?| introduces a group where the capturing parentheses in each alternative start from the same number; for example, (?|(abc)|(xyz)) sets capturing parentheses number 1 in both cases. \h, \H, \v, \V match horizontal and vertical whitespace, respectively. Release 7.1 24-Apr-07 --------------------- There is only one new feature in this release: a linebreak setting of PCRE_NEWLINE_ANYCRLF. It is a cut-down version of PCRE_NEWLINE_ANY, which recognizes only CRLF, CR, and LF as linebreaks. A few bugs are fixed (see ChangeLog for details), but the major change is a complete re-implementation of the build system. This now has full Autotools support and so is now "standard" in some sense. It should help with compiling PCRE in a wide variety of environments. NOTE: when building shared libraries for Windows, three dlls are now built, called libpcre, libpcreposix, and libpcrecpp. Previously, everything was included in a single dll. Another important change is that the dftables auxiliary program is no longer compiled and run at "make" time by default. Instead, a default set of character tables (assuming ASCII coding) is used. If you want to use dftables to generate the character tables as previously, add --enable-rebuild-chartables to the "configure" command. You must do this if you are compiling PCRE to run on a system that uses EBCDIC code. There is a discussion about character tables in the README file. The default is not to use dftables so that that there is no problem when cross-compiling. Release 7.0 19-Dec-06 --------------------- This release has a new major number because there have been some internal upheavals to facilitate the addition of new optimizations and other facilities, and to make subsequent maintenance and extension easier. Compilation is likely to be a bit slower, but there should be no major effect on runtime performance. Previously compiled patterns are NOT upwards compatible with this release. If you have saved compiled patterns from a previous release, you will have to re-compile them. Important changes that are visible to users are: 1. The Unicode property tables have been updated to Unicode 5.0.0, which adds some more scripts. 2. The option PCRE_NEWLINE_ANY causes PCRE to recognize any Unicode newline sequence as a newline. 3. The \R escape matches a single Unicode newline sequence as a single unit. 4. New features that will appear in Perl 5.10 are now in PCRE. These include alternative Perl syntax for named parentheses, and Perl syntax for recursion. 5. The C++ wrapper interface has been extended by the addition of a QuoteMeta function and the ability to allow copy construction and assignment. For a complete list of changes, see the ChangeLog file. Release 6.7 04-Jul-06 --------------------- The main additions to this release are the ability to use the same name for multiple sets of parentheses, and support for CRLF line endings in both the library and pcregrep (and in pcretest for testing). Thanks to Ian Taylor, the stack usage for many kinds of pattern has been significantly reduced for certain subject strings. Release 6.5 01-Feb-06 --------------------- Important changes in this release: 1. A number of new features have been added to pcregrep. 2. The Unicode property tables have been updated to Unicode 4.1.0, and the supported properties have been extended with script names such as "Arabic", and the derived properties "Any" and "L&". This has necessitated a change to the interal format of compiled patterns. Any saved compiled patterns that use \p or \P must be recompiled. 3. The specification of recursion in patterns has been changed so that all recursive subpatterns are automatically treated as atomic groups. Thus, for example, (?R) is treated as if it were (?>(?R)). This is necessary because otherwise there are situations where recursion does not work. See the ChangeLog for a complete list of changes, which include a number of bug fixes and tidies. Release 6.0 07-Jun-05 --------------------- The release number has been increased to 6.0 because of the addition of several major new pieces of functionality. A new function, pcre_dfa_exec(), which implements pattern matching using a DFA algorithm, has been added. This has a number of advantages for certain cases, though it does run more slowly, and lacks the ability to capture substrings. On the other hand, it does find all matches, not just the first, and it works better for partial matching. The pcrematching man page discusses the differences. The pcretest program has been enhanced so that it can make use of the new pcre_dfa_exec() matching function and the extra features it provides. The distribution now includes a C++ wrapper library. This is built automatically if a C++ compiler is found. The pcrecpp man page discusses this interface. The code itself has been re-organized into many more files, one for each function, so it no longer requires everything to be linked in when static linkage is used. As a consequence, some internal functions have had to have their names exposed. These functions all have names starting with _pcre_. They are undocumented, and are not intended for use by outside callers. The pcregrep program has been enhanced with new functionality such as multiline-matching and options for output more matching context. See the ChangeLog for a complete list of changes to the library and the utility programs. Release 5.0 13-Sep-04 --------------------- The licence under which PCRE is released has been changed to the more conventional "BSD" licence. In the code, some bugs have been fixed, and there are also some major changes in this release (which is why I've increased the number to 5.0). Some changes are internal rearrangements, and some provide a number of new facilities. The new features are: 1. There's an "automatic callout" feature that inserts callouts before every item in the regex, and there's a new callout field that gives the position in the pattern - useful for debugging and tracing. 2. The extra_data structure can now be used to pass in a set of character tables at exec time. This is useful if compiled regex are saved and re-used at a later time when the tables may not be at the same address. If the default internal tables are used, the pointer saved with the compiled pattern is now set to NULL, which means that you don't need to do anything special unless you are using custom tables. 3. It is possible, with some restrictions on the content of the regex, to request "partial" matching. A special return code is given if all of the subject string matched part of the regex. This could be useful for testing an input field as it is being typed. 4. There is now some optional support for Unicode character properties, which means that the patterns items such as \p{Lu} and \X can now be used. Only the general category properties are supported. If PCRE is compiled with this support, an additional 90K data structure is include, which increases the size of the library dramatically. 5. There is support for saving compiled patterns and re-using them later. 6. There is support for running regular expressions that were compiled on a different host with the opposite endianness. 7. The pcretest program has been extended to accommodate the new features. The main internal rearrangement is that sequences of literal characters are no longer handled as strings. Instead, each character is handled on its own. This makes some UTF-8 handling easier, and makes the support of partial matching possible. Compiled patterns containing long literal strings will be larger as a result of this change; I hope that performance will not be much affected. Release 4.5 01-Dec-03 --------------------- Again mainly a bug-fix and tidying release, with only a couple of new features: 1. It's possible now to compile PCRE so that it does not use recursive function calls when matching. Instead it gets memory from the heap. This slows things down, but may be necessary on systems with limited stacks. 2. UTF-8 string checking has been tightened to reject overlong sequences and to check that a starting offset points to the start of a character. Failure of the latter returns a new error code: PCRE_ERROR_BADUTF8_OFFSET. 3. PCRE can now be compiled for systems that use EBCDIC code. Release 4.4 21-Aug-03 --------------------- This is mainly a bug-fix and tidying release. The only new feature is that PCRE checks UTF-8 strings for validity by default. There is an option to suppress this, just in case anybody wants that teeny extra bit of performance. Releases 4.1 - 4.3 ------------------ Sorry, I forgot about updating the NEWS file for these releases. Please take a look at ChangeLog. Release 4.0 17-Feb-03 --------------------- There have been a lot of changes for the 4.0 release, adding additional functionality and mending bugs. Below is a list of the highlights of the new functionality. For full details of these features, please consult the documentation. For a complete list of changes, see the ChangeLog file. 1. Support for Perl's \Q...\E escapes. 2. "Possessive quantifiers" ?+, *+, ++, and {,}+ which come from Sun's Java package. They provide some syntactic sugar for simple cases of "atomic grouping". 3. Support for the \G assertion. It is true when the current matching position is at the start point of the match. 4. A new feature that provides some of the functionality that Perl provides with (?{...}). The facility is termed a "callout". The way it is done in PCRE is for the caller to provide an optional function, by setting pcre_callout to its entry point. To get the function called, the regex must include (?C) at appropriate points. 5. Support for recursive calls to individual subpatterns. This makes it really easy to get totally confused. 6. Support for named subpatterns. The Python syntax (?P...) is used to name a group. 7. Several extensions to UTF-8 support; it is now fairly complete. There is an option for pcregrep to make it operate in UTF-8 mode. 8. The single man page has been split into a number of separate man pages. These also give rise to individual HTML pages which are put in a separate directory. There is an index.html page that lists them all. Some hyperlinking between the pages has been installed. Release 3.5 15-Aug-01 --------------------- 1. The configuring system has been upgraded to use later versions of autoconf and libtool. By default it builds both a shared and a static library if the OS supports it. You can use --disable-shared or --disable-static on the configure command if you want only one of them. 2. The pcretest utility is now installed along with pcregrep because it is useful for users (to test regexs) and by doing this, it automatically gets relinked by libtool. The documentation has been turned into a man page, so there are now .1, .txt, and .html versions in /doc. 3. Upgrades to pcregrep: (i) Added long-form option names like gnu grep. (ii) Added --help to list all options with an explanatory phrase. (iii) Added -r, --recursive to recurse into sub-directories. (iv) Added -f, --file to read patterns from a file. 4. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure script, to force use of CR or LF instead of \n in the source. On non-Unix systems, the value can be set in config.h. 5. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an absolute limit. Changed the text of the error message to make this clear, and likewise updated the man page. 6. The limit of 99 on the number of capturing subpatterns has been removed. The new limit is 65535, which I hope will not be a "real" limit. Release 3.3 01-Aug-00 --------------------- There is some support for UTF-8 character strings. This is incomplete and experimental. The documentation describes what is and what is not implemented. Otherwise, this is just a bug-fixing release. Release 3.0 01-Feb-00 --------------------- 1. A "configure" script is now used to configure PCRE for Unix systems. It builds a Makefile, a config.h file, and the pcre-config script. 2. PCRE is built as a shared library by default. 3. There is support for POSIX classes such as [:alpha:]. 5. There is an experimental recursion feature. ---------------------------------------------------------------------------- IMPORTANT FOR THOSE UPGRADING FROM VERSIONS BEFORE 2.00 Please note that there has been a change in the API such that a larger ovector is required at matching time, to provide some additional workspace. The new man page has details. This change was necessary in order to support some of the new functionality in Perl 5.005. IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.00 Another (I hope this is the last!) change has been made to the API for the pcre_compile() function. An additional argument has been added to make it possible to pass over a pointer to character tables built in the current locale by pcre_maketables(). To use the default tables, this new arguement should be passed as NULL. IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.05 Yet another (and again I hope this really is the last) change has been made to the API for the pcre_exec() function. An additional argument has been added to make it possible to start the match other than at the start of the subject string. This is important if there are lookbehinds. The new man page has the details, but you just want to convert existing programs, all you need to do is to stick in a new fifth argument to pcre_exec(), with a value of zero. For example, change pcre_exec(pattern, extra, subject, length, options, ovec, ovecsize) to pcre_exec(pattern, extra, subject, length, 0, options, ovec, ovecsize) **** usr/share/doc/alt-pcre802/ChangeLog000064400000550627152342605160012762 0ustar00ChangeLog for PCRE ------------------ Version 8.02 19-Mar-2010 ------------------------ 1. The Unicode data tables have been updated to Unicode 5.2.0. 2. Added the option --libs-cpp to pcre-config, but only when C++ support is configured. 3. Updated the licensing terms in the pcregexp.pas file, as agreed with the original author of that file, following a query about its status. 4. On systems that do not have stdint.h (e.g. Solaris), check for and include inttypes.h instead. This fixes a bug that was introduced by change 8.01/8. 5. A pattern such as (?&t)*+(?(DEFINE)(?.)) which has a possessive quantifier applied to a forward-referencing subroutine call, could compile incorrect code or give the error "internal error: previously-checked referenced subpattern not found". 6. Both MS Visual Studio and Symbian OS have problems with initializing variables to point to external functions. For these systems, therefore, pcre_malloc etc. are now initialized to local functions that call the relevant global functions. 7. There were two entries missing in the vectors called coptable and poptable in pcre_dfa_exec.c. This could lead to memory accesses outsize the vectors. I've fixed the data, and added a kludgy way of testing at compile time that the lengths are correct (equal to the number of opcodes). 8. Following on from 7, I added a similar kludge to check the length of the eint vector in pcreposix.c. 9. Error texts for pcre_compile() are held as one long string to avoid too much relocation at load time. To find a text, the string is searched, counting zeros. There was no check for running off the end of the string, which could happen if a new error number was added without updating the string. 10. \K gave a compile-time error if it appeared in a lookbehind assersion. 11. \K was not working if it appeared in an atomic group or in a group that was called as a "subroutine", or in an assertion. Perl 5.11 documents that \K is "not well defined" if used in an assertion. PCRE now accepts it if the assertion is positive, but not if it is negative. 12. Change 11 fortuitously reduced the size of the stack frame used in the "match()" function of pcre_exec.c by one pointer. Forthcoming implementation of support for (*MARK) will need an extra pointer on the stack; I have reserved it now, so that the stack frame size does not decrease. 13. A pattern such as (?P(?P0)|(?P>L2)(?P>L1)) in which the only other item in branch that calls a recursion is a subroutine call - as in the second branch in the above example - was incorrectly given the compile- time error "recursive call could loop indefinitely" because pcre_compile() was not correctly checking the subroutine for matching a non-empty string. 14. The checks for overrunning compiling workspace could trigger after an overrun had occurred. This is a "should never occur" error, but it can be triggered by pathological patterns such as hundreds of nested parentheses. The checks now trigger 100 bytes before the end of the workspace. 15. Fix typo in configure.ac: "srtoq" should be "strtoq". Version 8.01 19-Jan-2010 ------------------------ 1. If a pattern contained a conditional subpattern with only one branch (in particular, this includes all (*DEFINE) patterns), a call to pcre_study() computed the wrong minimum data length (which is of course zero for such subpatterns). This could cause incorrect "no match" results. 2. For patterns such as (?i)a(?-i)b|c where an option setting at the start of the pattern is reset in the first branch, pcre_compile() failed with "internal error: code overflow at offset...". This happened only when the reset was to the original external option setting. (An optimization abstracts leading options settings into an external setting, which was the cause of this.) 3. A pattern such as ^(?!a(*SKIP)b) where a negative assertion contained one of the verbs SKIP, PRUNE, or COMMIT, did not work correctly. When the assertion pattern did not match (meaning that the assertion was true), it was incorrectly treated as false if the SKIP had been reached during the matching. This also applied to assertions used as conditions. 4. If an item that is not supported by pcre_dfa_exec() was encountered in an assertion subpattern, including such a pattern used as a condition, unpredictable results occurred, instead of the error return PCRE_ERROR_DFA_UITEM. 5. The C++ GlobalReplace function was not working like Perl for the special situation when an empty string is matched. It now does the fancy magic stuff that is necessary. 6. In pcre_internal.h, obsolete includes to setjmp.h and stdarg.h have been removed. (These were left over from very, very early versions of PCRE.) 7. Some cosmetic changes to the code to make life easier when compiling it as part of something else: (a) Change DEBUG to PCRE_DEBUG. (b) In pcre_compile(), rename the member of the "branch_chain" structure called "current" as "current_branch", to prevent a collision with the Linux macro when compiled as a kernel module. (c) In pcre_study(), rename the function set_bit() as set_table_bit(), to prevent a collision with the Linux macro when compiled as a kernel module. 8. In pcre_compile() there are some checks for integer overflows that used to cast potentially large values to (double). This has been changed to that when building, a check for int64_t is made, and if it is found, it is used instead, thus avoiding the use of floating point arithmetic. (There is no other use of FP in PCRE.) If int64_t is not found, the fallback is to double. 9. Added two casts to avoid signed/unsigned warnings from VS Studio Express 2005 (difference between two addresses compared to an unsigned value). 10. Change the standard AC_CHECK_LIB test for libbz2 in configure.ac to a custom one, because of the following reported problem in Windows: - libbz2 uses the Pascal calling convention (WINAPI) for the functions under Win32. - The standard autoconf AC_CHECK_LIB fails to include "bzlib.h", therefore missing the function definition. - The compiler thus generates a "C" signature for the test function. - The linker fails to find the "C" function. - PCRE fails to configure if asked to do so against libbz2. 11. When running libtoolize from libtool-2.2.6b as part of autogen.sh, these messages were output: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.ac and rerunning libtoolize, to keep the correct libtool macros in-tree. Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. I have done both of these things. 12. Although pcre_dfa_exec() does not use nearly as much stack as pcre_exec() most of the time, it *can* run out if it is given a pattern that contains a runaway infinite recursion. I updated the discussion in the pcrestack man page. 13. Now that we have gone to the x.xx style of version numbers, the minor version may start with zero. Using 08 or 09 is a bad idea because users might check the value of PCRE_MINOR in their code, and 08 or 09 may be interpreted as invalid octal numbers. I've updated the previous comment in configure.ac, and also added a check that gives an error if 08 or 09 are used. 14. Change 8.00/11 was not quite complete: code had been accidentally omitted, causing partial matching to fail when the end of the subject matched \W in a UTF-8 pattern where \W was quantified with a minimum of 3. 15. There were some discrepancies between the declarations in pcre_internal.h of _pcre_is_newline(), _pcre_was_newline(), and _pcre_valid_utf8() and their definitions. The declarations used "const uschar *" and the definitions used USPTR. Even though USPTR is normally defined as "const unsigned char *" (and uschar is typedeffed as "unsigned char"), it was reported that: "This difference in casting confuses some C++ compilers, for example, SunCC recognizes above declarations as different functions and generates broken code for hbpcre." I have changed the declarations to use USPTR. 16. GNU libtool is named differently on some systems. The autogen.sh script now tries several variants such as glibtoolize (MacOSX) and libtoolize1x (FreeBSD). 17. Applied Craig's patch that fixes an HP aCC compile error in pcre 8.00 (strtoXX undefined when compiling pcrecpp.cc). The patch contains this comment: "Figure out how to create a longlong from a string: strtoll and equivalent. It's not enough to call AC_CHECK_FUNCS: hpux has a strtoll, for instance, but it only takes 2 args instead of 3!" 18. A subtle bug concerned with back references has been fixed by a change of specification, with a corresponding code fix. A pattern such as ^(xa|=?\1a)+$ which contains a back reference inside the group to which it refers, was giving matches when it shouldn't. For example, xa=xaaa would match that pattern. Interestingly, Perl (at least up to 5.11.3) has the same bug. Such groups have to be quantified to be useful, or contained inside another quantified group. (If there's no repetition, the reference can never match.) The problem arises because, having left the group and moved on to the rest of the pattern, a later failure that backtracks into the group uses the captured value from the final iteration of the group rather than the correct earlier one. I have fixed this in PCRE by forcing any group that contains a reference to itself to be an atomic group; that is, there cannot be any backtracking into it once it has completed. This is similar to recursive and subroutine calls. Version 8.00 19-Oct-09 ---------------------- 1. The table for translating pcre_compile() error codes into POSIX error codes was out-of-date, and there was no check on the pcre_compile() error code being within the table. This could lead to an OK return being given in error. 2. Changed the call to open a subject file in pcregrep from fopen(pathname, "r") to fopen(pathname, "rb"), which fixed a problem with some of the tests in a Windows environment. 3. The pcregrep --count option prints the count for each file even when it is zero, as does GNU grep. However, pcregrep was also printing all files when --files-with-matches was added. Now, when both options are given, it prints counts only for those files that have at least one match. (GNU grep just prints the file name in this circumstance, but including the count seems more useful - otherwise, why use --count?) Also ensured that the combination -clh just lists non-zero counts, with no names. 4. The long form of the pcregrep -F option was incorrectly implemented as --fixed_strings instead of --fixed-strings. This is an incompatible change, but it seems right to fix it, and I didn't think it was worth preserving the old behaviour. 5. The command line items --regex=pattern and --regexp=pattern were not recognized by pcregrep, which required --regex pattern or --regexp pattern (with a space rather than an '='). The man page documented the '=' forms, which are compatible with GNU grep; these now work. 6. No libpcreposix.pc file was created for pkg-config; there was just libpcre.pc and libpcrecpp.pc. The omission has been rectified. 7. Added #ifndef SUPPORT_UCP into the pcre_ucd.c module, to reduce its size when UCP support is not needed, by modifying the Python script that generates it from Unicode data files. This should not matter if the module is correctly used as a library, but I received one complaint about 50K of unwanted data. My guess is that the person linked everything into his program rather than using a library. Anyway, it does no harm. 8. A pattern such as /\x{123}{2,2}+/8 was incorrectly compiled; the trigger was a minimum greater than 1 for a wide character in a possessive repetition. The same bug could also affect patterns like /(\x{ff}{0,2})*/8 which had an unlimited repeat of a nested, fixed maximum repeat of a wide character. Chaos in the form of incorrect output or a compiling loop could result. 9. The restrictions on what a pattern can contain when partial matching is requested for pcre_exec() have been removed. All patterns can now be partially matched by this function. In addition, if there are at least two slots in the offset vector, the offset of the earliest inspected character for the match and the offset of the end of the subject are set in them when PCRE_ERROR_PARTIAL is returned. 10. Partial matching has been split into two forms: PCRE_PARTIAL_SOFT, which is synonymous with PCRE_PARTIAL, for backwards compatibility, and PCRE_PARTIAL_HARD, which causes a partial match to supersede a full match, and may be more useful for multi-segment matching. 11. Partial matching with pcre_exec() is now more intuitive. A partial match used to be given if ever the end of the subject was reached; now it is given only if matching could not proceed because another character was needed. This makes a difference in some odd cases such as Z(*FAIL) with the string "Z", which now yields "no match" instead of "partial match". In the case of pcre_dfa_exec(), "no match" is given if every matching path for the final character ended with (*FAIL). 12. Restarting a match using pcre_dfa_exec() after a partial match did not work if the pattern had a "must contain" character that was already found in the earlier partial match, unless partial matching was again requested. For example, with the pattern /dog.(body)?/, the "must contain" character is "g". If the first part-match was for the string "dog", restarting with "sbody" failed. This bug has been fixed. 13. The string returned by pcre_dfa_exec() after a partial match has been changed so that it starts at the first inspected character rather than the first character of the match. This makes a difference only if the pattern starts with a lookbehind assertion or \b or \B (\K is not supported by pcre_dfa_exec()). It's an incompatible change, but it makes the two matching functions compatible, and I think it's the right thing to do. 14. Added a pcredemo man page, created automatically from the pcredemo.c file, so that the demonstration program is easily available in environments where PCRE has not been installed from source. 15. Arranged to add -DPCRE_STATIC to cflags in libpcre.pc, libpcreposix.cp, libpcrecpp.pc and pcre-config when PCRE is not compiled as a shared library. 16. Added REG_UNGREEDY to the pcreposix interface, at the request of a user. It maps to PCRE_UNGREEDY. It is not, of course, POSIX-compatible, but it is not the first non-POSIX option to be added. Clearly some people find these options useful. 17. If a caller to the POSIX matching function regexec() passes a non-zero value for nmatch with a NULL value for pmatch, the value of nmatch is forced to zero. 18. RunGrepTest did not have a test for the availability of the -u option of the diff command, as RunTest does. It now checks in the same way as RunTest, and also checks for the -b option. 19. If an odd number of negated classes containing just a single character interposed, within parentheses, between a forward reference to a named subpattern and the definition of the subpattern, compilation crashed with an internal error, complaining that it could not find the referenced subpattern. An example of a crashing pattern is /(?&A)(([^m])(?))/. [The bug was that it was starting one character too far in when skipping over the character class, thus treating the ] as data rather than terminating the class. This meant it could skip too much.] 20. Added PCRE_NOTEMPTY_ATSTART in order to be able to correctly implement the /g option in pcretest when the pattern contains \K, which makes it possible to have an empty string match not at the start, even when the pattern is anchored. Updated pcretest and pcredemo to use this option. 21. If the maximum number of capturing subpatterns in a recursion was greater than the maximum at the outer level, the higher number was returned, but with unset values at the outer level. The correct (outer level) value is now given. 22. If (*ACCEPT) appeared inside capturing parentheses, previous releases of PCRE did not set those parentheses (unlike Perl). I have now found a way to make it do so. The string so far is captured, making this feature compatible with Perl. 23. The tests have been re-organized, adding tests 11 and 12, to make it possible to check the Perl 5.10 features against Perl 5.10. 24. Perl 5.10 allows subroutine calls in lookbehinds, as long as the subroutine pattern matches a fixed length string. PCRE did not allow this; now it does. Neither allows recursion. 25. I finally figured out how to implement a request to provide the minimum length of subject string that was needed in order to match a given pattern. (It was back references and recursion that I had previously got hung up on.) This code has now been added to pcre_study(); it finds a lower bound to the length of subject needed. It is not necessarily the greatest lower bound, but using it to avoid searching strings that are too short does give some useful speed-ups. The value is available to calling programs via pcre_fullinfo(). 26. While implementing 25, I discovered to my embarrassment that pcretest had not been passing the result of pcre_study() to pcre_dfa_exec(), so the study optimizations had never been tested with that matching function. Oops. What is worse, even when it was passed study data, there was a bug in pcre_dfa_exec() that meant it never actually used it. Double oops. There were also very few tests of studied patterns with pcre_dfa_exec(). 27. If (?| is used to create subpatterns with duplicate numbers, they are now allowed to have the same name, even if PCRE_DUPNAMES is not set. However, on the other side of the coin, they are no longer allowed to have different names, because these cannot be distinguished in PCRE, and this has caused confusion. (This is a difference from Perl.) 28. When duplicate subpattern names are present (necessarily with different numbers, as required by 27 above), and a test is made by name in a conditional pattern, either for a subpattern having been matched, or for recursion in such a pattern, all the associated numbered subpatterns are tested, and the overall condition is true if the condition is true for any one of them. This is the way Perl works, and is also more like the way testing by number works. Version 7.9 11-Apr-09 --------------------- 1. When building with support for bzlib/zlib (pcregrep) and/or readline (pcretest), all targets were linked against these libraries. This included libpcre, libpcreposix, and libpcrecpp, even though they do not use these libraries. This caused unwanted dependencies to be created. This problem has been fixed, and now only pcregrep is linked with bzlib/zlib and only pcretest is linked with readline. 2. The "typedef int BOOL" in pcre_internal.h that was included inside the "#ifndef FALSE" condition by an earlier change (probably 7.8/18) has been moved outside it again, because FALSE and TRUE are already defined in AIX, but BOOL is not. 3. The pcre_config() function was treating the PCRE_MATCH_LIMIT and PCRE_MATCH_LIMIT_RECURSION values as ints, when they should be long ints. 4. The pcregrep documentation said spaces were inserted as well as colons (or hyphens) following file names and line numbers when outputting matching lines. This is not true; no spaces are inserted. I have also clarified the wording for the --colour (or --color) option. 5. In pcregrep, when --colour was used with -o, the list of matching strings was not coloured; this is different to GNU grep, so I have changed it to be the same. 6. When --colo(u)r was used in pcregrep, only the first matching substring in each matching line was coloured. Now it goes on to look for further matches of any of the test patterns, which is the same behaviour as GNU grep. 7. A pattern that could match an empty string could cause pcregrep to loop; it doesn't make sense to accept an empty string match in pcregrep, so I have locked it out (using PCRE's PCRE_NOTEMPTY option). By experiment, this seems to be how GNU grep behaves. 8. The pattern (?(?=.*b)b|^) was incorrectly compiled as "match must be at start or after a newline", because the conditional assertion was not being correctly handled. The rule now is that both the assertion and what follows in the first alternative must satisfy the test. 9. If auto-callout was enabled in a pattern with a conditional group whose condition was an assertion, PCRE could crash during matching, both with pcre_exec() and pcre_dfa_exec(). 10. The PCRE_DOLLAR_ENDONLY option was not working when pcre_dfa_exec() was used for matching. 11. Unicode property support in character classes was not working for characters (bytes) greater than 127 when not in UTF-8 mode. 12. Added the -M command line option to pcretest. 14. Added the non-standard REG_NOTEMPTY option to the POSIX interface. 15. Added the PCRE_NO_START_OPTIMIZE match-time option. 16. Added comments and documentation about mis-use of no_arg in the C++ wrapper. 17. Implemented support for UTF-8 encoding in EBCDIC environments, a patch from Martin Jerabek that uses macro names for all relevant character and string constants. 18. Added to pcre_internal.h two configuration checks: (a) If both EBCDIC and SUPPORT_UTF8 are set, give an error; (b) If SUPPORT_UCP is set without SUPPORT_UTF8, define SUPPORT_UTF8. The "configure" script handles both of these, but not everybody uses configure. 19. A conditional group that had only one branch was not being correctly recognized as an item that could match an empty string. This meant that an enclosing group might also not be so recognized, causing infinite looping (and probably a segfault) for patterns such as ^"((?(?=[a])[^"])|b)*"$ with the subject "ab", where knowledge that the repeated group can match nothing is needed in order to break the loop. 20. If a pattern that was compiled with callouts was matched using pcre_dfa_ exec(), but without supplying a callout function, matching went wrong. 21. If PCRE_ERROR_MATCHLIMIT occurred during a recursion, there was a memory leak if the size of the offset vector was greater than 30. When the vector is smaller, the saved offsets during recursion go onto a local stack vector, but for larger vectors malloc() is used. It was failing to free when the recursion yielded PCRE_ERROR_MATCH_LIMIT (or any other "abnormal" error, in fact). 22. There was a missing #ifdef SUPPORT_UTF8 round one of the variables in the heapframe that is used only when UTF-8 support is enabled. This caused no problem, but was untidy. 23. Steven Van Ingelgem's patch to CMakeLists.txt to change the name CMAKE_BINARY_DIR to PROJECT_BINARY_DIR so that it works when PCRE is included within another project. 24. Steven Van Ingelgem's patches to add more options to the CMake support, slightly modified by me: (a) PCRE_BUILD_TESTS can be set OFF not to build the tests, including not building pcregrep. (b) PCRE_BUILD_PCREGREP can be see OFF not to build pcregrep, but only if PCRE_BUILD_TESTS is also set OFF, because the tests use pcregrep. 25. Forward references, both numeric and by name, in patterns that made use of duplicate group numbers, could behave incorrectly or give incorrect errors, because when scanning forward to find the reference group, PCRE was not taking into account the duplicate group numbers. A pattern such as ^X(?3)(a)(?|(b)|(q))(Y) is an example. 26. Changed a few more instances of "const unsigned char *" to USPTR, making the feature of a custom pointer more persuasive (as requested by a user). 27. Wrapped the definitions of fileno and isatty for Windows, which appear in pcretest.c, inside #ifndefs, because it seems they are sometimes already pre-defined. 28. Added support for (*UTF8) at the start of a pattern. 29. Arrange for flags added by the "release type" setting in CMake to be shown in the configuration summary. Version 7.8 05-Sep-08 --------------------- 1. Replaced UCP searching code with optimized version as implemented for Ad Muncher (http://www.admuncher.com/) by Peter Kankowski. This uses a two- stage table and inline lookup instead of a function, giving speed ups of 2 to 5 times on some simple patterns that I tested. Permission was given to distribute the MultiStage2.py script that generates the tables (it's not in the tarball, but is in the Subversion repository). 2. Updated the Unicode datatables to Unicode 5.1.0. This adds yet more scripts. 3. Change 12 for 7.7 introduced a bug in pcre_study() when a pattern contained a group with a zero qualifier. The result of the study could be incorrect, or the function might crash, depending on the pattern. 4. Caseless matching was not working for non-ASCII characters in back references. For example, /(\x{de})\1/8i was not matching \x{de}\x{fe}. It now works when Unicode Property Support is available. 5. In pcretest, an escape such as \x{de} in the data was always generating a UTF-8 string, even in non-UTF-8 mode. Now it generates a single byte in non-UTF-8 mode. If the value is greater than 255, it gives a warning about truncation. 6. Minor bugfix in pcrecpp.cc (change "" == ... to NULL == ...). 7. Added two (int) casts to pcregrep when printing the difference of two pointers, in case they are 64-bit values. 8. Added comments about Mac OS X stack usage to the pcrestack man page and to test 2 if it fails. 9. Added PCRE_CALL_CONVENTION just before the names of all exported functions, and a #define of that name to empty if it is not externally set. This is to allow users of MSVC to set it if necessary. 10. The PCRE_EXP_DEFN macro which precedes exported functions was missing from the convenience functions in the pcre_get.c source file. 11. An option change at the start of a pattern that had top-level alternatives could cause overwriting and/or a crash. This command provoked a crash in some environments: printf "/(?i)[\xc3\xa9\xc3\xbd]|[\xc3\xa9\xc3\xbdA]/8\n" | pcretest This potential security problem was recorded as CVE-2008-2371. 12. For a pattern where the match had to start at the beginning or immediately after a newline (e.g /.*anything/ without the DOTALL flag), pcre_exec() and pcre_dfa_exec() could read past the end of the passed subject if there was no match. To help with detecting such bugs (e.g. with valgrind), I modified pcretest so that it places the subject at the end of its malloc-ed buffer. 13. The change to pcretest in 12 above threw up a couple more cases when pcre_ exec() might read past the end of the data buffer in UTF-8 mode. 14. A similar bug to 7.3/2 existed when the PCRE_FIRSTLINE option was set and the data contained the byte 0x85 as part of a UTF-8 character within its first line. This applied both to normal and DFA matching. 15. Lazy qualifiers were not working in some cases in UTF-8 mode. For example, /^[^d]*?$/8 failed to match "abc". 16. Added a missing copyright notice to pcrecpp_internal.h. 17. Make it more clear in the documentation that values returned from pcre_exec() in ovector are byte offsets, not character counts. 18. Tidied a few places to stop certain compilers from issuing warnings. 19. Updated the Virtual Pascal + BCC files to compile the latest v7.7, as supplied by Stefan Weber. I made a further small update for 7.8 because there is a change of source arrangements: the pcre_searchfuncs.c module is replaced by pcre_ucd.c. Version 7.7 07-May-08 --------------------- 1. Applied Craig's patch to sort out a long long problem: "If we can't convert a string to a long long, pretend we don't even have a long long." This is done by checking for the strtoq, strtoll, and _strtoi64 functions. 2. Applied Craig's patch to pcrecpp.cc to restore ABI compatibility with pre-7.6 versions, which defined a global no_arg variable instead of putting it in the RE class. (See also #8 below.) 3. Remove a line of dead code, identified by coverity and reported by Nuno Lopes. 4. Fixed two related pcregrep bugs involving -r with --include or --exclude: (1) The include/exclude patterns were being applied to the whole pathnames of files, instead of just to the final components. (2) If there was more than one level of directory, the subdirectories were skipped unless they satisfied the include/exclude conditions. This is inconsistent with GNU grep (and could even be seen as contrary to the pcregrep specification - which I improved to make it absolutely clear). The action now is always to scan all levels of directory, and just apply the include/exclude patterns to regular files. 5. Added the --include_dir and --exclude_dir patterns to pcregrep, and used --exclude_dir in the tests to avoid scanning .svn directories. 6. Applied Craig's patch to the QuoteMeta function so that it escapes the NUL character as backslash + 0 rather than backslash + NUL, because PCRE doesn't support NULs in patterns. 7. Added some missing "const"s to declarations of static tables in pcre_compile.c and pcre_dfa_exec.c. 8. Applied Craig's patch to pcrecpp.cc to fix a problem in OS X that was caused by fix #2 above. (Subsequently also a second patch to fix the first patch. And a third patch - this was a messy problem.) 9. Applied Craig's patch to remove the use of push_back(). 10. Applied Alan Lehotsky's patch to add REG_STARTEND support to the POSIX matching function regexec(). 11. Added support for the Oniguruma syntax \g, \g, \g'name', \g'n', which, however, unlike Perl's \g{...}, are subroutine calls, not back references. PCRE supports relative numbers with this syntax (I don't think Oniguruma does). 12. Previously, a group with a zero repeat such as (...){0} was completely omitted from the compiled regex. However, this means that if the group was called as a subroutine from elsewhere in the pattern, things went wrong (an internal error was given). Such groups are now left in the compiled pattern, with a new opcode that causes them to be skipped at execution time. 13. Added the PCRE_JAVASCRIPT_COMPAT option. This makes the following changes to the way PCRE behaves: (a) A lone ] character is dis-allowed (Perl treats it as data). (b) A back reference to an unmatched subpattern matches an empty string (Perl fails the current match path). (c) A data ] in a character class must be notated as \] because if the first data character in a class is ], it defines an empty class. (In Perl it is not possible to have an empty class.) The empty class [] never matches; it forces failure and is equivalent to (*FAIL) or (?!). The negative empty class [^] matches any one character, independently of the DOTALL setting. 14. A pattern such as /(?2)[]a()b](abc)/ which had a forward reference to a non-existent subpattern following a character class starting with ']' and containing () gave an internal compiling error instead of "reference to non-existent subpattern". Fortunately, when the pattern did exist, the compiled code was correct. (When scanning forwards to check for the existencd of the subpattern, it was treating the data ']' as terminating the class, so got the count wrong. When actually compiling, the reference was subsequently set up correctly.) 15. The "always fail" assertion (?!) is optimzed to (*FAIL) by pcre_compile; it was being rejected as not supported by pcre_dfa_exec(), even though other assertions are supported. I have made pcre_dfa_exec() support (*FAIL). 16. The implementation of 13c above involved the invention of a new opcode, OP_ALLANY, which is like OP_ANY but doesn't check the /s flag. Since /s cannot be changed at match time, I realized I could make a small improvement to matching performance by compiling OP_ALLANY instead of OP_ANY for "." when DOTALL was set, and then removing the runtime tests on the OP_ANY path. 17. Compiling pcretest on Windows with readline support failed without the following two fixes: (1) Make the unistd.h include conditional on HAVE_UNISTD_H; (2) #define isatty and fileno as _isatty and _fileno. 18. Changed CMakeLists.txt and cmake/FindReadline.cmake to arrange for the ncurses library to be included for pcretest when ReadLine support is requested, but also to allow for it to be overridden. This patch came from Daniel Bergström. 19. There was a typo in the file ucpinternal.h where f0_rangeflag was defined as 0x00f00000 instead of 0x00800000. Luckily, this would not have caused any errors with the current Unicode tables. Thanks to Peter Kankowski for spotting this. Version 7.6 28-Jan-08 --------------------- 1. A character class containing a very large number of characters with codepoints greater than 255 (in UTF-8 mode, of course) caused a buffer overflow. 2. Patch to cut out the "long long" test in pcrecpp_unittest when HAVE_LONG_LONG is not defined. 3. Applied Christian Ehrlicher's patch to update the CMake build files to bring them up to date and include new features. This patch includes: - Fixed PH's badly added libz and libbz2 support. - Fixed a problem with static linking. - Added pcredemo. [But later removed - see 7 below.] - Fixed dftables problem and added an option. - Added a number of HAVE_XXX tests, including HAVE_WINDOWS_H and HAVE_LONG_LONG. - Added readline support for pcretest. - Added an listing of the option settings after cmake has run. 4. A user submitted a patch to Makefile that makes it easy to create "pcre.dll" under mingw when using Configure/Make. I added stuff to Makefile.am that cause it to include this special target, without affecting anything else. Note that the same mingw target plus all the other distribution libraries and programs are now supported when configuring with CMake (see 6 below) instead of with Configure/Make. 5. Applied Craig's patch that moves no_arg into the RE class in the C++ code. This is an attempt to solve the reported problem "pcrecpp::no_arg is not exported in the Windows port". It has not yet been confirmed that the patch solves the problem, but it does no harm. 6. Applied Sheri's patch to CMakeLists.txt to add NON_STANDARD_LIB_PREFIX and NON_STANDARD_LIB_SUFFIX for dll names built with mingw when configured with CMake, and also correct the comment about stack recursion. 7. Remove the automatic building of pcredemo from the ./configure system and from CMakeLists.txt. The whole idea of pcredemo.c is that it is an example of a program that users should build themselves after PCRE is installed, so building it automatically is not really right. What is more, it gave trouble in some build environments. 8. Further tidies to CMakeLists.txt from Sheri and Christian. Version 7.5 10-Jan-08 --------------------- 1. Applied a patch from Craig: "This patch makes it possible to 'ignore' values in parens when parsing an RE using the C++ wrapper." 2. Negative specials like \S did not work in character classes in UTF-8 mode. Characters greater than 255 were excluded from the class instead of being included. 3. The same bug as (2) above applied to negated POSIX classes such as [:^space:]. 4. PCRECPP_STATIC was referenced in pcrecpp_internal.h, but nowhere was it defined or documented. It seems to have been a typo for PCRE_STATIC, so I have changed it. 5. The construct (?&) was not diagnosed as a syntax error (it referenced the first named subpattern) and a construct such as (?&a) would reference the first named subpattern whose name started with "a" (in other words, the length check was missing). Both these problems are fixed. "Subpattern name expected" is now given for (?&) (a zero-length name), and this patch also makes it give the same error for \k'' (previously it complained that that was a reference to a non-existent subpattern). 6. The erroneous patterns (?+-a) and (?-+a) give different error messages; this is right because (?- can be followed by option settings as well as by digits. I have, however, made the messages clearer. 7. Patterns such as (?(1)a|b) (a pattern that contains fewer subpatterns than the number used in the conditional) now cause a compile-time error. This is actually not compatible with Perl, which accepts such patterns, but treats the conditional as always being FALSE (as PCRE used to), but it seems to me that giving a diagnostic is better. 8. Change "alphameric" to the more common word "alphanumeric" in comments and messages. 9. Fix two occurrences of "backslash" in comments that should have been "backspace". 10. Remove two redundant lines of code that can never be obeyed (their function was moved elsewhere). 11. The program that makes PCRE's Unicode character property table had a bug which caused it to generate incorrect table entries for sequences of characters that have the same character type, but are in different scripts. It amalgamated them into a single range, with the script of the first of them. In other words, some characters were in the wrong script. There were thirteen such cases, affecting characters in the following ranges: U+002b0 - U+002c1 U+0060c - U+0060d U+0061e - U+00612 U+0064b - U+0065e U+0074d - U+0076d U+01800 - U+01805 U+01d00 - U+01d77 U+01d9b - U+01dbf U+0200b - U+0200f U+030fc - U+030fe U+03260 - U+0327f U+0fb46 - U+0fbb1 U+10450 - U+1049d 12. The -o option (show only the matching part of a line) for pcregrep was not compatible with GNU grep in that, if there was more than one match in a line, it showed only the first of them. It now behaves in the same way as GNU grep. 13. If the -o and -v options were combined for pcregrep, it printed a blank line for every non-matching line. GNU grep prints nothing, and pcregrep now does the same. The return code can be used to tell if there were any non-matching lines. 14. Added --file-offsets and --line-offsets to pcregrep. 15. The pattern (?=something)(?R) was not being diagnosed as a potentially infinitely looping recursion. The bug was that positive lookaheads were not being skipped when checking for a possible empty match (negative lookaheads and both kinds of lookbehind were skipped). 16. Fixed two typos in the Windows-only code in pcregrep.c, and moved the inclusion of to before rather than after the definition of INVALID_FILE_ATTRIBUTES (patch from David Byron). 17. Specifying a possessive quantifier with a specific limit for a Unicode character property caused pcre_compile() to compile bad code, which led at runtime to PCRE_ERROR_INTERNAL (-14). Examples of patterns that caused this are: /\p{Zl}{2,3}+/8 and /\p{Cc}{2}+/8. It was the possessive "+" that caused the error; without that there was no problem. 18. Added --enable-pcregrep-libz and --enable-pcregrep-libbz2. 19. Added --enable-pcretest-libreadline. 20. In pcrecpp.cc, the variable 'count' was incremented twice in RE::GlobalReplace(). As a result, the number of replacements returned was double what it should be. I removed one of the increments, but Craig sent a later patch that removed the other one (the right fix) and added unit tests that check the return values (which was not done before). 21. Several CMake things: (1) Arranged that, when cmake is used on Unix, the libraries end up with the names libpcre and libpcreposix, not just pcre and pcreposix. (2) The above change means that pcretest and pcregrep are now correctly linked with the newly-built libraries, not previously installed ones. (3) Added PCRE_SUPPORT_LIBREADLINE, PCRE_SUPPORT_LIBZ, PCRE_SUPPORT_LIBBZ2. 22. In UTF-8 mode, with newline set to "any", a pattern such as .*a.*=.b.* crashed when matching a string such as a\x{2029}b (note that \x{2029} is a UTF-8 newline character). The key issue is that the pattern starts .*; this means that the match must be either at the beginning, or after a newline. The bug was in the code for advancing after a failed match and checking that the new position followed a newline. It was not taking account of UTF-8 characters correctly. 23. PCRE was behaving differently from Perl in the way it recognized POSIX character classes. PCRE was not treating the sequence [:...:] as a character class unless the ... were all letters. Perl, however, seems to allow any characters between [: and :], though of course it rejects as unknown any "names" that contain non-letters, because all the known class names consist only of letters. Thus, Perl gives an error for [[:1234:]], for example, whereas PCRE did not - it did not recognize a POSIX character class. This seemed a bit dangerous, so the code has been changed to be closer to Perl. The behaviour is not identical to Perl, because PCRE will diagnose an unknown class for, for example, [[:l\ower:]] where Perl will treat it as [[:lower:]]. However, PCRE does now give "unknown" errors where Perl does, and where it didn't before. 24. Rewrite so as to remove the single use of %n from pcregrep because in some Windows environments %n is disabled by default. Version 7.4 21-Sep-07 --------------------- 1. Change 7.3/28 was implemented for classes by looking at the bitmap. This means that a class such as [\s] counted as "explicit reference to CR or LF". That isn't really right - the whole point of the change was to try to help when there was an actual mention of one of the two characters. So now the change happens only if \r or \n (or a literal CR or LF) character is encountered. 2. The 32-bit options word was also used for 6 internal flags, but the numbers of both had grown to the point where there were only 3 bits left. Fortunately, there was spare space in the data structure, and so I have moved the internal flags into a new 16-bit field to free up more option bits. 3. The appearance of (?J) at the start of a pattern set the DUPNAMES option, but did not set the internal JCHANGED flag - either of these is enough to control the way the "get" function works - but the PCRE_INFO_JCHANGED facility is supposed to tell if (?J) was ever used, so now (?J) at the start sets both bits. 4. Added options (at build time, compile time, exec time) to change \R from matching any Unicode line ending sequence to just matching CR, LF, or CRLF. 5. doc/pcresyntax.html was missing from the distribution. 6. Put back the definition of PCRE_ERROR_NULLWSLIMIT, for backward compatibility, even though it is no longer used. 7. Added macro for snprintf to pcrecpp_unittest.cc and also for strtoll and strtoull to pcrecpp.cc to select the available functions in WIN32 when the windows.h file is present (where different names are used). [This was reversed later after testing - see 16 below.] 8. Changed all #include to #include "config.h". There were also some further cases that I changed to "pcre.h". 9. When pcregrep was used with the --colour option, it missed the line ending sequence off the lines that it output. 10. It was pointed out to me that arrays of string pointers cause lots of relocations when a shared library is dynamically loaded. A technique of using a single long string with a table of offsets can drastically reduce these. I have refactored PCRE in four places to do this. The result is dramatic: Originally: 290 After changing UCP table: 187 After changing error message table: 43 After changing table of "verbs" 36 After changing table of Posix names 22 Thanks to the folks working on Gregex for glib for this insight. 11. --disable-stack-for-recursion caused compiling to fail unless -enable- unicode-properties was also set. 12. Updated the tests so that they work when \R is defaulted to ANYCRLF. 13. Added checks for ANY and ANYCRLF to pcrecpp.cc where it previously checked only for CRLF. 14. Added casts to pcretest.c to avoid compiler warnings. 15. Added Craig's patch to various pcrecpp modules to avoid compiler warnings. 16. Added Craig's patch to remove the WINDOWS_H tests, that were not working, and instead check for _strtoi64 explicitly, and avoid the use of snprintf() entirely. This removes changes made in 7 above. 17. The CMake files have been updated, and there is now more information about building with CMake in the NON-UNIX-USE document. Version 7.3 28-Aug-07 --------------------- 1. In the rejigging of the build system that eventually resulted in 7.1, the line "#include " was included in pcre_internal.h. The use of angle brackets there is not right, since it causes compilers to look for an installed pcre.h, not the version that is in the source that is being compiled (which of course may be different). I have changed it back to: #include "pcre.h" I have a vague recollection that the change was concerned with compiling in different directories, but in the new build system, that is taken care of by the VPATH setting the Makefile. 2. The pattern .*$ when run in not-DOTALL UTF-8 mode with newline=any failed when the subject happened to end in the byte 0x85 (e.g. if the last character was \x{1ec5}). *Character* 0x85 is one of the "any" newline characters but of course it shouldn't be taken as a newline when it is part of another character. The bug was that, for an unlimited repeat of . in not-DOTALL UTF-8 mode, PCRE was advancing by bytes rather than by characters when looking for a newline. 3. A small performance improvement in the DOTALL UTF-8 mode .* case. 4. Debugging: adjusted the names of opcodes for different kinds of parentheses in debug output. 5. Arrange to use "%I64d" instead of "%lld" and "%I64u" instead of "%llu" for long printing in the pcrecpp unittest when running under MinGW. 6. ESC_K was left out of the EBCDIC table. 7. Change 7.0/38 introduced a new limit on the number of nested non-capturing parentheses; I made it 1000, which seemed large enough. Unfortunately, the limit also applies to "virtual nesting" when a pattern is recursive, and in this case 1000 isn't so big. I have been able to remove this limit at the expense of backing off one optimization in certain circumstances. Normally, when pcre_exec() would call its internal match() function recursively and immediately return the result unconditionally, it uses a "tail recursion" feature to save stack. However, when a subpattern that can match an empty string has an unlimited repetition quantifier, it no longer makes this optimization. That gives it a stack frame in which to save the data for checking that an empty string has been matched. Previously this was taken from the 1000-entry workspace that had been reserved. So now there is no explicit limit, but more stack is used. 8. Applied Daniel's patches to solve problems with the import/export magic syntax that is required for Windows, and which was going wrong for the pcreposix and pcrecpp parts of the library. These were overlooked when this problem was solved for the main library. 9. There were some crude static tests to avoid integer overflow when computing the size of patterns that contain repeated groups with explicit upper limits. As the maximum quantifier is 65535, the maximum group length was set at 30,000 so that the product of these two numbers did not overflow a 32-bit integer. However, it turns out that people want to use groups that are longer than 30,000 bytes (though not repeat them that many times). Change 7.0/17 (the refactoring of the way the pattern size is computed) has made it possible to implement the integer overflow checks in a much more dynamic way, which I have now done. The artificial limitation on group length has been removed - we now have only the limit on the total length of the compiled pattern, which depends on the LINK_SIZE setting. 10. Fixed a bug in the documentation for get/copy named substring when duplicate names are permitted. If none of the named substrings are set, the functions return PCRE_ERROR_NOSUBSTRING (7); the doc said they returned an empty string. 11. Because Perl interprets \Q...\E at a high level, and ignores orphan \E instances, patterns such as [\Q\E] or [\E] or even [^\E] cause an error, because the ] is interpreted as the first data character and the terminating ] is not found. PCRE has been made compatible with Perl in this regard. Previously, it interpreted [\Q\E] as an empty class, and [\E] could cause memory overwriting. 10. Like Perl, PCRE automatically breaks an unlimited repeat after an empty string has been matched (to stop an infinite loop). It was not recognizing a conditional subpattern that could match an empty string if that subpattern was within another subpattern. For example, it looped when trying to match (((?(1)X|))*) but it was OK with ((?(1)X|)*) where the condition was not nested. This bug has been fixed. 12. A pattern like \X?\d or \P{L}?\d in non-UTF-8 mode could cause a backtrack past the start of the subject in the presence of bytes with the top bit set, for example "\x8aBCD". 13. Added Perl 5.10 experimental backtracking controls (*FAIL), (*F), (*PRUNE), (*SKIP), (*THEN), (*COMMIT), and (*ACCEPT). 14. Optimized (?!) to (*FAIL). 15. Updated the test for a valid UTF-8 string to conform to the later RFC 3629. This restricts code points to be within the range 0 to 0x10FFFF, excluding the "low surrogate" sequence 0xD800 to 0xDFFF. Previously, PCRE allowed the full range 0 to 0x7FFFFFFF, as defined by RFC 2279. Internally, it still does: it's just the validity check that is more restrictive. 16. Inserted checks for integer overflows during escape sequence (backslash) processing, and also fixed erroneous offset values for syntax errors during backslash processing. 17. Fixed another case of looking too far back in non-UTF-8 mode (cf 12 above) for patterns like [\PPP\x8a]{1,}\x80 with the subject "A\x80". 18. An unterminated class in a pattern like (?1)\c[ with a "forward reference" caused an overrun. 19. A pattern like (?:[\PPa*]*){8,} which had an "extended class" (one with something other than just ASCII characters) inside a group that had an unlimited repeat caused a loop at compile time (while checking to see whether the group could match an empty string). 20. Debugging a pattern containing \p or \P could cause a crash. For example, [\P{Any}] did so. (Error in the code for printing property names.) 21. An orphan \E inside a character class could cause a crash. 22. A repeated capturing bracket such as (A)? could cause a wild memory reference during compilation. 23. There are several functions in pcre_compile() that scan along a compiled expression for various reasons (e.g. to see if it's fixed length for look behind). There were bugs in these functions when a repeated \p or \P was present in the pattern. These operators have additional parameters compared with \d, etc, and these were not being taken into account when moving along the compiled data. Specifically: (a) A item such as \p{Yi}{3} in a lookbehind was not treated as fixed length. (b) An item such as \pL+ within a repeated group could cause crashes or loops. (c) A pattern such as \p{Yi}+(\P{Yi}+)(?1) could give an incorrect "reference to non-existent subpattern" error. (d) A pattern like (\P{Yi}{2}\277)? could loop at compile time. 24. A repeated \S or \W in UTF-8 mode could give wrong answers when multibyte characters were involved (for example /\S{2}/8g with "A\x{a3}BC"). 25. Using pcregrep in multiline, inverted mode (-Mv) caused it to loop. 26. Patterns such as [\P{Yi}A] which include \p or \P and just one other character were causing crashes (broken optimization). 27. Patterns such as (\P{Yi}*\277)* (group with possible zero repeat containing \p or \P) caused a compile-time loop. 28. More problems have arisen in unanchored patterns when CRLF is a valid line break. For example, the unstudied pattern [\r\n]A does not match the string "\r\nA" because change 7.0/46 below moves the current point on by two characters after failing to match at the start. However, the pattern \nA *does* match, because it doesn't start till \n, and if [\r\n]A is studied, the same is true. There doesn't seem any very clean way out of this, but what I have chosen to do makes the common cases work: PCRE now takes note of whether there can be an explicit match for \r or \n anywhere in the pattern, and if so, 7.0/46 no longer applies. As part of this change, there's a new PCRE_INFO_HASCRORLF option for finding out whether a compiled pattern has explicit CR or LF references. 29. Added (*CR) etc for changing newline setting at start of pattern. Version 7.2 19-Jun-07 --------------------- 1. If the fr_FR locale cannot be found for test 3, try the "french" locale, which is apparently normally available under Windows. 2. Re-jig the pcregrep tests with different newline settings in an attempt to make them independent of the local environment's newline setting. 3. Add code to configure.ac to remove -g from the CFLAGS default settings. 4. Some of the "internals" tests were previously cut out when the link size was not 2, because the output contained actual offsets. The recent new "Z" feature of pcretest means that these can be cut out, making the tests usable with all link sizes. 5. Implemented Stan Switzer's goto replacement for longjmp() when not using stack recursion. This gives a massive performance boost under BSD, but just a small improvement under Linux. However, it saves one field in the frame in all cases. 6. Added more features from the forthcoming Perl 5.10: (a) (?-n) (where n is a string of digits) is a relative subroutine or recursion call. It refers to the nth most recently opened parentheses. (b) (?+n) is also a relative subroutine call; it refers to the nth next to be opened parentheses. (c) Conditions that refer to capturing parentheses can be specified relatively, for example, (?(-2)... or (?(+3)... (d) \K resets the start of the current match so that everything before is not part of it. (e) \k{name} is synonymous with \k and \k'name' (.NET compatible). (f) \g{name} is another synonym - part of Perl 5.10's unification of reference syntax. (g) (?| introduces a group in which the numbering of parentheses in each alternative starts with the same number. (h) \h, \H, \v, and \V match horizontal and vertical whitespace. 7. Added two new calls to pcre_fullinfo(): PCRE_INFO_OKPARTIAL and PCRE_INFO_JCHANGED. 8. A pattern such as (.*(.)?)* caused pcre_exec() to fail by either not terminating or by crashing. Diagnosed by Viktor Griph; it was in the code for detecting groups that can match an empty string. 9. A pattern with a very large number of alternatives (more than several hundred) was running out of internal workspace during the pre-compile phase, where pcre_compile() figures out how much memory will be needed. A bit of new cunning has reduced the workspace needed for groups with alternatives. The 1000-alternative test pattern now uses 12 bytes of workspace instead of running out of the 4096 that are available. 10. Inserted some missing (unsigned int) casts to get rid of compiler warnings. 11. Applied patch from Google to remove an optimization that didn't quite work. The report of the bug said: pcrecpp::RE("a*").FullMatch("aaa") matches, while pcrecpp::RE("a*?").FullMatch("aaa") does not, and pcrecpp::RE("a*?\\z").FullMatch("aaa") does again. 12. If \p or \P was used in non-UTF-8 mode on a character greater than 127 it matched the wrong number of bytes. Version 7.1 24-Apr-07 --------------------- 1. Applied Bob Rossi and Daniel G's patches to convert the build system to one that is more "standard", making use of automake and other Autotools. There is some re-arrangement of the files and adjustment of comments consequent on this. 2. Part of the patch fixed a problem with the pcregrep tests. The test of -r for recursive directory scanning broke on some systems because the files are not scanned in any specific order and on different systems the order was different. A call to "sort" has been inserted into RunGrepTest for the approprate test as a short-term fix. In the longer term there may be an alternative. 3. I had an email from Eric Raymond about problems translating some of PCRE's man pages to HTML (despite the fact that I distribute HTML pages, some people do their own conversions for various reasons). The problems concerned the use of low-level troff macros .br and .in. I have therefore removed all such uses from the man pages (some were redundant, some could be replaced by .nf/.fi pairs). The 132html script that I use to generate HTML has been updated to handle .nf/.fi and to complain if it encounters .br or .in. 4. Updated comments in configure.ac that get placed in config.h.in and also arranged for config.h to be included in the distribution, with the name config.h.generic, for the benefit of those who have to compile without Autotools (compare pcre.h, which is now distributed as pcre.h.generic). 5. Updated the support (such as it is) for Virtual Pascal, thanks to Stefan Weber: (1) pcre_internal.h was missing some function renames; (2) updated makevp.bat for the current PCRE, using the additional files makevp_c.txt, makevp_l.txt, and pcregexp.pas. 6. A Windows user reported a minor discrepancy with test 2, which turned out to be caused by a trailing space on an input line that had got lost in his copy. The trailing space was an accident, so I've just removed it. 7. Add -Wl,-R... flags in pcre-config.in for *BSD* systems, as I'm told that is needed. 8. Mark ucp_table (in ucptable.h) and ucp_gentype (in pcre_ucp_searchfuncs.c) as "const" (a) because they are and (b) because it helps the PHP maintainers who have recently made a script to detect big data structures in the php code that should be moved to the .rodata section. I remembered to update Builducptable as well, so it won't revert if ucptable.h is ever re-created. 9. Added some extra #ifdef SUPPORT_UTF8 conditionals into pcretest.c, pcre_printint.src, pcre_compile.c, pcre_study.c, and pcre_tables.c, in order to be able to cut out the UTF-8 tables in the latter when UTF-8 support is not required. This saves 1.5-2K of code, which is important in some applications. Later: more #ifdefs are needed in pcre_ord2utf8.c and pcre_valid_utf8.c so as not to refer to the tables, even though these functions will never be called when UTF-8 support is disabled. Otherwise there are problems with a shared library. 10. Fixed two bugs in the emulated memmove() function in pcre_internal.h: (a) It was defining its arguments as char * instead of void *. (b) It was assuming that all moves were upwards in memory; this was true a long time ago when I wrote it, but is no longer the case. The emulated memove() is provided for those environments that have neither memmove() nor bcopy(). I didn't think anyone used it these days, but that is clearly not the case, as these two bugs were recently reported. 11. The script PrepareRelease is now distributed: it calls 132html, CleanTxt, and Detrail to create the HTML documentation, the .txt form of the man pages, and it removes trailing spaces from listed files. It also creates pcre.h.generic and config.h.generic from pcre.h and config.h. In the latter case, it wraps all the #defines with #ifndefs. This script should be run before "make dist". 12. Fixed two fairly obscure bugs concerned with quantified caseless matching with Unicode property support. (a) For a maximizing quantifier, if the two different cases of the character were of different lengths in their UTF-8 codings (there are some cases like this - I found 11), and the matching function had to back up over a mixture of the two cases, it incorrectly assumed they were both the same length. (b) When PCRE was configured to use the heap rather than the stack for recursion during matching, it was not correctly preserving the data for the other case of a UTF-8 character when checking ahead for a match while processing a minimizing repeat. If the check also involved matching a wide character, but failed, corruption could cause an erroneous result when trying to check for a repeat of the original character. 13. Some tidying changes to the testing mechanism: (a) The RunTest script now detects the internal link size and whether there is UTF-8 and UCP support by running ./pcretest -C instead of relying on values substituted by "configure". (The RunGrepTest script already did this for UTF-8.) The configure.ac script no longer substitutes the relevant variables. (b) The debugging options /B and /D in pcretest show the compiled bytecode with length and offset values. This means that the output is different for different internal link sizes. Test 2 is skipped for link sizes other than 2 because of this, bypassing the problem. Unfortunately, there was also a test in test 3 (the locale tests) that used /B and failed for link sizes other than 2. Rather than cut the whole test out, I have added a new /Z option to pcretest that replaces the length and offset values with spaces. This is now used to make test 3 independent of link size. (Test 2 will be tidied up later.) 14. If erroroffset was passed as NULL to pcre_compile, it provoked a segmentation fault instead of returning the appropriate error message. 15. In multiline mode when the newline sequence was set to "any", the pattern ^$ would give a match between the \r and \n of a subject such as "A\r\nB". This doesn't seem right; it now treats the CRLF combination as the line ending, and so does not match in that case. It's only a pattern such as ^$ that would hit this one: something like ^ABC$ would have failed after \r and then tried again after \r\n. 16. Changed the comparison command for RunGrepTest from "diff -u" to "diff -ub" in an attempt to make files that differ only in their line terminators compare equal. This works on Linux. 17. Under certain error circumstances pcregrep might try to free random memory as it exited. This is now fixed, thanks to valgrind. 19. In pcretest, if the pattern /(?m)^$/g was matched against the string "abc\r\n\r\n", it found an unwanted second match after the second \r. This was because its rules for how to advance for /g after matching an empty string at the end of a line did not allow for this case. They now check for it specially. 20. pcretest is supposed to handle patterns and data of any length, by extending its buffers when necessary. It was getting this wrong when the buffer for a data line had to be extended. 21. Added PCRE_NEWLINE_ANYCRLF which is like ANY, but matches only CR, LF, or CRLF as a newline sequence. 22. Code for handling Unicode properties in pcre_dfa_exec() wasn't being cut out by #ifdef SUPPORT_UCP. This did no harm, as it could never be used, but I have nevertheless tidied it up. 23. Added some casts to kill warnings from HP-UX ia64 compiler. 24. Added a man page for pcre-config. Version 7.0 19-Dec-06 --------------------- 1. Fixed a signed/unsigned compiler warning in pcre_compile.c, shown up by moving to gcc 4.1.1. 2. The -S option for pcretest uses setrlimit(); I had omitted to #include sys/time.h, which is documented as needed for this function. It doesn't seem to matter on Linux, but it showed up on some releases of OS X. 3. It seems that there are systems where bytes whose values are greater than 127 match isprint() in the "C" locale. The "C" locale should be the default when a C program starts up. In most systems, only ASCII printing characters match isprint(). This difference caused the output from pcretest to vary, making some of the tests fail. I have changed pcretest so that: (a) When it is outputting text in the compiled version of a pattern, bytes other than 32-126 are always shown as hex escapes. (b) When it is outputting text that is a matched part of a subject string, it does the same, unless a different locale has been set for the match (using the /L modifier). In this case, it uses isprint() to decide. 4. Fixed a major bug that caused incorrect computation of the amount of memory required for a compiled pattern when options that changed within the pattern affected the logic of the preliminary scan that determines the length. The relevant options are -x, and -i in UTF-8 mode. The result was that the computed length was too small. The symptoms of this bug were either the PCRE error "internal error: code overflow" from pcre_compile(), or a glibc crash with a message such as "pcretest: free(): invalid next size (fast)". Examples of patterns that provoked this bug (shown in pcretest format) are: /(?-x: )/x /(?x)(?-x: \s*#\s*)/ /((?i)[\x{c0}])/8 /(?i:[\x{c0}])/8 HOWEVER: Change 17 below makes this fix obsolete as the memory computation is now done differently. 5. Applied patches from Google to: (a) add a QuoteMeta function to the C++ wrapper classes; (b) implement a new function in the C++ scanner that is more efficient than the old way of doing things because it avoids levels of recursion in the regex matching; (c) add a paragraph to the documentation for the FullMatch() function. 6. The escape sequence \n was being treated as whatever was defined as "newline". Not only was this contrary to the documentation, which states that \n is character 10 (hex 0A), but it also went horribly wrong when "newline" was defined as CRLF. This has been fixed. 7. In pcre_dfa_exec.c the value of an unsigned integer (the variable called c) was being set to -1 for the "end of line" case (supposedly a value that no character can have). Though this value is never used (the check for end of line is "zero bytes in current character"), it caused compiler complaints. I've changed it to 0xffffffff. 8. In pcre_version.c, the version string was being built by a sequence of C macros that, in the event of PCRE_PRERELEASE being defined as an empty string (as it is for production releases) called a macro with an empty argument. The C standard says the result of this is undefined. The gcc compiler treats it as an empty string (which was what was wanted) but it is reported that Visual C gives an error. The source has been hacked around to avoid this problem. 9. On the advice of a Windows user, included and in Windows builds of pcretest, and changed the call to _setmode() to use _O_BINARY instead of 0x8000. Made all the #ifdefs test both _WIN32 and WIN32 (not all of them did). 10. Originally, pcretest opened its input and output without "b"; then I was told that "b" was needed in some environments, so it was added for release 5.0 to both the input and output. (It makes no difference on Unix-like systems.) Later I was told that it is wrong for the input on Windows. I've now abstracted the modes into two macros, to make it easier to fiddle with them, and removed "b" from the input mode under Windows. 11. Added pkgconfig support for the C++ wrapper library, libpcrecpp. 12. Added -help and --help to pcretest as an official way of being reminded of the options. 13. Removed some redundant semicolons after macro calls in pcrecpparg.h.in and pcrecpp.cc because they annoy compilers at high warning levels. 14. A bit of tidying/refactoring in pcre_exec.c in the main bumpalong loop. 15. Fixed an occurrence of == in configure.ac that should have been = (shell scripts are not C programs :-) and which was not noticed because it works on Linux. 16. pcretest is supposed to handle any length of pattern and data line (as one line or as a continued sequence of lines) by extending its input buffer if necessary. This feature was broken for very long pattern lines, leading to a string of junk being passed to pcre_compile() if the pattern was longer than about 50K. 17. I have done a major re-factoring of the way pcre_compile() computes the amount of memory needed for a compiled pattern. Previously, there was code that made a preliminary scan of the pattern in order to do this. That was OK when PCRE was new, but as the facilities have expanded, it has become harder and harder to keep it in step with the real compile phase, and there have been a number of bugs (see for example, 4 above). I have now found a cunning way of running the real compile function in a "fake" mode that enables it to compute how much memory it would need, while actually only ever using a few hundred bytes of working memory and without too many tests of the mode. This should make future maintenance and development easier. A side effect of this work is that the limit of 200 on the nesting depth of parentheses has been removed (though this was never a serious limitation, I suspect). However, there is a downside: pcre_compile() now runs more slowly than before (30% or more, depending on the pattern). I hope this isn't a big issue. There is no effect on runtime performance. 18. Fixed a minor bug in pcretest: if a pattern line was not terminated by a newline (only possible for the last line of a file) and it was a pattern that set a locale (followed by /Lsomething), pcretest crashed. 19. Added additional timing features to pcretest. (1) The -tm option now times matching only, not compiling. (2) Both -t and -tm can be followed, as a separate command line item, by a number that specifies the number of repeats to use when timing. The default is 50000; this gives better precision, but takes uncomfortably long for very large patterns. 20. Extended pcre_study() to be more clever in cases where a branch of a subpattern has no definite first character. For example, (a*|b*)[cd] would previously give no result from pcre_study(). Now it recognizes that the first character must be a, b, c, or d. 21. There was an incorrect error "recursive call could loop indefinitely" if a subpattern (or the entire pattern) that was being tested for matching an empty string contained only one non-empty item after a nested subpattern. For example, the pattern (?>\x{100}*)\d(?R) provoked this error incorrectly, because the \d was being skipped in the check. 22. The pcretest program now has a new pattern option /B and a command line option -b, which is equivalent to adding /B to every pattern. This causes it to show the compiled bytecode, without the additional information that -d shows. The effect of -d is now the same as -b with -i (and similarly, /D is the same as /B/I). 23. A new optimization is now able automatically to treat some sequences such as a*b as a*+b. More specifically, if something simple (such as a character or a simple class like \d) has an unlimited quantifier, and is followed by something that cannot possibly match the quantified thing, the quantifier is automatically "possessified". 24. A recursive reference to a subpattern whose number was greater than 39 went wrong under certain circumstances in UTF-8 mode. This bug could also have affected the operation of pcre_study(). 25. Realized that a little bit of performance could be had by replacing (c & 0xc0) == 0xc0 with c >= 0xc0 when processing UTF-8 characters. 26. Timing data from pcretest is now shown to 4 decimal places instead of 3. 27. Possessive quantifiers such as a++ were previously implemented by turning them into atomic groups such as ($>a+). Now they have their own opcodes, which improves performance. This includes the automatically created ones from 23 above. 28. A pattern such as (?=(\w+))\1: which simulates an atomic group using a lookahead was broken if it was not anchored. PCRE was mistakenly expecting the first matched character to be a colon. This applied both to named and numbered groups. 29. The ucpinternal.h header file was missing its idempotency #ifdef. 30. I was sent a "project" file called libpcre.a.dev which I understand makes building PCRE on Windows easier, so I have included it in the distribution. 31. There is now a check in pcretest against a ridiculously large number being returned by pcre_exec() or pcre_dfa_exec(). If this happens in a /g or /G loop, the loop is abandoned. 32. Forward references to subpatterns in conditions such as (?(2)...) where subpattern 2 is defined later cause pcre_compile() to search forwards in the pattern for the relevant set of parentheses. This search went wrong when there were unescaped parentheses in a character class, parentheses escaped with \Q...\E, or parentheses in a #-comment in /x mode. 33. "Subroutine" calls and backreferences were previously restricted to referencing subpatterns earlier in the regex. This restriction has now been removed. 34. Added a number of extra features that are going to be in Perl 5.10. On the whole, these are just syntactic alternatives for features that PCRE had previously implemented using the Python syntax or my own invention. The other formats are all retained for compatibility. (a) Named groups can now be defined as (?...) or (?'name'...) as well as (?P...). The new forms, as well as being in Perl 5.10, are also .NET compatible. (b) A recursion or subroutine call to a named group can now be defined as (?&name) as well as (?P>name). (c) A backreference to a named group can now be defined as \k or \k'name' as well as (?P=name). The new forms, as well as being in Perl 5.10, are also .NET compatible. (d) A conditional reference to a named group can now use the syntax (?() or (?('name') as well as (?(name). (e) A "conditional group" of the form (?(DEFINE)...) can be used to define groups (named and numbered) that are never evaluated inline, but can be called as "subroutines" from elsewhere. In effect, the DEFINE condition is always false. There may be only one alternative in such a group. (f) A test for recursion can be given as (?(R1).. or (?(R&name)... as well as the simple (?(R). The condition is true only if the most recent recursion is that of the given number or name. It does not search out through the entire recursion stack. (g) The escape \gN or \g{N} has been added, where N is a positive or negative number, specifying an absolute or relative reference. 35. Tidied to get rid of some further signed/unsigned compiler warnings and some "unreachable code" warnings. 36. Updated the Unicode property tables to Unicode version 5.0.0. Amongst other things, this adds five new scripts. 37. Perl ignores orphaned \E escapes completely. PCRE now does the same. There were also incompatibilities regarding the handling of \Q..\E inside character classes, for example with patterns like [\Qa\E-\Qz\E] where the hyphen was adjacent to \Q or \E. I hope I've cleared all this up now. 38. Like Perl, PCRE detects when an indefinitely repeated parenthesized group matches an empty string, and forcibly breaks the loop. There were bugs in this code in non-simple cases. For a pattern such as ^(a()*)* matched against aaaa the result was just "a" rather than "aaaa", for example. Two separate and independent bugs (that affected different cases) have been fixed. 39. Refactored the code to abolish the use of different opcodes for small capturing bracket numbers. This is a tidy that I avoided doing when I removed the limit on the number of capturing brackets for 3.5 back in 2001. The new approach is not only tidier, it makes it possible to reduce the memory needed to fix the previous bug (38). 40. Implemented PCRE_NEWLINE_ANY to recognize any of the Unicode newline sequences (http://unicode.org/unicode/reports/tr18/) as "newline" when processing dot, circumflex, or dollar metacharacters, or #-comments in /x mode. 41. Add \R to match any Unicode newline sequence, as suggested in the Unicode report. 42. Applied patch, originally from Ari Pollak, modified by Google, to allow copy construction and assignment in the C++ wrapper. 43. Updated pcregrep to support "--newline=any". In the process, I fixed a couple of bugs that could have given wrong results in the "--newline=crlf" case. 44. Added a number of casts and did some reorganization of signed/unsigned int variables following suggestions from Dair Grant. Also renamed the variable "this" as "item" because it is a C++ keyword. 45. Arranged for dftables to add #include "pcre_internal.h" to pcre_chartables.c because without it, gcc 4.x may remove the array definition from the final binary if PCRE is built into a static library and dead code stripping is activated. 46. For an unanchored pattern, if a match attempt fails at the start of a newline sequence, and the newline setting is CRLF or ANY, and the next two characters are CRLF, advance by two characters instead of one. Version 6.7 04-Jul-06 --------------------- 1. In order to handle tests when input lines are enormously long, pcretest has been re-factored so that it automatically extends its buffers when necessary. The code is crude, but this _is_ just a test program. The default size has been increased from 32K to 50K. 2. The code in pcre_study() was using the value of the re argument before testing it for NULL. (Of course, in any sensible call of the function, it won't be NULL.) 3. The memmove() emulation function in pcre_internal.h, which is used on systems that lack both memmove() and bcopy() - that is, hardly ever - was missing a "static" storage class specifier. 4. When UTF-8 mode was not set, PCRE looped when compiling certain patterns containing an extended class (one that cannot be represented by a bitmap because it contains high-valued characters or Unicode property items, e.g. [\pZ]). Almost always one would set UTF-8 mode when processing such a pattern, but PCRE should not loop if you do not (it no longer does). [Detail: two cases were found: (a) a repeated subpattern containing an extended class; (b) a recursive reference to a subpattern that followed a previous extended class. It wasn't skipping over the extended class correctly when UTF-8 mode was not set.] 5. A negated single-character class was not being recognized as fixed-length in lookbehind assertions such as (?<=[^f]), leading to an incorrect compile error "lookbehind assertion is not fixed length". 6. The RunPerlTest auxiliary script was showing an unexpected difference between PCRE and Perl for UTF-8 tests. It turns out that it is hard to write a Perl script that can interpret lines of an input file either as byte characters or as UTF-8, which is what "perltest" was being required to do for the non-UTF-8 and UTF-8 tests, respectively. Essentially what you can't do is switch easily at run time between having the "use utf8;" pragma or not. In the end, I fudged it by using the RunPerlTest script to insert "use utf8;" explicitly for the UTF-8 tests. 7. In multiline (/m) mode, PCRE was matching ^ after a terminating newline at the end of the subject string, contrary to the documentation and to what Perl does. This was true of both matching functions. Now it matches only at the start of the subject and immediately after *internal* newlines. 8. A call of pcre_fullinfo() from pcretest to get the option bits was passing a pointer to an int instead of a pointer to an unsigned long int. This caused problems on 64-bit systems. 9. Applied a patch from the folks at Google to pcrecpp.cc, to fix "another instance of the 'standard' template library not being so standard". 10. There was no check on the number of named subpatterns nor the maximum length of a subpattern name. The product of these values is used to compute the size of the memory block for a compiled pattern. By supplying a very long subpattern name and a large number of named subpatterns, the size computation could be caused to overflow. This is now prevented by limiting the length of names to 32 characters, and the number of named subpatterns to 10,000. 11. Subpatterns that are repeated with specific counts have to be replicated in the compiled pattern. The size of memory for this was computed from the length of the subpattern and the repeat count. The latter is limited to 65535, but there was no limit on the former, meaning that integer overflow could in principle occur. The compiled length of a repeated subpattern is now limited to 30,000 bytes in order to prevent this. 12. Added the optional facility to have named substrings with the same name. 13. Added the ability to use a named substring as a condition, using the Python syntax: (?(name)yes|no). This overloads (?(R)... and names that are numbers (not recommended). Forward references are permitted. 14. Added forward references in named backreferences (if you see what I mean). 15. In UTF-8 mode, with the PCRE_DOTALL option set, a quantified dot in the pattern could run off the end of the subject. For example, the pattern "(?s)(.{1,5})"8 did this with the subject "ab". 16. If PCRE_DOTALL or PCRE_MULTILINE were set, pcre_dfa_exec() behaved as if PCRE_CASELESS was set when matching characters that were quantified with ? or *. 17. A character class other than a single negated character that had a minimum but no maximum quantifier - for example [ab]{6,} - was not handled correctly by pce_dfa_exec(). It would match only one character. 18. A valid (though odd) pattern that looked like a POSIX character class but used an invalid character after [ (for example [[,abc,]]) caused pcre_compile() to give the error "Failed: internal error: code overflow" or in some cases to crash with a glibc free() error. This could even happen if the pattern terminated after [[ but there just happened to be a sequence of letters, a binary zero, and a closing ] in the memory that followed. 19. Perl's treatment of octal escapes in the range \400 to \777 has changed over the years. Originally (before any Unicode support), just the bottom 8 bits were taken. Thus, for example, \500 really meant \100. Nowadays the output from "man perlunicode" includes this: The regular expression compiler produces polymorphic opcodes. That is, the pattern adapts to the data and automatically switches to the Unicode character scheme when presented with Unicode data--or instead uses a traditional byte scheme when presented with byte data. Sadly, a wide octal escape does not cause a switch, and in a string with no other multibyte characters, these octal escapes are treated as before. Thus, in Perl, the pattern /\500/ actually matches \100 but the pattern /\500|\x{1ff}/ matches \500 or \777 because the whole thing is treated as a Unicode string. I have not perpetrated such confusion in PCRE. Up till now, it took just the bottom 8 bits, as in old Perl. I have now made octal escapes with values greater than \377 illegal in non-UTF-8 mode. In UTF-8 mode they translate to the appropriate multibyte character. 29. Applied some refactoring to reduce the number of warnings from Microsoft and Borland compilers. This has included removing the fudge introduced seven years ago for the OS/2 compiler (see 2.02/2 below) because it caused a warning about an unused variable. 21. PCRE has not included VT (character 0x0b) in the set of whitespace characters since release 4.0, because Perl (from release 5.004) does not. [Or at least, is documented not to: some releases seem to be in conflict with the documentation.] However, when a pattern was studied with pcre_study() and all its branches started with \s, PCRE still included VT as a possible starting character. Of course, this did no harm; it just caused an unnecessary match attempt. 22. Removed a now-redundant internal flag bit that recorded the fact that case dependency changed within the pattern. This was once needed for "required byte" processing, but is no longer used. This recovers a now-scarce options bit. Also moved the least significant internal flag bit to the most- significant bit of the word, which was not previously used (hangover from the days when it was an int rather than a uint) to free up another bit for the future. 23. Added support for CRLF line endings as well as CR and LF. As well as the default being selectable at build time, it can now be changed at runtime via the PCRE_NEWLINE_xxx flags. There are now options for pcregrep to specify that it is scanning data with non-default line endings. 24. Changed the definition of CXXLINK to make it agree with the definition of LINK in the Makefile, by replacing LDFLAGS to CXXFLAGS. 25. Applied Ian Taylor's patches to avoid using another stack frame for tail recursions. This makes a big different to stack usage for some patterns. 26. If a subpattern containing a named recursion or subroutine reference such as (?P>B) was quantified, for example (xxx(?P>B)){3}, the calculation of the space required for the compiled pattern went wrong and gave too small a value. Depending on the environment, this could lead to "Failed: internal error: code overflow at offset 49" or "glibc detected double free or corruption" errors. 27. Applied patches from Google (a) to support the new newline modes and (b) to advance over multibyte UTF-8 characters in GlobalReplace. 28. Change free() to pcre_free() in pcredemo.c. Apparently this makes a difference for some implementation of PCRE in some Windows version. 29. Added some extra testing facilities to pcretest: \q in a data line sets the "match limit" value \Q in a data line sets the "match recursion limt" value -S sets the stack size, where is in megabytes The -S option isn't available for Windows. Version 6.6 06-Feb-06 --------------------- 1. Change 16(a) for 6.5 broke things, because PCRE_DATA_SCOPE was not defined in pcreposix.h. I have copied the definition from pcre.h. 2. Change 25 for 6.5 broke compilation in a build directory out-of-tree because pcre.h is no longer a built file. 3. Added Jeff Friedl's additional debugging patches to pcregrep. These are not normally included in the compiled code. Version 6.5 01-Feb-06 --------------------- 1. When using the partial match feature with pcre_dfa_exec(), it was not anchoring the second and subsequent partial matches at the new starting point. This could lead to incorrect results. For example, with the pattern /1234/, partially matching against "123" and then "a4" gave a match. 2. Changes to pcregrep: (a) All non-match returns from pcre_exec() were being treated as failures to match the line. Now, unless the error is PCRE_ERROR_NOMATCH, an error message is output. Some extra information is given for the PCRE_ERROR_MATCHLIMIT and PCRE_ERROR_RECURSIONLIMIT errors, which are probably the only errors that are likely to be caused by users (by specifying a regex that has nested indefinite repeats, for instance). If there are more than 20 of these errors, pcregrep is abandoned. (b) A binary zero was treated as data while matching, but terminated the output line if it was written out. This has been fixed: binary zeroes are now no different to any other data bytes. (c) Whichever of the LC_ALL or LC_CTYPE environment variables is set is used to set a locale for matching. The --locale=xxxx long option has been added (no short equivalent) to specify a locale explicitly on the pcregrep command, overriding the environment variables. (d) When -B was used with -n, some line numbers in the output were one less than they should have been. (e) Added the -o (--only-matching) option. (f) If -A or -C was used with -c (count only), some lines of context were accidentally printed for the final match. (g) Added the -H (--with-filename) option. (h) The combination of options -rh failed to suppress file names for files that were found from directory arguments. (i) Added the -D (--devices) and -d (--directories) options. (j) Added the -F (--fixed-strings) option. (k) Allow "-" to be used as a file name for -f as well as for a data file. (l) Added the --colo(u)r option. (m) Added Jeffrey Friedl's -S testing option, but within #ifdefs so that it is not present by default. 3. A nasty bug was discovered in the handling of recursive patterns, that is, items such as (?R) or (?1), when the recursion could match a number of alternatives. If it matched one of the alternatives, but subsequently, outside the recursion, there was a failure, the code tried to back up into the recursion. However, because of the way PCRE is implemented, this is not possible, and the result was an incorrect result from the match. In order to prevent this happening, the specification of recursion has been changed so that all such subpatterns are automatically treated as atomic groups. Thus, for example, (?R) is treated as if it were (?>(?R)). 4. I had overlooked the fact that, in some locales, there are characters for which isalpha() is true but neither isupper() nor islower() are true. In the fr_FR locale, for instance, the \xAA and \xBA characters (ordmasculine and ordfeminine) are like this. This affected the treatment of \w and \W when they appeared in character classes, but not when they appeared outside a character class. The bit map for "word" characters is now created separately from the results of isalnum() instead of just taking it from the upper, lower, and digit maps. (Plus the underscore character, of course.) 5. The above bug also affected the handling of POSIX character classes such as [[:alpha:]] and [[:alnum:]]. These do not have their own bit maps in PCRE's permanent tables. Instead, the bit maps for such a class were previously created as the appropriate unions of the upper, lower, and digit bitmaps. Now they are created by subtraction from the [[:word:]] class, which has its own bitmap. 6. The [[:blank:]] character class matches horizontal, but not vertical space. It is created by subtracting the vertical space characters (\x09, \x0a, \x0b, \x0c) from the [[:space:]] bitmap. Previously, however, the subtraction was done in the overall bitmap for a character class, meaning that a class such as [\x0c[:blank:]] was incorrect because \x0c would not be recognized. This bug has been fixed. 7. Patches from the folks at Google: (a) pcrecpp.cc: "to handle a corner case that may or may not happen in real life, but is still worth protecting against". (b) pcrecpp.cc: "corrects a bug when negative radixes are used with regular expressions". (c) pcre_scanner.cc: avoid use of std::count() because not all systems have it. (d) Split off pcrecpparg.h from pcrecpp.h and had the former built by "configure" and the latter not, in order to fix a problem somebody had with compiling the Arg class on HP-UX. (e) Improve the error-handling of the C++ wrapper a little bit. (f) New tests for checking recursion limiting. 8. The pcre_memmove() function, which is used only if the environment does not have a standard memmove() function (and is therefore rarely compiled), contained two bugs: (a) use of int instead of size_t, and (b) it was not returning a result (though PCRE never actually uses the result). 9. In the POSIX regexec() interface, if nmatch is specified as a ridiculously large number - greater than INT_MAX/(3*sizeof(int)) - REG_ESPACE is returned instead of calling malloc() with an overflowing number that would most likely cause subsequent chaos. 10. The debugging option of pcretest was not showing the NO_AUTO_CAPTURE flag. 11. The POSIX flag REG_NOSUB is now supported. When a pattern that was compiled with this option is matched, the nmatch and pmatch options of regexec() are ignored. 12. Added REG_UTF8 to the POSIX interface. This is not defined by POSIX, but is provided in case anyone wants to the the POSIX interface with UTF-8 strings. 13. Added CXXLDFLAGS to the Makefile parameters to provide settings only on the C++ linking (needed for some HP-UX environments). 14. Avoid compiler warnings in get_ucpname() when compiled without UCP support (unused parameter) and in the pcre_printint() function (omitted "default" switch label when the default is to do nothing). 15. Added some code to make it possible, when PCRE is compiled as a C++ library, to replace subject pointers for pcre_exec() with a smart pointer class, thus making it possible to process discontinuous strings. 16. The two macros PCRE_EXPORT and PCRE_DATA_SCOPE are confusing, and perform much the same function. They were added by different people who were trying to make PCRE easy to compile on non-Unix systems. It has been suggested that PCRE_EXPORT be abolished now that there is more automatic apparatus for compiling on Windows systems. I have therefore replaced it with PCRE_DATA_SCOPE. This is set automatically for Windows; if not set it defaults to "extern" for C or "extern C" for C++, which works fine on Unix-like systems. It is now possible to override the value of PCRE_DATA_ SCOPE with something explicit in config.h. In addition: (a) pcreposix.h still had just "extern" instead of either of these macros; I have replaced it with PCRE_DATA_SCOPE. (b) Functions such as _pcre_xclass(), which are internal to the library, but external in the C sense, all had PCRE_EXPORT in their definitions. This is apparently wrong for the Windows case, so I have removed it. (It makes no difference on Unix-like systems.) 17. Added a new limit, MATCH_LIMIT_RECURSION, which limits the depth of nesting of recursive calls to match(). This is different to MATCH_LIMIT because that limits the total number of calls to match(), not all of which increase the depth of recursion. Limiting the recursion depth limits the amount of stack (or heap if NO_RECURSE is set) that is used. The default can be set when PCRE is compiled, and changed at run time. A patch from Google adds this functionality to the C++ interface. 18. Changes to the handling of Unicode character properties: (a) Updated the table to Unicode 4.1.0. (b) Recognize characters that are not in the table as "Cn" (undefined). (c) I revised the way the table is implemented to a much improved format which includes recognition of ranges. It now supports the ranges that are defined in UnicodeData.txt, and it also amalgamates other characters into ranges. This has reduced the number of entries in the table from around 16,000 to around 3,000, thus reducing its size considerably. I realized I did not need to use a tree structure after all - a binary chop search is just as efficient. Having reduced the number of entries, I extended their size from 6 bytes to 8 bytes to allow for more data. (d) Added support for Unicode script names via properties such as \p{Han}. 19. In UTF-8 mode, a backslash followed by a non-Ascii character was not matching that character. 20. When matching a repeated Unicode property with a minimum greater than zero, (for example \pL{2,}), PCRE could look past the end of the subject if it reached it while seeking the minimum number of characters. This could happen only if some of the characters were more than one byte long, because there is a check for at least the minimum number of bytes. 21. Refactored the implementation of \p and \P so as to be more general, to allow for more different types of property in future. This has changed the compiled form incompatibly. Anybody with saved compiled patterns that use \p or \P will have to recompile them. 22. Added "Any" and "L&" to the supported property types. 23. Recognize \x{...} as a code point specifier, even when not in UTF-8 mode, but give a compile time error if the value is greater than 0xff. 24. The man pages for pcrepartial, pcreprecompile, and pcre_compile2 were accidentally not being installed or uninstalled. 25. The pcre.h file was built from pcre.h.in, but the only changes that were made were to insert the current release number. This seemed silly, because it made things harder for people building PCRE on systems that don't run "configure". I have turned pcre.h into a distributed file, no longer built by "configure", with the version identification directly included. There is no longer a pcre.h.in file. However, this change necessitated a change to the pcre-config script as well. It is built from pcre-config.in, and one of the substitutions was the release number. I have updated configure.ac so that ./configure now finds the release number by grepping pcre.h. 26. Added the ability to run the tests under valgrind. Version 6.4 05-Sep-05 --------------------- 1. Change 6.0/10/(l) to pcregrep introduced a bug that caused separator lines "--" to be printed when multiple files were scanned, even when none of the -A, -B, or -C options were used. This is not compatible with Gnu grep, so I consider it to be a bug, and have restored the previous behaviour. 2. A couple of code tidies to get rid of compiler warnings. 3. The pcretest program used to cheat by referring to symbols in the library whose names begin with _pcre_. These are internal symbols that are not really supposed to be visible externally, and in some environments it is possible to suppress them. The cheating is now confined to including certain files from the library's source, which is a bit cleaner. 4. Renamed pcre.in as pcre.h.in to go with pcrecpp.h.in; it also makes the file's purpose clearer. 5. Reorganized pcre_ucp_findchar(). Version 6.3 15-Aug-05 --------------------- 1. The file libpcre.pc.in did not have general read permission in the tarball. 2. There were some problems when building without C++ support: (a) If C++ support was not built, "make install" and "make test" still tried to test it. (b) There were problems when the value of CXX was explicitly set. Some changes have been made to try to fix these, and ... (c) --disable-cpp can now be used to explicitly disable C++ support. (d) The use of @CPP_OBJ@ directly caused a blank line preceded by a backslash in a target when C++ was disabled. This confuses some versions of "make", apparently. Using an intermediate variable solves this. (Same for CPP_LOBJ.) 3. $(LINK_FOR_BUILD) now includes $(CFLAGS_FOR_BUILD) and $(LINK) (non-Windows) now includes $(CFLAGS) because these flags are sometimes necessary on certain architectures. 4. Added a setting of -export-symbols-regex to the link command to remove those symbols that are exported in the C sense, but actually are local within the library, and not documented. Their names all begin with "_pcre_". This is not a perfect job, because (a) we have to except some symbols that pcretest ("illegally") uses, and (b) the facility isn't always available (and never for static libraries). I have made a note to try to find a way round (a) in the future. Version 6.2 01-Aug-05 --------------------- 1. There was no test for integer overflow of quantifier values. A construction such as {1111111111111111} would give undefined results. What is worse, if a minimum quantifier for a parenthesized subpattern overflowed and became negative, the calculation of the memory size went wrong. This could have led to memory overwriting. 2. Building PCRE using VPATH was broken. Hopefully it is now fixed. 3. Added "b" to the 2nd argument of fopen() in dftables.c, for non-Unix-like operating environments where this matters. 4. Applied Giuseppe Maxia's patch to add additional features for controlling PCRE options from within the C++ wrapper. 5. Named capturing subpatterns were not being correctly counted when a pattern was compiled. This caused two problems: (a) If there were more than 100 such subpatterns, the calculation of the memory needed for the whole compiled pattern went wrong, leading to an overflow error. (b) Numerical back references of the form \12, where the number was greater than 9, were not recognized as back references, even though there were sufficient previous subpatterns. 6. Two minor patches to pcrecpp.cc in order to allow it to compile on older versions of gcc, e.g. 2.95.4. Version 6.1 21-Jun-05 --------------------- 1. There was one reference to the variable "posix" in pcretest.c that was not surrounded by "#if !defined NOPOSIX". 2. Make it possible to compile pcretest without DFA support, UTF8 support, or the cross-check on the old pcre_info() function, for the benefit of the cut-down version of PCRE that is currently imported into Exim. 3. A (silly) pattern starting with (?i)(?-i) caused an internal space allocation error. I've done the easy fix, which wastes 2 bytes for sensible patterns that start (?i) but I don't think that matters. The use of (?i) is just an example; this all applies to the other options as well. 4. Since libtool seems to echo the compile commands it is issuing, the output from "make" can be reduced a bit by putting "@" in front of each libtool compile command. 5. Patch from the folks at Google for configure.in to be a bit more thorough in checking for a suitable C++ installation before trying to compile the C++ stuff. This should fix a reported problem when a compiler was present, but no suitable headers. 6. The man pages all had just "PCRE" as their title. I have changed them to be the relevant file name. I have also arranged that these names are retained in the file doc/pcre.txt, which is a concatenation in text format of all the man pages except the little individual ones for each function. 7. The NON-UNIX-USE file had not been updated for the different set of source files that come with release 6. I also added a few comments about the C++ wrapper. Version 6.0 07-Jun-05 --------------------- 1. Some minor internal re-organization to help with my DFA experiments. 2. Some missing #ifdef SUPPORT_UCP conditionals in pcretest and printint that didn't matter for the library itself when fully configured, but did matter when compiling without UCP support, or within Exim, where the ucp files are not imported. 3. Refactoring of the library code to split up the various functions into different source modules. The addition of the new DFA matching code (see below) to a single monolithic source would have made it really too unwieldy, quite apart from causing all the code to be include in a statically linked application, when only some functions are used. This is relevant even without the DFA addition now that patterns can be compiled in one application and matched in another. The downside of splitting up is that there have to be some external functions and data tables that are used internally in different modules of the library but which are not part of the API. These have all had their names changed to start with "_pcre_" so that they are unlikely to clash with other external names. 4. Added an alternate matching function, pcre_dfa_exec(), which matches using a different (DFA) algorithm. Although it is slower than the original function, it does have some advantages for certain types of matching problem. 5. Upgrades to pcretest in order to test the features of pcre_dfa_exec(), including restarting after a partial match. 6. A patch for pcregrep that defines INVALID_FILE_ATTRIBUTES if it is not defined when compiling for Windows was sent to me. I have put it into the code, though I have no means of testing or verifying it. 7. Added the pcre_refcount() auxiliary function. 8. Added the PCRE_FIRSTLINE option. This constrains an unanchored pattern to match before or at the first newline in the subject string. In pcretest, the /f option on a pattern can be used to set this. 9. A repeated \w when used in UTF-8 mode with characters greater than 256 would behave wrongly. This has been present in PCRE since release 4.0. 10. A number of changes to the pcregrep command: (a) Refactored how -x works; insert ^(...)$ instead of setting PCRE_ANCHORED and checking the length, in preparation for adding something similar for -w. (b) Added the -w (match as a word) option. (c) Refactored the way lines are read and buffered so as to have more than one at a time available. (d) Implemented a pcregrep test script. (e) Added the -M (multiline match) option. This allows patterns to match over several lines of the subject. The buffering ensures that at least 8K, or the rest of the document (whichever is the shorter) is available for matching (and similarly the previous 8K for lookbehind assertions). (f) Changed the --help output so that it now says -w, --word-regex(p) instead of two lines, one with "regex" and the other with "regexp" because that confused at least one person since the short forms are the same. (This required a bit of code, as the output is generated automatically from a table. It wasn't just a text change.) (g) -- can be used to terminate pcregrep options if the next thing isn't an option but starts with a hyphen. Could be a pattern or a path name starting with a hyphen, for instance. (h) "-" can be given as a file name to represent stdin. (i) When file names are being printed, "(standard input)" is used for the standard input, for compatibility with GNU grep. Previously "" was used. (j) The option --label=xxx can be used to supply a name to be used for stdin when file names are being printed. There is no short form. (k) Re-factored the options decoding logic because we are going to add two more options that take data. Such options can now be given in four different ways, e.g. "-fname", "-f name", "--file=name", "--file name". (l) Added the -A, -B, and -C options for requesting that lines of context around matches be printed. (m) Added the -L option to print the names of files that do not contain any matching lines, that is, the complement of -l. (n) The return code is 2 if any file cannot be opened, but pcregrep does continue to scan other files. (o) The -s option was incorrectly implemented. For compatibility with other greps, it now suppresses the error message for a non-existent or non- accessible file (but not the return code). There is a new option called -q that suppresses the output of matching lines, which was what -s was previously doing. (p) Added --include and --exclude options to specify files for inclusion and exclusion when recursing. 11. The Makefile was not using the Autoconf-supported LDFLAGS macro properly. Hopefully, it now does. 12. Missing cast in pcre_study(). 13. Added an "uninstall" target to the makefile. 14. Replaced "extern" in the function prototypes in Makefile.in with "PCRE_DATA_SCOPE", which defaults to 'extern' or 'extern "C"' in the Unix world, but is set differently for Windows. 15. Added a second compiling function called pcre_compile2(). The only difference is that it has an extra argument, which is a pointer to an integer error code. When there is a compile-time failure, this is set non-zero, in addition to the error test pointer being set to point to an error message. The new argument may be NULL if no error number is required (but then you may as well call pcre_compile(), which is now just a wrapper). This facility is provided because some applications need a numeric error indication, but it has also enabled me to tidy up the way compile-time errors are handled in the POSIX wrapper. 16. Added VPATH=.libs to the makefile; this should help when building with one prefix path and installing with another. (Or so I'm told by someone who knows more about this stuff than I do.) 17. Added a new option, REG_DOTALL, to the POSIX function regcomp(). This passes PCRE_DOTALL to the pcre_compile() function, making the "." character match everything, including newlines. This is not POSIX-compatible, but somebody wanted the feature. From pcretest it can be activated by using both the P and the s flags. 18. AC_PROG_LIBTOOL appeared twice in Makefile.in. Removed one. 19. libpcre.pc was being incorrectly installed as executable. 20. A couple of places in pcretest check for end-of-line by looking for '\n'; it now also looks for '\r' so that it will work unmodified on Windows. 21. Added Google's contributed C++ wrapper to the distribution. 22. Added some untidy missing memory free() calls in pcretest, to keep Electric Fence happy when testing. Version 5.0 13-Sep-04 --------------------- 1. Internal change: literal characters are no longer packed up into items containing multiple characters in a single byte-string. Each character is now matched using a separate opcode. However, there may be more than one byte in the character in UTF-8 mode. 2. The pcre_callout_block structure has two new fields: pattern_position and next_item_length. These contain the offset in the pattern to the next match item, and its length, respectively. 3. The PCRE_AUTO_CALLOUT option for pcre_compile() requests the automatic insertion of callouts before each pattern item. Added the /C option to pcretest to make use of this. 4. On the advice of a Windows user, the lines #if defined(_WIN32) || defined(WIN32) _setmode( _fileno( stdout ), 0x8000 ); #endif /* defined(_WIN32) || defined(WIN32) */ have been added to the source of pcretest. This apparently does useful magic in relation to line terminators. 5. Changed "r" and "w" in the calls to fopen() in pcretest to "rb" and "wb" for the benefit of those environments where the "b" makes a difference. 6. The icc compiler has the same options as gcc, but "configure" doesn't seem to know about it. I have put a hack into configure.in that adds in code to set GCC=yes if CC=icc. This seems to end up at a point in the generated configure script that is early enough to affect the setting of compiler options, which is what is needed, but I have no means of testing whether it really works. (The user who reported this had patched the generated configure script, which of course I cannot do.) LATER: After change 22 below (new libtool files), the configure script seems to know about icc (and also ecc). Therefore, I have commented out this hack in configure.in. 7. Added support for pkg-config (2 patches were sent in). 8. Negated POSIX character classes that used a combination of internal tables were completely broken. These were [[:^alpha:]], [[:^alnum:]], and [[:^ascii]]. Typically, they would match almost any characters. The other POSIX classes were not broken in this way. 9. Matching the pattern "\b.*?" against "ab cd", starting at offset 1, failed to find the match, as PCRE was deluded into thinking that the match had to start at the start point or following a newline. The same bug applied to patterns with negative forward assertions or any backward assertions preceding ".*" at the start, unless the pattern required a fixed first character. This was a failing pattern: "(?!.bcd).*". The bug is now fixed. 10. In UTF-8 mode, when moving forwards in the subject after a failed match starting at the last subject character, bytes beyond the end of the subject string were read. 11. Renamed the variable "class" as "classbits" to make life easier for C++ users. (Previously there was a macro definition, but it apparently wasn't enough.) 12. Added the new field "tables" to the extra data so that tables can be passed in at exec time, or the internal tables can be re-selected. This allows a compiled regex to be saved and re-used at a later time by a different program that might have everything at different addresses. 13. Modified the pcre-config script so that, when run on Solaris, it shows a -R library as well as a -L library. 14. The debugging options of pcretest (-d on the command line or D on a pattern) showed incorrect output for anything following an extended class that contained multibyte characters and which was followed by a quantifier. 15. Added optional support for general category Unicode character properties via the \p, \P, and \X escapes. Unicode property support implies UTF-8 support. It adds about 90K to the size of the library. The meanings of the inbuilt class escapes such as \d and \s have NOT been changed. 16. Updated pcredemo.c to include calls to free() to release the memory for the compiled pattern. 17. The generated file chartables.c was being created in the source directory instead of in the building directory. This caused the build to fail if the source directory was different from the building directory, and was read-only. 18. Added some sample Win commands from Mark Tetrode into the NON-UNIX-USE file. No doubt somebody will tell me if they don't make sense... Also added Dan Mooney's comments about building on OpenVMS. 19. Added support for partial matching via the PCRE_PARTIAL option for pcre_exec() and the \P data escape in pcretest. 20. Extended pcretest with 3 new pattern features: (i) A pattern option of the form ">rest-of-line" causes pcretest to write the compiled pattern to the file whose name is "rest-of-line". This is a straight binary dump of the data, with the saved pointer to the character tables forced to be NULL. The study data, if any, is written too. After writing, pcretest reads a new pattern. (ii) If, instead of a pattern, ": new target : new target : use native compiler : use native linker : handle Windows platform correctly : ditto : ditto copy DLL to top builddir before testing As part of these changes, -no-undefined was removed again. This was reported to give trouble on HP-UX 11.0, so getting rid of it seems like a good idea in any case. 3. Some tidies to get rid of compiler warnings: . In the match_data structure, match_limit was an unsigned long int, whereas match_call_count was an int. I've made them both unsigned long ints. . In pcretest the fact that a const uschar * doesn't automatically cast to a void * provoked a warning. . Turning on some more compiler warnings threw up some "shadow" variables and a few more missing casts. 4. If PCRE was complied with UTF-8 support, but called without the PCRE_UTF8 option, a class that contained a single character with a value between 128 and 255 (e.g. /[\xFF]/) caused PCRE to crash. 5. If PCRE was compiled with UTF-8 support, but called without the PCRE_UTF8 option, a class that contained several characters, but with at least one whose value was between 128 and 255 caused PCRE to crash. Version 4.1 12-Mar-03 --------------------- 1. Compiling with gcc -pedantic found a couple of places where casts were needed, and a string in dftables.c that was longer than standard compilers are required to support. 2. Compiling with Sun's compiler found a few more places where the code could be tidied up in order to avoid warnings. 3. The variables for cross-compiling were called HOST_CC and HOST_CFLAGS; the first of these names is deprecated in the latest Autoconf in favour of the name CC_FOR_BUILD, because "host" is typically used to mean the system on which the compiled code will be run. I can't find a reference for HOST_CFLAGS, but by analogy I have changed it to CFLAGS_FOR_BUILD. 4. Added -no-undefined to the linking command in the Makefile, because this is apparently helpful for Windows. To make it work, also added "-L. -lpcre" to the linking step for the pcreposix library. 5. PCRE was failing to diagnose the case of two named groups with the same name. 6. A problem with one of PCRE's optimizations was discovered. PCRE remembers a literal character that is needed in the subject for a match, and scans along to ensure that it is present before embarking on the full matching process. This saves time in cases of nested unlimited repeats that are never going to match. Problem: the scan can take a lot of time if the subject is very long (e.g. megabytes), thus penalizing straightforward matches. It is now done only if the amount of subject to be scanned is less than 1000 bytes. 7. A lesser problem with the same optimization is that it was recording the first character of an anchored pattern as "needed", thus provoking a search right along the subject, even when the first match of the pattern was going to fail. The "needed" character is now not set for anchored patterns, unless it follows something in the pattern that is of non-fixed length. Thus, it still fulfils its original purpose of finding quick non-matches in cases of nested unlimited repeats, but isn't used for simple anchored patterns such as /^abc/. Version 4.0 17-Feb-03 --------------------- 1. If a comment in an extended regex that started immediately after a meta-item extended to the end of string, PCRE compiled incorrect data. This could lead to all kinds of weird effects. Example: /#/ was bad; /()#/ was bad; /a#/ was not. 2. Moved to autoconf 2.53 and libtool 1.4.2. 3. Perl 5.8 no longer needs "use utf8" for doing UTF-8 things. Consequently, the special perltest8 script is no longer needed - all the tests can be run from a single perltest script. 4. From 5.004, Perl has not included the VT character (0x0b) in the set defined by \s. It has now been removed in PCRE. This means it isn't recognized as whitespace in /x regexes too, which is the same as Perl. Note that the POSIX class [:space:] *does* include VT, thereby creating a mess. 5. Added the class [:blank:] (a GNU extension from Perl 5.8) to match only space and tab. 6. Perl 5.005 was a long time ago. It's time to amalgamate the tests that use its new features into the main test script, reducing the number of scripts. 7. Perl 5.8 has changed the meaning of patterns like /a(?i)b/. Earlier versions were backward compatible, and made the (?i) apply to the whole pattern, as if /i were given. Now it behaves more logically, and applies the option setting only to what follows. PCRE has been changed to follow suit. However, if it finds options settings right at the start of the pattern, it extracts them into the global options, as before. Thus, they show up in the info data. 8. Added support for the \Q...\E escape sequence. Characters in between are treated as literals. This is slightly different from Perl in that $ and @ are also handled as literals inside the quotes. In Perl, they will cause variable interpolation. Note the following examples: Pattern PCRE matches Perl matches \Qabc$xyz\E abc$xyz abc followed by the contents of $xyz \Qabc\$xyz\E abc\$xyz abc\$xyz \Qabc\E\$\Qxyz\E abc$xyz abc$xyz For compatibility with Perl, \Q...\E sequences are recognized inside character classes as well as outside them. 9. Re-organized 3 code statements in pcretest to avoid "overflow in floating-point constant arithmetic" warnings from a Microsoft compiler. Added a (size_t) cast to one statement in pcretest and one in pcreposix to avoid signed/unsigned warnings. 10. SunOS4 doesn't have strtoul(). This was used only for unpicking the -o option for pcretest, so I've replaced it by a simple function that does just that job. 11. pcregrep was ending with code 0 instead of 2 for the commands "pcregrep" or "pcregrep -". 12. Added "possessive quantifiers" ?+, *+, ++, and {,}+ which come from Sun's Java package. This provides some syntactic sugar for simple cases of what my documentation calls "once-only subpatterns". A pattern such as x*+ is the same as (?>x*). In other words, if what is inside (?>...) is just a single repeated item, you can use this simplified notation. Note that only makes sense with greedy quantifiers. Consequently, the use of the possessive quantifier forces greediness, whatever the setting of the PCRE_UNGREEDY option. 13. A change of greediness default within a pattern was not taking effect at the current level for patterns like /(b+(?U)a+)/. It did apply to parenthesized subpatterns that followed. Patterns like /b+(?U)a+/ worked because the option was abstracted outside. 14. PCRE now supports the \G assertion. It is true when the current matching position is at the start point of the match. This differs from \A when the starting offset is non-zero. Used with the /g option of pcretest (or similar code), it works in the same way as it does for Perl's /g option. If all alternatives of a regex begin with \G, the expression is anchored to the start match position, and the "anchored" flag is set in the compiled expression. 15. Some bugs concerning the handling of certain option changes within patterns have been fixed. These applied to options other than (?ims). For example, "a(?x: b c )d" did not match "XabcdY" but did match "Xa b c dY". It should have been the other way round. Some of this was related to change 7 above. 16. PCRE now gives errors for /[.x.]/ and /[=x=]/ as unsupported POSIX features, as Perl does. Previously, PCRE gave the warnings only for /[[.x.]]/ and /[[=x=]]/. PCRE now also gives an error for /[:name:]/ because it supports POSIX classes only within a class (e.g. /[[:alpha:]]/). 17. Added support for Perl's \C escape. This matches one byte, even in UTF8 mode. Unlike ".", it always matches newline, whatever the setting of PCRE_DOTALL. However, PCRE does not permit \C to appear in lookbehind assertions. Perl allows it, but it doesn't (in general) work because it can't calculate the length of the lookbehind. At least, that's the case for Perl 5.8.0 - I've been told they are going to document that it doesn't work in future. 18. Added an error diagnosis for escapes that PCRE does not support: these are \L, \l, \N, \P, \p, \U, \u, and \X. 19. Although correctly diagnosing a missing ']' in a character class, PCRE was reading past the end of the pattern in cases such as /[abcd/. 20. PCRE was getting more memory than necessary for patterns with classes that contained both POSIX named classes and other characters, e.g. /[[:space:]abc/. 21. Added some code, conditional on #ifdef VPCOMPAT, to make life easier for compiling PCRE for use with Virtual Pascal. 22. Small fix to the Makefile to make it work properly if the build is done outside the source tree. 23. Added a new extension: a condition to go with recursion. If a conditional subpattern starts with (?(R) the "true" branch is used if recursion has happened, whereas the "false" branch is used only at the top level. 24. When there was a very long string of literal characters (over 255 bytes without UTF support, over 250 bytes with UTF support), the computation of how much memory was required could be incorrect, leading to segfaults or other strange effects. 25. PCRE was incorrectly assuming anchoring (either to start of subject or to start of line for a non-DOTALL pattern) when a pattern started with (.*) and there was a subsequent back reference to those brackets. This meant that, for example, /(.*)\d+\1/ failed to match "abc123bc". Unfortunately, it isn't possible to check for precisely this case. All we can do is abandon the optimization if .* occurs inside capturing brackets when there are any back references whatsoever. (See below for a better fix that came later.) 26. The handling of the optimization for finding the first character of a non-anchored pattern, and for finding a character that is required later in the match were failing in some cases. This didn't break the matching; it just failed to optimize when it could. The way this is done has been re-implemented. 27. Fixed typo in error message for invalid (?R item (it said "(?p"). 28. Added a new feature that provides some of the functionality that Perl provides with (?{...}). The facility is termed a "callout". The way it is done in PCRE is for the caller to provide an optional function, by setting pcre_callout to its entry point. Like pcre_malloc and pcre_free, this is a global variable. By default it is unset, which disables all calling out. To get the function called, the regex must include (?C) at appropriate points. This is, in fact, equivalent to (?C0), and any number <= 255 may be given with (?C). This provides a means of identifying different callout points. When PCRE reaches such a point in the regex, if pcre_callout has been set, the external function is called. It is provided with data in a structure called pcre_callout_block, which is defined in pcre.h. If the function returns 0, matching continues; if it returns a non-zero value, the match at the current point fails. However, backtracking will occur if possible. [This was changed later and other features added - see item 49 below.] 29. pcretest is upgraded to test the callout functionality. It provides a callout function that displays information. By default, it shows the start of the match and the current position in the text. There are some new data escapes to vary what happens: \C+ in addition, show current contents of captured substrings \C- do not supply a callout function \C!n return 1 when callout number n is reached \C!n!m return 1 when callout number n is reached for the mth time 30. If pcregrep was called with the -l option and just a single file name, it output "" if a match was found, instead of the file name. 31. Improve the efficiency of the POSIX API to PCRE. If the number of capturing slots is less than POSIX_MALLOC_THRESHOLD, use a block on the stack to pass to pcre_exec(). This saves a malloc/free per call. The default value of POSIX_MALLOC_THRESHOLD is 10; it can be changed by --with-posix-malloc-threshold when configuring. 32. The default maximum size of a compiled pattern is 64K. There have been a few cases of people hitting this limit. The code now uses macros to handle the storing of links as offsets within the compiled pattern. It defaults to 2-byte links, but this can be changed to 3 or 4 bytes by --with-link-size when configuring. Tests 2 and 5 work only with 2-byte links because they output debugging information about compiled patterns. 33. Internal code re-arrangements: (a) Moved the debugging function for printing out a compiled regex into its own source file (printint.c) and used #include to pull it into pcretest.c and, when DEBUG is defined, into pcre.c, instead of having two separate copies. (b) Defined the list of op-code names for debugging as a macro in internal.h so that it is next to the definition of the opcodes. (c) Defined a table of op-code lengths for simpler skipping along compiled code. This is again a macro in internal.h so that it is next to the definition of the opcodes. 34. Added support for recursive calls to individual subpatterns, along the lines of Robin Houston's patch (but implemented somewhat differently). 35. Further mods to the Makefile to help Win32. Also, added code to pcregrep to allow it to read and process whole directories in Win32. This code was contributed by Lionel Fourquaux; it has not been tested by me. 36. Added support for named subpatterns. The Python syntax (?P...) is used to name a group. Names consist of alphanumerics and underscores, and must be unique. Back references use the syntax (?P=name) and recursive calls use (?P>name) which is a PCRE extension to the Python extension. Groups still have numbers. The function pcre_fullinfo() can be used after compilation to extract a name/number map. There are three relevant calls: PCRE_INFO_NAMEENTRYSIZE yields the size of each entry in the map PCRE_INFO_NAMECOUNT yields the number of entries PCRE_INFO_NAMETABLE yields a pointer to the map. The map is a vector of fixed-size entries. The size of each entry depends on the length of the longest name used. The first two bytes of each entry are the group number, most significant byte first. There follows the corresponding name, zero terminated. The names are in alphabetical order. 37. Make the maximum literal string in the compiled code 250 for the non-UTF-8 case instead of 255. Making it the same both with and without UTF-8 support means that the same test output works with both. 38. There was a case of malloc(0) in the POSIX testing code in pcretest. Avoid calling malloc() with a zero argument. 39. Change 25 above had to resort to a heavy-handed test for the .* anchoring optimization. I've improved things by keeping a bitmap of backreferences with numbers 1-31 so that if .* occurs inside capturing brackets that are not in fact referenced, the optimization can be applied. It is unlikely that a relevant occurrence of .* (i.e. one which might indicate anchoring or forcing the match to follow \n) will appear inside brackets with a number greater than 31, but if it does, any back reference > 31 suppresses the optimization. 40. Added a new compile-time option PCRE_NO_AUTO_CAPTURE. This has the effect of disabling numbered capturing parentheses. Any opening parenthesis that is not followed by ? behaves as if it were followed by ?: but named parentheses can still be used for capturing (and they will acquire numbers in the usual way). 41. Redesigned the return codes from the match() function into yes/no/error so that errors can be passed back from deep inside the nested calls. A malloc failure while inside a recursive subpattern call now causes the PCRE_ERROR_NOMEMORY return instead of quietly going wrong. 42. It is now possible to set a limit on the number of times the match() function is called in a call to pcre_exec(). This facility makes it possible to limit the amount of recursion and backtracking, though not in a directly obvious way, because the match() function is used in a number of different circumstances. The count starts from zero for each position in the subject string (for non-anchored patterns). The default limit is, for compatibility, a large number, namely 10 000 000. You can change this in two ways: (a) When configuring PCRE before making, you can use --with-match-limit=n to set a default value for the compiled library. (b) For each call to pcre_exec(), you can pass a pcre_extra block in which a different value is set. See 45 below. If the limit is exceeded, pcre_exec() returns PCRE_ERROR_MATCHLIMIT. 43. Added a new function pcre_config(int, void *) to enable run-time extraction of things that can be changed at compile time. The first argument specifies what is wanted and the second points to where the information is to be placed. The current list of available information is: PCRE_CONFIG_UTF8 The output is an integer that is set to one if UTF-8 support is available; otherwise it is set to zero. PCRE_CONFIG_NEWLINE The output is an integer that it set to the value of the code that is used for newline. It is either LF (10) or CR (13). PCRE_CONFIG_LINK_SIZE The output is an integer that contains the number of bytes used for internal linkage in compiled expressions. The value is 2, 3, or 4. See item 32 above. PCRE_CONFIG_POSIX_MALLOC_THRESHOLD The output is an integer that contains the threshold above which the POSIX interface uses malloc() for output vectors. See item 31 above. PCRE_CONFIG_MATCH_LIMIT The output is an unsigned integer that contains the default limit of the number of match() calls in a pcre_exec() execution. See 42 above. 44. pcretest has been upgraded by the addition of the -C option. This causes it to extract all the available output from the new pcre_config() function, and to output it. The program then exits immediately. 45. A need has arisen to pass over additional data with calls to pcre_exec() in order to support additional features. One way would have been to define pcre_exec2() (for example) with extra arguments, but this would not have been extensible, and would also have required all calls to the original function to be mapped to the new one. Instead, I have chosen to extend the mechanism that is used for passing in "extra" data from pcre_study(). The pcre_extra structure is now exposed and defined in pcre.h. It currently contains the following fields: flags a bitmap indicating which of the following fields are set study_data opaque data from pcre_study() match_limit a way of specifying a limit on match() calls for a specific call to pcre_exec() callout_data data for callouts (see 49 below) The flag bits are also defined in pcre.h, and are PCRE_EXTRA_STUDY_DATA PCRE_EXTRA_MATCH_LIMIT PCRE_EXTRA_CALLOUT_DATA The pcre_study() function now returns one of these new pcre_extra blocks, with the actual study data pointed to by the study_data field, and the PCRE_EXTRA_STUDY_DATA flag set. This can be passed directly to pcre_exec() as before. That is, this change is entirely upwards-compatible and requires no change to existing code. If you want to pass in additional data to pcre_exec(), you can either place it in a pcre_extra block provided by pcre_study(), or create your own pcre_extra block. 46. pcretest has been extended to test the PCRE_EXTRA_MATCH_LIMIT feature. If a data string contains the escape sequence \M, pcretest calls pcre_exec() several times with different match limits, until it finds the minimum value needed for pcre_exec() to complete. The value is then output. This can be instructive; for most simple matches the number is quite small, but for pathological cases it gets very large very quickly. 47. There's a new option for pcre_fullinfo() called PCRE_INFO_STUDYSIZE. It returns the size of the data block pointed to by the study_data field in a pcre_extra block, that is, the value that was passed as the argument to pcre_malloc() when PCRE was getting memory in which to place the information created by pcre_study(). The fourth argument should point to a size_t variable. pcretest has been extended so that this information is shown after a successful pcre_study() call when information about the compiled regex is being displayed. 48. Cosmetic change to Makefile: there's no need to have / after $(DESTDIR) because what follows is always an absolute path. (Later: it turns out that this is more than cosmetic for MinGW, because it doesn't like empty path components.) 49. Some changes have been made to the callout feature (see 28 above): (i) A callout function now has three choices for what it returns: 0 => success, carry on matching > 0 => failure at this point, but backtrack if possible < 0 => serious error, return this value from pcre_exec() Negative values should normally be chosen from the set of PCRE_ERROR_xxx values. In particular, returning PCRE_ERROR_NOMATCH forces a standard "match failed" error. The error number PCRE_ERROR_CALLOUT is reserved for use by callout functions. It will never be used by PCRE itself. (ii) The pcre_extra structure (see 45 above) has a void * field called callout_data, with corresponding flag bit PCRE_EXTRA_CALLOUT_DATA. The pcre_callout_block structure has a field of the same name. The contents of the field passed in the pcre_extra structure are passed to the callout function in the corresponding field in the callout block. This makes it easier to use the same callout-containing regex from multiple threads. For testing, the pcretest program has a new data escape \C*n pass the number n (may be negative) as callout_data If the callout function in pcretest receives a non-zero value as callout_data, it returns that value. 50. Makefile wasn't handling CFLAGS properly when compiling dftables. Also, there were some redundant $(CFLAGS) in commands that are now specified as $(LINK), which already includes $(CFLAGS). 51. Extensions to UTF-8 support are listed below. These all apply when (a) PCRE has been compiled with UTF-8 support *and* pcre_compile() has been compiled with the PCRE_UTF8 flag. Patterns that are compiled without that flag assume one-byte characters throughout. Note that case-insensitive matching applies only to characters whose values are less than 256. PCRE doesn't support the notion of cases for higher-valued characters. (i) A character class whose characters are all within 0-255 is handled as a bit map, and the map is inverted for negative classes. Previously, a character > 255 always failed to match such a class; however it should match if the class was a negative one (e.g. [^ab]). This has been fixed. (ii) A negated character class with a single character < 255 is coded as "not this character" (OP_NOT). This wasn't working properly when the test character was multibyte, either singly or repeated. (iii) Repeats of multibyte characters are now handled correctly in UTF-8 mode, for example: \x{100}{2,3}. (iv) The character escapes \b, \B, \d, \D, \s, \S, \w, and \W (either singly or repeated) now correctly test multibyte characters. However, PCRE doesn't recognize any characters with values greater than 255 as digits, spaces, or word characters. Such characters always match \D, \S, and \W, and never match \d, \s, or \w. (v) Classes may now contain characters and character ranges with values greater than 255. For example: [ab\x{100}-\x{400}]. (vi) pcregrep now has a --utf-8 option (synonym -u) which makes it call PCRE in UTF-8 mode. 52. The info request value PCRE_INFO_FIRSTCHAR has been renamed PCRE_INFO_FIRSTBYTE because it is a byte value. However, the old name is retained for backwards compatibility. (Note that LASTLITERAL is also a byte value.) 53. The single man page has become too large. I have therefore split it up into a number of separate man pages. These also give rise to individual HTML pages; these are now put in a separate directory, and there is an index.html page that lists them all. Some hyperlinking between the pages has been installed. 54. Added convenience functions for handling named capturing parentheses. 55. Unknown escapes inside character classes (e.g. [\M]) and escapes that aren't interpreted therein (e.g. [\C]) are literals in Perl. This is now also true in PCRE, except when the PCRE_EXTENDED option is set, in which case they are faulted. 56. Introduced HOST_CC and HOST_CFLAGS which can be set in the environment when calling configure. These values are used when compiling the dftables.c program which is run to generate the source of the default character tables. They default to the values of CC and CFLAGS. If you are cross-compiling PCRE, you will need to set these values. 57. Updated the building process for Windows DLL, as provided by Fred Cox. Version 3.9 02-Jan-02 --------------------- 1. A bit of extraneous text had somehow crept into the pcregrep documentation. 2. If --disable-static was given, the building process failed when trying to build pcretest and pcregrep. (For some reason it was using libtool to compile them, which is not right, as they aren't part of the library.) Version 3.8 18-Dec-01 --------------------- 1. The experimental UTF-8 code was completely screwed up. It was packing the bytes in the wrong order. How dumb can you get? Version 3.7 29-Oct-01 --------------------- 1. In updating pcretest to check change 1 of version 3.6, I screwed up. This caused pcretest, when used on the test data, to segfault. Unfortunately, this didn't happen under Solaris 8, where I normally test things. 2. The Makefile had to be changed to make it work on BSD systems, where 'make' doesn't seem to recognize that ./xxx and xxx are the same file. (This entry isn't in ChangeLog distributed with 3.7 because I forgot when I hastily made this fix an hour or so after the initial 3.7 release.) Version 3.6 23-Oct-01 --------------------- 1. Crashed with /(sens|respons)e and \1ibility/ and "sense and sensibility" if offsets passed as NULL with zero offset count. 2. The config.guess and config.sub files had not been updated when I moved to the latest autoconf. Version 3.5 15-Aug-01 --------------------- 1. Added some missing #if !defined NOPOSIX conditionals in pcretest.c that had been forgotten. 2. By using declared but undefined structures, we can avoid using "void" definitions in pcre.h while keeping the internal definitions of the structures private. 3. The distribution is now built using autoconf 2.50 and libtool 1.4. From a user point of view, this means that both static and shared libraries are built by default, but this can be individually controlled. More of the work of handling this static/shared cases is now inside libtool instead of PCRE's make file. 4. The pcretest utility is now installed along with pcregrep because it is useful for users (to test regexs) and by doing this, it automatically gets relinked by libtool. The documentation has been turned into a man page, so there are now .1, .txt, and .html versions in /doc. 5. Upgrades to pcregrep: (i) Added long-form option names like gnu grep. (ii) Added --help to list all options with an explanatory phrase. (iii) Added -r, --recursive to recurse into sub-directories. (iv) Added -f, --file to read patterns from a file. 6. pcre_exec() was referring to its "code" argument before testing that argument for NULL (and giving an error if it was NULL). 7. Upgraded Makefile.in to allow for compiling in a different directory from the source directory. 8. Tiny buglet in pcretest: when pcre_fullinfo() was called to retrieve the options bits, the pointer it was passed was to an int instead of to an unsigned long int. This mattered only on 64-bit systems. 9. Fixed typo (3.4/1) in pcre.h again. Sigh. I had changed pcre.h (which is generated) instead of pcre.in, which it its source. Also made the same change in several of the .c files. 10. A new release of gcc defines printf() as a macro, which broke pcretest because it had an ifdef in the middle of a string argument for printf(). Fixed by using separate calls to printf(). 11. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure script, to force use of CR or LF instead of \n in the source. On non-Unix systems, the value can be set in config.h. 12. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an absolute limit. Changed the text of the error message to make this clear, and likewise updated the man page. 13. The limit of 99 on the number of capturing subpatterns has been removed. The new limit is 65535, which I hope will not be a "real" limit. Version 3.4 22-Aug-00 --------------------- 1. Fixed typo in pcre.h: unsigned const char * changed to const unsigned char *. 2. Diagnose condition (?(0) as an error instead of crashing on matching. Version 3.3 01-Aug-00 --------------------- 1. If an octal character was given, but the value was greater than \377, it was not getting masked to the least significant bits, as documented. This could lead to crashes in some systems. 2. Perl 5.6 (if not earlier versions) accepts classes like [a-\d] and treats the hyphen as a literal. PCRE used to give an error; it now behaves like Perl. 3. Added the functions pcre_free_substring() and pcre_free_substring_list(). These just pass their arguments on to (pcre_free)(), but they are provided because some uses of PCRE bind it to non-C systems that can call its functions, but cannot call free() or pcre_free() directly. 4. Add "make test" as a synonym for "make check". Corrected some comments in the Makefile. 5. Add $(DESTDIR)/ in front of all the paths in the "install" target in the Makefile. 6. Changed the name of pgrep to pcregrep, because Solaris has introduced a command called pgrep for grepping around the active processes. 7. Added the beginnings of support for UTF-8 character strings. 8. Arranged for the Makefile to pass over the settings of CC, CFLAGS, and RANLIB to ./ltconfig so that they are used by libtool. I think these are all the relevant ones. (AR is not passed because ./ltconfig does its own figuring out for the ar command.) Version 3.2 12-May-00 --------------------- This is purely a bug fixing release. 1. If the pattern /((Z)+|A)*/ was matched agained ZABCDEFG it matched Z instead of ZA. This was just one example of several cases that could provoke this bug, which was introduced by change 9 of version 2.00. The code for breaking infinite loops after an iteration that matches an empty string was't working correctly. 2. The pcretest program was not imitating Perl correctly for the pattern /a*/g when matched against abbab (for example). After matching an empty string, it wasn't forcing anchoring when setting PCRE_NOTEMPTY for the next attempt; this caused it to match further down the string than it should. 3. The code contained an inclusion of sys/types.h. It isn't clear why this was there because it doesn't seem to be needed, and it causes trouble on some systems, as it is not a Standard C header. It has been removed. 4. Made 4 silly changes to the source to avoid stupid compiler warnings that were reported on the Macintosh. The changes were from while ((c = *(++ptr)) != 0 && c != '\n'); to while ((c = *(++ptr)) != 0 && c != '\n') ; Totally extraordinary, but if that's what it takes... 5. PCRE is being used in one environment where neither memmove() nor bcopy() is available. Added HAVE_BCOPY and an autoconf test for it; if neither HAVE_MEMMOVE nor HAVE_BCOPY is set, use a built-in emulation function which assumes the way PCRE uses memmove() (always moving upwards). 6. PCRE is being used in one environment where strchr() is not available. There was only one use in pcre.c, and writing it out to avoid strchr() probably gives faster code anyway. Version 3.1 09-Feb-00 --------------------- The only change in this release is the fixing of some bugs in Makefile.in for the "install" target: (1) It was failing to install pcreposix.h. (2) It was overwriting the pcre.3 man page with the pcreposix.3 man page. Version 3.0 01-Feb-00 --------------------- 1. Add support for the /+ modifier to perltest (to output $` like it does in pcretest). 2. Add support for the /g modifier to perltest. 3. Fix pcretest so that it behaves even more like Perl for /g when the pattern matches null strings. 4. Fix perltest so that it doesn't do unwanted things when fed an empty pattern. Perl treats empty patterns specially - it reuses the most recent pattern, which is not what we want. Replace // by /(?#)/ in order to avoid this effect. 5. The POSIX interface was broken in that it was just handing over the POSIX captured string vector to pcre_exec(), but (since release 2.00) PCRE has required a bigger vector, with some working space on the end. This means that the POSIX wrapper now has to get and free some memory, and copy the results. 6. Added some simple autoconf support, placing the test data and the documentation in separate directories, re-organizing some of the information files, and making it build pcre-config (a GNU standard). Also added libtool support for building PCRE as a shared library, which is now the default. 7. Got rid of the leading zero in the definition of PCRE_MINOR because 08 and 09 are not valid octal constants. Single digits will be used for minor values less than 10. 8. Defined REG_EXTENDED and REG_NOSUB as zero in the POSIX header, so that existing programs that set these in the POSIX interface can use PCRE without modification. 9. Added a new function, pcre_fullinfo() with an extensible interface. It can return all that pcre_info() returns, plus additional data. The pcre_info() function is retained for compatibility, but is considered to be obsolete. 10. Added experimental recursion feature (?R) to handle one common case that Perl 5.6 will be able to do with (?p{...}). 11. Added support for POSIX character classes like [:alpha:], which Perl is adopting. Version 2.08 31-Aug-99 ---------------------- 1. When startoffset was not zero and the pattern began with ".*", PCRE was not trying to match at the startoffset position, but instead was moving forward to the next newline as if a previous match had failed. 2. pcretest was not making use of PCRE_NOTEMPTY when repeating for /g and /G, and could get into a loop if a null string was matched other than at the start of the subject. 3. Added definitions of PCRE_MAJOR and PCRE_MINOR to pcre.h so the version can be distinguished at compile time, and for completeness also added PCRE_DATE. 5. Added Paul Sokolovsky's minor changes to make it easy to compile a Win32 DLL in GnuWin32 environments. Version 2.07 29-Jul-99 ---------------------- 1. The documentation is now supplied in plain text form and HTML as well as in the form of man page sources. 2. C++ compilers don't like assigning (void *) values to other pointer types. In particular this affects malloc(). Although there is no problem in Standard C, I've put in casts to keep C++ compilers happy. 3. Typo on pcretest.c; a cast of (unsigned char *) in the POSIX regexec() call should be (const char *). 4. If NOPOSIX is defined, pcretest.c compiles without POSIX support. This may be useful for non-Unix systems who don't want to bother with the POSIX stuff. However, I haven't made this a standard facility. The documentation doesn't mention it, and the Makefile doesn't support it. 5. The Makefile now contains an "install" target, with editable destinations at the top of the file. The pcretest program is not installed. 6. pgrep -V now gives the PCRE version number and date. 7. Fixed bug: a zero repetition after a literal string (e.g. /abcde{0}/) was causing the entire string to be ignored, instead of just the last character. 8. If a pattern like /"([^\\"]+|\\.)*"/ is applied in the normal way to a non-matching string, it can take a very, very long time, even for strings of quite modest length, because of the nested recursion. PCRE now does better in some of these cases. It does this by remembering the last required literal character in the pattern, and pre-searching the subject to ensure it is present before running the real match. In other words, it applies a heuristic to detect some types of certain failure quickly, and in the above example, if presented with a string that has no trailing " it gives "no match" very quickly. 9. A new runtime option PCRE_NOTEMPTY causes null string matches to be ignored; other alternatives are tried instead. Version 2.06 09-Jun-99 ---------------------- 1. Change pcretest's output for amount of store used to show just the code space, because the remainder (the data block) varies in size between 32-bit and 64-bit systems. 2. Added an extra argument to pcre_exec() to supply an offset in the subject to start matching at. This allows lookbehinds to work when searching for multiple occurrences in a string. 3. Added additional options to pcretest for testing multiple occurrences: /+ outputs the rest of the string that follows a match /g loops for multiple occurrences, using the new startoffset argument /G loops for multiple occurrences by passing an incremented pointer 4. PCRE wasn't doing the "first character" optimization for patterns starting with \b or \B, though it was doing it for other lookbehind assertions. That is, it wasn't noticing that a match for a pattern such as /\bxyz/ has to start with the letter 'x'. On long subject strings, this gives a significant speed-up. Version 2.05 21-Apr-99 ---------------------- 1. Changed the type of magic_number from int to long int so that it works properly on 16-bit systems. 2. Fixed a bug which caused patterns starting with .* not to work correctly when the subject string contained newline characters. PCRE was assuming anchoring for such patterns in all cases, which is not correct because .* will not pass a newline unless PCRE_DOTALL is set. It now assumes anchoring only if DOTALL is set at top level; otherwise it knows that patterns starting with .* must be retried after every newline in the subject. Version 2.04 18-Feb-99 ---------------------- 1. For parenthesized subpatterns with repeats whose minimum was zero, the computation of the store needed to hold the pattern was incorrect (too large). If such patterns were nested a few deep, this could multiply and become a real problem. 2. Added /M option to pcretest to show the memory requirement of a specific pattern. Made -m a synonym of -s (which does this globally) for compatibility. 3. Subpatterns of the form (regex){n,m} (i.e. limited maximum) were being compiled in such a way that the backtracking after subsequent failure was pessimal. Something like (a){0,3} was compiled as (a)?(a)?(a)? instead of ((a)((a)(a)?)?)? with disastrous performance if the maximum was of any size. Version 2.03 02-Feb-99 ---------------------- 1. Fixed typo and small mistake in man page. 2. Added 4th condition (GPL supersedes if conflict) and created separate LICENCE file containing the conditions. 3. Updated pcretest so that patterns such as /abc\/def/ work like they do in Perl, that is the internal \ allows the delimiter to be included in the pattern. Locked out the use of \ as a delimiter. If \ immediately follows the final delimiter, add \ to the end of the pattern (to test the error). 4. Added the convenience functions for extracting substrings after a successful match. Updated pcretest to make it able to test these functions. Version 2.02 14-Jan-99 ---------------------- 1. Initialized the working variables associated with each extraction so that their saving and restoring doesn't refer to uninitialized store. 2. Put dummy code into study.c in order to trick the optimizer of the IBM C compiler for OS/2 into generating correct code. Apparently IBM isn't going to fix the problem. 3. Pcretest: the timing code wasn't using LOOPREPEAT for timing execution calls, and wasn't printing the correct value for compiling calls. Increased the default value of LOOPREPEAT, and the number of significant figures in the times. 4. Changed "/bin/rm" in the Makefile to "-rm" so it works on Windows NT. 5. Renamed "deftables" as "dftables" to get it down to 8 characters, to avoid a building problem on Windows NT with a FAT file system. Version 2.01 21-Oct-98 ---------------------- 1. Changed the API for pcre_compile() to allow for the provision of a pointer to character tables built by pcre_maketables() in the current locale. If NULL is passed, the default tables are used. Version 2.00 24-Sep-98 ---------------------- 1. Since the (>?) facility is in Perl 5.005, don't require PCRE_EXTRA to enable it any more. 2. Allow quantification of (?>) groups, and make it work correctly. 3. The first character computation wasn't working for (?>) groups. 4. Correct the implementation of \Z (it is permitted to match on the \n at the end of the subject) and add 5.005's \z, which really does match only at the very end of the subject. 5. Remove the \X "cut" facility; Perl doesn't have it, and (?> is neater. 6. Remove the ability to specify CASELESS, MULTILINE, DOTALL, and DOLLAR_END_ONLY at runtime, to make it possible to implement the Perl 5.005 localized options. All options to pcre_study() were also removed. 7. Add other new features from 5.005: $(?<= positive lookbehind $(?a*))*/ (a PCRE_EXTRA facility). Version 1.00 18-Nov-97 ---------------------- 1. Added compile-time macros to support systems such as SunOS4 which don't have memmove() or strerror() but have other things that can be used instead. 2. Arranged that "make clean" removes the executables. Version 0.99 27-Oct-97 ---------------------- 1. Fixed bug in code for optimizing classes with only one character. It was initializing a 32-byte map regardless, which could cause it to run off the end of the memory it had got. 2. Added, conditional on PCRE_EXTRA, the proposed (?>REGEX) construction. Version 0.98 22-Oct-97 ---------------------- 1. Fixed bug in code for handling temporary memory usage when there are more back references than supplied space in the ovector. This could cause segfaults. Version 0.97 21-Oct-97 ---------------------- 1. Added the \X "cut" facility, conditional on PCRE_EXTRA. 2. Optimized negated single characters not to use a bit map. 3. Brought error texts together as macro definitions; clarified some of them; fixed one that was wrong - it said "range out of order" when it meant "invalid escape sequence". 4. Changed some char * arguments to const char *. 5. Added PCRE_NOTBOL and PCRE_NOTEOL (from POSIX). 6. Added the POSIX-style API wrapper in pcreposix.a and testing facilities in pcretest. Version 0.96 16-Oct-97 ---------------------- 1. Added a simple "pgrep" utility to the distribution. 2. Fixed an incompatibility with Perl: "{" is now treated as a normal character unless it appears in one of the precise forms "{ddd}", "{ddd,}", or "{ddd,ddd}" where "ddd" means "one or more decimal digits". 3. Fixed serious bug. If a pattern had a back reference, but the call to pcre_exec() didn't supply a large enough ovector to record the related identifying subpattern, the match always failed. PCRE now remembers the number of the largest back reference, and gets some temporary memory in which to save the offsets during matching if necessary, in order to ensure that backreferences always work. 4. Increased the compatibility with Perl in a number of ways: (a) . no longer matches \n by default; an option PCRE_DOTALL is provided to request this handling. The option can be set at compile or exec time. (b) $ matches before a terminating newline by default; an option PCRE_DOLLAR_ENDONLY is provided to override this (but not in multiline mode). The option can be set at compile or exec time. (c) The handling of \ followed by a digit other than 0 is now supposed to be the same as Perl's. If the decimal number it represents is less than 10 or there aren't that many previous left capturing parentheses, an octal escape is read. Inside a character class, it's always an octal escape, even if it is a single digit. (d) An escaped but undefined alphabetic character is taken as a literal, unless PCRE_EXTRA is set. Currently this just reserves the remaining escapes. (e) {0} is now permitted. (The previous item is removed from the compiled pattern). 5. Changed all the names of code files so that the basic parts are no longer than 10 characters, and abolished the teeny "globals.c" file. 6. Changed the handling of character classes; they are now done with a 32-byte bit map always. 7. Added the -d and /D options to pcretest to make it possible to look at the internals of compilation without having to recompile pcre. Version 0.95 23-Sep-97 ---------------------- 1. Fixed bug in pre-pass concerning escaped "normal" characters such as \x5c or \x20 at the start of a run of normal characters. These were being treated as real characters, instead of the source characters being re-checked. Version 0.94 18-Sep-97 ---------------------- 1. The functions are now thread-safe, with the caveat that the global variables containing pointers to malloc() and free() or alternative functions are the same for all threads. 2. Get pcre_study() to generate a bitmap of initial characters for non- anchored patterns when this is possible, and use it if passed to pcre_exec(). Version 0.93 15-Sep-97 ---------------------- 1. /(b)|(:+)/ was computing an incorrect first character. 2. Add pcre_study() to the API and the passing of pcre_extra to pcre_exec(), but not actually doing anything yet. 3. Treat "-" characters in classes that cannot be part of ranges as literals, as Perl does (e.g. [-az] or [az-]). 4. Set the anchored flag if a branch starts with .* or .*? because that tests all possible positions. 5. Split up into different modules to avoid including unneeded functions in a compiled binary. However, compile and exec are still in one module. The "study" function is split off. 6. The character tables are now in a separate module whose source is generated by an auxiliary program - but can then be edited by hand if required. There are now no calls to isalnum(), isspace(), isdigit(), isxdigit(), tolower() or toupper() in the code. 7. Turn the malloc/free funtions variables into pcre_malloc and pcre_free and make them global. Abolish the function for setting them, as the caller can now set them directly. Version 0.92 11-Sep-97 ---------------------- 1. A repeat with a fixed maximum and a minimum of 1 for an ordinary character (e.g. /a{1,3}/) was broken (I mis-optimized it). 2. Caseless matching was not working in character classes if the characters in the pattern were in upper case. 3. Make ranges like [W-c] work in the same way as Perl for caseless matching. 4. Make PCRE_ANCHORED public and accept as a compile option. 5. Add an options word to pcre_exec() and accept PCRE_ANCHORED and PCRE_CASELESS at run time. Add escapes \A and \I to pcretest to cause it to pass them. 6. Give an error if bad option bits passed at compile or run time. 7. Add PCRE_MULTILINE at compile and exec time, and (?m) as well. Add \M to pcretest to cause it to pass that flag. 8. Add pcre_info(), to get the number of identifying subpatterns, the stored options, and the first character, if set. 9. Recognize C+ or C{n,m} where n >= 1 as providing a fixed starting character. Version 0.91 10-Sep-97 ---------------------- 1. PCRE was failing to diagnose unlimited repeats of subpatterns that could match the empty string as in /(a*)*/. It was looping and ultimately crashing. 2. PCRE was looping on encountering an indefinitely repeated back reference to a subpattern that had matched an empty string, e.g. /(a|)\1*/. It now does what Perl does - treats the match as successful. **** usr/share/doc/alt-pcre802/README000064400000106626152342605160012064 0ustar00README file for PCRE (Perl-compatible regular expression library) ----------------------------------------------------------------- The latest release of PCRE is always available in three alternative formats from: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.bz2 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.zip There is a mailing list for discussion about the development of PCRE at pcre-dev@exim.org Please read the NEWS file if you are upgrading from a previous release. The contents of this README file are: The PCRE APIs Documentation for PCRE Contributions by users of PCRE Building PCRE on non-Unix systems Building PCRE on Unix-like systems Retrieving configuration information on Unix-like systems Shared libraries on Unix-like systems Cross-compiling on Unix-like systems Using HP's ANSI C++ compiler (aCC) Using PCRE from MySQL Making new tarballs Testing PCRE Character tables File manifest The PCRE APIs ------------- PCRE is written in C, and it has its own API. The distribution also includes a set of C++ wrapper functions (see the pcrecpp man page for details), courtesy of Google Inc. In addition, there is a set of C wrapper functions that are based on the POSIX regular expression API (see the pcreposix man page). These end up in the library called libpcreposix. Note that this just provides a POSIX calling interface to PCRE; the regular expressions themselves still follow Perl syntax and semantics. The POSIX API is restricted, and does not give full access to all of PCRE's facilities. The header file for the POSIX-style functions is called pcreposix.h. The official POSIX name is regex.h, but I did not want to risk possible problems with existing files of that name by distributing it that way. To use PCRE with an existing program that uses the POSIX API, pcreposix.h will have to be renamed or pointed at by a link. If you are using the POSIX interface to PCRE and there is already a POSIX regex library installed on your system, as well as worrying about the regex.h header file (as mentioned above), you must also take care when linking programs to ensure that they link with PCRE's libpcreposix library. Otherwise they may pick up the POSIX functions of the same name from the other library. One way of avoiding this confusion is to compile PCRE with the addition of -Dregcomp=PCREregcomp (and similarly for the other POSIX functions) to the compiler flags (CFLAGS if you are using "configure" -- see below). This has the effect of renaming the functions so that the names no longer clash. Of course, you have to do the same thing for your applications, or write them using the new names. Documentation for PCRE ---------------------- If you install PCRE in the normal way on a Unix-like system, you will end up with a set of man pages whose names all start with "pcre". The one that is just called "pcre" lists all the others. In addition to these man pages, the PCRE documentation is supplied in two other forms: 1. There are files called doc/pcre.txt, doc/pcregrep.txt, and doc/pcretest.txt in the source distribution. The first of these is a concatenation of the text forms of all the section 3 man pages except those that summarize individual functions. The other two are the text forms of the section 1 man pages for the pcregrep and pcretest commands. These text forms are provided for ease of scanning with text editors or similar tools. They are installed in /share/doc/pcre, where is the installation prefix (defaulting to /usr/local). 2. A set of files containing all the documentation in HTML form, hyperlinked in various ways, and rooted in a file called index.html, is distributed in doc/html and installed in /share/doc/pcre/html. Users of PCRE have contributed files containing the documentation for various releases in CHM format. These can be found in the Contrib directory of the FTP site (see next section). Contributions by users of PCRE ------------------------------ You can find contributions from PCRE users in the directory ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib There is a README file giving brief descriptions of what they are. Some are complete in themselves; others are pointers to URLs containing relevant files. Some of this material is likely to be well out-of-date. Several of the earlier contributions provided support for compiling PCRE on various flavours of Windows (I myself do not use Windows). Nowadays there is more Windows support in the standard distribution, so these contibutions have been archived. Building PCRE on non-Unix systems --------------------------------- For a non-Unix system, please read the comments in the file NON-UNIX-USE, though if your system supports the use of "configure" and "make" you may be able to build PCRE in the same way as for Unix-like systems. PCRE can also be configured in many platform environments using the GUI facility provided by CMake's cmake-gui command. This creates Makefiles, solution files, etc. PCRE has been compiled on many different operating systems. It should be straightforward to build PCRE on any system that has a Standard C compiler and library, because it uses only Standard C functions. Building PCRE on Unix-like systems ---------------------------------- If you are using HP's ANSI C++ compiler (aCC), please see the special note in the section entitled "Using HP's ANSI C++ compiler (aCC)" below. The following instructions assume the use of the widely used "configure, make, make install" process. There is also support for CMake in the PCRE distribution; there are some comments about using CMake in the NON-UNIX-USE file, though it can also be used in Unix-like systems. To build PCRE on a Unix-like system, first run the "configure" command from the PCRE distribution directory, with your current directory set to the directory where you want the files to be created. This command is a standard GNU "autoconf" configuration script, for which generic instructions are supplied in the file INSTALL. Most commonly, people build PCRE within its own distribution directory, and in this case, on many systems, just running "./configure" is sufficient. However, the usual methods of changing standard defaults are available. For example: CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local specifies that the C compiler should be run with the flags '-O2 -Wall' instead of the default, and that "make install" should install PCRE under /opt/local instead of the default /usr/local. If you want to build in a different directory, just run "configure" with that directory as current. For example, suppose you have unpacked the PCRE source into /source/pcre/pcre-xxx, but you want to build it in /build/pcre/pcre-xxx: cd /build/pcre/pcre-xxx /source/pcre/pcre-xxx/configure PCRE is written in C and is normally compiled as a C library. However, it is possible to build it as a C++ library, though the provided building apparatus does not have any features to support this. There are some optional features that can be included or omitted from the PCRE library. You can read more about them in the pcrebuild man page. . If you want to suppress the building of the C++ wrapper library, you can add --disable-cpp to the "configure" command. Otherwise, when "configure" is run, it will try to find a C++ compiler and C++ header files, and if it succeeds, it will try to build the C++ wrapper. . If you want to make use of the support for UTF-8 Unicode character strings in PCRE, you must add --enable-utf8 to the "configure" command. Without it, the code for handling UTF-8 is not included in the library. Even when included, it still has to be enabled by an option at run time. When PCRE is compiled with this option, its input can only either be ASCII or UTF-8, even when running on EBCDIC platforms. It is not possible to use both --enable-utf8 and --enable-ebcdic at the same time. . If, in addition to support for UTF-8 character strings, you want to include support for the \P, \p, and \X sequences that recognize Unicode character properties, you must add --enable-unicode-properties to the "configure" command. This adds about 30K to the size of the library (in the form of a property table); only the basic two-letter properties such as Lu are supported. . You can build PCRE to recognize either CR or LF or the sequence CRLF or any of the preceding, or any of the Unicode newline sequences as indicating the end of a line. Whatever you specify at build time is the default; the caller of PCRE can change the selection at run time. The default newline indicator is a single LF character (the Unix standard). You can specify the default newline indicator by adding --enable-newline-is-cr or --enable-newline-is-lf or --enable-newline-is-crlf or --enable-newline-is-anycrlf or --enable-newline-is-any to the "configure" command, respectively. If you specify --enable-newline-is-cr or --enable-newline-is-crlf, some of the standard tests will fail, because the lines in the test files end with LF. Even if the files are edited to change the line endings, there are likely to be some failures. With --enable-newline-is-anycrlf or --enable-newline-is-any, many tests should succeed, but there may be some failures. . By default, the sequence \R in a pattern matches any Unicode line ending sequence. This is independent of the option specifying what PCRE considers to be the end of a line (see above). However, the caller of PCRE can restrict \R to match only CR, LF, or CRLF. You can make this the default by adding --enable-bsr-anycrlf to the "configure" command (bsr = "backslash R"). . When called via the POSIX interface, PCRE uses malloc() to get additional storage for processing capturing parentheses if there are more than 10 of them in a pattern. You can increase this threshold by setting, for example, --with-posix-malloc-threshold=20 on the "configure" command. . PCRE has a counter that can be set to limit the amount of resources it uses. If the limit is exceeded during a match, the match fails. The default is ten million. You can change the default by setting, for example, --with-match-limit=500000 on the "configure" command. This is just the default; individual calls to pcre_exec() can supply their own value. There is more discussion on the pcreapi man page. . There is a separate counter that limits the depth of recursive function calls during a matching process. This also has a default of ten million, which is essentially "unlimited". You can change the default by setting, for example, --with-match-limit-recursion=500000 Recursive function calls use up the runtime stack; running out of stack can cause programs to crash in strange ways. There is a discussion about stack sizes in the pcrestack man page. . The default maximum compiled pattern size is around 64K. You can increase this by adding --with-link-size=3 to the "configure" command. You can increase it even more by setting --with-link-size=4, but this is unlikely ever to be necessary. Increasing the internal link size will reduce performance. . You can build PCRE so that its internal match() function that is called from pcre_exec() does not call itself recursively. Instead, it uses memory blocks obtained from the heap via the special functions pcre_stack_malloc() and pcre_stack_free() to save data that would otherwise be saved on the stack. To build PCRE like this, use --disable-stack-for-recursion on the "configure" command. PCRE runs more slowly in this mode, but it may be necessary in environments with limited stack sizes. This applies only to the pcre_exec() function; it does not apply to pcre_dfa_exec(), which does not use deeply nested recursion. There is a discussion about stack sizes in the pcrestack man page. . For speed, PCRE uses four tables for manipulating and identifying characters whose code point values are less than 256. By default, it uses a set of tables for ASCII encoding that is part of the distribution. If you specify --enable-rebuild-chartables a program called dftables is compiled and run in the default C locale when you obey "make". It builds a source file called pcre_chartables.c. If you do not specify this option, pcre_chartables.c is created as a copy of pcre_chartables.c.dist. See "Character tables" below for further information. . It is possible to compile PCRE for use on systems that use EBCDIC as their character code (as opposed to ASCII) by specifying --enable-ebcdic This automatically implies --enable-rebuild-chartables (see above). However, when PCRE is built this way, it always operates in EBCDIC. It cannot support both EBCDIC and UTF-8. . It is possible to compile pcregrep to use libz and/or libbz2, in order to read .gz and .bz2 files (respectively), by specifying one or both of --enable-pcregrep-libz --enable-pcregrep-libbz2 Of course, the relevant libraries must be installed on your system. . It is possible to compile pcretest so that it links with the libreadline library, by specifying --enable-pcretest-libreadline If this is done, when pcretest's input is from a terminal, it reads it using the readline() function. This provides line-editing and history facilities. Note that libreadline is GPL-licenced, so if you distribute a binary of pcretest linked in this way, there may be licensing issues. Setting this option causes the -lreadline option to be added to the pcretest build. In many operating environments with a sytem-installed readline library this is sufficient. However, in some environments (e.g. if an unmodified distribution version of readline is in use), it may be necessary to specify something like LIBS="-lncurses" as well. This is because, to quote the readline INSTALL, "Readline uses the termcap functions, but does not link with the termcap or curses library itself, allowing applications which link with readline the to choose an appropriate library." If you get error messages about missing functions tgetstr, tgetent, tputs, tgetflag, or tgoto, this is the problem, and linking with the ncurses library should fix it. The "configure" script builds the following files for the basic C library: . Makefile is the makefile that builds the library . config.h contains build-time configuration options for the library . pcre.h is the public PCRE header file . pcre-config is a script that shows the settings of "configure" options . libpcre.pc is data for the pkg-config command . libtool is a script that builds shared and/or static libraries . RunTest is a script for running tests on the basic C library . RunGrepTest is a script for running tests on the pcregrep command Versions of config.h and pcre.h are distributed in the PCRE tarballs under the names config.h.generic and pcre.h.generic. These are provided for those who have to built PCRE without using "configure" or CMake. If you use "configure" or CMake, the .generic versions are not used. If a C++ compiler is found, the following files are also built: . libpcrecpp.pc is data for the pkg-config command . pcrecpparg.h is a header file for programs that call PCRE via the C++ wrapper . pcre_stringpiece.h is the header for the C++ "stringpiece" functions The "configure" script also creates config.status, which is an executable script that can be run to recreate the configuration, and config.log, which contains compiler output from tests that "configure" runs. Once "configure" has run, you can run "make". It builds two libraries, called libpcre and libpcreposix, a test program called pcretest, and the pcregrep command. If a C++ compiler was found on your system, "make" also builds the C++ wrapper library, which is called libpcrecpp, and some test programs called pcrecpp_unittest, pcre_scanner_unittest, and pcre_stringpiece_unittest. Building the C++ wrapper can be disabled by adding --disable-cpp to the "configure" command. The command "make check" runs all the appropriate tests. Details of the PCRE tests are given below in a separate section of this document. You can use "make install" to install PCRE into live directories on your system. The following are installed (file names are all relative to the that is set when "configure" is run): Commands (bin): pcretest pcregrep pcre-config Libraries (lib): libpcre libpcreposix libpcrecpp (if C++ support is enabled) Configuration information (lib/pkgconfig): libpcre.pc libpcrecpp.pc (if C++ support is enabled) Header files (include): pcre.h pcreposix.h pcre_scanner.h ) pcre_stringpiece.h ) if C++ support is enabled pcrecpp.h ) pcrecpparg.h ) Man pages (share/man/man{1,3}): pcregrep.1 pcretest.1 pcre.3 pcre*.3 (lots more pages, all starting "pcre") HTML documentation (share/doc/pcre/html): index.html *.html (lots more pages, hyperlinked from index.html) Text file documentation (share/doc/pcre): AUTHORS COPYING ChangeLog LICENCE NEWS README pcre.txt (a concatenation of the man(3) pages) pcretest.txt the pcretest man page pcregrep.txt the pcregrep man page If you want to remove PCRE from your system, you can run "make uninstall". This removes all the files that "make install" installed. However, it does not remove any directories, because these are often shared with other programs. Retrieving configuration information on Unix-like systems --------------------------------------------------------- Running "make install" installs the command pcre-config, which can be used to recall information about the PCRE configuration and installation. For example: pcre-config --version prints the version number, and pcre-config --libs outputs information about where the library is installed. This command can be included in makefiles for programs that use PCRE, saving the programmer from having to remember too many details. The pkg-config command is another system for saving and retrieving information about installed libraries. Instead of separate commands for each library, a single command is used. For example: pkg-config --cflags pcre The data is held in *.pc files that are installed in a directory called /lib/pkgconfig. Shared libraries on Unix-like systems ------------------------------------- The default distribution builds PCRE as shared libraries and static libraries, as long as the operating system supports shared libraries. Shared library support relies on the "libtool" script which is built as part of the "configure" process. The libtool script is used to compile and link both shared and static libraries. They are placed in a subdirectory called .libs when they are newly built. The programs pcretest and pcregrep are built to use these uninstalled libraries (by means of wrapper scripts in the case of shared libraries). When you use "make install" to install shared libraries, pcregrep and pcretest are automatically re-built to use the newly installed shared libraries before being installed themselves. However, the versions left in the build directory still use the uninstalled libraries. To build PCRE using static libraries only you must use --disable-shared when configuring it. For example: ./configure --prefix=/usr/gnu --disable-shared Then run "make" in the usual way. Similarly, you can use --disable-static to build only shared libraries. Cross-compiling on Unix-like systems ------------------------------------ You can specify CC and CFLAGS in the normal way to the "configure" command, in order to cross-compile PCRE for some other host. However, you should NOT specify --enable-rebuild-chartables, because if you do, the dftables.c source file is compiled and run on the local host, in order to generate the inbuilt character tables (the pcre_chartables.c file). This will probably not work, because dftables.c needs to be compiled with the local compiler, not the cross compiler. When --enable-rebuild-chartables is not specified, pcre_chartables.c is created by making a copy of pcre_chartables.c.dist, which is a default set of tables that assumes ASCII code. Cross-compiling with the default tables should not be a problem. If you need to modify the character tables when cross-compiling, you should move pcre_chartables.c.dist out of the way, then compile dftables.c by hand and run it on the local host to make a new version of pcre_chartables.c.dist. Then when you cross-compile PCRE this new version of the tables will be used. Using HP's ANSI C++ compiler (aCC) ---------------------------------- Unless C++ support is disabled by specifying the "--disable-cpp" option of the "configure" script, you must include the "-AA" option in the CXXFLAGS environment variable in order for the C++ components to compile correctly. Also, note that the aCC compiler on PA-RISC platforms may have a defect whereby needed libraries fail to get included when specifying the "-AA" compiler option. If you experience unresolved symbols when linking the C++ programs, use the workaround of specifying the following environment variable prior to running the "configure" script: CXXLDFLAGS="-lstd_v2 -lCsup_v2" Using Sun's compilers for Solaris --------------------------------- A user reports that the following configurations work on Solaris 9 sparcv9 and Solaris 9 x86 (32-bit): Solaris 9 sparcv9: ./configure --disable-cpp CC=/bin/cc CFLAGS="-m64 -g" Solaris 9 x86: ./configure --disable-cpp CC=/bin/cc CFLAGS="-g" Using PCRE from MySQL --------------------- On systems where both PCRE and MySQL are installed, it is possible to make use of PCRE from within MySQL, as an alternative to the built-in pattern matching. There is a web page that tells you how to do this: http://www.mysqludf.org/lib_mysqludf_preg/index.php Making new tarballs ------------------- The command "make dist" creates three PCRE tarballs, in tar.gz, tar.bz2, and zip formats. The command "make distcheck" does the same, but then does a trial build of the new distribution to ensure that it works. If you have modified any of the man page sources in the doc directory, you should first run the PrepareRelease script before making a distribution. This script creates the .txt and HTML forms of the documentation from the man pages. Testing PCRE ------------ To test the basic PCRE library on a Unix system, run the RunTest script that is created by the configuring process. There is also a script called RunGrepTest that tests the options of the pcregrep command. If the C++ wrapper library is built, three test programs called pcrecpp_unittest, pcre_scanner_unittest, and pcre_stringpiece_unittest are also built. Both the scripts and all the program tests are run if you obey "make check" or "make test". For other systems, see the instructions in NON-UNIX-USE. The RunTest script runs the pcretest test program (which is documented in its own man page) on each of the testinput files in the testdata directory in turn, and compares the output with the contents of the corresponding testoutput files. A file called testtry is used to hold the main output from pcretest (testsavedregex is also used as a working file). To run pcretest on just one of the test files, give its number as an argument to RunTest, for example: RunTest 2 The first test file can also be fed directly into the perltest.pl script to check that Perl gives the same results. The only difference you should see is in the first few lines, where the Perl version is given instead of the PCRE version. The second set of tests check pcre_fullinfo(), pcre_info(), pcre_study(), pcre_copy_substring(), pcre_get_substring(), pcre_get_substring_list(), error detection, and run-time flags that are specific to PCRE, as well as the POSIX wrapper API. It also uses the debugging flags to check some of the internals of pcre_compile(). If you build PCRE with a locale setting that is not the standard C locale, the character tables may be different (see next paragraph). In some cases, this may cause failures in the second set of tests. For example, in a locale where the isprint() function yields TRUE for characters in the range 128-255, the use of [:isascii:] inside a character class defines a different set of characters, and this shows up in this test as a difference in the compiled code, which is being listed for checking. Where the comparison test output contains [\x00-\x7f] the test will contain [\x00-\xff], and similarly in some other cases. This is not a bug in PCRE. The third set of tests checks pcre_maketables(), the facility for building a set of character tables for a specific locale and using them instead of the default tables. The tests make use of the "fr_FR" (French) locale. Before running the test, the script checks for the presence of this locale by running the "locale" command. If that command fails, or if it doesn't include "fr_FR" in the list of available locales, the third test cannot be run, and a comment is output to say why. If running this test produces instances of the error ** Failed to set locale "fr_FR" in the comparison output, it means that locale is not available on your system, despite being listed by "locale". This does not mean that PCRE is broken. [If you are trying to run this test on Windows, you may be able to get it to work by changing "fr_FR" to "french" everywhere it occurs. Alternatively, use RunTest.bat. The version of RunTest.bat included with PCRE 7.4 and above uses Windows versions of test 2. More info on using RunTest.bat is included in the document entitled NON-UNIX-USE.] The fourth test checks the UTF-8 support. It is not run automatically unless PCRE is built with UTF-8 support. To do this you must set --enable-utf8 when running "configure". This file can be also fed directly to the perltest.pl script, provided you are running Perl 5.8 or higher. The fifth test checks error handling with UTF-8 encoding, and internal UTF-8 features of PCRE that are not relevant to Perl. The sixth test (which is Perl-5.10 compatible) checks the support for Unicode character properties. It it not run automatically unless PCRE is built with Unicode property support. To to this you must set --enable-unicode-properties when running "configure". The seventh, eighth, and ninth tests check the pcre_dfa_exec() alternative matching function, in non-UTF-8 mode, UTF-8 mode, and UTF-8 mode with Unicode property support, respectively. The eighth and ninth tests are not run automatically unless PCRE is build with the relevant support. The tenth test checks some internal offsets and code size features; it is run only when the default "link size" of 2 is set (in other cases the sizes change). The eleventh test checks out features that are new in Perl 5.10, and the twelfth test checks a number internals and non-Perl features concerned with Unicode property support. It it not run automatically unless PCRE is built with Unicode property support. To to this you must set --enable-unicode-properties when running "configure". Character tables ---------------- For speed, PCRE uses four tables for manipulating and identifying characters whose code point values are less than 256. The final argument of the pcre_compile() function is a pointer to a block of memory containing the concatenated tables. A call to pcre_maketables() can be used to generate a set of tables in the current locale. If the final argument for pcre_compile() is passed as NULL, a set of default tables that is built into the binary is used. The source file called pcre_chartables.c contains the default set of tables. By default, this is created as a copy of pcre_chartables.c.dist, which contains tables for ASCII coding. However, if --enable-rebuild-chartables is specified for ./configure, a different version of pcre_chartables.c is built by the program dftables (compiled from dftables.c), which uses the ANSI C character handling functions such as isalnum(), isalpha(), isupper(), islower(), etc. to build the table sources. This means that the default C locale which is set for your system will control the contents of these default tables. You can change the default tables by editing pcre_chartables.c and then re-building PCRE. If you do this, you should take care to ensure that the file does not get automatically re-generated. The best way to do this is to move pcre_chartables.c.dist out of the way and replace it with your customized tables. When the dftables program is run as a result of --enable-rebuild-chartables, it uses the default C locale that is set on your system. It does not pay attention to the LC_xxx environment variables. In other words, it uses the system's default locale rather than whatever the compiling user happens to have set. If you really do want to build a source set of character tables in a locale that is specified by the LC_xxx variables, you can run the dftables program by hand with the -L option. For example: ./dftables -L pcre_chartables.c.special The first two 256-byte tables provide lower casing and case flipping functions, respectively. The next table consists of three 32-byte bit maps which identify digits, "word" characters, and white space, respectively. These are used when building 32-byte bit maps that represent character classes for code points less than 256. The final 256-byte table has bits indicating various character types, as follows: 1 white space character 2 letter 4 decimal digit 8 hexadecimal digit 16 alphanumeric or '_' 128 regular expression metacharacter or binary zero You should not alter the set of characters that contain the 128 bit, as that will cause PCRE to malfunction. File manifest ------------- The distribution should contain the following files: (A) Source files of the PCRE library functions and their headers: dftables.c auxiliary program for building pcre_chartables.c when --enable-rebuild-chartables is specified pcre_chartables.c.dist a default set of character tables that assume ASCII coding; used, unless --enable-rebuild-chartables is specified, by copying to pcre_chartables.c pcreposix.c ) pcre_compile.c ) pcre_config.c ) pcre_dfa_exec.c ) pcre_exec.c ) pcre_fullinfo.c ) pcre_get.c ) sources for the functions in the library, pcre_globals.c ) and some internal functions that they use pcre_info.c ) pcre_maketables.c ) pcre_newline.c ) pcre_ord2utf8.c ) pcre_refcount.c ) pcre_study.c ) pcre_tables.c ) pcre_try_flipped.c ) pcre_ucd.c ) pcre_valid_utf8.c ) pcre_version.c ) pcre_xclass.c ) pcre_printint.src ) debugging function that is #included in pcretest, ) and can also be #included in pcre_compile() pcre.h.in template for pcre.h when built by "configure" pcreposix.h header for the external POSIX wrapper API pcre_internal.h header for internal use ucp.h header for Unicode property handling config.h.in template for config.h, which is built by "configure" pcrecpp.h public header file for the C++ wrapper pcrecpparg.h.in template for another C++ header file pcre_scanner.h public header file for C++ scanner functions pcrecpp.cc ) pcre_scanner.cc ) source for the C++ wrapper library pcre_stringpiece.h.in template for pcre_stringpiece.h, the header for the C++ stringpiece functions pcre_stringpiece.cc source for the C++ stringpiece functions (B) Source files for programs that use PCRE: pcredemo.c simple demonstration of coding calls to PCRE pcregrep.c source of a grep utility that uses PCRE pcretest.c comprehensive test program (C) Auxiliary files: 132html script to turn "man" pages into HTML AUTHORS information about the author of PCRE ChangeLog log of changes to the code CleanTxt script to clean nroff output for txt man pages Detrail script to remove trailing spaces HACKING some notes about the internals of PCRE INSTALL generic installation instructions LICENCE conditions for the use of PCRE COPYING the same, using GNU's standard name Makefile.in ) template for Unix Makefile, which is built by ) "configure" Makefile.am ) the automake input that was used to create ) Makefile.in NEWS important changes in this release NON-UNIX-USE notes on building PCRE on non-Unix systems PrepareRelease script to make preparations for "make dist" README this file RunTest a Unix shell script for running tests RunGrepTest a Unix shell script for pcregrep tests aclocal.m4 m4 macros (generated by "aclocal") config.guess ) files used by libtool, config.sub ) used only when building a shared library configure a configuring shell script (built by autoconf) configure.ac ) the autoconf input that was used to build ) "configure" and config.h depcomp ) script to find program dependencies, generated by ) automake doc/*.3 man page sources for PCRE doc/*.1 man page sources for pcregrep and pcretest doc/index.html.src the base HTML page doc/html/* HTML documentation doc/pcre.txt plain text version of the man pages doc/pcretest.txt plain text documentation of test program doc/perltest.txt plain text documentation of Perl test program install-sh a shell script for installing files libpcre.pc.in template for libpcre.pc for pkg-config libpcreposix.pc.in template for libpcreposix.pc for pkg-config libpcrecpp.pc.in template for libpcrecpp.pc for pkg-config ltmain.sh file used to build a libtool script missing ) common stub for a few missing GNU programs while ) installing, generated by automake mkinstalldirs script for making install directories perltest.pl Perl test program pcre-config.in source of script which retains PCRE information pcrecpp_unittest.cc ) pcre_scanner_unittest.cc ) test programs for the C++ wrapper pcre_stringpiece_unittest.cc ) testdata/testinput* test data for main library tests testdata/testoutput* expected test results testdata/grep* input and output for pcregrep tests (D) Auxiliary files for cmake support cmake/COPYING-CMAKE-SCRIPTS cmake/FindPackageHandleStandardArgs.cmake cmake/FindReadline.cmake CMakeLists.txt config-cmake.h.in (E) Auxiliary files for VPASCAL makevp.bat makevp_c.txt makevp_l.txt pcregexp.pas (F) Auxiliary files for building PCRE "by hand" pcre.h.generic ) a version of the public PCRE header file ) for use in non-"configure" environments config.h.generic ) a version of config.h for use in non-"configure" ) environments (F) Miscellaneous RunTest.bat a script for running tests under Windows Philip Hazel Email local part: ph10 Email domain: cam.ac.uk Last updated: 19 January 2010 usr/share/doc/alt-pcre802/LICENCE000064400000004700152342605160012157 0ustar00PCRE LICENCE ------------ PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Release 8 of PCRE is distributed under the terms of the "BSD" licence, as specified below. The documentation for PCRE, supplied in the "doc" directory, is distributed under the same terms as the software itself. The basic library functions are written in C and are freestanding. Also included in the distribution is a set of C++ wrapper functions. THE BASIC LIBRARY FUNCTIONS --------------------------- Written by: Philip Hazel Email local part: ph10 Email domain: cam.ac.uk University of Cambridge Computing Service, Cambridge, England. Copyright (c) 1997-2010 University of Cambridge All rights reserved. THE C++ WRAPPER FUNCTIONS ------------------------- Contributed by: Google Inc. Copyright (c) 2007-2010, Google Inc. All rights reserved. THE "BSD" LICENCE ----------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 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. * Neither the name of the University of Cambridge nor the name of Google Inc. nor the names of their contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 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. End usr/share/doc/alt-pcre802/AUTHORS000064400000000623152342605160012242 0ustar00THE MAIN PCRE LIBRARY --------------------- Written by: Philip Hazel Email local part: ph10 Email domain: cam.ac.uk University of Cambridge Computing Service, Cambridge, England. Copyright (c) 1997-2010 University of Cambridge All rights reserved THE C++ WRAPPER LIBRARY ----------------------- Written by: Google Inc. Copyright (c) 2007-2010 Google Inc All rights reserved #### usr/share/doc/alt-pcre802/COPYING000064400000000137152342605160012225 0ustar00PCRE LICENCE Please see the file LICENCE in the PCRE distribution for licensing details. End usr/bin/pcregrep000075500000114770152342605160007700 0ustar00ELF> 0@8@8 @@@@00ppppp {{ { ` `|`| `|   DDPtd8k8k8kQtdRtd{{ { PP/lib64/ld-linux-x86-64.so.2GNUGNUGNU;n/-\E(s!++A  +.(BE|fUaqX9}% zQg/K9 `oX6H "oD  @ 0  @ libpcreposix.so.0_ITM_deregisterTMCloneTablepcre_exec__gmon_start___ITM_registerTMCloneTablelibpcre.so.0pcre_studypcre_versionpcre_configpcre_compilepcre_maketableslibc.so.6__printf_chkexitreaddirsetlocalefopenstrncmpclosedirputs__stack_chk_failstdinisattyfgetsstrlen__errno_location__fprintf_chkstdoutfputcfclosestrtoulmallocopendir__ctype_b_locgetenvstderrfilenofwritefreadstrchr__cxa_finalize__sprintf_chk__xstatmemmovestrcmpstrerror__libc_start_mainfree_edata__bss_start_endGLIBC_2.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5/opt/alt/pcre802/usr/lib64ii ti ii (ui 2{ 1{ 0{ { { dW{ X{ X{ X| X| X| X| X | dW(| X0| X8| X@| XH| XP| XX| X0 dW8 XP XX Xh  p Yx d  *Y d 0 @Y MYȀ  Ѐ 1Y؀ d gY e 0  mY {Y(  0 Y8 @eH ( P YX Yp Yx pe Y e  Y YЁ Z؁  Z >Z e LZ e0 XZ8 dZP }ZX (fp Zx Xf  Z Z Z fȂ  Ђ Z؂ Z Z [   [ f0 ([8 fP 4[X gp B[x @g H[ hg ؅ R[ gȃ  Ѓ b[؃ g ȅ r[ g Ѕ  [ h0 [8 [P [X [p [x @h [ [ \ hhЄ \؄ h \ /\    & ( +0 .@ 0~ ~ ~ ~ ~ ~ ~ ~  ~  ~  ~  ~  ~       ( 0 8 @ H P X ` h p x   ! " # $ % ' ( ) *HHf HtH5d %d hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%%Mb D%Eb D%=b D%5b D%-b D%%b D%b D%b D% b D%b D%a D%a D%a D%a D%a D%a D%a D%a D%a D%a D%a D%a D%a D%a D%a D%a D%}a D%ua D%ma D%ea D%]a D%Ua D%Ma D%Ea D%=a D%5a D%-a D%%a D% AWAVAUATUSHH $HH $H|$<Ht$0Ht$PdH%(H$#1hD$P   =  H8Hf |$<D$PHD$0Hh}-ED$@E1{HL$XHL$HH$HL$(<-X}Lu@SD@^` t&L-O` 9uYf9tLI AUuHcD$PHL$0HZDLH=-e 161 f.AUIA>O2A>@bAUADžJ11Hc\$PL$<9 w HD$0\$PHcL4؃b&IE\$PL0\$P;\$<},HL$0HcH,}-uEH=e W d ~=d ud ={d usd 1d Gd 5d d Hd H6H1HNHP Hid Hd HtPH56Ht=H5~6H+c H=d6]H Hc Hd H= 6HKH5B6H94H55H"H5 6H H55HW H55H@ H55H H55H H5Z5HtH55H Kc DP{DHE=HHD$}I D\ E H$L-\ D|$DHD$ D+D$D$8Lt$)HMI)H)H|$hCDT$8M5IH\$(EH r41D)IH߾DT$ IHDMIATHl$0H 941HHc\$LL|$ HL[AXAYvHHLA`I A} I](H=HIIMHtiI)H|$D$8|D9uHcH|$HHuLt$D|$DIA>=IH|$AH|$Hq@D|$DL5a2H|$u|$@cHcD$@\$PLt`@D$@AA}DU-\$PAuA11A>DJHc\$P A}HH2H` 5LD|$DLt$HJMAA>=Au AUbwHt$H L'HT$X:IU\$PH1H_ 'H ^ KH=;+_ DH-_ Ht!H51H^ H-v_ Ht!H51H^  HH_ H^ HH|$@H-^ HH5f0H/H-] L-] E1L$H LHMAI!%tDIVLDIM9v%HfDIM9t AFDB uAA$oDLLWiHcD$P;D$< HL$0PD$@T$PHHD$`Dt$@Ll$`AA1I|E11҉R1۽L%|] Mt9D-x] D$P1E~HIfDHH9+? uHG H9rfDHH9? ufH9HH9e8 \H1E fD?L C IC#AiHcELOEIA?AD uf?HD @D#Iɍ@ALcEiHGDDHA?AE ȅuBfHHdH%(H$1H&1҅xD$%=@/DH$dH3 %(uHĨXAWAVAUATUSHH $HH $HHL=CG A HT$H\$ AHHF AH !dH%(H$8 1HciP 4MǺ 1WHVAZA[DHcP HP HL$HLP L,HT$DHc P HvP IEH<t;HȃgP H$8 dH34%(HH []A\A]A^A_ÐHcO I< \$H)É\$9~D$H|$Hl$t7HH=\H dRH Hc$$H)HHcHH 9H5G Hc$HH)HLLHA5G 9SQB  G =G D|G EH= G MtLH615H=F DG L$H1 'G H=F Hc$HD$HپHL)A)1Hc$HHL$fDH=qF H1@L1F Hp1aH=*F ?DAD$Ll$8AǃD$TF tRF t E H\$ Hc$HHD$hII@D$hI9vH|$X_zL;d$%D|$`DE EuEDE E7D F E~D$(tHT$Ht$0L$ E /@ DE Et\|$lH=#E t"MtLH514H=D L$lH71 @AH$8bdH3%(D HHb[]A\A]A^A_fDD|$AD$lLl$8AGD$(Hc$HD$ D$`LHD$0D$(D$Z@H=YD AϾLH1paD=D I E3l$(I H9t$0c@LHL$p H߾oH@HD$XLHD$Hl$0 fDAA+D Ll$8ZD$(NLD$0M9 E1H$H\$LDHt$8IDL$`DT$xfD;C }LLHǃ'L9rH\$DL$`IDT$xL|$0H;D$0H\$H\$0Hl$`LLd$0Ld$8DL$xLl$8Dl$(D$<Ht$HLH B H߾HIH)LL9dMtH=B L1H}D=B EtH=jB DE}1HYE}pB D$xD\$xE+B D$8w B ~ DŽ$Mt1L1DT$(H=A HDL$DT$(DL$B D|$B AOL$(t\H$MHD$8A  HT$8Ht$LDT$0DL$\D|$DT$0Hc$L)DL$H)HD$ A H =A Hc$HT$ LDL$6DL$~@D|$ALl$8AGD$(`I @LHL$pHߺ S\$(H@HD$XLHD$L;d$0M9DD$(ED$`tk=A IEMD$D=@ H$D$DB!I@L9Ax upx ^HL9uML;D$0‹|$(D$xtH$HD$8M9[H\$(LHl$0Hl$8DL$`Ll$8Dl$DT$xAHt$HHpH y? H߾HIH)LM9MtH=K? L1H5e {? tL$E}1H=? H D)E3nfDAx I@u L9IEL9w,Dt@ v2IL9I@EAPuǃ t uDM9uL;D$0t$9t$8gD$`ZD$H$fDI@L9KAx u_x NHL9uH9D$0IDHtI( <@AHʁuHʁtр?H5+#LC [ɉ$H R#B#$E$LXA3I? uDI@L9{Ax uRf.x tBHL9u@H9Ix EDIH9w3I1HT$Ht$0L|$(*I @LFHL$p I@D$(H@HD$XLHD$H\$Hl$`Dl$(DL$xD$Ld$0Ll$8M9^< L|$0H ; H=&DT$8DL$DT$8DL$< D$xL$1DT$(H=; H DL$DT$(DL$H\$(Hl$0DL$`DT$xLl$85; K; =C@Hc$LL9$H$LLd$Hl$EHt$8If.ALHHAT$H9sLd$T$HT$8Ht$HHc$L)H)HD$ Hc$LDT$8DL$Ln: 1H=}: H Hc$$H L: )I<Hc^H=7: 1Hc ODT$8D|$Ld$0L|$HLt$8ELt$@fHc$H 9 HL9 1H=9 H Hc$$H 9 )H<HcH=~9 1H Hc$LLHH)AHHLMcLd$0Hc$H 9 HT$ L)K<D|$Lt$8%DL$mQ9 Ld$0D$xT$(„D$MD$xH 8 H= LD$8DT$0DL$(LD$8DT$0DL$(Lc$MM9LH\$H\$Hl$ Hl$8Ld$`Dd$Ll$xADL$(DT$0EAHHHDI9sDL$(H\$Dl$(Hl$ DT$0Dd$Ll$xLd$`XELd$AGD$Ax I@AD$(DŽ$HD$0D$lIDDL$(H\$T$Hl$ DT$0Ld$`Ll$xD$(-2  H=97 L1E1H PA5]7 3H$HD$8 L|$0AWAVAAUATAUSHH=0 HHdH%(H$1uY=v1 ~@H5i6 H=6 H$dH3%(=H[]A\A]A^A_uAt1@HXAŅti-6 H5^HIHn=0 ~LHL`uAt1@HT$ H޿&xD$8%=t=6 uf fDH8IHDH$L=HD$LHLPLLtչLH=_tHH OE1ARH|$IؾLT$ MLT$ LH|$HD$(ZYLT$H=35 Ht-jLE1E1jL$(1LT$ A[ZLT$)H=5 Ht#jE1E1LjL$(1U_AXH|$1D[ ^4 U8NH='4 HH I1nfH=q4 Ht.jE1E1LjL$(1LT$ AYAZLT$VH=?4 H)G53 8H=3 HHX I1@LPDSH 83 H=j"=. H53 t,H- f.~ H52 H {uH#H= BH 2 H= [ATW USHdH%(HD$1HHcH> 2 H\$dH3%(SH[]A\ u2 D.2 2 f.2 f.2 f1 o1 W1 ?1 6, DfD, ~1 H=1 HH111  f+ + g 0 RfH= H=5 H=a H= H= H= H=D)+ EH+ Hl$AhD$ HKHH5i1DLCH Y)¸H5`N1H mDCEE~H1H fD/ / -D/ H=^/ 1H[/H= lH=5 `dH5d 1H=y   V{ { o8 Y ~   @ oo oo* op`|  0@P`p 0@P`p 0dWXXXA YdB *Yd0 @YMYC 1YdcgYe0 mY{YD Y@ed( YYeYpeFYef YYZ ZH>ZehLZeiXZdZl}Z(fLZXf ZZZf ZZMZ[N n([fo4[gqB[@grH[hg؅ R[g b[gȅ r[gЅ [hs[[u[[V[@hv[[w\hhx\h\/\ GA$3h86400 GA$3h864GA$3a1 0O0GA$3a1O0O0 GA$3p864O0O0GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realignGA$3a1O0O0GA$3a1GA$3a1VVGA$3a1P0 1 GA$3p8641\VGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA$3h86400 GA$3h864 GA* 0GA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA$3p864`VVGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protection GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA! GA* GA!stack_realign GA$3h86400 GA$3h864GA$3a1VVGA$3a1VVGA$3a1GA$3a1VVpcregrep-8.02-9.1.el8.x86_64.debug o7zXZִF!t/_#]?Eh=ڊ2N/*_B: 31ܖn4蒶cqO<a6{uJik̡(\Gg_ĕ؄ e'6TXX,J0~K8%Ň?A] l&-,~\<2B[pYIKM`F SEWRUG[[S!9=GvxoH͋_B!3{c0 }ibO?|&W :fevc5v*B{iλV#;g^)F ?.;Y'{;Ɛީ}L_Hm_= g<,ܯt*q m➋(8"JT^0opP<4}*1@v,[$^+`S]_'*'0 ,C-&),b{i+р0 /2F] ̠QG_ Bs/%/ LOm''PGF5e:ˆ]p2s^Y_9ad >8#a)z/WF2h~ɱf:ml Q r_,@3n8=6aСy)UK6.iJn/c\""׆.c$+&䢊A,բ&њpgEfSCDK ѣڞnyl=x(ez+$hg*pyUu\+E)EIcgk˟Т,EҜxBsvL Yܢ!OȝHͮ?]ZPLfLbfQkK1NEZ$34 UsB kdmRV>IjQ#ru-)Ns=0\(6o-/ ţgmR ɘiVH'B~\eU|ϲGNɭ4*ѕbUfwVњYIJR:#7\ԹrKbHʩ91Uǔ.4 Q9"PM !VP M] |b&" gYZ.shstrtab.interp.note.gnu.property.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata pp & 4$Go<Q 88YYao* * bno P} @ B  p@@`58VV WW8 8k8kkk{ {{ {{ { `| `| ~ ~p     @`X h(/d>usr/bin/pcretest000075500000152400152342605160007712 0ustar00ELF>0s@@@8 @@@@00ppp 00 0     DDPtd(((QtdRtd00 0 /lib64/ld-linux-x86-64.so.2GNUGNUGNU|#d5.${ 8A ! 8;A(BE|fUabGsDX[qXp\9f{N~qU /<(N+9;{ HUC   a%vfR "t  2 B0 8 wH & lX ` @ P libpcreposix.so.0_ITM_deregisterTMCloneTablepcre_infopcre_exec__gmon_start___ITM_registerTMCloneTablepcre_freeregexecregcompregerrorregfreelibpcre.so.0pcre_studypcre_free_substringpcre_versionpcre_stack_mallocpcre_calloutpcre_get_named_substringpcre_mallocpcre_copy_substringpcre_get_substringpcre_copy_named_substringpcre_configpcre_get_stringnumberpcre_stack_freepcre_get_substring_listpcre_compilepcre_fullinfopcre_free_substring_listpcre_dfa_execpcre_maketableslibc.so.6fflushstrcpy__printf_chkexitsetlocalefopen__stack_chk_failclockstdinfgetsstrlen__errno_location__fprintf_chkstdoutfputcfputsmemcpyfclose__ctype_b_locstderrsetrlimitfwritefreadstrchr__ctype_tolower_loc__cxa_finalizegetrlimitmemmovestrcmpstrerror__libc_start_main_edata__bss_start_endGLIBC_2.3GLIBC_2.3.4GLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/alt/pcre802/usr/lib64ii 7ti AMii Xui b0 t8 s@ @ ` qh p x           ȸ  и ظ   ! $ ' * - 0 7 :( }0 =8 ?@ AH FP X M` Oh Vp Rx P w 7 7 7 U X [ 7 Mȹ Oй Vع R P w 7 7 7 U X [ 7( M0 O8 V@ RH PP wX 7` 7h 7p Ux X [ 7 M O V R P w 7Ⱥ 7к _غ ^ e l p P x |   ( 0 8 @ H P ʘX ɘ` Ϙh Øp Șx Θ Ԙ ݘ       Ȼ л  ػ ( .  6ȿ п ؿ  3 5 80 ;8 <@ AH =P BX ?` @0 8 @ H P X ` h  p  x          Ⱦ о ؾ          ! "( #0 $8 %@ &H 'P (X )` *h +p ,x - . / 0 1 2 4 5 6 7HH HtH5 % hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D%ݚ D%՚ D%͚ D%Ś D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% DAWAVAUATUSHH $H( Hc< dH%(H$1HN AHHHD$(kHH \HHj MHV H H AsAH]L}DŽ$ADŽ$;-DŽ$DŽ$-DŽ$D$hD$@IE1DDŽ$ML%jIDŽ$HL&HH=jHH=qjHH=VjHH=;jt6H5,jHLT$D\$D\$LT$ DŽ$ADŽ$AuwD$Hc$H<H$HH5a1HDŽ$&fDAAAtLcO4I;-D$ALHc$H<H$HpIcH5iHLdI<$HD$(H?At$H\H5iH;ZH H}>HsODL$Hw HXH HNHk HUHU E$L%v $H\$(LHei_ e HUHzH9ݖ H=^ tHH= EH=F L% HD$HL8LHE,GIfA uiHCHD$A<A A\ Hl$CHhf.( UL}<\` A8c H$Hl$L)HcH-U I\uH$L$\HIH$H= LE1L5n?$D$@DŽ$KH$ $D$0D$$D$lD$D$8HDŽ$DŽ$@tIAIoD$DŽ$AOAIu1틜$ $$2H$L$0HD$HL$LDLL$HD$ H#H|$ 11H$@V$At ϔ = "HD$ |$8@HD$XH HD$p!HD$PHD$|$@H\$ { ȉCȉCCȉCV{fC V{fCsV{fCfV{fCYV{fCLV{fC?V{fC2VfCHD$HtH@ʉPʉPP(ʉP(|$-(|$"H"H5eHHH|2D$XH$Hٺȉ$D$Pȉ$ Hv#L|$XH|$ HپLI9R4N8H=X HHhI1HH|$ USHD$HtHCSH$HW H*SJ AOAIAOAI AOAIAOD$0IAOAI AOIAOA@IAOAIAOD$8IDŽ$AOIhAOAIT AOI=AGI< vfIA< wHsA1HHh8 AH$AOAIAOD$IAOD$lIAOD$@IAOA I{AOD$ID$^AOA@IJAOD$I5AOAI$AOA IAHtfDH8uH\$HPH DQ t@HPDQ u$ $DAtAtAt At@AL$PLLŅHD$HD$ fDHyJƄ$H HD$DŽ$@Ƅ$ď ʏ ď  ?B  HtH L5f E1Hl$(F@H9- L5J tH5y LiL52 LHcAAD< {IcH eHI4pMHuEL5 HT$HADH DA SA\$Hc ADHSDA ,HA܅AEHD$HHAHDB tDIAHDB u$L%P E1D$H$DŽ$D$XMM勄$D$xẺD$@H$H$HD$8H$H$HD$@DŽ$DŽ$D$Pt#IN\A/IIA.@ŅuHc $ AEL+= D $H͋$IcED) $D|$HcDL$`HyAMd-LH)McLL|Et T$X!:Hc\$@E1~H<IŋT$PLLH$PAHADEDDEDHDEUAąjH$P@ H ٌ H=b;LHH=^AOAIAOIAB DŽ$AOI}AOIpH5 ]HyD\$LT$H5\HXD\$LT$*HH5\LT$ D\$-AD\$LT$ D$\$IGH$HD\$8IfDH  +H=`Rc$HDŽ$;EHT$HH DA AH)LLI| Dd$`EtD$XtH=VD$XD$@L$@VUUUE1D$pE)‰$$F@H|$ H%^EHPjLt$(IFLPjDl$`AUSDD$8L$@H|$PbHH0ELH]HPIF(jPjAUSDD$8L$@H|$P.HH0AEKA E=HD$ t$@3p %`=@u&D$L$9~Hc|  fHcD$= pJ D$l D$0sD$8t$8CE19L$0)D$HcHՃD$pDd$PDT$hE Et$X$HD$Hh HHD$8HLt$EHIH$@LIFD$@PSDD$L$ H|$0uI&AXZEDl$`EQ $L$l L$0L$8D9 $G,$E1AEdf.HT1}JcuHD$H~IHH0LADVtPȀv |LM9uۃ=8s t !VIX$&H|$ L1NH$0HD$HH= s HE1~HD$P4HT$ r H=r HBRH|<)1;HIH5{CLT$ D\$HD\$LT$ [D$h A$DD$h$H5Ar 1]H|$(]HD$(H9q KuMD$H=rq 1HCH$0HD$(H9p XDŽ$H\$ H$81H21HH$21HH$ 21HH$21HH$21HH$$y21HH$(b2 1HH$HK2 1HH$42 1HH$21HH$ 2H$H$H^$Ai9D$$A9H$@D$A9H$8HD$pH9t$H=o H:1$ ~H=o HvC1$(LZo $$ H$@HH @L)?LDH=(? HDH5)?HDH!?HDH$?HDL ?@LD LD$L?ML?LDMũL?LDML ?LDML?LDMLDL>LDLL$L >LD$@LDL>ASLDWH>LVHEȾ1RH9St$0ATAUAVAWt$`$H`$7H$@Lm %pH=0H=@H=Pu LѺ!H=9Lm $@LD?H >LE=?m kH\$HHcHBfHAL1$H=m L>H=LE=l H\$HHcHBf_HA1A|$8H|$L|$H\$ H$,HDŽ$PL$PLHD.$,1H=Wl H8LLH.H 1l H$PH=4AH=H= YLѺH=C@NLk 4H k CH=5%H\$ k L-k DK;ERCPD$SKCDtfffDAHcHl$xHHHD$ IHD$` D$@DD$ELH:L1H+L$`A<$@t2H GHcH>|$AAL$L1H9fHA$H\b LH<1A$HPL HIDD$EHLH=J9HAL$L1H=H PfA$1M<AHq  9uJ9uHH5;Hk HF>HL1HT0L$$I A<$PA<$OLH.H ,HEH0180HT$`DHT$`HD$HH R.BHL$I UHIA6I~HiHpuHt$H|$ f6 Hl$A0HT$`ſHT$`HD$HLDuL}EAAtFLLhHcLAuL-޾HLnHHuLu}H<f.H6  9uJ9uHHX9Hk Hi<HH.L1L譿uLu}H#<H 9uJ9uHH8Hk H;HH.D$I1IL$IL$'afLL$pHB,f'0)EiH\$`IAHD$pBkLuLLL$D$L$<}=Z { D IIrIH|$ L1;$uILL)HMtL詻ffH=Y H#H*þY@*$^^?PHH5$+T>H=`Y HH+Խ$ $DŽ$DŽ$DŽ$DŽ$DŽ$DŽ$DŽ$-DŽ$D$hD$DŽ$DŽ$DŽ$隿I$H5:*tH X H=,H޼`H$H1HL #*HVHPL׾fP$4DDH1HM,螼Hc$4H$XXZ$(LW P$(HD$8I UHIAI~HhHNuHt$8H|$ f蟻/Hl$81 k HALDHzBDFu D$x2L1H=g*ûLѺ'H=j#襻LѺH=_+臻LW mLѺH=t+bLV HLѺH="=LV #H V H=q"LѺ H=*{LѺ!H=!غLYV LѺH=!賺L4V L%H$1L蓺L\!L?1 :L?(A\$AD$M|$fۃ@H=U Hm)1 H=*1ܹL]U AL=*LGHD$HHDX@tvH tpDH*1A褹H=U HHH$PAAH؃sAK4T uED$A^vDL1øE1A렸A듸AATIUHS螰HuDH]t DZ u]1DHDC]DJuI,$[]A\@f.ATAUHSHAt$1HfLDDB+u LBH9u[]A\ff.HH= H=H=5H=aH=UH=yH=جH=̬H=H=!贬H=訬H=蜬H=萬H=A脬H=xH=lH=H\ff.USHDDD?HR/H/ RD#HAtPFƒE1Һ"DHAAA~?A A9uDAH 1#fA@^v'DH11۾߭H[]fDHD1cH[]1DH1蠭H[]H1}뜐f.UHSH~HËH uHH[]H=H I؉1H:!HH[]USHHH?H HŋBH u HH[]H=QH I1HHH[]AWAVIAUATIUS1Hf.n~bE>=G EDG I説EHBPft3Mt LDӪnH[]A\A]A^A_fDMtDHL1XAG^@DfDAuuDF IA^MFL7f.HcH=N, RD AFɉE!A@zMLA@IAAA?A L9uA{AAA1A9=92)HcDɉ@L$ תHcT$ HHPfMtHL1N뇸뀸vff.AWAVAUATU1SHHoE WE t-H-jE HtHH=輩sH{H Hc{s HA)H{sH{1AHc{ sHA)H{Ht H KH=D DD VH131E~@H5D 货A9uH5D ^螧E~;E~1AtDH5YD tD9uH5@D ^^E)1E)EeA|@H5D 4D9uK<LcC8HH=C DLC 1]H5C HC0C Ht (g1C 9CuC 1;yC {C @H[]A\A]A^A_fDHH=>ǧfODG(H 1HE1E1譧K$L-_f.LH1~HCHJc< Bt )H{H C$AID9[HCDB yHoH1K81HZ{8cH aB H=9æfDH=9B 1H"謦A SHuH[գDHH=A 1HcH[骣f.AWIAVAUATUSHH8L5uA H|$HT$(@ DLAL)A)A~[HD$H9@ )HT$DL虤H0LHcЅ~ A| IL5@ y@ T$ LcD$L躤LI诤LIHD$蟤MMIMT$ LcLLL)LL4Lm@ LLM<,LL\$ D$LM? aH=B@ UL\$ LHHL$L%,@ L-@ T$H @ DHt$(1f.L9HDH8H[]A\A]A^A_H=? L$1HyODf.? SHuH[镡DHH=? 1H#H[jf.AWAVAUA@ATIUS1H(HcD$pH H<$L|$`HT$Dt$hL$DD$DL$fHL$xIcLHAVAWDL$,DD$(L$$HT$H|$ZY;$t.}ulSD9B+DAED9t ~,AT-DAsDAeDDEUDAD$pHI!$H(D[]A\A]A^A_H$H=Q> $EH 1D $f.Sxx[fH=> A؉[H1逢HHHH @f.UHH52 SHHSH5 H2 H5 H0H5 HPtrH5 H@tU H5 Ht8 H5 HtH~ HH1g1H[]f.fAWIAVIAUAATL%$4 UH-$4 SL)HHt1LLDAHH9uH[]A\A]A^A_Ðf.HHUsage: pcretest [options] [ []] Input and output default to stdin and stdout.This version of pcretest is not linked with readline(). -b show compiled code (bytecode) -C show PCRE compile-time options and exit -d debug: show compiled code and information (-b and -i) -dfa force DFA matching for all subjects -help show usage information -i show information about compiled patterns -M find MATCH_LIMIT minimum for each subject -m output memory used information -o set size of offsets vector to -p use POSIX interface -q quiet: do not output PCRE version number at start -S set stack size to megabytes -s output store (memory) used information -t time compilation and execution -t time compilation and execution, repeating times -tm time execution (matching) only -tm time execution (matching) only, repeating timesCallout %d: last capture = %d Error %d from pcre_fullinfo(%d) PCRE: setrlimit() failed with error %d %sUnicode properties support POSIX malloc threshold = %d Default recursion depth limit = %ld ** Unknown or malformed option %s ** Failed to get %d bytes of memory for offsets vector Data in %s is not a compiled PCRE regex Compiled regex%s loaded from %s ** Delimiter must not be alphanumeric or \ Compile time %.4f milliseconds Memory allocation (code space): %d Study time %.4f milliseconds ------------------------------------------------------------------ Count disagreement: pcre_fullinfo=%d pcre_info=%d First char disagreement: pcre_fullinfo=%d pcre_info=%d Options disagreement: pcre_fullinfo=%ld pcre_info=%d Size disagreement: pcre_fullinfo=%d call to malloc for %d Capturing subpattern count = %d Partial matching not supported Contains explicit CR or LF match Options:%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s Duplicate name status changes Forced newline sequence: CRLF Forced newline sequence: ANYCRLF First char at start or follows newline Subject length lower bound = %d ** Character \x{%x} is greater than 255 and UTF-8 mode is not enabled. ** Truncation will probably give the wrong result. no parentheses with name "%s" ** Can't use dfa matching in POSIX mode: \D ignoredExecute time %.4f milliseconds Matched, but too many subsidiary matches Matched, but too many substrings ** PCRE error: returned count %d is too big for offset size %d string list not terminated by NULL **Match limit not relevant for DFA matching: ignored Options:\x%02x\X{%x}\x{%x}stack_malloc %3d %p malloc %3d %p \x{%02x}--->%2d: %2d: %+3d %3d %.*sCallout data = %d stack_free %p pcretest: malloc(%d) failed free %p Minimum %s limit = %d cr>any>bsr_anycrlf>bsr_unicode>Unknown newline type at: <%s No CRANYCRLFANY???CR, LF, or CRLF onlyall Unicode newlinesstackheap (byte-inverted) (neg) dupnames no_utf8_check utf8 no_auto_capture ungreedy extra dollar_endonly bsr_unicode bsr_anycrlf dotall firstline multiline extended caseless anchored (caseless)-s-m-q-b-i-d-M-dfa-o-t-tm-S-p-CPCRE version %s Compiled with %sUTF-8 support Newline sequence is %s \R matches %s Internal link size = %d Default match limit = %ld Match recursion uses %s --helprb** Failed to open %s wbPCRE version %s re> Failed to open %s: %s Study data loaded from %s No study data > ** Unexpected EOF ** Failed to set locale "%s" JS>** Unknown option '%c' Failed: POSIX code %d: %s Failed: %s at offset %d Failed to study: %s End %s Opt %.2x %s NC Close %s %d%3d %s Cond recurse any Cond recurse %d Cond nrecurse any Cond nrecurse %d Cond def %s 0, %s [^%c] [^\x%02x] [^%c]{ [^\x%02x]{ \%dCallout %s %d %d %d %s %s [\p{%s}\P{%s}]%s{%d,}{%d,%d}Error %d from pcre_info() Max back reference = %d Named capturing subpatterns: %s %*s%3d No options Forced newline sequence: CR Forced newline sequence: LF Forced newline sequence: ANY No first char First char = '%c'%s First char = %d%s No need char Need char = '%c'%s Need char = %d%s Study returned NULL No set of starting bytes Starting byte set: %c \x%02x Unable to open %s: %s Write error on %s: %s Compiled regex written to %s Study data written to %s data> No match: POSIX code %d: %s Matched with REG_NOSUB 0+ match()match() recursion** /%c loop abandoned copy substring %d failed %d %2dC %s (%d) copy substring %s failed %d C %s (%d) %s get substring %d failed %d %2dG %s (%d) G %s (%d) %s get substring list failed %d %2dL %s Partial matchNo match Error %d Failed to read data from %s \A\G\K\B\b\D\d\S\s\W\wAllAnyAnybytenotprop\R\H\h\V\vextuni\Z\z^$charcharnc**?+?*+++?+nclassxclassRefRecurseAltKetKetRmaxKetRminAssertAssert notAssertBAssertB notReverseOnceSBraSCBraSCondCond refCond nrefCond recCond nrecBrazeroBraminzero*PRUNE*SKIP*THEN*COMMIT*FAIL*ACCEPTSkip zero+++šs^J-ݕɕkT@(הÔ{qu°fSC |Tܮ̮{% ko ֽ޼޼޼޼޼޼]]]޼޼޼]ɻɻɻɻ޼޼޼޼޼޼:::޼޼޼: ///GGվ N  M=%N+3<DMSUiBpsvC{  >   O%-4=PNXQnRSTD !E"#U FG $  V& )%3&;= @'L?PSV(\He)p*|WX+,@AI-YJ./  K0)10283A4HZQ[Z5`6g7n8s9{:;L<AnyArabicArmenianAvestanBalineseBamumBengaliBopomofoBrailleBugineseBuhidCCanadian_AboriginalCarianCcCfChamCherokeeCnCoCommonCopticCsCuneiformCypriotCyrillicDeseretDevanagariEgyptian_HieroglyphsEthiopicGeorgianGlagoliticGothicGreekGujaratiGurmukhiHanHangulHanunooHebrewHiraganaImperial_AramaicInheritedInscriptional_PahlaviInscriptional_ParthianJavaneseKaithiKannadaKatakanaKayah_LiKharoshthiKhmerLL&LaoLatinLepchaLimbuLinear_BLisuLlLmLoLtLuLycianLydianMMalayalamMcMeMeetei_MayekMnMongolianMyanmarNNdNew_Tai_LueNkoNlNoOghamOl_ChikiOld_ItalicOld_PersianOld_South_ArabianOld_TurkicOriyaOsmanyaPPcPdPePfPhags_PaPhoenicianPiPoPsRejangRunicSSamaritanSaurashtraScShavianSinhalaSkSmSoSundaneseSyloti_NagriSyriacTagalogTagbanwaTai_LeTai_ThamTai_VietTamilTeluguThaanaThaiTibetanTifinaghUgariticVaiYiZZlZpZs!!@@.A;xH{x~80D(pxX,h`xdh8zRx (/D$4w@FJ w?:*3$"\(z0t(lbBDD TAB(DBDD vABD@EAAD  CAG Q CAA ^ CAH 0<YEDD V DAH cDA0pYEAG ] DAA cDAHBBE B(D0A8FPw 8C0A(B BBBG HDyFBB B(A0C8G@ 8C0A(B BBBG <xFKK J aH\BEB B(A0A8Gp 8D0A(B BBBA LFKK J aT|VBBB H(D0F8F`BhBp^hA` 8D0A(B BBBH  0AL C M@$TAPG CAT|8zMFBB B(A0A8G L44B4M4B5G5A5W4Q4F4A4B5B5A5W414A4[4A44N4P4B4_4L4B4A5\44O4E4A5\44J4X4B44A4Z4D4 8A0A(B BBBA  4G4K4L5H5D5B5B5B5B5D5G5I4 4e4H4A4 4S4n4A4D0eFEE E(H0H8G@n8A0A(B BBBXts@ q !$'*-07:}=?AFMOVRPw777UX[7MOVRPw777UX[7MOVRPw777UX[7MOVRPw77_^elpPx|ʘɘϘØȘΘԘݘ  (.6n  h0 8 o H   HH oo oo ov @P`p  0 @ P ` p !! !0!@!P!`!p!!!!!!!!!"" "0"@"P"`"P GA$3h864(s(s GA$3h864%%GA$3a10s_sGA$3a1_s_s GA$3p864_s_sGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realignGA$3a1_s_sGA$3a1&GA$3a1hpGA$3a1`st GA$3p864 tGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA$3h864(s(s GA$3h864%% GA* %(sGA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA$3p864eGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protection GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA! GA* GA!stack_realign GA$3h864(s(s GA$3h864%%GA$3a1eeGA$3a1eeGA$3a1&+GA$3a1pupcretest-8.02-9.1.el8.x86_64.debug-T7zXZִF!t/2]?Eh=ڊ2N`x<\+5b3IKU5~2NYgzG-O+ևeN?pcP`)EYsdžSG|!JE|^e9RiOtk:Syo%`W}vwZ؂X@Xƹk8;6ma|p& UzDžuK@!=g#`?Vz drQ$͹}h~fn\6Hk$ū:/+c+ h4f!q+Ք{N2PT&='2 Udo&x%f[- 3\QaOT([BO۳~鼥~.sa}r2Bftec>T!c?v!XkTk"CB3|$JI5z va?r\ zN0=Jpc^V(2;GNa_NJKV|4xɏK:T,-`nȖ>.溧#]|[ս@W)k^ј܍7Ips&:=8H`Dq<^x *vK.RX׃RXFb ?ixbbrGJW=GIMD%~m!zoJ0햃T-,Ջ=%e(\ #9Âc #dgYZ.shstrtab.interp.note.gnu.property.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata pp & 4$GoPQ HHHY ao  no `}H BHH00@p"p"0%%^hh " ((00 08 8@ @      `X `(/t>usr/lib64/libpcreposix.a000064400000020126152342605160011147 0ustar00! / 1575493209 0 0 0 54 ` zzzzregerrorregfreeregcompregexecpcreposix.o/ 1575493209 1667 135 100644 8096 ` ELF>@@  AVIAUATIUHS~HcHL,LHXMtGIT$t=HHtHXH9v[HULLAD.H[]A\A]A^f.HuH[]A\A]A^L-DHMLRL H1H XHZ[]A\A]A^fDH?%SHHփH dH%(HD$1HL$LD$E E@EHT$ EE1HcT$HHSHt011HHHC1HL$dH3 %(u'H [fDHcT$ AwHAWAVIֺAUATUHSDHLdH%(H$1EbHGAEډڀAEډڀAEHu M1E1E1E1AHT$LT$Ht$T$LT$Ht$RAHE1AW1LZYEuaMqL1@A߉TATTHH9rE-I9v'HDJTfD@H@H9u1fHcEMH)`I I K7@@8@ hh h    @@$$ Ptd(((44QtdRtdhh h GNUOU*%bo3tRdC' %@0@   hBBHQ%\! " Ucd#  B@ 0 P|C@H'(*+-./12346:<=>?BCGHIJNOPQSUVWXYZ^acdfhjlnprtvwxyz{mGdiiЎFM)4K;pn.F_}nWs{*_A9T l H1Y6pVqXH *K(*kF"3n -Kt,j9 z   , t  TU P:  S  0T s pNi@ n" e!  T  S^ pm1f  W Oa  T PSA pkD-@  s4 Q S  Tk `pa  T L&# lw L&  pw  @U  X" j S x" e!D " 0g H  T " e  T " g n RU  T Na <"s S pS  T  lw\ 0S  mQ POi" uqM SQ @<b k L  S `S S `b  T"  PT@ ] Y| <" q kR P m 2 S" ptq  @T ?  U6J  `TH `o 0P  `L rm E =z tg8 p>"Y pkD@ M BL  T d|t  pT  P`, S; @m0 @S 9 K <7  S __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_ZN7pcrecpp3Arg10parse_nullEPKciPv_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev_ZdlPv_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Evisspacememcpypcre_config__stack_chk_fail__assert_fail_Znwm_ZSt20__throw_length_errorPKc_ZN7pcrecpp2RE7CleanupEvpcre_free_ZdlPvm_ZN7pcrecpp2RED2Ev__gxx_personality_v0_ZN7pcrecpp2RED1Ev_ZNK7pcrecpp2RE8TryMatchERKNS_11StringPieceEiNS0_6AnchorEbPiipcre_exec_ZNK7pcrecpp2RE23NumberOfCapturingGroupsEvpcre_fullinfo_ZNK7pcrecpp2RE11DoMatchImplERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEiS5_i_ZNK7pcrecpp2RE9FullMatchERKNS_11StringPieceERKNS_3ArgES6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6__ZN7pcrecpp2RE6no_argE_ZNK7pcrecpp2RE12PartialMatchERKNS_11StringPieceERKNS_3ArgES6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6__ZNK7pcrecpp2RE7ConsumeEPNS_11StringPieceERKNS_3ArgES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5__ZNK7pcrecpp2RE14FindAndConsumeEPNS_11StringPieceERKNS_3ArgES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5__ZNK7pcrecpp2RE7DoMatchERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEi_Znam_ZdaPv_ZN7pcrecpp3Arg17parse_stringpieceEPKciPv_ZN7pcrecpp3Arg10parse_charEPKciPv_ZN7pcrecpp3Arg11parse_ucharEPKciPv_ZN7pcrecpp3Arg16parse_long_radixEPKciPvi__errno_locationstrtol_ZN7pcrecpp3Arg17parse_ulong_radixEPKciPvistrtoul_ZN7pcrecpp3Arg17parse_short_radixEPKciPvi_ZN7pcrecpp3Arg18parse_ushort_radixEPKciPvi_ZN7pcrecpp3Arg15parse_int_radixEPKciPvi_ZN7pcrecpp3Arg16parse_uint_radixEPKciPvi_ZN7pcrecpp3Arg20parse_longlong_radixEPKciPvistrtoq_ZN7pcrecpp3Arg21parse_ulonglong_radixEPKciPvistrtouq_ZN7pcrecpp3Arg12parse_doubleEPKciPv__memcpy_chkstrtod_ZN7pcrecpp3Arg11parse_floatEPKciPv_ZN7pcrecpp3Arg11parse_shortEPKciPv_ZN7pcrecpp3Arg15parse_short_hexEPKciPv_ZN7pcrecpp3Arg17parse_short_octalEPKciPv_ZN7pcrecpp3Arg18parse_short_cradixEPKciPv_ZN7pcrecpp3Arg12parse_ushortEPKciPv_ZN7pcrecpp3Arg16parse_ushort_hexEPKciPv_ZN7pcrecpp3Arg18parse_ushort_octalEPKciPv_ZN7pcrecpp3Arg19parse_ushort_cradixEPKciPv_ZN7pcrecpp3Arg9parse_intEPKciPv_ZN7pcrecpp3Arg13parse_int_hexEPKciPv_ZN7pcrecpp3Arg15parse_int_octalEPKciPv_ZN7pcrecpp3Arg16parse_int_cradixEPKciPv_ZN7pcrecpp3Arg10parse_uintEPKciPv_ZN7pcrecpp3Arg14parse_uint_hexEPKciPv_ZN7pcrecpp3Arg16parse_uint_octalEPKciPv_ZN7pcrecpp3Arg17parse_uint_cradixEPKciPv_ZN7pcrecpp3Arg10parse_longEPKciPv_ZN7pcrecpp3Arg14parse_long_hexEPKciPv_ZN7pcrecpp3Arg16parse_long_octalEPKciPv_ZN7pcrecpp3Arg17parse_long_cradixEPKciPv_ZN7pcrecpp3Arg11parse_ulongEPKciPv_ZN7pcrecpp3Arg15parse_ulong_hexEPKciPv_ZN7pcrecpp3Arg17parse_ulong_octalEPKciPv_ZN7pcrecpp3Arg18parse_ulong_cradixEPKciPv_ZN7pcrecpp3Arg14parse_longlongEPKciPv_ZN7pcrecpp3Arg18parse_longlong_hexEPKciPv_ZN7pcrecpp3Arg20parse_longlong_octalEPKciPv_ZN7pcrecpp3Arg21parse_longlong_cradixEPKciPv_ZN7pcrecpp3Arg15parse_ulonglongEPKciPv_ZN7pcrecpp3Arg19parse_ulonglong_hexEPKciPv_ZN7pcrecpp3Arg21parse_ulonglong_octalEPKciPv_ZN7pcrecpp3Arg22parse_ulonglong_cradixEPKciPv_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEmmPKcm_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcmmemmove_ZN7pcrecpp3Arg12parse_stringEPKciPv_ZNK7pcrecpp2RE7RewriteEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11StringPieceESA_Pii_ZNK7pcrecpp2RE7ReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZSt24__throw_out_of_range_fmtPKcz_Unwind_Resume_ZNK7pcrecpp2RE7ExtractERKNS_11StringPieceES3_PNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZNK7pcrecpp2RE13GlobalReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEprintfabort_ZN7pcrecpp2RE9QuoteMetaB5cxx11ERKNS_11StringPieceE_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag_ZSt19__throw_logic_errorPKc_ZN7pcrecpp2RE7CompileENS0_6AnchorEpcre_compilestrlen_ZN7pcrecpp2RE4InitERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKNS_10RE_OptionsE__cxa_atexit_ZN7pcrecpp6no_argE_ZN7pcrecpp7ScannerC2Ev_ZN7pcrecpp7ScannerC1Ev_ZN7pcrecpp7ScannerC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZN7pcrecpp7ScannerC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZN7pcrecpp7ScannerD2Ev_ZN7pcrecpp7ScannerD1Ev_ZN7pcrecpp7Scanner11DisableSkipEv_ZNK7pcrecpp7Scanner10LineNumberEv_ZNK7pcrecpp7Scanner6OffsetEv_ZNK7pcrecpp7Scanner9LookingAtERKNS_2REE_ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT__ZN7pcrecpp7Scanner11GetCommentsEiiPSt6vectorINS_11StringPieceESaIS2_EE_ZN7pcrecpp7Scanner15GetNextCommentsEPSt6vectorINS_11StringPieceESaIS2_EE_ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT__ZN7pcrecpp7Scanner11ConsumeSkipEv_ZN7pcrecpp7Scanner17SetSkipExpressionEPKc_ZN7pcrecpp7Scanner4SkipEPKc_ZN7pcrecpp7Scanner10EnableSkipEv_ZN7pcrecpp7Scanner7ConsumeERKNS_2REERKNS_3ArgES6_S6__ZlsRSoRKN7pcrecpp11StringPieceE_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Evlibpcre.so.0libstdc++.so.6libm.so.6libc.so.6libgcc_s.so.1_edata__bss_start_endlibpcrecpp.so.0GCC_3.0GLIBC_2.3.4GLIBC_2.4GLIBC_2.14GLIBC_2.2.5CXXABI_1.3GLIBCXX_3.4.20GLIBCXX_3.4.9CXXABI_1.3.9GLIBCXX_3.4/opt/alt/pcre802/usr/lib64  P&y Pti ii $.ui 9ӯk EpP)_yѯ mt)zh @:p 8x P9 :   (ȟ cП ؟ - " $ % &       P + ( h0 C8 @ H ZP  X  ` `h  p \x  O  K  k    Ȟ О ؞      I  u  W( 0 8 @ }H 8P X p`  h qp !x # A 2 z x F X vHHo HtH5bm %cm hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Q%i D%i D%i D%i D%i D%i D%i D%i D%}i D%ui D%mi D%ei D%]i D%Ui D%Mi D%Ei D%=i D%5i D%-i D%%i D%i D%i D% i D%i D%h D%h D%h D%h D%h D%h D%h D%h D%h D%h D%h D%h D%h D%h D%h D%h D%}h D%uh D%mh D%eh D%]h D%Uh D%Mh D%Eh D%=h D%5h D%-h D%%h D%h D%h D% h D%h D%g D%g DH|$ IL9tHeHHHH9tH@H;H9|$tH)L HH|$IL9tHH|$ IL9teH;I9tXH߾H{HH|$ IL9t/H;I9t"H߾HEHH<$HH9tHsHHf Hf Hwg H=f qg HPH~b HHXg HpH=g xHg g Hf.@HH=!g \H=f HHb H5g f.@H=qf Hjf H9tH6f Ht H=Af H5:f H)HHH?HHtHf HtfD=f u+UH=e Ht H=fa de ]wHDAUATIUHSH~>H>uLcC,Ѓ0 wH> ~)H[]A\A]@ߍHLwH> LLHBD-H[]A\A]Df.HdH%(HD$1%ptHT$dH3%(u}HfDHt$D$ t0 t= t4t?uIPf f0f@saH BwH5<H==RfHHxTH9v#HH9sHx&H7H~f.HxHHHPH=w<fDSHH0Ht Hxc H{8Ht Hfc H[@Hc H9t$HtH;HCH9t.H߾ [P[@f.SHHH{H9t[[@f.SH@LW8dH%(HD$81LDW0\$PMHcG AH$HD$HD$HD$HD$ HD$(~ H$HD$HcG$~ H $HD$(1ɋNL€EEDHH5;HHDHSAQAZYxu 1H\$8dH3%(uH@[+f.HH8dH%(HD$1Ht.1HL$.u%D$HT$dH3%(u HøH N<H5B:H=^:fDAWAVICLIAUATUSHD$HLd$@9HM1PDAMIHrZYt_AD$AtjMteL9B~UEI IlIIL9t3Ic|$IEA4$H)H;PuH1[]A\A]A^A_fDH[]A\A]A^A_H <7H599H=}9H ;5H59H=G9@f.AWAVAUATUSHH$L$L$H$H$H$H$L$HD$H$ L$L$HD$H$(L$HD$dH%(H$1H_ H9eHT$0H9_HL$8I9YLD$@I9LL$HI9MLT$PI9OL\$XH9QH\$`H9sHl$hI9ELd$pI9gLl$xI9iL$I9hH$L$H9cH$H\$H9]H$H\$H9WH$H\$H9H$AAf.HL$,j3H$PLD$@ZYH$dH3%(HĘ[]A\A]A^A_fDE1AAAAuDAeDAUAJf.A5DA %DA DA DA DA DAAWAVAUATUSHH$L$L$H$H$H$H$L$HD$H$ L$L$HD$H$(L$HD$dH%(H$1H\ H9eHT$0H9_HL$8I9YLD$@I9LL$HI9MLT$PI9OL\$XH9QH\$`H9sHl$hI9ELd$pI9gLl$xI9iL$I9hH$L$H9cH$H\$H9]H$H\$H9WH$H\$H9H$AAf.HL$,j31H$PLD$@ZYH$dH3%(HĘ[]A\A]A^A_fE1AAAAuDAeDAUAJf.A5DA %DA DA DA DA DAAWAVAUATUSHHH$H$L$L$H$H$H$L$HD$H$ L$L$HD$H$(L$HD$dH%(H$1HY H9rHT$0H9lHL$8I9fLD$@I9LL$HH9ZHt$PI9\LT$XI9^L\$`H9Hl$hI9RLd$pI9tLl$xI9vL$I9uH4$L$H9pH$Ht$H9jH$Ht$H9dH$Ht$H9H$AfDAfHL$,j3HH$PLD$@ZYt HcL$,H )KH$dH3%(HĘ[]A\A]A^A_@E1AAAuDAeDAUDAEA:f.A%DA DA DA DA DA DAAWAVAUATUSHHH$H$L$L$H$H$H$L$HD$H$ L$L$HD$H$(L$HD$dH%(H$1HV H9rHT$0H9lHL$8I9fLD$@I9LL$HH9ZHt$PI9\LT$XI9^L\$`H9Hl$hI9RLd$pI9tLl$xI9vL$I9uH4$L$H9pH$Ht$H9jH$Ht$H9dH$Ht$H9H$AfDAfHL$,j31HH$PLD$@!ZYt HcL$,H )KH$dH3%(HĘ[]A\A]A^A_E1AAAuDAeDAUDAEA:f.A%DA DA DA DA DA DAAWAVAUATUSHxdH%(HD$h1EC\IHIAI΃7SHD$PXZHT$hdH3%(uwHx[]A\A]A^A_fDHcDL$ HL$SLLPDL$IDLD$HSL Y^H .[H5R,H=,HtH:rÐf.1uHtDf.1uHtDf.AWAVAUATE1USHcHHdH%(HD$81u$HL$8dH3 %(Du|HH[]A\A]A^A_fHD$HI։HAHHt$DHIHH9\$uAuMtIAfDAqpAVAUATUSHcH@dH%(HD$81u)HL$8dH3 %(H@[]A\A]A^HD$HIԉHAX8-Ht(Ht$DHIH_H9\$t1@AuMtI$mfD]SHHdH%(HD$1HtH$HHw$HtfH\$dH3%(uH[fD17fDSHHdH%(HD$1HltH$Hw#HtfH\$dH3%(uH[D1@f.SHHdH%(HD$1HtH $HH9w"Ht H\$dH3%(uH[D1WfDSHHdH%(HD$1HtH$H9w"HtH\$dH3%(uH[D1@f.AWAVAUATE1USHcHHdH%(HD$81u$HL$8dH3 %(Du|HH[]A\A]A^A_fHD$HI։HAHHt$DHIH$H9\$uAuMtIAfDAq AVAUATUSHcH@dH%(HD$81u)HL$8dH3 %(H@[]A\A]A^HD$HIԉHA8-Ht(Ht$DHIH/H9\$t1@AuMtI$mfD]QAVAUATUSHdH%(H$1t01H$dH3 %(H[]A\A]A^DHcLd$HLIHD,Ht$LII4,H9t$uAuMtAEm`qSHHdH%(HD$1HtHt fZ$HL$dH3 %(uH[f. rfbfRf1E@ fff1@ fff1@ ffrf1e@ "fff1@ "fff1@ ffrf1e@ fff1@Ht'HHHRHLcH1LHff.AWAVAUATMUHSHHDL$LcJHL$N4 I9w5x@SBЃ w|;D$rHIc4HI9vEL{<\tH]HUHMLkH9HMI9w|HELmDLI9wH[]A\A]A^A_Ã\LmHUHMM}H9HMI9B*\HUHL}BD*WD1A1HHD$HUD$]fATHD$)H0HH+EHcH9wlHfD fD1A1LHsHUIf.,fDH1[]A\A]A^A_H=!fAW1AAVAUIATU1SHH(Ht$L|$@Lt$HMLdH%(H$ 1HHD$HB1҉D$ j3ZYu0H$dH3 %(H([]A\A]A^A_DLd$ AMLIT$LLD$0HT$ HHD$(HT$HST$HT$Jńt@D$@xYT$DxpH{)HcLD$(HcHL$ HH)H9HGH9wgH$H|$ IL92](H %VH5 H= H %WH5 H=z uHHH=!1H5k H@f.AVAI1AUIATUH1SHHHdH%(H$1IHj3MAX1ZEt"IMHLIFLHH$dH3%(uH[]A\A]A^f.UHAWAVAUATSHXHHdH%(HE1HƅHHHHBHDžgHI1HE1HDžHHLLj3HDLE1^A_DdDDA9 E9THDHc)HOHcHH)H9HGHH9HHHLELHHHHHHC4HKE9D9hLMEDHL1Lj3HLAZAYHHHH9tHMdH3 %(nHe[A\A]A^A_]IMA\$9McI9HH0B<. <AG)uCD9I"A(=00HHHA\$tx9}tHcH9SHH6I%=HHcI&H9<H9LD99HH06fHMcH0HD)L)HcH9HGI9 HLfHH@9OHLfHcH9a< A(DLA9ffHH8HHHLHHH9LH9HHHHFHHLHHHL@~HHHH89oHcHH)H9H4H3HH8HH:A(=@wHA(HI=PfDH9tYHfoHHBH2JH,HHHoVH))Mt,foHtRHHofF)HHHH@@UDžFH@L@2HH=81H5fH ;H5H=cL~H 51+H5'H=H[fDH H5H=\HH5H=1LH5H=1qHAWHGAVAUATUSHHHHD$GFHGI1E1dfDDHMu߃A<vAD$< vEx A_H9T$HCI9wxF$*HLsB0HA9o~FLkID$(EuHL)H H5WHbHA9oHH[]A\A]A^A_fDA11LHHkYfDH9T$HCI9wlB*\HLsB0ILcD4(HMl$H9D$t`HSI9wF4 HLkBD  A11LH[HfDA11LH;HwfUH=H@f.AUATUSHHHo(dH%(HD$81tGH?HL$HT$E1pHHHL$8dH3 %(HHH[]A\A]fLd$HHrID$LHD$HSH3LHH+D$HH5^LbH|$HL$E1HT$H|$IHL9G_HBfDH< H9C@+ ELl$HIH@I$Mt L!ITLLLc@CH=+H3H<@f.AWAVAUATIUSHHdH%(HD$1H9t7L/LIHnM9HwH9HHkAD-MI$HC AD$C(H; HC01HHC@HC8nHC8HtHXHC0HD$dH3%(H[]A\A]A^A_ÐI6HtLHL+^@HH,$H;II9tH$L+HCH*fDH; HC ; C(,fDAEL+@HHGH9tH(f.DAWAVMAUATLgUHSHH8HwdH%(HD$(1HDIHD$I)LH)HHD$ L;'HwH|$ HL$HLHL$It,HLHHHL$LD$1HL$LD$Ht(Mt#I= 0n >= 0basic_string::appendvec[0] >= 0vec[1] >= 0basic_string::replace__pos <= size()matchstart >= startmatchend >= matchstart\0(?:)\zNULL == "Unexpected return value from pcre_config(NEWLINE)"%s: __pos (which is %zu) > this->size() (which is %zu)/usr/include/c++/8/bits/basic_string.h%s:%d: %s: Assertion '%s' failed. basic_string::_M_replacebasic_string::_M_construct null not validint pcrecpp::RE::NumberOfCapturingGroups() constbool pcrecpp::RE::DoMatch(const pcrecpp::StringPiece&, pcrecpp::RE::Anchor, int*, const pcrecpp::Arg* const*, int) constbool pcrecpp::RE::DoMatchImpl(const pcrecpp::StringPiece&, pcrecpp::RE::Anchor, int*, const pcrecpp::Arg* const*, int, int*, int) conststd::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference = char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]int pcrecpp::NewlineMode(int)int pcrecpp::RE::GlobalReplace(const pcrecpp::StringPiece&, std::__cxx11::string*) constbool pcrecpp::RE::Replace(const pcrecpp::StringPiece&, std::__cxx11::string*) constpcre_scanner.ccskip_ != NULLvoid pcrecpp::Scanner::EnableSkip()void pcrecpp::Scanner::DisableSkip();4eHPx ظ\ tVt((8ػ 8xȾHxXhXXxX8DXXlxH4(X|0 xt   ( 8 H$ X8 hL x` t  ( (< 8P Hd Xx h x   \ hX(8(X d Xt(H H4H\ 88 Hx<H`zRx $FJ w?:*3$"Dx\ p!HxBBD D(F0{ (A ABBE r(A ABB̷D m G i]ظbEV E AzPLRxm   $"sEV E A,hEDPXB`IXAPn AA zH F A lX"FBJ B(A0A8D@UHHPXHA@m 8C0A(B BBBG D 8F0A(B BBBA \$FBB B(A0A8GNKA^ 8A0A(B BBBG \FBB B(A0A8GKKA^ 8A0A(B BBBJ \8FBB B(A0A8JQKAm 8A0A(B BBBE \DFBB B(A0A8JNKAm 8A0A(B BBBH hxFBB B(A0A8DpFHAV 8A0A(B BBBG VGcA$&8&HL0FBB B(D0A8Gk 8A0A(B BBBC @FBB A(A0Gpl 0A(A BBBI 0iEG L AG |aEG E AF $iEG M AF HaEG E AF Hl`FBB B(D0A8Gk 8A0A(B BBBC @FBB A(A0Gpl 0A(A BBBI @`FBB A(A0GG 0A(A BBBF @UEG B AA d8x40, ($  ,@ Th|  0 DXl  HhFBE B(E0D8Gp 8A0A(B BBBF (0 EAK ~ AAG H\ PBB B(A0D8G` 8D0A(B BBBG  6M`d FBB B(D0D8DP 8F0A(B BBBA  8C0A(B BBBA \ FJB E(A0C8JSmFAd 8A0A(B BBBF ,zPLRx   4P FME A(F0MZBLCA 0A(A BBBA < EC P.n..c A L.,zPLRx-   4$IL @9FFB B(A0A8GP 8D0A(B BBBG (zPLRx  P0t0@ FDD D0c  AABG <T FBA A(GpV (A ABBC $zPLRx  p,ب0;H |FBB B(D0A8GP 8A0A(B BBBB @ ,rHi\ Rp D0 FAA G0  AABK 0 wEAG R AAO DAA 0Q 18 (4QH C A HDqFEB B(D0A8GP 8A0A(B BBBC D,SBB A(A0f (A BBBJ X,OAA oABEHqFEB B(D0A8GP 8A0A(B BBBC dTFBE D(DPjXK`JhApAxAAAAAAAIPp (A ABBD P@cFBB E(A0D8D 8A0A(B BBBD ,zPLRx  45P8TFBB E(A0D8D 8A0A(B BBBD n54UPgEN I(B0B8B@BHBPBXB`BhBpBxBI N AF UA< 5FEA A(D` (A ABBD $zPLRx%  `,@2HW e ;WK Y0Y0 uBGNU@:8P9:  H0 xh  o(H  Н p*p)h oo(oo'o 0000000011 101@1P1`1p11111111122 202@2P2`2p22222222233 303@3P3`3p33333333344GA$3a199GA$3a1H0^0GA$3a1xxGA$3a19I: GA$3p864P:|eGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA$3h86499 GA$3h86477 GA* eeGA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA* e/gGA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA* 0ggGA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA* g~jGA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA* jOkGA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA* 8B9GA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA$3p864PkgtGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA$3h86499 GA$3h864H8H8 GA* ptuGA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA* uawGA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA! GA$3p864pwxGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA$3h86499 GA$3h86488 GA* P99GA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA!GA$3a1xxGA$3a1xxGA$3a1^0c0GA$3a1xxlibpcrecpp.so.0.0.0-8.02-9.1.el8.x86_64.debugB7zXZִF!t/w]?Eh=ڊ2N^ n|굧Dv4GO+RPsP   3 M7燦CEC8vpP: VfC4%#+@g@;Fӵw&_E*!="s v 2 +Njl^#yUŐ8!a5gzUőCo4:PoE_'Pn2YCO%2%vmx|{pXcɮ!وmD4 Nlf=ͯe*6 7ְrGK9ո}H޻o^TjVTi>/ufDpJzc{_۩7Gp;OXg ?߮K&w`JHՃeBI颛}.Q:ʞ~JʢWu#MZ9󩸂q1MЌJzWmS]o*Jnz#1i0s2ɩ}j=Prv9.\ @?Ҟܓ}OL%`JtvHbJ-o(U_Q3Dz S$ 6}O2A@=',"6Ջ_kFQt+M.vX S]2oARhɱњmDcW˘k;x߼DH4ApNmGX`OR]Dl@7?oeVY[aED`V8NP +4a4+Ǝ % oo_c / OK('N1uv(~n1$1fߴ h[- wJ-=ۨOaAhS\wV_wRU2 y;@( ?YKmM*g8ϳ[+2 s5\gL=/<9w;Ov1hԱzh[£0dԪtYp;-y$W01*!USg#V HǢlTȄ&1(~o #[?"CԳM4~? [BZ*aMEa\M_TI! .&3ˬ]?=3l .DiX2!*@S'xGd\hN 7?} *'1/gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.gcc_except_table.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata $o((( HH 08o''Eo((Tp)p)h^B**phH0H0cp0p0n 4 4w77@}xx xx ((4``$$ h h   @Н Н0  h `084+lT:usr/lib64/libpcreposix.so.0.0.0000075500000027170152342605160012013 0ustar00ELF> @x'@8@   `x PP P $$ Ptd<<QtdRtd  `pGNU]p]~|(VI_@ ! BE|H>G>qXeoI>e ^ , F"m   |  U { __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeregerrorstrlenstrncpy__sprintf_chkregfreepcre_freeregcomppcre_compile2pcre_info__stack_chk_failregexecpcre_execmalloclibpcre.so.0libc.so.6_edata__bss_start_endlibpcreposix.so.0GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5/opt/alt/pcre802/usr/lib64ti ii $ui .       ^ h w           ( 0 /8 D@ WH d         x            HH! HtH5 % hhhhhhhhqhah Q% D% D% D% D% D% D% D% D% D% DH= H H9tH Ht H= H5 H)HHH?HHtHm HtfD=u u+UH=R Ht H= IdM ]wAVIAUATIUHS~HcH L,LHXMtGIT$t=HHtHXH9v[HULLLAD.H[]A\A]A^f.HuH[]A\A]A^L-DHMLRL H1H TXHZ[]A\A]A^fDH H?Hf.SHHփH dH%(HD$1HL$LD$E E@EHT$ EE1YHcT$HHSHt011H,HHC1HL$dH3 %(u'H [fDHcT$ AwH"AWAVIֺAUATUHSDHLdH%(H$1EbHGAEډڀAEډڀAEHu M1E1E1E1AHT$LT$Ht$OT$LT$Ht$RAHE1AW1LIZYEuaMqL1@A߉TATTHH9rE-I9v'HDJTfD@H@H9u1fHcEMH)`I I KD H01u¡wxekM@ Kh*=Ցߕw3lWdž4*2I^ Bg%nJ{BN}Vu=!1y5Q"PӨёއ#M4[hXz`-K9p>㽵Jפq`ž _g=΅Y4g72ϲq20^!eXԛ;iX8K.g^Ƹh"e~t؞o"ݚ_n45z)~,o/ocas}G(w]1.nM"p0?"Ԙnej[U4+k^AL>"Id1)@1JBV4[i;uX ץGx#6?ƟKݯ+qnexڨG];*d <j 8'[sƀ$tAt-4UsVY٪FRODQvGmӯZ?]L@qbt*QrK@AP{u>ɦHlPgYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata $o((@( hh0xxU8o,Eo@T@@p^Bh c np p w  },, @@ <((`     P P` `  `"4"hP&"usr/lib64/libpcre.a000064400001211100152342605160010057 0ustar00! / 1575493209 0 0 0 970 ` .+xdTTTTTTTTT     -HAAU(fuXیییht_pcre_find_bracketpcre_compile2pcre_compilepcre_configpcre_dfa_execpcre_execpcre_fullinfopcre_get_stringnumberpcre_get_stringtable_entriespcre_copy_substringpcre_copy_named_substringpcre_get_substring_listpcre_free_substring_listpcre_get_substringpcre_get_named_substringpcre_free_substringpcre_calloutpcre_stack_freepcre_stack_mallocpcre_freepcre_mallocpcre_infopcre_maketables_pcre_is_newline_pcre_was_newline_pcre_ord2utf8pcre_refcountpcre_study_pcre_utt_size_pcre_utt_pcre_utt_names_pcre_ucp_gentype_pcre_utf8_table4_pcre_utf8_table3_pcre_utf8_table2_pcre_utf8_table1_size_pcre_utf8_table1_pcre_OP_lengths_pcre_try_flipped_pcre_ucd_stage2_pcre_ucd_stage1_pcre_ucd_records_pcre_valid_utf8pcre_version_pcre_xclass_pcre_default_tables// 78 ` pcre_maketables.o/ pcre_try_flipped.o/ pcre_valid_utf8.o/ pcre_chartables.o/ pcre_compile.o/ 1575493209 1667 135 100644 70976 ` ELF> @@ LAVAUAATUSIYAAA=L?E LC [C#MIEcE1EtqfIEJA?AD D9uN #J\#tHHЃJwFLcLGZEuDH1L5AOcM>AfDIu[]LA\A]A^fD[D]LA\A]A^EuODLCLMt&@IEX LHLCu1 n9fDSA7A0PЀ{SBDЍJЀXLKDEC=83-<{cLHcAIq`@70NAI)A I`=D7)DA<A'E1LA{E1A-uEAAIAHA 1 fDMMADAAHACHcA*u߅xlE|I}l9u-I%@HPIكBƒ@=MHE11A0L7LcCtHuQ0uL1LcCu}t1oxAI҃A9S"IEA`~ D7)ЃAAL)oDCHKA}E AH<}<-tAu޸LK1MȅtmE9MȺ0A7M)x 7{=M[EtI1A}#M:1M3IAM)A1D)غM)‰IIIALEHL 8@StEwS@@@txDA1At>H8@SuA<9HfD@YrV@[wfDCfH@McBDI@AGfIEATt]fMLLDHL$L$t ABfIEATtfABfIA:TtH1[]A\A]A^A_f.EWfAEMV(fAzLDHLD$LT$D$LT$ABfIA:TtAGfIL0NdH3YGfxB7fE2AG<%?H5I@AGIW<LBfIG!iEAG<AGIW<LBfAWIAVAAUA!AATAUH-SHH_@X]JǃBBv uxusAGfIA@HEtG@tN9u:AFfIA>Tt(1ҀXHpx uɉ[]A\A]A^ÉÀA$D말AWIAVAUE1ATMUDSH8EHT$L$HH4$dH%(HD$(1HL$ (bHD$ EDT$HHD$\[#u @(o)HD$ |u EHHHL$ P+\uHAHD$ Qt QuHHHD$ u5IAH\$(dH3%(DH8[]A\A]A^A_fD\uHAHD$ yEugHt$ 1ҐNH\ti^HFHD$ N\tA]HT$ HBHD$ J]\H@xEHptHuHpHt$ _L$HT$MAH4$H|$HD$ 8}A$|$A9A<$DL`HD$ HPDH ;HT$  HЄurH<$HPGsAHt$ 8<DP9HfHHD$ H9uH|$tHcT$H)H99HL$ E1A5HBHD$ JH€QHHHD$ \uHAHD$ yEuQ|HAAHD$ QHEt E94$}E4$IAy?QtFt%)t Hf)tHL$ HHu HHE1HL$ PHE1~H=t !jHE1iAH|$DD$DT$DD$HL$ E1DT$#HpAWIAVAAUAATUSHH(dH%(HD$1HG0Ld$ Hl$D$ HD$fHT$HJHL$:tMEDLHHF~Ht$dH34%(uH([]A\A]A^A_@f.AWEAVAUEATAUSH8HL$Lt$pLD$A|$ dH%(HD$(1LAIvI#tfH9HHxH|$HAIV8uMcL)LH9wA8uAt A8HuHcIvHHD$pHPHT$HHNfDAHH|$YAIvH@\IV< L@LD$(tY~OH ?H5< #,wt)H1HD$PH? 9uMD0AEINM<#tf.H9IIxH|$A@.AIV8uIcH)HH9wA8utAA8@uL7INLD$ApIPHT$A@IMD<*tdIVHc*u f.1H\$(dH3%(H8[]A\A]A^A_ALH|$Ic@INIAV`Ht$$E1DH|$D$$cŋD$$uHD$L@LD$AE"LHHcH>D9/A#IFHc,(1A9A0'H\$D#DA~DH?4H vD#$AtH1HH?A 9uD9IFHc,(1A9fA~tH\$D#DA~H?4H vD#$AtH1HH?A 9u덁# 1|$ IFHc(IVHc*qM b|PD1|$ @2IFHc(ЃIFHc(IVHc*A~^tYH\$D#DA~DH?4H vD#$AtH1HH?A 9u؃\HHcH>E  4 & HA/ 6IA_ #A01U 1 1E E rM1dHT1GA( AG1)/ t~#_ t 01|$   Ձ( 1|$ D9*IFHc(D9HHBHlHHHHBHl!IFHc(D9AtA A1AIFMcB ЃAIVMcB"AIFMcB nAbIVMcB"MFA9IFMcB AIVMcB"At$A t~#At A1A A A @f.AWHAVAUATUSHXHHT$H|$PLpHL$dH<%(H|$H1{T$ D$!HD$-1L%L0HD$ H$6+H<$HcIH@MT HHtAVHcIuHD$.HD$L0\D4 LpP@f.AWAVIAUIATAUASHH|$fD…tTRPtQHH wSHH?tOQHOHBH…u[]A\A]A^A_GfHHEu+wHHLfG<Z?H HD@OQHOHBzMM]M9sBALLfLI9uUDfLI9t;HL9rGfIL9\$w oGH"JI9wM]빐f.SAL IHDDDEtcAPtfA\txA_AHMcG LH?tGHO<HBLDDEu1[DGfHuDHYGf9tqH:fL<+-%MЉIMG<?HGHO<HBBf.H[Ðf.AWAVAUATUSHHH$0D$|$ L$HH$H$8t$pL H$H$PH$H$LD$xH$dH%(H$1ACpH$H$x$H$@H$p$($@DŽ$0;_uBCE1fD$jf$ff$hIC@$0H$`H$`IC@$(E1H$HDŽ$H$PfDcAs`HcH$L4H$@$HE‰$MHD$($$$ t $AC`D$ ;D$pt$@IAD$AD$$t+ID$A\AD$I$@H$fET$D$ L$XMDŽ$DLd$@Ld$PD$[\$[|$tlj$1%E1HDŽ$E1퉜$LӉ$MD$8HD$ %D$\DŽ$D$0D$H$D$XA\ L$XAyE Dl$ID$8HLIILDl$IL$XHIB E!HH|$(MD I9 HD$@H|$(I9NjLBLH)Ƹ)HH9HD$(H L|$@H;\$PY ED$8)AD$փ A? A{o H|$ TAED$A D$D$ D$` IBE1B0; A#lAD$ D t;H$XSL|$ AfAIHI+r0HAw1I+R0AWfAw|XH=HcH>DL$XH.D$0D$hAE1D$D$H$H$PAA<+: D$D$`IBHH$H$XHPH$XP*S?D$ |$ ME1ɸ^1E1۽^L$HAH|$(H$DL$PEbxHDDŽ$Dt$ H$XH$PHPARH$LT$xPAPH$tPSASL$L$H@\`LT$`u H|$(aA9)=HD$(HQ $D)9 H\$(A,$A^UD$HI_fEGL$XM$f$,$D$H`AI_D$H,$E1L$X$ѐEH$XE1PLHHHc0t,fCLIDlJAHc0uA}AQII}!HcE10t-C4HDdr1H0uA"+HD$xE9d$IɉD$hTfDD$ tL$ED$I_AfABs;]$D$ t A$I_S$ ( |$L$X$Cl$\A jx ŋD$D$0D@AR`L$ E1LT$hLt$xL$XLLHE6LT$hAE$E A|$[H$DLT$0LT$0T$\I_ ʹD$ tDl$fDDl$A1H$<HH@{9$ AJt |$L$X L$\L$ kA jxD$0DL$XAq@=weH@$HsUAIIQu$FfD]t;B@8^Ht&\uB<]uBHHuE1H@E_ ^V AIIqH$XAi\uAyEIqtܹH€sKIqfDL$XH'D$0AE1D$hD$D$H$f\$,$ED$ I_ljD$ |$0AL$XDL$XHw'AAD$hfDHD$(ML$XHt%LH+L$@)HH9HD$(ʉACp$ƒ;$AC`DT$p9MÉT$pH$$A9|m'H$$@Hc$(HLdI@Dl$AD$"T$[I_D$ ADl$fDD$D$0,$hH$XHVt~HVH8tfH Hu@}tR@,Ar@}t>0-zH8tHH Hu@}fDD$ Dl$D$`uVE1}fDLH|$PHLT$H)HD$PLT$H)I)HL|$@rL|$PL|$@`IBAB0L$XfDI9BH-HD$x4H$L1H$dH3%(RIH[]A\A]A^A_DH|$ t2H|$(u*H|$ H$XI+B0_f\$f)ffGHD$ D$ @H$XSE1L|$ fA?IHI+R0HAWI+B0AGfEGf@otB,$LD$hA BxE1D$HL$X$!H$XA<H$HfDHHH$X:B)@>z@t؋t$\ f.A-DH|$($HD$ fDD$0ʼnD$l@<]@: H\$xE‰ l$tEwt EA~D$\A BxD $L$` D$`DŽ$ED$H$HDARH$hDL$$L@LT$p$_AXLT$`D$D$`,$E1DŽ$<D$E'DA^$L{'DfAfC"D$[E6E9E!DsHSt H@rE)A A%fALzDfDb@AL$Ict1ƒA<A<D9rLfID$`E1L$X@Ht$ H$XHD$ I+B0~f)ffFDA$I_CfDH$XML@H9HHxH$XH HU8uLcL)LH9w8uAt 8HuILL7L$XA9A1DD$LH$XaIHc@H$8T$LH+$A9|Mg?.fATfAG$L$x$D$L$$t$`Dsu E",$DŽ$ XG<% ,$EIE`AVA,AL1EfAWDAWI_,$AGh@,$D$00HD$x]ABs<H$fH$IGHD$H)$)$D$ L\$HE1D$hD$`AL$LEωD$0D$MD~ |$[tH$X.HD$(Ht H|$HH)HD$8H$XIP\xED$8LhIuH$XAm]iD$8]EMIL$D$ADD$`ED$tXEOAu\$,$AEgL$XD$8EI_D$D$0jf.[G\nAV`L$ L$XAHt$xL[HD$xXFH|$(AW]E @+3m&9EHL$xH$LH$HL<<1҃D$8;$HCD$`HS$LCL$X H$HH 0@1HHH9u퀤$DL$XAD$8H$XID$ @>(P\xEuLhIA}EaL$XAEM<\t݃  D$8<-t$tt#~D$ H$XUIՉLcHc@T$0t"IVF$"DDHc@AIANt AAD$8<-SfDIAH$XAI\u>AIE IQfDHJE H$X HЀ\t܄t ]D$8xf. _ VD$8H$XpI@=H@$H PHxI \t)]AM@8t-I\uAU]uAUID]uINH$@::H$Xx^H$u$HD$8H$H$XD$hE1D+$H$(LMcDD$4LML$8IL$ DIMd,C,3@?(@9uH$LLLuEH$(D$4L$ L$8A D$ '-CH H$HcHco,)$o|BHHc)$Hc)$ J,H$1)1u$D$8.H$HHH HHH9uID$8A DLkLL$0HcLL$XD$`EH$XpI@\xE t uANt D\$8ESfD\xEPD\$8E'f.H$XIP @H ?H= @HcI#,t$HV1fH? 9uLH$XfH$H$)$)$:HD$xIf,$DŽ$fDIA1zfAfA|$i A_ AM D$AEhL$HHL$xLLT$0H$LLCLT$0>1AL;$HAGIAW$LAGD$L$XD$0$D$Hf.,$kfDD$:pNrBHcHH$PfDH HЋT$tH$PP?H HH$PG<LH)H$A@`A!E IJ(MBHHc$L$A#AL$H߾$D$MLCHHLA^HKD$IL$fDKL$ACiDŽ$CI_A,$E Hc$IAVI)H|$(AEE]fMI)A;]nMD$M%f.AD$fIA<$T0LDLL4tMA@IrPHXHH\$`H$XIH@u:-2)ED+t$`1۸L%LELL|$hL$@HOd4HALcA9uH|$`LLLuHcL|$hL$ALpi'A1IL$XhLHL$X@PÀ,<<4IR>MiL$XAyH:.IL$XA MIH uDD)\$hH|$(,9\2ABX='52\$hSA;R\|SAR\ I3H$XABXf.AB`|$ ME1ɻE1۽_L$HAB`AGAB`AG_DALAAD$A%AIE_AGEgA"D$[AL{DHH HHAH|9tHkHHcHD$0L$XD$` @LHL$XHQ߀[<H5HcH>{&fD0DsH{t KH{@sALD$x$\$9tAD$EL DŽ$Dl$ExD$$EyD$$$D$$$$1 کD‰$ At$ L1H$L\$.L\$0)H$ff@HD$xAI_b |$AL$XbD$,$D$0D$H$A#L{DQ$HPH$XH\xEHp( D$tA\l D$8A9O-A A DD$tE-AAD$  HLAEH DE9riDDH=AGTDA9t4fЉAH=G|9A9sAHLkLD\$`D\$`HcIDLD$`HcLL$XfDL1BfH€:UuAh +-A9)H$P|$$L$H5D$MDŽ$D$0wD$A AH$XB<<@<'@1<{D$AIEoL$XD$0$D$HiH$P\4MXD$,$DŽ$D$0HD$xED$hDt$hL$XEyHg E$DD$H$D$DD$0E9D$DD$hD$hfDAIwAfDHL$XAxDHt$HI$LT$8L\$0AGH)HL\$0LT$8fo$fo$I[!AOAWfAǃEL$AIct$1҉׃A9A?D9r$IL$XAy\D$8D$D$8D$H,$$D$D$0,@HD$x L$XHD$xIDA9)D$H,$MH$P$fo$fo$A_Ag*MwL$0H+$AUffAGtIC@fx HIC@D$ ;D$pt A9)uD$p$@IAFAF$$AC`H$L0H$LH$H$$H$H$@)9HD$x1{hLHD$xL$X7[fDIFكH5Hc H>DT$tDE.D$8Ab?H5L RHcIE#At HpE1fH?A D9uLH$XfAArH$L$$LHcDxD@H4$AsiEE@$E@$LeHE9L[C^HLH)ԈSHH$CH$HD$D$L$L$M9D$D$LvDHUHAEIfDEtX"AUHEHD҈PHEHHPHUHM9wAH$MAIL$Hߋ$@"AUHEHDˆPHEHHPHUHM9gH<$IL$$HfHH$H$D$HD$H$M9H$D$D$11IHD$x<DApHIPH0tH2H0uD9\$MHL$XAH\$0$\$HzDAEIFH$ʉfD$8IH빃 fDI뫃    @ ߁ AJtHD$x D$L$XMAHD$0$D$HHDf.DJDWE9DDAHBTDA9t>DDEAADLACD\EA9uEAARE9s9?ED9 D93HVD9HDHT$`D$HT$`D$H HcLH@DL$XE)H|$(E|DD$0HcA{fDEAIŃAHDEt#IFA HȃHADH9uE"DANt #fD|$0<A}EpID$8@DŽ$,$EH$1LAJI_EHDBfH€:UuD)Љ$EAIJ(MBHHߋ$L$D$L$I褻HCHc$HHH$L$D$ACi1ɈLmDD9.C9D@AyEhI2@H$MDQffAfH)fuD$$$$D$t$$$dHkHT$8HHEH]H HHHXH HHH/ HHHkH_ HHEH]H0HHHXHT$8L$XD$8HD$`HAgHD$xL$OAHI_EAHIL$$D$薹HCHHHH$ED$L$r,$LHcщX D$DŽ$D$0HD$xL$X@H$IOHp HH҈QH9u AA-AB`)؉Ã H|$(AIz($LT$hLT$hIHD$D$HT$`HT$`D$HD$HLI)HD$xA6,$LLJIJL$XB<< \$<'A}'DD؉\$0$\$HDŽ$D ŋD$D$0[AGdH$XBHHI9uA95 -U +L H|$(MZ(WA17D$A>D$0$D$HjH$o)$o@)$)$H$H$HLB H@H HI9uz& LrI1AXyIB@AB|HAqP IAWPAWHHu]HD$xI??fEE)H$X~IAH$XA9 LHL$X8) H|$(A`|$ ME1L$PEbxE1DŽ$D`H$DL$HH$HHq  HHH9uH$H5 @H uD|$tEbHkHT$8HcHHHHHXH HHHHHHXHHHH HHHXH. HHH0 HHHXH^ HHH` HHHXH/HHH0HHHkHHcHHt<$g$l$TH$D$ A$HcH$LH $H$D$ED$(HMEAH$H$LLcHII9v8HCH@UHfD0UHCHDPHCHHHCHI9wL$ALD;$|EIML$$D$D$ D$(H$D\$`1L׉LT$`E1xLT$`IR(IGLcIJHHH)IHHIRHI+B(BIBHIR LHHD$x`H|$ A1H$XE1۸[[E1L$H@$MH|$(3D$hAjXIZPHcL$hE1L$D$EIMHH˃HH$fDIvHLuH$A<IcD$\AID9uL$D$MD\$`1ɋT$hLLLT$hELT$h`EMZ($H\$xE‰E1<>IJA)ABADŽ$D$D$0AABXHc\$hIjPD$`H$CIE1L$HH$ ILH$D$ DŽ$%$]fH$A<u]AM`fQ9t$4DŽ$HcE\AID;d$`I^LLHtyҋT$`HcE\LH$L$D)I<Hc$L$ABXAJ`IjPD$`~3t$`1I9tEf9TIcB\H9I^LHLT$`AAB`H$AFD$hLT$`HAABXH$L|$ $H!<)FIM^1L$XE1E1ɽ^D$h]MH$1 t0Hx1tu@1f.@1Ћl$tHkHT$8' HcHH) HHHkHMdAo1IL$X鏱D$AD$0$D$H1LL$MD$fHD$xL$X鯼HD$xL$X 闼,$ARqLr>L$XBE{AB`DD)-D…A;BdffAGA`|$ M1EbxE1E1۽`L$PL$HDŽ$D,HD$xL$X˻HD$x黻HD$xL$X飻@)`HD$x'鉻HՁL$XLrZ1BHD$x;OIꋼ$L$AB`H$ HHD$xL$XA HD$x6ME1E1HH$XAGfL$XACMsAB`HNIB(HI9D$ 1tAIAGL$X1ۉ|$ %$1ۉ$%D$\ͮ׉AHD$xL$XHD$x0HD$xL$X1HD$xL$X*߹MHD$xM>ɹH\$xI鶹HD$x*馹ABXIZPD$hQE1Ic$H$DML$D$IcD$\H;l$hH$HsLuMAGfAGHD$xHD$xL$X:HD$xL$X+޸HD$xL$X0ƸHD$xM鳸AB`H]IH=HD$x)鐸HD$(Ht 8Azp1ۉ|$ IHD$x[$L$MD$DL$`1LDLLT$`EL$DD$hǙLT$`~(fAGfAGH\$xDD$hL$A{RAtmE~ZE9jd|;fAfEoH$1H$IGHD$H黽H\$xL$X^A޺H5LLT$`LT$`mAGhH A4H1k l.A9uAGfHD$x:ɶM1IӃ|$tD1HD$8IGHD$HμDl$Nj<@9|f.AWAVAUATUSHH $H(HT$HL$LD$dH%(H$1D$\%D$h$H|$xH HD$IMHHD$HtH|$0 HD$MHLDIL$H$IH$I@H$  LL LLL=fDHcM,A}(A|* IDLHHLwHLtHLiHLHH= HH=Hƹ H=u&HcځM, A}(@D$E%==HD$xH\$D$h8A8L)DǾnoH QHHH@uPHf2f  fD0fD%p= ~D=@=Ph=0HA H$fD$ 5=DŽ$ DŽ$$ L$LHDŽ$HDŽ$HDŽ$HDŽ$L$L$L$L$$LD$hHL$xLHT$pE1H$HDŽ$HDŽ$L|$pƄ$^LD$0HL$@HT$8H\$xHHD$dPH$HD$0PjH$HD$HPH$PHjj:D$H@D$xD)EHcT$\$$HHT0HHT$HHT$HHHPH 1E1ERCP$I9ι$LD0E1ɉE$H$fufE $Lu DfEAf}fUfDEEHHE($HM0L4HDŽ$DŽ$DŽ$H$L$L$DŽ$HDŽ$L$Lt$xA^}jt$0jt$HSjjLD$pH$HT$x訡$ fE$(fE$4H@D$fE EtD$dL$huHD$x8tD$hHD$pHPHT$pHD$pHcT$\L)H9:D$h$1ۅÉ$f.L)HHAUD$huZH$L9HB4$LH$BR HM,I\AU HuD$h5$4$LAIHtx$Ll$ L4$DfAyuEAAAQLL кHMTE2Au׀E2]ffAAIyDIHuL4$D$hBEhD$dfDH$dH3%(HH([]A\A]A^A_@@ LH|$D$h,A,} P>DŽ$DŽ$H HD$HHD$HtD1#D$h$]f9]D$h($E‰D$hHD$xDD$hD)H\$H Ep!LT$l1LD$l$L=MD$duEu?tH$H4р9DfUfM >r'D$hAHHD$1cDŽ$ eD$`xMtH$H9ufEfM .HD$xH\$D$hAL)1LLpD$`y$1LGfM D$hAHD$xH\$D$hAL)f.MIH1 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 no error\ at end of pattern\c at end of patternunrecognized character follows \numbers out of order in {} quantifiernumber too big in {} quantifiermissing terminating ] for character classinvalid escape sequence in character classrange out of order in character classnothing to repeatoperand of unlimited repeat could match the empty stringinternal error: unexpected repeatunrecognized character after (? or (?-POSIX named classes are supported only within a classmissing )reference to non-existent subpatternerroffset passed as NULLunknown option bit(s) setmissing ) after commentparentheses nested too deeplyregular expression is too largefailed to get memoryunmatched parenthesesinternal error: code overflowunrecognized character after (?<lookbehind assertion is not fixed lengthmalformed number or name after (?(conditional group contains more than two branchesassertion expected after (?((?R or (?[+-]digits must be followed by )unknown POSIX class namePOSIX collating elements are not supportedthis version of PCRE is not compiled with PCRE_UTF8 supportspare errorcharacter value in \x{...} sequence is too largeinvalid condition (?(0)\C not allowed in lookbehind assertionPCRE does not support \L, \l, \N, \U, or \unumber after (?C is > 255closing ) for (?C expectedrecursive call could loop indefinitelyunrecognized character after (?Psyntax error in subpattern name (missing terminator)two named subpatterns have the same nameinvalid UTF-8 stringsupport for \P, \p, and \X has not been compiledmalformed \P or \p sequenceunknown property name after \P or \psubpattern name is too long (maximum 32 characters)too many named subpatterns (maximum 10000)repeated subpattern is too longoctal value is greater than \377 (not in UTF-8 mode)internal error: overran compiling workspaceinternal error: previously-checked referenced subpattern not foundDEFINE group contains more than one branchrepeating a DEFINE group is not allowedinconsistent NEWLINE options\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain numbera numbered reference must not be zero(*VERB) with an argument is not supported(*VERB) not recognizednumber is too bigsubpattern name expecteddigit expected after (?+] is an invalid data character in JavaScript compatibility modedifferent names for subpatterns of the same number are not allowed@`  @ alphalowerupperalnumasciiblankcntrldigitgraphprintpunctspacewordxdigitpnooklmACCEPTCOMMITFFAILPRUNESKIPTHEN:;<=>?@[\]^_` Q\E{0,DEFINEUTF8)CR)LF)CRLF)ANY)ANYCRLF)BSR_ANYCRLF)BSR_UNICODE)Error text not found (please report)GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx LEBE A(C0 (A EBBG A (D EBBA l`BOH E(D0H8HPN 8F0A(B BBBA y 8A0A(B BBBE `BBJ G(H0H8IP 8F0A(B BBBD  8C0A(B BBBK \H,BEE H(D0H8G@ 8C0A(B BBBF d8F0A(B BBBxBBE E(G0C8K@ 8A0A(B BBBD K 8C0A(B BBBA 8F0A(B BBB<$BEE D(H0 (A BBBA Hd8BEB E(D0D8Dp  8A0A(B BBBG HBEE E(A0A8G`x 8A0A(B BBBA Hr BEB E(D0A8Fp 8A0A(B BBBD HHBEB B(A0A8D 8A0A(B BBBG DBEL E(D0J8p 0A(B BBBA UE F XBBB B(A0A8GABQBIABY 8A0A(B BBBF ElBTfAMFjB FBB B(A0A8G L"\"F"N"B#N#I#E#B#Q"""D"D#G#A#B#B#x" 8A0A(B BBBE Lt 5 Q q    ,P +`B 8R`^r t |0"@%XT@%`8` P m  #($1*>05EZp  *9CSZ#Um|P} `.annobin_pcre_compile.c.annobin_pcre_compile.c_end.annobin_pcre_compile.c.hot.annobin_pcre_compile.c_end.hot.annobin_pcre_compile.c.unlikely.annobin_pcre_compile.c_end.unlikelycheck_escapeescapesdigitabfirst_significant_codefind_fixedlengthcould_be_empty_branchis_anchoredis_startlinefind_firstassertedcharfind_parens_subfind_parenscheck_auto_possessiveget_ucpadjust_recurse.isra.0compile_regexposix_namesposix_name_lengthsposix_class_mapsverbnamesverbsCSWTCH.739error_texts.LC0.LC1.LC2.LC4.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC3.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_utf8_table4_pcre_utf8_table3_pcre_OP_lengths_GLOBAL_OFFSET_TABLE_strncmp__stack_chk_fail_pcre_is_newline_pcre_ucd_stage1_pcre_ucd_stage2_pcre_ucd_records_pcre_utt_size_pcre_utt_pcre_utt_namesstrcmp_pcre_find_bracket_pcre_ord2utf8memmove__memcpy_chkmemcpymemcmppcre_compile2_pcre_default_tablesstrlenpcre_malloc_pcre_valid_utf8pcre_freepcre_compile6BEC    F 9  &DD B   D B; Dk DDOs !%FTGG/HBC" OH QB_CBCsBC IJKIJKG L M*!N6!O"GY"D#B#D#B$DX$D[) $G+ - .Q>0!{2 <3Rl8H? ? @F%@ h@ <=AQ BBBCCD=DDEDBDRTBXF\J`NdRhVlZpStbx[|jnrvz~w   $ (a,e0i4m8q< @$D(H,L0P4T8X<\(` d hlptx|     $(,048<@DHLP TX\`d h$l(4 ,t0x4|8<@DHLPTX\`dhlptpxt|x|                       $ ( ,D 0H 4! 8% <T @X D H L9 Ph TA Xp \ `S dW hU lY pc tg xk |o m w u   |                       X      ! %   $(,0 4$8(<@0DH8L<P@TDXH\L`PdThXl\p`tdxh|lptx|  $( ,4048c<8@<D@HDLHPLTX\Z`^d`hdlhpltpxt|E~a8<@DHLp"$`dhlptmL 8<@ DHLY ] N$R(P1,2024 282<2@2D2H 2L$2P(2T,2X02\42`82d<2h@2lD2pH2tL2xP2|T2X2\2`2d2h2l2p2t2x2|22222p-222,1h*12212222222222 22222 2$1(3,3034 383<3@3D3H 3L$3P(3T,3X03\43`83d<3h@3lD3pH3tL3xP3|T3X3\3`3d3h3,10t/H/|33333333333333333333333333 33.@3P R$P(R,P0R4P8R<R@RDRHRLRPdQTRX\Q\S`TQdShLQlSpStSxS| S$SXQ,SPQ4SHQd Bd Fd Jd 9d Rd Vd @d ^d bd fd jd nd rd vd zd ~d d d d d d d d d d d$ d( d, d0 d4 d8 d< d@ dD dH dL dP dT d p  L P (`h `L 0"#@%P}P`.symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rela.rodata.rodata.str1.1.rodata.str1.8.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@-P.`/h0'pt"@( -3=T8@H0 S8b8(]@x0 |``(@0v @D2K2h%0-|SP `@ pB (h pcre_config.o/ 1575493209 1667 135 100644 4392 ` ELF> @@ w#HHcH>H1fD1 111 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx qq 3 N m  q.annobin_pcre_config.c.annobin_pcre_config.c_end.annobin_pcre_config.c.hot.annobin_pcre_config.c_end.hot.annobin_pcre_config.c.unlikely.annobin_pcre_config.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..grouppcre_config  q  8L` T8LPD  .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rela.rodata.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h'pq"@X-3=T8@p0 S8b8(]@0 |``(@0$@0-|SP000@` H pcre_dfa_exec.o/1575493209 1667 135 100644 46000 ` ELF>p@@ AWAVAUATUSHH $HH $HH$ HT$XIHw $AUH|$($ L$H\$hdH%(H$x 1HGHt$xHsHt$`HD$PHGHD$@HHD$ G0%D$H$ D$t$ HHH$D$HHH_HD$8b <HHA|\|$t<Ht$8LD$ |$1҃@DLFHL)‰NDډFAEfIŸA}TDZ9|D$LH$x dH3<%(D$LeMHĈ []A\A]A^A_H|$(G.XfAEfIA}TtHD$hHcXD IE#HHt$`H|$8$HDL$D$DL$L1Bf9LBfH€:TtDt$HEH|$XHcHH)HH\$PH9HH)؉HH)H|$XHD$(H|$XH9xvHxHT$8LD$ E1DT$AEf9|3LA[L)ǃE9BAHz)ljJzAEfIA}TtIcIcۋl$HD$LL$D$sD$sAD$$HD$xH@HH$HD$XH$HD$1H|$hHt$@HH\$8D$0HD$ID_D$H9s-0DT$HD$t$0EtfDEE1ELt$`E1DD$4MLT$8DŽ$=B M;l$KRAAEnIAVAFE9~RIcHLҋDjxEt{AOLHIL fHH9tW9uz9xuAE9IHcD$HT$8HcH|$`HD$IHD$hHT$`H|$8f.HcHD$ DD$HD$$EuH <DL$4L$4H5tSHD$|$HA0twd<$8~5Fw-H HcH>D$L E1$=wH=HcH>Dۉ?H=L < A#4ItE1DxH? A9uAMq:LD$PHT$XI9^:1HBI9s4Rt#fD#HI9uHD$PwHD$X $|$h$T$,$@H?H @#4HɉAD$0t&HD$1HPH?A 9uDD$0GD$Hc$HD$PH9D$#A'Ht$H9t$P$A<$t*AD$D;d$!KEkAIAKACD$'D$0=CQ. 1Ƀ94AAT$D;d$DL$KEkI{A ACE/L$0:T!L$0( Ƀ@@9~" $MADLE;l$+EnAAFIAFAAF<$t*AD$D;d$KEkAIAKACD${&D$0 O?-1Ƀ -<$uAIHD$Ru@f99;l$dEnA)AFIAFANAt$D;d$%SACIKAT$Ekr.|$0 ?4m 1҃  <$}ADID;l$AFAEnIAFAIAVkAL$D;d$ADDD$EkI{$AACE'AAtP9|$s9L AAADL E AHFDAEDD$0D9E9@ <$+@@8.AAIR~,AD$D;d$ALEkAIAKACD$$AtH:>|$s/>H H  AH||$099 ȃ<$+8 3AAT$D;d$ADACIKAD$EkK#AtK;|$s;H=H=D$E;l$oEnAIA^AF!D$FHD$(p4HPK.H;T$2E;l$EnAIA^AF|$] |$0O D$0Hc$H H$"H :=1E;l$EnAIA^AFPt$D$0=w*Hc$H$H "H :7E;l$.EnAIA^AFHD$H9D$Ps?HpHD$(H9pvHpHD$L$H@…H$u1ҋD$tD$0=wH$уEу<$8AD$D;d$vEkAIA[AAC'<$t*AD$D;d$:KEkAIAKACD$D$0=I-\# :-#|$0t 11Ƀ90+AB~*AT$D;d$KEkAIAKACT$|$012!W1Ƀ9&AR~*AD$D;d$,KEkAIAKACDL$EhD$0=.. .|$0t 11Ƀ9[)A1AL$D;d$DD$CEkI{AACE"D$0=2*ID$0=/ *DL$0A_ t 1A0@@92$u-ADLE;l$EnAAFIAFAAF1Ht$H9t$PZAHt$H9t$@HD$(p4HP,H;T$/-A;HD$PAD$D;d$NASAIA[AACHt$H9t$@AD$D;d$ EkAIA[AACDL$EHD$(p4HP+H;T$5A|$|$0HH H5H$H$H$H=AH$D<Y)LcD$E1LD$L9D$@&D<$[H$ЉH$FH$DH$<L&HcAIL9D$@7&AЁvH5?H5 @#HtIpE1H? A9uGT$jD$0=t E;l$5EnAIA^AFL$D$0=' E;l$EnAIA^AFD$D$0= xiD$0=c=XA8D$AtH$|$099)91)E;l$!ATEnAAIAFD$"DL$HEL!;t$00D$0 0H$9/AD$#;t$0E;l$ATEnAAIAF>HD$(@-DD$E@0 _*HD$(p4HP(*H;T$5AAL$D;d$D$A|EkISA;AC!AAtO:+|$s/+LAAADLE@HB\A؋\$09A9@ <$+@@8A$AAI&<$mt*AD$D;d$9KEkAIAKACL$'|$0H H H|$ AHHO/G.+H|$@881Ƀ9!A`AT$D;d$wDD$CEkI{AACE5DL$0LDAALDLL$E@HAyJ%EAL OcM>AR~*AD$D;d$KEkAIAKACDD$E]|$0H H H|$ AHHOa(-H|$@881Ƀ9A1HD$HT$L$0L$L$HApL$HH+L$XfHt$($ P$PAUhH$PH|$X?H01L$L$6RAR$PPH|$t$LG!c|$0o"OA0LH+|$ F@'H=@Hc4H>|$lB|$0$ vAEL$D;d$CL$AC$AICEkH$B|$0$ AEL$*EL$D;d$FCACI[D$AD$Ekq|$0*! AEIDJE~*AD$D;d$SEkAIASACD$N|$0@7 AWEL$D;d$sCDD$ACAICEkHD$E"|$0 AEL\$DL$EsAtH%|$sv%H H  AH||$099 ȃ<$+8AaHT$BfH€:TtAD$D;d$eH+T$ EkAAAIACHHH|$Ht$PDŽ$L$GH$L$$H$H$HD$@H)$HD$XH)$ HD$H)$Gf$f$(GH$f$,HH$HD$(H@@H$ L$L$>AT$D;d$9EkAIAACA[<$t*AD$D;d$KEkAIAKACD$ t$0H L H=L$H$H$H5AAH$D<zHcD$Ht$<$L uAI$L9L$@D$pHH$H$IHc )H$HGH$D<qMc$ML9L$@\AA=y?H5H=4 v#ItIyE17H? A9uA-D$AT$D;d$Ft$CEkIKAAC(t$0LL H=L$H$L$AH5AAH$D<$LcD$LD$-DELE1L9D$@}D<$AL$L$L$L$$H$$H$SPIHc҃A)HACD|HcAIL9D$@A=~H5?H5 R#Ht#IpE1fDH? A9uJA`Ht$Ff$fHT:TuBfH€:TtAL$D;d$KHH+D$ EkAACAIAC$AAL$D;d$H|$ACAEkGf$fHT:TuBfH€:TtA9L$HH+D$ EkAACI ACZR~*AD$D;d$oKEkAIAKACL$Kt$0  1 ~<$uAIM;l$AVAIA^EnAFBD$~*AD$D;d$SEkAIASAC|$s|$0HH H5H$H$H$H=AH$D<Et$LcL$LL$~<$uAI$L9L$@w|>PH$IHc҃)H$HFH$DH$<Hc$IL9L$@A=zH5?H5 R#HtIqE1H? A9u/1D$  DL$0A1ArjH|$(,|$AAIHƒI9s95HT$X|$0tr vAAI/- & DL$D<$L$$$U;l$D$EnAIAFAvAFAAIAAIAD$D;d$EkAIA[AAC`AD$D;d$|EkAIA[AAC-AA!A;HD$(p4HPH;T$?$AHЃAAAAIAEItAEIeAAIVAMLL$EID8H@@9AAIAAAAEIAAAAAAD;d$$EkAIACDACA{ArAiA`LL$EID8A5A,A#HD$(@,AD$D;d$0EkAIA[AACAAAADHHD$L@C9`D@A@<AAD ?H\$H9\$Xr1HD$(@,tHD$(Hc@(HD$PH9D$X|$LD$LD$L;$H$HL\$HL$H~L\$L$$~"H|$PHD$XH$H)HD$H)FHD$(@.AAAAAIyApAgA^AUAL1ApRf9*At$D;d$SyEkAIA{ACA@uft9;l$ AAIAVEn1AT$D;d$ACIAKEkGE;l$AAIAFAEnd1R~*At$D;d$wEkAIAKACE;l$EAAIAVEn1AT$D;d$ACIAKEkE;l$AAIAFAEnHt$v@8p1҃<$9 AsHHD$H@9PB< 뮸Ht$v@80듃 zD$0=/ h|$0_ P10@`HD$(@.AD$0-( AD$0=/ tvD$0=_ t =05Ap- uHA< uHA< |$0 E;l$EnAIA^AFD$0=/ tD$0=_ t=0R먋D$0=r-( AiD$0-( r7HD$(@,D$%:A0D$0=tr -( vA$-nEADLE;l$AFAAIAEnr=HD$(@,$:AD$0=tr -( vA 8D$0=/  v3|$0_ 10 - xD$0-( A- Z- AAIAAIE~<$CuAIAE;l$AAIENEnAAItAAIeAAIVAD92pDHD$$M@f9 ;l$@EnAIA^AFAAI|$0p  D$0H$H"2H:2aAAD$D9d$ E AIACEkAD$D;d$EkAIA[AAC9D$HD$RM@f9;l$2EnA)AFIAF$AF$+8IHD$Ru@f9;l$$EnAAFAIAFm~<$ouAIE;l$tAAIAVEn.$$MEHD$LE$ED̃@f9;l$$EnEAFAIAF|$0 QD$0H$H"2H:2RAEL$lH|$xD$047@84AJ~<$uAIU;l$QAFAIA^EnAF$DEEDID;l$t$EnAIAFEIAv|$0h mD$0H$H"2H:2yAEIj$BLE\$EEDL\$;l$tAAIAFEL\$En"|$0 D$0H$H"2H:2uAEL\$<$uAIHD$RM@f9 ;l$EnA)AFIAFAFdE;l$EnAIA^AF5|$0  D$0H$H"2H:21A<$quAIHD$RM@f9~;l$EnAIA^AFLL$1IyH9|$@1Ay T$0D<$E;l$}AFAAIEnEN-~<$uAIE;l$4AVAIA^EnAF~$) 6 BU;l$AAIAFEnD$U;l$AF$IA^AEnAFh<$uAIHD$RM@f9~;l$XEnA)AFIAFAF$*t 7DELEڍE;l$A>AIAFEnH|$(Ht$HcO8H)H9<@8>tHHt$(v=@8p~AkHD$RM@f9;l$lADEnAAIAF$(t 5DELEٍE;l$)AAIAFEnA1 AAAt$0H|$vA}Ht$HH:THT$uBfH€:TtHT$HT$L$HAL$HH+L$X$ P$PAUhH$PH|$XL$`諾H0$AL$L$L$X8aD;d$ٿHD$HH+D$ AAIACEkq;l$$AVAAIEnAFM;l$oAAIAVEEn&1<$;l$:AAIAVEnHD$(HcH8HH)H9T$x AAHD$(Hc@8HHH9T$%Ah;l$AVAIA^EnANf;l$AAIAVEnBA9;l$[AAIAVEnHD$(H|$L\$D$L$HH8L$L\$AD$H|$HH8L\$L$L$L\$3AD$1<$D;d$$EkAIACT3ASL$E kHD$(p4HPt~H;T$D$H|$HH8L$L$L$L$AۿHD$(HcH8HH)H9T$ A鸿A鯿Ht$(H|$HcN8H)HH9Sv<@87F H|$(HD$w=@8p%A[@D;d$x$D$D$LDD$L $D$L+$D$L2xHD$H @9;l$ڻAVAIA^EnAF鉾H|$(Ht$H<@8< AdH$DAGH$  E;l$KA>AIAFEnH|$(Ht$HcO8H)H9<@8>tHHt$(v=@8pAD$D;d$ۺEkAIA[AAC錽HD$(p4HP1H;T$H|$D$HH8L$L$DL$DL$L$L$dAD;l$9AVAIA^EnAFAAܼAӼIAAüAIH$<IHt$EHVH9T$@v ~  ;l$EnAIA^AFZH|$1HOH9L$@E1 7Ht$1HFH9D$@1ɀ~ AE9|jufD$HcHT$mEIAFEnA2MZE1ABAEjD$騻A韻H\$PHcHcHHH9sHx@@@)H9uE;l$A؃AFEEnAV 9D$EnI AvAFAVH$ A;l$AAIAVAEnκDE;l$ATEnAAIAF閺|$0HHBH|HD$(p4HP2H;T$D$H|$HH8L$L$D$D$L$L$AEL$ڹE;l$ATEnAAIAF駹H|$@8x xHD$H @9H|$@8x0AA?A6H|$0L$HL$HT$L$HT$L$L$L$HD$(p4HPH;T$fD$H|$HH8L$L$D$D$L$L$AEL\$qf.E;l$EnAIA^AF8HD$(p4HPuH;T$D$H|$HH8L$L$D$D$L$L$AEI鼷HD$(H|$L\$D$L$HH8L$L\$HD$(Hc@8H|$@H)H9|$AbH|$(Ht$<@8>tAFAEI7tH|$(Ht$=@8~tAHt$(H|$HcN8H)HH9v<@87H|$(HD$w=@8pAEL$鶶Ht$(H|$HcN8H)HH9v<@87t;H|$(HD$=@8xhAEIYAEL$EAEI6;l$XEnAIANAF Af.|$t D$4HD$h$9XHD$(@,uĀ|$LݲHD$Ht$@H9ʲH9D$X$D$LHD$(H\$PH$H@H)؉HH)؉G進Ht$(H|$HcN8H)HH9iv<@87\t!H|$(HD$w=@8p?AA۾H|$(Ht$=@8|A鹴D$H|$HH8L\$L$L$L\$A{@AnAeA\DHD$(H|$L\$D$L$HH8L$L\$u AAHD$(Ht$@Hc@8H)H9t$AH|$(Ht$<@8>tAҳAɳtHt$(HD$v=@8ptA駳D$LΰAEL$醳;l$AFAAIEnAFMD$;I0AEL\$Ht$(H|$HcN8H)HH9v<@87t:H|$(HD$w=@8pfAEL\$鿲A鮲AEL\$靲fDAWAVAUAATUSHH(H$`H$pDL$DD$(HL$H|$ dH%(H$1AoZ DL$h, HHH H Hu$h $h $x HDŽ$HC H$HHD$0H t HVH$t HF H$;ERCPIlHcD$(|$McNdL|IHD$`IGHD$8AFH$ƉL$t$@ƃ@ ANt$\AvD$YAvD$$$HcHHH$L$%ppE= ] vO=@=P =0 H$dH3%(b H([]A\A]A^A_Å =uDŽ$ DŽ$$ N $@Ld$0L$Ht$pHLLIH MMDL|$0WHNHL$0;ERCPIHD$01DŽ$\$tD$ H$HD$PHHAF Ãf\$ZA^\$ u$ f|$ZuH\$0Ht CD$DHD$H\$l\$@t*AVH؉\$@H\$PT$hD$lD$MH$M%D$,fDD\$,EjDT$ MEH$DL$MHEI9r9nfDHc$HH)HI9w$ A8<$IL9v7$tE1HK8LuH$IL9wD$ZDD$DE3M9:AE9u,@AE9IM9uf.D$ RH|$0HtGt LL)9G(w|L$@*LL)H=1LH9D$8t$hI9v6HpHt$89HD$8t$@HP9HI9usII9$uiHc$HH)HI9w$ A84$ID$I9vAL$tuHI9uMHHK8ALSH$HD$8@L$HLHjjAFP$Pt$HD$LD$HL$XH$踧H0m|$YbT$ t($H$I9WD$Ml$M9A} M9A} AF $v$D\$,IEDMf|$ZH$HD$`HI9vw|$M9r$d@L9IM9BH$$uHc$HHI9r͉$ HcA8LuDMM9AD$ 'Z (f ) '$ (/ ) ' ( )'() (   + '(*)%&'()g'z()('>(U)p <'()K P ' ( )5!+L",O"'"("*")#%#&V$']$(d$*$)%%%&'''('*()(%)&|+%+&++,,O. p0*\1-3*8 8 : : ; ; K< [< 8= H= RC.C/GD/oE*G/I'I(I)5J/J*6K0K/XL/L/N1O/P/YT3V/W/Z/x[.$\4\.]5<^1 r^  d ~z~ $d($,0p4w8{<@DHLPTVX\`dhvlptx\|p"u3  - 1 p t   M    a e  $  -!7  <   q u   $(a, 0 4- 8<|@DHLPTX\-`1d5hlp~"t6"x|6M Y ( (($('''8<@DH LPTX\ `$d(h,l0p4t8x<|@DHLPTX\`dhlptx|  $(,048<@DH LPTX\ `$d(h,l0p4t8x<|@DHLPTX\`dhlptx|         $ ( , 0 4 8 < @ D H L P T X \ ` $d (h ,l 0p 4t 8x <| @ D H L P T X \ ` d h l p t x |                          $ ( , 0 4 8 < @ D H L P T X \ ` $d (h ,l 0p 4t 8x <| @ D H L P T X \ ` d h l p t x |               """"!!   ";"! , 0 4 8 < @ D ,/ 0/z-~- * * _($c((g(,P/0-4%*8w(<| @ D H L P T Xu/\y/`)-d--h}lptx|/I-       7;cg[  $ ( , 0 4  %)- $(=, 4034383<#4@/D0H0L/P0TJ3XN3\2`2d2h2l2p2tH3xL3|222222 Q.symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rela.rodata.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@P`h'pr^"@r -^3^=^T8@@}0 S8`b8`(]@p}0 |````(@}0` @}x-0Si-|iSiiPiiP@H0 k# 0puxpcre_exec.o/ 1575493209 1667 135 100644 64104 ` ELF>(@@ LLc1I)M9hAWHcAVAUATUSHALc$LA"AdONL9H-HLLL oDLA$Ml$=6M9tDPAIAAHcAB(D)HcASAD9L9s>Ln~?T R#LAHEfAl$fD-A;F$IVLcMMMN4BD2FD$ AD$ )HHLI+$b0ۉt$0A$ۉAt$4$t$8H5Ht$(Ht$(LT$HMLD\$@H4D$@PLSt$ LL$ L$DMDl$ LL)EHED$MAiH90MOAA]IVHIL$B8El$MIfMT$ LL)VHVIGAA8\$El$IIJfIGM;AM}H9D$rAD$x`XfDMM9;El$ IwD…t AYA >\7A A^|$LLl$hAl$HHsMATLLjjLL$ H K=Kt =xCfHÀ;TtI$ D$LLl$hAl$HHsMATLLjjLL$ H Lt =CfHKHI\$ML$HލhUjt$ LL$ L$@CH,HMl$\$hD$X%ND$PM;REDl$ IwDEt A:UIVPDfM;QADL$ IEt =,V=F3 zf.M;cQAD\$ IEt =S=93 *t3 kfDAv(MCM9-MIGA$H9D$`DM;O6A?L $MGT$ At  QID$MVAT$9yEl$MI IT$BfH€:TtLbDjH5MM狄$MLLP$Pt$ HT$0LL$ L$AD$Ml$1D$@D$HfD$8KMl$1D$8D$@D$H$@Ml$D$8D$@D$HfAD$D$PfDID$Dl$8AD$D$HfD$81A@D$PID$S\$X\$@V1DX|$@L`@E1\$0D$4ID$D$8D$HD$PfAD$LfH)<`:Ht$HNH6Ht$<_)<E,$WfDAD$!MT$JM=tv=/ t$+=_ t=0t1MM9AHH- AE9M9]AMG=hIM={* v==uIII9KZAINPIpD)AZILB:A9M9uMA$H9t$rh#MM9s@Ax!INPtA<;IM9rA9MAL9|$fAD$xAIII9KYAINPIpD)AZILB:A9M9uMM9AHH-.MǃwIFPAE9M9RAMGЁv?4 v#TD^tK|LDHF? H9uO|{MM9gIGL9s1AWtEZ0?HL9uIA9M7MM9IF,LHD$`Av(CIcV,LH)HH9wAv@@83WPHCML9GXSt=fD=HL9uA9?AMMzf.L9l$`III9 WAAINPI/D)AI B:A9M9uMM9UAx&INPtA<@8IM9rA9O MM9eALLAIo=O Ob@ A@AE9OL9CXIMIcI)M9IADL$ AEn~QIII9;BIGE:I)fDM9GIE:WB:9};\$8u#DD$HEV|$ D$81$90OMM9[ZE:O)I\LL9@D:_CHH9uL$@.+MMMI9$hHMLHUjt$ LL$ L$ZMH5|$ IσA9$7M9QIOAt܀v׃?t̃HcL|MLd$hH-Lt$`HDd$ LDt$0EM׉ЃDUA;D$4D9A9T<M9<AMWEtv?H5L4 vA#D~wE1L֐HF? D9uO|:RMLLt$`H-D|$0Ld$hHLDt$ CDLЉу TUAT;T$4D9A9x;I9=LPEtv?H5L%DC @C#E`EtND L@HF? L9uKD"JMLLt$`H-D|$4Ld$hHLDt$ KDLЉуH5 TUATD9<;T$0A99I9:LPEtv?H5L%DC @C#E`ElND L@HF? L9uKD"BMLd$hH-Lt$`HDd$ LDt$0GM׉ЃDUATB< D9A97M99AMWEtv?H5L4 vA#D~mE1LHF? D9uO|:BE,$I|$@v/D$X|$ 6<HHcH>D9l$8RMM9 YE1҃|$@LALH3 D9sHcAHD9l$8^L9E=<=Bv-( D9l$8hQMM9lXE1҃|$@LALHL ;)=t 1=D9HcAHD9l$8L9E=;=5;v=/ (;=_ t1=0D9l$8PMM9WLLHс1 [- t+Av|5LJvt( LHHAD9l$8LL9rHD9l$8OMLM9LL&IFPtzHcAHD9l$8tiL9UЁvǃ?A @A#Ht$HuE1H? D9uzL$H$MMMIHl$XHMLLSjULL$ L$Uсv?A @A#Ht$HuE1H? D9uGwrf.D$8=IIZD$8=LD9KMIF,LHD$@M9RAv(6IcV,LH)HH9wAv@@83AHCLL9ISt4@ 4HL9uAE9D$8AH9l$AFx*f.D9l$8JMLM9F=LL-INP7HAHD9l$8#L9 =Uсv?A @A#HtHuE1H? D9uGwxf.ID$8HD)L)9<I,AF<HMIcI)M9III9a,LPD)A9lL9xHP ϻ vҀtMM9OLI^,@IcV,I)L9wAv@@8u8HD)A98MI9sCAv(tE1HLHtEDIII9{/INPAIGI)IAGB:A9M9uIII9>INPAIGI)IAGB:A9D9IAIW< v< %L98>A JA9}IAfDAVh1MM)Ai鿷鵷<HHcH>D9l$89;III93APv =;D$8D)ItLHH9tL9L3JvtH\$8D9:III93AP:=:؃D)ItLL92JvtHH9uD9l$8Q:III92Aƒ t< (:D$8D)ItLHH91L9a2у t݀ t\$8D99III9GAƒ 9< 9؃D)ItLL9tу  HH9uD9l$8e9MLM9s=E  tAV|ukPv=u\HAD9l$8tML9rAH9l$s:t6AFx~)ID$8HD)L)9wI,D$H$MMMXI9HHMLSHjt$ LL$ L$H ?H5DC @B#EHEODHHV? L9uJ|kH?4HD# vDNDA#1HHB?A 9uN|AϣL鬣H ?H5DC @B#EHEt)E1HHF? D9uJ|cH ?H5DC @B#EHEODHfHV? L9uJ|黫H ?H5< #DO'K|L@HF? H9uODH?<HD# DODAt&K|HHB?A H9uJtAeAH?<HD# DWDAK|HfDHB?A H9uJt龥H?<HD# DODAt-K|HHB?A H9uJtAqH ?H5DC @B#EHEE1HHV? D9uJ|{H ?H5< #DG"K|L@HF? H9uO\H?4HD# vDNDAbKtHDHB?A H9uN|ANLfDH ?H5DC @B#EHEE1HHV? D9uJ|ۡA^`۟ޛfDI9e1> HUMIVHAL$ 8:*鞛fDDAJHcMd<E9tE,$MҙAv I~Lc)Hc4B4LI+Bt|$r9Ot$At$f9t$~INHcDEeEn0MF8EpAf9&/Icn4L1f9^HD9u0A9A9BL|$hLd$PLt$pDL$XE$$MMMhHMLHUjt$ LL$ L$v|$0t?H5H R#$L5hHMLLUjt$ LL$ L$M9$v A} uID$(HMLLD$8Pjt$ LL$ L$D$(MHMLLD$8Pjt$ LL$ L$L9|$MM9A$„uMLI^,L9Av(ulIcV,LH)HH9w Av@@8utsHEL9sAUt3u%HL9uLAAuLHDD$ HLH%M덃AFA8EvI= tI=tI t tI=tIT$P[tI=HIT$P7mtI=_tIT$PItI=IT$P%tIՃ w3 tA|$|s-( s=ts-( vsI=sIT$Pns=s=Ss=/ ~s- /esI=WsJ  @sL(DD$ IL$,L@?H=EAkB#AxEML=IIAP? M9uLl>D)HMLLD$0Pjt$ LL$ L$I=wO v6==zp=_ p=0_p Qp=/ A=_ 0=0%[p?H=EAkB#AxE&ML=IIAP? M9uHt>?H=EAkB#AxEIIAP? ЅuHt>~- xoLzLAD;l$8H|HSH-H4$Ht$(AuHKHH HL$("LbIWɴ-( lMMM}MLyAL9l$LMLMAVHLUMARt$ LL$HL$L$8D$lHD$xA<8A|$Tt:$(H$$(9$~ DŽ$HH$H1u$$(#H$xH$D$Ht$(H)ʉH$H)ʉVH9EHƒHHL$xs+EHƒHZHH9uLHD$lAH|$xH9r)&fDH9oHH9 H$x$uHc$HH9rЉ$0Hc@8tu$18DuI9HHHHL$X9$59T$`+HD$Xt$`$ 9HI9HP9u$18EQ@Hc$HH9$0Hc@8t$18Df.H$xHIL$,AHE1IL$,HyDŽ$ D$HD$(HsHx$(PHcHD$yD$lD$_D$RD$ED$8 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx l#ZEB B(A0A8J0A(B BBBHH8A 0C(B BBBD ЖBEE B(D0A8GdIDDWz 8A0A(B BBBF LBGWJFAW$KHBN}KHBNVBBWYBDWaHDWJBDWLEASBaHDWdaHDWwUBDW[aHDWSADWcHEDW6JBAWtHEDWrJBDW,JFAW JBAWJFDW JBDW!JBD\kJBDWQBD]JBDW NBDW'NBDWEJBDWJBDW[JBDWJBDWJBDWJBDWJBDW[JBDWJBD\cNBDWvNBDWuNBDWlKBDWNBDW ALE JBDWqJBDWVJBDWNBDWABDW}JBD\zKBDWABDWGEDWFKBD\d\ZFBB B(A0A8M 8A0A(B BBBG 4lBBVZ / H e#0Ж   /ARcu&->ZH]o.annobin_pcre_exec.c.annobin_pcre_exec.c_end.annobin_pcre_exec.c.hot.annobin_pcre_exec.c_end.hot.annobin_pcre_exec.c.unlikely.annobin_pcre_exec.c_end.unlikelymatch_refmatch.constprop.0rep_minrep_max.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_utf8_table4_pcre_utf8_table3_pcre_ucd_stage2_pcre_ucd_stage1_pcre_ucd_records_pcre_OP_lengths_GLOBAL_OFFSET_TABLE__pcre_is_newlinememmove_pcre_was_newline_pcre_ucp_gentype_pcre_xclassmemcpypcre_freepcre_callout_pcre_ord2utf8memcmppcre_mallocstrcmp__stack_chk_failpcre_exec_pcre_default_tables_pcre_try_flipped_pcre_valid_utf8Y"`#g$n%u& ''y) *  %$&   'jf  + )k%x$,&"#~   g'h'g-"(#'i. '| . /##0Z$$d$%p$&$"$#c%,r%$~%%%&&"&#&$&%&&'"&'#'"y($(%(& )")#%*,+"+#+"+#+",#{,",#-"-#/"/#1"1#>5"E5#6"6#6 06"E7$Q7%]7&7"7#88$I8%P8&8"8#09$A9%H9&c9,9"9#-:$9:%E:&:":#R; D;";#0<"7<#<"<#="=#>">#?"?#Q@"X@# A"A#B"B#E"!E#xE%E$E&E1.F2lF2G H)L O)T3U)GV"V#W"\W#&Y2dY2Y/CZ0$['O["[#r\ \ \ \ ]-] ] '`$.`%:`&A`,`"a#a"a#Ub"b"b#'c"5c#c"c#c"d#kd"ud#d"d#4e">e#e"e#e"f#Uf"cf#f"f#g"&g#tg"g#g"g#h%h$h&j,j$j%j&k"k#;l$l%l&l,l"l#m"m#6n'np"up#s)t"t#3u-wu"u#x)y)[y.y#y"z z"d{%z{${&{"&|%@|$K|&W|,|"|%}$}&P}"}"?~%U~$`~&~"~#~"#`"j#44u44H"U  X%$%&1,"#-""'5Ӎ## ))#$2ƒ2)#ۓ#+#/#" #Ζ#E78=3ǟ))}/ؤ)ϥ9;/++.V5 Z   | H l \ $(,L0P48 <@D$ HL|PTD X\4` dhl,p t4 x|TX\`dhTX  $|X4\`dhlpP L @%D% H%$L%(P%,T%0X%4\%8"<"@hD"Hx Ll$PTX\`Hd hPl p(tTx(||4 %%%%%t P T...-L10$0/"2J2N21/-,,+ `*8*&*)* p'$\&(H%,>$0a(468:<!9@-8DA7HBLu=P@T<@Xz?\>`AdAhClJ2pN2t=x3<|7<;; JIWIHFJHHHJ2N2KKOKK\H8QPpP PRQO OOJ2N2N$NMEMLF} |{z} $(Շ,Ň0}48<#@J2DN2H|LgPYTHX+\`ldhlp׏tx|J2N27z~a˜oڏ J2N2:}d 0`.symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rela.rodata.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@P`h'pZ"@-ʪ3ʪ=̪T8@00 S b (]@`0 |HH(@0p@(0X-|SPذذ@Hp" 0pcre_fullinfo.o/1575493209 1667 135 100644 5392 ` ELF> @@ AVAUATUSHpdH%(HD$h1H'IHHA1Htua?ERCPueAw'H DHcH>fG fAE1Ht$hdH34%(Hp[]A\A]A^fD?ERCPH^tLt$0HHLHHHIEpHtCtC(G%zIEDu@GIE1cfGAE1RGAE1BG G&HtC1ۨtH]HI]1G G1Ht DHIE1fDGAE1fGH1I}fDG ЃAE1u@G fAE1[f.GAE1B+' GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx DiFBB A(A0D 0A(A BBBG i 7 T u   i-?T.annobin_pcre_fullinfo.c.annobin_pcre_fullinfo.c_end.annobin_pcre_fullinfo.c.hot.annobin_pcre_fullinfo.c_end.hot.annobin_pcre_fullinfo.c.unlikely.annobin_pcre_fullinfo.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..grouppcre_fullinfo_GLOBAL_OFFSET_TABLE__pcre_try_flipped_pcre_default_tables__stack_chk_fail]  !e" i  ( <PlL $(,0(4D8< .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rela.rodata.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h'pi"@P `-3=T8@ 0 S0b0(]@ 0 |XX(@ 0@@@ 0-|SP@@`@ H e pcre_get.o/ 1575493209 1667 135 100644 7464 ` ELF>h@@ AWAVAUI1ATUSHH8dH%(HD$(1HL$Ņu&D$HL$1HŅt+HT$(dH3%(H8[]A\A]A^A_fDHL$ 1HŅuD$L|$ Dt$D$ D9}2Fd5\$ LAAHcLHst)~Al$D9|νhDd$EfD+CDf.AWAVAUATUH1SHHHHT$HL$HL$,dH%(HD$81Aąu'D$,HL$(1HAąt/H|$8dH3<%(D?HH[]A\A]A^A_fHL$0 1HAąuD|$,D$(Ll$0D|$D$E9}1C<\$HAHcLHst+~EfE9|A^DDt$,EfDI9HcD$IHH)HII MM9sK48 @@  GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNU 5 Q  q   7 A2<.annobin_pcre_globals.c.annobin_pcre_globals.c_end.annobin_pcre_globals.c.hot.annobin_pcre_globals.c_end.hot.annobin_pcre_globals.c.unlikely.annobin_pcre_globals.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..grouppcre_calloutpcre_stack_freepcre_stack_mallocpcre_freepcre_malloc   !!.symtab.strtab.shstrtab.group.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rela.data.rel.comment.note.gnu.property.note.GNU-stack@ P ` h "p(p.p8pT3@`0N](X@0 w(@0 @`08-weNehP` HPpcre_info.o/ 1575493209 1667 135 100644 4192 ` ELF> @@ USHHdH%(HD$81Ht|?ERCPHHuSHt G%zEHtG t&GGHL$8dH3 %(u>HH[]DѐH11HHu빸 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx ,EAD`^ AAF  / H e  #.annobin_pcre_info.c.annobin_pcre_info.c_end.annobin_pcre_info.c.hot.annobin_pcre_info.c_end.hot.annobin_pcre_info.c.unlikely.annobin_pcre_info.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..grouppcre_info_GLOBAL_OFFSET_TABLE__pcre_try_flipped__stack_chk_fail     .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h 'p"@0-3=T8@0 Slbl(]@80 |(@h00-|SP@@H@ 4/0 1575493209 1667 135 100644 5240 ` ELF>x @@ AV@AUATUSHHtqI1I$THH=u1I%DHHHt$IEDXuI$[H]A\A]A^L1HHDžHLAHDž8H)@H1IEIEB tDHAIEBt!D HAIEBfy#DHAIEB@t#DHAIEBt#DHAIEBtD HAIEHHxL ?t D@HAIExt!D`HAIEBt!DHAIEBtDHAH__SE1L%>A_tmLHEB5@IIIEBpDf I DSESESEڨt GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864\*+?{^.$|()[GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx <(FGB A(A0 (D BBBA ( ; Z }   (*6L`n.annobin_pcre_maketables.c.annobin_pcre_maketables.c_end.annobin_pcre_maketables.c.hot.annobin_pcre_maketables.c_end.hot.annobin_pcre_maketables.c.unlikely.annobin_pcre_maketables.c_end.unlikely.LC0.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..grouppcre_maketablespcre_malloc_GLOBAL_OFFSET_TABLE___ctype_tolower_loc__ctype_b_loc__ctype_toupper_locstrchr "H#Y$ % (   .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rodata.str1.1.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h'p("@@ -3=T8@ 0 Sb(]@ 0 |(@0 02< 0I-|vSvxPX@`    x pcre_newline.o/ 1575493209 1667 135 100644 4848 ` ELF>0 @@ SIDEtVA~MDH L? [E# At%LW1AI?A 9utTA ~(AtO|IA( Aw @@ ;=~~D@L I HJA9<} HʉI9uDBLcLIIHfH?ɀJL9uƒHcHHB <@>DE1HB <@> GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx  7 T u   /A.annobin_pcre_ord2utf8.c.annobin_pcre_ord2utf8.c_end.annobin_pcre_ord2utf8.c.hot.annobin_pcre_ord2utf8.c_end.hot.annobin_pcre_ord2utf8.c.unlikely.annobin_pcre_ord2utf8.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_ord2utf8_pcre_utf8_table1_size_pcre_utf8_table1_pcre_utf8_table2&      .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h 'p"@x-3= T8@`0 Stbt(]@0 |(@00-|SPHH0@x S pcre_refcount.o/1575493209 1667 135 100644 3840 ` ELF>@@ Ht0G9~ 11fWf=O‰fWø GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx ?? 7 T  u    ?.annobin_pcre_refcount.c.annobin_pcre_refcount.c_end.annobin_pcre_refcount.c.hot.annobin_pcre_refcount.c_end.hot.annobin_pcre_refcount.c.unlikely.annobin_pcre_refcount.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..grouppcre_refcount ?   .symtab.strtab.shstrtab.group.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h "p?(.8T3@0N](X@ 0 w,,(@P00T-wNP0@ pcre_study.o/ 1575493209 1667 135 100644 15648 ` ELF>`5@@ AW1AVAAUATUSH(AH4$D$T$<_H_CfH TtHcA HfDCcAH!CH @EHDT$H4${AEABfIA:TtIAIArINMFHDAD$AfIA<$T)rf.IV`HH=uIfD$fDIV`HH=uhIV`HH=u6fD1@ HIV4Hu܉с @s@1@ ʈHIV Huځ ʈS@IVTHH`uD@IVTHH`ucAjIIIrEt1fHH uAB!HH3.AB"AR#I&ArINMFHLT$dLT$IBEARI€?HII@ABfIA:TtIfIMDHLLT$4LT$ABfIA:TtIsfIrE1HHu︀DHcҀ<t%?S=uLMDHLT$LT$Zf.ABfIA:TtfDD$ArINMFHLT$LT$IBEt&ARI€2_I$II"KCfCC@DIVTHH`uI@f.IVTHH`uI1D ʈ}HIV Huځ ʈS1 ?HIV4Hu܉с @sڸIV`HH=uI@AVAUATIUSHdH%(H$1HHO?ERCPH@AuGoAWGHcHHG uHG HD$H[fHD$HE1HH$)$HL$HLD$H@HL$ у HD$()$SAAHHÅy1EuA\HHP0HHP@0,EuW@4xH4XXH$dH3 %(H[]A\A]A^fDHI$1ffo$@4fo$H8PHDHH1f.H5I4$k HL$1HD$S GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864argument is not a compiled regular expressionunknown or incorrect option bit(s) setfailed to get memoryGCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx xBDE B(A0A8D` 8A0A(B BBBD  8F0A(B BBBA \8F0A(B BBBFH\BLE E(D0C8GPj 8A0A(B BBBF HFBB D(A0Gc 0A(A BBBG S 1 K iF\0(  9J\r@ .annobin_pcre_study.c.annobin_pcre_study.c_end.annobin_pcre_study.c.hot.annobin_pcre_study.c_end.hot.annobin_pcre_study.c.unlikely.annobin_pcre_study.c_end.unlikelyfind_minlengthset_table_bit.isra.0set_start_bits.LC0.LC1.LC2.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_OP_lengths_pcre_utf8_table4_GLOBAL_OFFSET_TABLE__pcre_find_bracketpcre_studypcre_mallocpcre_fullinfo__stack_chk_fail[ b&'K')  |U 'a +  #=,O- S  x x| $(,048P<D@HD4HLPTX\`dhl p8t<x@|LPlhx  ,0t@ H $(,048<@DHXLPTX\`dhlptx|8D.26:>dhlptx|H$Tx|  $ (,0 4 8 <$@$ D( H L P4T8 X@\@ ` dhlptx | $(PT  `ddh9tT||`dhlptx|   h     $( , 0 48 < @DHLPTX \ `dhlptx | 6 e    x| @ .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rela.rodata.rodata.str1.8.rodata.str1.1.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@P`h'pS"@HP-3=T8@0 Sb(]@0 |@@(@0h@(2W2_0t-|SP @@3`8P& H4pcre_tables.o/ 1575493209 1667 135 100644 6160 ` ELF>@@  GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 M=%N+3<DMSUiBpsvC{  >   O%-4=PNXQnRSTD !E"#U FG $  V& )%3&;= @'L?PSV(\He)p*|WX+,@AI-YJ./  K0)10283A4HZQ[Z5`6g7n8s9{:;L<AnyArabicArmenianAvestanBalineseBamumBengaliBopomofoBrailleBugineseBuhidCCanadian_AboriginalCarianCcCfChamCherokeeCnCoCommonCopticCsCuneiformCypriotCyrillicDeseretDevanagariEgyptian_HieroglyphsEthiopicGeorgianGlagoliticGothicGreekGujaratiGurmukhiHanHangulHanunooHebrewHiraganaImperial_AramaicInheritedInscriptional_PahlaviInscriptional_ParthianJavaneseKaithiKannadaKatakanaKayah_LiKharoshthiKhmerLL&LaoLatinLepchaLimbuLinear_BLisuLlLmLoLtLuLycianLydianMMalayalamMcMeMeetei_MayekMnMongolianMyanmarNNdNew_Tai_LueNkoNlNoOghamOl_ChikiOld_ItalicOld_PersianOld_South_ArabianOld_TurkicOriyaOsmanyaPPcPdPePfPhags_PaPhoenicianPiPoPsRejangRunicSSamaritanSaurashtraScShavianSinhalaSkSmSoSundaneseSyloti_NagriSyriacTagalogTagbanwaTai_LeTai_ThamTai_VietTamilTeluguThaanaThaiTibetanTifinaghUgariticVaiYiZZlZpZs!!GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNU 3 N  m     @&x8`@J\ns.annobin_pcre_tables.c.annobin_pcre_tables.c_end.annobin_pcre_tables.c.hot.annobin_pcre_tables.c_end.hot.annobin_pcre_tables.c.unlikely.annobin_pcre_tables.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_utt_size_pcre_utt_pcre_utt_names_pcre_ucp_gentype_pcre_utf8_table4_pcre_utf8_table3_pcre_utf8_table2_pcre_utf8_table1_size_pcre_utf8_table1_pcre_OP_lengths   .symtab.strtab.shstrtab.group.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rodata.comment.note.gnu.property.note.GNU-stack@ P ` h "p(p.p8pT3@`0N](X@0 w(@0 s 0 -w N  P   /19 1575493209 1667 135 100644 4176 ` ELF> @@ HHHH @f.1?PCREHoIIoONoW V GȉFG ȉFfF AxfFAxvfFAxhfFAxZfFAxLfFAx>fFAx0fFHMt:AoAoaaIQ HQ AQ(Q(AʉAQʉQAQ(ʉQ(HD GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx 0V! = ]     + .annobin_pcre_try_flipped.c.annobin_pcre_try_flipped.c_end.annobin_pcre_try_flipped.c.hot.annobin_pcre_try_flipped.c_end.hot.annobin_pcre_try_flipped.c.unlikely.annobin_pcre_try_flipped.c_end.unlikelybyteflip.part.0.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_try_flipped !   4 .symtab.strtab.shstrtab.group.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h"p!(.8T3@(0N](X@X0 w(@008-weNehPH@0 =pcre_ucd.o/ 1575493209 1667 135 100644 60576 ` ELF>`@@  GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864            !"#$%&$'()***++,-.----/01/01/012/0134567899:;<=>?@ABBCDBEFGHGIJKLMMMNOOPQ-RRRRRRRRRSSSSSSSSS SSSSSSSSSSSS RRRRR S S TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTVWVWSXVWYYZ[[[YYYYYX \]]]Y^Y__`aaaaaaaaaaaaaaaaaYaaaaaaaaabccc`dddddddddddddddddedddddddddfgghijkkklmnVWVWVWVWVWopopopopopopopqrs`tuvVWwVW`xxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~TT}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYSTTTTTTTTTTTYTYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYTTYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY                     YYYYYYYYY                    YYYYYYYYYYYY             Y   YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY   !!!!  !!!YYYY!! !!!!!!   YYYY"YYY##$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%YY%%%%%YYYYYYYYYYY&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&YYYY'''''''''''''''''&&&&&&&''YYYYYY(((((((((((YYY))********************************+++++++++++++++++++++++,,---YY../////////////////////////////////////////////////////0101111111Y10100111111110000001111111111YY12222222222YYYYYY2222222222YYYYYY33333334333333YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY5555677777777777777777777777777777777777777777777777565555565666665667777777YYYY88888888889999999::::::::::555555555:::::::::YYY;;<==============================<;;;;<<;;<YYY==>>>>>>>>>>YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY????????????????????????????????????@@@@@@@@AAAAAAAA@@AAYYYBBBBBCCCCCCCCCCYYY???DDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFGGYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYTTTTTTTTTTTTTTTTHTTTTTTTIIIITIIIIHYYYYYYYYYYYYY`````JRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRZZZZZ`````KLMRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRZTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTYYYYYYYYYYYYYYYYYYYYYYTTTNOPPPPPPPPQQQQQQQQPPPPPPYYQQQQQQYYPPPPPPPPQQQQQQQQPPPPPPPPQQQQQQQQPPPPPPYYQQQQQQYY`P`P`P`PYQYQYQYQPPPPPPPPQQQQQQQQRRSSSSTTUUVVWWYYPPPPPPPPXXXXXXXXPPPPPPPPXXXXXXXXPPPPPPPPXXXXXXXXPP`Y`Y``QQZZ[X\XXX`Y`Y``]]]][XXXPP``YY``QQ^^YXXXPP```s``QQ__wXXXYY`Y`Y````aa[XXYbbcd  YYYYYRYYRYRRRRRYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYTTTTTTTTTTTTTeeeeTeeeTTTTTTTTTTTTYYYYYYYYYYYYYYY f f gfffggfffg f fffff f h f ijff gffkfgIIIIg ggfffgggg  l mmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnoooooooYYYYYY                YYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYY ppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqq     Y Y YYYY Y Y YY Y Y Y YYY YY  YYY Y YYYYYrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr  YYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYsssssssssssssssssssssssssssssssssssssssssssssssYtttttttttttttttttttttttttttttttttttttttttttttttYuvwxyz{|}R~~opopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYSYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYY I  TTTTTTSSSSS I YYYTT SYYYYYYYYY  YYYYYYYY YYYYYYYYYYYYY    Y YYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~YY}~}~}~}~}~}~YYYYYYYYK}~}~}~}~}~}~}~}~}~}~}~}~YYYYYYYYYYYYYYYY SSSSSSSSS RS YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY-----YYYY  YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYTTTTTTTTTTTTTTTTYYYYYYTTTTTTTYYYYYYYYY  YYYYYYYYYY  SSSYYYYYYYYYYYY Y  YYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYY YYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY TYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYY YY HHTTT HHHHHHTTTTTTTT TTTTTTT TTTT YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffgggggggYggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggfYffYYfYYffYYffffYffffffffggggYgYgggggggYgggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffYffffYYffffffffYfffffffYggggggggggggggggggggggggggffYffffYfffffYfYYYfffffffYggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggggYYfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfgYY YYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YY YYYYYYYYYYY Y YY YYY YYY YYYYYYYY YYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYY Y YY YYYYYYYYYY YY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTYYYYYYYYYYYYYYYYYY  !""#$%&'((()*+,-./0123456789:;<=>?@AABCDEFGHIJKLLAMAANOPQRSTUVWXYZ[\]F^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`abbbbbbbbcddefghijklmno"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""pqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr^^stuvwwxyz{|}~F^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr        !  ! !     !y! !! 9!! !!! ! ! ! O! ! ! !a! ! !! !! ! ! ! !!8! !!!! ! ! ~! +*! ]! (*!?*! =! E! G!*!*!*!.!2!3!6!5!1!/!-!)!)!+!*!)!&!!'!!%!   T   & % @ ?        ~ P        0    1111 77 ? ?? ???YY YY            + + ++ +5 55 5 5556 66 6 66   $ $$ $ $$/ // /88 888   9999 9 9999 && & & && ` ((((--22   33    %%% %% %%"" " """ 4'' ' '  ZZ Z Z ZZ= = == ==K K KK EE E EE H HHH   !!!! A JVdp~           ! A! ! !!!!   0! ! ! !!! ! ! ! !    ::<<<UUULLLL  NNN N! u00 0 0@@J JJ JJ D DD DII I IS S SSSS CC C C C&[[ [[VV V VV  #FB));;*** ( .,, PPPAAAGG WWWMMRRQQXT T TTT>>>O GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNU - E  a ~  " 0.annobin_pcre_ucd.c.annobin_pcre_ucd.c_end.annobin_pcre_ucd.c.hot.annobin_pcre_ucd.c_end.hot.annobin_pcre_ucd.c.unlikely.annobin_pcre_ucd.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_ucd_stage2_pcre_ucd_stage1_pcre_ucd_records   .symtab.strtab.shstrtab.group.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rodata.comment.note.gnu.property.note.GNU-stack@ P ` h "p(p.p8pT3@0N](X@ 0 w(@P0 0 0P-w}N}P /39 1575493209 1667 135 100644 4392 ` ELF>h @@ VIUHSHDEAALу? 9)HpAPՃ@ ~tYH@u=H)ʅASEeAHASEGf)[]A>HASE AtoAkuwddDAtWAuw>>?t=HH8uH)ƍPf0u[])@ tø GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx <XD AD phH AG O ; Z }  &.annobin_pcre_valid_utf8.c.annobin_pcre_valid_utf8.c_end.annobin_pcre_valid_utf8.c.hot.annobin_pcre_valid_utf8.c_end.hot.annobin_pcre_valid_utf8.c.unlikely.annobin_pcre_valid_utf8.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_valid_utf8_pcre_utf8_table4    .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h 'p"@-3=T8@0 Slbl(]@ 0 |(@0 00-|SP@@X@`  8x pcre_version.o/ 1575493209 1667 135 100644 4024 ` ELF>@@ H GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h8648.02 2010-03-19GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx    5 Q q   .annobin_pcre_version.c.annobin_pcre_version.c_end.annobin_pcre_version.c.hot.annobin_pcre_version.c_end.hot.annobin_pcre_version.c.unlikely.annobin_pcre_version.c_end.unlikely.LC0.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..grouppcre_version      .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rodata.str1.1.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h'p "@-|3|=|T8@0 Sb(]@@0 |(@p02 00-|]S]`P0@ pcre_xclass.o/ 1575493209 1667 135 100644 5496 ` ELF>8@@ AWAVAUATUSˆD$BGIH0HF!@DWL-DIL%H-HL=DAAMcA)ӐHC4DHcAtuHtNHc H>HF\HF!Sv@8p8ucHD$[]A\A]A^A_fvL5HA9 vN@@ 8uD$Ѓ[]A\A]A^A_u6dHY9L@I@EDA9A9o?HD C @C#4EpEtE1IfDIAP? D9uJD0UfDHFH ?D C IG#EqDt$AEME1I@IAQ?A D9uT$HD?H RA#4DrE1LDHB? A9uOD01R GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx \8FBB B(A0A8# 0A(B EBBC K 0A(B BBBD 8 3 N m  8 ,>Pb.annobin_pcre_xclass.c.annobin_pcre_xclass.c_end.annobin_pcre_xclass.c.hot.annobin_pcre_xclass.c_end.hot.annobin_pcre_xclass.c.unlikely.annobin_pcre_xclass.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_xclass_pcre_ucd_stage2_pcre_ucd_stage1_pcre_ucd_records_pcre_utf8_table3_pcre_ucp_gentype_pcre_utf8_table4aq x! "G#$$$ 8  \H  .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rela.rodata.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@ P ` h'p8"@H -3=T8@ 0 Sb(]@P 0 |$$(@ 0L@ x0`-|SPx@( Xx  t@ /58 1575493209 1667 135 100644 4752 ` ELF>P @@  GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~>~~xGCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNU ; Z  }   @.annobin_pcre_chartables.c.annobin_pcre_chartables.c_end.annobin_pcre_chartables.c.hot.annobin_pcre_chartables.c_end.hot.annobin_pcre_chartables.c.unlikely.annobin_pcre_chartables.c_end.unlikely.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_pcre_default_tables   .symtab.strtab.shstrtab.group.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.rodata.comment.note.gnu.property.note.GNU-stack@ P ` h "p(p.p8pT3@ 0N](X@ 0 w(@@ 0 @ 0`-wNP  *p usr/lib64/libpcre.so.0.0.1000075500000630130152342605160010725 0ustar00ELF>@)@8@ hh"h" ""$$ Ptd   QtdRtdhh"h"GNU j':z"][:lD(;s%  @PHP A @b (LP  " !"#&()*,.1567:<=>@A.W&t5υq3tq\7{NEcGsng씒"_n1q9]:7!2Vs:HuqX#:vTi|-S>EX[^O؊ .p0BEw֓ˇ ,W1gb-W<(f'/Wm kVB Ow:, F"K_U`@ys ` ?     O ?# #(# 0Sr#1 p Юg% j  ~] 0 @"S 0 @Y p<t # 0 `q0#= &#~@+   I # @/ i  x ; P(g__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_pcre_utf8_table4_pcre_utf8_table3_pcre_OP_lengthsstrncmp__stack_chk_fail_pcre_is_newline_pcre_ucd_stage1_pcre_ucd_stage2_pcre_ucd_records_pcre_utt_size_pcre_utt_pcre_utt_namesstrcmp_pcre_find_bracket_pcre_ord2utf8memmove__memcpy_chkmemcpymemcmppcre_compile2strlenpcre_malloc_pcre_default_tables_pcre_valid_utf8pcre_freepcre_compilepcre_config_pcre_ucp_gentypepcre_callout_pcre_was_newline_pcre_xclasspcre_dfa_exec_pcre_try_flippedpcre_execpcre_fullinfopcre_get_stringnumberpcre_get_stringtable_entriespcre_copy_substringpcre_copy_named_substringpcre_get_substring_listpcre_free_substring_listpcre_get_substringpcre_get_named_substringpcre_free_substringpcre_stack_freepcre_stack_mallocpcre_infopcre_maketables__ctype_tolower_loc__ctype_b_loc__ctype_toupper_locstrchr_pcre_utf8_table1_size_pcre_utf8_table1_pcre_utf8_table2pcre_refcountpcre_studypcre_versionlibc.so.6_edata__bss_start_endlibpcre.so.0GLIBC_2.14GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5GLIBC_2.3ti #ii /ui 9ii Eh"p"`x"x"X"`"1h"p"x"!"6"*"" ">"%"?"C""'")"-""""@### # ""7""("&"#"""""9"" "<"+" "" ". "4("0"8"0@"H"P"HH"HtH5"%"hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQ%-"D%%"D%"D%"D% "D%"D%"D%"D%"D%"D%"D%"D%"D%"D%"D%"D%"D%"D%"D%"D%"D%"D%}"D%u"D%m"D%e"DH=)"H""H9tHN"Ht H="H5"H)HHH?HHtH"HtfD="u+UH=z"Ht H="d"]wLAVAUAATUSIYAAA=L~"?E L"C [C#MIEcE1EtqfIEJA?AD D9uN #J\#tHHЃJwFLcLGZEuDH1L5AOcM>AfDIu[]LA\A]A^fD[D]LA\A]A^EuODLCLMt&@IEX LHLCu1 n9fDSA7A0PЀ{SBDЍJЀXLKDEC=83-<{cLEHcAIq`@70NAI)A I`=D7)DA<A'E1LƾA{E1A-uEAAIAHA 1 fDMMADAAHACHcA*u߅xlE|I}l9u-I%@HPIكBƒ@=MHE11A0Lӽ7LcCtHuQ0uL1LcCu}t1oxAI҃A9S"IEA`~ D7)ЃAAL)oDCHKA}E AH<}<-tAu޸LK1MȅtmE9MȺ0A7M)x 7{=M[EtI1A}#M:1M3IAM)A1D)غM)‰IIIALEH8@StDwZ@@@txDA1At>H8@SufLi"A<8H@YrV@[wHcTH>fDCfH"?H@AHSAtCHcAIDA@fIATt^MLLDHL $L $t AAfIATtAAfIA9TtH1[]A\A]A^A_fEHfAEMO(fAyLDHLL$LL$L$LL$AAfIA9TtA@fILHlH3bTfzODE:A@<-H;"?I@A@IP<LBfIP!iEA@<A@IP<LBfAWIAVAAUA!AATAUSHHH-"_@X]JǃBBv uxusAGfIA@HEtG@tN9u:AFfIA>Tt(1ҀXHpx uɉ[]A\A]A^ÉÀA$D말AWIAVAUE1ATMUDSH8EHT$L$HH4$dH%(HD$(1HL$ (bHD$ EDT$HlHD$\[#u @(o)HD$ |u EHHHL$ P+\uHAHD$ Qt QuHHHD$ u5IAH\$(dH3%(DH8[]A\A]A^A_fD\uHAHD$ yEugHt$ 1ҐNH\ti^HFHD$ N\tA]HT$ HBHD$ J]\H@xEHptHuHpHt$ _L$HT$MAH4$H|$HD$ 8}A$|$A9A<$DL`HD$ HPDH ;HT$  HЄurH<$HPGsAHt$ 8<DP9HfHHD$ H9uH|$tHcT$H)H99HL$ E1A5HBHD$ JH€QHHHD$ \uHAHD$ yEuQ|HAAHD$ QHEt E94$}E4$IAy?QtFt%)t Hf)tHL$ HHu HHE1HL$ PHE1~H=t !jHE1iAH|$DD$DT$DD$HL$ E1DT$#HpAWIAVAAUAATUSHH(dH%(HD$1HG0Ld$ Hl$D$ HD$fHT$HJHL$:tMEDLHHF~Ht$dH34%(uH([]A\A]A^A_N@f.AWEAVAUEATAUSH8HL$Lt$pLD$A|$ dH%(HD$(1LAIvI#tfH9HHxH|$HAIV8uMcL)LH9wA8uAt A8HuHcIvHHD$pHPHT$HHNfDAH-H|$YAIvH@\IV< L@LD$(tY~OH P"?H5"< #,wt)H1HD$PH? 9uMD0AEINM<#tf.H9IIxH|$A@.AIV8uIcH)HH9wA8utAA8@uL7INLD$ApIPHT$A@IMD<*tdIVHc*u f.1H\$(dH3%(H8[]A\A]A^A_AL H|$Ic@INIAV`Ht$$E1DH|$D$$ŋD$$uHD$L@LD$AE"LH-HcH>D9/A#IFHc,(1A9A0'H\$D#DA~DH"?4H" vD#$AtH1HH?A 9uD9IFHc,(1A9fA~tH\$D#DA~H"?4HG" vD#$AtH1HH?A 9u덁# 1|$ IFHc(IVHc*qM b|PD1|$ @2IFHc(ЃIFHc(IVHc*A~^tYH\$D#DA~DHq"?4H" vD#$AtH1HH?A 9u؃\HHcH>E  4 & HA/ 6IA_ #A01U 1 1E E rM1dHT1GA( AG1)/ t~#_ t 01|$   Ձ( 1|$ D9*IFHc(D9Hu"H"BH*"lH@"HHv"HBH"l!IFHc(D9:AtA A1AIFMcB ЃAIVMcB"AIFMcB nAbIVMcB"MFA9IFMcB AIVMcB"At$A t~#At A1A A A @f.AWAVAUATUSHXHHT$H|$PLpHL$dH %(HL$H1Ʌ{T$ D$!HD$1Ll$ L0HB"(T HHtAVHcIuHD$.HD$L0gD4 LpP>@f.AWIAVIAUIATAUASA…t^RPt`L"HHA wbHH?tAZIJSLBIA…u[]A\A]A^A_DABfIt@IEd+[HHLJAB<=H"?I'AZIJSLBcMI]M9sBAMzLfHI9uUDfHI9t;HL9rABfHH9wABAZI"JI9wI]빐f.IA@DDEtnAPtnA\|A_L "AHMcG LH?tGHO<HBLDDEu1GfHmDHa"@\HMDGf9H6"@_H"f.L<+ MщIMG<H "?Hf.GHO<HBf.Hff.AWAVAUATUSHHH$ D$|$L$8H$H$(t$`L H$H$@H$H$LD$xH$dH%(H$1ACpH$H$h$H$0H$`$$0DŽ$ ;_uBCE1fD$Zf$ff$XIC@$ H$PH$PIC@$E1H$HDŽ$H$PfDvA{`HcH$L4H$0$HE‰$MHD$0$$D$Et $AC`D$;D$`t$0IAD$AD$$t*ID$\AD$I$0H$fA\$D$Ld$@MLDŽ$4Ld$HL$HD$?1\$?|$d%@E1E1E$LӉ$$%HDŽ$D$THD$DŽ$D$8D$ D$P$D$[f.A\ L$HAyE Dt$ID$8HLIILDt$IL$HHHE E)HH|$0LE I9 HD$@Ht$0I9NjLBLH)Ƹ)HH9HD$0Hy L|$@H;\$H1 ED$8)AEփ A? A{H H|$ RAFD$A D$D$D$X HEE1 A#FAD$D t@L$HH.D$ D$XAE1D$D$P$H$@AA<+ $E1ۉ|$h@HEHH$H$HHPH$HP*C?D$|$ME1ɸ^E1E1A^L$8AH|$0H$4L$@DmxHDDŽ$4t$H$HH$@HPUH$xPAPH$dPARASL$L$H@?A`u H|$0 A9)9=HD$0H $4)9 H\$0AD$$A^UD$PI_fEGL$HM$$D$$D$PgAI_D$PD$$E1L$H$EH$HE1PLHHHc0t+fC IDtJAHc0uAO}fAQII}\!HcE10t'CtHDlr1H0uA*HD$xE9;$IɉD$XDD$t\$EÉD$I_AEs:]$D$e A$I_S$  |$L$HCDd$TD exA ċD$D$ SLd$xU`L$HE1L$LL^E$$AE$E%A|$?H$DT$TI_ ʹD$tDt$f.Dt$A1H$<HH@{9$ Mt |$L$H L$TL$ DcD$ D ex5DL$HAq@=weH@$HsUAIIQu$FfD]t;B@8nHt&\uB<]uBHHuE1H @Eo A^e AIIqH$HEaA\uAyEIqt۹H€|JIq@L$HH'D$ AE1D$XD$D$P$;f\$D$$ED$I_ljD$ |$ AL$H@L$HHG'AAD$XfDHD$0IL$HHt%LH+L$@)HH9/HD$0ʉACp$ƒ;$AC`DT$`9MljT$`H$$A9|5'H$$0Hc$HLdI@Dt$DA$"T$?I_D$ADt$fDD$D$ D$$H$HHV~HVH8tfH:H8u@}tR@,hr@}t>0TzH8tHH:H8u@}&fDD$Dt$D$XuVE1fDLH|$HHDl$H)HD$HL$H)I)HL|$@L|$HL|$@HEAL$HH9EHUHD$x4H$L1H$dH34%(HH[]A\A]A^A_DH|$t2H|$0u*H\$H$HH+E0sft$f)ffCHD$D$@H$HASE1L|$fEIHH+U0HAWH+E0AGfEW@oAD$$LD$X ExE1D$PL$H$:f.H$HA<H$HfDHHH$H:B)@>z@t؋t$T f.ACDH|$0HD$fDD$ AĉD${<]@: H\$xE‰Dd$dEWEt EA~ D$T ExD Љ$E E1D$pEH$zHDUH$XDL$ $L@D$$AXAYD$D$pD$$AD$h<>T$hT$pESAFD$pL{'DfAfC"D$?EE9=!DSH{t H@wE)Al %fALfDofAL$zIct1ƒA<A<D9rLfIAD$hL$HHt$H$HHD$H+E0~f)ffFDA$I_CfDH$HLH9r{HHxH$HHtQHU8uLcL)LH9w8uAt 8HuLL7L$HA9AE1-D$LH$HeHcH$8Tg$LH+$A9|Mg.fATfAG$L$h$D$L$$DSEu ED$$D$p DG<5 D$$EPD$hEJA@Av,L1AfAWDAWI_D$$AGfDD$$D$ GHD$xA]Es H$fH$IGHD$X)$)$D$L\$XD$ AD$pD$hLۉD$PL$D$fDA~#|$?tH$HD&DAHD$0Ht H|$XH)Ht$8H$HIPA\E:D$8HHpH$HD`EA]bD$8V|$ L$ID$`|$hTD$dEA5\$D$$AEoL$HD$8EI_D$D$ yfA[nA\L|$xU`AL$HL$LLgAAAA5AKAH$HAED$ H|$0DxAD$ A*A2AE&A9AD$HL$xH$<H$8L1AD$8;$8CD$hHS$<CH$HH$HHw  HHH9u$fDH$HD|$ D$8H$HID$@z=D P\xEvHH8EcH$HPIǀ\tA A D$8-t$dt"AA~D$@H$HEAT$DAIԉMcHc@T$Pt"HUF,*DDHc@D$ Mt AWD$8-LfDIGH$HAO\u>AOE IWfDHJE H$H HЀ\t܄t ]D$8:fA fA \D$8H$HpI@=H@$HPHxI \t)]AN@8t-I\uAV]uAVID]uHMH$@:79H$Hx^H|$ u!HD$8HD$ H$HD$pED+d$ E1L IcL$MH$DID$$AH$(L(fDIH-AF,0Hl E'AE9uH|$ LH能uL$H$D$$H$(A D$,CH H$HcHco,)$o|BHHc)l$ Hc)$ +H$1)1u$H$L$8H-HH DHHH9uIFD$8D$ eLsDL^L$PHcLH$HD$h)H$HApI@\xEA tA uMt D\$8EX@\xEPD\$8E.f.H$HIP @H"?Hۤ" @HcID#$At#HV1H?A 9uLH$Hf.fH$H$)$)$E9HD$xID$$D$pAAp|$! A A D$AFL$8HL$xH$<LL1AL;$8AGIAW$<AGD$L$HD$ $D$P@D$$[fDD$9H "pRANrBHcHH$@,fH ٢"Dl$dHH$@EPH "?HH$@G<LH)H$A@`ZAP!E HM(LEHLc$Au#AL$H߾$D$D$LCHLLHKCD$ID$hDŽ$LD$pD$i^fCI_AD$$Ec Hc$T$hII)ŃVH|$0AEAUfMI)A:]MD$"fAFfIA>TRHDLL6tA4fHuPHXHH\$XH$HIH@u:c1)DL-̆+L$X1Hl$pAMLoL|$hLDHJl-HUALcA9uH|$XLHAL*uLcL|$hHl$pCLp'A1IL$HHU'MaL$HAyH:-If.L$HA MIH uDD)\$hH|$0,91EX='1\$hS;U\|SU\ 2H$HEXfDE`|$ME1AE1A_L$8E`AGE`AG_fDALAAE%AIAWAGEoA"D$?L{f.DH"HDH"HBHn"|DA9t$PH$Ht$h;fLHL$HHQ߀[TH5]uHcH>{UfD DSLCt KLC@sMxA$x$\$9tAD$E\ DŽ$Dl$ExD$$EyD$$$D$$$$1 کD‰$%At$1LH$sN)H$fffDHD$xAI_b |$AL$H:D$D$$D$ D$P$f#L{fQHPH$HH\xEHp( D$dA\l D$8E9,A A DD$dEAAD$IEEDE9rpL"DDH5V"H ћ"AFTDA9t-fЉAF|9A9sALLsDLD\$heD\$hHcIDLOD$hHcH$HL&@L1BfH€:UuAh U+EA9)H$@|$$<D$8ED$MDŽ$D$ DD$A AH$HB<<@<'@u1<{kD$AIEwL$HD$ $D$PH$@A\3MAXD$D$$DŽ$D$ DHD$xED$XD$XL$HHa E$DD$P$D$DD$ E9D$DD$XD$XLcLq|$PHcH$HL|$hHfDAIwAfDHL$HAxDT$dDE-D$8AHd"?H5" RLcIF#AtHpE1H?A D9uLH$H'fAAH$D$D$L$HcH$D$hi$DxD@EE@$LeHE9L[C^HxLH)ԈSHt$pHCH$HD$D$L\$hGL\$hM9D$D$LvDHUH@AIfDEta"AVHEHDʈPHEHHPHUHM9wAH$MA'L$D$HD$"AVHEHDˆPHEHHPHUHM9_H<$L$D$D$HHH$Ht$pD$HD$HL$h.M9HL$hD$D$@11MHD$x<DApH4dIPH0tH2H0uD9\$MHL$HAH\$ $\$P}DAFIFH$ʉKHPH$Hx)|$E1ɸYE1E1AYE1L$8HPH$HP)t,t(Hf.)tH$HHudHD$xL$HuHMA)AMqL$HAAIAfH$HIHHuLL)H|$0D$hfD9 m1ELU(H!=H|$E1E1AH$HE1ZAZL$8H|$E1E1H$HE1۸XE1AXL$8LHA)L$HHH_SH|$ME1H$HE1Ҹ]E1A]L$8>ASH$HHt_LJL$HrHc [H1fD H$HIHLNrLcBu@)+HD$x&{H$LL $Mw L\$H)H{H觜IG]L $H)L\$$0ffCAGUfAGIC@Dt$d$<$ ESLc( L) HcLHDŽ$D$D$ MEhL$8H$<DŽ$<DŽ$8LA<)<:IQH$HB-IH빃 fDI뫃    @ ߁ MtHD$x (D$L$HMAHD$ $D$PHE]DDrDWE9DDAFTDA9t5@DEAADFD\EA9uEAARE9sA9&AD$D9_ D9IQD9AHDHT$hHT$hLcIfDt$ DED)H|$0DD$ H$HDL$PIcECfDEAT$DAAIԃAHcDEt#HUA 2HʃHADAHE9uEWDMt $|$P<xE`HD$8DDŽ$D$$EH\$p1LJI_A,HDBfH€:UuD)Љ$EAHM(LEHHߋ$L$D$D$I贻HCHc$HHHD$p舘D$D$D$h1ɃiL@D90C9D@AyE`I@H$MDQffAfH)fuD$$$$D$d$$$LcLxHIA$I\$H\ HHHXHC HHH1/ HHLcL_ HIA$I\$H0HHHXHD|$ HD$8HD$hH$HHD$xLL$ HI_AAHIL$$D$D$褹HCLHHHD$p}ED$D$rD$$LHcщK D$DŽ$D$ HD$xL$H@H$IOHp HH҈QH9u AyE`)؉ÃH|$0iAH}($jI2AHD$HT$h/HT$hD$HHLI雾HD$xApD$$LoLJHML$HB<<)\$<'A}'DD؉\$ $\$PDŽ$A ŋD$ED$ AGdH$HBHHI9uA9 - + H|$0LU(_A1?D$A>D$ $D$PH$o)$o@)|$ )$H$H$HLB HH HI9u>z&= LRIE1AXHE@E|HAqP IAWPAWHHuHD$xI?fEE)H$HE~IAH$HAA9> LHL$H8)& H|$0A`|$ME1L$@DmxE1AA`H$4DŽ$4L$8RH fD HHH9u]AH$ fH: uD$dLcL蘎HcLH腎HHHXHl HHHZHHHXHAHHH/ HHHXH. HHH0 HHHXH^ HHHٍ` HHHXH/HHH讍0HHLcL蕍HcLH$ $Dd$H$H$H\$pAD$MEHcD$IH4$D$AD$EfH$Ht$pLH]HII9s>HEHA$IfD0AT$HEHDPHEHHHEHL9wL$AID;$|EH$MD$D$H\$pD$D$4HU LHHD$x#fDDT$X1ɉHE1解^HU(IGLcHMHHH)IHHHUHH+E(BHEHH|$E1E1AH$HE1[A[L$8ɹ$H|$0D$h}XH]P~zHct$hE1L$D$EI܉HIHHD$pfDIt$LLPuHD$pA<cHcE\AID9uL$D$DT$X1ɋT$hLHEpÅ%EMLU(e$H\$xE‰AQE1<>HMA)AA7LuPEXHc\$hL$D$XH$~CL$E1IHD$pH$D$%$QH$A<uZAu`fV9t$D$pHcE\AID;l$XI^LLHmtyҋT$XHcE\LL$D)I<HcҊD\$pEHEP}`H$EXOD$X~@H$|$X1fI9tf9<HcE\H9I^H$LHAE`AFD$hHAEXDŽ$D$D$ HD$h1$<|$ $8!<)*IM^E1L$HE1E1A^霶Ao1IL$HH$1f t'Hp tu߈ È Dd$dESLcL' HcLH) HHLcLID$AD$ $D$PALL$D$fHD$xL$H lHD$xL$HTARD$$LRA>L$HBEE`DD)-D…;EdfAfAGA`|$M1DmxE1E1A`L$@L$8DŽ$4 HD$xL$H醼HD$xv@)HD$x'\HD$xL$HDHՁL$HLRZE1BHD$x; E`t$pL$HHD$xL$HAһME1E1ML$I^E`HHAH$HDAGfL$HACMS`HD$x6m׉A2HE(HI9_D$1tAIAGL$H1ۉ|$%$1ۉ$%D$T餯HD$xL$HۺH\$xIȺHD$xL$H*鰺HD$xL$H1阺MHD$xM>邺HD$x0rHD$x*bEXH]PD$hE1IcD$MD$IDEHD$pL$IcE\H;l$hHT$pHsL,uLAGAfAGHD$xʹHD$xL$H+鲹HD$xL$H:隹HD$xL$H0邹MLL$ED$D$DL$X1DLHL\$pEDD$hLT$XښfAGAfAG;IHD$xH\$xIHD$0Ht 8}p1ۉ|$逭HD$xM鼸HD$x)鬸ME1IӃ~MH$1H$IGHD$XDt$LT$XDD$hL\$pEA{RAtWE~DD9md|%fAAfEo>HD$x: H\$xL$HA޺H5RLuAGhAH 1EA4H1Ek Fd&A9EuAEAGfAfAfE_H5}D  IGHD$X鏽Ɂ|$dD1HD$8AWAVAUATUSHH $H(HT$HL$LD$dH%(H$1D$\%D$hD$H|$xH HD$IMHHD$HtH|$: HD$MIL$H$IH$I@H$  L[PL ZPLePL\PL=IPf.HcM,A}(A|* IDLHHLwHLtHLiHLvHH=O HH=lOHƹ H=ZOu&HcځM, A}(@D\$E%==HD$xH\$D$h8A8L)DǺonHB fQHHH@u  PHf2f  fD0fD%p= ~D=@=Pd=0HA H$fD$ 5=DŽ$ DŽ$$ L$LHDŽ$HDŽ$HDŽ$HDŽ$L$L$L$L$k}$LD$hHL$xLHT$pE1H$HDŽ$HDŽ$L|$pƄ$^LD$0HL$@HT$8H\$xHHD$dPH$HD$0PjH$HD$HPH$PHjj D$H@D$xD)EHcT$\$$HHT0HEe"HHT$HHT$HHHP1E1ERCP$0L;5 e"$Ll$xE$LDH$fuE1fE $Lu DfEAf}fUfDEEHHE($HM0L4HDŽ$DŽ$DŽ$H$L$L$DŽ$HDŽ$Lt$xA^}jt$0jt$HSjjLD$pH$HT$x{$ fE$(fE$4H@D$fE EtD$dL$huHD$x8tD$hHD$pHPHT$pHD$pHcT$\L)H99D$hT$1ۅÉ\$L)HHAUD$hu[H$L9 HBt$LH$BR HM,I\AU {HuD$h5$t$LAzIHtr\$Ll$ fDfAyuEAAAQLL кHMTEAu证EaffAAIyD]zIHuD$hJEsD$dfH$dH3%(HH([]A\A]A^A_@@ LzH|$D$h,A, PNL5a"DŽ$DŽ$H HHD$HHD$HtD1D$h$]f9]D$h%$E‰D$hHpa"HD$xDD$hD)H\$H +<Em#LL$l1LD$l$LMD$dfEu@tH$H4р9DfUfM /lfHD$D$hAHHD$1cDŽ$ ZD$`xMtH$H9ufEfM "HD$xH\$D$hAL)1LLD$`y$1LfM D$hAHD$xH\$D$hAL)vMIH1,vf.fw#HcFHcH>H1fD1 111f.DAWAVAUATUSHH $HH $HH$ HT$XIHw $AUH|$($ L$H\$hdH%(H$x 1HGHt$xHsHt$`HD$PHGHD$@HHD$ G0%D$H$ D$t$ HHH$D$HHH_HD$8b <HHA|\|$t<Ht$8LD$ |$1҃@DLFHL)‰NDډFAEfIŸA}TDZ9|D$LH$x dH3<%(D$LuMHĈ []A\A]A^A_Ht$(F.XfAEfIA}TtHD$hHcX(Iۅ%HHt$`H|$8$HDL$vtD$DL$L1Bf9LBfH€:TtDd$HEH|$XHcHH)HH\$PH9HH)؉HH)H|$XHD$(H|$XH9xvHxHT$8LD$ E1DT$AEf9|3LA[L)ǃE9BAHz)ljJzAEfIA}TtIcIcDT$HD$LL$ED$sD$sAD$$HD$xH@HH$HD$XH$HD$1H|$hHt$@HD$0H\$8HD$D_D$H9s.0DL$HD$t$0EtEE1ELt$`E1DD$4ILT$8DŽ$=B M;l$KRAAEnIAVAFE9~RIcHLҋDjxEt{AOLHIL fHH9tW9uz9xuAE9IHcD$HT$8HcH|$`HD$IHD$hHT$`H|$8f.HcHD$ DD$HD$$EuH H<DL$4L$4H5CItSHD$|$HA0twd<$8~5Fw-H @HcH>D$L E1$=wH=@HcH>DۉH=X"?D H=Y"C IB#4MEt$E1f.xH? A9uAEy:LD$PHT$XI9f:1HBI9s4Rt#fD#HI9uHD$PwHD$X$| $h$T$,$@HW"?HX" R#4HɉAD$0t&HD$1HPH?A 9uDD$0GD$Hc$HD$PH9D$#AHt$H9t$P$A<$t*AD$D;d$KEkAIAKACD$'D$0=!CY. 1Ƀ94AAT$D;d$DL$KEkI{A ACE/L$0:T!L$0( Ƀ@@9v" $MADLE;l$#EnAAFIAFAAF<$t*AD$D;d$KEkAIAKACD$&D$0 W?-1Ƀ -<$uAIHD$Ru@f99;l$\EnA)AFIAFANAt$D;d$SACIKAT$Ekz.|$0 G4e 1҃  <$}ADID;l$AFAEnIAFAIAVcAL$D;d$ADDD$EkI{$AACE'AAtP9|$s9L `T"AAADL T"E AHT"FDAEDD$0D9E9@ <$+@@8.AAIR~,AD$D;d$ALEkAIAKACD$$AtHB>|$s7>H S"H S" AHES"||$099 ȃ<$+83AAT$D;d$ADACIKAD$EkR#AtK;|$s;H=R"H=S"D$E;l$gEnAIA^AFD$MHD$(p4HPS.H;T$'2E;l$ EnAIA^AF|$d |$0V D$0Hc$H <H$"H ;:E1E;l$EnAIA^AFHt$D$0=w*Hc$H$H ;"H ;:7E;l$&EnAIA^AFHD$H9D$Ps?HpHD$(H9pvHpHD$L$H@…H$u1ҋD$tD$0=wH$уEу<$8#AD$D;d$nEkAIA[AAC<$t*AD$D;d$2KEkAIAKACD$D$0=Q-d# B-#|$0t 11Ƀ98+AB~*AT$D;d$KEkAIAKACT$|$01:!W1Ƀ9&AR~*AD$D;d$$KEkAIAKACDL$EoD$0=6. '.|$0t 11Ƀ9c)Aw1AL$D;d$DD$CEkI{AACE"D$0=:*ID$0=/ %*DL$0A_ t 1A0@@9*$u-ADLE;l$EnAAFIAFAAF1Ht$H9t$PaAHt$H9t$@HD$(p4HP,H;T$7-A3HD$PAD$D;d$FASAIA[AACHt$H9t$@AD$D;d$EkAIA[AACDL$EHD$(p4HP+H;T$5A~|$t$0HG"H H"H=G"H$H$H$H5bG"AH$D<a)LcD$E1LD$L9D$@&D<$[H$ЉH$FH$DH$<T&HcAIL9D$@?&AЁvH F"?4HF" v#HtIpE1H? A9uGT$qD$0=t  E;l$-EnAIA^AFL$ D$0=/ E;l$EnAIA^AFD$D$0= qD$0=k=`A0D$AtH$|$09A)99)E;l$ATEnAAIAFD$)DL$HET!;t$00D$00H$9/A|D$*;t$0 E;l$ATEnAAIAF6HD$(@-DD$E@0 g*HD$(p4HP0*H;T$5AAL$D;d$D$A|EkISA;AC0AAtOJ+|$s?+LC"AAADLD"E@HC"B\A؋\$09A9@ <$+@@8Q$AAI&<$mt*AD$D;d$9KEkAIAKACL$6|$0H =C"H zC"H|$ AHB"HO./W/;H|$@881Ƀ9!A`AT$D;d$wDD$CEkI{AACEEDL$0L|B"DAALB"DLL$E@H'B"AyJ%EAL 0OcM>AR~*AD$D;d$KEkAIAKACDD$El|$0H A"H B"H|$ AHA"HOq($-H|$@881Ƀ9A1HD$HT$L$0L$L$HApL$HH+L$XfHt$($ P$PAUhH$PH|$X?H01L$L$EZAR$P_H|$t$LG!r|$0"OA0LH+|$ F@'H=%/@Hc4H>|${B|$0$ AEL$D;d$CL$AC$AICEkH$B|$0$  AEL$*EL$D;d$FCACI[D$AD$Ek|$0:1 AEIDJE~*AD$D;d$SEkAIASACD$]|$0PG AWEL$D;d$sCDD$ACAICEkHD$E1|$0 AEL\$DL$EAtH%|$s%H >"H M>" AH="||$099 ȃ<$+8AaHT$BfH€:TtAD$D;d$eH+T$ EkAAAIACHW="HHHt$H|$PDŽ$L$FH$L$$H$H$HD$@H)$HD$XH)$ HD$H)H$$Ff$f$(Ff$,HH$HD$(H@@H$ L$L$KAT$D;d$6EkAIAH]<"AC@SA[<$t*AD$D;d$KEkAIAKACD$ t$0H ;"L =<"H=<"H$H$L$H5;"AAH$D<HcD$Ht$<$L uAI$L9L$@D$pHH$IHcɃ )H$H$HFH$D<zMc$ML9L$@eAA=yH5:"?<H5:" #ItIyE17H? A9uA-D$AT$D;d$?t$CEkIKAAC1|$0H5G:"L:"L a:"H$L$H59"L$H$A@DA<$LcL$LL$-DELE1L9L$@vD<$AL$L$L$L$$H$$H$SPIHc҃)HDEADA<HcAIL9L$@A=~H 8"?4H/9" v#Ht$IqE1H? A9uIAXHt$Ff$fHT:TuBfH€:TtAL$D;d$CHH+D$ EkAACAIAC$AAL$D;d$H|$ACAEkGf$fHT:TuBfH€:TtA9L$HH+D$ EkAACI ACRR~*AD$D;d$gKEkAIAKACL$Rt$0  1 ~<$uAIM;l$AVAIA^EnAFBD$~*AD$D;d$SEkAIASAC|$z|$0H6"H 7"H56"H$H$H$H=`6"AH$D<Mt$LcL$LL$~<$uAI$L9L$@w|FPH$IHc҃)H$HFH$DH$<Hc$IL9L$@A=zH 5"?4H5" v#HtIqE1H? A9u/1D$  DL$0A1ArbH|$(,|$AAIwHƒI9s9=HT$X|$0tr vAAI/- .  DL$D<$L$$$U;l$D$EnAIAFA~AFAAIAAIAD$D;d$EkAIA[AAC`AD$D;d$|EkAIA[AAC-AA!AKHD$(p4HPH;T$O$AHЃAAAAItAEIeAEIVAAIGA>LL$EID8H@@9AAIAAAAEIAAAAAAD;d$$EkAIACDACAlAcAZAQLL$EID8A&AAHD$(@,AD$D;d$!EkAIA[AACAAAADHL+."HD$@C9`D@A@<AAD ?H\$H9\$Xr1HD$(@,tHD$(Hc@(HD$PH9D$X|$LD$LD$L;$H$HL\$HL$H~AEL\$L$$~"H|$PHD$XH$H)HD$H)FHD$(@.AAAyAAIjAaAXAOAFA=1ApRf9*At$D;d$DyEkAIA{ACA@uft9;l$AAIAVEn1AT$D;d$ACIAKEkHE;l$AAIAFAEnU1R~*At$D;d$hEkAIAKACE;l$6AAIAVEn1AT$D;d$ ACIAKEkE;l$AAIAFAEnHt$~@8x1҃<$9 AdHH*"HD$@9PB< 뮸Ht$~@88듃 sD$0=/ i|$0_ I109aHD$(@.A@D$0-( AD$0=/ tvD$0=_ t =0-A`- uHA< uHA< |$0 E;l$EnAIA^AFD$0=/ tD$0=_ t=0J먋D$0=r-( AYD$0-( r7HD$(@,D$%2A D$0=tr -( vA$-nEADLE;l$ AFAAIAEnr=HD$(@,$2AD$0=tr -( vAu 0D$0=/  v3|$0_ 10 - pD$0-( A- R- AAIAAIE~<$CuAIAE;l$AAIENEnsAAIdAAIUAAIFAD9*`DHD$$M@f9 ;l$0EnAIA^AFAAI|$0p  D$0H$H*"2H :2aAAD$D9d$ E AIACEkAD$D;d$xEkAIA[AAC)D$HD$RM@f9;l$"EnA)AFIAF$AF$+8IHD$Ru@f9;l$$EnAAFAIAF]~<$ouAIE;l$dAAIAVEn$$MEHD$LE$ED̃@f9;l$$EnEAFAIAF|$0 QD$0H$H "2H:2RAEL$\H|$xD$047@84A:~<$uAIU;l$AAFAIA^EnAF$DEEDID;l$t$EnAIAFEIAv|$0h mD$0H$H"2H:2yAEIZ$BLE\$EEDL\$;l$dAAIAFEL\$En|$0 D$0H$Hi"2HI:2uAEL\$<$uAIHD$RM@f9 ;l$EnA)AFIAFAFTE;l$sEnAIA^AF%|$0  D$0H$H|"2H\:21A<$quAIHD$RM@f9~;l$EnAIA^AF{LL$1IyH9|$@1Ay T$0D<$E;l$mAFAAIEnEN~<$uAIE;l$$AVAIA^EnAF~$) 6 BU;l$AAIAFEnD$U;l$AF$IA^AEnAFX<$uAIHD$RM@f9~;l$HEnA)AFIAFAF$*t 7DELEڍE;l$A>AIAFEnH|$(Ht$HcO8H)H9<@8>tHHt$(v=@8pvA[HD$RM@f9;l$\ADEnAAIAF $(t 5DELEٍE;l$AAIAFEnA1AAA|$0Ht$fAmHt$HH:THT$uBfH€:TtHT$HT$L$HAL$HH+L$X$ P$PAUhH$PH|$XL$`蛾H0$AL$L$L$X8aD;d$ɿHD$HH+D$ AAIACEki;l$$AVAAIEnAF=;l$_AAIAVEEn1<$;l$*AAIAVEnHD$(HcH8HH)H9T$x AAHD$(Hc@8HHH9T$%A`;l$AVAIA^EnANV;l$xAAIAVEn2A);l$KAAIAVEnHD$(H|$L\$D$L$HH8 3L$L\$AD$H|$HH8L\$L$a3L$L\$3AD$1<$D;d$$EkAIACT;ASL$E cHD$(p4HPt~H;T$D$H|$HH8L$L$2L$L$A˿HD$(HcH8HH)H9T$ A騿A響Ht$(H|$HcN8H)HH9Sv<@87F Ht$(HD$~=@8x%AK@D;d$h$D$D$LCD$L $D$L*$D$L1xH R"HD$@9;l$ʻAVAIA^EnAFyH|$(Ht$H<@8< ATH$DA7H$  E;l$;A>AIAFEnH|$(Ht$HcO8H)H9<@8>tHHt$(v=@8pAD$D;d$˺EkAIA[AAC|HD$(p4HP1H;T$H|$D$HH8L$L$DL$/DL$L$L$dA D;l$)AVAIA^EnAFؼAA̼AüIAA鳼AIH$<AHt$EHVH9T$@v ~  ;l$EnAIA^AFJH|$1HOH9L$@=1 /Ht$1HFH9D$@1ɀ~ AE9|jufD$HcHT$mEIAFEnA2MZE1ABAEjD$阻A鏻H\$PHcHcHHH9sHx@@@)H9uE;l$A؃AFEEnAV 9D$EnI AvAFAVH$ A;l$AAIAVAEn龺DE;l$շATEnAAIAF醺|$0H"H"BH"|HD$(p4HP2H;T$D$H|$HH8L$L$D$,D$L$L$AEL$ʹE;l$ATEnAAIAF闹H|$@8xxH "HD$@9H|$@8x AA/A&H|$0L$HL$HT$L$*HT$L$L$L$HD$(p4HPH;T$fD$H|$HH8L$L$D$K+D$L$L$AEL\$af.E;l$vEnAIA^AF(HD$(p4HPuH;T$D$H|$HH8L$L$D$*D$L$L$AEI鬷HD$(H|$L\$D$L$HH8A*L$L\$HD$(Hc@8H|$@H)H9|$ARH|$(Ht$<@8>tA6AEI'tH|$(Ht$=@8~tAHt$(H|$HcN8H)HH9v<@87Ht$(HD$~=@8xAEL$馶Ht$(H|$HcN8H)HH9v<@87t;H|$(HD$w=@8phAEIIAEL$5AEI&;l$HEnAIANAFAf.|$tD$4HD$h$9XHD$(@,uĀز|$LͲHD$Ht$@H9H9D$X$D$LHD$(H\$PH$H@H)؉HH)؉Gp&Ht$(H|$HcN8H)HH9iv<@87\t!Ht$(HD$~=@8x?AA޴ӾH|$(Ht$=@8|A驴D$H|$HH8L\$L$C'L$L\$|Ak@A^AUALDHD$(H|$L\$D$L$HH8&L$L\$u A AHD$(Ht$@Hc@8H)H9t$A޳H|$(Ht$<@8>tA³A鹳tHt$(HD$v=@8ptA闳D$L龰AEL$v;l$AFAAIEnAF=D$+I AEL\$Ht$(H|$HcN8H)HH9v<@87t:H|$(HD$=@8xfAEL\$鯲A鞲AEL\$鍲fDAWAVAUAATUSHH(H$`H$pDL$DD$(HL$H|$ dH%(H$1AoZ DL$h, HHH H Hu$h $h $x HDŽ$HC H$HHD$0H t HVH$t HF H$;ERCPIlHcD$(|$McNdL|IHD$`IGHD$8AFH$ƉL$t$@ƃ@ ANt$\AvD$YAvD$$$HcHHH$L$%ppE= ] vO=@=P =0 H$dH3%(b H([]A\A]A^A_Å =uDŽ$ DŽ$$ N $@Ld$0L$Ht$pHLLs!IH MMDL|$0WHNHL$0;ERCPIHD$01DŽ$\$tD$ H$HD$PHHAF Ãf\$ZA^\$ u$ f|$ZuH\$0Ht CD$DHD$H\$l\$@t*AVH؉\$@H\$PT$hD$lD$MH$M%D$,fDD\$,EjDT$ MEH$DL$MHEI9r9nfDHc$HH)HI9w$ A8<$IL9v7$tE1HK8L uH$IL9wD$ZDD$DE3M9:AE9u,@AE9IM9uf.D$ RH|$0HtGt LL)9G(w|L$@*LL)H=1LH9D$8t$hI9v6HpHt$89HD$8t$@HP9HI9usII9$uiHc$HH)HI9w$ A84$ID$I9vAL$tuHI9uMHHK8AL SH$HD$8@L$HLHjjAFP$Pt$HD$LD$HL$XH$訧H0m|$YbT$ t($H$I9WD$Ml$M9A} M9A} AF $v$D\$,IEDMf|$ZH$HD$`HI9vw|$M9r$d@L9IM9BH$$uHc$HHI9r͉$ HcA8LuDMM9AD$LFRLAMZ=M9tÅPH !AIAAHcBD)H !Hc QH!!D9m1[ÐCIB:D,D)D1!@D >LAHE:HCC8uAA)Eظ[fH !?L! [A#Hɍ[MTMf.IAP? M9uMTfDH9!?DHz!C [B#ISMLcMN$L%!BD$BDD$ AE )HHLI+b8@@|$(AA|$4~|$8L\$HHMLLT$HA4D$@LPUt$(LL$ L$PHT$(H LT$@L\$Ht=uOD$4AAGfIAfDIFM;wAM݅H9D$/D$Ld$LDl$0XALHHuIDAWLLjjLL$ gH :KL=@Lt =EfHŀ}TtII$ @$Ld$LDl$0XALHHuIDAWLLjjLL$ H Lt =EfHEL $MFT$At TIGMsYAW9EoMIMDd$LL)EDEGLAcH9~MNAACXISHIO8vEoMI,fDMM9D7EDd$IvDEt ASA @X3A Ak|DM;6EI~Dt$DEt A`UISPDNMDl$LL)ETHNIFAA8_zEoII/f$CMM9VAs(5gIcS,I)HM9'A[@A8ACAA8F@H!HMLpm$LP$Pt$(HT$(LL$ L$PH DD$8IGD$HD$PS\$X\$@=$1ۃ|$@LxE1҉\$(X@D$4@D9T$8] D$PDh(omH ,HcH>@AGD$PfDIGDT$80LxV@t$Xt$@#D$HE|$@jMD$XT$4<HHcH>fA_D$@MWD$Hfۉ\$8@MzA*$MCHA(ʼnD$PD$"~[III9 bAIFA:,I)"fDM9/IAFA:,B29};\$8)BD$HJuDl$EBt$89EmMM9xxAA:,'m)I\LDL9]A:,#aHH9ul$@]JMI91$hHMLHUjt$(LL$ L$PHT$( H HL9sfDAGMWD$@fD$81A31ۉD$HXMM9@MM9(As(VEM9sDD$IK,LLL\$8RL\$8MIcC,I)M91MM9JAL$MFЅt  QH5!H=G!L-!H!GDA|M9.DT$5 GDA|.HcIM9.AEt=vHE!?H-!D$ C dB#DLEt!M`E1fA,$I? D9u`Ec\IE>I9$M;As(pXI9DD$IK,LL\$8L\$8?AGEoIH$GM;g0ADD$I~Et =P=X, w2fEH<H+MWt$HD$@ED$8H!HHILDŽ$H$AGL\$8$ICH$IH)H)H$$HT$$\$0H)‰$AGf$AGf$$A$IH$хL\$8EoIH!HMLpk$LP$Pt$(HT$(LL$ L$PH DIoHBfH€:TtHHrML$XSjt$(LL$ L$PHT$(L\$XfH }III9dAINHƒHATIιD)1M9IAFHƒHATzB19~D9D$8MMEӅT$DT$D$ E D)D\$HMLD$(LPjt$(LL$ L$PHT$(%H D\$B3A9M;(IAFHƒHArDAGD$HD$PfD$8IGA_f9\$0,ISHcH ,l )EoAF?AK%=AM>EoD$HAGfAEffиEID$@?fDE/$Dd$0L|$8MݍXH\$HIwMDULjSLL$ HT$(H 9t =tAGfIADD$AL|$HMEEAEM5MH-AA9;M9$<A?MGvEtH d!?H5!D C IB#t$8D9XMLM9(0L$(HAHD9t2I90UvH\!?tfDDT$HE$IHl$MݍXHMLLSjULL$ L$PHT$(9H IT$M9DL$EI믋D$8D9/WMLM9F/Lt$8H=!AL|$@H5!L\$PH!D|$(D\$4SfDADGD9D9BMcALE9/I9.DEADAvH !?HR! [D#IAtH]E1H?A D9uAPAGfIA?TtAID$0E/yAVIFufHtI9vI0TICP0+$AA8Gƒ8=EoMIQB< 8u fufDL-!QAGA9DMЃAMƃD\$HMLD$(LPjt$(LL$ L$PHT$(H {D\$D9kM;UAMFЁwH )!?H5o!< #DOgK|LDHF? H9uOtN'MM9'8 t,=t=fDD9tM9P'AMF=IM=tv=/ t ,=_ t=0tJMM9&! 'D9M9&AI^Iމ=I=tv-( vIII9UAIKPID)#M9AIB2A9}YMM9.&Ax#IKPtMDA<V<IM9rA9%III9TAIKPID)AIB2A9|M9uMAH9t$fDMM9-MƃwICP\D90M9XAMFЁvH !?H5\!< #otI|.LHF? H9uMt(nMM9>HL9uA9AM݅L9t$AExjIII9ZRAIKPID)AuIgB2A9:M9uMM9QAx"IKPt$@A<A9IM9rA9 MM9ugAIv=ZO xPQ@ 0@D9{PL9@YIMIcI)M9Iƻ3MM9| [D9/M9WAMF=EM=#& v==uMM9! D9M9AMF=EM=v-( wfDDL$DE~QIII9GCIFA:.BI)fDM9IA:nB29};\$8n#DD$HEXU|$-$D$89NMM9s[A:.iN)I\LfL9g?@:(wBHH9uL$@+MI9}$hHMLHUjt$(LL$ L$PHT$(lH BHL9s2fISHE~UIII9$DAIN:IιD)M9IAF:B1A9}D;d$PDD$hEYt$PA9(LMM9XVA: LD)IlLL9:: :HH9u|$XMI9:$IHl$XHLMLSIjULL$ L$PHT$( H M9sf.MM9LMMALM'LA99I9?0LhvH X!?L!D C IC#4LEItNDLfHB? L9uKD zDMM9`*LL|$XMALD\$PMM,DAA9L9I9NLhсvH5!?L !D$C dC#EL$E!NdLHF? L9uKD sIXLxE1һ|$@LxD$Hډ\$(X@D$4E^H GHcH>Mt$I΃A9 7M9eINAt܀vH=p!?tŃHcLtMl$Dd$4Dl$(S@IމH5L!H !H!QD9D9 A9q:M9AI^ЅtvH !?H5 !DC @B#EpEcE1HDHF? D9uNt3:Ml$LDd$4Dl$(YH؉L\!H5!A  VH!TD9D9A9B:I9HXхtvH5!?L!D4C vC#LEv`ND0HHF? L9uJD32Ml$LDd$4Dl$(]HAHk!H5!AH ~!FAD4VH!TD9$D9A9S9I9;HXхtvH5!?L!D4C vC#LEvTND0H@HF? L9uJD3*Ml$Dd$(ZIމH5|!H !H7!QTB< D92A97M9.AI^ЅtvH !?H5.!DC @B#EhEXE1HfHF? D9uNt+2|$@/D$X|$><HHcH>D9T$8@SMM9U1|$@L@2 9HcAHD9T$8L9=<=j=v-( D9T$8RMM9gU1|$@L@K :=t 1=9HcAHD9T$8L9n=;=q:v=/ d:{=_ t1=0D9T$8QMM9TLAЁ1 '- t+As|JBvt( JMcLAD9T$8JL9rHID$8HD)L)9AIL$H/H݋$MIHl$XHMLLSjULL$ L$PHT$(EH IT$M9 AD$AfDICPCHcAHD9T$8.L9 AЁvH a!?4H! v#Ht HsE1H? D9u{ffDD9T$8OMLM9r4ICPHcAHD9T$8nL9ЁvH !?4H! v#Ht HsE1H? D9ukD9T$89OMLM9r:?ICPHcAHD9T$8L9?ЁvH !?4H#! v#Ht HsE1H? D9u{ffDD$8=KD9fNMLMc,M9QAs(%8IcS,LH)HH9wA[@8]CHELL9KUt'5@5HL9uAB9D$8AH9\${sACxbxf.D9T$8MMLM9r4@ICP#HcAHD9T$8L9xЁvH A!?4H! v#Ht HsE1H? D9ukD9T$8LMLM9r:ICPcHcAHD9T$8NL9ЁvH !?4Hþ! v#Ht HsE1H? D9u{ffDD9T$8LMLM9r4'ICPHcAHD9T$8L9ЁvH !?4H! v#Ht HsE1H? D9ukD$8=HIAD$<fHAEx-Lt$8L|$@L\$PMAL9t$_<bHHcH>MIcI)M98III9-LPD)A9L9`HP w vҀthMM9`OMI[,AIcS,I)M9wAs@A8u08IDD)A9DMM9TDAs(tE1HLLDT$hL\$`KL\$`DT$htػIII9.IKPAIFI)IAFB2A9[M9uIII99IKPAIFHI)IAF)B2A9M9u_III98IKPAIFI)IAFʺB2A9M9uIII9-IKPAIFI)IAFkB2A9>M9udIII97IKPAIF+I)IAF B2A9M9uBIII9*LPD)A9L9HP rۀ u饹III9*LPD)A9|uL9QHP t߀tڀ ^III9A*L L9HP *! PD)A9}IƻMM9KAIV< w0< 1&< ϸD9D9T$8:III9i3APv =:D$8D)ItLHH9tL913JvtHt$8D9A:III92AP:=:D)ItLL92JvtHH9uD9T$89III92Aƒ t< 9D$8D)ItLHH91L9F2у t݀ t|$8D9Z9III9DAƒ 59< -9D)ItLL9t~у  HH9uD9T$88MLM9s<  tAS|udPv=uUHAD9T$8tFL9rAH9\$s3t/ACx~"鏼ID$8HD)L)9wID$H $IMݍXM9HLMLSIjt$(LL$ L$PHT$(蔳H tiD9T$87MM9CD$8LMc,D)Ml7IcS,I)L9wAs@@8331HL9IMI9As(tE1LLHL\$8?L\$8t t$8D9V7III9BIKPA17D)ItLL9~HH9u|$8D96III9BIKPA6D)ItLL9KHH9u=t$8D96III9'BIKPAa6D)ItLL9HH9u|$8D96III9.IKPA5D)ItLL9.{HH9umt$8D95III9WAIKPA5D)ItLL9HH9u\$8D9N5MM9@ISPA,5LD)IL HH9L9u^IHtrAWff Y\$89 guHA[0MK8~t$Mft [H{MyFH|IÃ\$@H^D$85/D$8(L$LىLL\$8L\$8AM݅M;EjI除EjI錤MMMHLT$8Dd$@EuË$MݍXHMLHSjt$(LL$ L$PHT$(肣H XHUL9IE H鹞As I{Lc‹\$0)Hc4B4LI+9BtrOt$0MISHAO4 @84:oAwf9t$0~IKHcD EeUEc0IK8EBf9-Ic[4HE1f9AHE9uA9sfA9H_L9> AD9T$8%HLt$hL|$pL\$PDL$XE5$MݍXHMLHSjt$(LL$ L$PHT$(YH /L9$EHU4HAH9\$ACxfHAH9\$ACx}默DDD$LLHDT$hL\$`KL\$`DT$hM陼IƻxIƻkDL$ED9HIL9$AHƒHAAB)ItL#H9HуHA s HH9uHI9%$XHMLHSjt$(LL$ L$PHT$(H HL9sڐLH!?H! RD#HAt%IW1fH?A 9uHcٛ;\$8M9 L$MD$(DAHLT$ 譣LT$ McM;\$8trM9L A:v|$(tH!?H"! R#$XHMLLSjt$(LL$ L$PHT$(訇H ~t$ 9t$8nM;XAIv=zH K!H!BH!D;D$4;D$( D$ IM$XHMLLSjt$(LL$ L$PHT$(H t$ 9t$8M;AIv=GH !|$4HĄ!BHA!TH!9<;D$(BD$ IC$XHMLLSjt$(LL$ L$PHT$($H t$ 9t$8M;AIv=H ǃ!H!BH~!TB< ;D$(|D$ ID$XHMLLSjt$(LL$ L$PHT$(^H 4t$ 9t$8$M;AIV<V|$(D$ I덋$XHMLLSjt$(LL$ L$PHT$(H t$ 9t$8M;=AIv=H !H!BH;!;D$4;D$(CD$ INH!?4HY! v#HɍvIl6LHB? H9uML1H !?H=!DC @B#4EtH1H? 9u`DA H9\$HcM|$@HD$ 9|$|UfD$Ld$ D$9D$@t6L$LLuAtM9w L9d$]M9$HcXHMLLSjt$(LL$ L$PHT$(H I)M9s鰄LHLAH9\$L郆L$H W!?H=!DC @B#AhEwE1HHW? D9uHt.PACA8CծACAA8EACA8CMA L9T$AExFML9t$, D$0MAHD$IL±LL9> A9IސM9seIID$Ll$PMHD$X AELL$`f9D$8WM9s.Ll$PH|$XL\$HIuT$@LL$`YT$@L\$Ht9Mck4ID$HD$@Od,)AD$T$Hf9D$8M9H|$@LL\$PT$HL\$PtmML锫IhMxIH9suHHBH\$PHHD$X/HL$8f9D$0~IsHDEOH9s0H\$PH|$XL\$HHsHT$@HL$8PHT$@L\$HtAE9IcK4HBHD$8H\ 9CHL$@f9D$0~ISH<AHE9vH|$8HL\$HHL$@єL\$HtQtACA8EۼH髹$D$(X|$H-pH-8pHMLLD$0Pjt$(LL$ L$PHT$(~H t$ 9t$8II96 ~t$XINA@@HctH>M9v A> uID$ HMLLD$0Pjt$(LL$ L$PHT$(>~H t$ 9t$8II9  AIV=|$XO=H5NoHc H>D$ IHMLLD$0Pjt$(LL$ L$PHT$(}H tt$ 9t$8dII9AI^Dt$Et = L 4{!Lz{!H=z!LA{!AACDA<u3~ƒAACDA<HcHH9 t$PDd$‰Et=vH z!?4Hz! v#ItHsE1H? D9uAL$a< I~< v<=~D$ IH< r< $~L\$8dMDT$@qJACA8CZ7H锴D9qIII9$LHBL9qRtIuHL9uAB9D$8ɰ7AD9T$8L9 HLAu(IcM,H)HI9wA}@A8> @wINAwMMAwL9d$ȢwMB}a$MMEAԍXAAWL$MHLAUSATt$(LL$@L$PHT$(YuH /wL$I靹Lx|$@MD$8$ME)hHMLLUjt$(LL$ L$PHT$(tH vC49D$PvM;IAFIUH:tvӉL9t$MAM9„˟^vLA{pKvA{tIcIH9D$"vL魮Au(IIcM,H)HI9wA}@A8>@uAI=Hq!?H5q!< k#wt$MD6LHW? L9uMt6t$XVHcTH>I= wh HuI=:uwZ 'uI=wZ vA==t-( t-( t tt=/ d=_ S=0HtI=t tt `tI=RtIUP=tI=IUPtIփ w2 sA}|s- s=ts-( vs=s=Zs=/ s/- 6sI=qsIUP\sLZL'$Hcl$pLl$ MݍXHHt$ L裆u^Lt$8AARMLLSjt$(LL$ L$PHT$(qH rD9d$PrIHt$8HD$H)I9v|$pyHD$H)I9hH$`HLMIhH cn!?H=n!DAkB#AxEML>IIAP? M9uHt>LHbH5m!?H=An!DAkB#AxEt%ML>IIAp? M9uHT:I=M1L鬻H m!?HHTM鐘IV鬸H \m!?H5m!<k#wHHW? ЅuH\3E1IM,L聅@6AD;T$8H钩H< OH9A~ INH l!?H=l!DAkB#AxEYML>IIAP? M9uHt>/PIrMLSjt$(LL$@L$PHT$(vnH LpE_I鶲H4$MMHt$ AuHMHH HL$ IIAP? M9uHt>bH j!?H=k!DAkB#AxEIIAP? ЅuHt><nA}|PnH ij!?H=j!DAkB#AxEML>IIAP? M9uLt>wM1kL|$p{t1AEAA8F@HE1DmMAWHLSMATt$(LL$@L$PHT$(kH mIL$HuMLPSjt$(LL$@L$PHT$(kH vmML$=IUPHmMLdL;t$AL9t$„mt'1AEAA8F@HMM9I IvI}AhL9t$]LAExAsML sMMIoMM f.AWAVAUATUSHDHH$ L$8HD$(dH %(H$1ɁoZ|$HIH~D$(HE ˆT$S^$(S{EHDŽ$HDŽ$LK H$ H$(CHDŽ$$$HD$HtMHt LVLT$t LVL$t LV(L$t LVL$M;ERCPIaAOE_ L$xD$DŽ$hHL$8HDŽ$H‰HDH$pHc\$8$\L%D$H$D$d$T$XD$LD$PD $`DA$dEI@H$@D%$==D$H$dH3 %(D$H[]A\A]A^A_Lt$H$HDD$H$HLL$L|IH@MPxID@DD$LL$Hl$?LN M#L 4e!EƉ$lD%ppE= f =@ =P =0H H$f$0t AG  IcHD$pIlD$t A AGVUUUlj$($(H|$0A)DRfDD)9DDHd!LL$@IcD\$_!H$|$SHD$ D$H$(D$Ht$(L)Ht$8p@=t,D$D$Sr=tuDT$H]E~DL$EtA$H$Hc$H)HH9w$08MfDDD$@EnI9e{ u I9H$HHHD$HHH9DHFH9w$18C$18CDŽ$$|$`H$DŽ$lDŽ$lH9EA9uDED9HH9uEGAfA/AD$lHD$xH9DD$dIL$,HtD$T~H$xHD$pHH9:D$H9%$H9EHEH9v/Ut HH9uHHŀ} $H91} HDt$8LDD$fG fAE1Ht$hdH34%(Hp[]A\A]A^fD?ERCPH^tLt$0HHLimHHHIEpHtCtC(G%zIEDu@GIE1cfGAE1RGAE1BG G&HtC1ۨtH]HI]1G G1Ht DH9U!IE1fDGAE1fGH1I}fDG ЃAE1u@G fAE1[f.GAE1B+'kAWAVAUI1ATUSHH8dH%(HD$(1HL$kŅu&D$HL$1HkŅt+HT$(dH3%(H8[]A\A]A^A_fDHL$ 1H|kŅuD$L|$ Dt$D$ D9}2Fd5\$ LAAHcLHs-kt)~Al$D9|νhDd$EfD+CDjf.AWAVAUATUH1SHHHHT$HL$HL$,dH%(HD$81jAąu'D$,HL$(1HjAąt/H|$8dH3<%(D?HH[]A\A]A^A_fHL$0 1HHH[]DѐH11dHHu빸dfHM!AV@AUATUSHHtnIeI1@I$THH=u4e1I%DcHHHt$IEDXuI$[H]A\A]A^L1HHDžHLAHDž8H)@H1IEIEB tDHAIEBt!D HAIEBfy#DHAIEB@t#DHAIEBt#DHAIEBtD HAIEHHxL ?t D@HAIExt!D`HAIEBt!DHAIEBtDHAH__SE1L%>>A_tmLaHEB5@IIIEBpDf I DSESESEڨtSIDEtVA~MDH I!L J!? [E# At%LW1AI?A 9utTA ~(AtO|IA( AwDHIG!E1ɸB <@>ÐHt0G9~ 11fWf=O‰fWøÐAW1AVAUATAUSH(AHt$D$T$<_#H_CfH TtHE!HcHABfIA:TtIAIArINMFHDAD$AfIA<$T)rf.IV`HH=uI@D$fDIV`HH=uhIV`HH=u6fD1@ HIV4Hu܉с @s@1@ ʈHIV Huځ ʈS@IVTHH`uD@IVTHH`ucAjIIIrEt1fHH uAB!HH3.AB"AR#I&ArINMFHLT$dLT$IBEARI€HfFAx0fFHMt:AoAoaaIQ HQ AQ(Q(AʉAQʉQAQ(ʉQ(HDf.DV HDEAASLH5n6!? 9~)HpAPӃ(Hu5H)ʅASEDEA~]A`)[@?t4HH8uH)ƍPAHREfHAA>t_HjAtGACuw<%DAt/Auw0uĉ[)D uf[)fDH%@HWIHc HV!fDOLDIDAAMcA) AUATUS@r*LK4!H4!GAEMcBCL4!M@eIc4L>fHVTHV!KAX8Z@ƃ@8uhH b[]A\A]AXL3!rA94f.E@Ap@@AAD ƃ@8u[]A\A]DuAdDHAOA9Y@DHZAHSف~A9 9wH 2!?H3!,1LmD#DeAt1HӐHs?A 9uJT"`HVH5Y2!?H-2!D$C dB#\El$EQE1HՐHu? D9uJT*)H1!?,2H5;2!LmD#DeA1HDHV?A 9uJ\#ЃÃ1HHLKKKKKKKKKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM~MMMMLMMMMMMMMMMMMMMMMiLPOOOOOPPPPPPPP|PDRDROOOOOOOOOOORRROOOOOOOOQOOOOOOOOOOOOOOOOOOOOOOOOOQOOOOOOOOOOOOPP PO,QOPPPPOOOOOPPPPOOOOOOOORRRRRRRRRRRQQQQQRQQQQQRRRSSRRSSHSHSRSRSHSQQRRQQQQRQRQQxSxSRRxSxSSSRxSRxSSQQQQQQQQSSRQQQQQQQ$V$VpVpVpV$V$VpVpVpVpV VpV$VpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVPVpVpVpVpVPVPVPVPV[^aaa>a``|^|^|^|^|^|^``~`~`|^|^|^|^|^|^`_A_bbbvbfbEb^^^^^^8baba^^^^^^HaHaLd#dccdrd]]]]]]ddccuhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhqhvhvhvouPnuhvhvHuhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvuhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhv(tsxrPrhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvqu$$t$d$$$$$$T$D$4$$$$$$$$$$$ǡ(ˈՠ¢eWC ׬v N}$ף ߣ no error\ at end of pattern\c at end of patternunrecognized character follows \numbers out of order in {} quantifiernumber too big in {} quantifiermissing terminating ] for character classinvalid escape sequence in character classrange out of order in character classnothing to repeatoperand of unlimited repeat could match the empty stringinternal error: unexpected repeatunrecognized character after (? or (?-POSIX named classes are supported only within a classmissing )reference to non-existent subpatternerroffset passed as NULLunknown option bit(s) setmissing ) after commentparentheses nested too deeplyregular expression is too largefailed to get memoryunmatched parenthesesinternal error: code overflowunrecognized character after (?<lookbehind assertion is not fixed lengthmalformed number or name after (?(conditional group contains more than two branchesassertion expected after (?((?R or (?[+-]digits must be followed by )unknown POSIX class namePOSIX collating elements are not supportedthis version of PCRE is not compiled with PCRE_UTF8 supportspare errorcharacter value in \x{...} sequence is too largeinvalid condition (?(0)\C not allowed in lookbehind assertionPCRE does not support \L, \l, \N, \U, or \unumber after (?C is > 255closing ) for (?C expectedrecursive call could loop indefinitelyunrecognized character after (?Psyntax error in subpattern name (missing terminator)two named subpatterns have the same nameinvalid UTF-8 stringsupport for \P, \p, and \X has not been compiledmalformed \P or \p sequenceunknown property name after \P or \psubpattern name is too long (maximum 32 characters)too many named subpatterns (maximum 10000)repeated subpattern is too longoctal value is greater than \377 (not in UTF-8 mode)internal error: overran compiling workspaceinternal error: previously-checked referenced subpattern not foundDEFINE group contains more than one branchrepeating a DEFINE group is not allowedinconsistent NEWLINE options\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain numbera numbered reference must not be zero(*VERB) with an argument is not supported(*VERB) not recognizednumber is too bigsubpattern name expecteddigit expected after (?+] is an invalid data character in JavaScript compatibility modedifferent names for subpatterns of the same number are not allowed@`  @ alphalowerupperalnumasciiblankcntrldigitgraphprintpunctspacewordxdigitpnooklmACCEPTCOMMITFFAILPRUNESKIPTHEN:;<=>?@[\]^_` Q\E{0,DEFINEUTF8)CR)ANY)BSR_ANYCRLF)BSR_UNICODE)Error text not found (please report)ййDnnbVVJJz ++DDD MM}$O ~9''mm'm''mm'mAAWWAW  33 ((  ;;; RR&&& R& :::: www ||vv|vj]9!!^^vv|\||$||,t l,L&$4$$4&%l  <<<<<<)),**\*&&&&&&##L"***l*L+L+L+L+L+L+++!,!t3L3.33333333t,t,\0L.1&,DD/.d,+dd,+d333334('D) ((878785 4216M;:_:9==\<;:>P?P?=]>8>9CG FE(DLdKJDO~NMLOI>>gIHHHHVV2VtURUTnTnT>>DXWWOWT<^]l]]\4\[$[$[|>|>Z0ZYIYXUȇ ҉ 0ْsss(>(>_Ǡ3==VߛI(Ȣӛ== ʚ$4Lt$ԶdԵ\*+?{^.$|()[ttttttttD44tttttTTTTTTTTTTTTTTTdddddd$44444HxxxXXHCargument is not a compiled regular expressionunknown or incorrect option bit(s) setfailed to get memory M=%N+3<DMSUiBpsvC{  >   O%-4=PNXQnRSTD !E"#U FG $  V& )%3&;= @'L?PSV(\He)p*|WX+,@AI-YJ./  K0)10283A4HZQ[Z5`6g7n8s9{:;L<AnyArabicArmenianAvestanBalineseBamumBengaliBopomofoBrailleBugineseBuhidCCanadian_AboriginalCarianCcCfChamCherokeeCnCoCommonCopticCsCuneiformCypriotCyrillicDeseretDevanagariEgyptian_HieroglyphsEthiopicGeorgianGlagoliticGothicGreekGujaratiGurmukhiHanHangulHanunooHebrewHiraganaImperial_AramaicInheritedInscriptional_PahlaviInscriptional_ParthianJavaneseKaithiKannadaKatakanaKayah_LiKharoshthiKhmerLL&LaoLatinLepchaLimbuLinear_BLisuLlLmLoLtLuLycianLydianMMalayalamMcMeMeetei_MayekMnMongolianMyanmarNNdNew_Tai_LueNkoNlNoOghamOl_ChikiOld_ItalicOld_PersianOld_South_ArabianOld_TurkicOriyaOsmanyaPPcPdPePfPhags_PaPhoenicianPiPoPsRejangRunicSSamaritanSaurashtraScShavianSinhalaSkSmSoSundaneseSyloti_NagriSyriacTagalogTagbanwaTai_LeTai_ThamTai_VietTamilTeluguThaanaThaiTibetanTifinaghUgariticVaiYiZZlZpZs!!            !"#$%&$'()***++,-.----/01/01/012/0134567899:;<=>?@ABBCDBEFGHGIJKLMMMNOOPQ-RRRRRRRRRSSSSSSSSS SSSSSSSSSSSS RRRRR S S TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTVWVWSXVWYYZ[[[YYYYYX \]]]Y^Y__`aaaaaaaaaaaaaaaaaYaaaaaaaaabccc`dddddddddddddddddedddddddddfgghijkkklmnVWVWVWVWVWopopopopopopopqrs`tuvVWwVW`xxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~TT}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYSTTTTTTTTTTTYTYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYTTYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY                     YYYYYYYYY                    YYYYYYYYYYYY             Y   YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY   !!!!  !!!YYYY!! !!!!!!   YYYY"YYY##$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%YY%%%%%YYYYYYYYYYY&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&YYYY'''''''''''''''''&&&&&&&''YYYYYY(((((((((((YYY))********************************+++++++++++++++++++++++,,---YY../////////////////////////////////////////////////////0101111111Y10100111111110000001111111111YY12222222222YYYYYY2222222222YYYYYY33333334333333YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY5555677777777777777777777777777777777777777777777777565555565666665667777777YYYY88888888889999999::::::::::555555555:::::::::YYY;;<==============================<;;;;<<;;<YYY==>>>>>>>>>>YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY????????????????????????????????????@@@@@@@@AAAAAAAA@@AAYYYBBBBBCCCCCCCCCCYYY???DDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFGGYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYTTTTTTTTTTTTTTTTHTTTTTTTIIIITIIIIHYYYYYYYYYYYYY`````JRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRZZZZZ`````KLMRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRZTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTYYYYYYYYYYYYYYYYYYYYYYTTTNOPPPPPPPPQQQQQQQQPPPPPPYYQQQQQQYYPPPPPPPPQQQQQQQQPPPPPPPPQQQQQQQQPPPPPPYYQQQQQQYY`P`P`P`PYQYQYQYQPPPPPPPPQQQQQQQQRRSSSSTTUUVVWWYYPPPPPPPPXXXXXXXXPPPPPPPPXXXXXXXXPPPPPPPPXXXXXXXXPP`Y`Y``QQZZ[X\XXX`Y`Y``]]]][XXXPP``YY``QQ^^YXXXPP```s``QQ__wXXXYY`Y`Y````aa[XXYbbcd  YYYYYRYYRYRRRRRYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYTTTTTTTTTTTTTeeeeTeeeTTTTTTTTTTTTYYYYYYYYYYYYYYY f f gfffggfffg f fffff f h f ijff gffkfgIIIIg ggfffgggg  l mmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnoooooooYYYYYY                YYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYY ppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqq     Y Y YYYY Y Y YY Y Y Y YYY YY  YYY Y YYYYYrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr  YYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYsssssssssssssssssssssssssssssssssssssssssssssssYtttttttttttttttttttttttttttttttttttttttttttttttYuvwxyz{|}R~~opopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopopYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYSYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYY I  TTTTTTSSSSS I YYYTT SYYYYYYYYY  YYYYYYYY YYYYYYYYYYYYY    Y YYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~YY}~}~}~}~}~}~YYYYYYYYK}~}~}~}~}~}~}~}~}~}~}~}~YYYYYYYYYYYYYYYY SSSSSSSSS RS YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY-----YYYY  YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYTTTTTTTTTTTTTTTTYYYYYYTTTTTTTYYYYYYYYY  YYYYYYYYYY  SSSYYYYYYYYYYYY Y  YYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYY YYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY TYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYY YY HHTTT HHHHHHTTTTTTTT TTTTTTT TTTT YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffgggggggYggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggfYffYYfYYffYYffffYffffffffggggYgYgggggggYgggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffYffffYYffffffffYfffffffYggggggggggggggggggggggggggffYffffYfffffYfYYYfffffffYggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggffffffffffffffffffffffffffggggggggggggggggggggggggggggYYfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfffffffffffffffffffffffffgggggggggggggggggggggggggggggggfgYY YYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YY YYYYYYYYYYY Y YY YYY YYY YYYYYYYY YYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYY Y YY YYYYYYYYYY YY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTYYYYYYYYYYYYYYYYYY  !""#$%&'((()*+,-./0123456789:;<=>?@AABCDEFGHIJKLLAMAANOPQRSTUVWXYZ[\]F^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`abbbbbbbbcddefghijklmno"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""pqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr^^stuvwwxyz{|}~F^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr        !  ! !     !y! !! 9!! !!! ! ! ! O! ! ! !a! ! !! !! ! ! ! !!8! !!!! ! ! ~! +*! ]! (*!?*! =! E! G!*!*!*!.!2!3!6!5!1!/!-!)!)!+!*!)!&!!'!!%!   T   & % @ ?        ~ P        0    1111 77 ? ?? ???YY YY            + + ++ +5 55 5 5556 66 6 66   $ $$ $ $$/ // /88 888   9999 9 9999 && & & && ` ((((--22   33    %%% %% %%"" " """ 4'' ' '  ZZ Z Z ZZ= = == ==K K KK EE E EE H HHH   !!!! A JVdp~           ! A! ! !!!!   0! ! ! !!! ! ! ! !    ::<<<UUULLLL  NNN N! u00 0 0@@J JJ JJ D DD DII I IS S SSSS CC C C C&[[ [[VV V VV  #FB));;*** ( .,, PPPAAAGG WWWMMRRQQXT T TTT>>>O 8.02 2010-03-19h0p  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~>~~x;21035:H;\>A$BDE@JpKU$WpPYZx @0HP p 0| dpPh0`Ph@\``p zRx $/FJ w?:*3$"DH1L\3EBE A(C0 (A EBBG A (D EBBA `8`9BKE E(D0H8HPK 8F0A(B BBBK y 8A0A(B BBBE `$;BJG I(A0F8DP 8F0A(B BBBE  8C0A(B BBBC \d>,BEE H(D0A8G@ 8C0A(B BBBF d8F0A(B BBBx4?BBE E(G0C8D@ 8A0A(B BBBD K 8C0A(B BBBA 8F0A(B BBB<d@BEE D(H0 (A BBBA H8A8BEB E(D0D8Dp  8A0A(B BBBG H,FBEE E(A0A8G`x 8A0A(B BBBA H<Fr BEB E(D0A8Fp 8A0A(B BBBD HPBBB B(A0A8D 8A0A(B BBBD DRBHL E(D0J8p 0A(B BBBF St0T8WBBB B(A0A8GAALBIBBYr 8A0A(B BBBF  DpBFkA!EiA FBB B(A0A8G L"\"F"N"B#N#I#E#B#Q"""D"D#G#A#B#B#x" 8A0A(B BBBE |qpQBBB B(A0A8G L@LAt 8A0A(B BBBA 3 A[AHABAEAIA[AjA^AHABAEAIA[AAqAHABAEAIANAX#A^AHABAEAIAVAhxd FBB E(A0A8J 8A0A(B BBBA !HBHHDb(#uBpv J vBHE B(A0A8G0XADW 8A0A(B BBBF JFAW>LHBNLHBNXBD\qUBB\XHDWJBDWXHDWqUBD\mXHDWfRHDWhLBGWNBDWSKEASGTABWJBAWiNBDWJBDW$JFAWJBAWJFDWsJBDWNBDWCJBDWNBD] JBDWKBDW5KBDWJBDWOJBD\!JBD\}JBDWJBDWJBDWJBDWVJBDWJBDWNBDWtNBDWuNBDWz AME kNBDW{NBDWKBDWDKBDWJBDWpABDWLJBDWJBDWsKBDWJJBDWGEDW\ABDWd xjFBB B(A0A8M 8A0A(B BBBD LlBBVDL iFBB A(A0D 0A(A BBBG H &FGB G(A0A8Gp` 8A0A(B BBBG H FBB B(A0F8Gr 8A0A(B BBBJ , AG0 AA (P gEAD w CAK H| YFBE D(G0a (C BBBN A(A BBBH FEB B(A0D8H@ 8A0A(B BBBB Ƚ <(Ľ~FBB A(A0R (A BBBK HhSFED G(G0M (M CBBJ D(A ABB ,EAD`^ AAF <(MGB A(A0y (D BBBA 8<?E C U K O A F R ^ J ^ J 8xOE I k E O A M C F R Z F 0?xXBDB B(D0A8D` 8A0A(B BBBD  8F0A(B BBBA ]8F0A(B BBB`FHt^BLE E(D0C8GPj 8A0A(B BBBF HFBB D(A0Gf 0A(A BBBD   V,<yEHx H VAlP |HIBA A(dX(j  ABBI J  AEBF P(J(GNU`x"  x h"p"o(0  O p"ph ooooo" 0@P`p 0@GA$3a1GA$3a1xGA$3a1GA$3a1 GA$3p864TGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864`ѠGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864bGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864pGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864PxGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864sGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864ssGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864zGA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864 GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864 GA$3h864GA$3a1GA$3a1GA$3a1GA$3a1libpcre.so.0.0.1-8.02-9.1.el8.x86_64.debug_v7zXZִF!t/m]?Eh=ڊ2N CxWkV+ Lse+Fc}0\ҹLF"R~'/K'S%%N@R& /|wd@%j2NCqXFu^vYwl=zn !KU:c.)wWL?5ĠsiZ<}RtϱOʝX &?4XuU];fD(0 ^=T9Al@o6|Ue aCыl,IoIfzn6n:e.~8&gc0v(=}k_1`֧,QF(G``&K׏(R*o̫vެkVMC1: 8_Ԍ&9oEy+kEu~'x2K{e4?%MO><7\ `I=EBP1Ʃ od$\̹- I\ yK-Em#ig֨ǽ?BiWmPcpr󷃲S6Tf~ G~kEJjłD%OE܎'muZY@0\cJ!x_)CgFZk@7 ֡13(u1 JP4h]mJqKB AIt'1ڣ S 9ꨖP"tL "èty 7܅mڼ2kGL[c,yQbfcs~Fq{_A?4 >3,% gRb._1P4SB"+$fEoc?˩9ZQ΀5^*PMTYeoe^%D.cPCZ8 )(يX ,-*܊t6& Fv({ _ets!k")wboX`<ѝZ=(b奃n:ox ^-,x_PO+1sr{v{4I ifշ3],TR3s%[&q=dPhBX5l. 0} +781gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata $o((( `00 0 O8oEo`Thh^BphxxcnPPw}      h"hp"px"x"p"p#  # 0c ! "0@"'(usr/lib64/libpcrecpp.a000064400000226626152342605160010604 0ustar00! / 1575493209 0 0 0 5174 ` `̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶_ZN7pcrecpp3Arg10parse_nullEPKciPv_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev_ZN7pcrecpp2RE7CleanupEv_ZN7pcrecpp2RED2EvDW.ref.__gxx_personality_v0_ZN7pcrecpp2RED1Ev_ZNK7pcrecpp2RE8TryMatchERKNS_11StringPieceEiNS0_6AnchorEbPii_ZNK7pcrecpp2RE23NumberOfCapturingGroupsEv_ZNK7pcrecpp2RE11DoMatchImplERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEiS5_i_ZNK7pcrecpp2RE9FullMatchERKNS_11StringPieceERKNS_3ArgES6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6__ZN7pcrecpp2RE6no_argE_ZNK7pcrecpp2RE12PartialMatchERKNS_11StringPieceERKNS_3ArgES6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6__ZNK7pcrecpp2RE7ConsumeEPNS_11StringPieceERKNS_3ArgES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5__ZNK7pcrecpp2RE14FindAndConsumeEPNS_11StringPieceERKNS_3ArgES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5__ZNK7pcrecpp2RE7DoMatchERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEi_ZN7pcrecpp3Arg17parse_stringpieceEPKciPv_ZN7pcrecpp3Arg10parse_charEPKciPv_ZN7pcrecpp3Arg11parse_ucharEPKciPv_ZN7pcrecpp3Arg16parse_long_radixEPKciPvi_ZN7pcrecpp3Arg17parse_ulong_radixEPKciPvi_ZN7pcrecpp3Arg17parse_short_radixEPKciPvi_ZN7pcrecpp3Arg18parse_ushort_radixEPKciPvi_ZN7pcrecpp3Arg15parse_int_radixEPKciPvi_ZN7pcrecpp3Arg16parse_uint_radixEPKciPvi_ZN7pcrecpp3Arg20parse_longlong_radixEPKciPvi_ZN7pcrecpp3Arg21parse_ulonglong_radixEPKciPvi_ZN7pcrecpp3Arg12parse_doubleEPKciPv_ZN7pcrecpp3Arg11parse_floatEPKciPv_ZN7pcrecpp3Arg11parse_shortEPKciPv_ZN7pcrecpp3Arg15parse_short_hexEPKciPv_ZN7pcrecpp3Arg17parse_short_octalEPKciPv_ZN7pcrecpp3Arg18parse_short_cradixEPKciPv_ZN7pcrecpp3Arg12parse_ushortEPKciPv_ZN7pcrecpp3Arg16parse_ushort_hexEPKciPv_ZN7pcrecpp3Arg18parse_ushort_octalEPKciPv_ZN7pcrecpp3Arg19parse_ushort_cradixEPKciPv_ZN7pcrecpp3Arg9parse_intEPKciPv_ZN7pcrecpp3Arg13parse_int_hexEPKciPv_ZN7pcrecpp3Arg15parse_int_octalEPKciPv_ZN7pcrecpp3Arg16parse_int_cradixEPKciPv_ZN7pcrecpp3Arg10parse_uintEPKciPv_ZN7pcrecpp3Arg14parse_uint_hexEPKciPv_ZN7pcrecpp3Arg16parse_uint_octalEPKciPv_ZN7pcrecpp3Arg17parse_uint_cradixEPKciPv_ZN7pcrecpp3Arg10parse_longEPKciPv_ZN7pcrecpp3Arg14parse_long_hexEPKciPv_ZN7pcrecpp3Arg16parse_long_octalEPKciPv_ZN7pcrecpp3Arg17parse_long_cradixEPKciPv_ZN7pcrecpp3Arg11parse_ulongEPKciPv_ZN7pcrecpp3Arg15parse_ulong_hexEPKciPv_ZN7pcrecpp3Arg17parse_ulong_octalEPKciPv_ZN7pcrecpp3Arg18parse_ulong_cradixEPKciPv_ZN7pcrecpp3Arg14parse_longlongEPKciPv_ZN7pcrecpp3Arg18parse_longlong_hexEPKciPv_ZN7pcrecpp3Arg20parse_longlong_octalEPKciPv_ZN7pcrecpp3Arg21parse_longlong_cradixEPKciPv_ZN7pcrecpp3Arg15parse_ulonglongEPKciPv_ZN7pcrecpp3Arg19parse_ulonglong_hexEPKciPv_ZN7pcrecpp3Arg21parse_ulonglong_octalEPKciPv_ZN7pcrecpp3Arg22parse_ulonglong_cradixEPKciPv_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEmmPKcm_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm_ZN7pcrecpp3Arg12parse_stringEPKciPv_ZNK7pcrecpp2RE7RewriteEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11StringPieceESA_Pii_ZNK7pcrecpp2RE7ReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZNK7pcrecpp2RE7ExtractERKNS_11StringPieceES3_PNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZNK7pcrecpp2RE13GlobalReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZN7pcrecpp2RE9QuoteMetaB5cxx11ERKNS_11StringPieceE_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag_ZN7pcrecpp2RE7CompileENS0_6AnchorE_ZN7pcrecpp2RE4InitERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKNS_10RE_OptionsE_ZN7pcrecpp6no_argE_ZN7pcrecpp7ScannerC2Ev_ZN7pcrecpp7ScannerC1Ev_ZN7pcrecpp7ScannerC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZN7pcrecpp7ScannerC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZN7pcrecpp7ScannerD2Ev_ZN7pcrecpp7ScannerD1Ev_ZN7pcrecpp7Scanner11DisableSkipEv_ZNK7pcrecpp7Scanner10LineNumberEv_ZNK7pcrecpp7Scanner6OffsetEv_ZNK7pcrecpp7Scanner9LookingAtERKNS_2REE_ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT__ZN7pcrecpp7Scanner11GetCommentsEiiPSt6vectorINS_11StringPieceESaIS2_EE_ZN7pcrecpp7Scanner15GetNextCommentsEPSt6vectorINS_11StringPieceESaIS2_EE_ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT__ZN7pcrecpp7Scanner11ConsumeSkipEv_ZN7pcrecpp7Scanner17SetSkipExpressionEPKcDW.ref.__gxx_personality_v0_ZN7pcrecpp7Scanner4SkipEPKc_ZN7pcrecpp7Scanner10EnableSkipEv_ZN7pcrecpp7Scanner7ConsumeERKNS_2REERKNS_3ArgES6_S6__ZlsRSoRKN7pcrecpp11StringPieceEDW.ref.__gxx_personality_v0// 20 ` pcre_stringpiece.o/ pcrecpp.o/ 1575493209 1667 135 100644 47024 ` ELF>p@@ED !"#$%&'()*,-./013456:;=HDAUATIUHSH~>HuLcC,Ѓ0 wH ~)H[]A\A]@ߍHLwH LLHBD-H[]A\A]Df.HdH%(HD$1%ptHT$dH3%(u}HfDHt$D$ t0 t= t4t?uIPf f0f@sH wH5H=fAVHAAUIATUHcHSH@dH %(HL$81H|$YHDHHt$IH1H9\$t$HL$8dH3 %(u1H@[]A\A]A^DA $uMt IEĺ@AVHAUAATIUHcHSH@dH %(HL$81H|$8-t+HHHt$DIHH9\$t)1HL$8dH3 %(u>H@[]A\A]A^f.AuMtI$f@AVHAAUIATUHcHSH@dH %(HL$81H|$HDHHt$IH1H9\$t$HL$8dH3 %(u1H@[]A\A]A^DA $uMt IEĺ@AVHAUAATIUHcHSH@dH %(HL$81H|$98-t+HHHt$DIHH9\$t)1HL$8dH3 %(u>H@[]A\A]A^f.AuMtI$f@AUIATUHcHSHHdH%(H$1H\$HD,HHt$HI1H9\$t&H$dH3 %(u:H[]A\A]DA$uMtAEfD@HHxTH9v#HH9sHx&H7H~f.HxHHHPH=fDSHH0HtH{8HtH[@HH9t*Ht%H;HCH9tH߾ [fD[@f.SHHH{H9t[[@f.SH@LW8dH%(HD$81LDW0\$PMHcG AH$HD$HD$HD$HD$ HD$(~ H$HD$HcG$~ H $HD$(1ɋNL€EEDHH5HHDHSAQAZYxu 1H\$8dH3%(uH@[f.HH8dH%(HD$1Ht.1HL$u%D$HT$dH3%(u HøH H5H=fDAWAVICLIAUATUSHD$HLd$@9HM1PDAMIHZYt_AD$AtjMteL9B~UEI IlIIL9t3Ic|$IEA4$H)H;PuH1[]A\A]A^A_fDH[]A\A]A^A_H 7H5H=H 5H5H=@f.AWAVAUATUSHH$L$L$H$H$H$H$L$HD$H$ L$L$HD$H$(L$HD$dH%(H$1HH9eHT$0H9_HL$8I9YLD$@I9LL$HI9MLT$PI9OL\$XH9QH\$`H9sHl$hI9ELd$pI9gLl$xI9iL$I9hH$L$H9cH$H\$H9]H$H\$H9WH$H\$H9H$AAf.HL$,j3H$PLD$@ZYH$dH3%(HĘ[]A\A]A^A_fDE1AAAAuDAeDAUAJf.A5DA %DA DA DA DA DAAWAVAUATUSHH$L$L$H$H$H$H$L$HD$H$ L$L$HD$H$(L$HD$dH%(H$1HH9eHT$0H9_HL$8I9YLD$@I9LL$HI9MLT$PI9OL\$XH9QH\$`H9sHl$hI9ELd$pI9gLl$xI9iL$I9hH$L$H9cH$H\$H9]H$H\$H9WH$H\$H9H$AAf.HL$,j31H$PLD$@ZYH$dH3%(HĘ[]A\A]A^A_fE1AAAAuDAeDAUAJf.A5DA %DA DA DA DA DAAWAVAUATUSHHH$H$L$L$H$H$H$L$HD$H$ L$L$HD$H$(L$HD$dH%(H$1HH9rHT$0H9lHL$8I9fLD$@I9LL$HH9ZHt$PI9\LT$XI9^L\$`H9Hl$hI9RLd$pI9tLl$xI9vL$I9uH4$L$H9pH$Ht$H9jH$Ht$H9dH$Ht$H9H$AfDAfHL$,j3HH$PLD$@ZYt HcL$,H )KH$dH3%(HĘ[]A\A]A^A_@E1AAAuDAeDAUDAEA:f.A%DA DA DA DA DA DAAWAVAUATUSHHH$H$L$L$H$H$H$L$HD$H$ L$L$HD$H$(L$HD$dH%(H$1HH9rHT$0H9lHL$8I9fLD$@I9LL$HH9ZHt$PI9\LT$XI9^L\$`H9Hl$hI9RLd$pI9tLl$xI9vL$I9uH4$L$H9pH$Ht$H9jH$Ht$H9dH$Ht$H9H$AfDAfHL$,j31HH$PLD$@ZYt HcL$,H )KH$dH3%(HĘ[]A\A]A^A_E1AAAuDAeDAUDAEA:f.A%DA DA DA DA DA DAAWAVAUATUSHxdH%(HD$h1EC\IHIAI΃7SHD$PXZHT$hdH3%(uwHx[]A\A]A^A_fDHcDL$ HL$SLLPDL$IDLD$HLY^H [H5H=HtH:rÐf.1uHtDf.1uHtDf.u1D;f.u1Df.SHdH%(HD$1u1H\$dH3%(u6H[HHtH$HHwHtffDSHdH%(HD$1u1H\$dH3%(u/H[HH tH$HwHtfff.SHdH%(HD$1u1H\$dH3%(u7H[HHtH $HH9wHt @SHdH%(HD$1u1H\$dH3%(u/H[HH-tH$H9wHtʼnff.u1Df.u1D;f.t~1DfSHdH%(HD$1t~1HL$dH3 %(u,H[HHtHtfZ$ bfRfBf15@ ffrf1e@ fff1@ fff1@u1D ffDu1DFfDu1D&fDu1D1 u1D fDu1DvfDu1DVfDu1D19u1D fDu1DfDu1DfDu1D1yu1D fDu1DfDu1DfDu1D1Ht'HHHRHLcH1Hff.AWAVAUATMUHSHHDL$LcJHL$N4 I9w5x@SBЃ w|;D$rHIc4HI9vEL{<\tH]HUHMLkH9HMI9w|HELmDLI9wH[]A\A]A^A_Ã\LmHUHMM}H9HMI9B*\HUHL}BD*WD1A1HHD$HUD$]fATHD$)H0HH+EHcH9wlHfD fD1A1LHHUIf.,fDH1[]A\A]A^A_H=fAW1AAVAUIATU1SHH(Ht$L|$@Lt$HMLdH%(H$ 1HHD$HB1҉D$ j3ZYu0H$dH3 %(H([]A\A]A^A_DLd$ AMLIT$LLD$0HT$ HHD$(HT$HST$HT$ńt@D$@xYT$DxpH{)HcLD$(HcHL$ HH)H9HGH9wgHH|$ IL92(H VH5H=H WH5H=HHH=1H5H@f.AVAI1AUIATUH1SHHHdH%(H$1IHj3MAX1ZEt"IMHLIFLHH$dH3%(uH[]A\A]A^f.UHAWAVAUATSHXHHdH%(HE1HƅHHHHBHDžgHI1HE1HDžHHLLj3HDLE1^A_DdDDA9 E9THDHc)HOHcHH)H9HGHH9HHHLELHHHHHHCHKE9D9hLMEDHL1Lj3HLAZAYHHHH9tHMdH3 %(nHe[A\A]A^A_]IMA\$9McI9HH0B<. <AG)uCD9I"A(=00HHHA\$tx9}tHcH9SHH6I%=HHcI&H9<H9LD99HH06fHMcH0HD)L)HcH9HGI9 HLHH@9OHLfHcH9a< A(DLA9ffHH8HHHLHHH9LH9HHHHFHHLHHHL@~HHHH89oHcHH)H9H4HHH8HH:;A(=@'HA(HI=PfDH9tYHfoHHBH2JH,HHHoVH))Mt,foHtRHHofF)HHHH@@UDžFH@L@2HH=1H5H H5H=LH 1+H5H=fDH H5H=HH5H=1LH5H=1HAWHGAVAUATUSHHHHD$GFHGI1E1dfDDHMu߃A<vAD$< vEx A_H9T$HCI9wxF$*HLsB0HA9o~FLkID$(EuHL)H H5HHA9oHH[]A\A]A^A_fDA11LHHkYfDH9T$HCI9wlB*\HLsB0ILcD4(HMl$H9D$t`HSI9wF4 HLkBD  A11LHHfDA11LHHwfUH=H@f.AUATUSHHHo(dH%(HD$81tGH?HL$HT$E1HHHL$8dH3 %(HHH[]A\A]fLd$HHrID$LHD$HSH3LHH+D$HH5LH|$HL$E1HT$H|$IHL9GHBfDHH9C@+ Ll$HIH@I$Mt LITLLLc@H=HH@f.AWAVAUATIUSHHdH%(HD$1H9t7L/LIHnM9HwH9HHkAD-MI$HC AD$C(HHC01HHC@HC8HC8HtHHC0HD$dH3%(H[]A\A]A^A_ÐI6HtLHL+^@HH,$H;II9tH$L+HCH*fDHHC C(,fDAEL+ GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA$3h864 GA$3h864 GA* GA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA!HHGH9tHpcrecpp.ccbasic_string::_M_createpcre_retval == 0(1 + n) * 3 <= vecsizematches >= 0n >= 0basic_string::appendvec[0] >= 0vec[1] >= 0basic_string::replace__pos <= size()matchstart >= startmatchend >= matchstart\0(?:)\zNULL == "Unexpected return value from pcre_config(NEWLINE)"%s: __pos (which is %zu) > this->size() (which is %zu)/usr/include/c++/8/bits/basic_string.h%s:%d: %s: Assertion '%s' failed.  e ;WK GA* GA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA!AWAVMAUATLgUHSHH8HwdH%(HD$(1HDIHD$I)LH)HHD$ L;'HwH|$ HL$HLHL$It,HLHHHL$LD$HL$LD$Ht(Mt#I::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference = char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]int pcrecpp::NewlineMode(int)int pcrecpp::RE::GlobalReplace(const pcrecpp::StringPiece&, std::__cxx11::string*) constbool pcrecpp::RE::Replace(const pcrecpp::StringPiece&, std::__cxx11::string*) constGCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx  0!HDBBD D(F0{ (A ABBE r(A ABBD m G @BHE A(G0Fp] 0A(A BBBF @BEE D(G0Fp` 0A(A BBBK @4BHE A(G0Fp] 0A(A BBBF @xBEE D(G0Fp` 0A(A BBBK 8BJA G(Jf (A ABBF i]bEP K AzPLRx  $"EV E A,tEDPXB`IXAPn AA zH F A l"FBJ B(A0A8D@UHHPXHA@m 8C0A(B BBBG D 8F0A(B BBBA \0FBB B(A0A8GNKA^ 8A0A(B BBBG \FBB B(A0A8GKKA^ 8A0A(B BBBJ \FBB B(A0A8JQKAm 8A0A(B BBBE \PFBB B(A0A8JNKAm 8A0A(B BBBH hFBB B(A0A8DpFHAV 8A0A(B BBBG VGcA0&D&Xl jED j AD cED j AD kED j AD cED j AD $8 LhED r AD p  $8L `t (<PdxHFBE B(E0D8Gp 8A0A(B BBBF (< EAK ~ AAG Hh PBB B(A0D8G` 8D0A(B BBBG  6M`d FBB B(D0D8DP 8F0A(B BBBA  8C0A(B BBBA \FJB E(A0C8JSmFAd 8A0A(B BBBF ,zPLRx 4P FME A(F0MZBLCA 0A(A BBBA < EC P.n..c A L.,zPLRx  4$L FFB B(A0A8GP 8D0A(B BBBG (zPLRx P00L FDD D0c  AABG <T FBA A(GpV (A ABBC $zPLRx p,0H |FBB B(D0A8GP 8A0A(B BBBB L rOb   |,-Ea~!/ T p9   0 > u ` i  91L99@y!g!!%%%a)))9T,9@Yo9`,$0,@l000X ,X0  5 5r5 5r9,1 6 ; @  E $J LO 5T YY `^ ud j @p v |  x      + 2    & :    #'+.237:<=>?@K  n "!   "!    + 9 J Q Y ` h u |    b    " !:   "  0K U  @z   "   C   x   & &= 0g P pj c Pk c< 0j P p h  . X 0  @ P ` p ( I o       3  ]   @ `  F p    @ `H p   "!@"%") 6 @b  Y  P'"0j `) +|)6.annobin_pcrecpp.cc.annobin_pcrecpp.cc_end.annobin_pcrecpp.cc.hot.annobin_pcrecpp.cc_end.hot.annobin_pcrecpp.cc.unlikely.annobin_pcrecpp.cc_end.unlikely.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev.start.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev.end_ZN7pcrecppL15TerminateNumberEPcPKci_ZN7pcrecppL11NewlineModeEi_ZZN7pcrecppL11NewlineModeEiE19__PRETTY_FUNCTION___ZN7pcrecpp3Arg16parse_long_radixEPKciPvi.part.14_ZN7pcrecpp3Arg17parse_ulong_radixEPKciPvi.part.15_ZN7pcrecpp3Arg20parse_longlong_radixEPKciPvi.part.16_ZN7pcrecpp3Arg21parse_ulonglong_radixEPKciPvi.part.17_ZN7pcrecpp3Arg12parse_doubleEPKciPv.part.18_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm.isra.37_ZN7pcrecppL12empty_stringE_ZZNK7pcrecpp2RE23NumberOfCapturingGroupsEvE19__PRETTY_FUNCTION___ZZNK7pcrecpp2RE11DoMatchImplERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEiS5_iE19__PRETTY_FUNCTION___ZZNK7pcrecpp2RE7DoMatchERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEiE19__PRETTY_FUNCTION__.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEmmPKcm.start.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEmmPKcm.end.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm.start.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm.end.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm.start.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm.end_ZZNK7pcrecpp2RE7ReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE19__PRETTY_FUNCTION___ZNK7pcrecpp2RE7ReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE.cold.44_ZZNK7pcrecpp2RE13GlobalReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE19__PRETTY_FUNCTION___ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEmE19__PRETTY_FUNCTION___ZNK7pcrecpp2RE13GlobalReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE.cold.45_ZN7pcrecpp2RE9QuoteMetaB5cxx11ERKNS_11StringPieceE.cold.46.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.start.annobin__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.end_ZN7pcrecpp2RE7CompileENS0_6AnchorE.cold.47_ZN7pcrecppL15default_optionsE.annobin__GLOBAL__sub_I__ZN7pcrecpp2RE6no_argE.start.annobin__GLOBAL__sub_I__ZN7pcrecpp2RE6no_argE.end_GLOBAL__sub_I__ZN7pcrecpp2RE6no_argE.LC0.LC1.LC2.LC3.LC4.LC6.LC5.LC7.LC9.LC10.LC11.LC13.LC12.LC18.LC15.LC16.LC17.LC19.LC21.LC24.LC25.LC8.LC23.text.hot.group.text.unlikely.group_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED5Ev.text.unlikely..group.text.startup.group.text.hot..group_ZN7pcrecpp3Arg10parse_nullEPKciPv_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev_GLOBAL_OFFSET_TABLE__ZdlPv_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Evisspacememcpypcre_config__stack_chk_fail__assert_fail__errno_locationstrtolstrtoulstrtoqstrtouq__memcpy_chkstrtod_Znwm_ZSt20__throw_length_errorPKc_ZN7pcrecpp2RE7CleanupEvpcre_free_ZdlPvm_ZN7pcrecpp2RED2EvDW.ref.__gxx_personality_v0_ZN7pcrecpp2RED1Ev_ZNK7pcrecpp2RE8TryMatchERKNS_11StringPieceEiNS0_6AnchorEbPiipcre_exec_ZNK7pcrecpp2RE23NumberOfCapturingGroupsEvpcre_fullinfo_ZNK7pcrecpp2RE11DoMatchImplERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEiS5_i_ZNK7pcrecpp2RE9FullMatchERKNS_11StringPieceERKNS_3ArgES6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6__ZNK7pcrecpp2RE12PartialMatchERKNS_11StringPieceERKNS_3ArgES6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6_S6__ZNK7pcrecpp2RE7ConsumeEPNS_11StringPieceERKNS_3ArgES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5__ZNK7pcrecpp2RE14FindAndConsumeEPNS_11StringPieceERKNS_3ArgES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5__ZNK7pcrecpp2RE7DoMatchERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEi_Znam_ZdaPv_ZN7pcrecpp3Arg17parse_stringpieceEPKciPv_ZN7pcrecpp3Arg10parse_charEPKciPv_ZN7pcrecpp3Arg11parse_ucharEPKciPv_ZN7pcrecpp3Arg16parse_long_radixEPKciPvi_ZN7pcrecpp3Arg17parse_ulong_radixEPKciPvi_ZN7pcrecpp3Arg17parse_short_radixEPKciPvi_ZN7pcrecpp3Arg18parse_ushort_radixEPKciPvi_ZN7pcrecpp3Arg15parse_int_radixEPKciPvi_ZN7pcrecpp3Arg16parse_uint_radixEPKciPvi_ZN7pcrecpp3Arg20parse_longlong_radixEPKciPvi_ZN7pcrecpp3Arg21parse_ulonglong_radixEPKciPvi_ZN7pcrecpp3Arg12parse_doubleEPKciPv_ZN7pcrecpp3Arg11parse_floatEPKciPv_ZN7pcrecpp3Arg11parse_shortEPKciPv_ZN7pcrecpp3Arg15parse_short_hexEPKciPv_ZN7pcrecpp3Arg17parse_short_octalEPKciPv_ZN7pcrecpp3Arg18parse_short_cradixEPKciPv_ZN7pcrecpp3Arg12parse_ushortEPKciPv_ZN7pcrecpp3Arg16parse_ushort_hexEPKciPv_ZN7pcrecpp3Arg18parse_ushort_octalEPKciPv_ZN7pcrecpp3Arg19parse_ushort_cradixEPKciPv_ZN7pcrecpp3Arg9parse_intEPKciPv_ZN7pcrecpp3Arg13parse_int_hexEPKciPv_ZN7pcrecpp3Arg15parse_int_octalEPKciPv_ZN7pcrecpp3Arg16parse_int_cradixEPKciPv_ZN7pcrecpp3Arg10parse_uintEPKciPv_ZN7pcrecpp3Arg14parse_uint_hexEPKciPv_ZN7pcrecpp3Arg16parse_uint_octalEPKciPv_ZN7pcrecpp3Arg17parse_uint_cradixEPKciPv_ZN7pcrecpp3Arg10parse_longEPKciPv_ZN7pcrecpp3Arg14parse_long_hexEPKciPv_ZN7pcrecpp3Arg16parse_long_octalEPKciPv_ZN7pcrecpp3Arg17parse_long_cradixEPKciPv_ZN7pcrecpp3Arg11parse_ulongEPKciPv_ZN7pcrecpp3Arg15parse_ulong_hexEPKciPv_ZN7pcrecpp3Arg17parse_ulong_octalEPKciPv_ZN7pcrecpp3Arg18parse_ulong_cradixEPKciPv_ZN7pcrecpp3Arg14parse_longlongEPKciPv_ZN7pcrecpp3Arg18parse_longlong_hexEPKciPv_ZN7pcrecpp3Arg20parse_longlong_octalEPKciPv_ZN7pcrecpp3Arg21parse_longlong_cradixEPKciPv_ZN7pcrecpp3Arg15parse_ulonglongEPKciPv_ZN7pcrecpp3Arg19parse_ulonglong_hexEPKciPv_ZN7pcrecpp3Arg21parse_ulonglong_octalEPKciPv_ZN7pcrecpp3Arg22parse_ulonglong_cradixEPKciPv_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEmmPKcm_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcmmemmove_ZN7pcrecpp3Arg12parse_stringEPKciPv_ZNK7pcrecpp2RE7RewriteEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11StringPieceESA_Pii_ZNK7pcrecpp2RE7ReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZSt24__throw_out_of_range_fmtPKcz_Unwind_Resume_ZNK7pcrecpp2RE7ExtractERKNS_11StringPieceES3_PNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZNK7pcrecpp2RE13GlobalReplaceERKNS_11StringPieceEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEprintfabort_ZN7pcrecpp2RE9QuoteMetaB5cxx11ERKNS_11StringPieceE_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag_ZSt19__throw_logic_errorPKc_ZN7pcrecpp2RE7CompileENS0_6AnchorEpcre_compilestrlen_ZN7pcrecpp2RE4InitERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKNS_10RE_OptionsE__dso_handle__cxa_atexit_ZN7pcrecpp6no_argE*x36P6y6yz[{b4n7u8z|}~({p}{+}G{}X{}{9v 61{n{47:| /47;|47<|   {~  {q{q{Yy4<7=|{{?{{{{ e>H_vi{p4|7?|47@|AB, Z  {h!!"}""v&$Y%&A&>&&4<&7&C&|&D&4\&E&F&&&4<&7'G '|'>'A#'-'>4'A;'@'{"(H*(a(()=)>B)))I))"*J**C*]*vs*****{*>*++++y,v;, E,x,{BUxv5L'5N)5<*5T*5i |,    v iyyy v{{  9yg" #y-hy(eyKv4v<KvSai|v+ ,yL{2 2rs$+,2w=D N+T[e2 4 H08|` ?T]x0@4 T 4H\0pPpP0(P<pPt 0@P`p(<Pdx @`,@Th |@`@ !l $  @8  A   5  4  =   5 & P' . 8 5@A 9P - `) A  5X ` +P 2.symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.rela.gnu.build.attributes.unlikely.rela.gnu.build.attributes..text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev.rela.text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev.rodata.str1.1.rodata.str1.8.gcc_except_table.rela.gnu.build.attributes..text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEmmPKcm.rela.text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEmmPKcm.rela.gnu.build.attributes..text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm.rela.text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm.rela.gnu.build.attributes..text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm.rela.text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm.rodata._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm.str1.1.rela.text.unlikely.rela.gnu.build.attributes..text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.rela.text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.rodata._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.str1.8.rela.gnu.build.attributes..text.startup.rela.text.startup.rela.init_array.rodata.rela.data.rel.local.DW.ref.__gxx_personality_v0.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@BMPBN`BOtBBB BPBBQ BBR'|,"@hB -|-3-@ =-8@0BST0bT0(]@0B|0|0(|@H0B0@x0Bp1!@B@21O22^C3hu3p@0Bp4@B!/5*@0B#E6@0B%L7@0B'8J@B)2::@B,p; @0B.%@<@8xB02=*<=}@0B3>r@ B5x>@B7> xB@B:0B-SB BPC4C` /@0 B@`PCs 0eJ0>pcre_scanner.o/ 1575493209 1667 135 100644 16792 ` ELF>X6@@-,"#%H?Hx HPH=fHGHGHHG 1GG(HG0fG8G:HG@GHff.ATUSHHdH%(HD$1HGHL&HnLHt MH,$HwxHubA$SHk(HHC0HC HCC:C(1fC8HC@CHHD$dH3%(u\H[]A\f.HtfHH$HHSHLHH,$HiH=fUSHHHo0HtHHHHk@HtH}HtHH;HH9tH[]f.H[]ÐH0tG8PH fH5H=HHw H9s1ɀ: HH9u@Ð@f.HG H+@HHE1E1dH%(HT$1Hw HL$HHT$dH3%(uH@f.LG@MAVAUATUSII;Xt\IIHcLc HI9XtDI$HH4(H9rHcsLHHH9wIvI;vt*HHHNIvI9Xu[]A\A]A^fHLMD$@fDÐfDHG@Ht{ATUSHc_HHHH;Xt]HI+fDH SHHHNVHuAD$HH9Xt*HuH;uuHHHID$@AD$HH9Xu[]A\@ÐfDAVAULo ATIUSHHH Lw dH%(HD$1fA|$9t-SI|$0IISHHLSSSSSSSSSSH`uA|$:tI|$@tRID$ L)HD$dH3%(uhH []A\A]A^fI|$@L4$D$HwH;wt8L6HFHw뺿HH@H@ID$@HfAWAVAUIATUHSHXH_0dH%(HD$H1HtHHHMHLd$ IT$LLx@HL8H@H@ @(HT$ HT$HT$HIHD$HAML$0HD$(LH1H|$ IL9tH]0HfU8@1HE0fE8HD$HdH3%(ukHX[]A\A]A^A_H|$HL$HD$ HL$0LLHHL$HL$HT$ HNf.H;HHHHfAWAVAUIATUHSHXH_0dH%(HD$H1HtHHHMHLd$ IT$LLx@HL8H@H@ @(HT$ HT$HT$HIHD$HAML$0HD$(LH1H|$ IL9tH]0HfU8@1HE0fE8HD$HdH3%(ukHX[]A\A]A^A_H|$HL$HD$ HL$0LLHHL$HL$HT$ HNf.H;HHHHfH0t G8|PH kH5H=ff.SL HHHs HAQAQAQAQAQAQAQAQAQAQAQAQH`t{8u H[DH߈D$D$H[ GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA$3h864 GA$3h864basic_string::_M_createpcre_scanner.ccskip_ != NULLbasic_string::_M_construct null not valid GA* GA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA!AWHAVAUATIUSHHHoL/HL)L)H+H4IH9LHT$H $H $HT$IIH@rHLHqL9t;LLfL DBHHLIDAH9uHCL)HID H9t;HHfDBL HHLIDAH9uH)HUHHDMtLH$H$M4$M|$ID$H[]A\A]A^A_fHH9HuE1E1HI GA* GA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA!AWHAVAUATIUSHHHoL/HL)L)H+H4IH9LHT$H $H $HT$IIH@rHLHqL9t;LLfL DBHHLIDAH9uHCL)HID H9t;HHfDBL HHLIDAH9uH)HUHHDMtLH$H$M4$M|$ID$H[]A\A]A^A_fHH9HuE1E1HIH|$ IL9tH;I9tH߾HHH|$ IL9tH;I9tH߾HHY0Y0void pcrecpp::Scanner::EnableSkip()void pcrecpp::Scanner::DisableSkip()GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzRx R0D0DFAA G0  AABK 0xwEAG R AAO DAA0Q1 QH C A HqFEB B(D0A8GP 8A0A(B BBBC DPSBB A(A0f (A BBBJ X,OAA oABEHqFEB B(D0A8GP 8A0A(B BBBC lFBF D(A0NPhXL`JhApAxAAAAAAAIPt 0A(A BBBC zPLRx P$FBB E(A0D8D 8A0A(B BBBD ,zPLRx 45PFBB E(A0D8D 8A0A(B BBBD 54UPgEU B(B0B8B@BHBPBXB`BhBpBxBI N AF UA' 7Tu!@%Pq\q d565!$!( .D   "$%&'(Ukq D Dp 0Appwpw0 14` RpQ{"q:"qBe|  !"% ,     4 g.annobin_pcre_scanner.cc.annobin_pcre_scanner.cc_end.annobin_pcre_scanner.cc.hot.annobin_pcre_scanner.cc_end.hot.annobin_pcre_scanner.cc.unlikely.annobin_pcre_scanner.cc_end.unlikely_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm.isra.40.constprop.54_ZZN7pcrecpp7Scanner11DisableSkipEvE19__PRETTY_FUNCTION__.annobin__ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.start.annobin__ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.end.annobin__ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.start.annobin__ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.end_ZN7pcrecpp7Scanner17SetSkipExpressionEPKc.cold.55_ZN7pcrecpp7Scanner4SkipEPKc.cold.56_ZZN7pcrecpp7Scanner10EnableSkipEvE19__PRETTY_FUNCTION__.LC0.LC1.LC2.LC3.text.hot.group.text.unlikely.group.text.unlikely..group.text.hot..group_GLOBAL_OFFSET_TABLE__Znwm_ZSt20__throw_length_errorPKc_ZN7pcrecpp7ScannerC2Ev_ZN7pcrecpp7ScannerC1Ev_ZN7pcrecpp7ScannerC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmemcpy_ZSt19__throw_logic_errorPKc__stack_chk_fail_ZN7pcrecpp7ScannerC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZN7pcrecpp7ScannerD2Ev_ZN7pcrecpp2RED1Ev_ZdlPvm_ZdlPv_ZN7pcrecpp7ScannerD1Ev_ZN7pcrecpp7Scanner11DisableSkipEv__assert_fail_ZNK7pcrecpp7Scanner10LineNumberEv_ZNK7pcrecpp7Scanner6OffsetEv_ZNK7pcrecpp7Scanner9LookingAtERKNS_2REE_ZNK7pcrecpp2RE7DoMatchERKNS_11StringPieceENS0_6AnchorEPiPKPKNS_3ArgEi_ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT__ZN7pcrecpp7Scanner11GetCommentsEiiPSt6vectorINS_11StringPieceESaIS2_EE_ZN7pcrecpp7Scanner15GetNextCommentsEPSt6vectorINS_11StringPieceESaIS2_EE_ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT__ZN7pcrecpp7Scanner11ConsumeSkipEv_ZN7pcrecpp2RE6no_argE_ZNK7pcrecpp2RE7ConsumeEPNS_11StringPieceERKNS_3ArgES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5__ZN7pcrecpp7Scanner17SetSkipExpressionEPKcDW.ref.__gxx_personality_v0strlen_ZN7pcrecpp2RE4InitERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKNS_10RE_OptionsE_Unwind_Resume_ZN7pcrecpp7Scanner4SkipEPKc_ZN7pcrecpp7Scanner10EnableSkipEv_ZN7pcrecpp7Scanner7ConsumeERKNS_2REERKNS_3ArgES6_S6_8M<`e=j>ABCB<FJ>gKK&PyQ7N>UAbBz7TU CO<>AB*7fTUCO0<b>FPQ O 7CnEz2 '     V7 C V7 CCC)B1WECRC_BgWV 4 Hp|p `pTS S,5DM!6:.symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.rela.gnu.build.attributes.unlikely.rodata.str1.1.rodata.str1.8.rela.gnu.build.attributes..text._ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.rela.text._ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.rela.gnu.build.attributes..text._ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.rela.text._ZNSt6vectorIN7pcrecpp11StringPieceESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_.rela.text.unlikely.gcc_except_table.rodata.rela.data.rel.local.DW.ref.__gxx_personality_v0.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@*P*`*Kt*N * *S*'' "@8)*- 3 = 8@H.0* S b (]@x.0*  (|@.0*2 628 *d @.0*0 qW@/0*@8/0*pqq@h/0*k@/*MBe % @X0*"Q0-S=Z@Pm}@p0X*(+6 ( 2/0 1575493209 1667 135 100644 7888 ` ELF>@@)( !AUIATUSH8L&Hc^dH%(HD$(1HLHUHHH$t MHwsHu]A$D$HEH\$LHT$H4$H<$HHH9tHL$(dH3 %(HuWH8[]A\A]HEHtDx:H{H\$H$HLHH$sH=H=H GA$3p864GA$gcc 8.3.1 20190507 GA*GOWDGA*GA!stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA$3h864 GA$3h864basic_string::_M_construct null not validbasic_string::_M_createH<$HH9tH uB GA* GA!stack_realignGA!stack_clashGA*cf_protectionGA* GA*GOWDGA!HH=H=HHH5GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4) GNUGNUzPLRx <$FEA A(D` (A ABBD $zPLRx `,zRx 2HW  ? ` =2z2    !"#$#!?U**BO.annobin_pcre_stringpiece.cc.annobin_pcre_stringpiece.cc_end.annobin_pcre_stringpiece.cc.hot.annobin_pcre_stringpiece.cc_end.hot.annobin_pcre_stringpiece.cc.unlikely.annobin_pcre_stringpiece.cc_end.unlikely_ZlsRSoRKN7pcrecpp11StringPieceE.cold.23.annobin__GLOBAL__sub_I__ZlsRSoRKN7pcrecpp11StringPieceE.start.annobin__GLOBAL__sub_I__ZlsRSoRKN7pcrecpp11StringPieceE.end_GLOBAL__sub_I__ZlsRSoRKN7pcrecpp11StringPieceE_ZStL8__ioinit.LC0.LC1.text.hot.group.text.unlikely.group.text.unlikely..group.text.startup.group.text.hot..groupDW.ref.__gxx_personality_v0_GLOBAL_OFFSET_TABLE__ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l_ZdlPv_Znwmmemcpy_ZSt19__throw_logic_errorPKc__stack_chk_fail_ZSt20__throw_length_errorPKc_Unwind_Resume_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev__dso_handle__cxa_atexitv1234567   29 2 :*;"<).=8/(1 s/ .symtab.strtab.shstrtab.group.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.rela.gnu.build.attributes.unlikely.rodata.str1.8.rodata.str1.1.rela.text.unlikely.gcc_except_table.rela.gnu.build.attributes..text.startup.rela.text.startup.rela.init_array.rela.data.rel.local.DW.ref.__gxx_personality_v0.comment.note.gnu.property.note.GNU-stack.rela.eh_frame@&P&` &l& &/&'"@&-3=8@0& SLbL(]@0&tt(|@0&2*2@(0&@X0&2 @&% @&6 1@0&b0(-SUkXP~@H&$x'. H \